helia 5.2.1-eaf789a → 5.3.0-325b36f

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,22 +1,22 @@
1
1
  (function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.Helia = factory()}(typeof self !== 'undefined' ? self : this, function () {
2
- "use strict";var Helia=(()=>{var Cx=Object.create;var hl=Object.defineProperty;var kx=Object.getOwnPropertyDescriptor;var Px=Object.getOwnPropertyNames;var Rx=Object.getPrototypeOf,Dx=Object.prototype.hasOwnProperty;var Pt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Xe=(r,e)=>{for(var t in e)hl(r,t,{get:e[t],enumerable:!0})},M4=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Px(e))!Dx.call(r,o)&&o!==t&&hl(r,o,{get:()=>e[o],enumerable:!(n=kx(e,o))||n.enumerable});return r};var Ur=(r,e,t)=>(t=r!=null?Cx(Rx(r)):{},M4(e||!r||!r.__esModule?hl(t,"default",{value:r,enumerable:!0}):t,r)),Lx=r=>M4(hl({},"__esModule",{value:!0}),r);var zg=Pt(As=>{"use strict";var BS="[object ArrayBuffer]",Vn=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===BS}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}},P2="string",OS=/^[0-9a-f\s]+$/i,MS=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,US=/^[a-zA-Z0-9-_]+$/,nu=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=Vn.toUint8Array(e),n="";for(let i=0;i<t.length;i++)n+=String.fromCharCode(t[i]);return decodeURIComponent(escape(n))}},_r=class{static toString(e,t=!1){let n=Vn.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}},ou=class r{static isHex(e){return typeof e===P2&&OS.test(e)}static isBase64(e){return typeof e===P2&&MS.test(e)}static isBase64Url(e){return typeof e===P2&&US.test(e)}static ToString(e,t="utf8"){let n=Vn.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 _r.toString(n,!0);case"utf16":case"utf16be":return _r.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 _r.fromString(e,!0);case"utf16":case"utf16be":return _r.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=Vn.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 nu.fromString(e);case"utf16":case"utf16be":return _r.fromString(e);case"utf16le":case"usc2":return _r.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 nu.toString(e);case"utf16":case"utf16be":return _r.toString(e);case"utf16le":case"usc2":return _r.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=Vn.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=Vn.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 _r.toString(e,t)}static FromUtf16String(e,t=!1){return _r.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,"")||""}};ou.DEFAULT_UTF8_ENCODING="utf8";function FS(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 VS(...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 $S(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}As.BufferSourceConverter=Vn;As.Convert=ou;As.assign=FS;As.combine=VS;As.isEqual=$S});var y8=Pt((aF,tp)=>{"use strict";var PA=Object.prototype.hasOwnProperty,Qt="~";function dc(){}Object.create&&(dc.prototype=Object.create(null),new dc().__proto__||(Qt=!1));function RA(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function g8(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new RA(t,n||r,o),s=Qt?Qt+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 sd(r,e){--r._eventsCount===0?r._events=new dc:delete r._events[e]}function Ft(){this._events=new dc,this._eventsCount=0}Ft.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)PA.call(t,n)&&e.push(Qt?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Ft.prototype.listeners=function(e){var t=Qt?Qt+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};Ft.prototype.listenerCount=function(e){var t=Qt?Qt+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Ft.prototype.emit=function(e,t,n,o,i,s){var a=Qt?Qt+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,u,d;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(d=1,u=new Array(l-1);d<l;d++)u[d-1]=arguments[d];c.fn.apply(c.context,u)}else{var f=c.length,h;for(d=0;d<f;d++)switch(c[d].once&&this.removeListener(e,c[d].fn,void 0,!0),l){case 1:c[d].fn.call(c[d].context);break;case 2:c[d].fn.call(c[d].context,t);break;case 3:c[d].fn.call(c[d].context,t,n);break;case 4:c[d].fn.call(c[d].context,t,n,o);break;default:if(!u)for(h=1,u=new Array(l-1);h<l;h++)u[h-1]=arguments[h];c[d].fn.apply(c[d].context,u)}}return!0};Ft.prototype.on=function(e,t,n){return g8(this,e,t,n,!1)};Ft.prototype.once=function(e,t,n){return g8(this,e,t,n,!0)};Ft.prototype.removeListener=function(e,t,n,o){var i=Qt?Qt+e:e;if(!this._events[i])return this;if(!t)return sd(this,i),this;var s=this._events[i];if(s.fn)s.fn===t&&(!o||s.once)&&(!n||s.context===n)&&sd(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:sd(this,i)}return this};Ft.prototype.removeAllListeners=function(e){var t;return e?(t=Qt?Qt+e:e,this._events[t]&&sd(this,t)):(this._events=new dc,this._eventsCount=0),this};Ft.prototype.off=Ft.prototype.removeListener;Ft.prototype.addListener=Ft.prototype.on;Ft.prefixed=Qt;Ft.EventEmitter=Ft;typeof tp<"u"&&(tp.exports=Ft)});var E8=Pt((PF,v8)=>{v8.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 c7=Pt(Ac=>{(function(){var r,e,t,n,o,i,s,a;a=function(c){var l,u,d,f;return l=(c&255<<24)>>>24,u=(c&255<<16)>>>16,d=(c&65280)>>>8,f=c&255,[l,u,d,f].join(".")},s=function(c){var l,u,d,f,h,p;for(l=[],d=f=0;f<=3&&c.length!==0;d=++f){if(d>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}p=e(c),h=p[0],u=p[1],c=c.substring(u),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,u,d,f,h;for(f=0,l=10,u="9",d=0,c.length>1&&c[d]==="0"&&(c[d+1]==="x"||c[d+1]==="X"?(d+=2,l=16):"0"<=c[d+1]&&c[d+1]<="9"&&(d++,l=8,u="7")),h=d;d<c.length;){if("0"<=c[d]&&c[d]<=u)f=f*l+(t(c[d])-n)>>>0;else if(l===16)if("a"<=c[d]&&c[d]<="f")f=f*l+(10+t(c[d])-i)>>>0;else if("A"<=c[d]&&c[d]<="F")f=f*l+(10+t(c[d])-o)>>>0;else break;else break;if(f>4294967295)throw new Error("too large");d++}if(d===h)throw new Error("empty octet");return[f,d]},r=function(){function c(l,u){var d,f,h,p;if(typeof l!="string")throw new Error("Missing `net' parameter");if(u||(p=l.split("/",2),l=p[0],u=p[1]),u||(u=32),typeof u=="string"&&u.indexOf(".")>-1){try{this.maskLong=s(u)}catch(g){throw d=g,new Error("Invalid mask: "+u)}for(f=h=32;h>=0;f=--h)if(this.maskLong===4294967295<<32-f>>>0){this.bitmask=f;break}}else if(u||u===0)this.bitmask=parseInt(u,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(g){throw d=g,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+u);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 u,d,f;for(f=s(this.first),d=s(this.last),u=0;f<=d;)l(a(f),f,u),u++,f++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c}(),Ac.ip2long=s,Ac.long2ip=a,Ac.Netmask=r}).call(Ac)});var a1=Pt((yz,Im)=>{var gz=function(){typeof Im<"u"&&(Im.exports=g);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(S){var A=S-S%1;return A==0&&(S<0||S===0&&1/S!=1/0)?-0:A},u=g.prototype,d=(g.fromDate=function(S){return new g(+S)},g.fromInt64BE=I(0,1,2,3,0,4),g.fromInt64LE=I(3,2,1,0,4,0),g.fromString=function(L){var A,F=new g,L=(L+="").replace(/^\s*[+\-]?\d+/,function(K){var K=+K,C=1970+(K-1970)%400;return F.year=K-C,C}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(M,K,C){return K<0&&(C*=-1),A=6e4*(60*+K+ +C),""}).replace(/\.\d+$/,function(M){return F.nano=+(M+c).substr(1,9),""}).split(/\D+/);if(1<L.length?L[1]--:L[1]=0,F.time=A=Date.UTC.apply(Date,L)-(A||0),isNaN(A))throw new TypeError("Invalid Date");return m(F)},g.fromTimeT=function(S){return x(S,0)},u.year=0,u.time=0,u.nano=0,u.addNano=function(S){return this.nano+=+S||0,this},u.getNano=function(){var S=m(this);return(S.time%1e3*a+ +S.nano+1e9)%1e9},u.getTimeT=function(){var A=m(this),S=Math.floor(A.time/1e3),A=A.year;return A&&(S+=A*t*r/e),S},u.getYear=function(){return this.toDate().getUTCFullYear()+this.year},u.toDate=function(){return y(m(this).time)},u.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},u.toString=function(S){var A=this,F=A.toDate(),L={H:function(){return D(F.getUTCHours())},L:function(){return R(F.getUTCMilliseconds(),3)},M:function(){return D(F.getUTCMinutes())},N:function(){return R(A.getNano(),9)},S:function(){return D(F.getUTCSeconds())},Y:function(){var M=A.getYear();return 999999<M?"+"+M:9999<M?"+"+R(M,6):0<=M?R(M,4):-999999<=M?"-"+R(-M,6):M},a:function(){return h[F.getUTCDay()]},b:function(){return f[F.getUTCMonth()]},d:function(){return D(F.getUTCDate())},e:function(){return function(M){return(9<M?"":" ")+(0|M)}(F.getUTCDate())},m:function(){return D(F.getUTCMonth()+1)}};return function M(K){return K.replace(/%./g,function(C){var E=C[1],P=p[E],E=L[E];return P?M(P):E?E():C})}(S||d)},u.writeInt64BE=w(0,1,2,3,0,4),u.writeInt64LE=w(3,2,1,0,4,0),"%Y-%m-%dT%H:%M:%S.%NZ"),f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],h=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],p={"%":"%",F:"%Y-%m-%d",n:`
3
- `,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return g;function g(S,A,F){var L=this;if(!(L instanceof g))return new g(S,A,F);L.time=+S||0,L.nano=+A||0,L.year=+F||0,m(L)}function m(S){var A,F,L,M=S.year,K=S.time,C=S.nano,P=((C<0||a<=C)&&(C-=(F=Math.floor(C/a))*a,K+=F,F=1),M%e);return(K<-i||i<K||P)&&((A=l(K/o))&&(M+=A*e,K-=A*o),(L=y(K)).setUTCFullYear(P+L.getUTCFullYear()),L=(K=+L)+(A=l((M-=P)/e))*o,A&&-i<=L&&L<=i&&(M-=A*e,K=L),F=1),F&&(S.year=M,S.time=K,S.nano=C),S}function y(S){var A=new Date(0);return A.setTime(S),A}function x(M,L){M=+M||0;var F=l((L=(L|0)*s)/n)+l(M/n),L=L%n+M%n,M=l(L/n);return M&&(F+=M,L-=M*n),new g(1e3*L,0,F*e)}function w(S,A,F,L,M,K){return function(P,E){var _=m(this);P=P||new Array(8),B(P,E|=0);var T=Math.floor(_.time/1e3),_=_.year*(t*r/e),v=l(_/s)+l(T/s),_=_%s+T%s,T=Math.floor(_/s);return T&&(v+=T,_-=T*s),C(P,E+M,v),C(P,E+K,_),P};function C(P,E,v){P[E+S]=v>>24&255,P[E+A]=v>>16&255,P[E+F]=v>>8&255,P[E+L]=255&v}}function I(S,A,F,L,M,K){return function(P,E){B(P,E|=0);var v=C(P,E+M);return x(C(P,E+K),v)};function C(P,E){return 16777216*P[E+S]+(P[E+A]<<16|P[E+F]<<8|P[E+L])}}function B(S,A){if(S=S&&S.length,S==null)throw new TypeError("Invalid Buffer");if(S<A+8)throw new RangeError("Out of range")}function D(S){return(9<S?"":"0")+(0|S)}function R(S,A){return(c+(0|S)).substr(-A)}}()});var hw=Pt((Iie,fw)=>{"use strict";fw.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var bw=Pt((yw,ww)=>{"use strict";var rh=hw(),{hasOwnProperty:mw}=Object.prototype,{propertyIsEnumerable:rk}=Object,ua=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),nk=yw,pw={concatArrays:!1,ignoreUndefined:!1},nh=r=>{let e=[];for(let t in r)mw.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)rk.call(r,n)&&e.push(n)}return e};function da(r){return Array.isArray(r)?ok(r):rh(r)?ik(r):r}function ok(r){let e=r.slice(0,0);return nh(r).forEach(t=>{ua(e,t,da(r[t]))}),e}function ik(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return nh(r).forEach(t=>{ua(e,t,da(r[t]))}),e}var gw=(r,e,t,n)=>(t.forEach(o=>{typeof e[o]>"u"&&n.ignoreUndefined||(o in r&&r[o]!==Object.getPrototypeOf(r)?ua(r,o,O3(r[o],e[o],n)):ua(r,o,da(e[o])))}),r),sk=(r,e,t)=>{let n=r.slice(0,0),o=0;return[r,e].forEach(i=>{let s=[];for(let a=0;a<i.length;a++)mw.call(i,a)&&(s.push(String(a)),i===r?ua(n,o++,i[a]):ua(n,o++,da(i[a])));n=gw(n,i,nh(i).filter(a=>!s.includes(a)),t)}),n};function O3(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?sk(r,e,t):!rh(e)||!rh(r)?da(e):gw(r,e,nh(e),t)}ww.exports=function(...r){let e=O3(da(pw),this!==nk&&this||{},pw),t={_:{}};for(let n of r)if(n!==void 0){if(!rh(n))throw new TypeError("`"+n+"` is not an Option Object");t=O3(t,{_:n},e)}return t._}});var Ew=Pt((_ie,vw)=>{"use strict";function ak(r){return r>=55296&&r<=56319}function ck(r){return r>=56320&&r<=57343}vw.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)&&ck(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 Aw=Pt((Cie,Sw)=>{"use strict";function lk(r){return r>=55296&&r<=56319}function uk(r){return r>=56320&&r<=57343}Sw.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),uk(o)?i!=null&&lk(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 Tw=Pt((kie,Iw)=>{"use strict";var dk=Ew(),fk=Aw();Iw.exports=dk.bind(null,fk)});var kw=Pt((Pie,Cw)=>{"use strict";var hk=Tw(),pk=/[\/\?<>\\:\*\|"]/g,mk=/[\x00-\x1f\x80-\x9f]/g,gk=/^\.+$/,yk=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,wk=/[\. ]+$/;function _w(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(pk,e).replace(mk,e).replace(gk,e).replace(yk,e).replace(wk,e);return hk(t,255)}Cw.exports=function(r,e){var t=e&&e.replacement||"",n=_w(r,t);return t===""?n:_w(n,"")}});var bb=Pt(Th=>{"use strict";Object.defineProperty(Th,"__esModule",{value:!0});var o4=class{constructor(){this.pullQueue=[],this.pushQueue=[],this.eventHandlers={},this.isPaused=!1,this.isStopped=!1}push(e){if(this.isStopped)return;let t={value:e,done:!1};if(this.pullQueue.length){let n=this.pullQueue.shift();n&&n.resolve(t)}else this.pushQueue.push(Promise.resolve(t)),this.highWaterMark!==void 0&&this.pushQueue.length>=this.highWaterMark&&!this.isPaused&&(this.isPaused=!0,this.eventHandlers.highWater?this.eventHandlers.highWater():console&&console.warn(`EventIterator queue reached ${this.pushQueue.length} items`))}stop(){if(!this.isStopped){this.isStopped=!0,this.remove();for(let e of this.pullQueue)e.resolve({value:void 0,done:!0});this.pullQueue.length=0}}fail(e){if(!this.isStopped)if(this.isStopped=!0,this.remove(),this.pullQueue.length){for(let t of this.pullQueue)t.reject(e);this.pullQueue.length=0}else{let t=Promise.reject(e);t.catch(()=>{}),this.pushQueue.push(t)}}remove(){Promise.resolve().then(()=>{this.removeCallback&&this.removeCallback()})}[Symbol.asyncIterator](){return{next:e=>{let t=this.pushQueue.shift();return t?(this.lowWaterMark!==void 0&&this.pushQueue.length<=this.lowWaterMark&&this.isPaused&&(this.isPaused=!1,this.eventHandlers.lowWater&&this.eventHandlers.lowWater()),t):this.isStopped?Promise.resolve({value:void 0,done:!0}):new Promise((n,o)=>{this.pullQueue.push({resolve:n,reject:o})})},return:()=>(this.isStopped=!0,this.pushQueue.length=0,this.remove(),Promise.resolve({value:void 0,done:!0}))}}},Ih=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let o=new o4;o.highWaterMark=t,o.lowWaterMark=n,o.removeCallback=e({push:i=>o.push(i),stop:()=>o.stop(),fail:i=>o.fail(i),on:(i,s)=>{o.eventHandlers[i]=s}})||(()=>{}),this[Symbol.asyncIterator]=()=>o[Symbol.asyncIterator](),Object.freeze(this)}};Th.EventIterator=Ih;Th.default=Ih});var xb=Pt(sl=>{"use strict";Object.defineProperty(sl,"__esModule",{value:!0});var i4=bb();sl.EventIterator=i4.EventIterator;function gP(r,e,t){return new i4.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}sl.subscribe=gP;sl.default=i4.EventIterator});var sx=Pt((A1e,ix)=>{function Mr(r,e){typeof e=="boolean"&&(e={forever:e}),this._originalTimeouts=JSON.parse(JSON.stringify(r)),this._timeouts=r,this._options=e||{},this._maxRetryTime=e&&e.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._timer=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}ix.exports=Mr;Mr.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts.slice(0)};Mr.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timer&&clearTimeout(this._timer),this._timeouts=[],this._cachedTimeouts=null};Mr.prototype.retry=function(r){if(this._timeout&&clearTimeout(this._timeout),!r)return!1;var e=new Date().getTime();if(r&&e-this._operationStart>=this._maxRetryTime)return this._errors.push(r),this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(r);var t=this._timeouts.shift();if(t===void 0)if(this._cachedTimeouts)this._errors.splice(0,this._errors.length-1),t=this._cachedTimeouts.slice(-1);else return!1;var n=this;return this._timer=setTimeout(function(){n._attempts++,n._operationTimeoutCb&&(n._timeout=setTimeout(function(){n._operationTimeoutCb(n._attempts)},n._operationTimeout),n._options.unref&&n._timeout.unref()),n._fn(n._attempts)},t),this._options.unref&&this._timer.unref(),!0};Mr.prototype.attempt=function(r,e){this._fn=r,e&&(e.timeout&&(this._operationTimeout=e.timeout),e.cb&&(this._operationTimeoutCb=e.cb));var t=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){t._operationTimeoutCb()},t._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};Mr.prototype.try=function(r){console.log("Using RetryOperation.try() is deprecated"),this.attempt(r)};Mr.prototype.start=function(r){console.log("Using RetryOperation.start() is deprecated"),this.attempt(r)};Mr.prototype.start=Mr.prototype.try;Mr.prototype.errors=function(){return this._errors};Mr.prototype.attempts=function(){return this._attempts};Mr.prototype.mainError=function(){if(this._errors.length===0)return null;for(var r={},e=null,t=0,n=0;n<this._errors.length;n++){var o=this._errors[n],i=o.message,s=(r[i]||0)+1;r[i]=s,s>=t&&(e=o,t=s)}return e}});var ax=Pt(ji=>{var WP=sx();ji.operation=function(r){var e=ji.timeouts(r);return new WP(e,{forever:r&&(r.forever||r.retries===1/0),unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};ji.timeouts=function(r){if(r instanceof Array)return[].concat(r);var e={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var t in r)e[t]=r[t];if(e.minTimeout>e.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var n=[],o=0;o<e.retries;o++)n.push(this.createTimeout(o,e));return r&&r.forever&&!n.length&&n.push(this.createTimeout(o,e)),n.sort(function(i,s){return i-s}),n};ji.createTimeout=function(r,e){var t=e.randomize?Math.random()+1:1,n=Math.round(t*Math.max(e.minTimeout,1)*Math.pow(e.factor,r));return n=Math.min(n,e.maxTimeout),n};ji.wrap=function(r,e,t){if(e instanceof Array&&(t=e,e=null),!t){t=[];for(var n in r)typeof r[n]=="function"&&t.push(n)}for(var o=0;o<t.length;o++){var i=t[o],s=r[i];r[i]=function(c){var l=ji.operation(e),u=Array.prototype.slice.call(arguments,1),d=u.pop();u.push(function(f){l.retry(f)||(f&&(arguments[0]=l.mainError()),d.apply(this,arguments))}),l.attempt(function(){c.apply(r,u)})}.bind(r,s),r[i].options=e}}});var lx=Pt((T1e,cx)=>{cx.exports=ax()});var pR={};Xe(pR,{DEFAULT_SESSION_MAX_PROVIDERS:()=>Ep,DEFAULT_SESSION_MIN_PROVIDERS:()=>vp,InsufficientProvidersError:()=>xc,NoRoutersAvailableError:()=>No,UnknownCodecError:()=>Ec,UnknownHashAlgorithmError:()=>vc,createHelia:()=>fR,libp2pDefaults:()=>Ch});var U4=Symbol.for("@libp2p/connection");var hn=Symbol.for("@libp2p/content-routing");var Zo=Symbol.for("@libp2p/peer-discovery");var pl=Symbol.for("@libp2p/peer-id");function ml(r){return!!r?.[pl]}var pn=Symbol.for("@libp2p/peer-routing");var so="keep-alive";var co=Symbol.for("@libp2p/transport");var ao;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(ao||(ao={}));var Kt=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},gl=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}};var k=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},Rn=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},Sa=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}};var yl=class extends Error{static name="ConnectionClosingError";constructor(e="The connection is closing"){super(e),this.name="ConnectionClosingError"}},Ji=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},es=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},mn=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},wl=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}},Jo=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},Oe=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},ts=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},lo=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},bl=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},uo=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},Dn=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},he=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},xl=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},gn=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},Fr=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var Ln=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},ei=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},rs=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},vl=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},fo=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},Vr=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var me=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))}};function El(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function yt(...r){let e=[];for(let t of r)El(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 Rt(...r){let e=[];for(let t of r)El(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 Se=Symbol.for("@libp2p/service-capabilities"),fr=Symbol.for("@libp2p/service-dependencies");function le(r){let e=new globalThis.AbortController;function t(){e.abort();for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}for(let i of r){if(i?.aborted===!0){t();break}i?.addEventListener!=null&&i.addEventListener("abort",t)}function n(){for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}let o=e.signal;return o.clear=n,o}function J(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var Sl=class{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||e-1&e)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(e),this.mask=e-1,this.top=0,this.btm=0,this.next=null}push(e){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=e,this.top=this.top+1&this.mask,!0)}shift(){let e=this.buffer[this.btm];if(e!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,e}isEmpty(){return this.buffer[this.btm]===void 0}},ns=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new Sl(this.hwm),this.tail=this.head,this.size=0}calculateSize(e){return e?.byteLength!=null?e.byteLength:1}push(e){if(e?.value!=null&&(this.size+=this.calculateSize(e.value)),!this.head.push(e)){let t=this.head;this.head=t.next=new Sl(2*this.head.buffer.length),this.head.push(e)}}shift(){let e=this.tail.shift();if(e===void 0&&this.tail.next!=null){let t=this.tail.next;this.tail.next=null,this.tail=t,e=this.tail.shift()}return e?.value!=null&&(this.size-=this.calculateSize(e.value)),e}isEmpty(){return this.head.isEmpty()}};var f0=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function Dt(r={}){return Nx(t=>{let n=t.shift();if(n==null)return{done:!0};if(n.error!=null)throw n.error;return{done:n.done===!0,value:n.value}},r)}function Nx(r,e){e=e??{};let t=e.onEnd,n=new ns,o,i,s,a=J(),c=async()=>{try{return n.isEmpty()?s?{done:!0}:await new Promise((m,y)=>{i=x=>{i=null,n.push(x);try{m(r(n))}catch(w){y(w)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=J()})}},l=m=>i!=null?i(m):(n.push(m),o),u=m=>(n=new ns,i!=null?i({error:m}):(n.push({error:m}),o)),d=m=>{if(s)return o;if(e?.objectMode!==!0&&m?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:m})},f=m=>s?o:(s=!0,m!=null?u(m):l({done:!0})),h=()=>(n=new ns,f(),{done:!0}),p=m=>(f(m),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:h,throw:p,push:d,end:f,get readableLength(){return n.size},onEmpty:async m=>{let y=m?.signal;if(y?.throwIfAborted(),n.isEmpty())return;let x,w;y!=null&&(x=new Promise((I,B)=>{w=()=>{B(new f0)},y.addEventListener("abort",w)}));try{await Promise.race([a.promise,x])}finally{w!=null&&y!=null&&y?.removeEventListener("abort",w)}}},t==null)return o;let g=o;return o={[Symbol.asyncIterator](){return this},next(){return g.next()},throw(m){return g.throw(m),t!=null&&(t(m),t=void 0),{done:!0}},return(){return g.return(),t!=null&&(t(),t=void 0),{done:!0}},push:d,end(m){return g.end(m),t!=null&&(t(m),t=void 0),o},get readableLength(){return g.readableLength},onEmpty:m=>g.onEmpty(m)},o}var h0=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.name="AbortError",this.code=t??"ABORT_ERR"}};async function dt(r,e,t,n){let o=new h0(n?.errorMessage,n?.errorCode);return t?.aborted===!0?Promise.reject(o):new Promise((i,s)=>{function a(){t?.removeEventListener("abort",u),r.removeEventListener(e,c),n?.errorEvent!=null&&r.removeEventListener(n.errorEvent,l)}let c=d=>{try{if(n?.filter?.(d)===!1)return}catch(f){a(),s(f);return}a(),i(d)},l=d=>{a(),s(d.detail)},u=()=>{a(),s(o)};t?.addEventListener("abort",u),r.addEventListener(e,c),n?.errorEvent!=null&&r.addEventListener(n.errorEvent,l)})}var Al=class extends Error{remainingPoints;msBeforeNext;consumedPoints;isFirstInDuration;constructor(e="Rate limit exceeded",t){super(e),this.name="RateLimitError",this.remainingPoints=t.remainingPoints,this.msBeforeNext=t.msBeforeNext,this.consumedPoints=t.consumedPoints,this.isFirstInDuration=t.isFirstInDuration}},Il=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var Tl=class extends Error{type;code;constructor(e,t,n){super(e??"The operation was aborted"),this.type="aborted",this.name=n??"AbortError",this.code=t??"ABORT_ERR"}};async function et(r,e,t){if(e==null)return r;if(e.aborted)return Promise.reject(new Tl(t?.errorMessage,t?.errorCode,t?.errorName));let n,o=new Tl(t?.errorMessage,t?.errorCode,t?.errorName);try{return await Promise.race([r,new Promise((i,s)=>{n=()=>{s(o)},e.addEventListener("abort",n)})])}finally{n!=null&&e.removeEventListener("abort",n)}}var _l=class{deferred;signal;constructor(e){this.signal=e,this.deferred=J(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new Kt)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function Bx(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var Cl=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=Bx(),this.status="queued",this.fn=e,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,this.controller.signal,this.onAbort=this.onAbort.bind(this)}abort(e){this.controller.abort(e)}onAbort(){this.recipients.reduce((t,n)=>t&&n.signal?.aborted===!0,!0)&&(this.controller.abort(new Kt),this.cleanup())}async join(e={}){let t=new _l(e.signal);return this.recipients.push(t),e.signal?.addEventListener("abort",this.onAbort),t.deferred.promise}async run(){this.status="running",this.timeline.started=Date.now();try{this.controller.signal.throwIfAborted();let e=await et(this.fn({...this.options??{},signal:this.controller.signal}),this.controller.signal);this.recipients.forEach(t=>{t.deferred.resolve(e)}),this.status="complete"}catch(e){this.recipients.forEach(t=>{t.deferred.reject(e)}),this.status="errored"}finally{this.timeline.finished=Date.now(),this.cleanup()}}cleanup(){this.recipients.forEach(e=>{e.cleanup(),e.signal?.removeEventListener("abort",this.onAbort)})}};var Ht=class extends me{concurrency;maxSize;queue;pending;sort;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,e.metricName!=null&&e.metrics?.registerMetricGroup(e.metricName,{calculate:()=>({size:this.queue.length,running:this.pending,queued:this.queue.length-this.pending})}),this.sort=e.sort,this.queue=[]}tryToStartAnother(){if(this.size===0)return queueMicrotask(()=>{this.safeDispatchEvent("empty")}),this.running===0&&queueMicrotask(()=>{this.safeDispatchEvent("idle")}),!1;if(this.pending<this.concurrency){let e;for(let t of this.queue)if(t.status==="queued"){e=t;break}return e==null?!1:(this.safeDispatchEvent("active"),this.pending++,e.run().finally(()=>{for(let t=0;t<this.queue.length;t++)if(this.queue[t]===e){this.queue.splice(t,1);break}this.pending--,this.tryToStartAnother(),this.safeDispatchEvent("next")}),!0)}return!1}enqueue(e){this.queue.push(e),this.sort!=null&&this.queue.sort(this.sort)}async add(e,t){if(t?.signal?.throwIfAborted(),this.size===this.maxSize)throw new Il;let n=new Cl(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.tryToStartAnother(),n.join(t).then(o=>(this.safeDispatchEvent("completed",{detail:o}),this.safeDispatchEvent("success",{detail:{job:n,result:o}}),o)).catch(o=>{if(n.status==="queued"){for(let i=0;i<this.queue.length;i++)if(this.queue[i]===n){this.queue.splice(i,1);break}}throw this.safeDispatchEvent("error",{detail:o}),this.safeDispatchEvent("failure",{detail:{job:n,error:o}}),o})}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new Kt)}),this.clear()}async onEmpty(e){this.size!==0&&await dt(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await dt(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await dt(this,"idle",e?.signal)}get size(){return this.queue.length}get queued(){return this.queue.length-this.pending}get running(){return this.pending}async*toGenerator(e){e?.signal?.throwIfAborted();let t=Dt({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail)},i=c=>{n(c.detail)},s=()=>{n()},a=()=>{n(new Kt("Queue aborted"))};this.addEventListener("completed",o),this.addEventListener("error",i),this.addEventListener("idle",s),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("error",i),this.removeEventListener("idle",s),e?.signal?.removeEventListener("abort",a),n()}}};var wt=class extends Ht{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};function Ox(r){return r[Symbol.asyncIterator]!=null}function Mx(r){if(Ox(r))return(async()=>{for await(let e of r);})();for(let e of r);}var Lt=Mx;function se(r=0){return new Uint8Array(r)}function Me(r=0){return new Uint8Array(r)}var Ux=Math.pow(2,7),Fx=Math.pow(2,14),Vx=Math.pow(2,21),p0=Math.pow(2,28),m0=Math.pow(2,35),g0=Math.pow(2,42),y0=Math.pow(2,49),_e=128,Nt=127;function ue(r){if(r<Ux)return 1;if(r<Fx)return 2;if(r<Vx)return 3;if(r<p0)return 4;if(r<m0)return 5;if(r<g0)return 6;if(r<y0)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function w0(r,e,t=0){switch(ue(r)){case 8:e[t++]=r&255|_e,r/=128;case 7:e[t++]=r&255|_e,r/=128;case 6:e[t++]=r&255|_e,r/=128;case 5:e[t++]=r&255|_e,r/=128;case 4:e[t++]=r&255|_e,r>>>=7;case 3:e[t++]=r&255|_e,r>>>=7;case 2:e[t++]=r&255|_e,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function $x(r,e,t=0){switch(ue(r)){case 8:e.set(t++,r&255|_e),r/=128;case 7:e.set(t++,r&255|_e),r/=128;case 6:e.set(t++,r&255|_e),r/=128;case 5:e.set(t++,r&255|_e),r/=128;case 4:e.set(t++,r&255|_e),r>>>=7;case 3:e.set(t++,r&255|_e),r>>>=7;case 2:e.set(t++,r&255|_e),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function b0(r,e){let t=r[e],n=0;if(n+=t&Nt,t<_e||(t=r[e+1],n+=(t&Nt)<<7,t<_e)||(t=r[e+2],n+=(t&Nt)<<14,t<_e)||(t=r[e+3],n+=(t&Nt)<<21,t<_e)||(t=r[e+4],n+=(t&Nt)*p0,t<_e)||(t=r[e+5],n+=(t&Nt)*m0,t<_e)||(t=r[e+6],n+=(t&Nt)*g0,t<_e)||(t=r[e+7],n+=(t&Nt)*y0,t<_e))return n;throw new RangeError("Could not decode varint")}function Kx(r,e){let t=r.get(e),n=0;if(n+=t&Nt,t<_e||(t=r.get(e+1),n+=(t&Nt)<<7,t<_e)||(t=r.get(e+2),n+=(t&Nt)<<14,t<_e)||(t=r.get(e+3),n+=(t&Nt)<<21,t<_e)||(t=r.get(e+4),n+=(t&Nt)*p0,t<_e)||(t=r.get(e+5),n+=(t&Nt)*m0,t<_e)||(t=r.get(e+6),n+=(t&Nt)*g0,t<_e)||(t=r.get(e+7),n+=(t&Nt)*y0,t<_e))return n;throw new RangeError("Could not decode varint")}function Re(r,e,t=0){return e==null&&(e=Me(ue(r))),e instanceof Uint8Array?w0(r,e,t):$x(r,e,t)}function bt(r,e=0){return r instanceof Uint8Array?b0(r,e):Kx(r,e)}function Ce(r,e){e==null&&(e=r.reduce((o,i)=>o+i.length,0));let t=Me(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}function ne(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}var V4=Symbol.for("@achingbrain/uint8arraylist");function F4(r,e){if(e==null||e<0)throw new RangeError("index is out of bounds");let t=0;for(let n of r){let o=t+n.byteLength;if(e<o)return{buf:n,index:e-t};t=o}throw new RangeError("index is out of bounds")}function os(r){return!!r?.[V4]}var ce=class r{bufs;length;[V4]=!0;constructor(...e){this.bufs=[],this.length=0,e.length>0&&this.appendAll(e)}*[Symbol.iterator](){yield*this.bufs}get byteLength(){return this.length}append(...e){this.appendAll(e)}appendAll(e){let t=0;for(let n of e)if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.push(n);else if(os(n))t+=n.byteLength,this.bufs.push(...n.bufs);else throw new Error("Could not append value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}prepend(...e){this.prependAll(e)}prependAll(e){let t=0;for(let n of e.reverse())if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.unshift(n);else if(os(n))t+=n.byteLength,this.bufs.unshift(...n.bufs);else throw new Error("Could not prepend value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}get(e){let t=F4(this.bufs,e);return t.buf[t.index]}set(e,t){let n=F4(this.bufs,e);n.buf[n.index]=t}write(e,t=0){if(e instanceof Uint8Array)for(let n=0;n<e.length;n++)this.set(t+n,e[n]);else if(os(e))for(let n=0;n<e.length;n++)this.set(t+n,e.get(n));else throw new Error("Could not write value, must be an Uint8Array or a Uint8ArrayList")}consume(e){if(e=Math.trunc(e),!(Number.isNaN(e)||e<=0)){if(e===this.byteLength){this.bufs=[],this.length=0;return}for(;this.bufs.length>0;)if(e>=this.bufs[0].byteLength)e-=this.bufs[0].byteLength,this.length-=this.bufs[0].byteLength,this.bufs.shift();else{this.bufs[0]=this.bufs[0].subarray(e),this.length-=e;break}}}slice(e,t){let{bufs:n,length:o}=this._subList(e,t);return Ce(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:Ce(n,o)}sublist(e,t){let{bufs:n,length:o}=this._subList(e,t),i=new r;return i.length=o,i.bufs=[...n],i}_subList(e,t){if(e=e??0,t=t??this.length,e<0&&(e=this.length+e),t<0&&(t=this.length+t),e<0||t>this.length)throw new RangeError("index is out of bounds");if(e===t)return{bufs:[],length:0};if(e===0&&t===this.length)return{bufs:this.bufs,length:this.length};let n=[],o=0;for(let i=0;i<this.bufs.length;i++){let s=this.bufs[i],a=o,c=a+s.byteLength;if(o=c,e>=c)continue;let l=e>=a&&e<c,u=t>a&&t<=c;if(l&&u){if(e===a&&t===c){n.push(s);break}let d=e-a;n.push(s.subarray(d,d+(t-e)));break}if(l){if(e===0){n.push(s);continue}n.push(s.subarray(e-a));continue}if(u){if(t===c){n.push(s);break}n.push(s.subarray(0,t-a));break}n.push(s)}return{bufs:n,length:t-e}}indexOf(e,t=0){if(!os(e)&&!(e instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let n=e instanceof Uint8Array?e:e.subarray();if(t=Number(t??0),isNaN(t)&&(t=0),t<0&&(t=this.length+t),t<0&&(t=0),e.length===0)return t>this.length?this.length:t;let o=n.byteLength;if(o===0)throw new TypeError("search must be at least 1 byte long");let i=256,s=new Int32Array(i);for(let d=0;d<i;d++)s[d]=-1;for(let d=0;d<o;d++)s[n[d]]=d;let a=s,c=this.byteLength-n.byteLength,l=n.byteLength-1,u;for(let d=t;d<=c;d+=u){u=0;for(let f=l;f>=0;f--){let h=this.get(d+f);if(n[f]!==h){u=Math.max(1,f-a[h]);break}}if(u===0)return d}return-1}getInt8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getInt8(0)}setInt8(e,t){let n=Me(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setInt8(0,t),this.write(n,e)}getInt16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt16(0,t)}setInt16(e,t,n){let o=se(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt16(0,t,n),this.write(o,e)}getInt32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt32(0,t)}setInt32(e,t,n){let o=se(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt32(0,t,n),this.write(o,e)}getBigInt64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigInt64(0,t)}setBigInt64(e,t,n){let o=se(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigInt64(0,t,n),this.write(o,e)}getUint8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getUint8(0)}setUint8(e,t){let n=Me(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setUint8(0,t),this.write(n,e)}getUint16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint16(0,t)}setUint16(e,t,n){let o=se(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint16(0,t,n),this.write(o,e)}getUint32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint32(0,t)}setUint32(e,t,n){let o=se(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint32(0,t,n),this.write(o,e)}getBigUint64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigUint64(0,t)}setBigUint64(e,t,n){let o=se(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigUint64(0,t,n),this.write(o,e)}getFloat32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat32(0,t)}setFloat32(e,t,n){let o=se(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat32(0,t,n),this.write(o,e)}getFloat64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat64(0,t)}setFloat64(e,t,n){let o=se(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat64(0,t,n),this.write(o,e)}equals(e){if(e==null||!(e instanceof r)||e.bufs.length!==this.bufs.length)return!1;for(let t=0;t<this.bufs.length;t++)if(!ne(this.bufs[t],e.bufs[t]))return!1;return!0}static fromUint8Arrays(e,t){let n=new r;return n.bufs=e,t==null&&(t=e.reduce((o,i)=>o+i.byteLength,0)),n.length=t,n}};var kl=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},is=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Pl=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},Aa=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function Rl(r){return r[Symbol.asyncIterator]!=null}function $4(r,e){if(r.byteLength>e)throw new is("Message length too long")}var Ll=r=>{let e=ue(r),t=Me(e);return Re(r,t),Ll.bytes=e,t};Ll.bytes=0;function $r(r,e){e=e??{};let t=e.lengthEncoder??Ll,n=e?.maxDataLength??4194304;function*o(i){$4(i,n);let s=t(i.byteLength);s instanceof Uint8Array?yield s:yield*s,i instanceof Uint8Array?yield i:yield*i}return Rl(r)?async function*(){for await(let i of r)yield*o(i)}():function*(){for(let i of r)yield*o(i)}()}$r.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??Ll,n=e?.maxDataLength??4194304;return $4(r,n),new ce(t(r.byteLength),r)};var ti;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(ti||(ti={}));var x0=r=>{let e=bt(r);return x0.bytes=ue(e),e};x0.bytes=0;function Nn(r,e){let t=new ce,n=ti.LENGTH,o=-1,i=e?.lengthDecoder??x0,s=e?.maxLengthLength??8,a=e?.maxDataLength??4194304;function*c(){for(;t.byteLength>0;){if(n===ti.LENGTH)try{if(o=i(t),o<0)throw new kl("Invalid message length");if(o>a)throw new is("Message length too long");let l=i.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=ti.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>s)throw new Pl("Message length length too long");break}throw l}if(n===ti.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=ti.LENGTH}}}return Rl(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Aa("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Aa("Unexpected end of input")}()}Nn.fromReader=(r,e)=>{let t=1,n=async function*(){for(;;)try{let{done:i,value:s}=await r.next(t);if(i===!0)return;s!=null&&(yield s)}catch(i){if(i.code==="ERR_UNDER_READ")return{done:!0,value:null};throw i}finally{t=1}}();return Nn(n,{...e??{},onLength:i=>{t=i}})};function zx(r){let[e,t]=r[Symbol.asyncIterator]!=null?[r[Symbol.asyncIterator](),Symbol.asyncIterator]:[r[Symbol.iterator](),Symbol.iterator],n=[];return{peek:()=>e.next(),push:o=>{n.push(o)},next:()=>n.length>0?{done:!1,value:n.shift()}:e.next(),[t](){return this}}}var ss=zx;function Wx(r){return r[Symbol.asyncIterator]!=null}function Gx(r,e){let t=0;if(Wx(r))return async function*(){for await(let c of r)yield e(c,t++)}();let n=ss(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();let s=e(o,t++);if(typeof s.then=="function")return async function*(){yield await s;for await(let c of n)yield e(c,t++)}();let a=e;return function*(){yield s;for(let c of n)yield a(c,t++)}()}var Jt=Gx;function Qx(r){return r[Symbol.asyncIterator]!=null}function Yx(...r){let e=[];for(let t of r)Qx(t)||e.push(t);return e.length===r.length?function*(){for(let t of e)yield*t}():async function*(){let t=Dt({objectMode:!0});Promise.resolve().then(async()=>{try{await Promise.all(r.map(async n=>{for await(let o of n)t.push(o)})),t.end()}catch(n){t.end(n)}}),yield*t}()}var qt=Yx;function ft(r,...e){if(r==null)throw new Error("Empty pipeline");if(E0(r)){let n=r;r=()=>n.source}else if(H4(r)||K4(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&E0(t[t.length-1])&&(t[t.length-1]=t[t.length-1].sink),t.length>2)for(let n=1;n<t.length-1;n++)E0(t[n])&&(t[n]=jx(t[n]));return Xx(...t)}var Xx=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},K4=r=>r?.[Symbol.asyncIterator]!=null,H4=r=>r?.[Symbol.iterator]!=null,E0=r=>r==null?!1:r.sink!=null&&r.source!=null,jx=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=Dt({objectMode:!0});t.then(()=>{n.end()},s=>{n.end(s)});let o,i=r.source;if(K4(i))o=async function*(){yield*i,n.end()};else if(H4(i))o=function*(){yield*i,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return qt(n,o())}return r.source};function Zx(r){return r[Symbol.asyncIterator]!=null}function Jx(r,e){return Zx(r)?async function*(){let t=0;if(!(e<1)){for await(let n of r)if(yield n,t++,t===e)return}}():function*(){let t=0;if(!(e<1)){for(let n of r)if(yield n,t++,t===e)return}}()}var ho=Jx;var W=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var Ia="/ipfs/bitswap/1.2.0";var S0=new Float32Array([-0]),po=new Uint8Array(S0.buffer);function q4(r,e,t){S0[0]=r,e[t]=po[0],e[t+1]=po[1],e[t+2]=po[2],e[t+3]=po[3]}function z4(r,e){return po[0]=r[e],po[1]=r[e+1],po[2]=r[e+2],po[3]=r[e+3],S0[0]}var A0=new Float64Array([-0]),Bt=new Uint8Array(A0.buffer);function W4(r,e,t){A0[0]=r,e[t]=Bt[0],e[t+1]=Bt[1],e[t+2]=Bt[2],e[t+3]=Bt[3],e[t+4]=Bt[4],e[t+5]=Bt[5],e[t+6]=Bt[6],e[t+7]=Bt[7]}function G4(r,e){return Bt[0]=r[e],Bt[1]=r[e+1],Bt[2]=r[e+2],Bt[3]=r[e+3],Bt[4]=r[e+4],Bt[5]=r[e+5],Bt[6]=r[e+6],Bt[7]=r[e+7],A0[0]}var ev=BigInt(Number.MAX_SAFE_INTEGER),tv=BigInt(Number.MIN_SAFE_INTEGER),hr=class r{lo;hi;constructor(e,t){this.lo=e|0,this.hi=t|0}toNumber(e=!1){if(!e&&this.hi>>>31>0){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(t+n*4294967296)}return this.lo+this.hi*4294967296}toBigInt(e=!1){if(e)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(BigInt(t)+(BigInt(n)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(e=!1){return this.toBigInt(e).toString()}zzEncode(){let e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this}zzDecode(){let e=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this}length(){let e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return n===0?t===0?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:n<128?9:10}static fromBigInt(e){if(e===0n)return ri;if(e<ev&&e>tv)return this.fromNumber(Number(e));let t=e<0n;t&&(e=-e);let n=e>>32n,o=e-(n<<32n);return t&&(n=~n|0n,o=~o|0n,++o>Q4&&(o=0n,++n>Q4&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return ri;let t=e<0;t&&(e=-e);let n=e>>>0,o=(e-n)/4294967296>>>0;return t&&(o=~o>>>0,n=~n>>>0,++n>4294967295&&(n=0,++o>4294967295&&(o=0))),new r(n,o)}static from(e){return typeof e=="number"?r.fromNumber(e):typeof e=="bigint"?r.fromBigInt(e):typeof e=="string"?r.fromBigInt(BigInt(e)):e.low!=null||e.high!=null?new r(e.low>>>0,e.high>>>0):ri}},ri=new hr(0,0);ri.toBigInt=function(){return 0n};ri.zzEncode=ri.zzDecode=function(){return this};ri.length=function(){return 1};var Q4=4294967296n;function Y4(r){let e=0,t=0;for(let n=0;n<r.length;++n)t=r.charCodeAt(n),t<128?e+=1:t<2048?e+=2:(t&64512)===55296&&(r.charCodeAt(n+1)&64512)===56320?(++n,e+=4):e+=3;return e}function X4(r,e,t){if(t-e<1)return"";let o,i=[],s=0,a;for(;e<t;)a=r[e++],a<128?i[s++]=a:a>191&&a<224?i[s++]=(a&31)<<6|r[e++]&63:a>239&&a<365?(a=((a&7)<<18|(r[e++]&63)<<12|(r[e++]&63)<<6|r[e++]&63)-65536,i[s++]=55296+(a>>10),i[s++]=56320+(a&1023)):i[s++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,s>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,i)),s=0);return o!=null?(s>0&&o.push(String.fromCharCode.apply(String,i.slice(0,s))),o.join("")):String.fromCharCode.apply(String,i.slice(0,s))}function I0(r,e,t){let n=t,o,i;for(let s=0;s<r.length;++s)o=r.charCodeAt(s),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((i=r.charCodeAt(s+1))&64512)===56320?(o=65536+((o&1023)<<10)+(i&1023),++s,e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128);return t-n}function Kr(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Nl(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var T0=class{buf;pos;len;_slice=Uint8Array.prototype.subarray;constructor(e){this.buf=e,this.pos=0,this.len=e.length}uint32(){let e=4294967295;if(e=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(e=(e|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return e;if((this.pos+=5)>this.len)throw this.pos=this.len,Kr(this,10);return e}int32(){return this.uint32()|0}sint32(){let e=this.uint32();return e>>>1^-(e&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw Kr(this,4);return Nl(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Kr(this,4);return Nl(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Kr(this,4);let e=z4(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Kr(this,4);let e=G4(this.buf,this.pos);return this.pos+=8,e}bytes(){let e=this.uint32(),t=this.pos,n=this.pos+e;if(n>this.len)throw Kr(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return X4(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Kr(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Kr(this);while(this.buf[this.pos++]&128);return this}skipType(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(e=this.uint32()&7)!==4;)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${e} at offset ${this.pos}`)}return this}readLongVarint(){let e=new hr(0,0),t=0;if(this.len-this.pos>4){for(;t<4;++t)if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(this.buf[this.pos]&127)<<28)>>>0,e.hi=(e.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return e;t=0}else{for(;t<3;++t){if(this.pos>=this.len)throw Kr(this);if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(this.buf[this.pos++]&127)<<t*7)>>>0,e}if(this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw Kr(this);if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw Kr(this,8);let e=Nl(this.buf,this.pos+=4),t=Nl(this.buf,this.pos+=4);return new hr(e,t)}int64(){return this.readLongVarint().toBigInt()}int64Number(){return this.readLongVarint().toNumber()}int64String(){return this.readLongVarint().toString()}uint64(){return this.readLongVarint().toBigInt(!0)}uint64Number(){let e=b0(this.buf,this.pos);return this.pos+=ue(e),e}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}};function _0(r){return new T0(r instanceof Uint8Array?r:r.subarray())}function ee(r,e,t){let n=_0(r);return e.decode(n,void 0,t)}var L0={};Xe(L0,{base10:()=>av});var dL=new Uint8Array(0);function Z4(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 Hr(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 J4(r){return new TextEncoder().encode(r)}function eg(r){return new TextDecoder().decode(r)}function rv(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),u=Math.log(256)/Math.log(a);function d(p){if(p instanceof Uint8Array||(ArrayBuffer.isView(p)?p=new Uint8Array(p.buffer,p.byteOffset,p.byteLength):Array.isArray(p)&&(p=Uint8Array.from(p))),!(p instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(p.length===0)return"";for(var g=0,m=0,y=0,x=p.length;y!==x&&p[y]===0;)y++,g++;for(var w=(x-y)*u+1>>>0,I=new Uint8Array(w);y!==x;){for(var B=p[y],D=0,R=w-1;(B!==0||D<m)&&R!==-1;R--,D++)B+=256*I[R]>>>0,I[R]=B%a>>>0,B=B/a>>>0;if(B!==0)throw new Error("Non-zero carry");m=D,y++}for(var S=w-m;S!==w&&I[S]===0;)S++;for(var A=c.repeat(g);S<w;++S)A+=r.charAt(I[S]);return A}function f(p){if(typeof p!="string")throw new TypeError("Expected String");if(p.length===0)return new Uint8Array;var g=0;if(p[g]!==" "){for(var m=0,y=0;p[g]===c;)m++,g++;for(var x=(p.length-g)*l+1>>>0,w=new Uint8Array(x);p[g];){var I=t[p.charCodeAt(g)];if(I===255)return;for(var B=0,D=x-1;(I!==0||B<y)&&D!==-1;D--,B++)I+=a*w[D]>>>0,w[D]=I%256>>>0,I=I/256>>>0;if(I!==0)throw new Error("Non-zero carry");y=B,g++}if(p[g]!==" "){for(var R=x-y;R!==x&&w[R]===0;)R++;for(var S=new Uint8Array(m+(x-R)),A=m;R!==x;)S[A++]=w[R++];return S}}}function h(p){var g=f(p);if(g)return g;throw new Error(`Non-${e} character`)}return{encode:d,decodeUnsafe:f,decode:h}}var nv=rv,ov=nv,tg=ov;var k0=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")}},P0=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 rg(this,e)}},R0=class{decoders;constructor(e){this.decoders=e}or(e){return rg(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 rg(r,e){return new R0({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var D0=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 k0(e,t,n),this.decoder=new P0(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function as({name:r,prefix:e,encode:t,decode:n}){return new D0(r,e,t,n)}function mo({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=tg(t,r);return as({prefix:e,name:r,encode:n,decode:i=>Hr(o(i))})}function iv(r,e,t,n){let o={};for(let u=0;u<e.length;++u)o[e[u]]=u;let i=r.length;for(;r[i-1]==="=";)--i;let s=new Uint8Array(i*t/8|0),a=0,c=0,l=0;for(let u=0;u<i;++u){let d=o[r[u]];if(d===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|d,a+=t,a>=8&&(a-=8,s[l++]=255&c>>a)}if(a>=t||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return s}function sv(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;)i+="=";return i}function Ze({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return as({prefix:e,name:r,encode(o){return sv(o,n,t)},decode(o){return iv(o,n,t,r)}})}var av=mo({prefix:"9",name:"base10",alphabet:"0123456789"});var N0={};Xe(N0,{base16:()=>cv,base16upper:()=>lv});var cv=Ze({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),lv=Ze({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var B0={};Xe(B0,{base2:()=>uv});var uv=Ze({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var O0={};Xe(O0,{base256emoji:()=>mv});var ng=Array.from("\u{1F680}\u{1FA90}\u2604\u{1F6F0}\u{1F30C}\u{1F311}\u{1F312}\u{1F313}\u{1F314}\u{1F315}\u{1F316}\u{1F317}\u{1F318}\u{1F30D}\u{1F30F}\u{1F30E}\u{1F409}\u2600\u{1F4BB}\u{1F5A5}\u{1F4BE}\u{1F4BF}\u{1F602}\u2764\u{1F60D}\u{1F923}\u{1F60A}\u{1F64F}\u{1F495}\u{1F62D}\u{1F618}\u{1F44D}\u{1F605}\u{1F44F}\u{1F601}\u{1F525}\u{1F970}\u{1F494}\u{1F496}\u{1F499}\u{1F622}\u{1F914}\u{1F606}\u{1F644}\u{1F4AA}\u{1F609}\u263A\u{1F44C}\u{1F917}\u{1F49C}\u{1F614}\u{1F60E}\u{1F607}\u{1F339}\u{1F926}\u{1F389}\u{1F49E}\u270C\u2728\u{1F937}\u{1F631}\u{1F60C}\u{1F338}\u{1F64C}\u{1F60B}\u{1F497}\u{1F49A}\u{1F60F}\u{1F49B}\u{1F642}\u{1F493}\u{1F929}\u{1F604}\u{1F600}\u{1F5A4}\u{1F603}\u{1F4AF}\u{1F648}\u{1F447}\u{1F3B6}\u{1F612}\u{1F92D}\u2763\u{1F61C}\u{1F48B}\u{1F440}\u{1F62A}\u{1F611}\u{1F4A5}\u{1F64B}\u{1F61E}\u{1F629}\u{1F621}\u{1F92A}\u{1F44A}\u{1F973}\u{1F625}\u{1F924}\u{1F449}\u{1F483}\u{1F633}\u270B\u{1F61A}\u{1F61D}\u{1F634}\u{1F31F}\u{1F62C}\u{1F643}\u{1F340}\u{1F337}\u{1F63B}\u{1F613}\u2B50\u2705\u{1F97A}\u{1F308}\u{1F608}\u{1F918}\u{1F4A6}\u2714\u{1F623}\u{1F3C3}\u{1F490}\u2639\u{1F38A}\u{1F498}\u{1F620}\u261D\u{1F615}\u{1F33A}\u{1F382}\u{1F33B}\u{1F610}\u{1F595}\u{1F49D}\u{1F64A}\u{1F639}\u{1F5E3}\u{1F4AB}\u{1F480}\u{1F451}\u{1F3B5}\u{1F91E}\u{1F61B}\u{1F534}\u{1F624}\u{1F33C}\u{1F62B}\u26BD\u{1F919}\u2615\u{1F3C6}\u{1F92B}\u{1F448}\u{1F62E}\u{1F646}\u{1F37B}\u{1F343}\u{1F436}\u{1F481}\u{1F632}\u{1F33F}\u{1F9E1}\u{1F381}\u26A1\u{1F31E}\u{1F388}\u274C\u270A\u{1F44B}\u{1F630}\u{1F928}\u{1F636}\u{1F91D}\u{1F6B6}\u{1F4B0}\u{1F353}\u{1F4A2}\u{1F91F}\u{1F641}\u{1F6A8}\u{1F4A8}\u{1F92C}\u2708\u{1F380}\u{1F37A}\u{1F913}\u{1F619}\u{1F49F}\u{1F331}\u{1F616}\u{1F476}\u{1F974}\u25B6\u27A1\u2753\u{1F48E}\u{1F4B8}\u2B07\u{1F628}\u{1F31A}\u{1F98B}\u{1F637}\u{1F57A}\u26A0\u{1F645}\u{1F61F}\u{1F635}\u{1F44E}\u{1F932}\u{1F920}\u{1F927}\u{1F4CC}\u{1F535}\u{1F485}\u{1F9D0}\u{1F43E}\u{1F352}\u{1F617}\u{1F911}\u{1F30A}\u{1F92F}\u{1F437}\u260E\u{1F4A7}\u{1F62F}\u{1F486}\u{1F446}\u{1F3A4}\u{1F647}\u{1F351}\u2744\u{1F334}\u{1F4A3}\u{1F438}\u{1F48C}\u{1F4CD}\u{1F940}\u{1F922}\u{1F445}\u{1F4A1}\u{1F4A9}\u{1F450}\u{1F4F8}\u{1F47B}\u{1F910}\u{1F92E}\u{1F3BC}\u{1F975}\u{1F6A9}\u{1F34E}\u{1F34A}\u{1F47C}\u{1F48D}\u{1F4E3}\u{1F942}"),dv=ng.reduce((r,e,t)=>(r[t]=e,r),[]),fv=ng.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function hv(r){return r.reduce((e,t)=>(e+=dv[t],e),"")}function pv(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=fv[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var mv=as({prefix:"\u{1F680}",name:"base256emoji",encode:hv,decode:pv});var M0={};Xe(M0,{base32:()=>ct,base32hex:()=>bv,base32hexpad:()=>vv,base32hexpadupper:()=>Ev,base32hexupper:()=>xv,base32pad:()=>yv,base32padupper:()=>wv,base32upper:()=>gv,base32z:()=>Sv});var ct=Ze({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),gv=Ze({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),yv=Ze({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),wv=Ze({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),bv=Ze({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),xv=Ze({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),vv=Ze({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),Ev=Ze({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),Sv=Ze({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var U0={};Xe(U0,{base36:()=>yn,base36upper:()=>Av});var yn=mo({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),Av=mo({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var F0={};Xe(F0,{base58btc:()=>ve,base58flickr:()=>Iv});var ve=mo({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),Iv=mo({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var V0={};Xe(V0,{base64:()=>it,base64pad:()=>Tv,base64url:()=>Ta,base64urlpad:()=>_v});var it=Ze({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),Tv=Ze({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),Ta=Ze({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),_v=Ze({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var $0={};Xe($0,{base8:()=>Cv});var Cv=Ze({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var K0={};Xe(K0,{identity:()=>kv});var kv=as({prefix:"\0",name:"identity",encode:r=>eg(r),decode:r=>J4(r)});var Bl={};Xe(Bl,{code:()=>H0,decode:()=>Nv,encode:()=>Lv,name:()=>Dv});var Pv=new TextEncoder,Rv=new TextDecoder,Dv="json",H0=512;function Lv(r){return Pv.encode(JSON.stringify(r))}function Nv(r){return JSON.parse(Rv.decode(r))}var cs={};Xe(cs,{code:()=>ni,decode:()=>Mv,encode:()=>Ov,name:()=>Bv});var Bv="raw",ni=85;function Ov(r){return Hr(r)}function Mv(r){return Hr(r)}var W0={};Xe(W0,{identity:()=>er});var Ge={};Xe(Ge,{Digest:()=>oi,create:()=>Ot,decode:()=>Ae,equals:()=>z0,hasCode:()=>rE});var Uv=sg,og=128,Fv=127,Vv=~Fv,$v=Math.pow(2,31);function sg(r,e,t){e=e||[],t=t||0;for(var n=t;r>=$v;)e[t++]=r&255|og,r/=128;for(;r&Vv;)e[t++]=r&255|og,r>>>=7;return e[t]=r|0,sg.bytes=t-n+1,e}var Kv=q0,Hv=128,ig=127;function q0(r,n){var t=0,n=n||0,o=0,i=n,s,a=r.length;do{if(i>=a)throw q0.bytes=0,new RangeError("Could not decode varint");s=r[i++],t+=o<28?(s&ig)<<o:(s&ig)*Math.pow(2,o),o+=7}while(s>=Hv);return q0.bytes=i-n,t}var qv=Math.pow(2,7),zv=Math.pow(2,14),Wv=Math.pow(2,21),Gv=Math.pow(2,28),Qv=Math.pow(2,35),Yv=Math.pow(2,42),Xv=Math.pow(2,49),jv=Math.pow(2,56),Zv=Math.pow(2,63),Jv=function(r){return r<qv?1:r<zv?2:r<Wv?3:r<Gv?4:r<Qv?5:r<Yv?6:r<Xv?7:r<jv?8:r<Zv?9:10},eE={encode:Uv,decode:Kv,encodingLength:Jv},tE=eE,_a=tE;function Ca(r,e=0){return[_a.decode(r,e),_a.decode.bytes]}function ls(r,e,t=0){return _a.encode(r,e,t),e}function us(r){return _a.encodingLength(r)}function Ot(r,e){let t=e.byteLength,n=us(r),o=n+us(t),i=new Uint8Array(o+t);return ls(r,i,0),ls(t,i,n),i.set(e,o),new oi(r,t,e,i)}function Ae(r){let e=Hr(r),[t,n]=Ca(e),[o,i]=Ca(e.subarray(n)),s=e.subarray(n+i);if(s.byteLength!==o)throw new Error("Incorrect length");return new oi(t,o,s,e)}function z0(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&Z4(r.bytes,t.bytes)}}var oi=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function rE(r,e){return r.code===e}var ag=0,nE="identity",cg=Hr;function oE(r){return Ot(ag,cg(r))}var er={code:ag,name:nE,encode:cg,digest:oE};var Y0={};Xe(Y0,{sha256:()=>Qe,sha512:()=>Ml});function Q0({name:r,code:e,encode:t}){return new G0(r,e,t)}var G0=class{name;code;encode;constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?Ot(this.code,t):t.then(n=>Ot(this.code,n))}else throw Error("Unknown type, must be binary type")}};function ug(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var Qe=Q0({name:"sha2-256",code:18,encode:ug("SHA-256")}),Ml=Q0({name:"sha2-512",code:19,encode:ug("SHA-512")});function dg(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return sE(t,X0(r),e??ve.encoder);default:return aE(t,X0(r),e??ct.encoder)}}var fg=new WeakMap;function X0(r){let e=fg.get(r);if(e==null){let t=new Map;return fg.set(r,t),t}return e}var X=class r{code;version;multihash;bytes;"/";constructor(e,t,n,o){this.code=t,this.version=e,this.multihash=n,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:t}=this;if(e!==ka)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==cE)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=Ot(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return r.equals(this,e)}static equals(e,t){let n=t;return n!=null&&e.code===n.code&&e.version===n.version&&z0(e.multihash,n.multihash)}toString(e){return dg(this,e)}toJSON(){return{"/":dg(this)}}link(){return this}[Symbol.toStringTag]="CID";[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof r)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:o,multihash:i,bytes:s}=t;return new r(n,o,i,s??hg(n,o,i.bytes))}else if(t[lE]===!0){let{version:n,multihash:o,code:i}=t,s=Ae(o);return r.create(n,i,s)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(t!==ka)throw new Error(`Version 0 CID must use dag-pb (code: ${ka}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=hg(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,ka,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length!==0)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,o=Hr(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let i=o.subarray(t.multihashSize-t.digestSize),s=new oi(t.multihashCode,t.digestSize,i,o);return[t.version===0?r.createV0(s):r.createV1(t.codec,s),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[d,f]=Ca(e.subarray(t));return t+=f,d},o=n(),i=ka;if(o===18?(o=0,t=0):i=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let s=t,a=n(),c=n(),l=t+c,u=l-s;return{version:o,codec:i,multihashCode:a,digestSize:c,multihashSize:u,size:l}}static parse(e,t){let[n,o]=iE(e,t),i=r.decode(o);if(i.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return X0(i).set(n,e),i}};function iE(r,e){switch(r[0]){case"Q":{let t=e??ve;return[ve.prefix,t.decode(`${ve.prefix}${r}`)]}case ve.prefix:{let t=e??ve;return[ve.prefix,t.decode(r)]}case ct.prefix:{let t=e??ct;return[ct.prefix,t.decode(r)]}case yn.prefix:{let t=e??yn;return[yn.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}}function sE(r,e,t){let{prefix:n}=t;if(n!==ve.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let i=t.encode(r).slice(1);return e.set(n,i),i}else return o}function aE(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let i=t.encode(r);return e.set(n,i),i}else return o}var ka=112,cE=18;function hg(r,e,t){let n=us(r),o=n+us(e),i=new Uint8Array(o+t.byteLength);return ls(r,i,0),ls(e,i,n),i.set(t,o),i}var lE=Symbol.for("@ipld/js-cid/CID");var ii={...K0,...B0,...$0,...L0,...N0,...M0,...U0,...F0,...V0,...O0},QL={...Y0,...W0};function mg(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var pg=mg("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),j0=mg("ascii","a",r=>{let e="a";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return e},r=>{r=r.substring(1);let e=Me(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),uE={utf8:pg,"utf-8":pg,hex:ii.base16,latin1:j0,ascii:j0,binary:j0,...ii},Ul=uE;function N(r,e="utf8"){let t=Ul[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function Z0(r){let e=r??8192,t=e>>>1,n,o=e;return function(s){if(s<1||s>t)return Me(s);o+s>e&&(n=Me(e),o=0);let a=n.subarray(o,o+=s);return o&7&&(o=(o|7)+1),a}}var si=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function J0(){}var t2=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},dE=Z0();function fE(r){return globalThis.Buffer!=null?Me(r):dE(r)}var Ra=class{len;head;tail;states;constructor(){this.len=0,this.head=new si(J0,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new si(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new r2((e=e>>>0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this}int32(e){return e<0?this._push(Fl,10,hr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=hr.fromBigInt(e);return this._push(Fl,t.length(),t)}uint64Number(e){return this._push(w0,ue(e),e)}uint64String(e){return this.uint64(BigInt(e))}int64(e){return this.uint64(e)}int64Number(e){return this.uint64Number(e)}int64String(e){return this.uint64String(e)}sint64(e){let t=hr.fromBigInt(e).zzEncode();return this._push(Fl,t.length(),t)}sint64Number(e){let t=hr.fromNumber(e).zzEncode();return this._push(Fl,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(e2,1,e?1:0)}fixed32(e){return this._push(Pa,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=hr.fromBigInt(e);return this._push(Pa,4,t.lo)._push(Pa,4,t.hi)}fixed64Number(e){let t=hr.fromNumber(e);return this._push(Pa,4,t.lo)._push(Pa,4,t.hi)}fixed64String(e){return this.fixed64(BigInt(e))}sfixed64(e){return this.fixed64(e)}sfixed64Number(e){return this.fixed64Number(e)}sfixed64String(e){return this.fixed64String(e)}float(e){return this._push(q4,4,e)}double(e){return this._push(W4,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(e2,1,0):this.uint32(t)._push(pE,t,e)}string(e){let t=Y4(e);return t!==0?this.uint32(t)._push(I0,t,e):this._push(e2,1,0)}fork(){return this.states=new t2(this),this.head=this.tail=new si(J0,0,0),this.len=0,this}reset(){return this.states!=null?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new si(J0,0,0),this.len=0),this}ldelim(){let e=this.head,t=this.tail,n=this.len;return this.reset().uint32(n),n!==0&&(this.tail.next=e.next,this.tail=t,this.len+=n),this}finish(){let e=this.head.next,t=fE(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function e2(r,e,t){e[t]=r&255}function hE(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var r2=class extends si{next;constructor(e,t){super(hE,e,t),this.next=void 0}};function Fl(r,e,t){for(;r.hi!==0;)e[t++]=r.lo&127|128,r.lo=(r.lo>>>7|r.hi<<25)>>>0,r.hi>>>=7;for(;r.lo>127;)e[t++]=r.lo&127|128,r.lo=r.lo>>>7;e[t++]=r.lo}function Pa(r,e,t){e[t]=r&255,e[t+1]=r>>>8&255,e[t+2]=r>>>16&255,e[t+3]=r>>>24}function pE(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(Ra.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(mE,e,r),this},Ra.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(gE,e,r),this});function mE(r,e,t){e.set(r,t)}function gE(r,e,t){r.length<40?I0(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(N(r),t)}function n2(){return new Ra}function te(r,e){let t=n2();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var ds;(function(r){r[r.VARINT=0]="VARINT",r[r.BIT64=1]="BIT64",r[r.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",r[r.START_GROUP=3]="START_GROUP",r[r.END_GROUP=4]="END_GROUP",r[r.BIT32=5]="BIT32"})(ds||(ds={}));function Vl(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function He(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(i,s){let a=e(i);s.int32(a)},n=function(i){let s=i.int32();return e(s)};return Vl("enum",ds.VARINT,t,n)}function re(r,e){return Vl("message",ds.LENGTH_DELIMITED,r,e)}var Ue=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},Da=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var tt;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(tt||(tt={}));var o2;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(o2||(o2={}));(function(r){r.codec=()=>He(o2)})(tt||(tt={}));var fs;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.priority!=null&&t.priority!==0&&(n.uint32(16),n.int32(t.priority)),t.cancel!=null&&(n.uint32(24),n.bool(t.cancel)),t.wantType!=null&&(n.uint32(32),tt.codec().encode(t.wantType,n)),t.sendDontHave!=null&&(n.uint32(40),n.bool(t.sendDontHave)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={cid:se(0),priority:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.cid=t.bytes();break}case 2:{i.priority=t.int32();break}case 3:{i.cancel=t.bool();break}case 4:{i.wantType=tt.codec().decode(t);break}case 5:{i.sendDontHave=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(fs||(fs={}));var $l;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let i of t.entries)n.uint32(10),fs.codec().encode(i,n);t.full!=null&&(n.uint32(16),n.bool(t.full)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={entries:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.entries!=null&&i.entries.length===o.limits.entries)throw new Ue('Decode error - map field "entries" had too many elements');i.entries.push(fs.codec().decode(t,t.uint32(),{limits:o.limits?.entries$}));break}case 2:{i.full=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})($l||($l={}));var hs;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.prefix!=null&&t.prefix.byteLength>0&&(n.uint32(10),n.bytes(t.prefix)),t.data!=null&&t.data.byteLength>0&&(n.uint32(18),n.bytes(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={prefix:se(0),data:se(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.prefix=t.bytes();break}case 2:{i.data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(hs||(hs={}));var Ar;(function(r){r.HaveBlock="HaveBlock",r.DontHaveBlock="DontHaveBlock"})(Ar||(Ar={}));var Kl;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DontHaveBlock=1]="DontHaveBlock"})(Kl||(Kl={}));(function(r){r.codec=()=>He(Kl)})(Ar||(Ar={}));var ps;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.type!=null&&Kl[t.type]!==0&&(n.uint32(16),Ar.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={cid:se(0),type:Ar.HaveBlock},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.cid=t.bytes();break}case 2:{i.type=Ar.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(ps||(ps={}));var ai;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),$l.codec().encode(t.wantlist,n)),t.blocks!=null)for(let i of t.blocks)n.uint32(26),hs.codec().encode(i,n);if(t.blockPresences!=null)for(let i of t.blockPresences)n.uint32(34),ps.codec().encode(i,n);t.pendingBytes!=null&&t.pendingBytes!==0&&(n.uint32(40),n.int32(t.pendingBytes)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={blocks:[],blockPresences:[],pendingBytes:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.wantlist=$l.codec().decode(t,t.uint32(),{limits:o.limits?.wantlist});break}case 3:{if(o.limits?.blocks!=null&&i.blocks.length===o.limits.blocks)throw new Ue('Decode error - map field "blocks" had too many elements');i.blocks.push(hs.codec().decode(t,t.uint32(),{limits:o.limits?.blocks$}));break}case 4:{if(o.limits?.blockPresences!=null&&i.blockPresences.length===o.limits.blockPresences)throw new Ue('Decode error - map field "blockPresences" had too many elements');i.blockPresences.push(ps.codec().decode(t,t.uint32(),{limits:o.limits?.blockPresences$}));break}case 5:{i.pendingBytes=t.int32();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(ai||(ai={}));function gg(r,e){for(let[t,n]of e.wantlist.entries()){let o=r.wantlist.get(t);o!=null&&(o.priority>n.priority&&(n.priority=o.priority),n.cancel=n.cancel??o.cancel,n.wantType=n.wantType??o.wantType,n.sendDontHave=n.sendDontHave??o.sendDontHave),r.wantlist.set(t,n)}for(let[t,n]of e.blockPresences.entries())r.blockPresences.set(t,n);for(let[t,n]of e.blocks.entries())r.blocks.set(t,n);return e.full&&!r.full&&(r.full=!0),r}var Hl=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var yE=4193648,wE=yE+16;function*yg(r,e){let t=[...r.wantlist.values()],n=[...r.blockPresences.values()],o=[...r.blocks.values()],i=0,s=0,a=0,c=!1;for(;;){let l={wantlist:{full:r.full??!1,entries:[]},blockPresences:[],blocks:[],pendingBytes:0},u=ai.encode(l).byteLength,{added:d,hasMore:f,newSize:h}=i2(o,l.blocks,a,e,u,bE);a+=d,u=h;let p=f;({added:d,hasMore:f,newSize:h}=i2(n,l.blockPresences,s,e,u,xE)),s+=d,u=h;let g=f;if({added:d,hasMore:f,newSize:h}=i2(t,l.wantlist.entries,i,e,u,vE),i+=d,u=h,c=!p&&!g&&!f,c||(l.wantlist.full=!1),yield ai.encode(l),c)break}}function i2(r,e,t,n,o,i){let s=0,a=!1;for(let c=t;c<r.length;c++){let l=r[c],u=i(l);if(u>wE)throw new Hl("Cannot send block as after encoding it is over the max message size");let d=o+u;if(d>n){a=!0;break}e.push(l),s++,o=d}return{hasMore:a,added:s,newSize:o}}function bE(r){return s2(3,hs.encode(r))}function xE(r){return s2(4,ps.encode(r))}function vE(r){return s2(1,fs.encode(r))}function s2(r,e){let t=ue(r),n=ue(e.byteLength);return t+n+e.byteLength}var ql=class extends me{log;libp2p;routing;protocols;running;maxInboundStreams;maxOutboundStreams;messageReceiveTimeout;registrarIds;metrics;sendQueue;runOnLimitedConnections;maxOutgoingMessageSize;maxIncomingMessageSize;constructor(e,t={}){super(),this.log=e.logger.forComponent("helia:bitswap:network"),this.libp2p=e.libp2p,this.routing=e.routing,this.protocols=t.protocols??[Ia],this.registrarIds=[],this.running=!1,this._onStream=this._onStream.bind(this),this.maxInboundStreams=t.maxInboundStreams??1024,this.maxOutboundStreams=t.maxOutboundStreams??1024,this.messageReceiveTimeout=t.messageReceiveTimeout??5e3,this.runOnLimitedConnections=t.runOnLimitedConnections??!1,this.maxIncomingMessageSize=t.maxIncomingMessageSize??4194304,this.maxOutgoingMessageSize=t.maxOutgoingMessageSize??t.maxIncomingMessageSize??4194304,this.metrics={blocksSent:e.metrics?.registerCounter("helia_bitswap_sent_blocks_total"),dataSent:e.metrics?.registerCounter("helia_bitswap_sent_data_bytes_total")},this.sendQueue=new wt({concurrency:t.messageSendConcurrency??50,metrics:e.metrics,metricName:"helia_bitswap_message_send_queue"}),this.sendQueue.addEventListener("error",n=>{this.log.error("error sending wantlist to peer",n.detail)})}async start(){if(this.running)return;this.running=!0,await this.libp2p.handle(this.protocols,this._onStream,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnections});let e={onConnect:t=>{this.safeDispatchEvent("peer:connected",{detail:t})},onDisconnect:t=>{this.safeDispatchEvent("peer:disconnected",{detail:t})}};this.registrarIds=[];for(let t of this.protocols)this.registrarIds.push(await this.libp2p.register(t,e));this.libp2p.getConnections().forEach(t=>{this.safeDispatchEvent("peer:connected",{detail:t.remotePeer})})}async stop(){if(this.running=!1,await this.libp2p.unhandle(this.protocols),this.registrarIds!=null){for(let e of this.registrarIds)this.libp2p.unregister(e);this.registrarIds=[]}}_onStream(e){if(!this.running)return;let{stream:t,connection:n}=e;Promise.resolve().then(async()=>{this.log("incoming new bitswap %s stream from %p",t.protocol,n.remotePeer);let o=()=>{t.status==="open"?t.abort(new gn(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`)):this.log("stream aborted with status %s",t.status)},i=AbortSignal.timeout(this.messageReceiveTimeout);i.addEventListener("abort",o),await t.closeWrite(),await ft(t,s=>Nn(s,{maxDataLength:this.maxIncomingMessageSize}),async s=>{for await(let a of s)try{let c=ai.decode(a);this.log("incoming new bitswap %s message from %p on stream",t.protocol,n.remotePeer,t.id),this.safeDispatchEvent("bitswap:message",{detail:{peer:n.remotePeer,message:c}}),i.removeEventListener("abort",o),i=AbortSignal.timeout(this.messageReceiveTimeout),i.addEventListener("abort",o)}catch(c){this.log.error("error reading incoming bitswap message from %p on stream",n.remotePeer,t.id,c),t.abort(c);break}})}).catch(o=>{this.log.error("error handling incoming stream from %p",n.remotePeer,o),t.abort(o)})}async*findProviders(e,t){t?.onProgress?.(new W("bitswap:network:find-providers",e));for await(let n of this.routing.findProviders(e,t))await this.libp2p.isDialable(n.multiaddrs,{runOnLimitedConnection:this.runOnLimitedConnections})&&(yield n)}async findAndConnect(e,t){await Lt(Jt(ho(this.findProviders(e,t),t?.maxProviders??3),async n=>this.connectTo(n.id,t))).catch(n=>{this.log.error(n)})}async sendMessage(e,t,n){if(!this.running)throw new Error("network isn't running");let o=this.sendQueue.queue.find(i=>e.equals(i.options.peerId)&&i.status==="queued");if(o!=null){o.options.message=gg(o.options.message,t),await o.join({signal:n?.signal});return}await this.sendQueue.add(async i=>{let s=i?.message;if(s==null)throw new k("No message to send");this.log("sendMessage to %p",e),i?.onProgress?.(new W("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,Ia,i);await a.closeRead();try{await ft(yg(s,this.maxOutgoingMessageSize),c=>$r(c),a),await a.close(i)}catch(c){i?.onProgress?.(new W("bitswap:network:send-wantlist:error",{peer:e,error:c})),this.log.error("error sending message to %p",e,c),a.abort(c)}this._updateSentStats(s.blocks)},{peerId:e,signal:n?.signal,message:t})}async connectTo(e,t){if(!this.running)throw new Fr("Network isn't running");t?.onProgress?.(new W("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),dt(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(Ia))return!0;throw new Dn(`${e} did not support ${Ia}`)}})]);return n}_updateSentStats(e){let t=0;for(let n of e.values())t+=n.data.byteLength;this.metrics.dataSent?.increment(t),this.metrics.blocksSent?.increment(e.size)}};function go(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function PE(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function ms(r,...e){if(!PE(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error("Uint8Array expected of length "+e+", got length="+r.length)}function ci(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");go(r.outputLen),go(r.blockLen)}function gs(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 wg(r,e){ms(r);let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}var li=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function ui(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function qr(r,e){return r<<32-e|r>>>e}function zl(r,e){return r<<e|r>>>32-e>>>0}var RE=async()=>{};async function bg(r,e,t){let n=Date.now();for(let o=0;o<r;o++){t(o);let i=Date.now()-n;i>=0&&i<e||(await RE(),n+=i)}}function xg(r){if(typeof r!="string")throw new Error("utf8ToBytes expected string, got "+typeof r);return new Uint8Array(new TextEncoder().encode(r))}function zr(r){return typeof r=="string"&&(r=xg(r)),ms(r),r}function a2(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];ms(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}var ys=class{clone(){return this._cloneInto()}};function vg(r,e){if(e!==void 0&&{}.toString.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function ws(r){let e=n=>r().update(zr(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function di(r=32){if(li&&typeof li.getRandomValues=="function")return li.getRandomValues(new Uint8Array(r));if(li&&typeof li.randomBytes=="function")return li.randomBytes(r);throw new Error("crypto.getRandomValues must be defined")}function DE(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}function Wl(r,e,t){return r&e^~r&t}function Gl(r,e,t){return r&e^r&t^e&t}var yo=class extends ys{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=ui(this.buffer)}update(e){gs(this);let{view:t,buffer:n,blockLen:o}=this;e=zr(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(o-this.pos,i-s);if(a===o){let c=ui(e);for(;o<=i-s;s+=o)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){gs(this),wg(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(n,0),s=0);for(let d=s;d<o;d++)t[d]=0;DE(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=ui(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let l=c/4,u=this.get();if(l>u.length)throw new Error("_sha2: outputLen bigger than state");for(let d=0;d<l;d++)a.setUint32(4*d,u[d],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:s,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=s,o%t&&e.buffer.set(n),e}};var Ql=BigInt(4294967295),c2=BigInt(32);function Eg(r,e=!1){return e?{h:Number(r&Ql),l:Number(r>>c2&Ql)}:{h:Number(r>>c2&Ql)|0,l:Number(r&Ql)|0}}function LE(r,e=!1){let t=new Uint32Array(r.length),n=new Uint32Array(r.length);for(let o=0;o<r.length;o++){let{h:i,l:s}=Eg(r[o],e);[t[o],n[o]]=[i,s]}return[t,n]}var NE=(r,e)=>BigInt(r>>>0)<<c2|BigInt(e>>>0),BE=(r,e,t)=>r>>>t,OE=(r,e,t)=>r<<32-t|e>>>t,ME=(r,e,t)=>r>>>t|e<<32-t,UE=(r,e,t)=>r<<32-t|e>>>t,FE=(r,e,t)=>r<<64-t|e>>>t-32,VE=(r,e,t)=>r>>>t-32|e<<64-t,$E=(r,e)=>e,KE=(r,e)=>r,HE=(r,e,t)=>r<<t|e>>>32-t,qE=(r,e,t)=>e<<t|r>>>32-t,zE=(r,e,t)=>e<<t-32|r>>>64-t,WE=(r,e,t)=>r<<t-32|e>>>64-t;function GE(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var QE=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),YE=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,XE=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),jE=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,ZE=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),JE=(r,e,t,n,o,i)=>e+t+n+o+i+(r/2**32|0)|0;var eS={fromBig:Eg,split:LE,toBig:NE,shrSH:BE,shrSL:OE,rotrSH:ME,rotrSL:UE,rotrBH:FE,rotrBL:VE,rotr32H:$E,rotr32L:KE,rotlSH:HE,rotlSL:qE,rotlBH:zE,rotlBL:WE,add:GE,add3L:QE,add3H:YE,add4L:XE,add4H:jE,add5H:JE,add5L:ZE},de=eS;var[tS,rS]=de.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(r=>BigInt(r))),wo=new Uint32Array(80),bo=new Uint32Array(80),l2=class extends yo{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){let{Ah:e,Al:t,Bh:n,Bl:o,Ch:i,Cl:s,Dh:a,Dl:c,Eh:l,El:u,Fh:d,Fl:f,Gh:h,Gl:p,Hh:g,Hl:m}=this;return[e,t,n,o,i,s,a,c,l,u,d,f,h,p,g,m]}set(e,t,n,o,i,s,a,c,l,u,d,f,h,p,g,m){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=i|0,this.Cl=s|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=u|0,this.Fh=d|0,this.Fl=f|0,this.Gh=h|0,this.Gl=p|0,this.Hh=g|0,this.Hl=m|0}process(e,t){for(let w=0;w<16;w++,t+=4)wo[w]=e.getUint32(t),bo[w]=e.getUint32(t+=4);for(let w=16;w<80;w++){let I=wo[w-15]|0,B=bo[w-15]|0,D=de.rotrSH(I,B,1)^de.rotrSH(I,B,8)^de.shrSH(I,B,7),R=de.rotrSL(I,B,1)^de.rotrSL(I,B,8)^de.shrSL(I,B,7),S=wo[w-2]|0,A=bo[w-2]|0,F=de.rotrSH(S,A,19)^de.rotrBH(S,A,61)^de.shrSH(S,A,6),L=de.rotrSL(S,A,19)^de.rotrBL(S,A,61)^de.shrSL(S,A,6),M=de.add4L(R,L,bo[w-7],bo[w-16]),K=de.add4H(M,D,F,wo[w-7],wo[w-16]);wo[w]=K|0,bo[w]=M|0}let{Ah:n,Al:o,Bh:i,Bl:s,Ch:a,Cl:c,Dh:l,Dl:u,Eh:d,El:f,Fh:h,Fl:p,Gh:g,Gl:m,Hh:y,Hl:x}=this;for(let w=0;w<80;w++){let I=de.rotrSH(d,f,14)^de.rotrSH(d,f,18)^de.rotrBH(d,f,41),B=de.rotrSL(d,f,14)^de.rotrSL(d,f,18)^de.rotrBL(d,f,41),D=d&h^~d&g,R=f&p^~f&m,S=de.add5L(x,B,R,rS[w],bo[w]),A=de.add5H(S,y,I,D,tS[w],wo[w]),F=S|0,L=de.rotrSH(n,o,28)^de.rotrBH(n,o,34)^de.rotrBH(n,o,39),M=de.rotrSL(n,o,28)^de.rotrBL(n,o,34)^de.rotrBL(n,o,39),K=n&i^n&a^i&a,C=o&s^o&c^s&c;y=g|0,x=m|0,g=h|0,m=p|0,h=d|0,p=f|0,{h:d,l:f}=de.add(l|0,u|0,A|0,F|0),l=a|0,u=c|0,a=i|0,c=s|0,i=n|0,s=o|0;let P=de.add3L(F,M,C);n=de.add3H(P,A,L,K),o=P|0}({h:n,l:o}=de.add(this.Ah|0,this.Al|0,n|0,o|0)),{h:i,l:s}=de.add(this.Bh|0,this.Bl|0,i|0,s|0),{h:a,l:c}=de.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:u}=de.add(this.Dh|0,this.Dl|0,l|0,u|0),{h:d,l:f}=de.add(this.Eh|0,this.El|0,d|0,f|0),{h,l:p}=de.add(this.Fh|0,this.Fl|0,h|0,p|0),{h:g,l:m}=de.add(this.Gh|0,this.Gl|0,g|0,m|0),{h:y,l:x}=de.add(this.Hh|0,this.Hl|0,y|0,x|0),this.set(n,o,i,s,a,c,l,u,d,f,h,p,g,m,y,x)}roundClean(){wo.fill(0),bo.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var xo=ws(()=>new l2);var jl={};Xe(jl,{aInRange:()=>xt,abool:()=>Wr,abytes:()=>bs,bitGet:()=>cS,bitLen:()=>h2,bitMask:()=>Na,bitSet:()=>lS,bytesToHex:()=>On,bytesToNumberBE:()=>Mn,bytesToNumberLE:()=>Gr,concatBytes:()=>Fn,createHmacDrbg:()=>p2,ensureBytes:()=>De,equalBytes:()=>sS,hexToBytes:()=>hi,hexToNumber:()=>f2,inRange:()=>La,isBytes:()=>vo,memoized:()=>pi,notImplemented:()=>dS,numberToBytesBE:()=>Eo,numberToBytesLE:()=>Un,numberToHexUnpadded:()=>fi,numberToVarBytesBE:()=>iS,utf8ToBytes:()=>aS,validateObject:()=>Ir});var Yl=BigInt(0),Xl=BigInt(1),nS=BigInt(2);function vo(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function bs(r){if(!vo(r))throw new Error("Uint8Array expected")}function Wr(r,e){if(typeof e!="boolean")throw new Error(r+" boolean expected, got "+e)}var oS=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function On(r){bs(r);let e="";for(let t=0;t<r.length;t++)e+=oS[r[t]];return e}function fi(r){let e=r.toString(16);return e.length&1?"0"+e:e}function f2(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return r===""?Yl:BigInt("0x"+r)}var Bn={_0:48,_9:57,A:65,F:70,a:97,f:102};function Sg(r){if(r>=Bn._0&&r<=Bn._9)return r-Bn._0;if(r>=Bn.A&&r<=Bn.F)return r-(Bn.A-10);if(r>=Bn.a&&r<=Bn.f)return r-(Bn.a-10)}function hi(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);let e=r.length,t=e/2;if(e%2)throw new Error("hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(t);for(let o=0,i=0;o<t;o++,i+=2){let s=Sg(r.charCodeAt(i)),a=Sg(r.charCodeAt(i+1));if(s===void 0||a===void 0){let c=r[i]+r[i+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+i)}n[o]=s*16+a}return n}function Mn(r){return f2(On(r))}function Gr(r){return bs(r),f2(On(Uint8Array.from(r).reverse()))}function Eo(r,e){return hi(r.toString(16).padStart(e*2,"0"))}function Un(r,e){return Eo(r,e).reverse()}function iS(r){return hi(fi(r))}function De(r,e,t){let n;if(typeof e=="string")try{n=hi(e)}catch(i){throw new Error(r+" must be hex string or Uint8Array, cause: "+i)}else if(vo(e))n=Uint8Array.from(e);else throw new Error(r+" must be hex string or Uint8Array");let o=n.length;if(typeof t=="number"&&o!==t)throw new Error(r+" of length "+t+" expected, got "+o);return n}function Fn(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];bs(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}function sS(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}function aS(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}var u2=r=>typeof r=="bigint"&&Yl<=r;function La(r,e,t){return u2(r)&&u2(e)&&u2(t)&&e<=r&&r<t}function xt(r,e,t,n){if(!La(e,t,n))throw new Error("expected valid "+r+": "+t+" <= n < "+n+", got "+e)}function h2(r){let e;for(e=0;r>Yl;r>>=Xl,e+=1);return e}function cS(r,e){return r>>BigInt(e)&Xl}function lS(r,e,t){return r|(t?Xl:Yl)<<BigInt(e)}var Na=r=>(nS<<BigInt(r-1))-Xl,d2=r=>new Uint8Array(r),Ag=r=>Uint8Array.from(r);function p2(r,e,t){if(typeof r!="number"||r<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof t!="function")throw new Error("hmacFn must be a function");let n=d2(r),o=d2(r),i=0,s=()=>{n.fill(1),o.fill(0),i=0},a=(...d)=>t(o,n,...d),c=(d=d2())=>{o=a(Ag([0]),d),n=a(),d.length!==0&&(o=a(Ag([1]),d),n=a())},l=()=>{if(i++>=1e3)throw new Error("drbg: tried 1000 values");let d=0,f=[];for(;d<e;){n=a();let h=n.slice();f.push(h),d+=n.length}return Fn(...f)};return(d,f)=>{s(),c(d);let h;for(;!(h=f(l()));)c();return s(),h}}var uS={bigint:r=>typeof r=="bigint",function:r=>typeof r=="function",boolean:r=>typeof r=="boolean",string:r=>typeof r=="string",stringOrUint8Array:r=>typeof r=="string"||vo(r),isSafeInteger:r=>Number.isSafeInteger(r),array:r=>Array.isArray(r),field:(r,e)=>e.Fp.isValid(r),hash:r=>typeof r=="function"&&Number.isSafeInteger(r.outputLen)};function Ir(r,e,t={}){let n=(o,i,s)=>{let a=uS[i];if(typeof a!="function")throw new Error("invalid validator function");let c=r[o];if(!(s&&c===void 0)&&!a(c,r))throw new Error("param "+String(o)+" is invalid. Expected "+i+", got "+c)};for(let[o,i]of Object.entries(e))n(o,i,!1);for(let[o,i]of Object.entries(t))n(o,i,!0);return r}var dS=()=>{throw new Error("not implemented")};function pi(r){let e=new WeakMap;return(t,...n)=>{let o=e.get(t);if(o!==void 0)return o;let i=r(t,...n);return e.set(t,i),i}}var lt=BigInt(0),qe=BigInt(1),mi=BigInt(2),fS=BigInt(3),m2=BigInt(4),Ig=BigInt(5),Tg=BigInt(8),hS=BigInt(9),pS=BigInt(16);function Ie(r,e){let t=r%e;return t>=lt?t:e+t}function g2(r,e,t){if(e<lt)throw new Error("invalid exponent, negatives unsupported");if(t<=lt)throw new Error("invalid modulus");if(t===qe)return lt;let n=qe;for(;e>lt;)e&qe&&(n=n*r%t),r=r*r%t,e>>=qe;return n}function Fe(r,e,t){let n=r;for(;e-- >lt;)n*=n,n%=t;return n}function Zl(r,e){if(r===lt)throw new Error("invert: expected non-zero number");if(e<=lt)throw new Error("invert: expected positive modulus, got "+e);let t=Ie(r,e),n=e,o=lt,i=qe,s=qe,a=lt;for(;t!==lt;){let l=n/t,u=n%t,d=o-s*l,f=i-a*l;n=t,t=u,o=s,i=a,s=d,a=f}if(n!==qe)throw new Error("invert: does not exist");return Ie(o,e)}function mS(r){let e=(r-qe)/mi,t,n,o;for(t=r-qe,n=0;t%mi===lt;t/=mi,n++);for(o=mi;o<r&&g2(o,e,r)!==r-qe;o++)if(o>1e3)throw new Error("Cannot find square root: likely non-prime P");if(n===1){let s=(r+qe)/m2;return function(c,l){let u=c.pow(l,s);if(!c.eql(c.sqr(u),l))throw new Error("Cannot find square root");return u}}let i=(t+qe)/mi;return function(a,c){if(a.pow(c,e)===a.neg(a.ONE))throw new Error("Cannot find square root");let l=n,u=a.pow(a.mul(a.ONE,o),t),d=a.pow(c,i),f=a.pow(c,t);for(;!a.eql(f,a.ONE);){if(a.eql(f,a.ZERO))return a.ZERO;let h=1;for(let g=a.sqr(f);h<l&&!a.eql(g,a.ONE);h++)g=a.sqr(g);let p=a.pow(u,qe<<BigInt(l-h-1));u=a.sqr(p),d=a.mul(d,p),f=a.mul(f,u),l=h}return d}}function gS(r){if(r%m2===fS){let e=(r+qe)/m2;return function(n,o){let i=n.pow(o,e);if(!n.eql(n.sqr(i),o))throw new Error("Cannot find square root");return i}}if(r%Tg===Ig){let e=(r-Ig)/Tg;return function(n,o){let i=n.mul(o,mi),s=n.pow(i,e),a=n.mul(o,s),c=n.mul(n.mul(a,mi),s),l=n.mul(a,n.sub(c,n.ONE));if(!n.eql(n.sqr(l),o))throw new Error("Cannot find square root");return l}}return r%pS,mS(r)}var _g=(r,e)=>(Ie(r,e)&qe)===qe,yS=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function y2(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=yS.reduce((n,o)=>(n[o]="function",n),e);return Ir(r,t)}function wS(r,e,t){if(t<lt)throw new Error("invalid exponent, negatives unsupported");if(t===lt)return r.ONE;if(t===qe)return e;let n=r.ONE,o=e;for(;t>lt;)t&qe&&(n=r.mul(n,o)),o=r.sqr(o),t>>=qe;return n}function bS(r,e){let t=new Array(e.length),n=e.reduce((i,s,a)=>r.is0(s)?i:(t[a]=i,r.mul(i,s)),r.ONE),o=r.inv(n);return e.reduceRight((i,s,a)=>r.is0(s)?i:(t[a]=r.mul(i,t[a]),r.mul(i,s)),o),t}function w2(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function So(r,e,t=!1,n={}){if(r<=lt)throw new Error("invalid field: expected ORDER > 0, got "+r);let{nBitLength:o,nByteLength:i}=w2(r,e);if(i>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");let s,a=Object.freeze({ORDER:r,isLE:t,BITS:o,BYTES:i,MASK:Na(o),ZERO:lt,ONE:qe,create:c=>Ie(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof c);return lt<=c&&c<r},is0:c=>c===lt,isOdd:c=>(c&qe)===qe,neg:c=>Ie(-c,r),eql:(c,l)=>c===l,sqr:c=>Ie(c*c,r),add:(c,l)=>Ie(c+l,r),sub:(c,l)=>Ie(c-l,r),mul:(c,l)=>Ie(c*l,r),pow:(c,l)=>wS(a,c,l),div:(c,l)=>Ie(c*Zl(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>Zl(c,r),sqrt:n.sqrt||(c=>(s||(s=gS(r)),s(a,c))),invertBatch:c=>bS(a,c),cmov:(c,l,u)=>u?l:c,toBytes:c=>t?Un(c,i):Eo(c,i),fromBytes:c=>{if(c.length!==i)throw new Error("Field.fromBytes: expected "+i+" bytes, got "+c.length);return t?Gr(c):Mn(c)}});return Object.freeze(a)}function Cg(r){if(typeof r!="bigint")throw new Error("field order must be bigint");let e=r.toString(2).length;return Math.ceil(e/8)}function b2(r){let e=Cg(r);return e+Math.ceil(e/2)}function kg(r,e,t=!1){let n=r.length,o=Cg(e),i=b2(e);if(n<16||n<i||n>1024)throw new Error("expected "+i+"-1024 bytes of input, got "+n);let s=t?Gr(r):Mn(r),a=Ie(s,e-qe)+qe;return t?Un(a,o):Eo(a,o)}var Pg=BigInt(0),Jl=BigInt(1);function x2(r,e){let t=e.negate();return r?t:e}function Rg(r,e){if(!Number.isSafeInteger(r)||r<=0||r>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+r)}function v2(r,e){Rg(r,e);let t=Math.ceil(e/r)+1,n=2**(r-1);return{windows:t,windowSize:n}}function xS(r,e){if(!Array.isArray(r))throw new Error("array expected");r.forEach((t,n)=>{if(!(t instanceof e))throw new Error("invalid point at index "+n)})}function vS(r,e){if(!Array.isArray(r))throw new Error("array of scalars expected");r.forEach((t,n)=>{if(!e.isValid(t))throw new Error("invalid scalar at index "+n)})}var E2=new WeakMap,Dg=new WeakMap;function S2(r){return Dg.get(r)||1}function eu(r,e){return{constTimeNegate:x2,hasPrecomputes(t){return S2(t)!==1},unsafeLadder(t,n,o=r.ZERO){let i=t;for(;n>Pg;)n&Jl&&(o=o.add(i)),i=i.double(),n>>=Jl;return o},precomputeWindow(t,n){let{windows:o,windowSize:i}=v2(n,e),s=[],a=t,c=a;for(let l=0;l<o;l++){c=a,s.push(c);for(let u=1;u<i;u++)c=c.add(a),s.push(c);a=c.double()}return s},wNAF(t,n,o){let{windows:i,windowSize:s}=v2(t,e),a=r.ZERO,c=r.BASE,l=BigInt(2**t-1),u=2**t,d=BigInt(t);for(let f=0;f<i;f++){let h=f*s,p=Number(o&l);o>>=d,p>s&&(p-=u,o+=Jl);let g=h,m=h+Math.abs(p)-1,y=f%2!==0,x=p<0;p===0?c=c.add(x2(y,n[g])):a=a.add(x2(x,n[m]))}return{p:a,f:c}},wNAFUnsafe(t,n,o,i=r.ZERO){let{windows:s,windowSize:a}=v2(t,e),c=BigInt(2**t-1),l=2**t,u=BigInt(t);for(let d=0;d<s;d++){let f=d*a;if(o===Pg)break;let h=Number(o&c);if(o>>=u,h>a&&(h-=l,o+=Jl),h===0)continue;let p=n[f+Math.abs(h)-1];h<0&&(p=p.negate()),i=i.add(p)}return i},getPrecomputes(t,n,o){let i=E2.get(n);return i||(i=this.precomputeWindow(n,t),t!==1&&E2.set(n,o(i))),i},wNAFCached(t,n,o){let i=S2(t);return this.wNAF(i,this.getPrecomputes(i,t,o),n)},wNAFCachedUnsafe(t,n,o,i){let s=S2(t);return s===1?this.unsafeLadder(t,n,i):this.wNAFUnsafe(s,this.getPrecomputes(s,t,o),n,i)},setWindowSize(t,n){Rg(n,e),Dg.set(t,n),E2.delete(t)}}}function tu(r,e,t,n){if(xS(t,r),vS(n,e),t.length!==n.length)throw new Error("arrays of points and scalars must have equal length");let o=r.ZERO,i=h2(BigInt(t.length)),s=i>12?i-3:i>4?i-2:i?2:1,a=(1<<s)-1,c=new Array(a+1).fill(o),l=Math.floor((e.BITS-1)/s)*s,u=o;for(let d=l;d>=0;d-=s){c.fill(o);for(let h=0;h<n.length;h++){let p=n[h],g=Number(p>>BigInt(d)&BigInt(a));c[g]=c[g].add(t[h])}let f=o;for(let h=c.length-1,p=o;h>0;h--)p=p.add(c[h]),f=f.add(p);if(u=u.add(f),d!==0)for(let h=0;h<s;h++)u=u.double()}return u}function Ba(r){return y2(r.Fp),Ir(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...w2(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Qr=BigInt(0),tr=BigInt(1),ru=BigInt(2),ES=BigInt(8),SS={zip215:!0};function AS(r){let e=Ba(r);return Ir(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function Lg(r){let e=AS(r),{Fp:t,n,prehash:o,hash:i,randomBytes:s,nByteLength:a,h:c}=e,l=ru<<BigInt(a*8)-tr,u=t.create,d=So(e.n,e.nBitLength),f=e.uvRatio||((E,v)=>{try{return{isValid:!0,value:t.sqrt(E*t.inv(v))}}catch{return{isValid:!1,value:Qr}}}),h=e.adjustScalarBytes||(E=>E),p=e.domain||((E,v,_)=>{if(Wr("phflag",_),v.length||_)throw new Error("Contexts/pre-hash are not supported");return E});function g(E,v){xt("coordinate "+E,v,Qr,l)}function m(E){if(!(E instanceof w))throw new Error("ExtendedPoint expected")}let y=pi((E,v)=>{let{ex:_,ey:T,ez:H}=E,q=E.is0();v==null&&(v=q?ES:t.inv(H));let Y=u(_*v),ae=u(T*v),ie=u(H*v);if(q)return{x:Qr,y:tr};if(ie!==tr)throw new Error("invZ was invalid");return{x:Y,y:ae}}),x=pi(E=>{let{a:v,d:_}=e;if(E.is0())throw new Error("bad point: ZERO");let{ex:T,ey:H,ez:q,et:Y}=E,ae=u(T*T),ie=u(H*H),fe=u(q*q),xe=u(fe*fe),Ne=u(ae*v),Be=u(fe*u(Ne+ie)),Ke=u(xe+u(_*u(ae*ie)));if(Be!==Ke)throw new Error("bad point: equation left != right (1)");let kt=u(T*H),Zt=u(q*Y);if(kt!==Zt)throw new Error("bad point: equation left != right (2)");return!0});class w{constructor(v,_,T,H){this.ex=v,this.ey=_,this.ez=T,this.et=H,g("x",v),g("y",_),g("z",T),g("t",H),Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(v){if(v instanceof w)throw new Error("extended point not allowed");let{x:_,y:T}=v||{};return g("x",_),g("y",T),new w(_,T,tr,u(_*T))}static normalizeZ(v){let _=t.invertBatch(v.map(T=>T.ez));return v.map((T,H)=>T.toAffine(_[H])).map(w.fromAffine)}static msm(v,_){return tu(w,d,v,_)}_setWindowSize(v){D.setWindowSize(this,v)}assertValidity(){x(this)}equals(v){m(v);let{ex:_,ey:T,ez:H}=this,{ex:q,ey:Y,ez:ae}=v,ie=u(_*ae),fe=u(q*H),xe=u(T*ae),Ne=u(Y*H);return ie===fe&&xe===Ne}is0(){return this.equals(w.ZERO)}negate(){return new w(u(-this.ex),this.ey,this.ez,u(-this.et))}double(){let{a:v}=e,{ex:_,ey:T,ez:H}=this,q=u(_*_),Y=u(T*T),ae=u(ru*u(H*H)),ie=u(v*q),fe=_+T,xe=u(u(fe*fe)-q-Y),Ne=ie+Y,Be=Ne-ae,Ke=ie-Y,kt=u(xe*Be),Zt=u(Ne*Ke),$t=u(xe*Ke),fn=u(Be*Ne);return new w(kt,Zt,fn,$t)}add(v){m(v);let{a:_,d:T}=e,{ex:H,ey:q,ez:Y,et:ae}=this,{ex:ie,ey:fe,ez:xe,et:Ne}=v;if(_===BigInt(-1)){let P4=u((q-H)*(fe+ie)),R4=u((q+H)*(fe-ie)),d0=u(R4-P4);if(d0===Qr)return this.double();let D4=u(Y*ru*Ne),L4=u(ae*ru*xe),N4=L4+D4,B4=R4+P4,O4=L4-D4,Ax=u(N4*d0),Ix=u(B4*O4),Tx=u(N4*O4),_x=u(d0*B4);return new w(Ax,Ix,_x,Tx)}let Be=u(H*ie),Ke=u(q*fe),kt=u(ae*T*Ne),Zt=u(Y*xe),$t=u((H+q)*(ie+fe)-Be-Ke),fn=Zt-kt,Pn=Zt+kt,Ea=u(Ke-_*Be),xx=u($t*fn),vx=u(Pn*Ea),Ex=u($t*Ea),Sx=u(fn*Pn);return new w(xx,vx,Sx,Ex)}subtract(v){return this.add(v.negate())}wNAF(v){return D.wNAFCached(this,v,w.normalizeZ)}multiply(v){let _=v;xt("scalar",_,tr,n);let{p:T,f:H}=this.wNAF(_);return w.normalizeZ([T,H])[0]}multiplyUnsafe(v,_=w.ZERO){let T=v;return xt("scalar",T,Qr,n),T===Qr?B:this.is0()||T===tr?this:D.wNAFCachedUnsafe(this,T,w.normalizeZ,_)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return D.unsafeLadder(this,n).is0()}toAffine(v){return y(this,v)}clearCofactor(){let{h:v}=e;return v===tr?this:this.multiplyUnsafe(v)}static fromHex(v,_=!1){let{d:T,a:H}=e,q=t.BYTES;v=De("pointHex",v,q),Wr("zip215",_);let Y=v.slice(),ae=v[q-1];Y[q-1]=ae&-129;let ie=Gr(Y),fe=_?l:t.ORDER;xt("pointHex.y",ie,Qr,fe);let xe=u(ie*ie),Ne=u(xe-tr),Be=u(T*xe-H),{isValid:Ke,value:kt}=f(Ne,Be);if(!Ke)throw new Error("Point.fromHex: invalid y coordinate");let Zt=(kt&tr)===tr,$t=(ae&128)!==0;if(!_&&kt===Qr&&$t)throw new Error("Point.fromHex: x=0 and x_0=1");return $t!==Zt&&(kt=u(-kt)),w.fromAffine({x:kt,y:ie})}static fromPrivateKey(v){return A(v).point}toRawBytes(){let{x:v,y:_}=this.toAffine(),T=Un(_,t.BYTES);return T[T.length-1]|=v&tr?128:0,T}toHex(){return On(this.toRawBytes())}}w.BASE=new w(e.Gx,e.Gy,tr,u(e.Gx*e.Gy)),w.ZERO=new w(Qr,tr,tr,Qr);let{BASE:I,ZERO:B}=w,D=eu(w,a*8);function R(E){return Ie(E,n)}function S(E){return R(Gr(E))}function A(E){let v=t.BYTES;E=De("private key",E,v);let _=De("hashed private key",i(E),2*v),T=h(_.slice(0,v)),H=_.slice(v,2*v),q=S(T),Y=I.multiply(q),ae=Y.toRawBytes();return{head:T,prefix:H,scalar:q,point:Y,pointBytes:ae}}function F(E){return A(E).pointBytes}function L(E=new Uint8Array,...v){let _=Fn(...v);return S(i(p(_,De("context",E),!!o)))}function M(E,v,_={}){E=De("message",E),o&&(E=o(E));let{prefix:T,scalar:H,pointBytes:q}=A(v),Y=L(_.context,T,E),ae=I.multiply(Y).toRawBytes(),ie=L(_.context,ae,q,E),fe=R(Y+ie*H);xt("signature.s",fe,Qr,n);let xe=Fn(ae,Un(fe,t.BYTES));return De("result",xe,t.BYTES*2)}let K=SS;function C(E,v,_,T=K){let{context:H,zip215:q}=T,Y=t.BYTES;E=De("signature",E,2*Y),v=De("message",v),_=De("publicKey",_,Y),q!==void 0&&Wr("zip215",q),o&&(v=o(v));let ae=Gr(E.slice(Y,2*Y)),ie,fe,xe;try{ie=w.fromHex(_,q),fe=w.fromHex(E.slice(0,Y),q),xe=I.multiplyUnsafe(ae)}catch{return!1}if(!q&&ie.isSmallOrder())return!1;let Ne=L(H,fe.toRawBytes(),ie.toRawBytes(),v);return fe.add(ie.multiplyUnsafe(Ne)).subtract(xe).clearCofactor().equals(w.ZERO)}return I._setWindowSize(8),{CURVE:e,getPublicKey:F,sign:M,verify:C,ExtendedPoint:w,utils:{getExtendedPublicKey:A,randomPrivateKey:()=>s(t.BYTES),precompute(E=8,v=w.BASE){return v._setWindowSize(E),v.multiply(BigInt(3)),v}}}}var xs=BigInt(0),A2=BigInt(1);function IS(r){return Ir(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function Ng(r){let e=IS(r),{P:t}=e,n=x=>Ie(x,t),o=e.montgomeryBits,i=Math.ceil(o/8),s=e.nByteLength,a=e.adjustScalarBytes||(x=>x),c=e.powPminus2||(x=>g2(x,t-BigInt(2),t));function l(x,w,I){let B=n(x*(w-I));return w=n(w-B),I=n(I+B),[w,I]}let u=(e.a-BigInt(2))/BigInt(4);function d(x,w){xt("u",x,xs,t),xt("scalar",w,xs,t);let I=w,B=x,D=A2,R=xs,S=x,A=A2,F=xs,L;for(let K=BigInt(o-1);K>=xs;K--){let C=I>>K&A2;F^=C,L=l(F,D,S),D=L[0],S=L[1],L=l(F,R,A),R=L[0],A=L[1],F=C;let P=D+R,E=n(P*P),v=D-R,_=n(v*v),T=E-_,H=S+A,q=S-A,Y=n(q*P),ae=n(H*v),ie=Y+ae,fe=Y-ae;S=n(ie*ie),A=n(B*n(fe*fe)),D=n(E*_),R=n(T*(E+n(u*T)))}L=l(F,D,S),D=L[0],S=L[1],L=l(F,R,A),R=L[0],A=L[1];let M=c(R);return n(D*M)}function f(x){return Un(n(x),i)}function h(x){let w=De("u coordinate",x,i);return s===32&&(w[31]&=127),Gr(w)}function p(x){let w=De("scalar",x),I=w.length;if(I!==i&&I!==s){let B=""+i+" or "+s;throw new Error("invalid scalar, expected "+B+" bytes, got "+I)}return Gr(a(w))}function g(x,w){let I=h(w),B=p(x),D=d(I,B);if(D===xs)throw new Error("invalid private or public key received");return f(D)}let m=f(e.Gu);function y(x){return g(x,m)}return{scalarMult:g,scalarMultBase:y,getSharedSecret:(x,w)=>g(x,w),getPublicKey:x=>y(x),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:m}}var Oa=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),Bg=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),SB=BigInt(0),TS=BigInt(1),Og=BigInt(2),_S=BigInt(3),CS=BigInt(5),kS=BigInt(8);function Mg(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),i=Oa,a=r*r%i*r%i,c=Fe(a,Og,i)*a%i,l=Fe(c,TS,i)*r%i,u=Fe(l,CS,i)*l%i,d=Fe(u,e,i)*u%i,f=Fe(d,t,i)*d%i,h=Fe(f,n,i)*f%i,p=Fe(h,o,i)*h%i,g=Fe(p,o,i)*h%i,m=Fe(g,e,i)*u%i;return{pow_p_5_8:Fe(m,Og,i)*r%i,b2:a}}function Ug(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function PS(r,e){let t=Oa,n=Ie(e*e*e,t),o=Ie(n*n*e,t),i=Mg(r*o).pow_p_5_8,s=Ie(r*n*i,t),a=Ie(e*s*s,t),c=s,l=Ie(s*Bg,t),u=a===r,d=a===Ie(-r,t),f=a===Ie(-r*Bg,t);return u&&(s=c),(d||f)&&(s=l),_g(s,t)&&(s=Ie(-s,t)),{isValid:u||d,value:s}}var RS=So(Oa,void 0,!0),DS={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:RS,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:kS,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:xo,randomBytes:di,adjustScalarBytes:Ug,uvRatio:PS},Ma=Lg(DS);var Ua=Ng({P:Oa,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=Oa,{pow_p_5_8:t,b2:n}=Mg(r);return Ie(Fe(t,_S,e)*n,e)},adjustScalarBytes:Ug,randomBytes:di});var vs=32,wn=64,I2=32;function Fg(){let r=Ma.utils.randomPrivateKey(),e=Ma.getPublicKey(r);return{privateKey:LS(r,e),publicKey:e}}function Vg(r,e){let t=r.subarray(0,I2);return Ma.sign(e instanceof Uint8Array?e:e.subarray(),t)}function $g(r,e,t){return Ma.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function LS(r,e){let t=new Uint8Array(wn);for(let n=0;n<I2;n++)t[n]=r[n],t[I2+n]=e[n];return t}var Fa=class{type="Ed25519";raw;constructor(e){this.raw=Ss(e,vs)}toMultihash(){return er.digest(Mt(this))}toCID(){return X.createV1(114,this.toMultihash())}toString(){return ve.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ne(this.raw,e.raw)}verify(e,t){return $g(this.raw,t,e)}},Es=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=Ss(e,wn),this.publicKey=new Fa(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ne(this.raw,e.raw)}sign(e){return Vg(this.raw,e)}};function T2(r){if(r.length>wn){r=Ss(r,wn+vs);let n=r.subarray(0,wn),o=r.subarray(wn,r.length);return new Es(n,o)}r=Ss(r,wn);let e=r.subarray(0,wn),t=r.subarray(vs);return new Es(e,t)}function _2(r){return r=Ss(r,vs),new Fa(r)}async function Hg(){let{privateKey:r,publicKey:e}=Fg();return new Es(r,e)}function Ss(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new k(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var Ye;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1"})(Ye||(Ye={}));var C2;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1"})(C2||(C2={}));(function(r){r.codec=()=>He(C2)})(Ye||(Ye={}));var bn;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Ye.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(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.Type=Ye.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(bn||(bn={}));var Va;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Ye.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(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.Type=Ye.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(Va||(Va={}));var ja={};Xe(ja,{MAX_RSA_KEY_SIZE:()=>Wu,generateRSAKeyPair:()=>F2,jwkToJWKKeyPair:()=>F6,jwkToPkcs1:()=>QS,jwkToPkix:()=>M2,jwkToRSAPrivateKey:()=>U6,pkcs1ToJwk:()=>O6,pkcs1ToRSAPrivateKey:()=>Gu,pkixToJwk:()=>M6,pkixToRSAPublicKey:()=>U2});var NS=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Ao=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Io=new Uint32Array(64),k2=class extends yo{constructor(){super(64,32,8,!1),this.A=Ao[0]|0,this.B=Ao[1]|0,this.C=Ao[2]|0,this.D=Ao[3]|0,this.E=Ao[4]|0,this.F=Ao[5]|0,this.G=Ao[6]|0,this.H=Ao[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:a,H:c}=this;return[e,t,n,o,i,s,a,c]}set(e,t,n,o,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let d=0;d<16;d++,t+=4)Io[d]=e.getUint32(t,!1);for(let d=16;d<64;d++){let f=Io[d-15],h=Io[d-2],p=qr(f,7)^qr(f,18)^f>>>3,g=qr(h,17)^qr(h,19)^h>>>10;Io[d]=g+Io[d-7]+p+Io[d-16]|0}let{A:n,B:o,C:i,D:s,E:a,F:c,G:l,H:u}=this;for(let d=0;d<64;d++){let f=qr(a,6)^qr(a,11)^qr(a,25),h=u+f+Wl(a,c,l)+NS[d]+Io[d]|0,g=(qr(n,2)^qr(n,13)^qr(n,22))+Gl(n,o,i)|0;u=l,l=c,c=a,a=s+h|0,s=i,i=o,o=n,n=h+g|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,u=u+this.H|0,this.set(n,o,i,s,a,c,l,u)}roundClean(){Io.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Tr=ws(()=>new k2);var ye=Ur(zg());function gi(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 To(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 u=a-1;u>=0;u--){let d=Math.pow(2,u*e);l[i-u-1]=Math.floor(o/d),o-=l[i-u-1]*d}return c}s*=Math.pow(2,e)}return new ArrayBuffer(0)}function iu(...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 R2(){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=gi(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,gi(i,8)-n}function Wg(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=To(s,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=To(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 Gg(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 rr(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 HB=Math.log(2);function su(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function D2(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 zn(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 Ka=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return D2(this.items)}},$a=[new Uint8Array([1])],Qg="0123456789";var Ts="",Yr=new ArrayBuffer(0),L2=new Uint8Array(0),Ha="EndOfContent",Xg="OCTET STRING",jg="BIT STRING";function Wn(r){var e;return e=class extends r{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?ye.BufferSourceConverter.toUint8Array(i.valueHex):L2}get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}fromBER(n,o,i){let s=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!zn(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",Yr)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:ye.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var $n=class{constructor({blockLength:e=0,error:t=Ts,warnings:n=[],valueBeforeDecode:o=L2}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=ye.BufferSourceConverter.toUint8Array(o)}static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:ye.Convert.ToHex(this.valueBeforeDecodeView)}}};$n.NAME="baseBlock";var Ut=class extends $n{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'")}};Ut.NAME="valueBlock";var au=class extends Wn($n){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?ye.BufferSourceConverter.toUint8Array(e.valueHex):L2,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",Yr}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=To(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=ye.BufferSourceConverter.toUint8Array(e);if(!zn(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),u=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===u){u+=255;let f=new Uint8Array(u);for(let h=0;h<l.length;h++)f[h]=l[h];l=this.valueHexView=new Uint8Array(u)}}this.blockLength=c+1,l[c-1]=i[c]&127;let d=new Uint8Array(c);for(let f=0;f<c;f++)d[f]=l[f];l=this.valueHexView=new Uint8Array(c),l.set(d),this.blockLength<=9?this.tagNumber=gi(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}}};au.NAME="identificationBlock";var cu=class extends $n{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=ye.BufferSourceConverter.toUint8Array(e);if(!zn(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=gi(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=To(this.length,8);if(o.byteLength>127)return this.error="Too big length",Yr;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}}};cu.NAME="lengthBlock";var G={},vt=class extends $n{constructor({name:e=Ts,optional:t=!1,primitiveSchema:n,...o}={},i){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new au(o),this.lenBlock=new cu(o),this.valueBlock=i?new i(o):new Ut(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 Ka;t||Zg(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?Yr: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():ye.Convert.ToHex(this.toBER())}onAsciiEncoding(){return`${this.constructor.NAME} : ${ye.Convert.ToHex(this.valueBlock.valueBeforeDecodeView)}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return Gg(t,n)}};vt.NAME="BaseBlock";function Zg(r){if(r instanceof G.Constructed)for(let e of r.valueBlock.value)Zg(e)&&(r.lenBlock.isIndefiniteForm=!0);return!!r.lenBlock.isIndefiniteForm}var lu=class extends vt{constructor({value:e=Ts,...t}={},n){super(t,n),e&&this.fromString(e)}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=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}'`}};lu.NAME="BaseStringBlock";var uu=class extends Wn(Ut){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};uu.NAME="PrimitiveValueBlock";var Jg,du=class extends vt{constructor(e={}){super(e,uu),this.idBlock.isConstructed=!1}};Jg=du;G.Primitive=Jg;du.NAME="PRIMITIVE";function HS(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 qu(r,e=0,t=r.length){let n=e,o=new vt({},Ut),i=new $n;if(!zn(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=vt;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=G.EndOfContent;break;case 1:c=G.Boolean;break;case 2:c=G.Integer;break;case 3:c=G.BitString;break;case 4:c=G.OctetString;break;case 5:c=G.Null;break;case 6:c=G.ObjectIdentifier;break;case 10:c=G.Enumerated;break;case 12:c=G.Utf8String;break;case 13:c=G.RelativeObjectIdentifier;break;case 14:c=G.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=G.Sequence;break;case 17:c=G.Set;break;case 18:c=G.NumericString;break;case 19:c=G.PrintableString;break;case 20:c=G.TeletexString;break;case 21:c=G.VideotexString;break;case 22:c=G.IA5String;break;case 23:c=G.UTCTime;break;case 24:c=G.GeneralizedTime;break;case 25:c=G.GraphicString;break;case 26:c=G.VisibleString;break;case 27:c=G.GeneralString;break;case 28:c=G.UniversalString;break;case 29:c=G.CharacterString;break;case 30:c=G.BmpString;break;case 31:c=G.DATE;break;case 32:c=G.TimeOfDay;break;case 33:c=G.DateTime;break;case 34:c=G.Duration;break;default:{let l=o.idBlock.isConstructed?new G.Constructed:new G.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?G.Constructed:G.Primitive}return o=HS(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 yi(r){if(!r.byteLength){let e=new vt({},Ut);return e.error="Input buffer has zero length",{offset:-1,result:e}}return qu(ye.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function qS(r,e){return r?1:e}var xn=class extends Ut{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!zn(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(;qS(this.isIndefiniteForm,n)>0;){let s=qu(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===Ha)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===Ha?this.value.pop():this.warnings.push("No EndOfContent block encoded")),i}toBER(e,t){let n=t||new Ka;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?Yr:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};xn.NAME="ConstructedValueBlock";var e6,_o=class extends vt{constructor(e={}){super(e,xn),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(`
2
+ "use strict";var Helia=(()=>{var Yx=Object.create;var sl=Object.defineProperty;var Xx=Object.getOwnPropertyDescriptor;var Zx=Object.getOwnPropertyNames;var jx=Object.getPrototypeOf,Jx=Object.prototype.hasOwnProperty;var _t=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Ze=(r,e)=>{for(var t in e)sl(r,t,{get:e[t],enumerable:!0})},H4=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Zx(e))!Jx.call(r,o)&&o!==t&&sl(r,o,{get:()=>e[o],enumerable:!(n=Xx(e,o))||n.enumerable});return r};var Mr=(r,e,t)=>(t=r!=null?Yx(jx(r)):{},H4(e||!r||!r.__esModule?sl(t,"default",{value:r,enumerable:!0}):t,r)),ev=r=>H4(sl({},"__esModule",{value:!0}),r);var V6=_t((LF,J2)=>{"use strict";var ZA=Object.prototype.hasOwnProperty,Wt="~";function ja(){}Object.create&&(ja.prototype=Object.create(null),new ja().__proto__||(Wt=!1));function jA(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function F6(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new jA(t,n||r,o),s=Wt?Wt+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 hu(r,e){--r._eventsCount===0?r._events=new ja:delete r._events[e]}function Lt(){this._events=new ja,this._eventsCount=0}Lt.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)ZA.call(t,n)&&e.push(Wt?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Lt.prototype.listeners=function(e){var t=Wt?Wt+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};Lt.prototype.listenerCount=function(e){var t=Wt?Wt+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Lt.prototype.emit=function(e,t,n,o,i,s){var a=Wt?Wt+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,u,d;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(d=1,u=new Array(l-1);d<l;d++)u[d-1]=arguments[d];c.fn.apply(c.context,u)}else{var f=c.length,h;for(d=0;d<f;d++)switch(c[d].once&&this.removeListener(e,c[d].fn,void 0,!0),l){case 1:c[d].fn.call(c[d].context);break;case 2:c[d].fn.call(c[d].context,t);break;case 3:c[d].fn.call(c[d].context,t,n);break;case 4:c[d].fn.call(c[d].context,t,n,o);break;default:if(!u)for(h=1,u=new Array(l-1);h<l;h++)u[h-1]=arguments[h];c[d].fn.apply(c[d].context,u)}}return!0};Lt.prototype.on=function(e,t,n){return F6(this,e,t,n,!1)};Lt.prototype.once=function(e,t,n){return F6(this,e,t,n,!0)};Lt.prototype.removeListener=function(e,t,n,o){var i=Wt?Wt+e:e;if(!this._events[i])return this;if(!t)return hu(this,i),this;var s=this._events[i];if(s.fn)s.fn===t&&(!o||s.once)&&(!n||s.context===n)&&hu(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:hu(this,i)}return this};Lt.prototype.removeAllListeners=function(e){var t;return e?(t=Wt?Wt+e:e,this._events[t]&&hu(this,t)):(this._events=new ja,this._eventsCount=0),this};Lt.prototype.off=Lt.prototype.removeListener;Lt.prototype.addListener=Lt.prototype.on;Lt.prefixed=Wt;Lt.EventEmitter=Lt;typeof J2<"u"&&(J2.exports=Lt)});var z6=_t((nV,q6)=>{q6.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 R5=_t(dc=>{(function(){var r,e,t,n,o,i,s,a;a=function(c){var l,u,d,f;return l=(c&255<<24)>>>24,u=(c&255<<16)>>>16,d=(c&65280)>>>8,f=c&255,[l,u,d,f].join(".")},s=function(c){var l,u,d,f,h,p;for(l=[],d=f=0;f<=3&&c.length!==0;d=++f){if(d>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}p=e(c),h=p[0],u=p[1],c=c.substring(u),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,u,d,f,h;for(f=0,l=10,u="9",d=0,c.length>1&&c[d]==="0"&&(c[d+1]==="x"||c[d+1]==="X"?(d+=2,l=16):"0"<=c[d+1]&&c[d+1]<="9"&&(d++,l=8,u="7")),h=d;d<c.length;){if("0"<=c[d]&&c[d]<=u)f=f*l+(t(c[d])-n)>>>0;else if(l===16)if("a"<=c[d]&&c[d]<="f")f=f*l+(10+t(c[d])-i)>>>0;else if("A"<=c[d]&&c[d]<="F")f=f*l+(10+t(c[d])-o)>>>0;else break;else break;if(f>4294967295)throw new Error("too large");d++}if(d===h)throw new Error("empty octet");return[f,d]},r=function(){function c(l,u){var d,f,h,p;if(typeof l!="string")throw new Error("Missing `net' parameter");if(u||(p=l.split("/",2),l=p[0],u=p[1]),u||(u=32),typeof u=="string"&&u.indexOf(".")>-1){try{this.maskLong=s(u)}catch(g){throw d=g,new Error("Invalid mask: "+u)}for(f=h=32;h>=0;f=--h)if(this.maskLong===4294967295<<32-f>>>0){this.bitmask=f;break}}else if(u||u===0)this.bitmask=parseInt(u,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(g){throw d=g,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+u);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 u,d,f;for(f=s(this.first),d=s(this.last),u=0;f<=d;)l(a(f),f,u),u++,f++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c}(),dc.ip2long=s,dc.long2ip=a,dc.Netmask=r}).call(dc)});var md=_t((qz,Am)=>{var Hz=function(){typeof Am<"u"&&(Am.exports=g);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(S){var A=S-S%1;return A==0&&(S<0||S===0&&1/S!=1/0)?-0:A},u=g.prototype,d=(g.fromDate=function(S){return new g(+S)},g.fromInt64BE=I(0,1,2,3,0,4),g.fromInt64LE=I(3,2,1,0,4,0),g.fromString=function(N){var A,F=new g,N=(N+="").replace(/^\s*[+\-]?\d+/,function(K){var K=+K,C=1970+(K-1970)%400;return F.year=K-C,C}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(U,K,C){return K<0&&(C*=-1),A=6e4*(60*+K+ +C),""}).replace(/\.\d+$/,function(U){return F.nano=+(U+c).substr(1,9),""}).split(/\D+/);if(1<N.length?N[1]--:N[1]=0,F.time=A=Date.UTC.apply(Date,N)-(A||0),isNaN(A))throw new TypeError("Invalid Date");return m(F)},g.fromTimeT=function(S){return x(S,0)},u.year=0,u.time=0,u.nano=0,u.addNano=function(S){return this.nano+=+S||0,this},u.getNano=function(){var S=m(this);return(S.time%1e3*a+ +S.nano+1e9)%1e9},u.getTimeT=function(){var A=m(this),S=Math.floor(A.time/1e3),A=A.year;return A&&(S+=A*t*r/e),S},u.getYear=function(){return this.toDate().getUTCFullYear()+this.year},u.toDate=function(){return y(m(this).time)},u.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},u.toString=function(S){var A=this,F=A.toDate(),N={H:function(){return D(F.getUTCHours())},L:function(){return R(F.getUTCMilliseconds(),3)},M:function(){return D(F.getUTCMinutes())},N:function(){return R(A.getNano(),9)},S:function(){return D(F.getUTCSeconds())},Y:function(){var U=A.getYear();return 999999<U?"+"+U:9999<U?"+"+R(U,6):0<=U?R(U,4):-999999<=U?"-"+R(-U,6):U},a:function(){return h[F.getUTCDay()]},b:function(){return f[F.getUTCMonth()]},d:function(){return D(F.getUTCDate())},e:function(){return function(U){return(9<U?"":" ")+(0|U)}(F.getUTCDate())},m:function(){return D(F.getUTCMonth()+1)}};return function U(K){return K.replace(/%./g,function(C){var E=C[1],k=p[E],E=N[E];return k?U(k):E?E():C})}(S||d)},u.writeInt64BE=w(0,1,2,3,0,4),u.writeInt64LE=w(3,2,1,0,4,0),"%Y-%m-%dT%H:%M:%S.%NZ"),f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],h=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],p={"%":"%",F:"%Y-%m-%d",n:`
3
+ `,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return g;function g(S,A,F){var N=this;if(!(N instanceof g))return new g(S,A,F);N.time=+S||0,N.nano=+A||0,N.year=+F||0,m(N)}function m(S){var A,F,N,U=S.year,K=S.time,C=S.nano,k=((C<0||a<=C)&&(C-=(F=Math.floor(C/a))*a,K+=F,F=1),U%e);return(K<-i||i<K||k)&&((A=l(K/o))&&(U+=A*e,K-=A*o),(N=y(K)).setUTCFullYear(k+N.getUTCFullYear()),N=(K=+N)+(A=l((U-=k)/e))*o,A&&-i<=N&&N<=i&&(U-=A*e,K=N),F=1),F&&(S.year=U,S.time=K,S.nano=C),S}function y(S){var A=new Date(0);return A.setTime(S),A}function x(U,N){U=+U||0;var F=l((N=(N|0)*s)/n)+l(U/n),N=N%n+U%n,U=l(N/n);return U&&(F+=U,N-=U*n),new g(1e3*N,0,F*e)}function w(S,A,F,N,U,K){return function(k,E){var _=m(this);k=k||new Array(8),M(k,E|=0);var T=Math.floor(_.time/1e3),_=_.year*(t*r/e),v=l(_/s)+l(T/s),_=_%s+T%s,T=Math.floor(_/s);return T&&(v+=T,_-=T*s),C(k,E+U,v),C(k,E+K,_),k};function C(k,E,v){k[E+S]=v>>24&255,k[E+A]=v>>16&255,k[E+F]=v>>8&255,k[E+N]=255&v}}function I(S,A,F,N,U,K){return function(k,E){M(k,E|=0);var v=C(k,E+U);return x(C(k,E+K),v)};function C(k,E){return 16777216*k[E+S]+(k[E+A]<<16|k[E+F]<<8|k[E+N])}}function M(S,A){if(S=S&&S.length,S==null)throw new TypeError("Invalid Buffer");if(S<A+8)throw new RangeError("Out of range")}function D(S){return(9<S?"":"0")+(0|S)}function R(S,A){return(c+(0|S)).substr(-A)}}()});var Oy=_t((Vie,Ly)=>{"use strict";Ly.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var $y=_t((Fy,Vy)=>{"use strict";var sf=Oy(),{hasOwnProperty:By}=Object.prototype,{propertyIsEnumerable:yk}=Object,oa=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),wk=Fy,My={concatArrays:!1,ignoreUndefined:!1},af=r=>{let e=[];for(let t in r)By.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)yk.call(r,n)&&e.push(n)}return e};function ia(r){return Array.isArray(r)?bk(r):sf(r)?xk(r):r}function bk(r){let e=r.slice(0,0);return af(r).forEach(t=>{oa(e,t,ia(r[t]))}),e}function xk(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return af(r).forEach(t=>{oa(e,t,ia(r[t]))}),e}var Uy=(r,e,t,n)=>(t.forEach(o=>{typeof e[o]>"u"&&n.ignoreUndefined||(o in r&&r[o]!==Object.getPrototypeOf(r)?oa(r,o,L3(r[o],e[o],n)):oa(r,o,ia(e[o])))}),r),vk=(r,e,t)=>{let n=r.slice(0,0),o=0;return[r,e].forEach(i=>{let s=[];for(let a=0;a<i.length;a++)By.call(i,a)&&(s.push(String(a)),i===r?oa(n,o++,i[a]):oa(n,o++,ia(i[a])));n=Uy(n,i,af(i).filter(a=>!s.includes(a)),t)}),n};function L3(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?vk(r,e,t):!sf(e)||!sf(r)?ia(e):Uy(r,e,af(e),t)}Vy.exports=function(...r){let e=L3(ia(My),this!==wk&&this||{},My),t={_:{}};for(let n of r)if(n!==void 0){if(!sf(n))throw new TypeError("`"+n+"` is not an Option Object");t=L3(t,{_:n},e)}return t._}});var qy=_t((Kie,Hy)=>{"use strict";function Ek(r){return r>=55296&&r<=56319}function Sk(r){return r>=56320&&r<=57343}Hy.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],Ek(s)&&Sk(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 Wy=_t((Hie,zy)=>{"use strict";function Ak(r){return r>=55296&&r<=56319}function Ik(r){return r>=56320&&r<=57343}zy.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),Ik(o)?i!=null&&Ak(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 Qy=_t((qie,Gy)=>{"use strict";var Tk=qy(),_k=Wy();Gy.exports=Tk.bind(null,_k)});var Zy=_t((zie,Xy)=>{"use strict";var Ck=Qy(),kk=/[\/\?<>\\:\*\|"]/g,Pk=/[\x00-\x1f\x80-\x9f]/g,Rk=/^\.+$/,Dk=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,Nk=/[\. ]+$/;function Yy(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(kk,e).replace(Pk,e).replace(Rk,e).replace(Dk,e).replace(Nk,e);return Ck(t,255)}Xy.exports=function(r,e){var t=e&&e.replacement||"",n=Yy(r,t);return t===""?n:Yy(n,"")}});var jy=_t(ca=>{"use strict";var Ok="[object ArrayBuffer]",Zn=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===Ok}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}},O3="string",Mk=/^[0-9a-f\s]+$/i,Bk=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,Uk=/^[a-zA-Z0-9-_]+$/,lf=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=Zn.toUint8Array(e),n="";for(let i=0;i<t.length;i++)n+=String.fromCharCode(t[i]);return decodeURIComponent(escape(n))}},Nr=class{static toString(e,t=!1){let n=Zn.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}},uf=class r{static isHex(e){return typeof e===O3&&Mk.test(e)}static isBase64(e){return typeof e===O3&&Bk.test(e)}static isBase64Url(e){return typeof e===O3&&Uk.test(e)}static ToString(e,t="utf8"){let n=Zn.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 Nr.toString(n,!0);case"utf16":case"utf16be":return Nr.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 Nr.fromString(e,!0);case"utf16":case"utf16be":return Nr.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=Zn.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 lf.fromString(e);case"utf16":case"utf16be":return Nr.fromString(e);case"utf16le":case"usc2":return Nr.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 lf.toString(e);case"utf16":case"utf16be":return Nr.toString(e);case"utf16le":case"usc2":return Nr.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=Zn.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=Zn.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 Nr.toString(e,t)}static FromUtf16String(e,t=!1){return Nr.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,"")||""}};uf.DEFAULT_UTF8_ENCODING="utf8";function Fk(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 $k(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}ca.BufferSourceConverter=Zn;ca.Convert=uf;ca.assign=Fk;ca.combine=Vk;ca.isEqual=$k});var Ob=_t(bh=>{"use strict";Object.defineProperty(bh,"__esModule",{value:!0});var a4=class{constructor(){this.pullQueue=[],this.pushQueue=[],this.eventHandlers={},this.isPaused=!1,this.isStopped=!1}push(e){if(this.isStopped)return;let t={value:e,done:!1};if(this.pullQueue.length){let n=this.pullQueue.shift();n&&n.resolve(t)}else this.pushQueue.push(Promise.resolve(t)),this.highWaterMark!==void 0&&this.pushQueue.length>=this.highWaterMark&&!this.isPaused&&(this.isPaused=!0,this.eventHandlers.highWater?this.eventHandlers.highWater():console&&console.warn(`EventIterator queue reached ${this.pushQueue.length} items`))}stop(){if(!this.isStopped){this.isStopped=!0,this.remove();for(let e of this.pullQueue)e.resolve({value:void 0,done:!0});this.pullQueue.length=0}}fail(e){if(!this.isStopped)if(this.isStopped=!0,this.remove(),this.pullQueue.length){for(let t of this.pullQueue)t.reject(e);this.pullQueue.length=0}else{let t=Promise.reject(e);t.catch(()=>{}),this.pushQueue.push(t)}}remove(){Promise.resolve().then(()=>{this.removeCallback&&this.removeCallback()})}[Symbol.asyncIterator](){return{next:e=>{let t=this.pushQueue.shift();return t?(this.lowWaterMark!==void 0&&this.pushQueue.length<=this.lowWaterMark&&this.isPaused&&(this.isPaused=!1,this.eventHandlers.lowWater&&this.eventHandlers.lowWater()),t):this.isStopped?Promise.resolve({value:void 0,done:!0}):new Promise((n,o)=>{this.pullQueue.push({resolve:n,reject:o})})},return:()=>(this.isStopped=!0,this.pushQueue.length=0,this.remove(),Promise.resolve({value:void 0,done:!0}))}}},wh=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let o=new a4;o.highWaterMark=t,o.lowWaterMark=n,o.removeCallback=e({push:i=>o.push(i),stop:()=>o.stop(),fail:i=>o.fail(i),on:(i,s)=>{o.eventHandlers[i]=s}})||(()=>{}),this[Symbol.asyncIterator]=()=>o[Symbol.asyncIterator](),Object.freeze(this)}};bh.EventIterator=wh;bh.default=wh});var Mb=_t(Jc=>{"use strict";Object.defineProperty(Jc,"__esModule",{value:!0});var c4=Ob();Jc.EventIterator=c4.EventIterator;function DP(r,e,t){return new c4.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}Jc.subscribe=DP;Jc.default=c4.EventIterator});var _x=_t((nfe,Tx)=>{function Or(r,e){typeof e=="boolean"&&(e={forever:e}),this._originalTimeouts=JSON.parse(JSON.stringify(r)),this._timeouts=r,this._options=e||{},this._maxRetryTime=e&&e.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._timer=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}Tx.exports=Or;Or.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts.slice(0)};Or.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timer&&clearTimeout(this._timer),this._timeouts=[],this._cachedTimeouts=null};Or.prototype.retry=function(r){if(this._timeout&&clearTimeout(this._timeout),!r)return!1;var e=new Date().getTime();if(r&&e-this._operationStart>=this._maxRetryTime)return this._errors.push(r),this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(r);var t=this._timeouts.shift();if(t===void 0)if(this._cachedTimeouts)this._errors.splice(0,this._errors.length-1),t=this._cachedTimeouts.slice(-1);else return!1;var n=this;return this._timer=setTimeout(function(){n._attempts++,n._operationTimeoutCb&&(n._timeout=setTimeout(function(){n._operationTimeoutCb(n._attempts)},n._operationTimeout),n._options.unref&&n._timeout.unref()),n._fn(n._attempts)},t),this._options.unref&&this._timer.unref(),!0};Or.prototype.attempt=function(r,e){this._fn=r,e&&(e.timeout&&(this._operationTimeout=e.timeout),e.cb&&(this._operationTimeoutCb=e.cb));var t=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){t._operationTimeoutCb()},t._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};Or.prototype.try=function(r){console.log("Using RetryOperation.try() is deprecated"),this.attempt(r)};Or.prototype.start=function(r){console.log("Using RetryOperation.start() is deprecated"),this.attempt(r)};Or.prototype.start=Or.prototype.try;Or.prototype.errors=function(){return this._errors};Or.prototype.attempts=function(){return this._attempts};Or.prototype.mainError=function(){if(this._errors.length===0)return null;for(var r={},e=null,t=0,n=0;n<this._errors.length;n++){var o=this._errors[n],i=o.message,s=(r[i]||0)+1;r[i]=s,s>=t&&(e=o,t=s)}return e}});var Cx=_t(Qi=>{var yR=_x();Qi.operation=function(r){var e=Qi.timeouts(r);return new yR(e,{forever:r&&(r.forever||r.retries===1/0),unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};Qi.timeouts=function(r){if(r instanceof Array)return[].concat(r);var e={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var t in r)e[t]=r[t];if(e.minTimeout>e.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var n=[],o=0;o<e.retries;o++)n.push(this.createTimeout(o,e));return r&&r.forever&&!n.length&&n.push(this.createTimeout(o,e)),n.sort(function(i,s){return i-s}),n};Qi.createTimeout=function(r,e){var t=e.randomize?Math.random()+1:1,n=Math.round(t*Math.max(e.minTimeout,1)*Math.pow(e.factor,r));return n=Math.min(n,e.maxTimeout),n};Qi.wrap=function(r,e,t){if(e instanceof Array&&(t=e,e=null),!t){t=[];for(var n in r)typeof r[n]=="function"&&t.push(n)}for(var o=0;o<t.length;o++){var i=t[o],s=r[i];r[i]=function(c){var l=Qi.operation(e),u=Array.prototype.slice.call(arguments,1),d=u.pop();u.push(function(f){l.retry(f)||(f&&(arguments[0]=l.mainError()),d.apply(this,arguments))}),l.attempt(function(){c.apply(r,u)})}.bind(r,s),r[i].options=e}}});var Px=_t((ife,kx)=>{kx.exports=Cx()});var UR={};Ze(UR,{DEFAULT_SESSION_MAX_PROVIDERS:()=>xp,DEFAULT_SESSION_MIN_PROVIDERS:()=>bp,InsufficientProvidersError:()=>ac,NoRoutersAvailableError:()=>Po,UnknownCodecError:()=>lc,UnknownHashAlgorithmError:()=>cc,createHelia:()=>MR,libp2pDefaults:()=>Sh});var q4=Symbol.for("@libp2p/connection");var hn=Symbol.for("@libp2p/content-routing");var Xo=Symbol.for("@libp2p/peer-discovery");var al=Symbol.for("@libp2p/peer-id");function cl(r){return!!r?.[al]}var pn=Symbol.for("@libp2p/peer-routing");var io="keep-alive";var so=Symbol.for("@libp2p/transport");var Zo;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(Zo||(Zo={}));var Vt=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},ll=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},ul=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"}},Pn=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},ya=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}};var dl=class extends Error{static name="ConnectionClosingError";constructor(e="The connection is closing"){super(e),this.name="ConnectionClosingError"}},Xi=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},Zi=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},mn=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},fl=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}},jo=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},Ce=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},ji=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},ao=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},hl=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},co=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},Rn=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},fe=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},pl=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},gn=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},Br=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var Dn=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},Jo=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},Ji=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},ml=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},lo=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},Ur=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var pe=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))}};function gl(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function mt(...r){let e=[];for(let t of r)gl(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 Ct(...r){let e=[];for(let t of r)gl(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 Ae=Symbol.for("@libp2p/service-capabilities"),dr=Symbol.for("@libp2p/service-dependencies");function le(r){let e=new globalThis.AbortController;function t(){e.abort();for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}for(let i of r){if(i?.aborted===!0){t();break}i?.addEventListener!=null&&i.addEventListener("abort",t)}function n(){for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}let o=e.signal;return o.clear=n,o}function j(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var yl=class{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||(e-1&e)!==0)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(e),this.mask=e-1,this.top=0,this.btm=0,this.next=null}push(e){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=e,this.top=this.top+1&this.mask,!0)}shift(){let e=this.buffer[this.btm];if(e!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,e}isEmpty(){return this.buffer[this.btm]===void 0}},es=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new yl(this.hwm),this.tail=this.head,this.size=0}calculateSize(e){return e?.byteLength!=null?e.byteLength:1}push(e){if(e?.value!=null&&(this.size+=this.calculateSize(e.value)),!this.head.push(e)){let t=this.head;this.head=t.next=new yl(2*this.head.buffer.length),this.head.push(e)}}shift(){let e=this.tail.shift();if(e===void 0&&this.tail.next!=null){let t=this.tail.next;this.tail.next=null,this.tail=t,e=this.tail.shift()}return e?.value!=null&&(this.size-=this.calculateSize(e.value)),e}isEmpty(){return this.head.isEmpty()}};var d0=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function Zt(r={}){return tv(t=>{let n=t.shift();if(n==null)return{done:!0};if(n.error!=null)throw n.error;return{done:n.done===!0,value:n.value}},r)}function tv(r,e){e=e??{};let t=e.onEnd,n=new es,o,i,s,a=j(),c=async()=>{try{return n.isEmpty()?s?{done:!0}:await new Promise((m,y)=>{i=x=>{i=null,n.push(x);try{m(r(n))}catch(w){y(w)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=j()})}},l=m=>i!=null?i(m):(n.push(m),o),u=m=>(n=new es,i!=null?i({error:m}):(n.push({error:m}),o)),d=m=>{if(s)return o;if(e?.objectMode!==!0&&m?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:m})},f=m=>s?o:(s=!0,m!=null?u(m):l({done:!0})),h=()=>(n=new es,f(),{done:!0}),p=m=>(f(m),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:h,throw:p,push:d,end:f,get readableLength(){return n.size},onEmpty:async m=>{let y=m?.signal;if(y?.throwIfAborted(),n.isEmpty())return;let x,w;y!=null&&(x=new Promise((I,M)=>{w=()=>{M(new d0)},y.addEventListener("abort",w)}));try{await Promise.race([a.promise,x])}finally{w!=null&&y!=null&&y?.removeEventListener("abort",w)}}},t==null)return o;let g=o;return o={[Symbol.asyncIterator](){return this},next(){return g.next()},throw(m){return g.throw(m),t!=null&&(t(m),t=void 0),{done:!0}},return(){return g.return(),t!=null&&(t(),t=void 0),{done:!0}},push:d,end(m){return g.end(m),t!=null&&(t(m),t=void 0),o},get readableLength(){return g.readableLength},onEmpty:m=>g.onEmpty(m)},o}var f0=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.name="AbortError",this.code=t??"ABORT_ERR"}};async function lt(r,e,t,n){let o=new f0(n?.errorMessage,n?.errorCode);return t?.aborted===!0?Promise.reject(o):new Promise((i,s)=>{function a(){t?.removeEventListener("abort",u),r.removeEventListener(e,c),n?.errorEvent!=null&&r.removeEventListener(n.errorEvent,l)}let c=d=>{try{if(n?.filter?.(d)===!1)return}catch(f){a(),s(f);return}a(),i(d)},l=d=>{a(),s(d.detail)},u=()=>{a(),s(o)};t?.addEventListener("abort",u),r.addEventListener(e,c),n?.errorEvent!=null&&r.addEventListener(n.errorEvent,l)})}var wl=class extends Error{remainingPoints;msBeforeNext;consumedPoints;isFirstInDuration;constructor(e="Rate limit exceeded",t){super(e),this.name="RateLimitError",this.remainingPoints=t.remainingPoints,this.msBeforeNext=t.msBeforeNext,this.consumedPoints=t.consumedPoints,this.isFirstInDuration=t.isFirstInDuration}},bl=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var xl=class extends Error{type;code;constructor(e,t,n){super(e??"The operation was aborted"),this.type="aborted",this.name=n??"AbortError",this.code=t??"ABORT_ERR"}};async function Ge(r,e,t){if(e==null)return r;if(e.aborted)return r.catch(()=>{}),Promise.reject(new xl(t?.errorMessage,t?.errorCode,t?.errorName));let n,o=new xl(t?.errorMessage,t?.errorCode,t?.errorName);try{return await Promise.race([r,new Promise((i,s)=>{n=()=>{s(o)},e.addEventListener("abort",n)})])}finally{n!=null&&e.removeEventListener("abort",n)}}var vl=class{deferred;signal;constructor(e){this.signal=e,this.deferred=j(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new Vt)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function rv(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var El=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=rv(),this.status="queued",this.fn=e,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,this.controller.signal,this.onAbort=this.onAbort.bind(this)}abort(e){this.controller.abort(e)}onAbort(){this.recipients.reduce((t,n)=>t&&n.signal?.aborted===!0,!0)&&(this.controller.abort(new Vt),this.cleanup())}async join(e={}){let t=new vl(e.signal);return this.recipients.push(t),e.signal?.addEventListener("abort",this.onAbort),t.deferred.promise}async run(){this.status="running",this.timeline.started=Date.now();try{this.controller.signal.throwIfAborted();let e=await Ge(this.fn({...this.options??{},signal:this.controller.signal}),this.controller.signal);this.recipients.forEach(t=>{t.deferred.resolve(e)}),this.status="complete"}catch(e){this.recipients.forEach(t=>{t.deferred.reject(e)}),this.status="errored"}finally{this.timeline.finished=Date.now(),this.cleanup()}}cleanup(){this.recipients.forEach(e=>{e.cleanup(),e.signal?.removeEventListener("abort",this.onAbort)})}};var $t=class extends pe{concurrency;maxSize;queue;pending;sort;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,e.metricName!=null&&e.metrics?.registerMetricGroup(e.metricName,{calculate:()=>({size:this.queue.length,running:this.pending,queued:this.queue.length-this.pending})}),this.sort=e.sort,this.queue=[]}tryToStartAnother(){if(this.size===0)return queueMicrotask(()=>{this.safeDispatchEvent("empty")}),this.running===0&&queueMicrotask(()=>{this.safeDispatchEvent("idle")}),!1;if(this.pending<this.concurrency){let e;for(let t of this.queue)if(t.status==="queued"){e=t;break}return e==null?!1:(this.safeDispatchEvent("active"),this.pending++,e.run().finally(()=>{for(let t=0;t<this.queue.length;t++)if(this.queue[t]===e){this.queue.splice(t,1);break}this.pending--,this.tryToStartAnother(),this.safeDispatchEvent("next")}),!0)}return!1}enqueue(e){this.queue.push(e),this.sort!=null&&this.queue.sort(this.sort)}async add(e,t){if(t?.signal?.throwIfAborted(),this.size===this.maxSize)throw new bl;let n=new El(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.tryToStartAnother(),n.join(t).then(o=>(this.safeDispatchEvent("completed",{detail:o}),this.safeDispatchEvent("success",{detail:{job:n,result:o}}),o)).catch(o=>{if(n.status==="queued"){for(let i=0;i<this.queue.length;i++)if(this.queue[i]===n){this.queue.splice(i,1);break}}throw this.safeDispatchEvent("error",{detail:o}),this.safeDispatchEvent("failure",{detail:{job:n,error:o}}),o})}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new Vt)}),this.clear()}async onEmpty(e){this.size!==0&&await lt(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await lt(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await lt(this,"idle",e?.signal)}get size(){return this.queue.length}get queued(){return this.queue.length-this.pending}get running(){return this.pending}async*toGenerator(e){e?.signal?.throwIfAborted();let t=Zt({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail)},i=c=>{n(c.detail)},s=()=>{n()},a=()=>{n(new Vt("Queue aborted"))};this.addEventListener("completed",o),this.addEventListener("error",i),this.addEventListener("idle",s),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("error",i),this.removeEventListener("idle",s),e?.signal?.removeEventListener("abort",a),n()}}};var gt=class extends $t{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};function nv(r){return r[Symbol.asyncIterator]!=null}function ov(r){if(nv(r))return(async()=>{for await(let e of r);})();for(let e of r);}var kt=ov;function se(r=0){return new Uint8Array(r)}function Qe(r=0){return new Uint8Array(r)}var iv=Math.pow(2,7),sv=Math.pow(2,14),av=Math.pow(2,21),h0=Math.pow(2,28),p0=Math.pow(2,35),m0=Math.pow(2,42),g0=Math.pow(2,49),_e=128,Pt=127;function me(r){if(r<iv)return 1;if(r<sv)return 2;if(r<av)return 3;if(r<h0)return 4;if(r<p0)return 5;if(r<m0)return 6;if(r<g0)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function y0(r,e,t=0){switch(me(r)){case 8:e[t++]=r&255|_e,r/=128;case 7:e[t++]=r&255|_e,r/=128;case 6:e[t++]=r&255|_e,r/=128;case 5:e[t++]=r&255|_e,r/=128;case 4:e[t++]=r&255|_e,r>>>=7;case 3:e[t++]=r&255|_e,r>>>=7;case 2:e[t++]=r&255|_e,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function cv(r,e,t=0){switch(me(r)){case 8:e.set(t++,r&255|_e),r/=128;case 7:e.set(t++,r&255|_e),r/=128;case 6:e.set(t++,r&255|_e),r/=128;case 5:e.set(t++,r&255|_e),r/=128;case 4:e.set(t++,r&255|_e),r>>>=7;case 3:e.set(t++,r&255|_e),r>>>=7;case 2:e.set(t++,r&255|_e),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function w0(r,e){let t=r[e],n=0;if(n+=t&Pt,t<_e||(t=r[e+1],n+=(t&Pt)<<7,t<_e)||(t=r[e+2],n+=(t&Pt)<<14,t<_e)||(t=r[e+3],n+=(t&Pt)<<21,t<_e)||(t=r[e+4],n+=(t&Pt)*h0,t<_e)||(t=r[e+5],n+=(t&Pt)*p0,t<_e)||(t=r[e+6],n+=(t&Pt)*m0,t<_e)||(t=r[e+7],n+=(t&Pt)*g0,t<_e))return n;throw new RangeError("Could not decode varint")}function lv(r,e){let t=r.get(e),n=0;if(n+=t&Pt,t<_e||(t=r.get(e+1),n+=(t&Pt)<<7,t<_e)||(t=r.get(e+2),n+=(t&Pt)<<14,t<_e)||(t=r.get(e+3),n+=(t&Pt)<<21,t<_e)||(t=r.get(e+4),n+=(t&Pt)*h0,t<_e)||(t=r.get(e+5),n+=(t&Pt)*p0,t<_e)||(t=r.get(e+6),n+=(t&Pt)*m0,t<_e)||(t=r.get(e+7),n+=(t&Pt)*g0,t<_e))return n;throw new RangeError("Could not decode varint")}function $e(r,e,t=0){return e==null&&(e=Qe(me(r))),e instanceof Uint8Array?y0(r,e,t):cv(r,e,t)}function Kt(r,e=0){return r instanceof Uint8Array?w0(r,e):lv(r,e)}function ke(r,e){e==null&&(e=r.reduce((o,i)=>o+i.length,0));let t=Qe(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}function J(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}var W4=Symbol.for("@achingbrain/uint8arraylist");function z4(r,e){if(e==null||e<0)throw new RangeError("index is out of bounds");let t=0;for(let n of r){let o=t+n.byteLength;if(e<o)return{buf:n,index:e-t};t=o}throw new RangeError("index is out of bounds")}function ts(r){return!!r?.[W4]}var ae=class r{bufs;length;[W4]=!0;constructor(...e){this.bufs=[],this.length=0,e.length>0&&this.appendAll(e)}*[Symbol.iterator](){yield*this.bufs}get byteLength(){return this.length}append(...e){this.appendAll(e)}appendAll(e){let t=0;for(let n of e)if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.push(n);else if(ts(n))t+=n.byteLength,this.bufs.push(...n.bufs);else throw new Error("Could not append value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}prepend(...e){this.prependAll(e)}prependAll(e){let t=0;for(let n of e.reverse())if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.unshift(n);else if(ts(n))t+=n.byteLength,this.bufs.unshift(...n.bufs);else throw new Error("Could not prepend value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}get(e){let t=z4(this.bufs,e);return t.buf[t.index]}set(e,t){let n=z4(this.bufs,e);n.buf[n.index]=t}write(e,t=0){if(e instanceof Uint8Array)for(let n=0;n<e.length;n++)this.set(t+n,e[n]);else if(ts(e))for(let n=0;n<e.length;n++)this.set(t+n,e.get(n));else throw new Error("Could not write value, must be an Uint8Array or a Uint8ArrayList")}consume(e){if(e=Math.trunc(e),!(Number.isNaN(e)||e<=0)){if(e===this.byteLength){this.bufs=[],this.length=0;return}for(;this.bufs.length>0;)if(e>=this.bufs[0].byteLength)e-=this.bufs[0].byteLength,this.length-=this.bufs[0].byteLength,this.bufs.shift();else{this.bufs[0]=this.bufs[0].subarray(e),this.length-=e;break}}}slice(e,t){let{bufs:n,length:o}=this._subList(e,t);return ke(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:ke(n,o)}sublist(e,t){let{bufs:n,length:o}=this._subList(e,t),i=new r;return i.length=o,i.bufs=[...n],i}_subList(e,t){if(e=e??0,t=t??this.length,e<0&&(e=this.length+e),t<0&&(t=this.length+t),e<0||t>this.length)throw new RangeError("index is out of bounds");if(e===t)return{bufs:[],length:0};if(e===0&&t===this.length)return{bufs:this.bufs,length:this.length};let n=[],o=0;for(let i=0;i<this.bufs.length;i++){let s=this.bufs[i],a=o,c=a+s.byteLength;if(o=c,e>=c)continue;let l=e>=a&&e<c,u=t>a&&t<=c;if(l&&u){if(e===a&&t===c){n.push(s);break}let d=e-a;n.push(s.subarray(d,d+(t-e)));break}if(l){if(e===0){n.push(s);continue}n.push(s.subarray(e-a));continue}if(u){if(t===c){n.push(s);break}n.push(s.subarray(0,t-a));break}n.push(s)}return{bufs:n,length:t-e}}indexOf(e,t=0){if(!ts(e)&&!(e instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let n=e instanceof Uint8Array?e:e.subarray();if(t=Number(t??0),isNaN(t)&&(t=0),t<0&&(t=this.length+t),t<0&&(t=0),e.length===0)return t>this.length?this.length:t;let o=n.byteLength;if(o===0)throw new TypeError("search must be at least 1 byte long");let i=256,s=new Int32Array(i);for(let d=0;d<i;d++)s[d]=-1;for(let d=0;d<o;d++)s[n[d]]=d;let a=s,c=this.byteLength-n.byteLength,l=n.byteLength-1,u;for(let d=t;d<=c;d+=u){u=0;for(let f=l;f>=0;f--){let h=this.get(d+f);if(n[f]!==h){u=Math.max(1,f-a[h]);break}}if(u===0)return d}return-1}getInt8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getInt8(0)}setInt8(e,t){let n=Qe(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setInt8(0,t),this.write(n,e)}getInt16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt16(0,t)}setInt16(e,t,n){let o=se(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt16(0,t,n),this.write(o,e)}getInt32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt32(0,t)}setInt32(e,t,n){let o=se(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt32(0,t,n),this.write(o,e)}getBigInt64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigInt64(0,t)}setBigInt64(e,t,n){let o=se(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigInt64(0,t,n),this.write(o,e)}getUint8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getUint8(0)}setUint8(e,t){let n=Qe(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setUint8(0,t),this.write(n,e)}getUint16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint16(0,t)}setUint16(e,t,n){let o=se(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint16(0,t,n),this.write(o,e)}getUint32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint32(0,t)}setUint32(e,t,n){let o=se(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint32(0,t,n),this.write(o,e)}getBigUint64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigUint64(0,t)}setBigUint64(e,t,n){let o=se(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigUint64(0,t,n),this.write(o,e)}getFloat32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat32(0,t)}setFloat32(e,t,n){let o=se(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat32(0,t,n),this.write(o,e)}getFloat64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat64(0,t)}setFloat64(e,t,n){let o=se(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat64(0,t,n),this.write(o,e)}equals(e){if(e==null||!(e instanceof r)||e.bufs.length!==this.bufs.length)return!1;for(let t=0;t<this.bufs.length;t++)if(!J(this.bufs[t],e.bufs[t]))return!1;return!0}static fromUint8Arrays(e,t){let n=new r;return n.bufs=e,t==null&&(t=e.reduce((o,i)=>o+i.byteLength,0)),n.length=t,n}};var Sl=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},rs=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Al=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},wa=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function Il(r){return r[Symbol.asyncIterator]!=null}function G4(r,e){if(r.byteLength>e)throw new rs("Message length too long")}var _l=r=>{let e=me(r),t=Qe(e);return $e(r,t),_l.bytes=e,t};_l.bytes=0;function Fr(r,e){e=e??{};let t=e.lengthEncoder??_l,n=e?.maxDataLength??4194304;function*o(i){G4(i,n);let s=t(i.byteLength);s instanceof Uint8Array?yield s:yield*s,i instanceof Uint8Array?yield i:yield*i}return Il(r)?async function*(){for await(let i of r)yield*o(i)}():function*(){for(let i of r)yield*o(i)}()}Fr.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??_l,n=e?.maxDataLength??4194304;return G4(r,n),new ae(t(r.byteLength),r)};var ei;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(ei||(ei={}));var b0=r=>{let e=Kt(r);return b0.bytes=me(e),e};b0.bytes=0;function Vr(r,e){let t=new ae,n=ei.LENGTH,o=-1,i=e?.lengthDecoder??b0,s=e?.maxLengthLength??8,a=e?.maxDataLength??4194304;function*c(){for(;t.byteLength>0;){if(n===ei.LENGTH)try{if(o=i(t),o<0)throw new Sl("Invalid message length");if(o>a)throw new rs("Message length too long");let l=i.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=ei.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>s)throw new Al("Message length length too long");break}throw l}if(n===ei.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=ei.LENGTH}}}return Il(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new wa("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new wa("Unexpected end of input")}()}Vr.fromReader=(r,e)=>{let t=1,n=async function*(){for(;;)try{let{done:i,value:s}=await r.next(t);if(i===!0)return;s!=null&&(yield s)}catch(i){if(i.code==="ERR_UNDER_READ")return{done:!0,value:null};throw i}finally{t=1}}();return Vr(n,{...e??{},onLength:i=>{t=i}})};function fv(r){let[e,t]=r[Symbol.asyncIterator]!=null?[r[Symbol.asyncIterator](),Symbol.asyncIterator]:[r[Symbol.iterator](),Symbol.iterator],n=[];return{peek:()=>e.next(),push:o=>{n.push(o)},next:()=>n.length>0?{done:!1,value:n.shift()}:e.next(),[t](){return this}}}var ns=fv;function hv(r){return r[Symbol.asyncIterator]!=null}function pv(r,e){let t=0;if(hv(r))return async function*(){for await(let c of r)yield e(c,t++)}();let n=ns(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();let s=e(o,t++);if(typeof s.then=="function")return async function*(){yield await s;for await(let c of n)yield e(c,t++)}();let a=e;return function*(){yield s;for(let c of n)yield a(c,t++)}()}var jt=pv;var v0=class{readNext;haveNext;ended;nextResult;error;constructor(){this.ended=!1,this.readNext=j(),this.haveNext=j()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let e=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=j(),e}async throw(e){return this.ended=!0,this.error=e,e!=null&&(this.haveNext.promise.catch(()=>{}),this.haveNext.reject(e)),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return this.ended=!0,this.nextResult=e,this.haveNext.resolve(),e}async push(e,t){await this._push(e,t)}async end(e,t){e!=null?await this.throw(e):await this._push(void 0,t)}async _push(e,t){if(e!=null&&this.ended)throw this.error??new Error("Cannot push value onto an ended pushable");for(;this.nextResult!=null;)await this.readNext.promise;e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=j(),await Ge(this.readNext.promise,t?.signal,t)}};function Q4(){return new v0}function mv(r){return r[Symbol.asyncIterator]!=null}async function gv(r,e){try{await Promise.all(r.map(async t=>{for await(let n of t)await e.push(n)})),await e.end()}catch(t){await e.end(t).catch(()=>{})}}async function*yv(r){let e=Q4();gv(r,e).catch(()=>{}),yield*e}function*wv(r){for(let e of r)yield*e}function bv(...r){let e=[];for(let t of r)mv(t)||e.push(t);return e.length===r.length?wv(e):yv(r)}var Ht=bv;function ut(r,...e){if(r==null)throw new Error("Empty pipeline");if(E0(r)){let n=r;r=()=>n.source}else if(X4(r)||Y4(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&E0(t[t.length-1])&&(t[t.length-1]=t[t.length-1].sink),t.length>2)for(let n=1;n<t.length-1;n++)E0(t[n])&&(t[n]=vv(t[n]));return xv(...t)}var xv=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},Y4=r=>r?.[Symbol.asyncIterator]!=null,X4=r=>r?.[Symbol.iterator]!=null,E0=r=>r==null?!1:r.sink!=null&&r.source!=null,vv=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=Zt({objectMode:!0});t.then(()=>{n.end()},s=>{n.end(s)});let o,i=r.source;if(Y4(i))o=async function*(){yield*i,n.end()};else if(X4(i))o=function*(){yield*i,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return Ht(n,o())}return r.source};function Ev(r){return r[Symbol.asyncIterator]!=null}function Sv(r,e){return Ev(r)?async function*(){let t=0;if(!(e<1)){for await(let n of r)if(yield n,t++,t===e)return}}():function*(){let t=0;if(!(e<1)){for(let n of r)if(yield n,t++,t===e)return}}()}var uo=Sv;var W=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var ba="/ipfs/bitswap/1.2.0";var S0=new Float32Array([-0]),fo=new Uint8Array(S0.buffer);function Z4(r,e,t){S0[0]=r,e[t]=fo[0],e[t+1]=fo[1],e[t+2]=fo[2],e[t+3]=fo[3]}function j4(r,e){return fo[0]=r[e],fo[1]=r[e+1],fo[2]=r[e+2],fo[3]=r[e+3],S0[0]}var A0=new Float64Array([-0]),Rt=new Uint8Array(A0.buffer);function J4(r,e,t){A0[0]=r,e[t]=Rt[0],e[t+1]=Rt[1],e[t+2]=Rt[2],e[t+3]=Rt[3],e[t+4]=Rt[4],e[t+5]=Rt[5],e[t+6]=Rt[6],e[t+7]=Rt[7]}function eg(r,e){return Rt[0]=r[e],Rt[1]=r[e+1],Rt[2]=r[e+2],Rt[3]=r[e+3],Rt[4]=r[e+4],Rt[5]=r[e+5],Rt[6]=r[e+6],Rt[7]=r[e+7],A0[0]}var Av=BigInt(Number.MAX_SAFE_INTEGER),Iv=BigInt(Number.MIN_SAFE_INTEGER),fr=class r{lo;hi;constructor(e,t){this.lo=e|0,this.hi=t|0}toNumber(e=!1){if(!e&&this.hi>>>31>0){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(t+n*4294967296)}return this.lo+this.hi*4294967296}toBigInt(e=!1){if(e)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(BigInt(t)+(BigInt(n)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(e=!1){return this.toBigInt(e).toString()}zzEncode(){let e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this}zzDecode(){let e=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this}length(){let e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return n===0?t===0?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:n<128?9:10}static fromBigInt(e){if(e===0n)return ti;if(e<Av&&e>Iv)return this.fromNumber(Number(e));let t=e<0n;t&&(e=-e);let n=e>>32n,o=e-(n<<32n);return t&&(n=~n|0n,o=~o|0n,++o>tg&&(o=0n,++n>tg&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return ti;let t=e<0;t&&(e=-e);let n=e>>>0,o=(e-n)/4294967296>>>0;return t&&(o=~o>>>0,n=~n>>>0,++n>4294967295&&(n=0,++o>4294967295&&(o=0))),new r(n,o)}static from(e){return typeof e=="number"?r.fromNumber(e):typeof e=="bigint"?r.fromBigInt(e):typeof e=="string"?r.fromBigInt(BigInt(e)):e.low!=null||e.high!=null?new r(e.low>>>0,e.high>>>0):ti}},ti=new fr(0,0);ti.toBigInt=function(){return 0n};ti.zzEncode=ti.zzDecode=function(){return this};ti.length=function(){return 1};var tg=4294967296n;function rg(r){let e=0,t=0;for(let n=0;n<r.length;++n)t=r.charCodeAt(n),t<128?e+=1:t<2048?e+=2:(t&64512)===55296&&(r.charCodeAt(n+1)&64512)===56320?(++n,e+=4):e+=3;return e}function ng(r,e,t){if(t-e<1)return"";let o,i=[],s=0,a;for(;e<t;)a=r[e++],a<128?i[s++]=a:a>191&&a<224?i[s++]=(a&31)<<6|r[e++]&63:a>239&&a<365?(a=((a&7)<<18|(r[e++]&63)<<12|(r[e++]&63)<<6|r[e++]&63)-65536,i[s++]=55296+(a>>10),i[s++]=56320+(a&1023)):i[s++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,s>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,i)),s=0);return o!=null?(s>0&&o.push(String.fromCharCode.apply(String,i.slice(0,s))),o.join("")):String.fromCharCode.apply(String,i.slice(0,s))}function I0(r,e,t){let n=t,o,i;for(let s=0;s<r.length;++s)o=r.charCodeAt(s),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((i=r.charCodeAt(s+1))&64512)===56320?(o=65536+((o&1023)<<10)+(i&1023),++s,e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128);return t-n}function $r(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Cl(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var T0=class{buf;pos;len;_slice=Uint8Array.prototype.subarray;constructor(e){this.buf=e,this.pos=0,this.len=e.length}uint32(){let e=4294967295;if(e=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(e=(e|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return e;if((this.pos+=5)>this.len)throw this.pos=this.len,$r(this,10);return e}int32(){return this.uint32()|0}sint32(){let e=this.uint32();return e>>>1^-(e&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw $r(this,4);return Cl(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw $r(this,4);return Cl(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw $r(this,4);let e=j4(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw $r(this,4);let e=eg(this.buf,this.pos);return this.pos+=8,e}bytes(){let e=this.uint32(),t=this.pos,n=this.pos+e;if(n>this.len)throw $r(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return ng(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw $r(this,e);this.pos+=e}else do if(this.pos>=this.len)throw $r(this);while((this.buf[this.pos++]&128)!==0);return this}skipType(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(e=this.uint32()&7)!==4;)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${e} at offset ${this.pos}`)}return this}readLongVarint(){let e=new fr(0,0),t=0;if(this.len-this.pos>4){for(;t<4;++t)if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(this.buf[this.pos]&127)<<28)>>>0,e.hi=(e.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return e;t=0}else{for(;t<3;++t){if(this.pos>=this.len)throw $r(this);if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(this.buf[this.pos++]&127)<<t*7)>>>0,e}if(this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw $r(this);if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw $r(this,8);let e=Cl(this.buf,this.pos+=4),t=Cl(this.buf,this.pos+=4);return new fr(e,t)}int64(){return this.readLongVarint().toBigInt()}int64Number(){return this.readLongVarint().toNumber()}int64String(){return this.readLongVarint().toString()}uint64(){return this.readLongVarint().toBigInt(!0)}uint64Number(){let e=w0(this.buf,this.pos);return this.pos+=me(e),e}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}};function _0(r){return new T0(r instanceof Uint8Array?r:r.subarray())}function ee(r,e,t){let n=_0(r);return e.decode(n,void 0,t)}var N0={};Ze(N0,{base10:()=>Rv});var UN=new Uint8Array(0);function ig(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 Kr(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 sg(r){return new TextEncoder().encode(r)}function ag(r){return new TextDecoder().decode(r)}function Tv(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),u=Math.log(256)/Math.log(a);function d(p){if(p instanceof Uint8Array||(ArrayBuffer.isView(p)?p=new Uint8Array(p.buffer,p.byteOffset,p.byteLength):Array.isArray(p)&&(p=Uint8Array.from(p))),!(p instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(p.length===0)return"";for(var g=0,m=0,y=0,x=p.length;y!==x&&p[y]===0;)y++,g++;for(var w=(x-y)*u+1>>>0,I=new Uint8Array(w);y!==x;){for(var M=p[y],D=0,R=w-1;(M!==0||D<m)&&R!==-1;R--,D++)M+=256*I[R]>>>0,I[R]=M%a>>>0,M=M/a>>>0;if(M!==0)throw new Error("Non-zero carry");m=D,y++}for(var S=w-m;S!==w&&I[S]===0;)S++;for(var A=c.repeat(g);S<w;++S)A+=r.charAt(I[S]);return A}function f(p){if(typeof p!="string")throw new TypeError("Expected String");if(p.length===0)return new Uint8Array;var g=0;if(p[g]!==" "){for(var m=0,y=0;p[g]===c;)m++,g++;for(var x=(p.length-g)*l+1>>>0,w=new Uint8Array(x);p[g];){var I=t[p.charCodeAt(g)];if(I===255)return;for(var M=0,D=x-1;(I!==0||M<y)&&D!==-1;D--,M++)I+=a*w[D]>>>0,w[D]=I%256>>>0,I=I/256>>>0;if(I!==0)throw new Error("Non-zero carry");y=M,g++}if(p[g]!==" "){for(var R=x-y;R!==x&&w[R]===0;)R++;for(var S=new Uint8Array(m+(x-R)),A=m;R!==x;)S[A++]=w[R++];return S}}}function h(p){var g=f(p);if(g)return g;throw new Error(`Non-${e} character`)}return{encode:d,decodeUnsafe:f,decode:h}}var _v=Tv,Cv=_v,cg=Cv;var k0=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")}},P0=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 lg(this,e)}},R0=class{decoders;constructor(e){this.decoders=e}or(e){return lg(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 lg(r,e){return new R0({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var D0=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 k0(e,t,n),this.decoder=new P0(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function os({name:r,prefix:e,encode:t,decode:n}){return new D0(r,e,t,n)}function ho({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=cg(t,r);return os({prefix:e,name:r,encode:n,decode:i=>Kr(o(i))})}function kv(r,e,t,n){let o={};for(let u=0;u<e.length;++u)o[e[u]]=u;let i=r.length;for(;r[i-1]==="=";)--i;let s=new Uint8Array(i*t/8|0),a=0,c=0,l=0;for(let u=0;u<i;++u){let d=o[r[u]];if(d===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|d,a+=t,a>=8&&(a-=8,s[l++]=255&c>>a)}if(a>=t||(255&c<<8-a)!==0)throw new SyntaxError("Unexpected end of data");return s}function Pv(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 Je({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return os({prefix:e,name:r,encode(o){return Pv(o,n,t)},decode(o){return kv(o,n,t,r)}})}var Rv=ho({prefix:"9",name:"base10",alphabet:"0123456789"});var L0={};Ze(L0,{base16:()=>Dv,base16upper:()=>Nv});var Dv=Je({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),Nv=Je({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var O0={};Ze(O0,{base2:()=>Lv});var Lv=Je({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var M0={};Ze(M0,{base256emoji:()=>Fv});var ug=Array.from("\u{1F680}\u{1FA90}\u2604\u{1F6F0}\u{1F30C}\u{1F311}\u{1F312}\u{1F313}\u{1F314}\u{1F315}\u{1F316}\u{1F317}\u{1F318}\u{1F30D}\u{1F30F}\u{1F30E}\u{1F409}\u2600\u{1F4BB}\u{1F5A5}\u{1F4BE}\u{1F4BF}\u{1F602}\u2764\u{1F60D}\u{1F923}\u{1F60A}\u{1F64F}\u{1F495}\u{1F62D}\u{1F618}\u{1F44D}\u{1F605}\u{1F44F}\u{1F601}\u{1F525}\u{1F970}\u{1F494}\u{1F496}\u{1F499}\u{1F622}\u{1F914}\u{1F606}\u{1F644}\u{1F4AA}\u{1F609}\u263A\u{1F44C}\u{1F917}\u{1F49C}\u{1F614}\u{1F60E}\u{1F607}\u{1F339}\u{1F926}\u{1F389}\u{1F49E}\u270C\u2728\u{1F937}\u{1F631}\u{1F60C}\u{1F338}\u{1F64C}\u{1F60B}\u{1F497}\u{1F49A}\u{1F60F}\u{1F49B}\u{1F642}\u{1F493}\u{1F929}\u{1F604}\u{1F600}\u{1F5A4}\u{1F603}\u{1F4AF}\u{1F648}\u{1F447}\u{1F3B6}\u{1F612}\u{1F92D}\u2763\u{1F61C}\u{1F48B}\u{1F440}\u{1F62A}\u{1F611}\u{1F4A5}\u{1F64B}\u{1F61E}\u{1F629}\u{1F621}\u{1F92A}\u{1F44A}\u{1F973}\u{1F625}\u{1F924}\u{1F449}\u{1F483}\u{1F633}\u270B\u{1F61A}\u{1F61D}\u{1F634}\u{1F31F}\u{1F62C}\u{1F643}\u{1F340}\u{1F337}\u{1F63B}\u{1F613}\u2B50\u2705\u{1F97A}\u{1F308}\u{1F608}\u{1F918}\u{1F4A6}\u2714\u{1F623}\u{1F3C3}\u{1F490}\u2639\u{1F38A}\u{1F498}\u{1F620}\u261D\u{1F615}\u{1F33A}\u{1F382}\u{1F33B}\u{1F610}\u{1F595}\u{1F49D}\u{1F64A}\u{1F639}\u{1F5E3}\u{1F4AB}\u{1F480}\u{1F451}\u{1F3B5}\u{1F91E}\u{1F61B}\u{1F534}\u{1F624}\u{1F33C}\u{1F62B}\u26BD\u{1F919}\u2615\u{1F3C6}\u{1F92B}\u{1F448}\u{1F62E}\u{1F646}\u{1F37B}\u{1F343}\u{1F436}\u{1F481}\u{1F632}\u{1F33F}\u{1F9E1}\u{1F381}\u26A1\u{1F31E}\u{1F388}\u274C\u270A\u{1F44B}\u{1F630}\u{1F928}\u{1F636}\u{1F91D}\u{1F6B6}\u{1F4B0}\u{1F353}\u{1F4A2}\u{1F91F}\u{1F641}\u{1F6A8}\u{1F4A8}\u{1F92C}\u2708\u{1F380}\u{1F37A}\u{1F913}\u{1F619}\u{1F49F}\u{1F331}\u{1F616}\u{1F476}\u{1F974}\u25B6\u27A1\u2753\u{1F48E}\u{1F4B8}\u2B07\u{1F628}\u{1F31A}\u{1F98B}\u{1F637}\u{1F57A}\u26A0\u{1F645}\u{1F61F}\u{1F635}\u{1F44E}\u{1F932}\u{1F920}\u{1F927}\u{1F4CC}\u{1F535}\u{1F485}\u{1F9D0}\u{1F43E}\u{1F352}\u{1F617}\u{1F911}\u{1F30A}\u{1F92F}\u{1F437}\u260E\u{1F4A7}\u{1F62F}\u{1F486}\u{1F446}\u{1F3A4}\u{1F647}\u{1F351}\u2744\u{1F334}\u{1F4A3}\u{1F438}\u{1F48C}\u{1F4CD}\u{1F940}\u{1F922}\u{1F445}\u{1F4A1}\u{1F4A9}\u{1F450}\u{1F4F8}\u{1F47B}\u{1F910}\u{1F92E}\u{1F3BC}\u{1F975}\u{1F6A9}\u{1F34E}\u{1F34A}\u{1F47C}\u{1F48D}\u{1F4E3}\u{1F942}"),Ov=ug.reduce((r,e,t)=>(r[t]=e,r),[]),Mv=ug.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function Bv(r){return r.reduce((e,t)=>(e+=Ov[t],e),"")}function Uv(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=Mv[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var Fv=os({prefix:"\u{1F680}",name:"base256emoji",encode:Bv,decode:Uv});var B0={};Ze(B0,{base32:()=>at,base32hex:()=>Hv,base32hexpad:()=>zv,base32hexpadupper:()=>Wv,base32hexupper:()=>qv,base32pad:()=>$v,base32padupper:()=>Kv,base32upper:()=>Vv,base32z:()=>Gv});var at=Je({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),Vv=Je({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),$v=Je({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),Kv=Je({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),Hv=Je({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),qv=Je({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),zv=Je({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),Wv=Je({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),Gv=Je({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var U0={};Ze(U0,{base36:()=>wn,base36upper:()=>Qv});var wn=ho({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),Qv=ho({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var F0={};Ze(F0,{base58btc:()=>be,base58flickr:()=>Yv});var be=ho({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),Yv=ho({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var V0={};Ze(V0,{base64:()=>ot,base64pad:()=>Xv,base64url:()=>xa,base64urlpad:()=>Zv});var ot=Je({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),Xv=Je({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),xa=Je({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),Zv=Je({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var $0={};Ze($0,{base8:()=>jv});var jv=Je({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var K0={};Ze(K0,{identity:()=>Jv});var Jv=os({prefix:"\0",name:"identity",encode:r=>ag(r),decode:r=>sg(r)});var kl={};Ze(kl,{code:()=>H0,decode:()=>oE,encode:()=>nE,name:()=>rE});var eE=new TextEncoder,tE=new TextDecoder,rE="json",H0=512;function nE(r){return eE.encode(JSON.stringify(r))}function oE(r){return JSON.parse(tE.decode(r))}var is={};Ze(is,{code:()=>ri,decode:()=>aE,encode:()=>sE,name:()=>iE});var iE="raw",ri=85;function sE(r){return Kr(r)}function aE(r){return Kr(r)}var W0={};Ze(W0,{identity:()=>Jt});var Ke={};Ze(Ke,{Digest:()=>ni,create:()=>Dt,decode:()=>Ee,equals:()=>z0,hasCode:()=>TE});var cE=hg,dg=128,lE=127,uE=~lE,dE=Math.pow(2,31);function hg(r,e,t){e=e||[],t=t||0;for(var n=t;r>=dE;)e[t++]=r&255|dg,r/=128;for(;r&uE;)e[t++]=r&255|dg,r>>>=7;return e[t]=r|0,hg.bytes=t-n+1,e}var fE=q0,hE=128,fg=127;function q0(r,n){var t=0,n=n||0,o=0,i=n,s,a=r.length;do{if(i>=a)throw q0.bytes=0,new RangeError("Could not decode varint");s=r[i++],t+=o<28?(s&fg)<<o:(s&fg)*Math.pow(2,o),o+=7}while(s>=hE);return q0.bytes=i-n,t}var pE=Math.pow(2,7),mE=Math.pow(2,14),gE=Math.pow(2,21),yE=Math.pow(2,28),wE=Math.pow(2,35),bE=Math.pow(2,42),xE=Math.pow(2,49),vE=Math.pow(2,56),EE=Math.pow(2,63),SE=function(r){return r<pE?1:r<mE?2:r<gE?3:r<yE?4:r<wE?5:r<bE?6:r<xE?7:r<vE?8:r<EE?9:10},AE={encode:cE,decode:fE,encodingLength:SE},IE=AE,va=IE;function Ea(r,e=0){return[va.decode(r,e),va.decode.bytes]}function ss(r,e,t=0){return va.encode(r,e,t),e}function as(r){return va.encodingLength(r)}function Dt(r,e){let t=e.byteLength,n=as(r),o=n+as(t),i=new Uint8Array(o+t);return ss(r,i,0),ss(t,i,n),i.set(e,o),new ni(r,t,e,i)}function Ee(r){let e=Kr(r),[t,n]=Ea(e),[o,i]=Ea(e.subarray(n)),s=e.subarray(n+i);if(s.byteLength!==o)throw new Error("Incorrect length");return new ni(t,o,s,e)}function z0(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&ig(r.bytes,t.bytes)}}var ni=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function TE(r,e){return r.code===e}var pg=0,_E="identity",mg=Kr;function CE(r){return Dt(pg,mg(r))}var Jt={code:pg,name:_E,encode:mg,digest:CE};var Y0={};Ze(Y0,{sha256:()=>Ye,sha512:()=>Rl});function Q0({name:r,code:e,encode:t}){return new G0(r,e,t)}var G0=class{name;code;encode;constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?Dt(this.code,t):t.then(n=>Dt(this.code,n))}else throw Error("Unknown type, must be binary type")}};function yg(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var Ye=Q0({name:"sha2-256",code:18,encode:yg("SHA-256")}),Rl=Q0({name:"sha2-512",code:19,encode:yg("SHA-512")});function wg(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return PE(t,X0(r),e??be.encoder);default:return RE(t,X0(r),e??at.encoder)}}var bg=new WeakMap;function X0(r){let e=bg.get(r);if(e==null){let t=new Map;return bg.set(r,t),t}return e}var Q=class r{code;version;multihash;bytes;"/";constructor(e,t,n,o){this.code=t,this.version=e,this.multihash=n,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:t}=this;if(e!==Sa)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==DE)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=Dt(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return r.equals(this,e)}static equals(e,t){let n=t;return n!=null&&e.code===n.code&&e.version===n.version&&z0(e.multihash,n.multihash)}toString(e){return wg(this,e)}toJSON(){return{"/":wg(this)}}link(){return this}[Symbol.toStringTag]="CID";[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof r)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:o,multihash:i,bytes:s}=t;return new r(n,o,i,s??xg(n,o,i.bytes))}else if(t[NE]===!0){let{version:n,multihash:o,code:i}=t,s=Ee(o);return r.create(n,i,s)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(t!==Sa)throw new Error(`Version 0 CID must use dag-pb (code: ${Sa}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=xg(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,Sa,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length!==0)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,o=Kr(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let i=o.subarray(t.multihashSize-t.digestSize),s=new ni(t.multihashCode,t.digestSize,i,o);return[t.version===0?r.createV0(s):r.createV1(t.codec,s),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[d,f]=Ea(e.subarray(t));return t+=f,d},o=n(),i=Sa;if(o===18?(o=0,t=0):i=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let s=t,a=n(),c=n(),l=t+c,u=l-s;return{version:o,codec:i,multihashCode:a,digestSize:c,multihashSize:u,size:l}}static parse(e,t){let[n,o]=kE(e,t),i=r.decode(o);if(i.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return X0(i).set(n,e),i}};function kE(r,e){switch(r[0]){case"Q":{let t=e??be;return[be.prefix,t.decode(`${be.prefix}${r}`)]}case be.prefix:{let t=e??be;return[be.prefix,t.decode(r)]}case at.prefix:{let t=e??at;return[at.prefix,t.decode(r)]}case wn.prefix:{let t=e??wn;return[wn.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}}function PE(r,e,t){let{prefix:n}=t;if(n!==be.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let i=t.encode(r).slice(1);return e.set(n,i),i}else return o}function RE(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let i=t.encode(r);return e.set(n,i),i}else return o}var Sa=112,DE=18;function xg(r,e,t){let n=as(r),o=n+as(e),i=new Uint8Array(o+t.byteLength);return ss(r,i,0),ss(e,i,n),i.set(t,o),i}var NE=Symbol.for("@ipld/js-cid/CID");var oi={...K0,...O0,...$0,...N0,...L0,...B0,...U0,...F0,...V0,...M0},vL={...Y0,...W0};function Eg(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var vg=Eg("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),Z0=Eg("ascii","a",r=>{let e="a";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return e},r=>{r=r.substring(1);let e=Qe(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),LE={utf8:vg,"utf-8":vg,hex:oi.base16,latin1:Z0,ascii:Z0,binary:Z0,...oi},Dl=LE;function L(r,e="utf8"){let t=Dl[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function j0(r){let e=r??8192,t=e>>>1,n,o=e;return function(s){if(s<1||s>t)return Qe(s);o+s>e&&(n=Qe(e),o=0);let a=n.subarray(o,o+=s);return(o&7)!==0&&(o=(o|7)+1),a}}var ii=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function J0(){}var t2=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},OE=j0();function ME(r){return globalThis.Buffer!=null?Qe(r):OE(r)}var Ia=class{len;head;tail;states;constructor(){this.len=0,this.head=new ii(J0,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new ii(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new r2((e=e>>>0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this}int32(e){return e<0?this._push(Nl,10,fr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=fr.fromBigInt(e);return this._push(Nl,t.length(),t)}uint64Number(e){return this._push(y0,me(e),e)}uint64String(e){return this.uint64(BigInt(e))}int64(e){return this.uint64(e)}int64Number(e){return this.uint64Number(e)}int64String(e){return this.uint64String(e)}sint64(e){let t=fr.fromBigInt(e).zzEncode();return this._push(Nl,t.length(),t)}sint64Number(e){let t=fr.fromNumber(e).zzEncode();return this._push(Nl,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(e2,1,e?1:0)}fixed32(e){return this._push(Aa,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=fr.fromBigInt(e);return this._push(Aa,4,t.lo)._push(Aa,4,t.hi)}fixed64Number(e){let t=fr.fromNumber(e);return this._push(Aa,4,t.lo)._push(Aa,4,t.hi)}fixed64String(e){return this.fixed64(BigInt(e))}sfixed64(e){return this.fixed64(e)}sfixed64Number(e){return this.fixed64Number(e)}sfixed64String(e){return this.fixed64String(e)}float(e){return this._push(Z4,4,e)}double(e){return this._push(J4,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(e2,1,0):this.uint32(t)._push(UE,t,e)}string(e){let t=rg(e);return t!==0?this.uint32(t)._push(I0,t,e):this._push(e2,1,0)}fork(){return this.states=new t2(this),this.head=this.tail=new ii(J0,0,0),this.len=0,this}reset(){return this.states!=null?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new ii(J0,0,0),this.len=0),this}ldelim(){let e=this.head,t=this.tail,n=this.len;return this.reset().uint32(n),n!==0&&(this.tail.next=e.next,this.tail=t,this.len+=n),this}finish(){let e=this.head.next,t=ME(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function e2(r,e,t){e[t]=r&255}function BE(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var r2=class extends ii{next;constructor(e,t){super(BE,e,t),this.next=void 0}};function Nl(r,e,t){for(;r.hi!==0;)e[t++]=r.lo&127|128,r.lo=(r.lo>>>7|r.hi<<25)>>>0,r.hi>>>=7;for(;r.lo>127;)e[t++]=r.lo&127|128,r.lo=r.lo>>>7;e[t++]=r.lo}function Aa(r,e,t){e[t]=r&255,e[t+1]=r>>>8&255,e[t+2]=r>>>16&255,e[t+3]=r>>>24}function UE(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(Ia.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(FE,e,r),this},Ia.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(VE,e,r),this});function FE(r,e,t){e.set(r,t)}function VE(r,e,t){r.length<40?I0(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(L(r),t)}function n2(){return new Ia}function te(r,e){let t=n2();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var cs;(function(r){r[r.VARINT=0]="VARINT",r[r.BIT64=1]="BIT64",r[r.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",r[r.START_GROUP=3]="START_GROUP",r[r.END_GROUP=4]="END_GROUP",r[r.BIT32=5]="BIT32"})(cs||(cs={}));function Ll(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function He(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(i,s){let a=e(i);s.int32(a)},n=function(i){let s=i.int32();return e(s)};return Ll("enum",cs.VARINT,t,n)}function re(r,e){return Ll("message",cs.LENGTH_DELIMITED,r,e)}var Pe=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},Ta=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var tt;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(tt||(tt={}));var o2;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(o2||(o2={}));(function(r){r.codec=()=>He(o2)})(tt||(tt={}));var ls;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.priority!=null&&t.priority!==0&&(n.uint32(16),n.int32(t.priority)),t.cancel!=null&&(n.uint32(24),n.bool(t.cancel)),t.wantType!=null&&(n.uint32(32),tt.codec().encode(t.wantType,n)),t.sendDontHave!=null&&(n.uint32(40),n.bool(t.sendDontHave)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={cid:se(0),priority:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.cid=t.bytes();break}case 2:{i.priority=t.int32();break}case 3:{i.cancel=t.bool();break}case 4:{i.wantType=tt.codec().decode(t);break}case 5:{i.sendDontHave=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(ls||(ls={}));var Ol;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let i of t.entries)n.uint32(10),ls.codec().encode(i,n);t.full!=null&&(n.uint32(16),n.bool(t.full)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={entries:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.entries!=null&&i.entries.length===o.limits.entries)throw new Pe('Decode error - map field "entries" had too many elements');i.entries.push(ls.codec().decode(t,t.uint32(),{limits:o.limits?.entries$}));break}case 2:{i.full=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(Ol||(Ol={}));var us;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.prefix!=null&&t.prefix.byteLength>0&&(n.uint32(10),n.bytes(t.prefix)),t.data!=null&&t.data.byteLength>0&&(n.uint32(18),n.bytes(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={prefix:se(0),data:se(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.prefix=t.bytes();break}case 2:{i.data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(us||(us={}));var Er;(function(r){r.HaveBlock="HaveBlock",r.DoNotHaveBlock="DoNotHaveBlock"})(Er||(Er={}));var Ml;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DoNotHaveBlock=1]="DoNotHaveBlock"})(Ml||(Ml={}));(function(r){r.codec=()=>He(Ml)})(Er||(Er={}));var ds;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.type!=null&&Ml[t.type]!==0&&(n.uint32(16),Er.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={cid:se(0),type:Er.HaveBlock},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.cid=t.bytes();break}case 2:{i.type=Er.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(ds||(ds={}));var si;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),Ol.codec().encode(t.wantlist,n)),t.blocks!=null)for(let i of t.blocks)n.uint32(26),us.codec().encode(i,n);if(t.blockPresences!=null)for(let i of t.blockPresences)n.uint32(34),ds.codec().encode(i,n);t.pendingBytes!=null&&t.pendingBytes!==0&&(n.uint32(40),n.int32(t.pendingBytes)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={blocks:[],blockPresences:[],pendingBytes:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.wantlist=Ol.codec().decode(t,t.uint32(),{limits:o.limits?.wantlist});break}case 3:{if(o.limits?.blocks!=null&&i.blocks.length===o.limits.blocks)throw new Pe('Decode error - map field "blocks" had too many elements');i.blocks.push(us.codec().decode(t,t.uint32(),{limits:o.limits?.blocks$}));break}case 4:{if(o.limits?.blockPresences!=null&&i.blockPresences.length===o.limits.blockPresences)throw new Pe('Decode error - map field "blockPresences" had too many elements');i.blockPresences.push(ds.codec().decode(t,t.uint32(),{limits:o.limits?.blockPresences$}));break}case 5:{i.pendingBytes=t.int32();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(si||(si={}));function Sg(r,e){for(let[t,n]of e.wantlist.entries()){let o=r.wantlist.get(t);o!=null&&(o.priority>n.priority&&(n.priority=o.priority),n.cancel=n.cancel??o.cancel,n.wantType=n.wantType??o.wantType,n.sendDontHave=n.sendDontHave??o.sendDontHave),r.wantlist.set(t,n)}for(let[t,n]of e.blockPresences.entries())r.blockPresences.set(t,n);for(let[t,n]of e.blocks.entries())r.blocks.set(t,n);return e.full&&!r.full&&(r.full=!0),r}var Bl=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var $E=4193648,KE=$E+16;function*Ag(r,e){let t=[...r.wantlist.values()],n=[...r.blockPresences.values()],o=[...r.blocks.values()],i=0,s=0,a=0,c=!1;for(;;){let l={wantlist:{full:r.full??!1,entries:[]},blockPresences:[],blocks:[],pendingBytes:0},u=si.encode(l).byteLength,{added:d,hasMore:f,newSize:h}=i2(o,l.blocks,a,e,u,HE);a+=d,u=h;let p=f;({added:d,hasMore:f,newSize:h}=i2(n,l.blockPresences,s,e,u,qE)),s+=d,u=h;let g=f;if({added:d,hasMore:f,newSize:h}=i2(t,l.wantlist.entries,i,e,u,zE),i+=d,u=h,c=!p&&!g&&!f,c||(l.wantlist.full=!1),yield si.encode(l),c)break}}function i2(r,e,t,n,o,i){let s=0,a=!1;for(let c=t;c<r.length;c++){let l=r[c],u=i(l);if(u>KE)throw new Bl("Cannot send block as after encoding it is over the max message size");let d=o+u;if(d>n){a=!0;break}e.push(l),s++,o=d}return{hasMore:a,added:s,newSize:o}}function HE(r){return s2(3,us.encode(r))}function qE(r){return s2(4,ds.encode(r))}function zE(r){return s2(1,ls.encode(r))}function s2(r,e){let t=me(r),n=me(e.byteLength);return t+n+e.byteLength}var Ul=class extends pe{log;libp2p;routing;protocols;running;maxInboundStreams;maxOutboundStreams;messageReceiveTimeout;registrarIds;metrics;sendQueue;runOnLimitedConnections;maxOutgoingMessageSize;maxIncomingMessageSize;constructor(e,t={}){super(),this.log=e.logger.forComponent("helia:bitswap:network"),this.libp2p=e.libp2p,this.routing=e.routing,this.protocols=t.protocols??[ba],this.registrarIds=[],this.running=!1,this._onStream=this._onStream.bind(this),this.maxInboundStreams=t.maxInboundStreams??1024,this.maxOutboundStreams=t.maxOutboundStreams??1024,this.messageReceiveTimeout=t.messageReceiveTimeout??5e3,this.runOnLimitedConnections=t.runOnLimitedConnections??!1,this.maxIncomingMessageSize=t.maxIncomingMessageSize??4194304,this.maxOutgoingMessageSize=t.maxOutgoingMessageSize??t.maxIncomingMessageSize??4194304,this.metrics={blocksSent:e.metrics?.registerCounter("helia_bitswap_sent_blocks_total"),dataSent:e.metrics?.registerCounter("helia_bitswap_sent_data_bytes_total")},this.sendQueue=new gt({concurrency:t.messageSendConcurrency??50,metrics:e.metrics,metricName:"helia_bitswap_message_send_queue"}),this.sendQueue.addEventListener("error",n=>{this.log.error("error sending wantlist to peer",n.detail)})}async start(){if(this.running)return;this.running=!0,await this.libp2p.handle(this.protocols,this._onStream,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnections});let e={onConnect:t=>{this.safeDispatchEvent("peer:connected",{detail:t})},onDisconnect:t=>{this.safeDispatchEvent("peer:disconnected",{detail:t})}};this.registrarIds=[];for(let t of this.protocols)this.registrarIds.push(await this.libp2p.register(t,e));this.libp2p.getConnections().forEach(t=>{this.safeDispatchEvent("peer:connected",{detail:t.remotePeer})})}async stop(){if(this.running=!1,await this.libp2p.unhandle(this.protocols),this.registrarIds!=null){for(let e of this.registrarIds)this.libp2p.unregister(e);this.registrarIds=[]}}_onStream(e){if(!this.running)return;let{stream:t,connection:n}=e;Promise.resolve().then(async()=>{this.log("incoming new bitswap %s stream from %p",t.protocol,n.remotePeer);let o=()=>{t.status==="open"?t.abort(new gn(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`)):this.log("stream aborted with status %s",t.status)},i=AbortSignal.timeout(this.messageReceiveTimeout);i.addEventListener("abort",o),await t.closeWrite(),await ut(t,s=>Vr(s,{maxDataLength:this.maxIncomingMessageSize}),async s=>{for await(let a of s)try{let c=si.decode(a);this.log("incoming new bitswap %s message from %p on stream",t.protocol,n.remotePeer,t.id),this.safeDispatchEvent("bitswap:message",{detail:{peer:n.remotePeer,message:c}}),i.removeEventListener("abort",o),i=AbortSignal.timeout(this.messageReceiveTimeout),i.addEventListener("abort",o)}catch(c){this.log.error("error reading incoming bitswap message from %p on stream",n.remotePeer,t.id,c),t.abort(c);break}})}).catch(o=>{this.log.error("error handling incoming stream from %p",n.remotePeer,o),t.abort(o)})}async*findProviders(e,t){t?.onProgress?.(new W("bitswap:network:find-providers",e));for await(let n of this.routing.findProviders(e,t))await this.libp2p.isDialable(n.multiaddrs,{runOnLimitedConnection:this.runOnLimitedConnections})&&(yield n)}async findAndConnect(e,t){await kt(jt(uo(this.findProviders(e,t),t?.maxProviders??3),async n=>this.connectTo(n.id,t))).catch(n=>{this.log.error(n)})}async sendMessage(e,t,n){if(!this.running)throw new Error("network isn't running");let o=this.sendQueue.queue.find(i=>e.equals(i.options.peerId)&&i.status==="queued");if(o!=null){o.options.message=Sg(o.options.message,t),await o.join({signal:n?.signal});return}await this.sendQueue.add(async i=>{let s=i?.message;if(s==null)throw new P("No message to send");this.log("sendMessage to %p",e),i?.onProgress?.(new W("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,ba,i);await a.closeRead();try{await ut(Ag(s,this.maxOutgoingMessageSize),c=>Fr(c),a),await a.close(i)}catch(c){i?.onProgress?.(new W("bitswap:network:send-wantlist:error",{peer:e,error:c})),this.log.error("error sending message to %p",e,c),a.abort(c)}this._updateSentStats(s.blocks)},{peerId:e,signal:n?.signal,message:t})}async connectTo(e,t){if(!this.running)throw new Br("Network isn't running");t?.onProgress?.(new W("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),lt(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(ba))return!0;throw new Rn(`${e} did not support ${ba}`)}})]);return n}_updateSentStats(e){let t=0;for(let n of e.values())t+=n.data.byteLength;this.metrics.dataSent?.increment(t),this.metrics.blocksSent?.increment(e.size)}};function po(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function eS(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function fs(r,...e){if(!eS(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error("Uint8Array expected of length "+e+", got length="+r.length)}function ai(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");po(r.outputLen),po(r.blockLen)}function hs(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 Ig(r,e){fs(r);let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}var ci=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function li(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function Hr(r,e){return r<<32-e|r>>>e}function Fl(r,e){return r<<e|r>>>32-e>>>0}var tS=async()=>{};async function Tg(r,e,t){let n=Date.now();for(let o=0;o<r;o++){t(o);let i=Date.now()-n;i>=0&&i<e||(await tS(),n+=i)}}function _g(r){if(typeof r!="string")throw new Error("utf8ToBytes expected string, got "+typeof r);return new Uint8Array(new TextEncoder().encode(r))}function qr(r){return typeof r=="string"&&(r=_g(r)),fs(r),r}function a2(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];fs(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}var ps=class{clone(){return this._cloneInto()}};function Cg(r,e){if(e!==void 0&&{}.toString.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function ms(r){let e=n=>r().update(qr(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function ui(r=32){if(ci&&typeof ci.getRandomValues=="function")return ci.getRandomValues(new Uint8Array(r));if(ci&&typeof ci.randomBytes=="function")return ci.randomBytes(r);throw new Error("crypto.getRandomValues must be defined")}function rS(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}function Vl(r,e,t){return r&e^~r&t}function $l(r,e,t){return r&e^r&t^e&t}var mo=class extends ps{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=li(this.buffer)}update(e){hs(this);let{view:t,buffer:n,blockLen:o}=this;e=qr(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(o-this.pos,i-s);if(a===o){let c=li(e);for(;o<=i-s;s+=o)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){hs(this),Ig(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(n,0),s=0);for(let d=s;d<o;d++)t[d]=0;rS(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=li(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let l=c/4,u=this.get();if(l>u.length)throw new Error("_sha2: outputLen bigger than state");for(let d=0;d<l;d++)a.setUint32(4*d,u[d],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:s,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=s,o%t&&e.buffer.set(n),e}};var Kl=BigInt(4294967295),c2=BigInt(32);function kg(r,e=!1){return e?{h:Number(r&Kl),l:Number(r>>c2&Kl)}:{h:Number(r>>c2&Kl)|0,l:Number(r&Kl)|0}}function nS(r,e=!1){let t=new Uint32Array(r.length),n=new Uint32Array(r.length);for(let o=0;o<r.length;o++){let{h:i,l:s}=kg(r[o],e);[t[o],n[o]]=[i,s]}return[t,n]}var oS=(r,e)=>BigInt(r>>>0)<<c2|BigInt(e>>>0),iS=(r,e,t)=>r>>>t,sS=(r,e,t)=>r<<32-t|e>>>t,aS=(r,e,t)=>r>>>t|e<<32-t,cS=(r,e,t)=>r<<32-t|e>>>t,lS=(r,e,t)=>r<<64-t|e>>>t-32,uS=(r,e,t)=>r>>>t-32|e<<64-t,dS=(r,e)=>e,fS=(r,e)=>r,hS=(r,e,t)=>r<<t|e>>>32-t,pS=(r,e,t)=>e<<t|r>>>32-t,mS=(r,e,t)=>e<<t-32|r>>>64-t,gS=(r,e,t)=>r<<t-32|e>>>64-t;function yS(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var wS=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),bS=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,xS=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),vS=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,ES=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),SS=(r,e,t,n,o,i)=>e+t+n+o+i+(r/2**32|0)|0;var AS={fromBig:kg,split:nS,toBig:oS,shrSH:iS,shrSL:sS,rotrSH:aS,rotrSL:cS,rotrBH:lS,rotrBL:uS,rotr32H:dS,rotr32L:fS,rotlSH:hS,rotlSL:pS,rotlBH:mS,rotlBL:gS,add:yS,add3L:wS,add3H:bS,add4L:xS,add4H:vS,add5H:SS,add5L:ES},ue=AS;var[IS,TS]=ue.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(r=>BigInt(r))),go=new Uint32Array(80),yo=new Uint32Array(80),l2=class extends mo{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){let{Ah:e,Al:t,Bh:n,Bl:o,Ch:i,Cl:s,Dh:a,Dl:c,Eh:l,El:u,Fh:d,Fl:f,Gh:h,Gl:p,Hh:g,Hl:m}=this;return[e,t,n,o,i,s,a,c,l,u,d,f,h,p,g,m]}set(e,t,n,o,i,s,a,c,l,u,d,f,h,p,g,m){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=i|0,this.Cl=s|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=u|0,this.Fh=d|0,this.Fl=f|0,this.Gh=h|0,this.Gl=p|0,this.Hh=g|0,this.Hl=m|0}process(e,t){for(let w=0;w<16;w++,t+=4)go[w]=e.getUint32(t),yo[w]=e.getUint32(t+=4);for(let w=16;w<80;w++){let I=go[w-15]|0,M=yo[w-15]|0,D=ue.rotrSH(I,M,1)^ue.rotrSH(I,M,8)^ue.shrSH(I,M,7),R=ue.rotrSL(I,M,1)^ue.rotrSL(I,M,8)^ue.shrSL(I,M,7),S=go[w-2]|0,A=yo[w-2]|0,F=ue.rotrSH(S,A,19)^ue.rotrBH(S,A,61)^ue.shrSH(S,A,6),N=ue.rotrSL(S,A,19)^ue.rotrBL(S,A,61)^ue.shrSL(S,A,6),U=ue.add4L(R,N,yo[w-7],yo[w-16]),K=ue.add4H(U,D,F,go[w-7],go[w-16]);go[w]=K|0,yo[w]=U|0}let{Ah:n,Al:o,Bh:i,Bl:s,Ch:a,Cl:c,Dh:l,Dl:u,Eh:d,El:f,Fh:h,Fl:p,Gh:g,Gl:m,Hh:y,Hl:x}=this;for(let w=0;w<80;w++){let I=ue.rotrSH(d,f,14)^ue.rotrSH(d,f,18)^ue.rotrBH(d,f,41),M=ue.rotrSL(d,f,14)^ue.rotrSL(d,f,18)^ue.rotrBL(d,f,41),D=d&h^~d&g,R=f&p^~f&m,S=ue.add5L(x,M,R,TS[w],yo[w]),A=ue.add5H(S,y,I,D,IS[w],go[w]),F=S|0,N=ue.rotrSH(n,o,28)^ue.rotrBH(n,o,34)^ue.rotrBH(n,o,39),U=ue.rotrSL(n,o,28)^ue.rotrBL(n,o,34)^ue.rotrBL(n,o,39),K=n&i^n&a^i&a,C=o&s^o&c^s&c;y=g|0,x=m|0,g=h|0,m=p|0,h=d|0,p=f|0,{h:d,l:f}=ue.add(l|0,u|0,A|0,F|0),l=a|0,u=c|0,a=i|0,c=s|0,i=n|0,s=o|0;let k=ue.add3L(F,U,C);n=ue.add3H(k,A,N,K),o=k|0}({h:n,l:o}=ue.add(this.Ah|0,this.Al|0,n|0,o|0)),{h:i,l:s}=ue.add(this.Bh|0,this.Bl|0,i|0,s|0),{h:a,l:c}=ue.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:u}=ue.add(this.Dh|0,this.Dl|0,l|0,u|0),{h:d,l:f}=ue.add(this.Eh|0,this.El|0,d|0,f|0),{h,l:p}=ue.add(this.Fh|0,this.Fl|0,h|0,p|0),{h:g,l:m}=ue.add(this.Gh|0,this.Gl|0,g|0,m|0),{h:y,l:x}=ue.add(this.Hh|0,this.Hl|0,y|0,x|0),this.set(n,o,i,s,a,c,l,u,d,f,h,p,g,m,y,x)}roundClean(){go.fill(0),yo.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var wo=ms(()=>new l2);var zl={};Ze(zl,{aInRange:()=>yt,abool:()=>zr,abytes:()=>gs,bitGet:()=>DS,bitLen:()=>h2,bitMask:()=>Ca,bitSet:()=>NS,bytesToHex:()=>Ln,bytesToNumberBE:()=>On,bytesToNumberLE:()=>Wr,concatBytes:()=>Bn,createHmacDrbg:()=>p2,ensureBytes:()=>Ne,equalBytes:()=>PS,hexToBytes:()=>fi,hexToNumber:()=>f2,inRange:()=>_a,isBytes:()=>bo,memoized:()=>hi,notImplemented:()=>OS,numberToBytesBE:()=>xo,numberToBytesLE:()=>Mn,numberToHexUnpadded:()=>di,numberToVarBytesBE:()=>kS,utf8ToBytes:()=>RS,validateObject:()=>Sr});var Hl=BigInt(0),ql=BigInt(1),_S=BigInt(2);function bo(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function gs(r){if(!bo(r))throw new Error("Uint8Array expected")}function zr(r,e){if(typeof e!="boolean")throw new Error(r+" boolean expected, got "+e)}var CS=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function Ln(r){gs(r);let e="";for(let t=0;t<r.length;t++)e+=CS[r[t]];return e}function di(r){let e=r.toString(16);return e.length&1?"0"+e:e}function f2(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return r===""?Hl:BigInt("0x"+r)}var Nn={_0:48,_9:57,A:65,F:70,a:97,f:102};function Pg(r){if(r>=Nn._0&&r<=Nn._9)return r-Nn._0;if(r>=Nn.A&&r<=Nn.F)return r-(Nn.A-10);if(r>=Nn.a&&r<=Nn.f)return r-(Nn.a-10)}function fi(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);let e=r.length,t=e/2;if(e%2)throw new Error("hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(t);for(let o=0,i=0;o<t;o++,i+=2){let s=Pg(r.charCodeAt(i)),a=Pg(r.charCodeAt(i+1));if(s===void 0||a===void 0){let c=r[i]+r[i+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+i)}n[o]=s*16+a}return n}function On(r){return f2(Ln(r))}function Wr(r){return gs(r),f2(Ln(Uint8Array.from(r).reverse()))}function xo(r,e){return fi(r.toString(16).padStart(e*2,"0"))}function Mn(r,e){return xo(r,e).reverse()}function kS(r){return fi(di(r))}function Ne(r,e,t){let n;if(typeof e=="string")try{n=fi(e)}catch(i){throw new Error(r+" must be hex string or Uint8Array, cause: "+i)}else if(bo(e))n=Uint8Array.from(e);else throw new Error(r+" must be hex string or Uint8Array");let o=n.length;if(typeof t=="number"&&o!==t)throw new Error(r+" of length "+t+" expected, got "+o);return n}function Bn(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];gs(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}function PS(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}function RS(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}var u2=r=>typeof r=="bigint"&&Hl<=r;function _a(r,e,t){return u2(r)&&u2(e)&&u2(t)&&e<=r&&r<t}function yt(r,e,t,n){if(!_a(e,t,n))throw new Error("expected valid "+r+": "+t+" <= n < "+n+", got "+e)}function h2(r){let e;for(e=0;r>Hl;r>>=ql,e+=1);return e}function DS(r,e){return r>>BigInt(e)&ql}function NS(r,e,t){return r|(t?ql:Hl)<<BigInt(e)}var Ca=r=>(_S<<BigInt(r-1))-ql,d2=r=>new Uint8Array(r),Rg=r=>Uint8Array.from(r);function p2(r,e,t){if(typeof r!="number"||r<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof t!="function")throw new Error("hmacFn must be a function");let n=d2(r),o=d2(r),i=0,s=()=>{n.fill(1),o.fill(0),i=0},a=(...d)=>t(o,n,...d),c=(d=d2())=>{o=a(Rg([0]),d),n=a(),d.length!==0&&(o=a(Rg([1]),d),n=a())},l=()=>{if(i++>=1e3)throw new Error("drbg: tried 1000 values");let d=0,f=[];for(;d<e;){n=a();let h=n.slice();f.push(h),d+=n.length}return Bn(...f)};return(d,f)=>{s(),c(d);let h;for(;!(h=f(l()));)c();return s(),h}}var LS={bigint:r=>typeof r=="bigint",function:r=>typeof r=="function",boolean:r=>typeof r=="boolean",string:r=>typeof r=="string",stringOrUint8Array:r=>typeof r=="string"||bo(r),isSafeInteger:r=>Number.isSafeInteger(r),array:r=>Array.isArray(r),field:(r,e)=>e.Fp.isValid(r),hash:r=>typeof r=="function"&&Number.isSafeInteger(r.outputLen)};function Sr(r,e,t={}){let n=(o,i,s)=>{let a=LS[i];if(typeof a!="function")throw new Error("invalid validator function");let c=r[o];if(!(s&&c===void 0)&&!a(c,r))throw new Error("param "+String(o)+" is invalid. Expected "+i+", got "+c)};for(let[o,i]of Object.entries(e))n(o,i,!1);for(let[o,i]of Object.entries(t))n(o,i,!0);return r}var OS=()=>{throw new Error("not implemented")};function hi(r){let e=new WeakMap;return(t,...n)=>{let o=e.get(t);if(o!==void 0)return o;let i=r(t,...n);return e.set(t,i),i}}var ct=BigInt(0),qe=BigInt(1),pi=BigInt(2),MS=BigInt(3),m2=BigInt(4),Dg=BigInt(5),Ng=BigInt(8),BS=BigInt(9),US=BigInt(16);function Ie(r,e){let t=r%e;return t>=ct?t:e+t}function g2(r,e,t){if(e<ct)throw new Error("invalid exponent, negatives unsupported");if(t<=ct)throw new Error("invalid modulus");if(t===qe)return ct;let n=qe;for(;e>ct;)e&qe&&(n=n*r%t),r=r*r%t,e>>=qe;return n}function Be(r,e,t){let n=r;for(;e-- >ct;)n*=n,n%=t;return n}function Wl(r,e){if(r===ct)throw new Error("invert: expected non-zero number");if(e<=ct)throw new Error("invert: expected positive modulus, got "+e);let t=Ie(r,e),n=e,o=ct,i=qe,s=qe,a=ct;for(;t!==ct;){let l=n/t,u=n%t,d=o-s*l,f=i-a*l;n=t,t=u,o=s,i=a,s=d,a=f}if(n!==qe)throw new Error("invert: does not exist");return Ie(o,e)}function FS(r){let e=(r-qe)/pi,t,n,o;for(t=r-qe,n=0;t%pi===ct;t/=pi,n++);for(o=pi;o<r&&g2(o,e,r)!==r-qe;o++)if(o>1e3)throw new Error("Cannot find square root: likely non-prime P");if(n===1){let s=(r+qe)/m2;return function(c,l){let u=c.pow(l,s);if(!c.eql(c.sqr(u),l))throw new Error("Cannot find square root");return u}}let i=(t+qe)/pi;return function(a,c){if(a.pow(c,e)===a.neg(a.ONE))throw new Error("Cannot find square root");let l=n,u=a.pow(a.mul(a.ONE,o),t),d=a.pow(c,i),f=a.pow(c,t);for(;!a.eql(f,a.ONE);){if(a.eql(f,a.ZERO))return a.ZERO;let h=1;for(let g=a.sqr(f);h<l&&!a.eql(g,a.ONE);h++)g=a.sqr(g);let p=a.pow(u,qe<<BigInt(l-h-1));u=a.sqr(p),d=a.mul(d,p),f=a.mul(f,u),l=h}return d}}function VS(r){if(r%m2===MS){let e=(r+qe)/m2;return function(n,o){let i=n.pow(o,e);if(!n.eql(n.sqr(i),o))throw new Error("Cannot find square root");return i}}if(r%Ng===Dg){let e=(r-Dg)/Ng;return function(n,o){let i=n.mul(o,pi),s=n.pow(i,e),a=n.mul(o,s),c=n.mul(n.mul(a,pi),s),l=n.mul(a,n.sub(c,n.ONE));if(!n.eql(n.sqr(l),o))throw new Error("Cannot find square root");return l}}return r%US,FS(r)}var Lg=(r,e)=>(Ie(r,e)&qe)===qe,$S=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function y2(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=$S.reduce((n,o)=>(n[o]="function",n),e);return Sr(r,t)}function KS(r,e,t){if(t<ct)throw new Error("invalid exponent, negatives unsupported");if(t===ct)return r.ONE;if(t===qe)return e;let n=r.ONE,o=e;for(;t>ct;)t&qe&&(n=r.mul(n,o)),o=r.sqr(o),t>>=qe;return n}function HS(r,e){let t=new Array(e.length),n=e.reduce((i,s,a)=>r.is0(s)?i:(t[a]=i,r.mul(i,s)),r.ONE),o=r.inv(n);return e.reduceRight((i,s,a)=>r.is0(s)?i:(t[a]=r.mul(i,t[a]),r.mul(i,s)),o),t}function w2(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function vo(r,e,t=!1,n={}){if(r<=ct)throw new Error("invalid field: expected ORDER > 0, got "+r);let{nBitLength:o,nByteLength:i}=w2(r,e);if(i>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");let s,a=Object.freeze({ORDER:r,isLE:t,BITS:o,BYTES:i,MASK:Ca(o),ZERO:ct,ONE:qe,create:c=>Ie(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof c);return ct<=c&&c<r},is0:c=>c===ct,isOdd:c=>(c&qe)===qe,neg:c=>Ie(-c,r),eql:(c,l)=>c===l,sqr:c=>Ie(c*c,r),add:(c,l)=>Ie(c+l,r),sub:(c,l)=>Ie(c-l,r),mul:(c,l)=>Ie(c*l,r),pow:(c,l)=>KS(a,c,l),div:(c,l)=>Ie(c*Wl(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>Wl(c,r),sqrt:n.sqrt||(c=>(s||(s=VS(r)),s(a,c))),invertBatch:c=>HS(a,c),cmov:(c,l,u)=>u?l:c,toBytes:c=>t?Mn(c,i):xo(c,i),fromBytes:c=>{if(c.length!==i)throw new Error("Field.fromBytes: expected "+i+" bytes, got "+c.length);return t?Wr(c):On(c)}});return Object.freeze(a)}function Og(r){if(typeof r!="bigint")throw new Error("field order must be bigint");let e=r.toString(2).length;return Math.ceil(e/8)}function b2(r){let e=Og(r);return e+Math.ceil(e/2)}function Mg(r,e,t=!1){let n=r.length,o=Og(e),i=b2(e);if(n<16||n<i||n>1024)throw new Error("expected "+i+"-1024 bytes of input, got "+n);let s=t?Wr(r):On(r),a=Ie(s,e-qe)+qe;return t?Mn(a,o):xo(a,o)}var Bg=BigInt(0),Gl=BigInt(1);function x2(r,e){let t=e.negate();return r?t:e}function Ug(r,e){if(!Number.isSafeInteger(r)||r<=0||r>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+r)}function v2(r,e){Ug(r,e);let t=Math.ceil(e/r)+1,n=2**(r-1);return{windows:t,windowSize:n}}function qS(r,e){if(!Array.isArray(r))throw new Error("array expected");r.forEach((t,n)=>{if(!(t instanceof e))throw new Error("invalid point at index "+n)})}function zS(r,e){if(!Array.isArray(r))throw new Error("array of scalars expected");r.forEach((t,n)=>{if(!e.isValid(t))throw new Error("invalid scalar at index "+n)})}var E2=new WeakMap,Fg=new WeakMap;function S2(r){return Fg.get(r)||1}function Ql(r,e){return{constTimeNegate:x2,hasPrecomputes(t){return S2(t)!==1},unsafeLadder(t,n,o=r.ZERO){let i=t;for(;n>Bg;)n&Gl&&(o=o.add(i)),i=i.double(),n>>=Gl;return o},precomputeWindow(t,n){let{windows:o,windowSize:i}=v2(n,e),s=[],a=t,c=a;for(let l=0;l<o;l++){c=a,s.push(c);for(let u=1;u<i;u++)c=c.add(a),s.push(c);a=c.double()}return s},wNAF(t,n,o){let{windows:i,windowSize:s}=v2(t,e),a=r.ZERO,c=r.BASE,l=BigInt(2**t-1),u=2**t,d=BigInt(t);for(let f=0;f<i;f++){let h=f*s,p=Number(o&l);o>>=d,p>s&&(p-=u,o+=Gl);let g=h,m=h+Math.abs(p)-1,y=f%2!==0,x=p<0;p===0?c=c.add(x2(y,n[g])):a=a.add(x2(x,n[m]))}return{p:a,f:c}},wNAFUnsafe(t,n,o,i=r.ZERO){let{windows:s,windowSize:a}=v2(t,e),c=BigInt(2**t-1),l=2**t,u=BigInt(t);for(let d=0;d<s;d++){let f=d*a;if(o===Bg)break;let h=Number(o&c);if(o>>=u,h>a&&(h-=l,o+=Gl),h===0)continue;let p=n[f+Math.abs(h)-1];h<0&&(p=p.negate()),i=i.add(p)}return i},getPrecomputes(t,n,o){let i=E2.get(n);return i||(i=this.precomputeWindow(n,t),t!==1&&E2.set(n,o(i))),i},wNAFCached(t,n,o){let i=S2(t);return this.wNAF(i,this.getPrecomputes(i,t,o),n)},wNAFCachedUnsafe(t,n,o,i){let s=S2(t);return s===1?this.unsafeLadder(t,n,i):this.wNAFUnsafe(s,this.getPrecomputes(s,t,o),n,i)},setWindowSize(t,n){Ug(n,e),Fg.set(t,n),E2.delete(t)}}}function Yl(r,e,t,n){if(qS(t,r),zS(n,e),t.length!==n.length)throw new Error("arrays of points and scalars must have equal length");let o=r.ZERO,i=h2(BigInt(t.length)),s=i>12?i-3:i>4?i-2:i?2:1,a=(1<<s)-1,c=new Array(a+1).fill(o),l=Math.floor((e.BITS-1)/s)*s,u=o;for(let d=l;d>=0;d-=s){c.fill(o);for(let h=0;h<n.length;h++){let p=n[h],g=Number(p>>BigInt(d)&BigInt(a));c[g]=c[g].add(t[h])}let f=o;for(let h=c.length-1,p=o;h>0;h--)p=p.add(c[h]),f=f.add(p);if(u=u.add(f),d!==0)for(let h=0;h<s;h++)u=u.double()}return u}function ka(r){return y2(r.Fp),Sr(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...w2(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Gr=BigInt(0),er=BigInt(1),Xl=BigInt(2),WS=BigInt(8),GS={zip215:!0};function QS(r){let e=ka(r);return Sr(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function Vg(r){let e=QS(r),{Fp:t,n,prehash:o,hash:i,randomBytes:s,nByteLength:a,h:c}=e,l=Xl<<BigInt(a*8)-er,u=t.create,d=vo(e.n,e.nBitLength),f=e.uvRatio||((E,v)=>{try{return{isValid:!0,value:t.sqrt(E*t.inv(v))}}catch{return{isValid:!1,value:Gr}}}),h=e.adjustScalarBytes||(E=>E),p=e.domain||((E,v,_)=>{if(zr("phflag",_),v.length||_)throw new Error("Contexts/pre-hash are not supported");return E});function g(E,v){yt("coordinate "+E,v,Gr,l)}function m(E){if(!(E instanceof w))throw new Error("ExtendedPoint expected")}let y=hi((E,v)=>{let{ex:_,ey:T,ez:H}=E,q=E.is0();v==null&&(v=q?WS:t.inv(H));let X=u(_*v),ce=u(T*v),ie=u(H*v);if(q)return{x:Gr,y:er};if(ie!==er)throw new Error("invZ was invalid");return{x:X,y:ce}}),x=hi(E=>{let{a:v,d:_}=e;if(E.is0())throw new Error("bad point: ZERO");let{ex:T,ey:H,ez:q,et:X}=E,ce=u(T*T),ie=u(H*H),de=u(q*q),ve=u(de*de),Oe=u(ce*v),Me=u(de*u(Oe+ie)),Ve=u(ve+u(_*u(ce*ie)));if(Me!==Ve)throw new Error("bad point: equation left != right (1)");let Tt=u(T*H),Xt=u(q*X);if(Tt!==Xt)throw new Error("bad point: equation left != right (2)");return!0});class w{constructor(v,_,T,H){this.ex=v,this.ey=_,this.ez=T,this.et=H,g("x",v),g("y",_),g("z",T),g("t",H),Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(v){if(v instanceof w)throw new Error("extended point not allowed");let{x:_,y:T}=v||{};return g("x",_),g("y",T),new w(_,T,er,u(_*T))}static normalizeZ(v){let _=t.invertBatch(v.map(T=>T.ez));return v.map((T,H)=>T.toAffine(_[H])).map(w.fromAffine)}static msm(v,_){return Yl(w,d,v,_)}_setWindowSize(v){D.setWindowSize(this,v)}assertValidity(){x(this)}equals(v){m(v);let{ex:_,ey:T,ez:H}=this,{ex:q,ey:X,ez:ce}=v,ie=u(_*ce),de=u(q*H),ve=u(T*ce),Oe=u(X*H);return ie===de&&ve===Oe}is0(){return this.equals(w.ZERO)}negate(){return new w(u(-this.ex),this.ey,this.ez,u(-this.et))}double(){let{a:v}=e,{ex:_,ey:T,ez:H}=this,q=u(_*_),X=u(T*T),ce=u(Xl*u(H*H)),ie=u(v*q),de=_+T,ve=u(u(de*de)-q-X),Oe=ie+X,Me=Oe-ce,Ve=ie-X,Tt=u(ve*Me),Xt=u(Oe*Ve),Ft=u(ve*Ve),fn=u(Me*Oe);return new w(Tt,Xt,fn,Ft)}add(v){m(v);let{a:_,d:T}=e,{ex:H,ey:q,ez:X,et:ce}=this,{ex:ie,ey:de,ez:ve,et:Oe}=v;if(_===BigInt(-1)){let M4=u((q-H)*(de+ie)),B4=u((q+H)*(de-ie)),u0=u(B4-M4);if(u0===Gr)return this.double();let U4=u(X*Xl*Oe),F4=u(ce*Xl*ve),V4=F4+U4,$4=B4+M4,K4=F4-U4,zx=u(V4*u0),Wx=u($4*K4),Gx=u(V4*K4),Qx=u(u0*$4);return new w(zx,Wx,Qx,Gx)}let Me=u(H*ie),Ve=u(q*de),Tt=u(ce*T*Oe),Xt=u(X*ve),Ft=u((H+q)*(ie+de)-Me-Ve),fn=Xt-Tt,kn=Xt+Tt,ga=u(Ve-_*Me),$x=u(Ft*fn),Kx=u(kn*ga),Hx=u(Ft*ga),qx=u(fn*kn);return new w($x,Kx,qx,Hx)}subtract(v){return this.add(v.negate())}wNAF(v){return D.wNAFCached(this,v,w.normalizeZ)}multiply(v){let _=v;yt("scalar",_,er,n);let{p:T,f:H}=this.wNAF(_);return w.normalizeZ([T,H])[0]}multiplyUnsafe(v,_=w.ZERO){let T=v;return yt("scalar",T,Gr,n),T===Gr?M:this.is0()||T===er?this:D.wNAFCachedUnsafe(this,T,w.normalizeZ,_)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return D.unsafeLadder(this,n).is0()}toAffine(v){return y(this,v)}clearCofactor(){let{h:v}=e;return v===er?this:this.multiplyUnsafe(v)}static fromHex(v,_=!1){let{d:T,a:H}=e,q=t.BYTES;v=Ne("pointHex",v,q),zr("zip215",_);let X=v.slice(),ce=v[q-1];X[q-1]=ce&-129;let ie=Wr(X),de=_?l:t.ORDER;yt("pointHex.y",ie,Gr,de);let ve=u(ie*ie),Oe=u(ve-er),Me=u(T*ve-H),{isValid:Ve,value:Tt}=f(Oe,Me);if(!Ve)throw new Error("Point.fromHex: invalid y coordinate");let Xt=(Tt&er)===er,Ft=(ce&128)!==0;if(!_&&Tt===Gr&&Ft)throw new Error("Point.fromHex: x=0 and x_0=1");return Ft!==Xt&&(Tt=u(-Tt)),w.fromAffine({x:Tt,y:ie})}static fromPrivateKey(v){return A(v).point}toRawBytes(){let{x:v,y:_}=this.toAffine(),T=Mn(_,t.BYTES);return T[T.length-1]|=v&er?128:0,T}toHex(){return Ln(this.toRawBytes())}}w.BASE=new w(e.Gx,e.Gy,er,u(e.Gx*e.Gy)),w.ZERO=new w(Gr,er,er,Gr);let{BASE:I,ZERO:M}=w,D=Ql(w,a*8);function R(E){return Ie(E,n)}function S(E){return R(Wr(E))}function A(E){let v=t.BYTES;E=Ne("private key",E,v);let _=Ne("hashed private key",i(E),2*v),T=h(_.slice(0,v)),H=_.slice(v,2*v),q=S(T),X=I.multiply(q),ce=X.toRawBytes();return{head:T,prefix:H,scalar:q,point:X,pointBytes:ce}}function F(E){return A(E).pointBytes}function N(E=new Uint8Array,...v){let _=Bn(...v);return S(i(p(_,Ne("context",E),!!o)))}function U(E,v,_={}){E=Ne("message",E),o&&(E=o(E));let{prefix:T,scalar:H,pointBytes:q}=A(v),X=N(_.context,T,E),ce=I.multiply(X).toRawBytes(),ie=N(_.context,ce,q,E),de=R(X+ie*H);yt("signature.s",de,Gr,n);let ve=Bn(ce,Mn(de,t.BYTES));return Ne("result",ve,t.BYTES*2)}let K=GS;function C(E,v,_,T=K){let{context:H,zip215:q}=T,X=t.BYTES;E=Ne("signature",E,2*X),v=Ne("message",v),_=Ne("publicKey",_,X),q!==void 0&&zr("zip215",q),o&&(v=o(v));let ce=Wr(E.slice(X,2*X)),ie,de,ve;try{ie=w.fromHex(_,q),de=w.fromHex(E.slice(0,X),q),ve=I.multiplyUnsafe(ce)}catch{return!1}if(!q&&ie.isSmallOrder())return!1;let Oe=N(H,de.toRawBytes(),ie.toRawBytes(),v);return de.add(ie.multiplyUnsafe(Oe)).subtract(ve).clearCofactor().equals(w.ZERO)}return I._setWindowSize(8),{CURVE:e,getPublicKey:F,sign:U,verify:C,ExtendedPoint:w,utils:{getExtendedPublicKey:A,randomPrivateKey:()=>s(t.BYTES),precompute(E=8,v=w.BASE){return v._setWindowSize(E),v.multiply(BigInt(3)),v}}}}var ys=BigInt(0),A2=BigInt(1);function YS(r){return Sr(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function $g(r){let e=YS(r),{P:t}=e,n=x=>Ie(x,t),o=e.montgomeryBits,i=Math.ceil(o/8),s=e.nByteLength,a=e.adjustScalarBytes||(x=>x),c=e.powPminus2||(x=>g2(x,t-BigInt(2),t));function l(x,w,I){let M=n(x*(w-I));return w=n(w-M),I=n(I+M),[w,I]}let u=(e.a-BigInt(2))/BigInt(4);function d(x,w){yt("u",x,ys,t),yt("scalar",w,ys,t);let I=w,M=x,D=A2,R=ys,S=x,A=A2,F=ys,N;for(let K=BigInt(o-1);K>=ys;K--){let C=I>>K&A2;F^=C,N=l(F,D,S),D=N[0],S=N[1],N=l(F,R,A),R=N[0],A=N[1],F=C;let k=D+R,E=n(k*k),v=D-R,_=n(v*v),T=E-_,H=S+A,q=S-A,X=n(q*k),ce=n(H*v),ie=X+ce,de=X-ce;S=n(ie*ie),A=n(M*n(de*de)),D=n(E*_),R=n(T*(E+n(u*T)))}N=l(F,D,S),D=N[0],S=N[1],N=l(F,R,A),R=N[0],A=N[1];let U=c(R);return n(D*U)}function f(x){return Mn(n(x),i)}function h(x){let w=Ne("u coordinate",x,i);return s===32&&(w[31]&=127),Wr(w)}function p(x){let w=Ne("scalar",x),I=w.length;if(I!==i&&I!==s){let M=""+i+" or "+s;throw new Error("invalid scalar, expected "+M+" bytes, got "+I)}return Wr(a(w))}function g(x,w){let I=h(w),M=p(x),D=d(I,M);if(D===ys)throw new Error("invalid private or public key received");return f(D)}let m=f(e.Gu);function y(x){return g(x,m)}return{scalarMult:g,scalarMultBase:y,getSharedSecret:(x,w)=>g(x,w),getPublicKey:x=>y(x),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:m}}var Pa=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),Kg=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),XO=BigInt(0),XS=BigInt(1),Hg=BigInt(2),ZS=BigInt(3),jS=BigInt(5),JS=BigInt(8);function qg(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),i=Pa,a=r*r%i*r%i,c=Be(a,Hg,i)*a%i,l=Be(c,XS,i)*r%i,u=Be(l,jS,i)*l%i,d=Be(u,e,i)*u%i,f=Be(d,t,i)*d%i,h=Be(f,n,i)*f%i,p=Be(h,o,i)*h%i,g=Be(p,o,i)*h%i,m=Be(g,e,i)*u%i;return{pow_p_5_8:Be(m,Hg,i)*r%i,b2:a}}function zg(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function eA(r,e){let t=Pa,n=Ie(e*e*e,t),o=Ie(n*n*e,t),i=qg(r*o).pow_p_5_8,s=Ie(r*n*i,t),a=Ie(e*s*s,t),c=s,l=Ie(s*Kg,t),u=a===r,d=a===Ie(-r,t),f=a===Ie(-r*Kg,t);return u&&(s=c),(d||f)&&(s=l),Lg(s,t)&&(s=Ie(-s,t)),{isValid:u||d,value:s}}var tA=vo(Pa,void 0,!0),rA={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:tA,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:JS,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:wo,randomBytes:ui,adjustScalarBytes:zg,uvRatio:eA},Ra=Vg(rA);var Da=$g({P:Pa,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=Pa,{pow_p_5_8:t,b2:n}=qg(r);return Ie(Be(t,ZS,e)*n,e)},adjustScalarBytes:zg,randomBytes:ui});var ws=32,bn=64,I2=32;function Wg(){let r=Ra.utils.randomPrivateKey(),e=Ra.getPublicKey(r);return{privateKey:nA(r,e),publicKey:e}}function Gg(r,e){let t=r.subarray(0,I2);return Ra.sign(e instanceof Uint8Array?e:e.subarray(),t)}function Qg(r,e,t){return Ra.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function nA(r,e){let t=new Uint8Array(bn);for(let n=0;n<I2;n++)t[n]=r[n],t[I2+n]=e[n];return t}var Na=class{type="Ed25519";raw;constructor(e){this.raw=xs(e,ws)}toMultihash(){return Jt.digest(Nt(this))}toCID(){return Q.createV1(114,this.toMultihash())}toString(){return be.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}verify(e,t){return Qg(this.raw,t,e)}},bs=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=xs(e,bn),this.publicKey=new Na(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}sign(e){return Gg(this.raw,e)}};function T2(r){if(r.length>bn){r=xs(r,bn+ws);let n=r.subarray(0,bn),o=r.subarray(bn,r.length);return new bs(n,o)}r=xs(r,bn);let e=r.subarray(0,bn),t=r.subarray(ws);return new bs(e,t)}function _2(r){return r=xs(r,ws),new Na(r)}async function Xg(){let{privateKey:r,publicKey:e}=Wg();return new bs(r,e)}function xs(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new P(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var Xe;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1"})(Xe||(Xe={}));var C2;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1"})(C2||(C2={}));(function(r){r.codec=()=>He(C2)})(Xe||(Xe={}));var xn;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Xe.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(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.Type=Xe.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(xn||(xn={}));var La;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Xe.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(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.Type=Xe.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(La||(La={}));var Ua={};Ze(Ua,{MAX_RSA_KEY_SIZE:()=>N2,generateRSAKeyPair:()=>B2,jwkToJWKKeyPair:()=>c6,jwkToPkcs1:()=>mA,jwkToPkix:()=>O2,jwkToRSAPrivateKey:()=>a6,pkcs1ToJwk:()=>i6,pkcs1ToRSAPrivateKey:()=>eu,pkixToJwk:()=>s6,pkixToRSAPublicKey:()=>M2});var oA=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Eo=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),So=new Uint32Array(64),k2=class extends mo{constructor(){super(64,32,8,!1),this.A=Eo[0]|0,this.B=Eo[1]|0,this.C=Eo[2]|0,this.D=Eo[3]|0,this.E=Eo[4]|0,this.F=Eo[5]|0,this.G=Eo[6]|0,this.H=Eo[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:a,H:c}=this;return[e,t,n,o,i,s,a,c]}set(e,t,n,o,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let d=0;d<16;d++,t+=4)So[d]=e.getUint32(t,!1);for(let d=16;d<64;d++){let f=So[d-15],h=So[d-2],p=Hr(f,7)^Hr(f,18)^f>>>3,g=Hr(h,17)^Hr(h,19)^h>>>10;So[d]=g+So[d-7]+p+So[d-16]|0}let{A:n,B:o,C:i,D:s,E:a,F:c,G:l,H:u}=this;for(let d=0;d<64;d++){let f=Hr(a,6)^Hr(a,11)^Hr(a,25),h=u+f+Vl(a,c,l)+oA[d]+So[d]|0,g=(Hr(n,2)^Hr(n,13)^Hr(n,22))+$l(n,o,i)|0;u=l,l=c,c=a,a=s+h|0,s=i,i=o,o=n,n=h+g|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,u=u+this.H|0,this.set(n,o,i,s,a,c,l,u)}roundClean(){So.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Ar=ms(()=>new k2);function O(r,e="utf8"){let t=Dl[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var iA=parseInt("11111",2),R2=parseInt("10000000",2),sA=parseInt("01111111",2),jg={2:aA,3:uA,5:lA,6:cA,16:P2,22:P2,48:P2};function Oa(r,e={offset:0}){let t=r[e.offset]&iA;if(e.offset++,jg[t]!=null)return jg[t](r,e);throw new Error("No decoder for tag "+t)}function Zl(r,e){let t=0;if((r[e.offset]&R2)===R2){let n=r[e.offset]&sA,o="0x";e.offset++;for(let i=0;i<n;i++,e.offset++)o+=r[e.offset].toString(16).padStart(2,"0");t=parseInt(o,16)}else t=r[e.offset],e.offset++;return t}function P2(r,e){Zl(r,e);let t=[];for(;!(e.offset>=r.byteLength);){let n=Oa(r,e);if(n===null)break;t.push(n)}return t}function aA(r,e){let t=Zl(r,e),n=e.offset,o=e.offset+t,i=[];for(let s=n;s<o;s++)s===n&&r[s]===0||i.push(r[s]);return e.offset+=t,Uint8Array.from(i)}function cA(r,e){let t=Zl(r,e);return e.offset+=t,["oid-unimplemented"]}function lA(r,e){return e.offset++,null}function uA(r,e){let t=Zl(r,e),n=r[e.offset];e.offset++;let o=r.subarray(e.offset,e.offset+t);if(e.offset+=t,n!==0)throw new Error("Unused bits in bit string is unimplemented");return Oa(o,{offset:0})}function dA(r){let e=r.toString(16);e.length%2===1&&(e="0"+e);let t=new ae;for(let n=0;n<e.length;n+=2)t.append(Uint8Array.from([parseInt(`${e[n]}${e[n+1]}`,16)]));return t}function D2(r){if(r.byteLength<128)return Uint8Array.from([r.byteLength]);let e=dA(r.byteLength);return new ae(Uint8Array.from([e.byteLength|R2]),e)}function Ir(r){let e=new ae,t=parseInt("10000000",2);return(r.subarray()[0]&t)===t&&e.append(Uint8Array.from([0])),e.append(r),new ae(Uint8Array.from([2]),D2(e),e)}function Jg(r){let e=Uint8Array.from([0]),t=new ae(e,r);return new ae(Uint8Array.from([3]),D2(t),t)}function jl(r){let e=new ae;for(let t of r)e.append(t);return new ae(Uint8Array.from([48]),D2(e),e)}function qt(r){if(isNaN(r)||r<=0)throw new P("random bytes length must be a Number bigger than 0");return ui(r)}var Ma=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},Ba=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},Jl=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var e6={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new Jl("Missing Web Crypto API. The most likely cause of this error is that this page is being accessed from an insecure context (i.e. not HTTPS). For more information and possible resolutions see https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api");return e}};var tr=e6;async function t6(r){let e=await tr.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),t=await fA(e);return{privateKey:t[0],publicKey:t[1]}}async function r6(r,e){let t=await tr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await tr.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function n6(r,e,t){let n=await tr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return tr.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function fA(r){if(r.privateKey==null||r.publicKey==null)throw new P("Private and public key are required");return Promise.all([tr.get().subtle.exportKey("jwk",r.privateKey),tr.get().subtle.exportKey("jwk",r.publicKey)])}function o6(r){if(r.kty!=="RSA")throw new P("invalid key type");if(r.n==null)throw new P("invalid key modulus");return L(r.n,"base64url").length*8}var vs=class{type="RSA";_key;_raw;_multihash;constructor(e,t){this._key=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=Ua.jwkToPkix(this._key)),this._raw}toMultihash(){return this._multihash}toCID(){return Q.createV1(114,this._multihash)}toString(){return be.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}verify(e,t){return n6(this._key,t,e)}},Fa=class{type="RSA";_key;_raw;publicKey;constructor(e,t){this._key=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=Ua.jwkToPkcs1(this._key)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}sign(e){return r6(this._key,e)}};var N2=8192,L2=18,hA=1062,pA=Uint8Array.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);function i6(r){let e=Oa(r);return{n:O(e[1],"base64url"),e:O(e[2],"base64url"),d:O(e[3],"base64url"),p:O(e[4],"base64url"),q:O(e[5],"base64url"),dp:O(e[6],"base64url"),dq:O(e[7],"base64url"),qi:O(e[8],"base64url"),kty:"RSA"}}function mA(r){if(r.n==null||r.e==null||r.d==null||r.p==null||r.q==null||r.dp==null||r.dq==null||r.qi==null)throw new P("JWK was missing components");return jl([Ir(Uint8Array.from([0])),Ir(L(r.n,"base64url")),Ir(L(r.e,"base64url")),Ir(L(r.d,"base64url")),Ir(L(r.p,"base64url")),Ir(L(r.q,"base64url")),Ir(L(r.dp,"base64url")),Ir(L(r.dq,"base64url")),Ir(L(r.qi,"base64url"))]).subarray()}function s6(r){let e=Oa(r,{offset:0});return{kty:"RSA",n:O(e[1][0],"base64url"),e:O(e[1][1],"base64url")}}function O2(r){if(r.n==null||r.e==null)throw new P("JWK was missing components");return jl([pA,Jg(jl([Ir(L(r.n,"base64url")),Ir(L(r.e,"base64url"))]))]).subarray()}function eu(r){let e=i6(r);return a6(e)}function M2(r,e){if(r.byteLength>=hA)throw new Pn("Key size is too large");let t=s6(r);if(e==null){let n=Ar(xn.encode({Type:Xe.RSA,Data:r}));e=Dt(L2,n)}return new vs(t,e)}function a6(r){if(o6(r)>N2)throw new P("Key size is too large");let e=c6(r),t=Ar(xn.encode({Type:Xe.RSA,Data:O2(e.publicKey)})),n=Dt(L2,t);return new Fa(e.privateKey,new vs(e.publicKey,n))}async function B2(r){if(r>N2)throw new P("Key size is too large");let e=await t6(r),t=Ar(xn.encode({Type:Xe.RSA,Data:O2(e.publicKey)})),n=Dt(L2,t);return new Fa(e.privateKey,new vs(e.publicKey,n))}function c6(r){if(r==null)throw new P("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}var tu=class extends ps{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,ai(e);let n=qr(t);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let o=this.blockLen,i=new Uint8Array(o);i.set(n.length>o?e.create().update(n).digest():n);for(let s=0;s<i.length;s++)i[s]^=54;this.iHash.update(i),this.oHash=e.create();for(let s=0;s<i.length;s++)i[s]^=106;this.oHash.update(i),i.fill(0)}update(e){return hs(this),this.iHash.update(e),this}digestInto(e){hs(this),fs(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));let{oHash:t,iHash:n,finished:o,destroyed:i,blockLen:s,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=i,e.blockLen=s,e.outputLen=a,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},Ao=(r,e,t)=>new tu(r,e).update(t).digest();Ao.create=(r,e)=>new tu(r,e);function l6(r){r.lowS!==void 0&&zr("lowS",r.lowS),r.prehash!==void 0&&zr("prehash",r.prehash)}function gA(r){let e=ka(r);Sr(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:t,Fp:n,a:o}=e;if(t){if(!n.eql(o,n.ZERO))throw new Error("invalid endomorphism, can only be defined for Koblitz curves that have a=0");if(typeof t!="object"||typeof t.beta!="bigint"||typeof t.splitScalar!="function")throw new Error("invalid endomorphism, expected beta: bigint and splitScalar: function")}return Object.freeze({...e})}var{bytesToNumberBE:yA,hexToBytes:wA}=zl,U2=class extends Error{constructor(e=""){super(e)}},Un={Err:U2,_tlv:{encode:(r,e)=>{let{Err:t}=Un;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length&1)throw new t("tlv.encode: unpadded data");let n=e.length/2,o=di(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let i=n>127?di(o.length/2|128):"";return di(r)+i+o+e},decode(r,e){let{Err:t}=Un,n=0;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length<2||e[n++]!==r)throw new t("tlv.decode: wrong tlv");let o=e[n++],i=!!(o&128),s=0;if(!i)s=o;else{let c=o&127;if(!c)throw new t("tlv.decode(long): indefinite length not supported");if(c>4)throw new t("tlv.decode(long): byte length is too big");let l=e.subarray(n,n+c);if(l.length!==c)throw new t("tlv.decode: length bytes not complete");if(l[0]===0)throw new t("tlv.decode(long): zero leftmost byte");for(let u of l)s=s<<8|u;if(n+=c,s<128)throw new t("tlv.decode(long): not minimal encoding")}let a=e.subarray(n,n+s);if(a.length!==s)throw new t("tlv.decode: wrong value length");return{v:a,l:e.subarray(n+s)}}},_int:{encode(r){let{Err:e}=Un;if(r<Fn)throw new e("integer: negative integers are not allowed");let t=di(r);if(Number.parseInt(t[0],16)&8&&(t="00"+t),t.length&1)throw new e("unexpected DER parsing assertion: unpadded hex");return t},decode(r){let{Err:e}=Un;if(r[0]&128)throw new e("invalid signature integer: negative");if(r[0]===0&&!(r[1]&128))throw new e("invalid signature integer: unnecessary leading zero");return yA(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Un,o=typeof r=="string"?wA(r):r;gs(o);let{v:i,l:s}=n.decode(48,o);if(s.length)throw new e("invalid signature: left bytes after parsing");let{v:a,l:c}=n.decode(2,i),{v:l,l:u}=n.decode(2,c);if(u.length)throw new e("invalid signature: left bytes after parsing");return{r:t.decode(a),s:t.decode(l)}},hexFromSig(r){let{_tlv:e,_int:t}=Un,n=e.encode(2,t.encode(r.r)),o=e.encode(2,t.encode(r.s)),i=n+o;return e.encode(48,i)}},Fn=BigInt(0),dt=BigInt(1),ZM=BigInt(2),u6=BigInt(3),jM=BigInt(4);function bA(r){let e=gA(r),{Fp:t}=e,n=vo(e.n,e.nBitLength),o=e.toBytes||((g,m,y)=>{let x=m.toAffine();return Bn(Uint8Array.from([4]),t.toBytes(x.x),t.toBytes(x.y))}),i=e.fromBytes||(g=>{let m=g.subarray(1),y=t.fromBytes(m.subarray(0,t.BYTES)),x=t.fromBytes(m.subarray(t.BYTES,2*t.BYTES));return{x:y,y:x}});function s(g){let{a:m,b:y}=e,x=t.sqr(g),w=t.mul(x,g);return t.add(t.add(w,t.mul(g,m)),y)}if(!t.eql(t.sqr(e.Gy),s(e.Gx)))throw new Error("bad generator point: equation left != right");function a(g){return _a(g,dt,e.n)}function c(g){let{allowedPrivateKeyLengths:m,nByteLength:y,wrapPrivateKey:x,n:w}=e;if(m&&typeof g!="bigint"){if(bo(g)&&(g=Ln(g)),typeof g!="string"||!m.includes(g.length))throw new Error("invalid private key");g=g.padStart(y*2,"0")}let I;try{I=typeof g=="bigint"?g:On(Ne("private key",g,y))}catch{throw new Error("invalid private key, expected hex or "+y+" bytes, got "+typeof g)}return x&&(I=Ie(I,w)),yt("private key",I,dt,w),I}function l(g){if(!(g instanceof f))throw new Error("ProjectivePoint expected")}let u=hi((g,m)=>{let{px:y,py:x,pz:w}=g;if(t.eql(w,t.ONE))return{x:y,y:x};let I=g.is0();m==null&&(m=I?t.ONE:t.inv(w));let M=t.mul(y,m),D=t.mul(x,m),R=t.mul(w,m);if(I)return{x:t.ZERO,y:t.ZERO};if(!t.eql(R,t.ONE))throw new Error("invZ was invalid");return{x:M,y:D}}),d=hi(g=>{if(g.is0()){if(e.allowInfinityPoint&&!t.is0(g.py))return;throw new Error("bad point: ZERO")}let{x:m,y}=g.toAffine();if(!t.isValid(m)||!t.isValid(y))throw new Error("bad point: x or y not FE");let x=t.sqr(y),w=s(m);if(!t.eql(x,w))throw new Error("bad point: equation left != right");if(!g.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class f{constructor(m,y,x){if(this.px=m,this.py=y,this.pz=x,m==null||!t.isValid(m))throw new Error("x required");if(y==null||!t.isValid(y))throw new Error("y required");if(x==null||!t.isValid(x))throw new Error("z required");Object.freeze(this)}static fromAffine(m){let{x:y,y:x}=m||{};if(!m||!t.isValid(y)||!t.isValid(x))throw new Error("invalid affine point");if(m instanceof f)throw new Error("projective point not allowed");let w=I=>t.eql(I,t.ZERO);return w(y)&&w(x)?f.ZERO:new f(y,x,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(m){let y=t.invertBatch(m.map(x=>x.pz));return m.map((x,w)=>x.toAffine(y[w])).map(f.fromAffine)}static fromHex(m){let y=f.fromAffine(i(Ne("pointHex",m)));return y.assertValidity(),y}static fromPrivateKey(m){return f.BASE.multiply(c(m))}static msm(m,y){return Yl(f,n,m,y)}_setWindowSize(m){p.setWindowSize(this,m)}assertValidity(){d(this)}hasEvenY(){let{y:m}=this.toAffine();if(t.isOdd)return!t.isOdd(m);throw new Error("Field doesn't support isOdd")}equals(m){l(m);let{px:y,py:x,pz:w}=this,{px:I,py:M,pz:D}=m,R=t.eql(t.mul(y,D),t.mul(I,w)),S=t.eql(t.mul(x,D),t.mul(M,w));return R&&S}negate(){return new f(this.px,t.neg(this.py),this.pz)}double(){let{a:m,b:y}=e,x=t.mul(y,u6),{px:w,py:I,pz:M}=this,D=t.ZERO,R=t.ZERO,S=t.ZERO,A=t.mul(w,w),F=t.mul(I,I),N=t.mul(M,M),U=t.mul(w,I);return U=t.add(U,U),S=t.mul(w,M),S=t.add(S,S),D=t.mul(m,S),R=t.mul(x,N),R=t.add(D,R),D=t.sub(F,R),R=t.add(F,R),R=t.mul(D,R),D=t.mul(U,D),S=t.mul(x,S),N=t.mul(m,N),U=t.sub(A,N),U=t.mul(m,U),U=t.add(U,S),S=t.add(A,A),A=t.add(S,A),A=t.add(A,N),A=t.mul(A,U),R=t.add(R,A),N=t.mul(I,M),N=t.add(N,N),A=t.mul(N,U),D=t.sub(D,A),S=t.mul(N,F),S=t.add(S,S),S=t.add(S,S),new f(D,R,S)}add(m){l(m);let{px:y,py:x,pz:w}=this,{px:I,py:M,pz:D}=m,R=t.ZERO,S=t.ZERO,A=t.ZERO,F=e.a,N=t.mul(e.b,u6),U=t.mul(y,I),K=t.mul(x,M),C=t.mul(w,D),k=t.add(y,x),E=t.add(I,M);k=t.mul(k,E),E=t.add(U,K),k=t.sub(k,E),E=t.add(y,w);let v=t.add(I,D);return E=t.mul(E,v),v=t.add(U,C),E=t.sub(E,v),v=t.add(x,w),R=t.add(M,D),v=t.mul(v,R),R=t.add(K,C),v=t.sub(v,R),A=t.mul(F,E),R=t.mul(N,C),A=t.add(R,A),R=t.sub(K,A),A=t.add(K,A),S=t.mul(R,A),K=t.add(U,U),K=t.add(K,U),C=t.mul(F,C),E=t.mul(N,E),K=t.add(K,C),C=t.sub(U,C),C=t.mul(F,C),E=t.add(E,C),U=t.mul(K,E),S=t.add(S,U),U=t.mul(v,E),R=t.mul(k,R),R=t.sub(R,U),U=t.mul(k,K),A=t.mul(v,A),A=t.add(A,U),new f(R,S,A)}subtract(m){return this.add(m.negate())}is0(){return this.equals(f.ZERO)}wNAF(m){return p.wNAFCached(this,m,f.normalizeZ)}multiplyUnsafe(m){let{endo:y,n:x}=e;yt("scalar",m,Fn,x);let w=f.ZERO;if(m===Fn)return w;if(this.is0()||m===dt)return this;if(!y||p.hasPrecomputes(this))return p.wNAFCachedUnsafe(this,m,f.normalizeZ);let{k1neg:I,k1:M,k2neg:D,k2:R}=y.splitScalar(m),S=w,A=w,F=this;for(;M>Fn||R>Fn;)M&dt&&(S=S.add(F)),R&dt&&(A=A.add(F)),F=F.double(),M>>=dt,R>>=dt;return I&&(S=S.negate()),D&&(A=A.negate()),A=new f(t.mul(A.px,y.beta),A.py,A.pz),S.add(A)}multiply(m){let{endo:y,n:x}=e;yt("scalar",m,dt,x);let w,I;if(y){let{k1neg:M,k1:D,k2neg:R,k2:S}=y.splitScalar(m),{p:A,f:F}=this.wNAF(D),{p:N,f:U}=this.wNAF(S);A=p.constTimeNegate(M,A),N=p.constTimeNegate(R,N),N=new f(t.mul(N.px,y.beta),N.py,N.pz),w=A.add(N),I=F.add(U)}else{let{p:M,f:D}=this.wNAF(m);w=M,I=D}return f.normalizeZ([w,I])[0]}multiplyAndAddUnsafe(m,y,x){let w=f.BASE,I=(D,R)=>R===Fn||R===dt||!D.equals(w)?D.multiplyUnsafe(R):D.multiply(R),M=I(this,y).add(I(m,x));return M.is0()?void 0:M}toAffine(m){return u(this,m)}isTorsionFree(){let{h:m,isTorsionFree:y}=e;if(m===dt)return!0;if(y)return y(f,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:m,clearCofactor:y}=e;return m===dt?this:y?y(f,this):this.multiplyUnsafe(e.h)}toRawBytes(m=!0){return zr("isCompressed",m),this.assertValidity(),o(f,this,m)}toHex(m=!0){return zr("isCompressed",m),Ln(this.toRawBytes(m))}}f.BASE=new f(e.Gx,e.Gy,t.ONE),f.ZERO=new f(t.ZERO,t.ONE,t.ZERO);let h=e.nBitLength,p=Ql(f,e.endo?Math.ceil(h/2):h);return{CURVE:e,ProjectivePoint:f,normPrivateKeyToScalar:c,weierstrassEquation:s,isWithinCurveOrder:a}}function xA(r){let e=ka(r);return Sr(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function d6(r){let e=xA(r),{Fp:t,n}=e,o=t.BYTES+1,i=2*t.BYTES+1;function s(C){return Ie(C,n)}function a(C){return Wl(C,n)}let{ProjectivePoint:c,normPrivateKeyToScalar:l,weierstrassEquation:u,isWithinCurveOrder:d}=bA({...e,toBytes(C,k,E){let v=k.toAffine(),_=t.toBytes(v.x),T=Bn;return zr("isCompressed",E),E?T(Uint8Array.from([k.hasEvenY()?2:3]),_):T(Uint8Array.from([4]),_,t.toBytes(v.y))},fromBytes(C){let k=C.length,E=C[0],v=C.subarray(1);if(k===o&&(E===2||E===3)){let _=On(v);if(!_a(_,dt,t.ORDER))throw new Error("Point is not on curve");let T=u(_),H;try{H=t.sqrt(T)}catch(ce){let ie=ce instanceof Error?": "+ce.message:"";throw new Error("Point is not on curve"+ie)}let q=(H&dt)===dt;return(E&1)===1!==q&&(H=t.neg(H)),{x:_,y:H}}else if(k===i&&E===4){let _=t.fromBytes(v.subarray(0,t.BYTES)),T=t.fromBytes(v.subarray(t.BYTES,2*t.BYTES));return{x:_,y:T}}else{let _=o,T=i;throw new Error("invalid Point, expected length of "+_+", or uncompressed "+T+", got "+k)}}}),f=C=>Ln(xo(C,e.nByteLength));function h(C){let k=n>>dt;return C>k}function p(C){return h(C)?s(-C):C}let g=(C,k,E)=>On(C.slice(k,E));class m{constructor(k,E,v){this.r=k,this.s=E,this.recovery=v,this.assertValidity()}static fromCompact(k){let E=e.nByteLength;return k=Ne("compactSignature",k,E*2),new m(g(k,0,E),g(k,E,2*E))}static fromDER(k){let{r:E,s:v}=Un.toSig(Ne("DER",k));return new m(E,v)}assertValidity(){yt("r",this.r,dt,n),yt("s",this.s,dt,n)}addRecoveryBit(k){return new m(this.r,this.s,k)}recoverPublicKey(k){let{r:E,s:v,recovery:_}=this,T=D(Ne("msgHash",k));if(_==null||![0,1,2,3].includes(_))throw new Error("recovery id invalid");let H=_===2||_===3?E+e.n:E;if(H>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let q=(_&1)===0?"02":"03",X=c.fromHex(q+f(H)),ce=a(H),ie=s(-T*ce),de=s(v*ce),ve=c.BASE.multiplyAndAddUnsafe(X,ie,de);if(!ve)throw new Error("point at infinify");return ve.assertValidity(),ve}hasHighS(){return h(this.s)}normalizeS(){return this.hasHighS()?new m(this.r,s(-this.s),this.recovery):this}toDERRawBytes(){return fi(this.toDERHex())}toDERHex(){return Un.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return fi(this.toCompactHex())}toCompactHex(){return f(this.r)+f(this.s)}}let y={isValidPrivateKey(C){try{return l(C),!0}catch{return!1}},normPrivateKeyToScalar:l,randomPrivateKey:()=>{let C=b2(e.n);return Mg(e.randomBytes(C),e.n)},precompute(C=8,k=c.BASE){return k._setWindowSize(C),k.multiply(BigInt(3)),k}};function x(C,k=!0){return c.fromPrivateKey(C).toRawBytes(k)}function w(C){let k=bo(C),E=typeof C=="string",v=(k||E)&&C.length;return k?v===o||v===i:E?v===2*o||v===2*i:C instanceof c}function I(C,k,E=!0){if(w(C))throw new Error("first arg must be private key");if(!w(k))throw new Error("second arg must be public key");return c.fromHex(k).multiply(l(C)).toRawBytes(E)}let M=e.bits2int||function(C){if(C.length>8192)throw new Error("input is too large");let k=On(C),E=C.length*8-e.nBitLength;return E>0?k>>BigInt(E):k},D=e.bits2int_modN||function(C){return s(M(C))},R=Ca(e.nBitLength);function S(C){return yt("num < 2^"+e.nBitLength,C,Fn,R),xo(C,e.nByteLength)}function A(C,k,E=F){if(["recovered","canonical"].some(Me=>Me in E))throw new Error("sign() legacy options not supported");let{hash:v,randomBytes:_}=e,{lowS:T,prehash:H,extraEntropy:q}=E;T==null&&(T=!0),C=Ne("msgHash",C),l6(E),H&&(C=Ne("prehashed msgHash",v(C)));let X=D(C),ce=l(k),ie=[S(ce),S(X)];if(q!=null&&q!==!1){let Me=q===!0?_(t.BYTES):q;ie.push(Ne("extraEntropy",Me))}let de=Bn(...ie),ve=X;function Oe(Me){let Ve=M(Me);if(!d(Ve))return;let Tt=a(Ve),Xt=c.BASE.multiply(Ve).toAffine(),Ft=s(Xt.x);if(Ft===Fn)return;let fn=s(Tt*s(ve+Ft*ce));if(fn===Fn)return;let kn=(Xt.x===Ft?0:2)|Number(Xt.y&dt),ga=fn;return T&&h(fn)&&(ga=p(fn),kn^=1),new m(Ft,ga,kn)}return{seed:de,k2sig:Oe}}let F={lowS:e.lowS,prehash:!1},N={lowS:e.lowS,prehash:!1};function U(C,k,E=F){let{seed:v,k2sig:_}=A(C,k,E),T=e;return p2(T.hash.outputLen,T.nByteLength,T.hmac)(v,_)}c.BASE._setWindowSize(8);function K(C,k,E,v=N){let _=C;k=Ne("msgHash",k),E=Ne("publicKey",E);let{lowS:T,prehash:H,format:q}=v;if(l6(v),"strict"in v)throw new Error("options.strict was renamed to lowS");if(q!==void 0&&q!=="compact"&&q!=="der")throw new Error("format must be compact or der");let X=typeof _=="string"||bo(_),ce=!X&&!q&&typeof _=="object"&&_!==null&&typeof _.r=="bigint"&&typeof _.s=="bigint";if(!X&&!ce)throw new Error("invalid signature, expected Uint8Array, hex string or Signature instance");let ie,de;try{if(ce&&(ie=new m(_.r,_.s)),X){try{q!=="compact"&&(ie=m.fromDER(_))}catch(kn){if(!(kn instanceof Un.Err))throw kn}!ie&&q!=="der"&&(ie=m.fromCompact(_))}de=c.fromHex(E)}catch{return!1}if(!ie||T&&ie.hasHighS())return!1;H&&(k=e.hash(k));let{r:ve,s:Oe}=ie,Me=D(k),Ve=a(Oe),Tt=s(Me*Ve),Xt=s(ve*Ve),Ft=c.BASE.multiplyAndAddUnsafe(de,Tt,Xt)?.toAffine();return Ft?s(Ft.x)===ve:!1}return{CURVE:e,getPublicKey:x,getSharedSecret:I,sign:U,verify:K,ProjectivePoint:c,Signature:m,utils:y}}function vA(r){return{hash:r,hmac:(e,...t)=>Ao(r,e,a2(...t)),randomBytes:ui}}function f6(r,e){let t=n=>d6({...r,...vA(n)});return{...t(e),create:t}}var m6=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),h6=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),EA=BigInt(1),F2=BigInt(2),p6=(r,e)=>(r+e/F2)/e;function SA(r){let e=m6,t=BigInt(3),n=BigInt(6),o=BigInt(11),i=BigInt(22),s=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%e,u=l*l*r%e,d=Be(u,t,e)*u%e,f=Be(d,t,e)*u%e,h=Be(f,F2,e)*l%e,p=Be(h,o,e)*h%e,g=Be(p,i,e)*p%e,m=Be(g,a,e)*g%e,y=Be(m,c,e)*m%e,x=Be(y,a,e)*g%e,w=Be(x,t,e)*u%e,I=Be(w,s,e)*p%e,M=Be(I,n,e)*l%e,D=Be(M,F2,e);if(!V2.eql(V2.sqr(D),r))throw new Error("Cannot find square root");return D}var V2=vo(m6,void 0,void 0,{sqrt:SA}),Tr=f6({a:BigInt(0),b:BigInt(7),Fp:V2,n:h6,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=h6,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-EA*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=t,s=BigInt("0x100000000000000000000000000000000"),a=p6(i*r,e),c=p6(-n*r,e),l=Ie(r-a*t-c*o,e),u=Ie(-a*n-c*i,e),d=l>s,f=u>s;if(d&&(l=e-l),f&&(u=e-u),l>s||u>s)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:d,k1:l,k2neg:f,k2:u}}}},Ar),aB=BigInt(0);var cB=Tr.ProjectivePoint;function $2(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function g6(r,e){let t=Ye.digest(e instanceof Uint8Array?e:e.subarray());if($2(t))return t.then(({digest:n})=>Tr.sign(n,r).toDERRawBytes()).catch(n=>{throw new Ma(String(n))});try{return Tr.sign(t.digest,r).toDERRawBytes()}catch(n){throw new Ma(String(n))}}function y6(r,e,t){let n=Ye.digest(t instanceof Uint8Array?t:t.subarray());if($2(n))return n.then(({digest:o})=>Tr.verify(e,o,r)).catch(o=>{throw new Ba(String(o))});try{return Tr.verify(e,n.digest,r)}catch(o){throw new Ba(String(o))}}var Va=class{type="secp256k1";raw;_key;constructor(e){this._key=x6(e),this.raw=w6(this._key)}toMultihash(){return Jt.digest(Nt(this))}toCID(){return Q.createV1(114,this.toMultihash())}toString(){return be.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}verify(e,t){return y6(this._key,t,e)}},$a=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=b6(e),this.publicKey=new Va(t??v6(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}sign(e){return g6(this.raw,e)}};function K2(r){return new $a(r)}function H2(r){return new Va(r)}async function E6(){let r=AA();return new $a(r)}function w6(r){return Tr.ProjectivePoint.fromHex(r).toRawBytes(!0)}function b6(r){try{return Tr.getPublicKey(r,!0),r}catch(e){throw new ya(String(e))}}function x6(r){try{return Tr.ProjectivePoint.fromHex(r),r}catch(e){throw new Pn(String(e))}}function v6(r){try{return Tr.getPublicKey(r,!0)}catch(e){throw new ya(String(e))}}function AA(){return Tr.utils.randomPrivateKey()}async function ru(r,e){if(r==="Ed25519")return Xg();if(r==="secp256k1")return E6();if(r==="RSA")return B2(e??2048);throw new Ur}function rt(r,e){let{Type:t,Data:n}=xn.decode(r),o=n??new Uint8Array;switch(t){case Xe.RSA:return M2(o,e);case Xe.Ed25519:return _2(o);case Xe.secp256k1:return H2(o);default:throw new Ur}}function nu(r){let{Type:e,Data:t}=xn.decode(r.digest),n=t??new Uint8Array;switch(e){case Xe.Ed25519:return _2(n);case Xe.secp256k1:return H2(n);default:throw new Ur}}function Nt(r){return xn.encode({Type:Xe[r.type],Data:r.raw})}function S6(r){let e=La.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Xe.RSA:return eu(t);case Xe.Ed25519:return T2(t);case Xe.secp256k1:return K2(t);default:throw new Ur}}function A6(r){return r.byteLength===64?T2(r):r.byteLength===32?K2(r):eu(r)}function Es(r){return La.encode({Type:Xe[r.type],Data:r.raw})}var I6=Symbol.for("nodejs.util.inspect.custom"),IA=114,Ka=class{type;multihash;publicKey;string;constructor(e){this.type=e.type,this.multihash=e.multihash,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[al]=!0;toString(){return this.string==null&&(this.string=be.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return Q.createV1(IA,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return J(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return J(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[I6](){return`PeerId(${this.toString()})`}},Ha=class extends Ka{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},qa=class extends Ka{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},za=class extends Ka{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},TA=2336,Wa=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=Jt.digest(L(this.url))}[I6](){return`PeerId(${this.url})`}[al]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return Q.createV1(TA,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=O(e)),e.toString()===this.toString())}};var _A=114,T6=2336;function Ue(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=Ee(be.decode(`z${r}`));else{if(r.startsWith("k51qzi5uqu5")||r.startsWith("kzwfwjn5ji4")||r.startsWith("k2k4r8")||r.startsWith("bafz"))return Qr(Q.parse(r));if(e==null)throw new P('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=Ee(e.decode(r))}return it(t)}function vn(r){if(r.type==="Ed25519")return new qa({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new za({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new Ha({multihash:r.toCID().multihash,publicKey:r});throw new Ur}function _6(r){return vn(r.publicKey)}function it(r){if(kA(r))return new Ha({multihash:r});if(CA(r))try{let e=nu(r);if(e.type==="Ed25519")return new qa({multihash:r,publicKey:e});if(e.type==="secp256k1")return new za({multihash:r,publicKey:e})}catch{let t=O(r.digest);return new Wa(new URL(t))}throw new co("Supplied PeerID Multihash is invalid")}function Qr(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==_A&&r.code!==T6)throw new hl("Supplied PeerID CID is invalid");if(r.code===T6){let e=O(r.multihash.digest);return new Wa(new URL(e))}return it(r.multihash)}function CA(r){return r.code===Jt.code}function kA(r){return r.code===Ye.code}function mi(r,e){let t={[Symbol.iterator]:()=>t,next:()=>{let n=r.next(),o=n.value;return n.done===!0||o==null?{done:!0,value:void 0}:{done:!1,value:e(o)}}};return t}function ou(r){let e=Ee(be.decode(`z${r}`));return it(e)}var ft=class{map;constructor(e){if(this.map=new Map,e!=null)for(let[t,n]of e.entries())this.map.set(t.toString(),{key:t,value:n})}[Symbol.iterator](){return this.entries()}clear(){this.map.clear()}delete(e){return this.map.delete(e.toString())}entries(){return mi(this.map.entries(),e=>[e[1].key,e[1].value])}forEach(e){this.map.forEach((t,n)=>{e(t.value,t.key,this)})}get(e){return this.map.get(e.toString())?.value}has(e){return this.map.has(e.toString())}set(e,t){this.map.set(e.toString(),{key:e,value:t})}keys(){return mi(this.map.values(),e=>e.key)}values(){return mi(this.map.values(),e=>e.value)}get size(){return this.map.size}};var zt=class r{set;constructor(e){if(this.set=new Set,e!=null)for(let t of e)this.set.add(t.toString())}get size(){return this.set.size}[Symbol.iterator](){return this.values()}add(e){this.set.add(e.toString())}clear(){this.set.clear()}delete(e){this.set.delete(e.toString())}entries(){return mi(this.set.entries(),e=>{let t=ou(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=ou(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return mi(this.set.values(),e=>ou(e))}intersection(e){let t=new r;for(let n of e)this.has(n)&&t.add(n);return t}difference(e){let t=new r;for(let n of this)e.has(n)||t.add(n);return t}union(e){let t=new r;for(let n of e)t.add(n);for(let n of this)t.add(n);return t}};function q2(){return new zt}function C6(r,e,t,n){ai(r);let o=Cg({dkLen:32,asyncTick:10},n),{c:i,dkLen:s,asyncTick:a}=o;if(po(i),po(s),po(a),i<1)throw new Error("PBKDF2: iterations (c) should be >= 1");let c=qr(e),l=qr(t),u=new Uint8Array(s),d=Ao.create(r,c),f=d._cloneInto().update(l);return{c:i,dkLen:s,asyncTick:a,DK:u,PRF:d,PRFSalt:f}}function k6(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),o.fill(0),t}function P6(r,e,t,n){let{c:o,dkLen:i,DK:s,PRF:a,PRFSalt:c}=C6(r,e,t,n),l,u=new Uint8Array(4),d=li(u),f=new Uint8Array(a.outputLen);for(let h=1,p=0;p<i;h++,p+=a.outputLen){let g=s.subarray(p,p+a.outputLen);d.setInt32(0,h,!1),(l=c._cloneInto(l)).update(u).digestInto(f),g.set(f.subarray(0,g.length));for(let m=1;m<o;m++){a._cloneInto(l).update(f).digestInto(f);for(let y=0;y<g.length;y++)g[y]^=f[y]}}return k6(a,c,s,l,f)}async function iu(r,e,t,n){let{c:o,dkLen:i,asyncTick:s,DK:a,PRF:c,PRFSalt:l}=C6(r,e,t,n),u,d=new Uint8Array(4),f=li(d),h=new Uint8Array(c.outputLen);for(let p=1,g=0;g<i;p++,g+=c.outputLen){let m=a.subarray(g,g+c.outputLen);f.setInt32(0,p,!1),(u=l._cloneInto(u)).update(d).digestInto(h),m.set(h.subarray(0,m.length)),await Tg(o-1,s,()=>{c._cloneInto(u).update(h).digestInto(h);for(let y=0;y<m.length;y++)m[y]^=h[y]})}return k6(c,l,a,u,h)}var Ga=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),Io=new Uint32Array(80),z2=class extends mo{constructor(){super(64,20,8,!1),this.A=Ga[0]|0,this.B=Ga[1]|0,this.C=Ga[2]|0,this.D=Ga[3]|0,this.E=Ga[4]|0}get(){let{A:e,B:t,C:n,D:o,E:i}=this;return[e,t,n,o,i]}set(e,t,n,o,i){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0}process(e,t){for(let c=0;c<16;c++,t+=4)Io[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)Io[c]=Fl(Io[c-3]^Io[c-8]^Io[c-14]^Io[c-16],1);let{A:n,B:o,C:i,D:s,E:a}=this;for(let c=0;c<80;c++){let l,u;c<20?(l=Vl(o,i,s),u=1518500249):c<40?(l=o^i^s,u=1859775393):c<60?(l=$l(o,i,s),u=2400959708):(l=o^i^s,u=3395469782);let d=Fl(n,5)+l+a+u+Io[c]|0;a=s,s=i,i=Fl(o,30),o=n,n=d}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,this.set(n,o,i,s,a)}roundClean(){Io.fill(0)}destroy(){this.set(0,0,0,0,0),this.buffer.fill(0)}},R6=ms(()=>new z2);var D6={sha1:R6,"sha2-256":Ar,"sha2-512":wo};function Qa(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(D6).join(" / ");throw new P(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let i=D6[o],s=P6(i,r,e,{c:t,dkLen:n});return ot.encode(s).substring(1)}var W2={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},N6={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},L6=new globalThis.TextEncoder;function PA(r,e){let t=W2[e],n=N6[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function RA(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=W2[e],o=N6[e],i=r;for(;i.length>0;){let s=L6.encodeInto(i,t);i=i.slice(s.read);for(let a=0;a<s.written;a++)o^=BigInt(t[a]),o=BigInt.asUintN(e,o*n)}return o}function G2(r,{size:e=32,utf8Buffer:t}={}){if(!W2[e])throw new Error("The `size` option must be one of 32, 64, 128, 256, 512, or 1024");if(typeof r=="string"){if(t)return RA(r,e,t);r=L6.encode(r)}return PA(r,e)}var Ya={hash:r=>Number(G2(r,{size:32})),hashV:(r,e)=>DA(Ya.hash(r,e))};function DA(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),L(e,"base16")}var Q2=64,Yr=class{fp;h;seed;constructor(e,t,n,o=2){if(o>Q2)throw new TypeError("Invalid Fingerprint Size");let i=t.hashV(e,n),s=se(o);for(let a=0;a<s.length;a++)s[a]=i[a];s.length===0&&(s[0]=7),this.fp=s,this.h=t,this.seed=n}hash(){return this.h.hash(this.fp,this.seed)}equals(e){return e?.fp instanceof Uint8Array?J(this.fp,e.fp):!1}};function gi(r,e){return Math.floor(Math.random()*(e-r))+r}var yi=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof Yr))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof Yr))throw new TypeError("Invalid Fingerprint");for(let t=0;t<this.contents.length;t++)if(this.contents[t]==null)return this.contents[t]=e,!0;return!0}swap(e){if(!(e instanceof Yr))throw new TypeError("Invalid Fingerprint");let t=gi(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof Yr))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var NA=500,Xa=class{bucketSize;filterSize;fingerprintSize;buckets;count;hash;seed;constructor(e){this.filterSize=e.filterSize,this.bucketSize=e.bucketSize??4,this.fingerprintSize=e.fingerprintSize??2,this.count=0,this.buckets=[],this.hash=e.hash??Ya,this.seed=e.seed??gi(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=L(e));let t=new Yr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=(n^t.hash())%this.filterSize;if(this.buckets[n]==null&&(this.buckets[n]=new yi(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new yi(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let i=[n,o],s=i[gi(0,i.length-1)];this.buckets[s]==null&&(this.buckets[s]=new yi(this.bucketSize));for(let a=0;a<NA;a++){let c=this.buckets[s].swap(t);if(c!=null&&(s=(s^c.hash())%this.filterSize,this.buckets[s]==null&&(this.buckets[s]=new yi(this.bucketSize)),this.buckets[s].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=L(e));let t=new Yr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.has(t)??!1;if(o)return o;let i=(n^t.hash())%this.filterSize;return this.buckets[i]?.has(t)??!1}remove(e){typeof e=="string"&&(e=L(e));let t=new Yr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.remove(t)??!1;if(o)return this.count--,o;let i=(n^t.hash())%this.filterSize,s=this.buckets[i]?.remove(t)??!1;return s&&this.count--,s}get reliable(){return Math.floor(100*(this.count/this.filterSize))<=90}},LA={1:.5,2:.84,4:.95,8:.98};function OA(r=.001){return r>.002?2:r>1e-5?4:8}function O6(r,e=.001){let t=OA(e),n=LA[t],o=Math.round(r/n),i=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),Q2);return{filterSize:o,bucketSize:t,fingerprintSize:i}}var su=class{filterSize;bucketSize;fingerprintSize;scale;filterSeries;hash;seed;constructor(e){this.bucketSize=e.bucketSize??4,this.filterSize=e.filterSize??(1<<18)/this.bucketSize,this.fingerprintSize=e.fingerprintSize??2,this.scale=e.scale??2,this.hash=e.hash??Ya,this.seed=e.seed??gi(0,Math.pow(2,10)),this.filterSeries=[new Xa({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=L(e)),this.has(e))return!0;let t=this.filterSeries.find(n=>n.reliable);if(t==null){let n=this.filterSize*Math.pow(this.scale,this.filterSeries.length);t=new Xa({filterSize:n,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed}),this.filterSeries.push(t)}return t.add(e)}has(e){typeof e=="string"&&(e=L(e));for(let t=0;t<this.filterSeries.length;t++)if(this.filterSeries[t].has(e))return!0;return!1}remove(e){typeof e=="string"&&(e=L(e));for(let t=0;t<this.filterSeries.length;t++)if(this.filterSeries[t].remove(e))return!0;return!1}get count(){return this.filterSeries.reduce((e,t)=>e+t.count,0)}};function rr(r,e=.001,t){return new su({...O6(r,e),...t??{}})}var au=class{filter;constructor(e,t){this.filter=rr(e,t)}has(e){return this.filter.has(e.toMultihash().bytes)}add(e){this.filter.add(e.toMultihash().bytes)}remove(e){this.filter.remove?.(e.toMultihash().bytes)}};function Y2(r,e=.001){return new au(r,e)}var X2=class extends ft{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function Za(r){let{name:e,metrics:t}=r,n;return t!=null?n=new X2({name:e,metrics:t}):n=new ft,n}var Vn=class{full;pendingBytes;wantlist;blocks;blockPresences;constructor(e=!1,t=0){this.full=e,this.wantlist=new Map,this.blocks=new Map,this.blockPresences=new Map,this.pendingBytes=0}addWantlistEntry(e,t){let n=ot.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=ot.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=ot.encode(e.multihash.bytes);this.blocks.set(n,t)}};function MA(r){let e=new Uint8Array(r.reduce((n,o)=>n+me(o),0)),t=0;for(let n of r)e=$e(n,e,t),t+=me(n);return e}var M6=MA;function Z2(r){return M6([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var cu=class{peerId;blockstore;network;wants;exchangeCount;bytesSent;bytesReceived;lastExchange;maxSizeReplaceHasWithBlock;log;constructor(e,t){this.peerId=e.peerId,this.blockstore=e.blockstore,this.network=e.network,this.wants=new Map,this.log=e.logger.forComponent(`helia:bitswap:ledger:${e.peerId}`),this.exchangeCount=0,this.bytesSent=0,this.bytesReceived=0,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock??1024}sentBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesSent+=e}receivedBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesReceived+=e}debtRatio(){return this.bytesSent/(this.bytesReceived+1)}async sendBlocksToPeer(e){let t=new Vn,n=new Set;for(let[o,i]of this.wants.entries())try{let s=await this.blockstore.get(i.cid,e);i.wantType===tt.WantHave?s.byteLength<this.maxSizeReplaceHasWithBlock?(this.log("sending have and block for %c",i.cid),n.add(o),t.addBlock(i.cid,{data:s,prefix:Z2(i.cid)})):(this.log("sending have for %c",i.cid),t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Er.HaveBlock})):(this.log("sending block for %c",i.cid),n.add(o),t.addBlock(i.cid,{data:s,prefix:Z2(i.cid)}))}catch(s){if(s.name!=="NotFoundError")throw s;if(this.log("do not have block for %c",i.cid),!i.sendDontHave||i.sentDoNotHave===!0)continue;i.sentDoNotHave=!0,t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Er.DoNotHaveBlock})}if(t.blocks.size>0||t.blockPresences.size>0){this.log("sending message"),await this.network.sendMessage(this.peerId,t,e),this.log("sent message"),this.sentBytes([...t.blocks.values()].reduce((o,i)=>o+i.data.byteLength,0));for(let o of n)this.wants.delete(o)}}};var lu=class{blockstore;network;ledgerMap;maxSizeReplaceHasWithBlock;log;logger;constructor(e,t={}){this.blockstore=e.blockstore,this.network=e.network,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock,this.log=e.logger.forComponent("helia:bitswap:peer-want-lists"),this.logger=e.logger,this.ledgerMap=Za({name:"helia_bitswap_ledger_map",metrics:e.metrics}),this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}ledgerForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return{peer:t.peerId,value:t.debtRatio(),sent:t.bytesSent,received:t.bytesReceived,exchanged:t.exchangeCount}}wantListForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return[...t.wants.values()]}peers(){return Array.from(this.ledgerMap.values()).map(e=>e.peerId)}async receiveMessage(e,t){let n=this.ledgerMap.get(e);if(n==null&&(n=new cu({peerId:e,blockstore:this.blockstore,network:this.network,logger:this.logger},{maxSizeReplaceHasWithBlock:this.maxSizeReplaceHasWithBlock}),this.ledgerMap.set(e,n)),n.receivedBytes(t.blocks?.reduce((o,i)=>o+i.data.byteLength,0)??0),t.wantlist!=null){t.wantlist.full===!0&&n.wants.clear();for(let o of t.wantlist.entries){let i=Q.decode(o.cid),s=O(i.multihash.bytes,"base64");o.cancel===!0?(this.log("peer %p cancelled want of block for %c",e,i),n.wants.delete(s)):(o.wantType===tt.WantHave?this.log("peer %p wanted block presence for %c",e,i):this.log("peer %p wanted block for %c",e,i),n.wants.set(s,{cid:i,priority:o.priority,wantType:o.wantType??tt.WantBlock,sendDontHave:o.sendDontHave??!1}))}}this.log("send blocks to peer"),await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=O(e.multihash.bytes,"base64"),o=[];for(let i of this.ledgerMap.values())i.wants.has(n)&&o.push(i);await Promise.all(o.map(async i=>i.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};function BA(r,e){try{if(typeof r=="string"&&r.length>0)return UA(r);if(typeof r=="number"&&isFinite(r))return e?.long?VA(r):FA(r);throw new Error("Value is not a string or number.")}catch(t){let n=$A(t)?`${t.message}. value=${JSON.stringify(r)}`:"An unknown error has occured.";throw new Error(n)}}function UA(r){if(r=String(r),r.length>100)throw new Error("Value exceeds the maximum length of 100 characters.");let e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(!e)return NaN;let t=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return t*315576e5;case"weeks":case"week":case"w":return t*6048e5;case"days":case"day":case"d":return t*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return t*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return t*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return t*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:throw new Error(`The unit ${n} was matched, but no matching case exists.`)}}var du=BA;function FA(r){let e=Math.abs(r);return 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 VA(r){let e=Math.abs(r);return e>=864e5?uu(r,e,864e5,"day"):e>=36e5?uu(r,e,36e5,"hour"):e>=6e4?uu(r,e,6e4,"minute"):e>=1e3?uu(r,e,1e3,"second"):`${r} ms`}function uu(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function $A(r){return typeof r=="object"&&r!==null&&"message"in r}function j2(r){t.debug=t,t.default=t,t.coerce=c,t.disable=i,t.enable=o,t.enabled=s,t.humanize=du,t.destroy=l,Object.keys(r).forEach(u=>{t[u]=r[u]}),t.names=[],t.skips=[],t.formatters={};function e(u){let d=0;for(let f=0;f<u.length;f++)d=(d<<5)-d+u.charCodeAt(f),d|=0;return t.colors[Math.abs(d)%t.colors.length]}t.selectColor=e;function t(u){let d,f=null,h,p;function g(...m){if(!g.enabled)return;let y=g,x=Number(new Date),w=x-(d||x);y.diff=w,y.prev=d,y.curr=x,d=x,m[0]=t.coerce(m[0]),typeof m[0]!="string"&&m.unshift("%O");let I=0;m[0]=m[0].replace(/%([a-zA-Z%])/g,(D,R)=>{if(D==="%%")return"%";I++;let S=t.formatters[R];if(typeof S=="function"){let A=m[I];D=S.call(y,A),m.splice(I,1),I--}return D}),t.formatArgs.call(y,m),(y.log||t.log).apply(y,m)}return g.namespace=u,g.useColors=t.useColors(),g.color=t.selectColor(u),g.extend=n,g.destroy=t.destroy,Object.defineProperty(g,"enabled",{enumerable:!0,configurable:!1,get:()=>f!==null?f:(h!==t.namespaces&&(h=t.namespaces,p=t.enabled(u)),p),set:m=>{f=m}}),typeof t.init=="function"&&t.init(g),g}function n(u,d){let f=t(this.namespace+(typeof d>"u"?":":d)+u);return f.log=this.log,f}function o(u){t.save(u),t.namespaces=u,t.names=[],t.skips=[];let d,f=(typeof u=="string"?u:"").split(/[\s,]+/),h=f.length;for(d=0;d<h;d++)f[d]&&(u=f[d].replace(/\*/g,".*?"),u[0]==="-"?t.skips.push(new RegExp("^"+u.substr(1)+"$")):t.names.push(new RegExp("^"+u+"$")))}function i(){let u=[...t.names.map(a),...t.skips.map(a).map(d=>"-"+d)].join(",");return t.enable(""),u}function s(u){if(u[u.length-1]==="*")return!0;let d,f;for(d=0,f=t.skips.length;d<f;d++)if(t.skips[d].test(u))return!1;for(d=0,f=t.names.length;d<f;d++)if(t.names[d].test(u))return!0;return!1}function a(u){return u.toString().substring(2,u.toString().length-2).replace(/\.\*\?$/,"*")}function c(u){return u instanceof Error?u.stack??u.message:u}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 fu=QA(),KA=["#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 HA(){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 qA(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+du(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 zA=console.debug??console.log??(()=>{});function WA(r){try{r?fu?.setItem("debug",r):fu?.removeItem("debug")}catch{}}function GA(){let r;try{r=fu?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function QA(){try{return localStorage}catch{}}function YA(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var B6=j2({formatArgs:qA,save:WA,load:GA,useColors:HA,setupFormatters:YA,colors:KA,storage:fu,log:zA});var nr=B6;nr.formatters.b=r=>r==null?"undefined":be.baseEncode(r);nr.formatters.t=r=>r==null?"undefined":at.baseEncode(r);nr.formatters.m=r=>r==null?"undefined":ot.baseEncode(r);nr.formatters.p=r=>r==null?"undefined":r.toString();nr.formatters.c=r=>r==null?"undefined":r.toString();nr.formatters.k=r=>r==null?"undefined":r.toString();nr.formatters.a=r=>r==null?"undefined":r.toString();nr.formatters.e=r=>r==null?"undefined":U6(r.stack)??U6(r.message)??r.toString();function XA(r){let e=()=>{};return e.enabled=!1,e.color="",e.diff=0,e.log=()=>{},e.namespace=r,e.destroy=()=>!0,e.extend=()=>e,e}function To(){return{forComponent(r){return hr(r)}}}function hr(r){let e=XA(`${r}:trace`);return nr.enabled(`${r}:trace`)&&nr.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=nr(`${r}:trace`)),Object.assign(nr(r),{error:nr(`${r}:error`),trace:e})}function U6(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}var ep=Mr(V6(),1);var Ja=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},tp=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},$6=r=>globalThis.DOMException===void 0?new tp(r):new DOMException(r),K6=r=>{let e=r.reason===void 0?$6("This operation was aborted."):r.reason;return e instanceof Error?e:$6(e)};function Xr(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,a,l=new Promise((u,d)=>{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&&d(K6(h)),a=()=>{d(K6(h))},h.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(u,d);return}let f=new Ja;s=i.setTimeout.call(void 0,()=>{if(n){try{u(n())}catch(h){d(h)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?u():o instanceof Error?d(o):(f.message=o??`Promise timed out after ${t} milliseconds`,d(f))},t),(async()=>{try{u(await r)}catch(h){d(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}function rp(r,e,t){let n=0,o=r.length;for(;o>0;){let i=Math.trunc(o/2),s=n+i;t(r[s],e)<=0?(n=++s,o-=i+1):o=i}return n}var ec=class{#e=[];enqueue(e,t){t={priority:0,...t};let n={priority:t.priority,id:t.id,run:e};if(this.size===0||this.#e[this.size-1].priority>=t.priority){this.#e.push(n);return}let o=rp(this.#e,n,(i,s)=>s.priority-i.priority);this.#e.splice(o,0,n)}setPriority(e,t){let n=this.#e.findIndex(i=>i.id===e);if(n===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);let[o]=this.#e.splice(n,1);this.enqueue(o.run,{priority:t,id:e})}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(t=>t.priority===e.priority).map(t=>t.run)}get size(){return this.#e.length}};var En=class extends ep.default{#e;#t;#r=0;#o;#a;#l=0;#i;#u;#n;#m;#s=0;#d;#c;#g;#b=1n;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:ec,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#t=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#o=e.intervalCap,this.#a=e.interval,this.#n=new e.queueClass,this.#m=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#g=e.throwOnTimeout===!0,this.#c=e.autoStart===!1}get#x(){return this.#t||this.#r<this.#o}get#v(){return this.#s<this.#d}#E(){this.#s--,this.#f(),this.emit("next")}#S(){this.#w(),this.#y(),this.#u=void 0}get#A(){let e=Date.now();if(this.#i===void 0){let t=this.#l-e;if(t<0)this.#r=this.#e?this.#s:0;else return this.#u===void 0&&(this.#u=setTimeout(()=>{this.#S()},t)),!0}return!1}#f(){if(this.#n.size===0)return this.#i&&clearInterval(this.#i),this.#i=void 0,this.emit("empty"),this.#s===0&&this.emit("idle"),!1;if(!this.#c){let e=!this.#A;if(this.#x&&this.#v){let t=this.#n.dequeue();return t?(this.emit("active"),t(),e&&this.#y(),!0):!1}}return!1}#y(){this.#t||this.#i!==void 0||(this.#i=setInterval(()=>{this.#w()},this.#a),this.#l=Date.now()+this.#a)}#w(){this.#r===0&&this.#s===0&&this.#i&&(clearInterval(this.#i),this.#i=void 0),this.#r=this.#e?this.#s:0,this.#h()}#h(){for(;this.#f(););}get concurrency(){return this.#d}set concurrency(e){if(!(typeof e=="number"&&e>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this.#d=e,this.#h()}async#I(e){return new Promise((t,n)=>{e.addEventListener("abort",()=>{n(e.reason)},{once:!0})})}setPriority(e,t){this.#n.setPriority(e,t)}async add(e,t={}){return t.id??=(this.#b++).toString(),t={timeout:this.timeout,throwOnTimeout:this.#g,...t},new Promise((n,o)=>{this.#n.enqueue(async()=>{this.#s++,this.#r++;try{t.signal?.throwIfAborted();let i=e({signal:t.signal});t.timeout&&(i=Xr(Promise.resolve(i),{milliseconds:t.timeout})),t.signal&&(i=Promise.race([i,this.#I(t.signal)]));let s=await i;n(s),this.emit("completed",s)}catch(i){if(i instanceof Ja&&!t.throwOnTimeout){n();return}o(i),this.emit("error",i)}finally{this.#E()}},t),this.emit("add"),this.#f()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#c?(this.#c=!1,this.#h(),this):this}pause(){this.#c=!0}clear(){this.#n=new this.#m}async onEmpty(){this.#n.size!==0&&await this.#p("empty")}async onSizeLessThan(e){this.#n.size<e||await this.#p("next",()=>this.#n.size<e)}async onIdle(){this.#s===0&&this.#n.size===0||await this.#p("idle")}async#p(e,t){return new Promise(n=>{let o=()=>{t&&!t()||(this.off(e,o),n())};this.on(e,o)})}get size(){return this.#n.size}sizeBy(e){return this.#n.filter(e).length}get pending(){return this.#s}get isPaused(){return this.#c}};function pu(r){let e=[pr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var np=60;function mu(r){return{Status:r.Status??0,TC:r.TC??r.flag_tc??!1,RD:r.RD??r.flag_rd??!1,RA:r.RA??r.flag_ra??!1,AD:r.AD??r.flag_ad??!1,CD:r.CD??r.flag_cd??!1,Question:(r.Question??r.questions??[]).map(e=>({name:e.name,type:pr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:pr[e.type],TTL:e.TTL??e.ttl??np,data:e.data instanceof Uint8Array?O(e.data):e.data}))}}var JA=4;function op(r,e={}){let t=new En({concurrency:e.queryConcurrency??JA});return async(n,o={})=>{let i=new URLSearchParams;i.set("name",n),pu(o.types).forEach(a=>{i.append("type",pr[a])}),o.onProgress?.(new W("dns:query",{detail:n}));let s=await t.add(async()=>{let a=await fetch(`${r}?${i}`,{headers:{accept:"application/dns-json"},signal:o?.signal});if(a.status!==200)throw new Error(`Unexpected HTTP status: ${a.status} - ${a.statusText}`);let c=mu(await a.json());return o.onProgress?.(new W("dns:response",{detail:c})),c},{signal:o.signal});if(s==null)throw new Error("No DNS response received");return s}}function H6(){return[op("https://cloudflare-dns.com/dns-query"),op("https://dns.google/resolve")]}var W6=Mr(z6(),1);var ip=class{lru;constructor(e){this.lru=(0,W6.default)(e)}get(e,t){let n=!0,o=[];for(let i of t){let s=this.getAnswers(e,i);if(s.length===0){n=!1;break}o.push(...s)}if(n)return mu({answers:o})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,o=this.lru.get(n);if(o!=null){let i=o.filter(s=>s.expires>Date.now()).map(({expires:s,value:a})=>({...a,TTL:Math.round((s-Date.now())/1e3),type:pr[a.type]}));return i.length===0&&this.lru.remove(n),i}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,o=this.lru.get(n)??[];o.push({expires:Date.now()+(t.TTL??np)*1e3,value:t}),this.lru.set(n,o)}remove(e,t){let n=`${e.toLowerCase()}-${t}`;this.lru.remove(n)}clear(){this.lru.clear()}};function G6(r){return new ip(r)}var eI=1e3,gu=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=G6(e.cacheSize??eI),Object.entries(e.resolvers??{}).forEach(([t,n])=>{Array.isArray(n)||(n=[n]),t.endsWith(".")||(t=`${t}.`),this.resolvers[t]=n}),this.resolvers["."]==null&&(this.resolvers["."]=H6())}async query(e,t={}){let n=pu(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new W("dns:cache",{detail:o})),o;let i=`${e.split(".").pop()}.`,s=(this.resolvers[i]??this.resolvers["."]).sort(()=>Math.random()>.5?-1:1),a=[];for(let c of s){if(t.signal?.aborted===!0)break;try{let l=await c(e,{...t,types:n});for(let u of l.Answer)this.cache.add(e,u);return l}catch(l){a.push(l),t.onProgress?.(new W("dns:error",{detail:l}))}}throw a.length===1?a[0]:new AggregateError(a,`DNS lookup of ${e} ${n} failed`)}};var pr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(pr||(pr={}));function yu(r={}){return new gu(r)}var tI=["string","number","bigint","symbol"],rI=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function Q6(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(tI.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(nI(r))return"Buffer";let t=oI(r);return t||"Object"}function nI(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function oI(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(rI.includes(e))return e}var b=class{constructor(e,t,n){this.major=e,this.majorEncoded=e<<5,this.name=t,this.terminal=n}toString(){return`Type[${this.major}].${this.name}`}compare(e){return this.major<e.major?-1:this.major>e.major?1:0}};b.uint=new b(0,"uint",!0);b.negint=new b(1,"negint",!0);b.bytes=new b(2,"bytes",!0);b.string=new b(3,"string",!0);b.array=new b(4,"array",!1);b.map=new b(5,"map",!1);b.tag=new b(6,"tag",!1);b.float=new b(7,"float",!0);b.false=new b(7,"false",!0);b.true=new b(7,"true",!0);b.null=new b(7,"null",!0);b.undefined=new b(7,"undefined",!0);b.break=new b(7,"break",!0);var B=class{constructor(e,t,n){this.type=e,this.value=t,this.encodedLength=n,this.encodedBytes=void 0,this.byteValue=void 0}toString(){return`Token[${this.type}].${this.value}`}};var Ss=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",iI=new TextDecoder,sI=new TextEncoder;function wu(r){return Ss&&globalThis.Buffer.isBuffer(r)}function tc(r){return r instanceof Uint8Array?wu(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var j6=Ss?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):X6(r,e,t):(r,e,t)=>t-e>64?iI.decode(r.subarray(e,t)):X6(r,e,t),bu=Ss?r=>r.length>64?globalThis.Buffer.from(r):Y6(r):r=>r.length>64?sI.encode(r):Y6(r),Sn=r=>Uint8Array.from(r),As=Ss?(r,e,t)=>wu(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),J6=Ss?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),tc(globalThis.Buffer.concat(r,e))):(r,e)=>{let t=new Uint8Array(e),n=0;for(let o of r)n+o.length>t.length&&(o=o.subarray(0,t.length-n)),t.set(o,n),n+=o.length;return t},e8=Ss?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function t8(r,e){if(wu(r)&&wu(e))return r.compare(e);for(let t=0;t<r.length;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}function Y6(r){let e=[],t=0;for(let n=0;n<r.length;n++){let o=r.charCodeAt(n);o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&n+1<r.length&&(r.charCodeAt(n+1)&64512)===56320?(o=65536+((o&1023)<<10)+(r.charCodeAt(++n)&1023),e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}function X6(r,e,t){let n=[];for(;e<t;){let o=r[e],i=null,s=o>239?4:o>223?3:o>191?2:1;if(e+s<=t){let a,c,l,u;switch(s){case 1:o<128&&(i=o);break;case 2:a=r[e+1],(a&192)===128&&(u=(o&31)<<6|a&63,u>127&&(i=u));break;case 3:a=r[e+1],c=r[e+2],(a&192)===128&&(c&192)===128&&(u=(o&15)<<12|(a&63)<<6|c&63,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:a=r[e+1],c=r[e+2],l=r[e+3],(a&192)===128&&(c&192)===128&&(l&192)===128&&(u=(o&15)<<18|(a&63)<<12|(c&63)<<6|l&63,u>65535&&u<1114112&&(i=u))}}i===null?(i=65533,s=1):i>65535&&(i-=65536,n.push(i>>>10&1023|55296),i=56320|i&1023),n.push(i),e+=s}return sp(n)}var Z6=4096;function sp(r){let e=r.length;if(e<=Z6)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=Z6));return t}var aI=256,rc=class{constructor(e=aI){this.chunkSize=e,this.cursor=0,this.maxCursor=-1,this.chunks=[],this._initReuseChunk=null}reset(){this.cursor=0,this.maxCursor=-1,this.chunks.length&&(this.chunks=[]),this._initReuseChunk!==null&&(this.chunks.push(this._initReuseChunk),this.maxCursor=this._initReuseChunk.length-1)}push(e){let t=this.chunks[this.chunks.length-1];if(this.cursor+e.length<=this.maxCursor+1){let o=t.length-(this.maxCursor-this.cursor)-1;t.set(e,o)}else{if(t){let o=t.length-(this.maxCursor-this.cursor)-1;o<t.length&&(this.chunks[this.chunks.length-1]=t.subarray(0,o),this.maxCursor=this.cursor-1)}e.length<64&&e.length<this.chunkSize?(t=e8(this.chunkSize),this.chunks.push(t),this.maxCursor+=t.length,this._initReuseChunk===null&&(this._initReuseChunk=t),t.set(e,0)):(this.chunks.push(e),this.maxCursor+=e.length)}this.cursor+=e.length}toBytes(e=!1){let t;if(this.chunks.length===1){let n=this.chunks[0];e&&this.cursor>n.length/2?(t=this.cursor===n.length?n:n.subarray(0,this.cursor),this._initReuseChunk=null,this.chunks=[]):t=As(n,0,this.cursor)}else t=J6(this.chunks,this.cursor);return e&&this.reset(),t}};var Z="CBOR decode error:",$n="CBOR encode error:",nc=[];nc[23]=1;nc[24]=2;nc[25]=3;nc[26]=5;nc[27]=9;function Kn(r,e,t){if(r.length-e<t)throw new Error(`${Z} not enough data for type`)}var ht=[24,256,65536,4294967296,BigInt("18446744073709551616")];function mr(r,e,t){Kn(r,e,1);let n=r[e];if(t.strict===!0&&n<ht[0])throw new Error(`${Z} integer encoded in more bytes than necessary (strict decode)`);return n}function gr(r,e,t){Kn(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<ht[1])throw new Error(`${Z} integer encoded in more bytes than necessary (strict decode)`);return n}function yr(r,e,t){Kn(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<ht[2])throw new Error(`${Z} integer encoded in more bytes than necessary (strict decode)`);return n}function wr(r,e,t){Kn(r,e,8);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3],o=r[e+4]*16777216+(r[e+5]<<16)+(r[e+6]<<8)+r[e+7],i=(BigInt(n)<<BigInt(32))+BigInt(o);if(t.strict===!0&&i<ht[3])throw new Error(`${Z} integer encoded in more bytes than necessary (strict decode)`);if(i<=Number.MAX_SAFE_INTEGER)return Number(i);if(t.allowBigInt===!0)return i;throw new Error(`${Z} integers outside of the safe integer range are not supported`)}function r8(r,e,t,n){return new B(b.uint,mr(r,e+1,n),2)}function n8(r,e,t,n){return new B(b.uint,gr(r,e+1,n),3)}function o8(r,e,t,n){return new B(b.uint,yr(r,e+1,n),5)}function i8(r,e,t,n){return new B(b.uint,wr(r,e+1,n),9)}function _r(r,e){return wt(r,0,e.value)}function wt(r,e,t){if(t<ht[0]){let n=Number(t);r.push([e|n])}else if(t<ht[1]){let n=Number(t);r.push([e|24,n])}else if(t<ht[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<ht[3]){let n=Number(t);r.push([e|26,n>>>24&255,n>>>16&255,n>>>8&255,n&255])}else{let n=BigInt(t);if(n<ht[4]){let o=[e|27,0,0,0,0,0,0,0],i=Number(n&BigInt(4294967295)),s=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=i&255,i=i>>8,o[7]=i&255,i=i>>8,o[6]=i&255,i=i>>8,o[5]=i&255,o[4]=s&255,s=s>>8,o[3]=s&255,s=s>>8,o[2]=s&255,s=s>>8,o[1]=s&255,r.push(o)}else throw new Error(`${Z} encountered BigInt larger than allowable range`)}}_r.encodedSize=function(e){return wt.encodedSize(e.value)};wt.encodedSize=function(e){return e<ht[0]?1:e<ht[1]?2:e<ht[2]?3:e<ht[3]?5:9};_r.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function s8(r,e,t,n){return new B(b.negint,-1-mr(r,e+1,n),2)}function a8(r,e,t,n){return new B(b.negint,-1-gr(r,e+1,n),3)}function c8(r,e,t,n){return new B(b.negint,-1-yr(r,e+1,n),5)}var ap=BigInt(-1),l8=BigInt(1);function u8(r,e,t,n){let o=wr(r,e+1,n);if(typeof o!="bigint"){let i=-1-o;if(i>=Number.MIN_SAFE_INTEGER)return new B(b.negint,i,9)}if(n.allowBigInt!==!0)throw new Error(`${Z} integers outside of the safe integer range are not supported`);return new B(b.negint,ap-BigInt(o),9)}function xu(r,e){let t=e.value,n=typeof t=="bigint"?t*ap-l8:t*-1-1;wt(r,e.type.majorEncoded,n)}xu.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*ap-l8:t*-1-1;return n<ht[0]?1:n<ht[1]?2:n<ht[2]?3:n<ht[3]?5:9};xu.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function oc(r,e,t,n){Kn(r,e,t+n);let o=As(r,e+t,e+t+n);return new B(b.bytes,o,t+n)}function d8(r,e,t,n){return oc(r,e,1,t)}function f8(r,e,t,n){return oc(r,e,2,mr(r,e+1,n))}function h8(r,e,t,n){return oc(r,e,3,gr(r,e+1,n))}function p8(r,e,t,n){return oc(r,e,5,yr(r,e+1,n))}function m8(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Z} 64-bit integer bytes lengths not supported`);return oc(r,e,9,o)}function vu(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===b.string?bu(r.value):r.value),r.encodedBytes}function Is(r,e){let t=vu(e);wt(r,e.type.majorEncoded,t.length),r.push(t)}Is.encodedSize=function(e){let t=vu(e);return wt.encodedSize(t.length)+t.length};Is.compareTokens=function(e,t){return lI(vu(e),vu(t))};function lI(r,e){return r.length<e.length?-1:r.length>e.length?1:t8(r,e)}function ic(r,e,t,n,o){let i=t+n;Kn(r,e,i);let s=new B(b.string,j6(r,e+t,e+i),i);return o.retainStringBytes===!0&&(s.byteValue=As(r,e+t,e+i)),s}function g8(r,e,t,n){return ic(r,e,1,t,n)}function y8(r,e,t,n){return ic(r,e,2,mr(r,e+1,n),n)}function w8(r,e,t,n){return ic(r,e,3,gr(r,e+1,n),n)}function b8(r,e,t,n){return ic(r,e,5,yr(r,e+1,n),n)}function x8(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Z} 64-bit integer string lengths not supported`);return ic(r,e,9,o,n)}var v8=Is;function Ts(r,e,t,n){return new B(b.array,n,t)}function E8(r,e,t,n){return Ts(r,e,1,t)}function S8(r,e,t,n){return Ts(r,e,2,mr(r,e+1,n))}function A8(r,e,t,n){return Ts(r,e,3,gr(r,e+1,n))}function I8(r,e,t,n){return Ts(r,e,5,yr(r,e+1,n))}function T8(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Z} 64-bit integer array lengths not supported`);return Ts(r,e,9,o)}function _8(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Z} indefinite length items not allowed`);return Ts(r,e,1,1/0)}function Eu(r,e){wt(r,b.array.majorEncoded,e.value)}Eu.compareTokens=_r.compareTokens;Eu.encodedSize=function(e){return wt.encodedSize(e.value)};function _s(r,e,t,n){return new B(b.map,n,t)}function C8(r,e,t,n){return _s(r,e,1,t)}function k8(r,e,t,n){return _s(r,e,2,mr(r,e+1,n))}function P8(r,e,t,n){return _s(r,e,3,gr(r,e+1,n))}function R8(r,e,t,n){return _s(r,e,5,yr(r,e+1,n))}function D8(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Z} 64-bit integer map lengths not supported`);return _s(r,e,9,o)}function N8(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Z} indefinite length items not allowed`);return _s(r,e,1,1/0)}function Su(r,e){wt(r,b.map.majorEncoded,e.value)}Su.compareTokens=_r.compareTokens;Su.encodedSize=function(e){return wt.encodedSize(e.value)};function L8(r,e,t,n){return new B(b.tag,t,1)}function O8(r,e,t,n){return new B(b.tag,mr(r,e+1,n),2)}function M8(r,e,t,n){return new B(b.tag,gr(r,e+1,n),3)}function B8(r,e,t,n){return new B(b.tag,yr(r,e+1,n),5)}function U8(r,e,t,n){return new B(b.tag,wr(r,e+1,n),9)}function Au(r,e){wt(r,b.tag.majorEncoded,e.value)}Au.compareTokens=_r.compareTokens;Au.encodedSize=function(e){return wt.encodedSize(e.value)};var mI=20,gI=21,yI=22,wI=23;function F8(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${Z} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new B(b.null,null,1):new B(b.undefined,void 0,1)}function V8(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Z} indefinite length items not allowed`);return new B(b.break,void 0,1)}function cp(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${Z} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${Z} Infinity values are not supported`)}return new B(b.float,r,e)}function $8(r,e,t,n){return cp(lp(r,e+1),3,n)}function K8(r,e,t,n){return cp(up(r,e+1),5,n)}function H8(r,e,t,n){return cp(G8(r,e+1),9,n)}function Iu(r,e,t){let n=e.value;if(n===!1)r.push([b.float.majorEncoded|mI]);else if(n===!0)r.push([b.float.majorEncoded|gI]);else if(n===null)r.push([b.float.majorEncoded|yI]);else if(n===void 0)r.push([b.float.majorEncoded|wI]);else{let o,i=!1;(!t||t.float64!==!0)&&(z8(n),o=lp(Zr,1),n===o||Number.isNaN(n)?(Zr[0]=249,r.push(Zr.slice(0,3)),i=!0):(W8(n),o=up(Zr,1),n===o&&(Zr[0]=250,r.push(Zr.slice(0,5)),i=!0))),i||(bI(n),o=G8(Zr,1),Zr[0]=251,r.push(Zr.slice(0,9)))}}Iu.encodedSize=function(e,t){let n=e.value;if(n===!1||n===!0||n===null||n===void 0)return 1;if(!t||t.float64!==!0){z8(n);let o=lp(Zr,1);if(n===o||Number.isNaN(n))return 3;if(W8(n),o=up(Zr,1),n===o)return 5}return 9};var q8=new ArrayBuffer(9),Cr=new DataView(q8,1),Zr=new Uint8Array(q8,0);function z8(r){if(r===1/0)Cr.setUint16(0,31744,!1);else if(r===-1/0)Cr.setUint16(0,64512,!1);else if(Number.isNaN(r))Cr.setUint16(0,32256,!1);else{Cr.setFloat32(0,r);let e=Cr.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)Cr.setUint16(0,31744,!1);else if(t===0)Cr.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?Cr.setUint16(0,0):o<-14?Cr.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):Cr.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function lp(r,e){if(r.length-e<2)throw new Error(`${Z} not enough data for float16`);let t=(r[e]<<8)+r[e+1];if(t===31744)return 1/0;if(t===64512)return-1/0;if(t===32256)return NaN;let n=t>>10&31,o=t&1023,i;return n===0?i=o*2**-24:n!==31?i=(o+1024)*2**(n-25):i=o===0?1/0:NaN,t&32768?-i:i}function W8(r){Cr.setFloat32(0,r,!1)}function up(r,e){if(r.length-e<4)throw new Error(`${Z} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function bI(r){Cr.setFloat64(0,r,!1)}function G8(r,e){if(r.length-e<8)throw new Error(`${Z} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}Iu.compareTokens=_r.compareTokens;function Se(r,e,t){throw new Error(`${Z} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function Tu(r){return()=>{throw new Error(`${Z} ${r}`)}}var V=[];for(let r=0;r<=23;r++)V[r]=Se;V[24]=r8;V[25]=n8;V[26]=o8;V[27]=i8;V[28]=Se;V[29]=Se;V[30]=Se;V[31]=Se;for(let r=32;r<=55;r++)V[r]=Se;V[56]=s8;V[57]=a8;V[58]=c8;V[59]=u8;V[60]=Se;V[61]=Se;V[62]=Se;V[63]=Se;for(let r=64;r<=87;r++)V[r]=d8;V[88]=f8;V[89]=h8;V[90]=p8;V[91]=m8;V[92]=Se;V[93]=Se;V[94]=Se;V[95]=Tu("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)V[r]=g8;V[120]=y8;V[121]=w8;V[122]=b8;V[123]=x8;V[124]=Se;V[125]=Se;V[126]=Se;V[127]=Tu("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)V[r]=E8;V[152]=S8;V[153]=A8;V[154]=I8;V[155]=T8;V[156]=Se;V[157]=Se;V[158]=Se;V[159]=_8;for(let r=160;r<=183;r++)V[r]=C8;V[184]=k8;V[185]=P8;V[186]=R8;V[187]=D8;V[188]=Se;V[189]=Se;V[190]=Se;V[191]=N8;for(let r=192;r<=215;r++)V[r]=L8;V[216]=O8;V[217]=M8;V[218]=B8;V[219]=U8;V[220]=Se;V[221]=Se;V[222]=Se;V[223]=Se;for(let r=224;r<=243;r++)V[r]=Tu("simple values are not supported");V[244]=Se;V[245]=Se;V[246]=Se;V[247]=F8;V[248]=Tu("simple values are not supported");V[249]=$8;V[250]=K8;V[251]=H8;V[252]=Se;V[253]=Se;V[254]=Se;V[255]=V8;var jr=[];for(let r=0;r<24;r++)jr[r]=new B(b.uint,r,1);for(let r=-1;r>=-24;r--)jr[31-r]=new B(b.negint,r,1);jr[64]=new B(b.bytes,new Uint8Array(0),1);jr[96]=new B(b.string,"",1);jr[128]=new B(b.array,0,1);jr[160]=new B(b.map,0,1);jr[244]=new B(b.false,!1,1);jr[245]=new B(b.true,!0,1);jr[246]=new B(b.null,null,1);function Q8(r){switch(r.type){case b.false:return Sn([244]);case b.true:return Sn([245]);case b.null:return Sn([246]);case b.bytes:return r.value.length?void 0:Sn([64]);case b.string:return r.value===""?Sn([96]):void 0;case b.array:return r.value===0?Sn([128]):void 0;case b.map:return r.value===0?Sn([160]):void 0;case b.uint:return r.value<24?Sn([Number(r.value)]):void 0;case b.negint:if(r.value>=-24)return Sn([31-Number(r.value)])}}var vI={float64:!1,mapSorter:AI,quickEncodeToken:Q8};function EI(){let r=[];return r[b.uint.major]=_r,r[b.negint.major]=xu,r[b.bytes.major]=Is,r[b.string.major]=v8,r[b.array.major]=Eu,r[b.map.major]=Su,r[b.tag.major]=Au,r[b.float.major]=Iu,r}var Y8=EI(),dp=new rc,Cu=class r{constructor(e,t){this.obj=e,this.parent=t}includes(e){let t=this;do if(t.obj===e)return!0;while(t=t.parent);return!1}static createCheck(e,t){if(e&&e.includes(t))throw new Error(`${$n} object contains circular references`);return new r(t,e)}},_o={null:new B(b.null,null),undefined:new B(b.undefined,void 0),true:new B(b.true,!0),false:new B(b.false,!1),emptyArray:new B(b.array,0),emptyMap:new B(b.map,0)},Co={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new B(b.float,r):r>=0?new B(b.uint,r):new B(b.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new B(b.uint,r):new B(b.negint,r)},Uint8Array(r,e,t,n){return new B(b.bytes,r)},string(r,e,t,n){return new B(b.string,r)},boolean(r,e,t,n){return r?_o.true:_o.false},null(r,e,t,n){return _o.null},undefined(r,e,t,n){return _o.undefined},ArrayBuffer(r,e,t,n){return new B(b.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new B(b.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[_o.emptyArray,new B(b.break)]:_o.emptyArray;n=Cu.createCheck(n,r);let o=[],i=0;for(let s of r)o[i++]=_u(s,t,n);return t.addBreakTokens?[new B(b.array,r.length),o,new B(b.break)]:[new B(b.array,r.length),o]},Object(r,e,t,n){let o=e!=="Object",i=o?r.keys():Object.keys(r),s=o?r.size:i.length;if(!s)return t.addBreakTokens===!0?[_o.emptyMap,new B(b.break)]:_o.emptyMap;n=Cu.createCheck(n,r);let a=[],c=0;for(let l of i)a[c++]=[_u(l,t,n),_u(o?r.get(l):r[l],t,n)];return SI(a,t),t.addBreakTokens?[new B(b.map,s),a,new B(b.break)]:[new B(b.map,s),a]}};Co.Map=Co.Object;Co.Buffer=Co.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))Co[`${r}Array`]=Co.DataView;function _u(r,e={},t){let n=Q6(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||Co[n];if(typeof o=="function"){let s=o(r,n,e,t);if(s!=null)return s}let i=Co[n];if(!i)throw new Error(`${$n} unsupported type: ${n}`);return i(r,n,e,t)}function SI(r,e){e.mapSorter&&r.sort(e.mapSorter)}function AI(r,e){let t=Array.isArray(r[0])?r[0][0]:r[0],n=Array.isArray(e[0])?e[0][0]:e[0];if(t.type!==n.type)return t.type.compare(n.type);let o=t.type.major,i=Y8[o].compareTokens(t,n);return i===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),i}function X8(r,e,t,n){if(Array.isArray(e))for(let o of e)X8(r,o,t,n);else t[e.type.major](r,e,n)}function fp(r,e,t){let n=_u(r,t);if(!Array.isArray(n)&&t.quickEncodeToken){let o=t.quickEncodeToken(n);if(o)return o;let i=e[n.type.major];if(i.encodedSize){let s=i.encodedSize(n,t),a=new rc(s);if(i(a,n,t),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${n} was wrong`);return tc(a.chunks[0])}}return dp.reset(),X8(dp,n,e,t),dp.toBytes(!0)}function ko(r,e){return e=Object.assign({},vI,e),fp(r,Y8,e)}var II={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},ku=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t}pos(){return this._pos}done(){return this._pos>=this.data.length}next(){let e=this.data[this._pos],t=jr[e];if(t===void 0){let n=V[e];if(!n)throw new Error(`${Z} no decoder for major type ${e>>>5} (byte 0x${e.toString(16).padStart(2,"0")})`);let o=e&31;t=n(this.data,this._pos,o,this.options)}return this._pos+=t.encodedLength,t}},sc=Symbol.for("DONE"),Pu=Symbol.for("BREAK");function TI(r,e,t){let n=[];for(let o=0;o<r.value;o++){let i=Cs(e,t);if(i===Pu){if(r.value===1/0)break;throw new Error(`${Z} got unexpected break to lengthed array`)}if(i===sc)throw new Error(`${Z} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=i}return n}function _I(r,e,t){let n=t.useMaps===!0,o=n?void 0:{},i=n?new Map:void 0;for(let s=0;s<r.value;s++){let a=Cs(e,t);if(a===Pu){if(r.value===1/0)break;throw new Error(`${Z} got unexpected break to lengthed map`)}if(a===sc)throw new Error(`${Z} found map but not enough entries (got ${s} [no key], expected ${r.value})`);if(n!==!0&&typeof a!="string")throw new Error(`${Z} non-string keys not supported (got ${typeof a})`);if(t.rejectDuplicateMapKeys===!0&&(n&&i.has(a)||!n&&a in o))throw new Error(`${Z} found repeat map key "${a}"`);let c=Cs(e,t);if(c===sc)throw new Error(`${Z} found map but not enough entries (got ${s} [no value], expected ${r.value})`);n?i.set(a,c):o[a]=c}return n?i:o}function Cs(r,e){if(r.done())return sc;let t=r.next();if(t.type===b.break)return Pu;if(t.type.terminal)return t.value;if(t.type===b.array)return TI(t,r,e);if(t.type===b.map)return _I(t,r,e);if(t.type===b.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=Cs(r,e);return e.tags[t.value](n)}throw new Error(`${Z} tag not supported (${t.value})`)}throw new Error("unsupported")}function hp(r,e){if(!(r instanceof Uint8Array))throw new Error(`${Z} data to decode must be a Uint8Array`);e=Object.assign({},II,e);let t=e.tokenizer||new ku(r,e),n=Cs(t,e);if(n===sc)throw new Error(`${Z} did not find any content to decode`);if(n===Pu)throw new Error(`${Z} got unexpected break`);return[n,r.subarray(t.pos())]}function br(r,e){let[t,n]=hp(r,e);if(n.length>0)throw new Error(`${Z} too many terminals, data makes no sense`);return t}var Hn="/",Z8=new TextEncoder().encode(Hn),Ru=Z8[0],Le=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=L(e);else if(e instanceof Uint8Array)this._buf=e;else throw new Error("Invalid key, should be String of Uint8Array");if(t==null&&(t=!0),t&&this.clean(),this._buf.byteLength===0||this._buf[0]!==Ru)throw new Error("Invalid key")}toString(e="utf8"){return O(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Hn))}static random(){return new r(Math.random().toString().substring(2))}static asKey(e){return e instanceof Uint8Array||typeof e=="string"?new r(e):typeof e.uint8Array=="function"?new r(e.uint8Array()):null}clean(){if((this._buf==null||this._buf.byteLength===0)&&(this._buf=Z8),this._buf[0]!==Ru){let e=new Uint8Array(this._buf.byteLength+1);e.fill(Ru,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===Ru;)this._buf=this._buf.subarray(0,-1)}less(e){let t=this.list(),n=e.list();for(let o=0;o<t.length;o++){if(n.length<o+1)return!1;let i=t[o],s=n[o];if(i<s)return!0;if(i>s)return!1}return t.length<n.length}reverse(){return r.withNamespaces(this.list().slice().reverse())}namespaces(){return this.list()}baseNamespace(){let e=this.namespaces();return e[e.length-1]}list(){return this.toString().split(Hn).slice(1)}type(){return CI(this.baseNamespace())}name(){return kI(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Hn)||(e+=Hn),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Hn):new r(e.slice(0,-1).join(Hn))}child(e){return this.toString()===Hn?e:e.toString()===Hn?this:new r(this.toString()+e.toString(),!1)}isAncestorOf(e){return e.toString()===this.toString()?!1:e.toString().startsWith(this.toString())}isDecendantOf(e){return e.toString()===this.toString()?!1:this.toString().startsWith(e.toString())}isTopLevel(){return this.list().length===1}concat(...e){return r.withNamespaces([...this.namespaces(),...PI(e.map(t=>t.namespaces()))])}};function CI(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function kI(r){let e=r.split(":");return e[e.length-1]}function PI(r){return[].concat(...r)}function Du({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*RI(r,e){if(e!=null&&typeof e=="object")if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t],i=Q.asCID(n);i!=null?yield[o.join("/"),i]:typeof n=="object"&&(yield*mp(n,o))}else{let t=Q.asCID(e);t!=null?yield[r.join("/"),t]:yield*mp(e,r)}}function*mp(r,e){if(r==null||r instanceof Uint8Array)return;let t=Q.asCID(r);t!=null&&(yield[e.join("/"),t]);for(let[n,o]of Object.entries(r)){let i=[...e,n];yield*RI(i,o)}}function*DI(r,e){if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t];yield o.join("/"),typeof n=="object"&&Q.asCID(n)==null&&(yield*gp(n,o))}else yield*gp(e,r)}function*gp(r,e){if(!(r==null||typeof r!="object"))for(let[t,n]of Object.entries(r)){let o=[...e,t];yield o.join("/"),n!=null&&!(n instanceof Uint8Array)&&typeof n=="object"&&Q.asCID(n)==null&&(yield*DI(o,n))}}function NI(r,e){let t=r;for(let[n,o]of e.entries()){if(t=t[o],t==null)throw new Error(`Object has no property at ${e.slice(0,n+1).map(s=>`[${JSON.stringify(s)}]`).join("")}`);let i=Q.asCID(t);if(i!=null)return{value:i,remaining:e.slice(n+1).join("/")}}return{value:t}}var yp=class{cid;bytes;value;asBlock;constructor({cid:e,bytes:t,value:n}){if(e==null||t==null||typeof n>"u")throw new Error("Missing required argument");this.cid=e,this.bytes=t,this.value=n,this.asBlock=this,Object.defineProperties(this,{cid:Du(),bytes:Du(),value:Du(),asBlock:Du()})}links(){return mp(this.value,[])}tree(){return gp(this.value,[])}get(e="/"){return NI(this.value,e.split("/").filter(Boolean))}};function j8({bytes:r,cid:e,value:t,codec:n}){let o=t!==void 0?t:n?.decode(r);if(o===void 0)throw new Error('Missing required argument, must either provide "value" or "codec"');return new yp({cid:e,bytes:r,value:o})}var t5="/pin/",J8="/pinned-block/",wp=wn,e5=1;function Nu(r){return r.version===0&&(r=r.toV1()),new Le(`${t5}${r.toString(wp)}`)}var Lu=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=Nu(e);if(await this.datastore.has(n))throw new Error("Already pinned");let o=Math.round(t.depth??1/0);if(o<0)throw new Error("Depth must be greater than or equal to 0");let i=new $t({concurrency:e5});for await(let a of this.#e(e,i,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>J(l,e.bytes))!=null?!1:(c.pinCount++,c.pinnedBy.push(e.bytes),!0),t),yield a;let s={depth:o,metadata:t.metadata??{}};await this.datastore.put(n,ko(s),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=await this.getCodec(e.code),i=await this.blockstore.get(e,n),s=j8({bytes:i,cid:e,codec:o});yield e;for await(let[,a]of s.links())yield*await t.add(async()=>this.#e(a,t,{...n,depth:n.depth-1}))}async#t(e,t,n){let o=new Le(`${J8}${wp.encode(e.multihash.bytes)}`),i={pinCount:0,pinnedBy:[]};try{i=br(await this.datastore.get(o,n))}catch(a){if(a.name!=="NotFoundError")throw a}if(t(i)){if(i.pinCount===0&&await this.datastore.has(o)){await this.datastore.delete(o);return}await this.datastore.put(o,ko(i),n),n.onProgress?.(new W("helia:pin:add",e))}}async*rm(e,t={}){let n=Nu(e),o=await this.datastore.get(n,t),i=br(o);await this.datastore.delete(n,t);let s=new $t({concurrency:e5});for await(let a of this.#e(e,s,{...t,depth:i.depth}))await this.#t(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>J(l,e.bytes)),!0),{...t,depth:i.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:t5+(e.cid!=null?`${e.cid.toString(wn)}`:"")},e)){let o=Q.parse(t.toString().substring(5),wn),i=br(n);yield{cid:o,...i}}}async isPinned(e,t={}){let n=new Le(`${J8}${wp.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=Nu(e),o=await this.datastore.get(n,t);return br(o)}async setMetadata(e,t,n){let o=Nu(e),i=await this.datastore.get(o,n),s=br(i);s.metadata=t??{},await this.datastore.put(o,ko(s),n)}};var bp=1,xp=5;var ac=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},Po=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}},cc=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},lc=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}};var LI=5,Ou=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??LI,this.findProviders=e.metrics?.traceFunction("helia.routing.findProviders",this.findProviders.bind(this),{optionsIndex:1})??this.findProviders,this.provide=e.metrics?.traceFunction("helia.routing.provide",this.provide.bind(this),{optionsIndex:1})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("helia.routing.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1})??this.cancelReprovide,this.put=e.metrics?.traceFunction("helia.routing.put",this.put.bind(this),{optionsIndex:2})??this.put,this.get=e.metrics?.traceFunction("helia.routing.get",this.get.bind(this),{optionsIndex:1})??this.get,this.findPeer=e.metrics?.traceFunction("helia.routing.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("helia.routing.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async start(){await mt(...this.routers)}async stop(){await Ct(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new Po("No content routers available");let n=new gt({concurrency:this.providerLookupConcurrency});n.addEventListener("error",()=>{});for await(let o of Ht(n.toGenerator(),...bi(this.routers,"findProviders").map(i=>i.findProviders(e,t))))if(o!=null){if(o.multiaddrs.length===0){if(n.find(o.id)!=null)continue;n.add(async()=>{try{let i=await this.findPeer(o.id,t);return i.multiaddrs.length===0?null:i}catch(i){return this.log.error("could not load multiaddrs for peer %p",o.id,i),null}},{peerId:o.id,signal:t.signal}).catch(i=>{this.log.error("could not load multiaddrs for peer %p",o.id,i)})}yield o}}async provide(e,t={}){if(this.routers.length===0)throw new Po("No content routers available");await Promise.all(bi(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){await Promise.all(bi(this.routers,"cancelReprovide").map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){await Promise.all(bi(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){return Promise.any(bi(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new Po("No peer routers available");let n=this,o=Ht(...bi(this.routers,"findPeer").map(i=>async function*(){try{yield await i.findPeer(e,t)}catch(s){n.log.error(s)}}()));for await(let i of o)if(i!=null)return i;throw new Ce("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Po("No peer routers available");for await(let n of Ht(...bi(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function bi(r,e){return r.filter(t=>t[e]!=null)}var Ro={},ks=r=>{r.addEventListener("message",e=>{ks.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{ks.dispatchEvent("message",r,e)})};ks.addEventListener=(r,e)=>{Ro[r]==null&&(Ro[r]=[]),Ro[r].push(e)};ks.removeEventListener=(r,e)=>{Ro[r]!=null&&(Ro[r]=Ro[r].filter(t=>t===e))};ks.dispatchEvent=function(r,e,t){Ro[r]!=null&&Ro[r].forEach(n=>n(e,t))};var vp=ks;var Ep="lock:worker:request-read",Sp="lock:worker:release-read",Ap="lock:master:grant-read",Ip="lock:worker:request-write",Tp="lock:worker:release-write",_p="lock:master:grant-write";var r5=(r=21)=>Math.random().toString().substring(2);var n5=(r,e,t,n,o)=>(i,s)=>{if(s.data.type!==t)return;let a={type:s.data.type,name:s.data.name,identifier:s.data.identifier};r.dispatchEvent(new MessageEvent(e,{data:{name:a.name,handler:async()=>{i.postMessage({type:o,name:a.name,identifier:a.identifier}),await new Promise(c=>{let l=u=>{if(u?.data==null)return;let d={type:u.data.type,name:u.data.name,identifier:u.data.identifier};d.type===n&&d.identifier===a.identifier&&(i.removeEventListener("message",l),c())};i.addEventListener("message",l)})}}}))},o5=(r,e,t,n)=>async()=>{let o=r5();return globalThis.postMessage({type:e,identifier:o,name:r}),new Promise(i=>{let s=a=>{if(a?.data==null)return;let c={type:a.data.type,identifier:a.data.identifier};c.type===t&&c.identifier===o&&(globalThis.removeEventListener("message",s),i(()=>{globalThis.postMessage({type:n,identifier:o,name:r})}))};globalThis.addEventListener("message",s)})},OI={singleProcess:!1},i5=r=>{if(r=Object.assign({},OI,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return vp.addEventListener("message",n5(t,"requestReadLock",Ep,Sp,Ap)),vp.addEventListener("message",n5(t,"requestWriteLock",Ip,Tp,_p)),t}return{isWorker:!0,readLock:t=>o5(t,Ep,Ap,Sp),writeLock:t=>o5(t,Ip,_p,Tp)}};var xi={},Do;async function Cp(r,e){let t,n=new Promise(o=>{t=o});return r.add(async()=>Xr((async()=>{await new Promise(o=>{t(()=>{o()})})})(),{milliseconds:e.timeout})),n}var MI=(r,e)=>{if(Do.isWorker===!0)return{readLock:Do.readLock(r,e),writeLock:Do.writeLock(r,e)};let t=new En({concurrency:1}),n;return{async readLock(){if(n!=null)return Cp(n,e);n=new En({concurrency:e.concurrency,autoStart:!1});let o=n,i=Cp(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),i},async writeLock(){return n=null,Cp(t,e)}}},BI={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function vi(r){let e=Object.assign({},BI,r);return Do==null&&(Do=i5(e),Do.isWorker!==!0&&(Do.addEventListener("requestReadLock",t=>{xi[t.data.name]!=null&&xi[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),Do.addEventListener("requestWriteLock",async t=>{xi[t.data.name]!=null&&xi[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),xi[e.name]==null&&(xi[e.name]=MI(e.name,e)),xi[e.name]}var Mu=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=vi({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await mt(this.child),this.started=!0}async stop(){await Ct(this.child),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){n?.signal?.throwIfAborted();let o=await this.lock.readLock();try{return await this.child.put(e,t,n)}finally{o()}}async*putMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.putMany(e,t)}finally{n()}}async get(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.get(e,t)}finally{n()}}async*getMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.getMany(e,t)}finally{n()}}async delete(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{if(await this.pins.isPinned(e))throw new Error("CID was pinned");await this.child.delete(e,t)}finally{n()}}async*deleteMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{let o=this;yield*this.child.deleteMany(async function*(){for await(let i of e){if(await o.pins.isPinned(i))throw new Error("CID was pinned");yield i}}(),t)}finally{n()}}async has(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.has(e,t)}finally{n()}}async*getAll(e={}){e?.signal?.throwIfAborted();let t=await this.lock.readLock();try{yield*this.child.getAll(e)}finally{t()}}createSession(e,t){return t?.signal?.throwIfAborted(),this.child.createSession(e,t)}};var kp=new Le("/version"),s5=1;async function a5(r){if(!await r.has(kp)){await r.put(kp,L(`${s5}`));return}let e=await r.get(kp),t=O(e);if(parseInt(t,10)!==s5)throw new Error("Unknown datastore version, a datastore migration may be required")}var Dp={};Ze(Dp,{code:()=>Rp,decode:()=>WI,decodeOptions:()=>HI,encode:()=>zI,encodeOptions:()=>$I,name:()=>qI,toByteView:()=>l5});var c5=42;function l5(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function UI(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=Q.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new B(b.tag,c5),new B(b.bytes,t)]}function FI(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function VI(r){if(Number.isNaN(r))throw new Error("`NaN` is not supported by the IPLD Data Model and cannot be encoded");if(r===1/0||r===-1/0)throw new Error("`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded");return null}var Pp={float64:!0,typeEncoders:{Object:UI,undefined:FI,number:VI}},$I={...Pp,typeEncoders:{...Pp.typeEncoders}};function KI(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return Q.decode(r.subarray(1))}var Bu={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Bu.tags[c5]=KI;var HI={...Bu,tags:Bu.tags.slice()},qI="dag-cbor",Rp=113,zI=r=>ko(r,Pp),WI=r=>br(l5(r),Bu);var Fp={};Ze(Fp,{code:()=>Up,decode:()=>d5,encode:()=>u5,format:()=>nT,name:()=>rT,parse:()=>iT,stringify:()=>nT});var Np=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(t.type===b.array&&(t.elements++,t.elements!==1&&e.push([44])),t.type===b.map&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[b.uint.major](e,t){this.prefix(e);let n=String(t.value),o=[];for(let i=0;i<n.length;i++)o[i]=n.charCodeAt(i);e.push(o)}[b.negint.major](e,t){this[b.uint.major](e,t)}[b.bytes.major](e,t){throw new Error(`${$n} unsupported type: Uint8Array`)}[b.string.major](e,t){this.prefix(e);let n=bu(JSON.stringify(t.value));e.push(n.length>32?tc(n):n)}[b.array.major](e,t){this.prefix(e),this.inRecursive.push({type:b.array,elements:0}),e.push([91])}[b.map.major](e,t){this.prefix(e),this.inRecursive.push({type:b.map,elements:0}),e.push([123])}[b.tag.major](e,t){}[b.float.major](e,t){if(t.type.name==="break"){let s=this.inRecursive.pop();if(s){if(s.type===b.array)e.push([93]);else if(s.type===b.map)e.push([125]);else throw new Error("Unexpected recursive type; this should not happen!");return}throw new Error("Unexpected break; this should not happen!")}if(t.value===void 0)throw new Error(`${$n} unsupported type: undefined`);if(this.prefix(e),t.type.name==="true"){e.push([116,114,117,101]);return}else if(t.type.name==="false"){e.push([102,97,108,115,101]);return}else if(t.type.name==="null"){e.push([110,117,108,108]);return}let n=String(t.value),o=[],i=!1;for(let s=0;s<n.length;s++)o[s]=n.charCodeAt(s),!i&&(o[s]===46||o[s]===101||o[s]===69)&&(i=!0);i||(o.push(46),o.push(48)),e.push(o)}};function GI(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${$n} complex map keys are not supported`);let t=r[0],n=e[0];if(t.type!==b.string||n.type!==b.string)throw new Error(`${$n} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${$n} unexpected duplicate map keys, this is not supported`)}var QI={addBreakTokens:!0,mapSorter:GI};function Lp(r,e){return e=Object.assign({},QI,e),fp(r,new Np,e)}var Ps=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t,this.modeStack=["value"],this.lastToken=""}pos(){return this._pos}done(){return this._pos>=this.data.length}ch(){return this.data[this._pos]}currentMode(){return this.modeStack[this.modeStack.length-1]}skipWhitespace(){let e=this.ch();for(;e===32||e===9||e===13||e===10;)e=this.data[++this._pos]}expect(e){if(this.data.length-this._pos<e.length)throw new Error(`${Z} unexpected end of input at position ${this._pos}`);for(let t=0;t<e.length;t++)if(this.data[this._pos++]!==e[t])throw new Error(`${Z} unexpected token at position ${this._pos}, expected to find '${String.fromCharCode(...e)}'`)}parseNumber(){let e=this._pos,t=!1,n=!1,o=a=>{for(;!this.done();){let c=this.ch();if(a.includes(c))this._pos++;else break}};if(this.ch()===45&&(t=!0,this._pos++),this.ch()===48)if(this._pos++,this.ch()===46)this._pos++,n=!0;else return new B(b.uint,0,this._pos-e);if(o([48,49,50,51,52,53,54,55,56,57]),t&&this._pos===e+1)throw new Error(`${Z} unexpected token at position ${this._pos}`);if(!this.done()&&this.ch()===46){if(n)throw new Error(`${Z} unexpected token at position ${this._pos}`);n=!0,this._pos++,o([48,49,50,51,52,53,54,55,56,57])}!this.done()&&(this.ch()===101||this.ch()===69)&&(n=!0,this._pos++,!this.done()&&(this.ch()===43||this.ch()===45)&&this._pos++,o([48,49,50,51,52,53,54,55,56,57]));let i=String.fromCharCode.apply(null,this.data.subarray(e,this._pos)),s=parseFloat(i);return n?new B(b.float,s,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(s)?new B(s>=0?b.uint:b.negint,s,this._pos-e):new B(s>=0?b.uint:b.negint,BigInt(i),this._pos-e)}parseString(){if(this.ch()!==34)throw new Error(`${Z} unexpected character at position ${this._pos}; this shouldn't happen`);this._pos++;for(let i=this._pos,s=0;i<this.data.length&&s<65536;i++,s++){let a=this.data[i];if(a===92||a<32||a>=128)break;if(a===34){let c=String.fromCharCode.apply(null,this.data.subarray(this._pos,i));return this._pos=i+1,new B(b.string,c,s)}}let e=this._pos,t=[],n=()=>{if(this._pos+4>=this.data.length)throw new Error(`${Z} unexpected end of unicode escape sequence at position ${this._pos}`);let i=0;for(let s=0;s<4;s++){let a=this.ch();if(a>=48&&a<=57)a-=48;else if(a>=97&&a<=102)a=a-97+10;else if(a>=65&&a<=70)a=a-65+10;else throw new Error(`${Z} unexpected unicode escape character at position ${this._pos}`);i=i*16+a,this._pos++}return i},o=()=>{let i=this.ch(),s=null,a=i>239?4:i>223?3:i>191?2:1;if(this._pos+a>this.data.length)throw new Error(`${Z} unexpected unicode sequence at position ${this._pos}`);let c,l,u,d;switch(a){case 1:i<128&&(s=i);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(d=(i&31)<<6|c&63,d>127&&(s=d));break;case 3:c=this.data[this._pos+1],l=this.data[this._pos+2],(c&192)===128&&(l&192)===128&&(d=(i&15)<<12|(c&63)<<6|l&63,d>2047&&(d<55296||d>57343)&&(s=d));break;case 4:c=this.data[this._pos+1],l=this.data[this._pos+2],u=this.data[this._pos+3],(c&192)===128&&(l&192)===128&&(u&192)===128&&(d=(i&15)<<18|(c&63)<<12|(l&63)<<6|u&63,d>65535&&d<1114112&&(s=d))}s===null?(s=65533,a=1):s>65535&&(s-=65536,t.push(s>>>10&1023|55296),s=56320|s&1023),t.push(s),this._pos+=a};for(;!this.done();){let i=this.ch(),s;switch(i){case 92:if(this._pos++,this.done())throw new Error(`${Z} unexpected string termination at position ${this._pos}`);switch(s=this.ch(),this._pos++,s){case 34:case 39:case 92:case 47:t.push(s);break;case 98:t.push(8);break;case 116:t.push(9);break;case 110:t.push(10);break;case 102:t.push(12);break;case 114:t.push(13);break;case 117:t.push(n());break;default:throw new Error(`${Z} unexpected string escape character at position ${this._pos}`)}break;case 34:return this._pos++,new B(b.string,sp(t),this._pos-e);default:if(i<32)throw new Error(`${Z} invalid control character at position ${this._pos}`);i<128?(t.push(i),this._pos++):o()}}throw new Error(`${Z} unexpected end of string at position ${this._pos}`)}parseValue(){switch(this.ch()){case 123:return this.modeStack.push("obj-start"),this._pos++,new B(b.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new B(b.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new B(b.null,null,4);case 102:return this.expect([102,97,108,115,101]),new B(b.false,!1,5);case 116:return this.expect([116,114,117,101]),new B(b.true,!0,4);case 45:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.parseNumber();default:throw new Error(`${Z} unexpected character at position ${this._pos}`)}}next(){switch(this.skipWhitespace(),this.currentMode()){case"value":return this.modeStack.pop(),this.parseValue();case"array-value":{if(this.modeStack.pop(),this.ch()===93)return this._pos++,this.skipWhitespace(),new B(b.break,void 0,1);if(this.ch()!==44)throw new Error(`${Z} unexpected character at position ${this._pos}, was expecting array delimiter but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue()}case"array-start":return this.modeStack.pop(),this.ch()===93?(this._pos++,this.skipWhitespace(),new B(b.break,void 0,1)):(this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue());case"obj-key":if(this.ch()===125)return this.modeStack.pop(),this._pos++,this.skipWhitespace(),new B(b.break,void 0,1);if(this.ch()!==44)throw new Error(`${Z} unexpected character at position ${this._pos}, was expecting object delimiter but found '${String.fromCharCode(this.ch())}'`);this._pos++,this.skipWhitespace();case"obj-start":{if(this.modeStack.pop(),this.ch()===125)return this._pos++,this.skipWhitespace(),new B(b.break,void 0,1);let e=this.parseString();if(this.skipWhitespace(),this.ch()!==58)throw new Error(`${Z} unexpected character at position ${this._pos}, was expecting key/value delimiter ':' but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("obj-value"),e}case"obj-value":return this.modeStack.pop(),this.modeStack.push("obj-key"),this.skipWhitespace(),this.parseValue();default:throw new Error(`${Z} unexpected parse state at position ${this._pos}; this shouldn't happen`)}}};function Op(r,e){return e=Object.assign({tokenizer:new Ps(r,e)},e),br(r,e)}function XI(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function ZI(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=Q.asCID(r);if(!e)return null;let t=e.toString();return[new B(b.map,1/0,1),new B(b.string,"/",1),new B(b.string,t,t.length),new B(b.break,void 0,1)]}function Uu(r){let e=ot.encode(r).slice(1);return[new B(b.map,1/0,1),new B(b.string,"/",1),new B(b.map,1/0,1),new B(b.string,"bytes",5),new B(b.string,e,e.length),new B(b.break,void 0,1),new B(b.break,void 0,1)]}function Jr(r){return Uu(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function jI(r){return Uu(new Uint8Array(r))}function JI(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function eT(r){if(Number.isNaN(r))throw new Error("`NaN` is not supported by the IPLD Data Model and cannot be encoded");if(r===1/0||r===-1/0)throw new Error("`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded");return null}var tT={typeEncoders:{Object:ZI,Buffer:Uu,Uint8Array:Uu,Int8Array:Jr,Uint16Array:Jr,Int16Array:Jr,Uint32Array:Jr,Int32Array:Jr,Float32Array:Jr,Float64Array:Jr,Uint8ClampedArray:Jr,BigInt64Array:Jr,BigUint64Array:Jr,DataView:Jr,ArrayBuffer:jI,undefined:JI,number:eT}},Mp=class extends Ps{constructor(e,t){super(e,t),this.tokenBuffer=[]}done(){return this.tokenBuffer.length===0&&super.done()}_next(){return this.tokenBuffer.length>0?this.tokenBuffer.pop():super.next()}next(){let e=this._next();if(e.type===b.map){let t=this._next();if(t.type===b.string&&t.value==="/"){let n=this._next();if(n.type===b.string){if(this._next().type!==b.break)throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new B(b.tag,42,0)}if(n.type===b.map){let o=this._next();if(o.type===b.string&&o.value==="bytes"){let i=this._next();if(i.type===b.string){for(let a=0;a<2;a++)if(this._next().type!==b.break)throw new Error("Invalid encoded Bytes form");let s=ot.decode(`m${i.value}`);return new B(b.bytes,s,i.value.length)}this.tokenBuffer.push(i)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},Bp={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Bp.tags[42]=Q.parse;var rT="dag-json",Up=297,u5=r=>Lp(r,tT),d5=r=>{let e=XI(r),t=Object.assign(Bp,{tokenizer:new Mp(e,Bp)});return Op(e,t)},nT=r=>oT.decode(u5(r));var oT=new TextDecoder,iT=r=>d5(sT.encode(r)),sT=new TextEncoder;var zp={};Ze(zp,{code:()=>qp,createLink:()=>v5,createNode:()=>x5,decode:()=>bT,encode:()=>wT,name:()=>yT,prepare:()=>Kp,validate:()=>Hp});var aT=new TextDecoder;function Vp(r,e){let t=0;for(let n=0;;n+=7){if(n>=64)throw new Error("protobuf: varint overflow");if(e>=r.length)throw new Error("protobuf: unexpected end of data");let o=r[e++];if(t+=n<28?(o&127)<<n:(o&127)*2**n,o<128)break}return[t,e]}function Fu(r,e){let t;[t,e]=Vp(r,e);let n=e+t;if(t<0||n<0)throw new Error("protobuf: invalid length");if(n>r.length)throw new Error("protobuf: unexpected end of data");return[r.subarray(e,n),n]}function f5(r,e){let t;return[t,e]=Vp(r,e),[t&7,t>>3,e]}function cT(r){let e={},t=r.length,n=0;for(;n<t;){let o,i;if([o,i,n]=f5(r,n),i===1){if(e.Hash)throw new Error("protobuf: (PBLink) duplicate Hash section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Hash`);if(e.Name!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Name before Hash");if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Hash");[e.Hash,n]=Fu(r,n)}else if(i===2){if(e.Name!==void 0)throw new Error("protobuf: (PBLink) duplicate Name section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Name`);if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Name");let s;[s,n]=Fu(r,n),e.Name=aT.decode(s)}else if(i===3){if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) duplicate Tsize section");if(o!==0)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Tsize`);[e.Tsize,n]=Vp(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${i}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function h5(r){let e=r.length,t=0,n,o=!1,i;for(;t<e;){let a,c;if([a,c,t]=f5(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(i)throw new Error("protobuf: (PBNode) duplicate Data section");[i,t]=Fu(r,t),n&&(o=!0)}else if(c===2){if(o)throw new Error("protobuf: (PBNode) duplicate Links section");n||(n=[]);let l;[l,t]=Fu(r,t),n.push(cT(l))}else throw new Error(`protobuf: (PBNode) invalid fieldNumber, expected 1 or 2, got ${c}`)}if(t>e)throw new Error("protobuf: (PBNode) unexpected end of data");let s={};return i&&(s.Data=i),s.Links=n||[],s}var m5=new TextEncoder,p5=2**32,lT=2**31;function uT(r,e){let t=e.length;if(typeof r.Tsize=="number"){if(r.Tsize<0)throw new Error("Tsize cannot be negative");if(!Number.isSafeInteger(r.Tsize))throw new Error("Tsize too large for encoding");t=uc(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=m5.encode(r.Name);t-=n.length,e.set(n,t),t=uc(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=uc(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function g5(r){let e=fT(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=uc(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let o=r.Links.length-1;o>=0;o--){let i=uT(r.Links[o],t.subarray(0,n));n-=i,n=uc(t,n,i)-1,t[n]=18}return t}function dT(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+Rs(t)}if(typeof r.Name=="string"){let t=m5.encode(r.Name).length;e+=1+t+Rs(t)}return typeof r.Tsize=="number"&&(e+=1+Rs(r.Tsize)),e}function fT(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+Rs(t)}if(r.Links)for(let t of r.Links){let n=dT(t);e+=1+n+Rs(n)}return e}function uc(r,e,t){e-=Rs(t);let n=e;for(;t>=lT;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function Rs(r){return r%2===0&&r++,Math.floor((hT(r)+6)/7)}function hT(r){let e=0;return r>=p5&&(r=Math.floor(r/p5),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+pT[r]}var pT=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8];var mT=["Data","Links"],gT=["Hash","Name","Tsize"],$p=new TextEncoder;function w5(r,e){if(r===e)return 0;let t=r.Name?$p.encode(r.Name):[],n=e.Name?$p.encode(e.Name):[],o=t.length,i=n.length;for(let s=0,a=Math.min(o,i);s<a;++s)if(t[s]!==n[s]){o=t[s],i=n[s];break}return o<i?-1:i<o?1:0}function y5(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function b5(r){if(typeof r.asCID=="object"){let t=Q.asCID(r);if(!t)throw new TypeError("Invalid DAG-PB form");return{Hash:t}}if(typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Hash){let t=Q.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=Q.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=Q.decode(r.Hash)))}catch(n){throw new TypeError(`Invalid DAG-PB form: ${n.message}`)}t&&(e.Hash=t)}if(!e.Hash)throw new TypeError("Invalid DAG-PB form");return typeof r.Name=="string"&&(e.Name=r.Name),typeof r.Tsize=="number"&&(e.Tsize=r.Tsize),e}function Kp(r){if((r instanceof Uint8Array||typeof r=="string")&&(r={Data:r}),typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Data!==void 0)if(typeof r.Data=="string")e.Data=$p.encode(r.Data);else if(r.Data instanceof Uint8Array)e.Data=r.Data;else throw new TypeError("Invalid DAG-PB form");if(r.Links!==void 0)if(Array.isArray(r.Links))e.Links=r.Links.map(b5),e.Links.sort(w5);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function Hp(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!y5(r,mT))throw new TypeError("Invalid DAG-PB form (extraneous properties)");if(r.Data!==void 0&&!(r.Data instanceof Uint8Array))throw new TypeError("Invalid DAG-PB form (Data must be bytes)");if(!Array.isArray(r.Links))throw new TypeError("Invalid DAG-PB form (Links must be a list)");for(let e=0;e<r.Links.length;e++){let t=r.Links[e];if(!t||typeof t!="object"||Array.isArray(t)||t instanceof Uint8Array||t["/"]&&t["/"]===t.bytes)throw new TypeError("Invalid DAG-PB form (bad link)");if(!y5(t,gT))throw new TypeError("Invalid DAG-PB form (extraneous properties on link)");if(t.Hash===void 0)throw new TypeError("Invalid DAG-PB form (link must have a Hash)");if(t.Hash==null||!t.Hash["/"]||t.Hash["/"]!==t.Hash.bytes)throw new TypeError("Invalid DAG-PB form (link Hash must be a CID)");if(t.Name!==void 0&&typeof t.Name!="string")throw new TypeError("Invalid DAG-PB form (link Name must be a string)");if(t.Tsize!==void 0){if(typeof t.Tsize!="number"||t.Tsize%1!==0)throw new TypeError("Invalid DAG-PB form (link Tsize must be an integer)");if(t.Tsize<0)throw new TypeError("Invalid DAG-PB form (link Tsize cannot be negative)")}if(e>0&&w5(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function x5(r,e=[]){return Kp({Data:r,Links:e})}function v5(r,e,t){return b5({Hash:t,Name:r,Tsize:e})}function E5(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var yT="dag-pb",qp=112;function wT(r){Hp(r);let e={};return r.Links&&(e.Links=r.Links.map(t=>{let n={};return t.Hash&&(n.Hash=t.Hash.bytes),t.Name!==void 0&&(n.Name=t.Name),t.Tsize!==void 0&&(n.Tsize=t.Tsize),n})),r.Data&&(e.Data=r.Data),g5(e)}function bT(r){let e=E5(r),t=h5(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let i={};try{i.Hash=Q.decode(o.Hash)}catch{}if(!i.Hash)throw new Error("Invalid Hash field found in link, expected CID");return o.Name!==void 0&&(i.Name=o.Name),o.Tsize!==void 0&&(i.Tsize=o.Tsize),i})),n}function Ds(r){return r?.then!=null}function S5(r=[],e){let t={[qp]:zp,[ri]:is,[Rp]:Dp,[Up]:Fp,[H0]:kl};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Ds(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new lc(`Could not load codec for ${n}`)}}function A5(r=[],e){let t={[Ye.code]:Ye,[Rl.code]:Rl,[Jt.code]:Jt};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Ds(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new cc(`No hasher configured for multihash code 0x${n.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`)}}var kr=class r extends Error{static name="NotFoundError";static code="ERR_NOT_FOUND";name=r.name;code=r.code;constructor(e="Not Found"){super(e)}};var qn=class{has(e,t){return Promise.reject(new Error(".has is not implemented"))}put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}async*putMany(e,t){for await(let{cid:n,block:o}of e)await this.put(n,o,t),yield n}get(e,t){return Promise.reject(new Error(".get is not implemented"))}async*getMany(e,t){for await(let n of e)yield{cid:n,block:await this.get(n,t)}}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*deleteMany(e,t){for await(let n of e)await this.delete(n,t),yield n}async*getAll(e){throw new Error(".getAll is not implemented")}};var Vu=0,$u=class extends qn{child;constructor(e){super(),this.child=e}put(e,t){return e.multihash.code===Vu||this.child==null?e:this.child.put(e,t)}get(e){if(e.multihash.code===Vu)return e.multihash.digest;if(this.child==null)throw new kr;return this.child.get(e)}has(e){return e.multihash.code===Vu?!0:this.child==null?!1:this.child.has(e)}delete(e){if(e.code!==Vu&&this.child!=null)return this.child.delete(e)}getAll(e){return this.child!=null?this.child.getAll(e):[]}};function xT(r){return r[Symbol.asyncIterator]!=null}function vT(r,e){let t=0;if(xT(r))return async function*(){for await(let c of r)await e(c,t++)&&(yield c)}();let n=ns(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();let s=e(o,t++);if(typeof s.then=="function")return async function*(){await s&&(yield o);for await(let c of n)await e(c,t++)&&(yield c)}();let a=e;return function*(){s===!0&&(yield o);for(let c of n)a(c,t++)&&(yield c)}()}var en=vT;function ET(r){return r[Symbol.asyncIterator]!=null}function I5(r){return r?.then!=null}function ST(r,e){let t=0;if(ET(r))return async function*(){for await(let c of r){let l=e(c,t++);I5(l)&&await l,yield c}}();let n=ns(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();if(typeof e(o,t++)?.then=="function")return async function*(){yield o;for await(let c of n){let l=e(c,t++);I5(l)&&await l,yield c}}();let a=e;return function*(){yield o;for(let c of n)a(c,t++),yield c}()}var Ei=ST;var Ku=class{child;getHasher;log;logger;components;constructor(e){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.components=e,this.child=new $u(e.blockstore),this.getHasher=e.getHasher}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new W("blocks:put:duplicate",e)),e):(n.onProgress?.(new W("blocks:put:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,t,n))),n.onProgress?.(new W("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=en(e,async({cid:i})=>{let s=await this.child.has(i,t);return s&&t.onProgress?.(new W("blocks:put-many:duplicate",i)),!s}),o=Ei(n,async({cid:i,block:s})=>{t.onProgress?.(new W("blocks:put-many:providers:notify",i)),await Promise.all(this.components.blockBrokers.map(async a=>a.announce?.(i,s,t)))});t.onProgress?.(new W("blocks:put-many:blockstore:put-many")),yield*this.child.putMany(o,t)}async get(e,t={}){if(t.offline!==!0&&!await this.child.has(e,t)){let n=await this.getHasher(e.multihash.code);t.onProgress?.(new W("blocks:get:providers:get",e));let o=await T5(e,this.components.blockBrokers,n,{...t,log:this.log});return t.onProgress?.(new W("blocks:get:blockstore:put",e)),await this.child.put(e,o,t),t.onProgress?.(new W("blocks:get:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async i=>i.announce?.(e,o,t))),o}return t.onProgress?.(new W("blocks:get:blockstore:get",e)),this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new W("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(Ei(e,async n=>{if(t.offline!==!0&&!await this.child.has(n,t)){let o=await this.getHasher(n.multihash.code);t.onProgress?.(new W("blocks:get-many:providers:get",n));let i=await T5(n,this.components.blockBrokers,o,{...t,log:this.log});t.onProgress?.(new W("blocks:get-many:blockstore:put",n)),await this.child.put(n,i,t),t.onProgress?.(new W("blocks:get-many:providers:notify",n)),await Promise.all(this.components.blockBrokers.map(async s=>s.announce?.(n,i,t)))}}))}async delete(e,t={}){t.onProgress?.(new W("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new W("blocks:delete-many:blockstore:delete-many")),yield*this.child.deleteMany(async function*(){for await(let n of e)yield n}(),t)}async has(e,t={}){return this.child.has(e,t)}async*getAll(e={}){e.onProgress?.(new W("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}},Hu=class extends Ku{started;constructor(e){super(e),this.started=!1}isStarted(){return this.started}async start(){await mt(this.child,...this.components.blockBrokers),this.started=!0}async stop(){await Ct(this.child,...this.components.blockBrokers),this.started=!1}unwrap(){return this.child}createSession(e,t){let n=this.components.blockBrokers.map(o=>o.createSession==null?o:o.createSession(t));return new Wp({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}},Wp=class extends Ku{closeController;constructor(e,t){super(e),this.closeController=new AbortController,this.closeController.signal,this.log=e.logger.forComponent(`helia:session-storage:${t.root}`)}close(){this.closeController.abort()}async put(e,t,n={}){let o=le([this.closeController.signal,n.signal]);try{return await super.put(e,t,{...n,signal:o})}finally{o.clear()}}async*putMany(e,t={}){let n=le([this.closeController.signal,t.signal]);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async get(e,t={}){let n=le([this.closeController.signal,t.signal]);try{return await super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=le([this.closeController.signal,t.signal]);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=le([this.closeController.signal,t.signal]);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=le([this.closeController.signal,t.signal]);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=le([this.closeController.signal,t.signal]);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=le([this.closeController.signal,e.signal]);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};function AT(r){return typeof r.retrieve=="function"}var IT=(r,e)=>{if(e==null)throw new P(`No hasher configured for multihash code 0x${r.multihash.code.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`);return async t=>{let n,o=e.digest(t);if(Ds(o)?n=await o:n=o,!J(n.digest,r.multihash.digest))throw new co("Hash of downloaded block did not match multihash from passed CID")}};async function T5(r,e,t,n){let o=IT(r,t),i=new AbortController,s=le([i.signal,n.signal]);i.signal;let a=[];for(let c of e)AT(c)&&a.push(c);try{return await Promise.any(a.map(async c=>{try{let l=!1,u=await c.retrieve(r,{...n,signal:s,validateFn:async d=>{await o(d),l=!0}});return l||await o(u),u}catch(l){throw n.log.error("could not retrieve verified block for %c",r,l),l}}))}finally{i.abort(),s.clear()}}var Si=class extends pe{initialPeerSearchComplete;requests;name;log;logger;minProviders;maxProviders;providers;evictionFilter;constructor(e,t){super(),this.name=t.name,this.logger=e.logger,this.log=e.logger.forComponent(this.name),this.requests=new Map,this.minProviders=t.minProviders??1,this.maxProviders=t.maxProviders??5,this.providers=[],this.evictionFilter=rr(this.maxProviders)}async retrieve(e,t={}){let n=ot.encode(e.multihash.bytes),o=this.requests.get(n);if(o!=null)return this.log("join existing request for %c",e),o;let i=j();if(this.requests.set(n,i.promise),this.providers.length===0){let l=!1;this.initialPeerSearchComplete==null&&(l=!0,this.log=this.logger.forComponent(`${this.name}:${e}`),this.initialPeerSearchComplete=this.findProviders(e,this.minProviders,t)),await this.initialPeerSearchComplete,l&&this.log("found initial session peers for %c",e)}let s=!1,a=new $t({concurrency:this.maxProviders});a.addEventListener("error",()=>{}),a.addEventListener("failure",l=>{this.log.error("error querying provider %o, evicting from session",l.detail.job.options.provider,l.detail.error),this.evict(l.detail.job.options.provider)}),a.addEventListener("success",l=>{s=!0,i.resolve(l.detail.result)}),a.addEventListener("idle",()=>{s||t.signal?.aborted===!0||Promise.resolve().then(async()=>{this.log("no session peers had block for for %c, finding new providers",e);for(let l=0;l<this.minProviders&&this.providers.length!==0;l++){let u=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(u)}await this.findProviders(e,this.minProviders,t),this.log("found new providers re-retrieving %c",e),this.requests.delete(n),i.resolve(await this.retrieve(e,t))}).catch(l=>{this.log.error("could not find new providers for %c",e,l),i.reject(l)})});let c=l=>{a.add(async()=>this.queryProvider(e,l.detail,t),{provider:l.detail}).catch(u=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,u)})};this.addEventListener("provider",c),Promise.all([...this.providers].map(async l=>a.add(async()=>this.queryProvider(e,l,t),{provider:l}))).catch(l=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,l)});try{return await i.promise}finally{this.removeEventListener("provider",c),a.clear(),this.requests.delete(n)}}evict(e){this.evictionFilter.add(this.toEvictionKey(e));let t=this.providers.findIndex(n=>this.equals(n,e));t!==-1&&this.providers.splice(t,1)}isEvicted(e){return this.evictionFilter.has(this.toEvictionKey(e))}hasProvider(e){return!!(this.providers.find(t=>this.equals(t,e))!=null||this.isEvicted(e))}async findProviders(e,t,n){let o=j(),i=0;return Promise.resolve().then(async()=>{this.log("finding %d-%d new provider(s) for %c",t,this.maxProviders,e);for await(let s of this.findNewProviders(e,n)){if(i===this.maxProviders||n.signal?.aborted===!0)break;if(!this.hasProvider(s)&&(this.log("found %d/%d new providers",i,this.maxProviders),this.providers.push(s),this.safeDispatchEvent("provider",{detail:s}),i++,i===t&&(this.log("session is ready"),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",i);break}}if(this.log("found %d/%d new session peers",i,this.maxProviders),i<t)throw new ac(`Found ${i} of ${t} ${this.name} providers for ${e}`)}).catch(s=>{this.log.error("error searching routing for potential session peers for %c",e,s.errors??s),o.reject(s)}),o.promise}};var qu=class{blockstore;datastore;pins;logger;routing;getCodec;getHasher;dns;metrics;log;constructor(e){this.logger=e.logger??To(),this.log=this.logger.forComponent("helia"),this.getHasher=A5(e.hashers,e.loadHasher),this.getCodec=S5(e.codecs,e.loadCodec),this.dns=e.dns??yu(),this.metrics=e.metrics;let t={blockstore:e.blockstore,datastore:e.datastore,logger:this.logger,blockBrokers:[],getHasher:this.getHasher,getCodec:this.getCodec,dns:this.dns,metrics:this.metrics,...e.components??{}};this.routing=t.routing=new Ou(t,{routers:(e.routers??[]).flatMap(o=>{let i=[o];return o[hn]!=null&&i.push(o[hn]),o[pn]!=null&&i.push(o[pn]),i}),providerLookupConcurrency:e.providerLookupConcurrency});let n=new Hu(t);this.pins=new Lu(e.datastore,n,this.getCodec),this.blockstore=new Mu(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(o=>o(t))}async start(){await a5(this.datastore),await mt(this.blockstore,this.datastore,this.routing)}async stop(){await Ct(this.blockstore,this.datastore,this.routing)}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,o=this.blockstore.unwrap();this.log("gc start"),await kt(o.deleteMany(async function*(){for await(let{cid:i}of o.getAll())try{if(await n.pins.isPinned(i,e))continue;yield i,e.onProgress?.(new W("helia:gc:deleted",i))}catch(s){n.log.error("Error during gc",s),e.onProgress?.(new W("helia:gc:error",s))}}()))}finally{t()}this.log("gc finished")}};var Gp=class extends Si{wantList;network;constructor(e,t){super(e,{...t,name:"helia:bitswap:session"}),this.wantList=e.wantList,this.network=e.network}async queryProvider(e,t,n){this.log("sending WANT-BLOCK for %c to %p",e,t);let o=await this.wantList.wantSessionBlock(e,t,n);if(this.log("%p %s %c",t,o.has?"has":"does not have",e),o.has&&o.block!=null)return o.block;throw new Error("Provider did not have block")}async*findNewProviders(e,t={}){for await(let n of this.network.findProviders(e,t))yield n.id}toEvictionKey(e){return e.toMultihash().bytes}equals(e,t){return e.equals(t)}};function _5(r,e){return new Gp(r,e)}var zu=class{blocksReceived;duplicateBlocksReceived;dataReceived;duplicateDataReceived;constructor(e){this.blocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_received_blocks"),this.duplicateBlocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_received_blocks"),this.dataReceived=e.metrics?.registerMetricGroup("helia_bitswap_data_received_bytes"),this.duplicateDataReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_data_received_bytes")}updateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.blocksReceived?.increment(n)}updateDuplicateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateBlocksReceived?.increment(n)}updateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.dataReceived?.increment(n)}updateDuplicateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateDataReceived?.increment(n)}};var Qp=class extends Map{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function Wu(r){let{name:e,metrics:t}=r,n;return t!=null?n=new Qp({name:e,metrics:t}):n=new Map,n}function TT(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=Kt(r);e.push(t),r=r.slice(me(t))}return e}var C5=TT;var Gu=class extends pe{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),this.peers=Za({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=Wu({name:"helia_bitswap_wantlist",metrics:e.metrics}),this.network=e.network,this.sendMessagesDelay=t.sendMessagesDelay??10,this.log=e.logger.forComponent("helia:bitswap:wantlist"),this.hashLoader=t.hashLoader,this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:connected",n=>{this.peerConnected(n.detail).catch(o=>{this.log.error("error processing newly connected bitswap peer %p",n.detail,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}async addEntry(e,t){let n=O(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,priority:t.priority??1,wantType:t.wantType??tt.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,o)),o.wantType===tt.WantHave&&t.wantType===tt.WantBlock&&(o.wantType=tt.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===tt.WantBlock?(await lt(this,"block",t?.signal,{filter:a=>J(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await lt(this,"presence",t?.signal,{filter:s=>J(e.multihash.digest,s.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail}finally{t.signal?.aborted===!0&&(this.log("want for %c was aborted, cancelling want",e),o.cancel=!0,await this.sendMessagesDebounced())}}async sendMessagesDebounced(){await this.sendingMessages?.promise,clearTimeout(this.sendMessagesTimeout),this.sendMessagesTimeout=setTimeout(()=>{this.sendMessages().catch(e=>{this.log("error sending messages to peers",e)})},this.sendMessagesDelay)}async sendMessages(){this.sendingMessages=j(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o=new Vn;for(let[i,s]of this.wants.entries())t.has(i)||s.cancel||(n.add(i),o.addWantlistEntry(s.cid,{cid:s.cid.bytes,priority:s.priority,wantType:s.wantType,cancel:s.cancel,sendDontHave:s.sendDontHave}));if(o.wantlist.size!==0)try{await this.network.sendMessage(e,o);for(let i of n)t.add(i)}catch(i){this.log.error("error sending full wantlist to new peer",i)}})).catch(e=>{this.log.error("error sending messages",e)});for(let[e,t]of this.wants)if(t.cancel){this.wants.delete(e);for(let n of this.peers.values())n.delete(e)}this.sendingMessages.resolve()}has(e){let t=O(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let o=new Vn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:tt.WantHave,priority:1}),await this.network.sendMessage(t,o),(await lt(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&J(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:tt.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new Vn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:tt.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await lt(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&J(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=O(e.multihash.bytes,"base64"),o=this.wants.get(n);o!=null&&(o.cancel=!0,await this.sendMessagesDebounced())}async receiveMessage(e,t){this.log("received message from %p with %d blocks",e,t.blocks.length);let n=!1;for(let o of t.blocks){if(o.prefix==null||o.data==null)continue;let i=C5(o.prefix),s=i[0],a=i[1],c=i[2],l=c===Ye.code?Ye:await this.hashLoader?.getHasher(c);if(l==null){this.log.error("unknown hash algorithm",c);continue}let u=l.digest(o.data);u.then!=null&&(u=await u);let d=Q.create(s===0?0:1,a,u);this.log("received block from %p for %c",e,d),this.safeDispatchEvent("block",{detail:{sender:e,cid:d,block:o.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:d,has:!0,block:o.data}});let f=O(d.multihash.bytes,"base64"),h=this.wants.get(f);h!=null&&(h.cancel=!0,n=!0)}for(let{cid:o,type:i}of t.blockPresences){let s=Q.decode(o);this.log("received %s from %p for %c",i,e,s),this.safeDispatchEvent("presence",{detail:{sender:e,cid:s,has:i===Er.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new Vn(!0);for(let[o,i]of this.wants.entries())i.cancel||(t.add(o),n.addWantlistEntry(i.cid,{cid:i.cid.bytes,priority:1,wantType:tt.WantBlock,cancel:!1,sendDontHave:!1}));if(n.wantlist.size===0){this.peers.set(e,t);return}try{await this.network.sendMessage(e,n),this.peers.set(e,t)}catch(o){this.log.error("error sending full wantlist to new peer %p",e,o)}}peerDisconnected(e){this.peers.delete(e)}start(){}stop(){this.peers.clear(),clearTimeout(this.sendMessagesTimeout)}};var Qu=class{log;logger;stats;network;blockstore;peerWantLists;wantList;constructor(e,t={}){this.logger=e.logger,this.log=e.logger.forComponent("helia:bitswap"),this.blockstore=e.blockstore,this.stats=new zu(e),this.network=new Ul(e,t),this.peerWantLists=new lu({...e,network:this.network},t),this.wantList=new Gu({...e,network:this.network},t)}createSession(e={}){return _5({wantList:this.wantList,network:this.network,logger:this.logger},e)}async want(e,t={}){let n=new AbortController,o=le([n.signal,t.signal]);n.signal,this.network.findAndConnect(e,{...t,signal:o}).catch(i=>{n.signal.aborted||this.log.error("error during finding and connect for cid %c",e,i)});try{return(await this.wantList.wantBlock(e,{...t,signal:o})).block}finally{n.abort(),o.clear()}}async notify(e,t,n={}){await Promise.all([this.peerWantLists.receivedBlock(e,n),this.wantList.receivedBlock(e,n)])}getWantlist(){return[...this.wantList.wants.values()].filter(e=>!e.cancel).map(e=>({cid:e.cid,priority:e.priority,wantType:e.wantType}))}getPeerWantlist(e){return this.peerWantLists.wantListForPeer(e)}async start(){this.wantList.start(),await this.network.start()}async stop(){this.wantList.stop(),await this.network.stop()}};var k5=(r,e={})=>new Qu(r,e);var Yp=class{bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=k5(e,{hashLoader:{getHasher:async o=>n(o)},...t}),this.started=!1}isStarted(){return this.started}async start(){await this.bitswap.start(),this.started=!0}async stop(){await this.bitswap.stop(),this.started=!1}async announce(e,t,n){await this.bitswap.notify(e,t,n)}async retrieve(e,t={}){return this.bitswap.want(e,t)}createSession(e){let t=this.bitswap.createSession(e);return{announce:async(n,o,i)=>{await this.bitswap.notify(n,o,i)},retrieve:async(n,o)=>t.retrieve(n,o)}}};function Xp(r={}){return e=>new Yp(e,r)}var Yu=class{index=0;input="";new(e){return this.index=0,this.input=e,this}readAtomically(e){let t=this.index,n=e();return n===void 0&&(this.index=t),n}parseWith(e){let t=e();if(this.index===this.input.length)return t}peekChar(){if(!(this.index>=this.input.length))return this.input[this.index]}readChar(){if(!(this.index>=this.input.length))return this.input[this.index++]}readGivenChar(e){return this.readAtomically(()=>{let t=this.readChar();if(t===e)return t})}readSeparator(e,t,n){return this.readAtomically(()=>{if(!(t>0&&this.readGivenChar(e)===void 0))return n()})}readNumber(e,t,n,o){return this.readAtomically(()=>{let i=0,s=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*o)-1;for(;;){let u=this.readAtomically(()=>{let d=this.readChar();if(d===void 0)return;let f=Number.parseInt(d,e);if(!Number.isNaN(f))return f});if(u===void 0)break;if(i*=e,i+=u,i>l||(s+=1,t!==void 0&&s>t))return}if(s!==0)return!n&&c&&s>1?void 0:i})}readIPv4Addr(){return this.readAtomically(()=>{let e=new Uint8Array(4);for(let t=0;t<e.length;t++){let n=this.readSeparator(".",t,()=>this.readNumber(10,3,!1,1));if(n===void 0)return;e[t]=n}return e})}readIPv6Addr(){let e=t=>{for(let n=0;n<t.length/2;n++){let o=n*2;if(n<t.length-3){let s=this.readSeparator(":",n,()=>this.readIPv4Addr());if(s!==void 0)return t[o]=s[0],t[o+1]=s[1],t[o+2]=s[2],t[o+3]=s[3],[o+4,!0]}let i=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(i===void 0)return[o,!1];t[o]=i>>8,t[o+1]=i&255}return[t.length,!1]};return this.readAtomically(()=>{let t=new Uint8Array(16),[n,o]=e(t);if(n===16)return t;if(o||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let i=new Uint8Array(14),s=16-(n+2),[a]=e(i.subarray(0,s));return t.set(i.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var P5=45,_T=15,Ns=new Yu;function Xu(r){if(!(r.length>_T))return Ns.new(r).parseWith(()=>Ns.readIPv4Addr())}function Zu(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>P5))return Ns.new(r).parseWith(()=>Ns.readIPv6Addr())}function Ai(r,e=!1){if(r.includes("%")&&(r=r.split("%")[0]),r.length>P5)return;let t=Ns.new(r).parseWith(()=>Ns.readIPAddr());if(t)return e&&t.length===4?Uint8Array.from([0,0,0,0,0,0,0,0,0,0,255,255,t[0],t[1],t[2],t[3]]):t}function tn(r){return!!Xu(r)}function Ls(r){return!!Zu(r)}function ju(r){return!!Ai(r)}var D5=Mr(R5(),1),CT=["0.0.0.0/8","10.0.0.0/8","100.64.0.0/10","127.0.0.0/8","169.254.0.0/16","172.16.0.0/12","192.0.0.0/24","192.0.0.0/29","192.0.0.8/32","192.0.0.9/32","192.0.0.10/32","192.0.0.170/32","192.0.0.171/32","192.0.2.0/24","192.31.196.0/24","192.52.193.0/24","192.88.99.0/24","192.168.0.0/16","192.175.48.0/24","198.18.0.0/15","198.51.100.0/24","203.0.113.0/24","240.0.0.0/4","255.255.255.255/32"],kT=CT.map(r=>new D5.Netmask(r));function Zp(r){for(let e of kT)if(e.contains(r))return!0;return!1}function PT(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function RT(r){let e=r.split(":");if(e.length<2)return!1;let t=e[e.length-1].padStart(4,"0"),n=e[e.length-2].padStart(4,"0"),o=`${parseInt(n.substring(0,2),16)}.${parseInt(n.substring(2),16)}.${parseInt(t.substring(0,2),16)}.${parseInt(t.substring(2),16)}`;return Zp(o)}function DT(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function NT(r){let e=r.split(":"),t=e[e.length-1];return Zp(t)}function LT(r){return/^::$/.test(r)||/^::1$/.test(r)||/^64:ff9b::([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)||/^100::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:2[0-9a-fA-F]:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:db8:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2002:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^f[c-d]([0-9a-fA-F]{2,2}):/i.test(r)||/^fe[8-9a-bA-B][0-9a-fA-F]:/i.test(r)||/^ff([0-9a-fA-F]{2,2}):/i.test(r)}function Gt(r){return tn(r)?Zp(r):PT(r)?RT(r):DT(r)?NT(r):Ls(r)?LT(r):void 0}var OT=r=>r.toString().split("/").slice(1),Os=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),he=r=>({match:e=>Os(t=>t===r).match(e),pattern:r}),Ii=()=>({match:r=>Os(e=>typeof e=="string").match(r),pattern:"{string}"}),fc=()=>({match:r=>Os(e=>!isNaN(parseInt(e))).match(r),pattern:"{number}"}),Re=()=>({match:r=>{if(r.length<2||r[0]!=="p2p"&&r[0]!=="ipfs")return!1;if(r[1].startsWith("Q")||r[1].startsWith("1"))try{be.decode(`z${r[1]}`)}catch{return!1}else return!1;return r.slice(2)},pattern:"/p2p/{peerid}"}),hc=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{xa.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),Te=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),Ot=(...r)=>({match:e=>{let t;for(let n of r){let o=n.match(e);o!==!1&&(t==null||o.length<t.length)&&(t=o)}return t??!1},pattern:`or(${r.map(e=>e.pattern).join(", ")})`}),ge=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e},pattern:`and(${r.map(e=>e.pattern).join(", ")})`});function De(...r){function e(o){let i=OT(o);for(let s of r){let a=s.match(i);if(a===!1)return!1;i=a}return i}function t(o){return e(o)!==!1}function n(o){let i=e(o);return i===!1?!1:i.length===0}return{matchers:r,matches:t,exactMatch:n}}var ed=ge(he("dns4"),Ii()),td=ge(he("dns6"),Ii()),rd=ge(he("dnsaddr"),Ii()),Jp=ge(he("dns"),Ii()),cq=De(ed,Te(Re())),lq=De(td,Te(Re())),uq=De(rd,Te(Re())),pc=De(Ot(Jp,rd,ed,td),Te(Re())),N5=ge(he("ip4"),Os(tn)),L5=ge(he("ip6"),Os(Ls)),em=Ot(N5,L5),zn=Ot(em,Jp,ed,td,rd),O5=De(Ot(em,ge(Ot(Jp,rd,ed,td),Te(Re())))),tm=De(N5),rm=De(L5),M5=De(em),nm=ge(zn,he("tcp"),fc()),mc=ge(zn,he("udp"),fc()),Ti=De(ge(nm,Te(Re()))),dq=De(mc),om=ge(mc,he("quic"),Te(Re())),nd=ge(mc,he("quic-v1"),Te(Re())),MT=Ot(om,nd),fq=De(om),B5=De(nd),jp=Ot(zn,nm,mc,om,nd),U5=Ot(ge(jp,he("ws"),Te(Re()))),Wn=De(U5),F5=Ot(ge(jp,he("wss"),Te(Re())),ge(jp,he("tls"),Te(ge(he("sni"),Ii())),he("ws"),Te(Re()))),_i=De(F5),V5=ge(mc,he("webrtc-direct"),Te(hc()),Te(hc()),Te(Re())),gc=De(V5),$5=ge(nd,he("webtransport"),Te(hc()),Te(hc()),Te(Re())),im=De($5),Ju=Ot(U5,F5,ge(nm,Te(Re())),ge(MT,Te(Re())),ge(zn,Te(Re())),V5,$5,Re()),od=De(Ju),BT=ge(Ju,he("p2p-circuit"),Re()),or=De(BT),UT=Ot(ge(Ju,he("p2p-circuit"),he("webrtc"),Te(Re())),ge(Ju,he("webrtc"),Te(Re())),ge(he("webrtc"),Te(Re()))),yc=De(UT),FT=Ot(ge(zn,he("tcp"),fc(),he("http"),Te(Re())),ge(zn,he("http"),Te(Re()))),K5=De(FT),VT=Ot(ge(zn,he("tcp"),Ot(ge(he("443"),he("http")),ge(fc(),he("https"))),Te(Re())),ge(zn,he("tls"),he("http"),Te(Re())),ge(zn,he("https"),Te(Re()))),H5=De(VT),$T=Ot(ge(he("memory"),Ii(),Te(Re()))),hq=De($T);function q5(r,e,t){let n=0;for(let o of r)if(!(n<e)){if(n>t)break;if(o!==255)return!1;n++}return!0}function z5(r,e,t,n){let o=0;for(let i of r)if(!(o<t)){if(o>n)break;if(i!==e[o])return!1;o++}return!0}function sm(r){switch(r.length){case Ci:return r.join(".");case ki:{let e=[];for(let t=0;t<r.length;t++)t%2===0&&e.push(r[t].toString(16).padStart(2,"0")+r[t+1].toString(16).padStart(2,"0"));return e.join(":")}default:throw new Error("Invalid ip length")}}function W5(r){let e=0;for(let[t,n]of r.entries()){if(n===255){e+=8;continue}for(;(n&128)!=0;)e++,n=n<<1;if((n&128)!=0)return-1;for(let o=t+1;o<r.length;o++)if(r[o]!=0)return-1;break}return e}function G5(r){let e="0x";for(let t of r)e+=(t>>4).toString(16)+(t&15).toString(16);return e}var Ci=4,ki=16,bq=parseInt("0xFFFF",16),KT=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function wc(r,e){e.length===ki&&r.length===Ci&&q5(e,0,11)&&(e=e.slice(12)),e.length===Ci&&r.length===ki&&z5(r,KT,0,11)&&(r=r.slice(12));let t=r.length;if(t!=e.length)throw new Error("Failed to mask ip");let n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=r[o]&e[o];return n}function Q5(r,e){if(typeof e=="string"&&(e=Ai(e)),e==null)throw new Error("Invalid ip");if(e.length!==r.network.length)return!1;for(let t=0;t<e.length;t++)if((r.network[t]&r.mask[t])!==(e[t]&r.mask[t]))return!1;return!0}function am(r){let[e,t]=r.split("/");if(!e||!t)throw new Error("Failed to parse given CIDR: "+r);let n=Ci,o=Xu(e);if(o==null&&(n=ki,o=Zu(e),o==null))throw new Error("Failed to parse given CIDR: "+r);let i=parseInt(t,10);if(Number.isNaN(i)||String(i).length!==t.length||i<0||i>n*8)throw new Error("Failed to parse given CIDR: "+r);let s=cm(i,8*n);return{network:wc(o,s),mask:s}}function cm(r,e){if(e!==8*Ci&&e!==8*ki)throw new Error("Invalid CIDR mask");if(r<0||r>e)throw new Error("Invalid CIDR mask");let t=e/8,n=new Uint8Array(t);for(let o=0;o<t;o++){if(r>=8){n[o]=255,r-=8;continue}n[o]=255-(255>>r),r=0}return n}var Pi=class{constructor(e,t){if(t==null)({network:this.network,mask:this.mask}=am(e));else{let n=Ai(e);if(n==null)throw new Error("Failed to parse network");t=String(t);let o=parseInt(t,10);if(Number.isNaN(o)||String(o).length!==t.length||o<0||o>n.length*8){let i=Ai(t);if(i==null)throw new Error("Failed to parse mask");this.mask=i}else this.mask=cm(o,8*n.length);this.network=wc(n,this.mask)}}contains(e){return Q5({network:this.network,mask:this.mask},e)}toString(){let e=W5(this.mask),t=e!==-1?String(e):G5(this.mask);return sm(this.network)+"/"+t}};function Y5(r,e){return new Pi(r).contains(e)}var X5=tn,HT=Ls,lm=function(r){let e=0;if(r=r.toString().trim(),X5(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(HT(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let i=X5(t[n]),s;i&&(s=lm(t[n]),t[n]=O(s.slice(0,2),"base16")),s!=null&&++n<8&&t.splice(n,0,O(s.slice(2,4),"base16"))}if(t[0]==="")for(;t.length<8;)t.unshift("0");else if(t[t.length-1]==="")for(;t.length<8;)t.push("0");else if(t.length<8){for(n=0;n<t.length&&t[n]!=="";n++);let i=[n,1];for(n=9-t.length;n>0;n--)i.push("0");t.splice.apply(t,i)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){let i=parseInt(t[n],16);o[e++]=i>>8&255,o[e++]=i&255}return o}throw new Error("invalid ip address")},Z5=function(r,e=0,t){e=~~e,t=t??r.length-e;let n=new DataView(r.buffer);if(t===4){let o=[];for(let i=0;i<t;i++)o.push(r[e+i]);return o.join(".")}if(t===16){let o=[];for(let i=0;i<t;i+=2)o.push(n.getUint16(e+i).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var Ms={},um={},zT=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,-1,"ip6zone"],[43,8,"ipcidr"],[53,-1,"dns",!0],[54,-1,"dns4",!0],[55,-1,"dns6",!0],[56,-1,"dnsaddr",!0],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[280,0,"webrtc-direct"],[281,0,"webrtc"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,-1,"unix",!1,!0],[421,-1,"ipfs"],[421,-1,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,-1,"garlic64"],[448,0,"tls"],[449,-1,"sni"],[460,0,"quic"],[461,0,"quic-v1"],[465,0,"webtransport"],[466,-1,"certhash"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"],[481,-1,"http-path"],[777,-1,"memory"]];zT.forEach(r=>{let e=WT(...r);um[e.code]=e,Ms[e.name]=e});function WT(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function ne(r){if(typeof r=="number"){if(um[r]!=null)return um[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(Ms[r]!=null)return Ms[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var GT=ne("ip4"),QT=ne("ip6"),YT=ne("ipcidr");function pm(r,e){switch(ne(r).code){case 4:case 41:return ZT(e);case 42:return hm(e);case 43:return O(e,"base10");case 6:case 273:case 33:case 132:return e7(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return hm(e);case 421:return t_(e);case 444:return J5(e);case 445:return J5(e);case 466:return e_(e);case 481:return globalThis.encodeURIComponent(hm(e));default:return O(e,"base16")}}function mm(r,e){switch(ne(r).code){case 4:return j5(e);case 41:return j5(e);case 42:return fm(e);case 43:return L(e,"base10");case 6:case 273:case 33:case 132:return ym(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return fm(e);case 421:return jT(e);case 444:return r_(e);case 445:return n_(e);case 466:return JT(e);case 481:return fm(globalThis.decodeURIComponent(e));default:return L(e,"base16")}}function gm(r){let e,t;if(r.stringTuples().forEach(([n,o])=>{(n===GT.code||n===QT.code)&&(t=o),n===YT.code&&(e=o)}),e==null||t==null)throw new Error("Invalid multiaddr");return new Pi(t,e)}var dm=Object.values(oi).map(r=>r.decoder),XT=function(){let r=dm[0].or(dm[1]);return dm.slice(2).forEach(e=>r=r.or(e)),r}();function j5(r){if(!ju(r))throw new Error("invalid ip address");return lm(r)}function ZT(r){let e=Z5(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!ju(e))throw new Error("invalid ip address");return e}function ym(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function e7(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function fm(r){let e=L(r),t=Uint8Array.from($e(e.length));return ke([t,e],t.length+e.length)}function hm(r){let e=Kt(r);if(r=r.slice(me(e)),r.length!==e)throw new Error("inconsistent lengths");return O(r)}function jT(r){let e;r[0]==="Q"||r[0]==="1"?e=Ee(be.decode(`z${r}`)).bytes:e=Q.parse(r).multihash.bytes;let t=Uint8Array.from($e(e.length));return ke([t,e],t.length+e.length)}function JT(r){let e=XT.decode(r),t=Uint8Array.from($e(e.length));return ke([t,e],t.length+e.length)}function e_(r){let e=Kt(r),t=r.slice(me(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+O(t,"base64url")}function t_(r){let e=Kt(r),t=r.slice(me(e));if(t.length!==e)throw new Error("inconsistent lengths");return O(t,"base58btc")}function r_(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==16)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion address.`);let t=at.decode("b"+e[0]),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=ym(n);return ke([t,o],t.length+o.length)}function n_(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==56)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion3 address.`);let t=at.decode(`b${e[0]}`),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=ym(n);return ke([t,o],t.length+o.length)}function J5(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=O(e,"base32"),o=e7(t);return`${n}:${o}`}function t7(r){r=wm(r);let e=[],t=[],n=null,o=r.split("/").slice(1);if(o.length===1&&o[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let i=0;i<o.length;i++){let s=o[i],a=ne(s);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(i++,i>=o.length)throw new id("invalid address: "+r);if(a.path===!0){n=wm(o.slice(i).join("/")),e.push([a.code,mm(a.code,n)]),t.push([a.code,n]);break}let c=mm(a.code,o[i]);e.push([a.code,c]),t.push([a.code,pm(a.code,c)])}return{string:r7(t),bytes:sd(e),tuples:e,stringTuples:t,path:n}}function bm(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let i=Kt(r,o),s=me(i),a=ne(i),c=o_(a,r.slice(o+s));if(c===0){e.push([i]),t.push([i]),o+=s;continue}let l=r.slice(o+s,o+s+c);if(o+=c+s,o>r.length)throw new id("Invalid address Uint8Array: "+O(r,"base16"));e.push([i,l]);let u=pm(i,l);if(t.push([i,u]),a.path===!0){n=u;break}}return{bytes:Uint8Array.from(r),string:r7(t),tuples:e,stringTuples:t,path:n}}function r7(r){let e=[];return r.map(t=>{let n=ne(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),wm(e.join("/"))}function sd(r){return ke(r.map(e=>{let t=ne(e[0]),n=Uint8Array.from($e(t.code));return e.length>1&&e[1]!=null&&(n=ke([n,e[1]])),n}))}function o_(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=Kt(e instanceof Uint8Array?e:Uint8Array.from(e));return t+me(t)}}function wm(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}var id=class extends Error{static name="ParseError";name="ParseError";constructor(e){super(`Error parsing address: ${e}`)}};var i_=Symbol.for("nodejs.util.inspect.custom"),vm=Symbol.for("@multiformats/js-multiaddr/multiaddr"),s_=[ne("dns").code,ne("dns4").code,ne("dns6").code,ne("dnsaddr").code],xm=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},ad=class r{bytes;#e;#t;#r;#o;[vm]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=bm(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=t7(e)}else if(No(e))t=bm(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=t.bytes,this.#e=t.string,this.#t=t.tuples,this.#r=t.stringTuples,this.#o=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,o,i="",s=ne("tcp"),a=ne("udp"),c=ne("ip4"),l=ne("ip6"),u=ne("dns6"),d=ne("ip6zone");for(let[h,p]of this.stringTuples())h===d.code&&(i=`%${p??""}`),s_.includes(h)&&(t=s.name==="tcp"?"tcp":"udp",o=443,n=`${p??""}${i}`,e=h===u.code?6:4),(h===s.code||h===a.code)&&(t=ne(h).name==="tcp"?"tcp":"udp",o=parseInt(p??"")),(h===c.code||h===l.code)&&(t=ne(h).name==="tcp"?"tcp":"udp",n=`${p??""}${i}`,e=h===l.code?6:4);if(e==null||t==null||n==null||o==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:e,host:n,transport:t,port:o}}protos(){return this.#t.map(([e])=>Object.assign({},ne(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>ne(e).name)}tuples(){return this.#t.map(([e,t])=>t==null?[e]:[e,t])}stringTuples(){return this.#r.map(([e,t])=>t==null?[e]:[e,t])}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,o))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(sd(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===Ms.p2p.code&&e.push([n,o]),n===Ms["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?O(be.decode(`z${n}`),"base58btc"):O(Q.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#o}equals(e){return J(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(i=>i.resolvable);if(t==null)return[this];let n=Bs.get(t.name);if(n==null)throw new xm(`no available resolver for ${t.name}`);return(await n(this,e)).map(i=>$(i))}nodeAddress(){let e=this.toOptions();if(e.transport!=="tcp"&&e.transport!=="udp")throw new Error(`multiaddr must have a valid format - no protocol with name: "${e.transport}". Must have a valid transport protocol: "{tcp, udp}"`);return{family:e.family,address:e.host,port:e.port}}isThinWaistAddress(e){let t=(e??this).protos();return!(t.length!==2||t[0].code!==4&&t[0].code!==41||t[1].code!==6&&t[1].code!==273)}[i_](){return`Multiaddr(${this.#e})`}};var Bs=new Map;function No(r){return!!r?.[vm]}function $(r){return new ad(r)}var a_=[ne("tcp").code,ne("dns").code,ne("dnsaddr").code,ne("dns4").code,ne("dns6").code];function n7(r){return s7("sni",r)?.[1]}function o7(r){let e=s7("tcp",r)?.[1];return e==null?"":`:${e}`}function s7(r,e){let t;try{t=ne(r).code}catch{return}for(let[n,o]of e)if(n===t&&o!=null)return[n,o]}function i7(r){return r.some(([e,t])=>e===ne("tls").code)}function rn(r,e,t){let n=a7[ne(r).name];if(n==null)throw new Error(`Can't interpret protocol ${ne(r).name}`);let o=n(e,t);return r===ne("ip6").code?`[${o}]`:o}var a7={ip4:(r,e)=>r,ip6:(r,e)=>e.length===0?r:`[${r}]`,tcp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`tcp://${rn(t[0],t[1]??"",e)}:${r}`},udp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`udp://${rn(t[0],t[1]??"",e)}:${r}`},dnsaddr:(r,e)=>r,dns4:(r,e)=>r,dns6:(r,e)=>r,dns:(r,e)=>r,ipfs:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${rn(t[0],t[1]??"",e)}`},p2p:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${rn(t[0],t[1]??"",e)}`},http:(r,e)=>{let t=i7(e),n=n7(e),o=o7(e);if(t&&n!=null)return`https://${n}${o}`;let i=t?"https://":"http://",s=e.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let a=rn(s[0],s[1]??"",e);return a=a.replace("tcp://",""),`${i}${a}`},"http-path":(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=rn(t[0],t[1]??"",e),o=decodeURIComponent(r);return`${n}/${o}`},tls:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return rn(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return rn(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=rn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=i7(e),n=n7(e),o=o7(e);if(t&&n!=null)return`wss://${n}${o}`;let i=t?"wss://":"ws://",s=e.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let a=rn(s[0],s[1]??"",e);return a=a.replace("tcp://",""),`${i}${a}`},wss:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=rn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`}};function cd(r,e){let n=$(r).stringTuples(),o=n.pop();if(o==null)throw new Error("Unexpected end of multiaddr");let i=ne(o[0]),s=a7[i.name];if(s==null)throw new Error(`No interpreter found for ${i.name}`);let a=s(o[1]??"",n);return e?.assumeHttp!==!1&&a_.includes(o[0])&&(a=a.replace(/^.*:\/\//,""),o[1]==="443"?a=`https://${a}`:a=`http://${a}`),(a.startsWith("http://")||a.startsWith("https://")||a.startsWith("ws://")||a.startsWith("wss://"))&&(a=new URL(a).toString(),a.endsWith("/")&&(a=a.substring(0,a.length-1))),a}var ld=class{url;#e=0;#t=0;#r=0;#o=0;#a=new Map;log;transformRequestInit;constructor(e,{logger:t,transformRequestInit:n}){this.url=e instanceof URL?e:new URL(e),this.transformRequestInit=n,this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.hostname}`)}#l(e){let t=e.multihash.bytes;return ot.encode(t)}async getRawBlock(e,t){let n=new URL(this.url.toString());if(n.pathname=`/ipfs/${e.toString()}`,n.search="?format=raw",t?.aborted===!0)throw new Error(`Signal to fetch raw block for CID ${e} from gateway ${this.url} was aborted prior to fetch`);let o=this.#l(e),i=new AbortController,s=()=>{i.abort()};t?.addEventListener("abort",s);try{let a=this.#a.get(o);if(a==null){this.#e++;let c={signal:i.signal,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"},l=this.transformRequestInit!=null?await this.transformRequestInit(c):c;a=fetch(n.toString(),l).then(async u=>{if(this.log("GET %s %d",n,u.status),!u.ok)throw this.#t++,new Error(`unable to fetch raw block for CID ${e} from gateway ${this.url}`);return this.#o++,new Uint8Array(await u.arrayBuffer())}),this.#a.set(o,a)}return await a}catch{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}`))}finally{t?.removeEventListener("abort",s),this.#a.delete(o)}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#o/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}getStats(){return{attempts:this.#e,errors:this.#t,invalidBlocks:this.#r,successes:this.#o,pendingResponses:this.#a.size}}};function c_(r,e,t){return r.filter(n=>{if(H5.matches(n)||e&&K5.matches(n))return t||pc.matches(n)?!0:Gt(n.toOptions().host)===!1;if(!e&&t){let{host:o}=n.toOptions();if(o==="127.0.0.1"||o==="localhost"||o.endsWith(".localhost"))return!0}return!1})}async function*ud(r,e,t,n,o,i={}){for await(let s of e.findProviders(r,i)){let a=c_(s.multiaddrs,n,o);if(a.length===0)continue;let c=cd(a[0]);yield new ld(c,{logger:t,transformRequestInit:i.transformRequestInit})}}var Em=class extends Si{routing;allowInsecure;allowLocal;transformRequestInit;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??dd,this.allowLocal=t.allowLocal??fd,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.signal);return this.log.trace("got block for %c from %s",e,t.url),await n.validateFn?.(o),o}async*findNewProviders(e,t={}){yield*ud(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()}};function c7(r,e){return new Em(r,e)}var hd=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??dd,this.allowLocal=t.allowLocal??fd,this.transformRequestInit=t.transformRequestInit}async retrieve(e,t={}){let n=[];for await(let o of ud(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.signal);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,o.url,s);continue}return i}catch(i){if(this.log.error("failed to get block for %c from %s",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 c7({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure,transformRequestInit:this.transformRequestInit})}};var dd=!1,fd=!1;function Sm(r={}){return e=>new hd(e,r)}async function*pd(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 p_=Mr(md(),1);var nn=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},gd=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},Us=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},yd=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},wd=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},bd=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},bc=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var ir;(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=()=>He(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=re((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)=>ee(o,r.codec(),i)})(ir||(ir={}));var l_=hr("ipns:utils"),l7=L("/ipns/");var u_=0,d_=18;function u7(r){let e;if(r.pubKey!=null)try{e=rt(r.pubKey)}catch(t){throw l_.error(t),t}if(e!=null)return e}function d7(r){let e=L("ipns-signature:");return ke([e,r])}function xc(r){return"signatureV1"in r?ir.encode({value:L(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:L(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):ir.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function An(r){let e=ir.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 nn("Missing data or signatureV2");let t=f7(e.data),n=f_(t.Value),o=O(t.Validity);if(e.value!=null&&e.signatureV1!=null)return h_(e),{value:n,validityType:ir.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:ir.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 vc(r){return ke([l7,r.bytes])}function Fs(r){let e=Ee(r.slice(l7.length));if(!xd(e,u_)&&!xd(e,d_))throw new co("Multihash in IPNS key was not identity or sha2-256");return e}function f7(r){let e=br(r);if(e.ValidityType===0)e.ValidityType=ir.ValidityType.EOL;else throw new Us("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 f_(r){let e=O(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${Q.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${Q.parse(e).toV1().toString()}`}catch{}throw new wd("Value must be a valid content path starting with /")}function h_(r){if(r.data==null)throw new bd("Record data is missing");let e=f7(r.data);if(!J(e.Value,r.value??new Uint8Array(0)))throw new nn('Field "value" did not match between protobuf and CBOR');if(!J(e.Validity,r.validity??new Uint8Array(0)))throw new nn('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new nn('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new nn('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new nn('Field "ttl" did not match between protobuf and CBOR')}function xd(r,e){return r.code===e}var lW=hr("ipns"),uW=5*60*1e9,m_="/ipns/",dW=m_.length;var h7=Mr(md(),1);var vd=hr("ipns:validator"),g_=1024*10,y_=async(r,e)=>{let t=An(e),n;try{let o=d7(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw vd.error("record signature verification failed"),new nn("Record signature verification failed");if(t.validityType===ir.ValidityType.EOL){if(h7.default.fromString(t.validity).toDate().getTime()<Date.now())throw vd.error("record has expired"),new gd("record has expired")}else if(t.validityType!=null)throw vd.error("the validity type is unsupported"),new Us("The validity type is unsupported");vd("ipns record for %s is valid",t.value)};async function Ed(r,e){if(e.byteLength>g_)throw new yd("The record is too large");let t=Fs(r),n;xd(t,0)&&(n=nu(t));let o=An(e),i=u7(o)??n;if(i==null)throw new bc("Could not extract public key from IPNS record or routing key");let s=vc(i.toMultihash());if(!J(s,r))throw new bc("Embedded public key did not match routing key");await y_(i,e)}var Sd=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MESSAGE_LENGTH"};async function*Ec(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)),ts(i)&&(i=i.subarray()),o+=n.decode(i,{stream:!0}),o.length>(e?.maxMessageLength??o.length))throw new Sd("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 Vs=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},on=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function w_(r){return r[Symbol.asyncIterator]!=null}function b_(r){if(w_(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var p7=b_;var m7=L("/ipns/");function g7(r){return J(r.subarray(0,m7.byteLength),m7)}var Ad=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){yield*jt(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[]}))}async provide(){}async cancelReprovide(){}async put(e,t,n){if(!g7(e))return;let o=Fs(e),i=Q.createV1(114,o),s=An(t);await this.client.putIPNS(i,s,n)}async get(e,t){if(!g7(e))throw new Ce("Not found");let n=Fs(e),o=Q.createV1(114,n);try{let i=await this.client.getIPNS(o,t);return xc(i)}catch(i){throw i.name==="BadResponseError"?new Ce("Not found"):i}}},Id=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await p7(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new Ce("Not found")}async*getClosestPeers(e,t={}){}};var pt=hr("delegated-routing-v1-http-api-client"),Td={concurrentRequests:4,timeout:3e4,cacheTTL:5*60*1e3,cacheName:"delegated-routing-v1-cache"},_d=class{started;httpQueue;shutDownController;clientUrl;timeout;contentRouting;peerRouting;filterAddrs;filterProtocols;inFlightRequests;cacheName;cache;cacheTTL;constructor(e,t={}){this.started=!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.httpQueue=new En({concurrency:t.concurrentRequests??Td.concurrentRequests}),this.inFlightRequests=new Map,this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??Td.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new Ad(this),this.peerRouting=new Id(this),this.cacheName=t.cacheName??Td.cacheName,this.cacheTTL=t.cacheTTL??Td.cacheTTL}get[hn](){return this.contentRouting}get[pn](){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&&pt("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={}){pt("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let i=j(),s=j();this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let a=new URL(`${this.clientUrl}routing/v1/providers/${e.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==null)throw new on("No response received");if(!l.ok)throw l.status===404?new Ce("No matching records found"):l.status===422?new Vs("Request does not conform to schema or semantic constraints"):new on(`Unexpected status code: ${l.status}`);if(l.body==null)throw new on("Routing response had no body");let u=l.headers.get("Content-Type");if(u==null)throw new on("No Content-Type header received");if(u?.startsWith("application/json")){let d=await l.json();for(let f of d.Providers){let h=this.#e(f);h!=null&&(yield h)}}else if(u.includes("application/x-ndjson"))for await(let d of Ec(pd(l.body))){let f=this.#e(d);f!=null&&(yield f)}else throw new on(`Unsupported Content-Type: ${u}`)}catch(a){pt.error("getProviders errored:",a)}finally{o.clear(),s.resolve(),pt("getProviders finished: %c",e)}}async*getPeers(e,t={}){pt("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let i=j(),s=j();this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let a=new URL(`${this.clientUrl}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)throw new Ce("No matching records found");if(l.status===422)throw new Vs("Request does not conform to schema or semantic constraints");if(l.body==null)throw new on("Routing response had no body");if(l.headers.get("Content-Type")==="application/json"){let d=await l.json();for(let f of d.Peers){let h=this.#e(f);h!=null&&(yield h)}}else for await(let d of Ec(pd(l.body))){let f=this.#e(d);f!=null&&(yield f)}}catch(a){pt.error("getPeers errored:",a)}finally{o.clear(),s.resolve(),pt("getPeers finished: %c",e)}}async getIPNS(e,t={}){pt("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let i=j(),s=j();this.httpQueue.add(async()=>(i.resolve(),s.promise));let a=`${this.clientUrl}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(pt("getIPNS GET %s %d",a,l.status),l.status===404)throw new Ce("No matching records found");if(l.status===422)throw new Vs("Request does not conform to schema or semantic constraints");if(l.body==null)throw new on("GET ipns response had no body");let u=await l.arrayBuffer(),d=new Uint8Array(u,0,u.byteLength);return t.validate!==!1&&await Ed(vc(e.multihash),d),An(d)}catch(c){throw pt.error("getIPNS GET %s error:",a,c),c}finally{o.clear(),s.resolve(),pt("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){pt("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),i=le([this.shutDownController.signal,o,n.signal]);let s=j(),a=j();this.httpQueue.add(async()=>(s.resolve(),a.promise));let c=`${this.clientUrl}routing/v1/ipns/${e}`;try{await s.promise;let l=xc(t),u={method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:i},d=await this.#r(c,u);if(pt("putIPNS PUT %s %d",c,d.status),d.status!==200)throw new on("PUT ipns response had status other than 200")}catch(l){throw pt.error("putIPNS PUT %s error:",c,l.stack),l}finally{i.clear(),a.resolve(),pt("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map($)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:Ue(e.ID),Addrs:n,Protocols:t}}catch(t){pt.error("could not conform record to peer schema",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 pt("returning cached response for %s",o),c;await this.cache?.delete(e)}}let i=this.inFlightRequests.get(o);if(i!=null){let c=await i;return pt("deduplicating outgoing request for %s",o),c.clone()}let s=fetch(e,t).then(async c=>{if(this.cache!=null&&c.ok&&n==="GET"){let l=Date.now()+this.cacheTTL,u=new Headers(c.headers);u.set("x-cache-expires",l.toString());let d=new Response(c.clone().body,{status:c.status,statusText:c.statusText,headers:u});await this.cache.put(e,d)}return c}).finally(()=>{this.inFlightRequests.delete(o)});return this.inFlightRequests.set(o,s),await s}};function y7(r,e={}){return new _d(new URL(r),e)}function Im(){return{filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss","tls"]}}var w7="[a-fA-F\\d:]",Lo=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${w7})|(?<=${w7})(?=\\s|$))`:"",sn="(?: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}",st="[a-fA-F\\d]{1,4}",Cd=`
4
+ (?:
5
+ (?:${st}:){7}(?:${st}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
6
+ (?:${st}:){6}(?:${sn}|:${st}|:)| // 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
7
+ (?:${st}:){5}(?::${sn}|(?::${st}){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4
8
+ (?:${st}:){4}(?:(?::${st}){0,1}:${sn}|(?::${st}){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4
9
+ (?:${st}:){3}(?:(?::${st}){0,2}:${sn}|(?::${st}){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4
10
+ (?:${st}:){2}(?:(?::${st}){0,3}:${sn}|(?::${st}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
11
+ (?:${st}:){1}(?:(?::${st}){0,4}:${sn}|(?::${st}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
12
+ (?::(?:(?::${st}){0,5}:${sn}|(?::${st}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
13
+ )(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
14
+ `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),x_=new RegExp(`(?:^${sn}$)|(?:^${Cd}$)`),v_=new RegExp(`^${sn}$`),E_=new RegExp(`^${Cd}$`),Tm=r=>r&&r.exact?x_:new RegExp(`(?:${Lo(r)}${sn}${Lo(r)})|(?:${Lo(r)}${Cd}${Lo(r)})`,"g");Tm.v4=r=>r&&r.exact?v_:new RegExp(`${Lo(r)}${sn}${Lo(r)}`,"g");Tm.v6=r=>r&&r.exact?E_:new RegExp(`${Lo(r)}${Cd}${Lo(r)}`,"g");var _m=Tm;function Cm(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function b7(){return!1}var{toString:S_}=Object.prototype;function km(r){return S_.call(r)==="[object RegExp]"}var x7={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function Pm(r,e={}){if(!km(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(x7).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?x7[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function Rm(r,e,{timeout:t}={}){try{return Cm(()=>Pm(r).test(e),{timeout:t})()}catch(n){if(b7(n))return!1;throw n}}var A_=15,I_=45,v7={timeout:400};function Dm(r){return r.length>I_?!1:Rm(_m.v6({exact:!0}),r,v7)}function E7(r){return r.length>A_?!1:Rm(_m.v4({exact:!0}),r,v7)}var S7={http:"80",https:"443",ws:"80",wss:"443"},T_=["http","https","ws","wss"];function A7(r,e){e=e??{};let t=e.defaultDnsType??"dns4",{scheme:n,hostname:o,port:i}=__(r),a="/"+[C_(o,t),k_(i,n),P_(n)].filter(c=>!!c).reduce((c,l)=>c.concat(l),[]).join("/");return $(a)}function __(r){let[e]=r.split(":");T_.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o}=new URL(r);if(o==null||o===""){let i=R_(e);i!=null&&(o=i),i==null&&t==="http:"&&(o="80")}return{scheme:e,hostname:n,port:o}}function C_(r,e){if(!(r==null||r==="")){if(E7(r))return["ip4",r];if(Dm(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(Dm(t))return["ip6",t]}return[e,r]}}function k_(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function P_(r){if(r.match(/^tcp$|^udp$/)==null)return[r]}function R_(r){if(!(r==null||r===""||S7[r]==null))return S7[r]}var D_=["https://trustless-gateway.link","https://4everland.io"],N_=2336;function L_(r){return r=r.toString(),{id:Qr(Q.createV1(N_,Jt.digest(L(r)))),multiaddrs:[A7(r)]}}var Nm=class{gateways;constructor(e={}){this.gateways=(e.gateways??D_).map(t=>L_(t))}async*findProviders(e,t){yield*this.gateways.toSorted(()=>Math.random()>.5?1:-1).map(n=>({...n,protocols:["transport-ipfs-gateway-http"]}))}};function Lm(r={}){return new Nm(r)}var Om=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)}};function Mm(r){return new Om(r)}var Sc=class extends qn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(at.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(at.encode(e.multihash.bytes));if(t==null)throw new kr;return t}has(e){return this.data.has(at.encode(e.multihash.bytes))}async delete(e){this.data.delete(at.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:Q.createV1(ri,Ee(at.decode(e))),block:t}}};var YG=hr("blockstore:core:tiered");var _7="SHARDING";function M_(r){return r[Symbol.asyncIterator]!=null}function B_(r){if(M_(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 Ri=B_;function U_(r){return r[Symbol.asyncIterator]!=null}function F_(r,e){return U_(r)?async function*(){yield*(await Ri(r)).sort(e)}():function*(){yield*Ri(r).sort(e)}()}var kd=F_;var Gn=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 kt(this.putMany(e,n)),e=[],await kt(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=en(n,i=>i.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>en(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>kd(o,i),n)),e.offset!=null){let o=0,i=e.offset;n=en(n,()=>o++>=i)}return e.limit!=null&&(n=uo(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=en(n,i=>i.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>en(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>kd(o,i),n)),e.offset!=null){let o=e.offset,i=0;n=en(n,()=>i++>=o)}return e.limit!=null&&(n=uo(n,e.limit)),n}};var Di=class extends Gn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(e.toString(),t),e}get(e){let t=this.data.get(e.toString());if(t==null)throw new kr;return t}has(e){return this.data.has(e.toString())}delete(e){this.data.delete(e.toString())}*_all(){for(let[e,t]of this.data.entries())yield{key:new Le(e),value:t}}*_allKeys(){for(let e of this.data.keys())yield new Le(e)}};var CQ=new Le(_7);var KQ=hr("datastore:core:tiered");var Pd=class extends qu{libp2p;constructor(e){super({...e,components:{libp2p:e.libp2p}}),this.libp2p=e.libp2p}async start(){await super.start(),await this.libp2p.start()}async stop(){await super.stop(),await this.libp2p.stop()}};var Bm=class{readNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.readNext=j(),this.haveNext=j()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let e=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=j(),e}async throw(e){return this.ended=!0,e!=null&&(this.haveNext.promise.catch(()=>{}),this.haveNext.reject(e)),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return this.ended=!0,this.nextResult=e,this.haveNext.resolve(),e}async push(e,t){await this._push(e,t)}async end(e,t){e!=null?await this.throw(e):await this._push(void 0,t)}async _push(e,t){if(e!=null&&this.ended)throw new Error("Cannot push value onto an ended pushable");for(;this.nextResult!=null;)await this.readNext.promise;e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=j(),await Ge(this.readNext.promise,t?.signal,t)}};function k7(){return new Bm}var Rd=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var Um=class extends Error{code;constructor(e,t){super(e),this.code=t}},Fm=class extends Um{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted",this.name="AbortError"}};function Ni(r,e){let t=k7();r.sink(t).catch(async s=>{await t.end(s)}),r.sink=async s=>{for await(let a of s)await t.push(a);await t.end()};let n=r.source;r.source[Symbol.iterator]!=null?n=r.source[Symbol.iterator]():r.source[Symbol.asyncIterator]!=null&&(n=r.source[Symbol.asyncIterator]());let o=new ae;return{read:async(s,a)=>{a?.signal?.throwIfAborted();let c,l=new Promise((u,d)=>{c=()=>{d(new Fm("Read aborted"))},a?.signal?.addEventListener("abort",c)});try{if(s==null){let{done:d,value:f}=await Promise.race([n.next(),l]);return d===!0?new ae:f}for(;o.byteLength<s;){let{value:d,done:f}=await Promise.race([n.next(),l]);if(f===!0)throw new Rd("unexpected end of input");o.append(d)}let u=o.sublist(0,s);return o.consume(s),u}finally{c!=null&&a?.signal?.removeEventListener("abort",c)}},write:async(s,a)=>{a?.signal?.throwIfAborted(),s instanceof Uint8Array?await t.push(s,a):await t.push(s.subarray(),a)},unwrap:()=>{if(o.byteLength>0){let s=r.source;r.source=async function*(){e?.yieldBytes===!1?yield o:yield*o,yield*s}()}return r}}}var Dd=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Nd=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Ld=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function In(r,e={}){let t=Ni(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=me(e.maxDataLength));let n=e?.lengthDecoder??Kt,o=e?.lengthEncoder??$e;return{read:async s=>{let a=-1,c=new ae;for(;;){c.append(await t.read(1,s));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new Dd("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new Ld("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new Nd("message length too long");return t.read(a,s)},write:async(s,a)=>{await t.write(new ae(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new ae(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function Vm(){let r=j(),e=!1;return{sink:async t=>{if(e)throw new Error("already piped");e=!0,r.resolve(t)},source:async function*(){yield*await r.promise}()}}function P7(){let r=Vm(),e=Vm();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var $s=!!globalThis.process?.env?.DUMP_SESSION_KEYS;function Od(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function $m(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function Mt(r,...e){if(!$m(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error("Uint8Array expected of length "+e+", got length="+r.length)}function Km(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 R7(r,e){Mt(r);let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}function Hm(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}var Qn=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4)),D7=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),V_=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!V_)throw new Error("Non little-endian hardware is not supported");function $_(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}function Md(r){if(typeof r=="string")r=$_(r);else if($m(r))r=Bd(r);else throw new Error("Uint8Array expected, got "+typeof r);return r}function N7(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function L7(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 qm=(r,e)=>{function t(n,...o){if(Mt(n),r.nonceLength!==void 0){let u=o[0];if(!u)throw new Error("nonce / iv required");r.varSizeNonce?Mt(u):Mt(u,r.nonceLength)}let i=r.tagLength;i&&o[1]!==void 0&&Mt(o[1]);let s=e(n,...o),a=(u,d)=>{if(d!==void 0){if(u!==2)throw new Error("cipher output not supported");Mt(d)}},c=!1;return{encrypt(u,d){if(c)throw new Error("cannot encrypt() twice with same key + nonce");return c=!0,Mt(u),a(s.encrypt.length,d),s.encrypt(u,d)},decrypt(u,d){if(Mt(u),i&&u.length<i)throw new Error("invalid ciphertext length: smaller than tagLength="+i);return a(s.decrypt.length,d),s.decrypt(u,d)}}}return Object.assign(t,r),t};function zm(r,e,t=!0){if(e===void 0)return new Uint8Array(r);if(e.length!==r)throw new Error("invalid output length, expected "+r+", got: "+e.length);if(t&&!K_(e))throw new Error("invalid output, must be aligned");return e}function Wm(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}function K_(r){return r.byteOffset%4===0}function Bd(r){return Uint8Array.from(r)}function Yn(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}var M7=r=>Uint8Array.from(r.split("").map(e=>e.charCodeAt(0))),H_=M7("expand 16-byte k"),q_=M7("expand 32-byte k"),z_=Qn(H_),W_=Qn(q_);function Y(r,e){return r<<e|r>>>32-e}function Gm(r){return r.byteOffset%4===0}var Ud=64,G_=16,B7=2**32-1,O7=new Uint32Array;function Q_(r,e,t,n,o,i,s,a){let c=o.length,l=new Uint8Array(Ud),u=Qn(l),d=Gm(o)&&Gm(i),f=d?Qn(o):O7,h=d?Qn(i):O7;for(let p=0;p<c;s++){if(r(e,t,n,u,s,a),s>=B7)throw new Error("arx: counter overflow");let g=Math.min(Ud,c-p);if(d&&g===Ud){let m=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let y=0,x;y<G_;y++)x=m+y,h[x]=f[x]^u[y];p+=Ud;continue}for(let m=0,y;m<g;m++)y=p+m,i[y]=o[y]^l[m];p+=g}}function Qm(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:i,rounds:s}=N7({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return Od(o),Od(s),Hm(i),Hm(t),(a,c,l,u,d=0)=>{Mt(a),Mt(c),Mt(l);let f=l.length;if(u===void 0&&(u=new Uint8Array(f)),Mt(u),Od(d),d<0||d>=B7)throw new Error("arx: counter overflow");if(u.length<f)throw new Error(`arx: output (${u.length}) is shorter than data (${f})`);let h=[],p=a.length,g,m;if(p===32)h.push(g=Bd(a)),m=W_;else if(p===16&&t)g=new Uint8Array(32),g.set(a),g.set(a,16),m=z_,h.push(g);else throw new Error(`arx: invalid 32-byte key, got length=${p}`);Gm(c)||h.push(c=Bd(c));let y=Qn(g);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(m,y,Qn(c.subarray(0,16)),y),c=c.subarray(16)}let x=16-o;if(x!==c.length)throw new Error(`arx: nonce must be ${x} or 16 bytes`);if(x!==12){let I=new Uint8Array(12);I.set(c,i?0:12-c.length),c=I,h.push(c)}let w=Qn(c);return Q_(r,m,y,w,l,u,d,s),Yn(...h),u}}var bt=(r,e)=>r[e++]&255|(r[e++]&255)<<8,Ym=class{constructor(e){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,e=Md(e),Mt(e,32);let t=bt(e,0),n=bt(e,2),o=bt(e,4),i=bt(e,6),s=bt(e,8),a=bt(e,10),c=bt(e,12),l=bt(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 u=0;u<8;u++)this.pad[u]=bt(e,16+2*u)}process(e,t,n=!1){let o=n?0:2048,{h:i,r:s}=this,a=s[0],c=s[1],l=s[2],u=s[3],d=s[4],f=s[5],h=s[6],p=s[7],g=s[8],m=s[9],y=bt(e,t+0),x=bt(e,t+2),w=bt(e,t+4),I=bt(e,t+6),M=bt(e,t+8),D=bt(e,t+10),R=bt(e,t+12),S=bt(e,t+14),A=i[0]+(y&8191),F=i[1]+((y>>>13|x<<3)&8191),N=i[2]+((x>>>10|w<<6)&8191),U=i[3]+((w>>>7|I<<9)&8191),K=i[4]+((I>>>4|M<<12)&8191),C=i[5]+(M>>>1&8191),k=i[6]+((M>>>14|D<<2)&8191),E=i[7]+((D>>>11|R<<5)&8191),v=i[8]+((R>>>8|S<<8)&8191),_=i[9]+(S>>>5|o),T=0,H=T+A*a+F*(5*m)+N*(5*g)+U*(5*p)+K*(5*h);T=H>>>13,H&=8191,H+=C*(5*f)+k*(5*d)+E*(5*u)+v*(5*l)+_*(5*c),T+=H>>>13,H&=8191;let q=T+A*c+F*a+N*(5*m)+U*(5*g)+K*(5*p);T=q>>>13,q&=8191,q+=C*(5*h)+k*(5*f)+E*(5*d)+v*(5*u)+_*(5*l),T+=q>>>13,q&=8191;let X=T+A*l+F*c+N*a+U*(5*m)+K*(5*g);T=X>>>13,X&=8191,X+=C*(5*p)+k*(5*h)+E*(5*f)+v*(5*d)+_*(5*u),T+=X>>>13,X&=8191;let ce=T+A*u+F*l+N*c+U*a+K*(5*m);T=ce>>>13,ce&=8191,ce+=C*(5*g)+k*(5*p)+E*(5*h)+v*(5*f)+_*(5*d),T+=ce>>>13,ce&=8191;let ie=T+A*d+F*u+N*l+U*c+K*a;T=ie>>>13,ie&=8191,ie+=C*(5*m)+k*(5*g)+E*(5*p)+v*(5*h)+_*(5*f),T+=ie>>>13,ie&=8191;let de=T+A*f+F*d+N*u+U*l+K*c;T=de>>>13,de&=8191,de+=C*a+k*(5*m)+E*(5*g)+v*(5*p)+_*(5*h),T+=de>>>13,de&=8191;let ve=T+A*h+F*f+N*d+U*u+K*l;T=ve>>>13,ve&=8191,ve+=C*c+k*a+E*(5*m)+v*(5*g)+_*(5*p),T+=ve>>>13,ve&=8191;let Oe=T+A*p+F*h+N*f+U*d+K*u;T=Oe>>>13,Oe&=8191,Oe+=C*l+k*c+E*a+v*(5*m)+_*(5*g),T+=Oe>>>13,Oe&=8191;let Me=T+A*g+F*p+N*h+U*f+K*d;T=Me>>>13,Me&=8191,Me+=C*u+k*l+E*c+v*a+_*(5*m),T+=Me>>>13,Me&=8191;let Ve=T+A*m+F*g+N*p+U*h+K*f;T=Ve>>>13,Ve&=8191,Ve+=C*d+k*u+E*l+v*c+_*a,T+=Ve>>>13,Ve&=8191,T=(T<<2)+T|0,T=T+H|0,H=T&8191,T=T>>>13,q+=T,i[0]=H,i[1]=q,i[2]=X,i[3]=ce,i[4]=ie,i[5]=de,i[6]=ve,i[7]=Oe,i[8]=Me,i[9]=Ve}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;Yn(n)}update(e){Km(this);let{buffer:t,blockLen:n}=this;e=Md(e);let 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(){Yn(this.h,this.r,this.buffer,this.pad)}digestInto(e){Km(this),R7(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 Y_(r){let e=(n,o)=>r(o).update(Md(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var U7=Y_(r=>new Ym(r));function $7(r,e,t,n,o,i=20){let s=r[0],a=r[1],c=r[2],l=r[3],u=e[0],d=e[1],f=e[2],h=e[3],p=e[4],g=e[5],m=e[6],y=e[7],x=o,w=t[0],I=t[1],M=t[2],D=s,R=a,S=c,A=l,F=u,N=d,U=f,K=h,C=p,k=g,E=m,v=y,_=x,T=w,H=I,q=M;for(let ce=0;ce<i;ce+=2)D=D+F|0,_=Y(_^D,16),C=C+_|0,F=Y(F^C,12),D=D+F|0,_=Y(_^D,8),C=C+_|0,F=Y(F^C,7),R=R+N|0,T=Y(T^R,16),k=k+T|0,N=Y(N^k,12),R=R+N|0,T=Y(T^R,8),k=k+T|0,N=Y(N^k,7),S=S+U|0,H=Y(H^S,16),E=E+H|0,U=Y(U^E,12),S=S+U|0,H=Y(H^S,8),E=E+H|0,U=Y(U^E,7),A=A+K|0,q=Y(q^A,16),v=v+q|0,K=Y(K^v,12),A=A+K|0,q=Y(q^A,8),v=v+q|0,K=Y(K^v,7),D=D+N|0,q=Y(q^D,16),E=E+q|0,N=Y(N^E,12),D=D+N|0,q=Y(q^D,8),E=E+q|0,N=Y(N^E,7),R=R+U|0,_=Y(_^R,16),v=v+_|0,U=Y(U^v,12),R=R+U|0,_=Y(_^R,8),v=v+_|0,U=Y(U^v,7),S=S+K|0,T=Y(T^S,16),C=C+T|0,K=Y(K^C,12),S=S+K|0,T=Y(T^S,8),C=C+T|0,K=Y(K^C,7),A=A+F|0,H=Y(H^A,16),k=k+H|0,F=Y(F^k,12),A=A+F|0,H=Y(H^A,8),k=k+H|0,F=Y(F^k,7);let X=0;n[X++]=s+D|0,n[X++]=a+R|0,n[X++]=c+S|0,n[X++]=l+A|0,n[X++]=u+F|0,n[X++]=d+N|0,n[X++]=f+U|0,n[X++]=h+K|0,n[X++]=p+C|0,n[X++]=g+k|0,n[X++]=m+E|0,n[X++]=y+v|0,n[X++]=x+_|0,n[X++]=w+T|0,n[X++]=I+H|0,n[X++]=M+q|0}function X_(r,e,t,n){let o=r[0],i=r[1],s=r[2],a=r[3],c=e[0],l=e[1],u=e[2],d=e[3],f=e[4],h=e[5],p=e[6],g=e[7],m=t[0],y=t[1],x=t[2],w=t[3];for(let M=0;M<20;M+=2)o=o+c|0,m=Y(m^o,16),f=f+m|0,c=Y(c^f,12),o=o+c|0,m=Y(m^o,8),f=f+m|0,c=Y(c^f,7),i=i+l|0,y=Y(y^i,16),h=h+y|0,l=Y(l^h,12),i=i+l|0,y=Y(y^i,8),h=h+y|0,l=Y(l^h,7),s=s+u|0,x=Y(x^s,16),p=p+x|0,u=Y(u^p,12),s=s+u|0,x=Y(x^s,8),p=p+x|0,u=Y(u^p,7),a=a+d|0,w=Y(w^a,16),g=g+w|0,d=Y(d^g,12),a=a+d|0,w=Y(w^a,8),g=g+w|0,d=Y(d^g,7),o=o+l|0,w=Y(w^o,16),p=p+w|0,l=Y(l^p,12),o=o+l|0,w=Y(w^o,8),p=p+w|0,l=Y(l^p,7),i=i+u|0,m=Y(m^i,16),g=g+m|0,u=Y(u^g,12),i=i+u|0,m=Y(m^i,8),g=g+m|0,u=Y(u^g,7),s=s+d|0,y=Y(y^s,16),f=f+y|0,d=Y(d^f,12),s=s+d|0,y=Y(y^s,8),f=f+y|0,d=Y(d^f,7),a=a+c|0,x=Y(x^a,16),h=h+x|0,c=Y(c^h,12),a=a+c|0,x=Y(x^a,8),h=h+x|0,c=Y(c^h,7);let I=0;n[I++]=o,n[I++]=i,n[I++]=s,n[I++]=a,n[I++]=m,n[I++]=y,n[I++]=x,n[I++]=w}var Z_=Qm($7,{counterRight:!1,counterLength:4,allowShortKeys:!1}),j_=Qm($7,{counterRight:!1,counterLength:8,extendNonceFn:X_,allowShortKeys:!1});var J_=new Uint8Array(16),F7=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(J_.subarray(t))},eC=new Uint8Array(32);function V7(r,e,t,n,o){let i=r(e,t,eC),s=U7.create(i);o&&F7(s,o),F7(s,n);let a=new Uint8Array(16),c=D7(a);Wm(c,0,BigInt(o?o.length:0),!0),Wm(c,8,BigInt(n.length),!0),s.update(a);let l=s.digest();return Yn(i,a),l}var K7=r=>(e,t,n)=>({encrypt(i,s){let a=i.length;s=zm(a+16,s,!1),s.set(i);let c=s.subarray(0,-16);r(e,t,c,c,1);let l=V7(r,e,t,c,n);return s.set(l,a),Yn(l),s},decrypt(i,s){s=zm(i.length-16,s,!1);let a=i.subarray(0,-16),c=i.subarray(-16),l=V7(r,e,t,a,n);if(!L7(c,l))throw new Error("invalid tag");return s.set(i.subarray(0,-16)),r(e,t,s,s,1),Yn(l),s}}),Xm=qm({blockSize:64,nonceLength:12,tagLength:16},K7(Z_)),FY=qm({blockSize:64,nonceLength:24,tagLength:16},K7(j_));function q7(r,e,t){return ai(r),t===void 0&&(t=new Uint8Array(r.outputLen)),Ao(r,qr(t),qr(e))}var Zm=new Uint8Array([0]),H7=new Uint8Array;function z7(r,e,t,n=32){if(ai(r),po(n),n>255*r.outputLen)throw new Error("Length should be <= 255*HashLen");let o=Math.ceil(n/r.outputLen);t===void 0&&(t=H7);let i=new Uint8Array(o*r.outputLen),s=Ao.create(r,e),a=s._cloneInto(),c=new Uint8Array(s.outputLen);for(let l=0;l<o;l++)Zm[0]=l+1,a.update(l===0?H7:c).update(t).update(Zm).digestInto(c),i.set(c,r.outputLen*l),s._cloneInto(a);return s.destroy(),a.destroy(),c.fill(0),Zm.fill(0),i.slice(0,n)}var jm={hashSHA256(r){return Ar(r.subarray())},getHKDF(r,e){let t=q7(Ar,e,r),o=z7(Ar,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=Da.utils.randomPrivateKey();return{publicKey:Da.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:Da.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return Da.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return Xm(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return Xm(n,e,t).decrypt(r.subarray(),o)}};var W7=jm;function G7(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 Ks=r=>{let e=Qe(2);return e[0]=r>>8,e[1]=r,e};Ks.bytes=2;var Ac=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)};Ac.bytes=2;function Q7(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 Jm(r,e){!e.enabled||!$s||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${O(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${O(r.privateKey,"hex")}`)):e("Missing local static keys."))}function e3(r,e){!e.enabled||!$s||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${O(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${O(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function Y7(r,e){!e.enabled||!$s||e(r?`REMOTE_STATIC_PUBLIC_KEY ${O(r.subarray(),"hex")}`:"Missing remote static public key.")}function t3(r,e){!e.enabled||!$s||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${O(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function r3(r,e,t){!t.enabled||!$s||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&O(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&O(e.k,"hex")}`))}function sr(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=Qe(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var Hs=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var tC=0,rC=4294967295,nC="Cipherstate has reached maximum n, a new handshake must be performed",Fd=class{n;bytes;view;constructor(e=tC){this.n=e,this.bytes=se(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>rC)throw new Error(nC)}};var Li=se(0),qs=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new Fd(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}},n3=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=L(t,"utf-8");this.h=oC(e,n),this.ck=this.h,this.cs=new qs(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new qs(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new ae(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,Li);return[new qs(this.crypto,e),new qs(this.crypto,t)]}},o3=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 n3(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()}},Ic=class extends o3{writeMessageA(e){return new ae(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new ae(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new ae(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new Hs(`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 Hs(`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 Hs(`handshake stage 2 validation fail: ${t.message}`)}}};function oC(r,e){if(e.length<=32){let t=se(32);return t.set(e),t}else return r.hash(e)}var Vd;(function(r){let e;r.codec=()=>(e==null&&(e=re((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 Pe('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 Pe('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)=>ee(t,r.codec(),n)})(Vd||(Vd={}));var Tc;(function(r){let e;r.codec=()=>(e==null&&(e=re((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),Vd.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={identityKey:se(0),identitySig:se(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=Vd.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)=>ee(t,r.codec(),n)})(Tc||(Tc={}));async function i3(r,e,t){let n=await r.sign(X7(e));return Tc.encode({identityKey:Nt(r.publicKey),identitySig:n,extensions:t})}async function s3(r,e,t){try{let n=Tc.decode(r),o=rt(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=X7(e);if(!await o.verify(i,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new ll(n.message)}}function X7(r){let e=L("noise-libp2p-static-key:");return r instanceof Uint8Array?ke([e,r],e.length+r.length):(r.prepend(e),r)}async function Z7(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await i3(i,a.publicKey,l),d=new Ic({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:a});Jm(d.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(d.writeMessageA(Li),e),t.trace("Stage 0 - Initiator finished sending first message."),e3(d.e,t),t.trace("Stage 1 - Initiator waiting to receive first message from responder...");let f=d.readMessageB(await n.read(e));t.trace("Stage 1 - Initiator received the message."),t3(d.re,t),Y7(d.rs,t),t.trace("Initiator going to check remote's signature...");let h=await s3(f,d.rs,c);t.trace("All good with the signature!"),t.trace("Stage 2 - Initiator sending third handshake message."),await n.write(d.writeMessageC(u),e),t.trace("Stage 2 - Initiator sent message with signed payload.");let[p,g]=d.ss.split();return r3(p,g,t),{payload:h,encrypt:m=>p.encryptWithAd(Li,m),decrypt:(m,y)=>g.decryptWithAd(Li,m,y)}}async function j7(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await i3(i,a.publicKey,l),d=new Ic({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:a});Jm(d.s,t),t.trace("Stage 0 - Responder waiting to receive first message."),d.readMessageA(await n.read(e)),t.trace("Stage 0 - Responder received first message."),t3(d.re,t),t.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await n.write(d.writeMessageB(u),e),t.trace("Stage 1 - Responder sent the second handshake message with signed payload."),e3(d.e,t),t.trace("Stage 2 - Responder waiting for third handshake message...");let f=d.readMessageC(await n.read(e));t.trace("Stage 2 - Responder received the message, finished handshake.");let h=await s3(f,d.rs,c),[p,g]=d.ss.split();return r3(p,g,t),{payload:h,encrypt:m=>g.encryptWithAd(Li,m),decrypt:(m,y)=>p.decryptWithAd(Li,m,y)}}var e9=16;function t9(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65519){let i=o+65519;i>n.length&&(i=n.length);let s;n instanceof Uint8Array?s=r.encrypt(n.subarray(o,i)):s=r.encrypt(n.sublist(o,i)),e?.encryptedPackets.increment(),yield new ae(Ks(s.byteLength),s)}}}function r9(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65535){let i=o+65535;if(i>n.length&&(i=n.length),i-e9<o)throw new Error("Invalid chunk");let s=n.sublist(o,i),a=n.subarray(o,i-e9);try{let c=r.decrypt(s,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var $d=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:i,prologueBytes:s}=t,{metrics:a}=e;this.components=e;let c=i??W7;this.crypto=G7(c),this.extensions={webtransportCerthashes:[],...o},this.metrics=a?Q7(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=s??se(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[Ae]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=In(e,{lengthEncoder:Ks,lengthDecoder:Ac,maxDataLength:65535}),o=await this.performHandshakeInitiator(n,this.components.privateKey,t?.remotePeer?.publicKey,t),i=await this.createSecureConnection(n,o);e.source=i.source,e.sink=i.sink;let s=rt(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:vn(s),streamMuxer:this.getStreamMuxer(o.payload.extensions?.streamMuxers)}}getStreamMuxer(e){if(e==null)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 ul("Early muxer negotiation was requested but the initiator and responder had no common muxers")}async secureInbound(e,t){let n=In(e,{lengthEncoder:Ks,lengthDecoder:Ac,maxDataLength:65535}),o=await this.performHandshakeResponder(n,this.components.privateKey,t?.remotePeer?.publicKey,t),i=await this.createSecureConnection(n,o);e.source=i.source,e.sink=i.sink;let s=rt(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:vn(s),streamMuxer:this.getStreamMuxer(o.payload.extensions?.streamMuxers)}}async performHandshakeInitiator(e,t,n,o){let i;try{i=await Z7({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:[...this.components.upgrader.getStreamMuxers().keys()],webtransportCerthashes:[],...this.extensions}},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return i}async performHandshakeResponder(e,t,n,o){let i;try{i=await j7({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:[...this.components.upgrader.getStreamMuxers().keys()],webtransportCerthashes:[],...this.extensions}},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return i}async createSecureConnection(e,t){let[n,o]=P7(),i=e.unwrap();return await ut(n,t9(t,this.metrics),i,s=>Vr(s,{lengthDecoder:Ac}),r9(t,this.metrics),n),o}};function Kd(r={}){return e=>new $d(e,r)}function Hd(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")}var an=class extends Error{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e),this.name="InvalidFrameError"}},zs=class extends Error{static name="UnrequestedPingError";constructor(e="Unrequested ping error"){super(e),this.name="UnrequestedPingError"}},Ws=class extends Error{static name="NotMatchingPingError";constructor(e="Unrequested ping error"){super(e),this.name="NotMatchingPingError"}},qd=class extends Error{static name="InvalidStateError";constructor(e="Invalid state"){super(e),this.name="InvalidStateError"}},zd=class extends Error{static name="StreamAlreadyExistsError";constructor(e="Strean already exists"){super(e),this.name="StreamAlreadyExistsError"}},Wd=class extends Error{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e),this.name="DecodeInvalidVersionError"}},Gd=class extends Error{static name="BothClientsError";constructor(e="Both clients"){super(e),this.name="BothClientsError"}},Gs=class extends Error{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e),this.name="ReceiveWindowExceededError"}};var n9=new Set([an.name,zs.name,Ws.name,zd.name,Wd.name,Gd.name,Gs.name]),Cc=256*1024,o9=16*1024*1024;var i9={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:Cc,maxStreamWindowSize:o9,maxMessageSize:64*1024};function s9(r){if(r.keepAliveInterval<=0)throw new P("keep-alive interval must be positive");if(r.maxInboundStreams<0)throw new P("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams<0)throw new P("max outbound streams must be larger or equal 0");if(r.initialStreamWindowSize<Cc)throw new P("InitialStreamWindowSize must be larger or equal 256 kB");if(r.maxStreamWindowSize<r.initialStreamWindowSize)throw new P("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.maxStreamWindowSize>2**32-1)throw new P("MaxStreamWindowSize must be less than equal MAX_UINT32");if(r.maxMessageSize<1024)throw new P("MaxMessageSize must be greater than a kilobyte")}var et;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(et||(et={}));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 yZ=Object.values(ze).filter(r=>typeof r!="string"),a9=0,Pr;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(Pr||(Pr={}));var Oo=12;var c9=2**24;function iC(r){if(r[0]!==a9)throw new an("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*c9+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*c9+(r[9]<<16)+(r[10]<<8)+r[11]}}var Qd=class{source;buffer;frameInProgress;constructor(e){this.source=sC(e),this.buffer=new ae,this.frameInProgress=!1}async*emitFrames(){for await(let e of this.source)for(this.buffer.append(e);;){let t=this.readHeader();if(t===void 0)break;let{type:n,length:o}=t;n===et.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,o)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new qd("decoding frame already in progress");if(this.buffer.length<Oo)return;let e=iC(this.buffer.subarray(0,Oo));return this.buffer.consume(Oo),e}async readBytes(e){if(this.buffer.length<e){for await(let n of this.source)if(this.buffer.append(n),this.buffer.length>=e)break}let t=this.buffer.sublist(0,e);return this.buffer.consume(e),this.frameInProgress=!1,t}};function sC(r){if(r[Symbol.iterator]!==void 0){let e=r[Symbol.iterator]();return e.return=void 0,{[Symbol.iterator](){return e}}}else if(r[Symbol.asyncIterator]!==void 0){let e=r[Symbol.asyncIterator]();return e.return=void 0,{[Symbol.asyncIterator](){return e}}}else throw new Error("a source must be either an iterable or an async iterable")}function a3(r){let e=new Uint8Array(Oo);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}function l9(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function Yd(r,e){let t=Hd(r).return?.();l9(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var aC=5e3;function c3(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Mo=class{id;direction;timeline;protocol;metadata;source;status;readStatus;writeStatus;log;sinkController;sinkEnd;closed;endErr;streamSource;onEnd;onCloseRead;onCloseWrite;onReset;onAbort;sendCloseWriteTimeout;sendingData;constructor(e){this.sinkController=new AbortController,this.sinkEnd=j(),this.closed=j(),this.log=e.log,this.status="open",this.readStatus="ready",this.writeStatus="ready",this.id=e.id,this.metadata=e.metadata??{},this.direction=e.direction,this.timeline={open:Date.now()},this.sendCloseWriteTimeout=e.sendCloseWriteTimeout??aC,this.onEnd=e.onEnd,this.onCloseRead=e?.onCloseRead,this.onCloseWrite=e?.onCloseWrite,this.onReset=e?.onReset,this.onAbort=e?.onAbort,this.source=this.streamSource=Zt({onEnd:t=>{t!=null?this.log.trace("source ended with error",t):this.log.trace("source ended"),this.onSourceEnd(t)}}),this.sink=this.sink.bind(this)}async sink(e){if(this.writeStatus!=="ready")throw new jo(`writable end state is "${this.writeStatus}" not "ready"`);try{this.writeStatus="writing";let t={signal:this.sinkController.signal};if(this.direction==="outbound"){let o=this.sendNewStream(t);c3(o)&&await o}let n=()=>{Yd(e,this.log)};try{this.sinkController.signal.addEventListener("abort",n),this.log.trace("sink reading from source");for await(let o of e){o=o instanceof Uint8Array?new ae(o):o;let i=this.sendData(o,t);c3(i)&&(this.sendingData=j(),await i,this.sendingData.resolve(),this.sendingData=void 0)}}finally{this.sinkController.signal.removeEventListener("abort",n)}this.log.trace('sink finished reading from source, write status is "%s"',this.writeStatus),this.writeStatus==="writing"&&(this.writeStatus="closing",this.log.trace("send close write to remote"),await this.sendCloseWrite({signal:AbortSignal.timeout(this.sendCloseWriteTimeout)}),this.writeStatus="closed"),this.onSinkEnd()}catch(t){throw this.log.trace("sink ended with error, calling abort with error",t),this.abort(t),t}finally{this.log.trace("resolve sink end"),this.sinkEnd.resolve()}}onSourceEnd(e){this.timeline.closeRead==null&&(this.timeline.closeRead=Date.now(),this.readStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseRead?.(),this.timeline.closeWrite!=null?(this.log.trace("source and sink ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("source ended, waiting for sink to end"))}onSinkEnd(e){this.timeline.closeWrite==null&&(this.timeline.closeWrite=Date.now(),this.writeStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseWrite?.(),this.timeline.closeRead!=null?(this.log.trace("sink and source ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("sink ended, waiting for source to end"))}async close(e){this.status==="open"&&(this.log.trace("closing gracefully"),this.status="closing",await Ge(Promise.all([this.closeWrite(e),this.closeRead(e),this.closed.promise]),e?.signal),this.status="closed",this.log.trace("closed gracefully"))}async closeRead(e={}){if(this.readStatus==="closing"||this.readStatus==="closed")return;this.log.trace('closing readable end of stream with starting read status "%s"',this.readStatus);let t=this.readStatus;this.readStatus="closing",this.status!=="reset"&&this.status!=="aborted"&&this.timeline.closeRead==null&&(this.log.trace("send close read to remote"),await this.sendCloseRead(e)),t==="ready"&&(this.log.trace("ending internal source queue with %d queued bytes",this.streamSource.readableLength),this.streamSource.end()),this.log.trace("closed readable end of stream")}async closeWrite(e={}){this.writeStatus==="closing"||this.writeStatus==="closed"||(this.log.trace('closing writable end of stream with starting write status "%s"',this.writeStatus),this.writeStatus==="ready"&&(this.log.trace("sink was never sunk, sink an empty array"),await Ge(this.sink([]),e.signal)),this.writeStatus==="writing"&&(this.sendingData!=null&&await Ge(this.sendingData.promise,e.signal),this.log.trace("aborting source passed to .sink"),this.sinkController.abort(),await Ge(this.sinkEnd.promise,e.signal)),this.writeStatus="closed",this.log.trace("closed writable end of stream"))}abort(e){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;this.log("abort with error",e),this.log("try to send reset to remote");let t=this.sendReset();c3(t)&&t.catch(n=>{this.log.error("error sending reset message",n)}),this.status="aborted",this.timeline.abort=Date.now(),this._closeSinkAndSource(e),this.onAbort?.(e)}reset(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;let e=new fl("stream reset");this.status="reset",this.timeline.reset=Date.now(),this._closeSinkAndSource(e),this.onReset?.()}_closeSinkAndSource(e){this._closeSink(e),this._closeSource(e)}_closeSink(e){this.writeStatus==="writing"&&(this.log.trace("end sink source"),this.sinkController.abort()),this.onSinkEnd(e)}_closeSource(e){this.readStatus!=="closing"&&this.readStatus!=="closed"&&(this.log.trace("ending source with %d bytes to be read by consumer",this.streamSource.readableLength),this.readStatus="closing",this.streamSource.end(e))}remoteCloseWrite(){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("received remote close write but local source is already closed");return}this.log.trace("remote close write"),this._closeSource()}remoteCloseRead(){if(this.writeStatus==="closing"||this.writeStatus==="closed"){this.log("received remote close read but local sink is already closed");return}this.log.trace("remote close read"),this._closeSink()}destroy(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset"){this.log("received destroy but we are already closed");return}this.log.trace("stream destroyed"),this._closeSinkAndSource()}sourcePush(e){this.streamSource.push(e)}sourceReadableLength(){return this.streamSource.readableLength}};var Rr;(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"})(Rr||(Rr={}));var Xd=class extends Mo{name;state;config;_id;sendWindowCapacity;sendWindowCapacityUpdate;recvWindow;recvWindowCapacity;epochStart;getRTT;sendFrame;constructor(e){super({...e,onEnd:t=>{this.state=Rr.Finished,e.onEnd?.(t)}}),this.config=e.config,this._id=parseInt(e.id,10),this.name=e.name,this.state=e.state,this.sendWindowCapacity=Cc,this.recvWindow=this.config.initialStreamWindowSize,this.recvWindowCapacity=this.recvWindow,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame,this.source=Ei(this.source,()=>{this.sendWindowUpdate()})}async sendNewStream(){}async sendData(e,t={}){for(e=e.sublist();e.byteLength!==0;){if(this.sendWindowCapacity===0&&(this.log?.trace("wait for send window capacity, status %s",this.status),await this.waitForSendWindowCapacity(t),this.status==="closed"||this.status==="aborted"||this.status==="reset")){this.log?.trace("%s while waiting for send window capacity",this.status);return}let n=Math.min(this.sendWindowCapacity,this.config.maxMessageSize-Oo,e.length),o=this.getSendFlags();this.sendFrame({type:et.Data,flag:o,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:et.WindowUpdate,flag:ze.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|ze.FIN;this.sendFrame({type:et.WindowUpdate,flag:e,streamID:this._id,length:0})}async sendCloseRead(){}async waitForSendWindowCapacity(e={}){if(this.sendWindowCapacity>0)return;let t,n,o=()=>{this.status==="open"||this.status==="closing"?n(new Vt("Stream aborted")):t()};e.signal?.addEventListener("abort",o);try{await new Promise((i,s)=>{this.sendWindowCapacityUpdate=()=>{i()},n=s,t=i})}finally{e.signal?.removeEventListener("abort",o)}}handleWindowUpdate(e){this.log?.trace("stream received window update id=%s",this._id),this.processFlags(e.flag);let t=this.sendWindowCapacity;this.sendWindowCapacity+=e.length,t===0&&e.length>0&&this.sendWindowCapacityUpdate?.()}async handleData(e,t){if(this.log?.trace("stream received data id=%s",this._id),this.processFlags(e.flag),this.recvWindowCapacity<e.length)throw new Gs("Receive window exceeded");let n=await t();this.recvWindowCapacity-=e.length,this.sourcePush(n)}processFlags(e){(e&ze.ACK)===ze.ACK&&this.state===Rr.SYNSent&&(this.state=Rr.Established),(e&ze.FIN)===ze.FIN&&this.remoteCloseWrite(),(e&ze.RST)===ze.RST&&this.reset()}getSendFlags(){switch(this.state){case Rr.Init:return this.state=Rr.SYNSent,ze.SYN;case Rr.SYNReceived:return this.state=Rr.Established,ze.ACK;default:return 0}}sendWindowUpdate(){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.config.maxStreamWindowSize)),this.recvWindowCapacity>=this.recvWindow&&e===0)return;let o=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:et.WindowUpdate,flag:e,streamID:this._id,length:o})}};var u9="/yamux/1.0.0",cC=500,Zd=class{protocol=u9;_components;_init;constructor(e,t={}){this._components=e,this._init=t}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[Ae]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new l3(this._components,{...this._init,...e})}},l3=class{protocol=u9;source;sink;config;log;logger;closeController;nextStreamID;_streams;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;onIncomingStream;onStreamEnd;constructor(e,t){this.client=t.direction==="outbound",this.config={...i9,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),s9(this.config),this.closeController=new AbortController,this.closeController.signal,this.onIncomingStream=t.onIncomingStream,this.onStreamEnd=t.onStreamEnd,this._streams=new Map,this.source=Zt({onEnd:()=>{this.log?.trace("muxer source ended"),this._streams.forEach(n=>{n.destroy()})}}),this.sink=async n=>{let o=()=>{let a=Hd(n);if(a.return!=null){let c=a.return();lC(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},i,s;try{let a=new Qd(n);try{this.closeController.signal.addEventListener("abort",o);for await(let c of a.emitFrames())await this.handleFrame(c.header,c.readData)}finally{this.closeController.signal.removeEventListener("abort",o)}i=Pr.NormalTermination}catch(a){n9.has(a.name)?(this.log?.error("protocol error in sink",a),i=Pr.ProtocolError):(this.log?.error("internal error in sink",a),i=Pr.InternalError),s=a}this.log?.trace("muxer sink ended"),s!=null?this.abort(s,i):await this.close({reason:i})},this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log?.trace("muxer created"),this.config.enableKeepAlive&&this.keepAliveLoop().catch(n=>this.log?.error("keepalive error: %s",n)),this.ping().catch(n=>this.log?.error("ping error: %s",n))}get streams(){return Array.from(this._streams.values())}newStream(e){if(this.remoteGoAway!==void 0)throw new mn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new mn("Muxer closed locally");let t=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.config.maxOutboundStreams)throw new lo("max outbound streams exceeded");this.log?.trace("new outgoing stream id=%s",t);let n=this._newStream(t,e,Rr.Init,"outbound");return this._streams.set(t,n),this.numOutboundStreams++,n.sendWindowUpdate(),n}async ping(){if(this.remoteGoAway!==void 0)throw new mn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new mn("Muxer closed locally");if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((o,i)=>{let s=()=>{i(new mn("Muxer closed locally"))};this.closeController.signal.addEventListener("abort",s,{once:!0}),e=()=>{this.closeController.signal.removeEventListener("abort",s),o()}}),resolve:e};let t=Date.now();this.sendPing(this.activePing.id);try{await this.activePing.promise}finally{delete this.activePing}let n=Date.now();this.rtt=n-t}else await this.activePing.promise;return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.closeController.signal.aborted)return;let t=e?.reason??Pr.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(cC);e={...e,signal:n}}try{await Promise.all([...this._streams.values()].map(async n=>n.close(e))),this.sendGoAway(t),this._closeMuxer()}catch(n){this.abort(n)}}abort(e,t){if(!this.closeController.signal.aborted){t=t??Pr.InternalError,this.log?.error("muxer abort reason=%s error=%s",t,e);for(let n of this._streams.values())n.abort(e);this.sendGoAway(t),this._closeMuxer()}}isClosed(){return this.closeController.signal.aborted}_closeMuxer(){this.closeController.abort(),this.source.end()}_newStream(e,t,n,o){if(this._streams.get(e)!=null)throw new P("Stream already exists with that id");let i=new Xd({id:e.toString(),name:t,state:n,direction:o,sendFrame:this.sendFrame.bind(this),onEnd:()=>{this.closeStream(e),this.onStreamEnd?.(i)},log:this.logger.forComponent(`libp2p:yamux:${o}:${e}`),config:this.config,getRTT:this.getRTT.bind(this)});return i}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--,this._streams.delete(e)}async keepAliveLoop(){let e=new Promise((t,n)=>{this.closeController.signal.addEventListener("abort",n,{once:!0})});for(this.log?.trace("muxer keepalive enabled interval=%s",this.config.keepAliveInterval);;){let t;try{await Promise.race([e,new Promise(n=>{t=setTimeout(n,this.config.keepAliveInterval)})]),this.ping().catch(n=>this.log?.error("ping error: %s",n))}catch{clearInterval(t);return}}}async handleFrame(e,t){let{streamID:n,type:o,length:i}=e;if(this.log?.trace("received frame %o",e),n===0)switch(o){case et.Ping:{this.handlePing(e);return}case et.GoAway:{this.handleGoAway(i);return}default:throw new an("Invalid frame type")}else switch(e.type){case et.Data:case et.WindowUpdate:{await this.handleStreamMessage(e,t);return}default:throw new an("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 an("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new zs("ping not requested");if(this.activePing.id!==e)throw new Ws("ping doesn't match our id");this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",Pr[e]??"unknown"),this.remoteGoAway=e;for(let t of this._streams.values())t.reset();this._closeMuxer()}async handleStreamMessage(e,t){let{streamID:n,flag:o,type:i}=e;(o&ze.SYN)===ze.SYN&&this.incomingStream(n);let s=this._streams.get(n);if(s===void 0){if(i===et.Data){if(this.log?.("discarding data for stream id=%s",n),t===void 0)throw new Error("unreachable");await t()}else this.log?.trace("frame for missing stream id=%s",n);return}switch(i){case et.WindowUpdate:{s.handleWindowUpdate(e);return}case et.Data:{if(t===void 0)throw new Error("unreachable");await s.handleData(e,t);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new P("Both endpoints are clients");if(this._streams.has(e))return;if(this.log?.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:et.WindowUpdate,flag:ze.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.config.maxInboundStreams){this.log?.("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:et.WindowUpdate,flag:ze.RST,streamID:e,length:0});return}let t=this._newStream(e,void 0,Rr.SYNReceived,"inbound");this.numInboundStreams++,this._streams.set(e,t),this.onIncomingStream?.(t)}sendFrame(e,t){if(this.log?.trace("sending frame %o",e),e.type===et.Data){if(t===void 0)throw new an("Invalid frame");this.source.push(new ae(a3(e),t))}else this.source.push(a3(e))}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:et.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=Pr.NormalTermination){this.log?.("sending GoAway reason=%s",Pr[e]),this.localGoAway=e,this.sendFrame({type:et.GoAway,flag:0,streamID:0,length:e})}};function lC(r){return r!=null&&typeof r.then=="function"}function d9(r={}){return e=>new Zd(e,r)}var uC=41;function jd(r){try{let[[e,t]]=r.stringTuples();if(t==null)return!1;if(e===uC)return Y5("2000::/3",t)}catch{}return!1}function Jd(r){try{let[[e]]=r.stringTuples();return e===4||e===41}catch{}return!1}function Dr(r){try{if(!Jd(r))return!1;let[[,e]]=r.stringTuples();return e==null?!1:Gt(e)??!1}catch{}return!0}function f9(r,e,t){let n,o;function i(){let a={signal:o.signal};if(t?.timeout!=null){let c=le([o.signal,AbortSignal.timeout(t.timeout)]);a.signal=c}Promise.resolve().then(async()=>{await r(a)}).catch(()=>{}).finally(()=>{o.signal.aborted||(n=setTimeout(i,e))})}let s=!1;return{setInterval:a=>{e=a,n!=null&&(clearTimeout(n),n=setTimeout(i,e))},setTimeout:a=>{t==null&&(t={}),t.timeout=a},start:()=>{s||(s=!0,o=new AbortController,o.signal,t?.runImmediately===!0?queueMicrotask(()=>{i()}):n=setTimeout(i,e))},stop:()=>{clearTimeout(n),o?.abort(),s=!1}}}function We(r,e){let t=In(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(a=>i.encode(a)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var h9="libp2p",p9="autonat",m9="1.0.0";var Fe;(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=()=>He(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=()=>He(o)}(n=r.ResponseStatus||(r.ResponseStatus={}));let i;(function(l){let u;l.codec=()=>(u==null&&(u=re((d,f,h={})=>{if(h.lengthDelimited!==!1&&f.fork(),d.id!=null&&(f.uint32(10),f.bytes(d.id)),d.addrs!=null)for(let p of d.addrs)f.uint32(18),f.bytes(p);h.lengthDelimited!==!1&&f.ldelim()},(d,f,h={})=>{let p={addrs:[]},g=f==null?d.len:d.pos+f;for(;d.pos<g;){let m=d.uint32();switch(m>>>3){case 1:{p.id=d.bytes();break}case 2:{if(h.limits?.addrs!=null&&p.addrs.length===h.limits.addrs)throw new Pe('Decode error - map field "addrs" had too many elements');p.addrs.push(d.bytes());break}default:{d.skipType(m&7);break}}}return p})),u),l.encode=d=>te(d,l.codec()),l.decode=(d,f)=>ee(d,l.codec(),f)})(i=r.PeerInfo||(r.PeerInfo={}));let s;(function(l){let u;l.codec=()=>(u==null&&(u=re((d,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),d.peer!=null&&(f.uint32(10),r.PeerInfo.codec().encode(d.peer,f)),h.lengthDelimited!==!1&&f.ldelim()},(d,f,h={})=>{let p={},g=f==null?d.len:d.pos+f;for(;d.pos<g;){let m=d.uint32();switch(m>>>3){case 1:{p.peer=r.PeerInfo.codec().decode(d,d.uint32(),{limits:h.limits?.peer});break}default:{d.skipType(m&7);break}}}return p})),u),l.encode=d=>te(d,l.codec()),l.decode=(d,f)=>ee(d,l.codec(),f)})(s=r.Dial||(r.Dial={}));let a;(function(l){let u;l.codec=()=>(u==null&&(u=re((d,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),d.status!=null&&(f.uint32(8),r.ResponseStatus.codec().encode(d.status,f)),d.statusText!=null&&(f.uint32(18),f.string(d.statusText)),d.addr!=null&&(f.uint32(26),f.bytes(d.addr)),h.lengthDelimited!==!1&&f.ldelim()},(d,f,h={})=>{let p={},g=f==null?d.len:d.pos+f;for(;d.pos<g;){let m=d.uint32();switch(m>>>3){case 1:{p.status=r.ResponseStatus.codec().decode(d);break}case 2:{p.statusText=d.string();break}case 3:{p.addr=d.bytes();break}default:{d.skipType(m&7);break}}}return p})),u),l.encode=d=>te(d,l.codec()),l.decode=(d,f)=>ee(d,l.codec(),f)})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=re((l,u,d={})=>{d.lengthDelimited!==!1&&u.fork(),l.type!=null&&(u.uint32(8),r.MessageType.codec().encode(l.type,u)),l.dial!=null&&(u.uint32(18),r.Dial.codec().encode(l.dial,u)),l.dialResponse!=null&&(u.uint32(26),r.DialResponse.codec().encode(l.dialResponse,u)),d.lengthDelimited!==!1&&u.ldelim()},(l,u,d={})=>{let f={},h=u==null?l.len:l.pos+u;for(;l.pos<h;){let p=l.uint32();switch(p>>>3){case 1:{f.type=r.MessageType.codec().decode(l);break}case 2:{f.dial=r.Dial.codec().decode(l,l.uint32(),{limits:d.limits?.dial});break}case 3:{f.dialResponse=r.DialResponse.codec().decode(l,l.uint32(),{limits:d.limits?.dialResponse});break}default:{l.skipType(p&7);break}}}return f})),c),r.encode=l=>te(l,r.codec()),r.decode=(l,u)=>ee(l,r.codec(),u)})(Fe||(Fe={}));var gC=4,yC=8,e1=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??h9}/${p9}/${m9}`,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=new Map,this.findPeers=f9(this.findRandomPeers.bind(this),6e4),this.addressFilter=rr(1024)}[Symbol.toStringTag]="@libp2p/autonat";[Ae]=["@libp2p/autonat"];get[dr](){return["@libp2p/identify"]}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,e=>{this.handleIncomingAutonatStream(e).catch(t=>{this.log.error("error handling incoming autonat stream - %e",t)})},{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=le([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){let t=AbortSignal.timeout(this.timeout);let n=We(e.stream,{maxDataLength:this.maxMessageSize}).pb(Fe);try{let o=await n.read({signal:t}),i=await this.handleAutonatMessage(o,e.connection,{signal:t});await n.write(i,{signal:t}),await n.unwrap().unwrap().close({signal:t})}catch(o){this.log.error("error handling incoming autonat stream - %e",o),e.stream.abort(o)}}async handleAutonatMessage(e,t,n){let o=this.components.addressManager.getAddresses().map(d=>d.toOptions().host),i=e.dial;if(i==null)return this.log.error("dial was missing from message"),{type:Fe.MessageType.DIAL_RESPONSE,dialResponse:{status:Fe.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:Fe.MessageType.DIAL_RESPONSE,dialResponse:{status:Fe.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let d=Ee(a.id);s=it(d)}catch(d){return this.log.error("invalid PeerId - %e",d),{type:Fe.MessageType.DIAL_RESPONSE,dialResponse:{status:Fe.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:Fe.MessageType.DIAL_RESPONSE,dialResponse:{status:Fe.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(d=>$(d)).filter(d=>{let f=d.toOptions();return Dr(d)?!1:f.host!==t.remoteAddr.toOptions().host?(this.log.trace("not dialing %a - target host did not match remote host %a",d,t.remoteAddr),!1):o.includes(f.host)?!1:this.components.transportManager.dialTransportForMultiaddr(d)==null?(this.log.trace("not dialing %a - transport unsupported",d),!1):!0}).map(d=>(d.getPeerId()==null&&(d=d.encapsulate(`/p2p/${s.toString()}`)),d));if(c.length===0)return this.log("refused to dial all multiaddrs for %p from message",s),{type:Fe.MessageType.DIAL_RESPONSE,dialResponse:{status:Fe.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}};this.log("dial multiaddrs %s for peer %p",c.map(d=>d.toString()).join(", "),s);let l="",u=c[0];for await(let d of c){let f;u=d;try{if(f=await this.components.connectionManager.openConnection(d,n),!f.remoteAddr.equals(d))throw this.log.error("tried to dial %a but dialed %a",d,f.remoteAddr),new Error("Unexpected remote address");return this.log("successfully dialed %p via %a",s,d),{type:Fe.MessageType.DIAL_RESPONSE,dialResponse:{status:Fe.ResponseStatus.OK,addr:f.remoteAddr.decapsulateCode(ne("p2p").code).bytes}}}catch(h){this.log.error("could not dial %p - %e",s,h),l=h.message}finally{f!=null&&await f.close()}}return{type:Fe.MessageType.DIAL_RESPONSE,dialResponse:{status:Fe.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:u.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())||o.multiaddr.toOptions().family===6&&(!t||!jd(o.multiaddr))||Dr(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:q2(),queue:new gt({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})=>s.toOptions().family===6),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 %p to verify multiaddr %s",e.remotePeer,n.multiaddr);let s=await e.newStream(this.protocol,{signal:i});try{let a=We(s).pb(Fe),[,c]=await Promise.all([a.write({type:Fe.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:[n.multiaddr.bytes]}}},{signal:i}),a.read({signal:i})]);if(c.type!==Fe.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!==Fe.ResponseStatus.OK&&l!==Fe.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===Fe.ResponseStatus.OK){if(o.success++,o.type!=="observed"){this.confirmAddress(o);return}}else l===Fe.ResponseStatus.E_DIAL_ERROR&&o.failure++;this.log("%a success %d failure %d",o.multiaddr,o.success,o.failure),o.success===gC&&this.confirmAddress(o),o.failure===yC&&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=e.toOptions();return t.family===4?t.host.split(".")[0].padStart(3,"0"):t.host.split(":")[0].padStart(4,"0")}};function g9(r={}){return e=>new e1(e,r)}var wC=z("dns4"),bC=z("dns6"),xC=z("dnsaddr"),Mi=nt(z("dns"),xC,wC,bC),n1=nt(z("ip4"),z("ip6")),Qs=nt(oe(n1,z("tcp")),oe(Mi,z("tcp"))),o1=oe(n1,z("udp")),vC=oe(o1,z("utp")),EC=oe(o1,z("quic")),SC=oe(o1,z("quic-v1")),u3=nt(oe(Qs,z("ws")),oe(Mi,z("ws"))),t1=nt(oe(u3,z("p2p")),u3),d3=nt(oe(Qs,z("wss")),oe(Mi,z("wss")),oe(Qs,z("tls"),z("ws")),oe(Mi,z("tls"),z("ws"))),r1=nt(oe(d3,z("p2p")),d3),f3=nt(oe(Qs,z("http")),oe(n1,z("http")),oe(Mi,z("http"))),h3=nt(oe(Qs,z("https")),oe(n1,z("https")),oe(Mi,z("https"))),y9=oe(o1,z("webrtc-direct"),z("certhash")),x9=nt(oe(y9,z("p2p")),y9),w9=oe(SC,z("webtransport"),z("certhash"),z("certhash")),v9=nt(oe(w9,z("p2p")),w9),E9=nt(oe(t1,z("p2p-webrtc-star"),z("p2p")),oe(r1,z("p2p-webrtc-star"),z("p2p")),oe(t1,z("p2p-webrtc-star")),oe(r1,z("p2p-webrtc-star"))),Oj=nt(oe(t1,z("p2p-websocket-star"),z("p2p")),oe(r1,z("p2p-websocket-star"),z("p2p")),oe(t1,z("p2p-websocket-star")),oe(r1,z("p2p-websocket-star"))),S9=nt(oe(f3,z("p2p-webrtc-direct"),z("p2p")),oe(h3,z("p2p-webrtc-direct"),z("p2p")),oe(f3,z("p2p-webrtc-direct")),oe(h3,z("p2p-webrtc-direct"))),Bi=nt(u3,d3,f3,h3,E9,S9,Qs,vC,EC,Mi,x9,v9),Mj=nt(oe(Bi,z("p2p-stardust"),z("p2p")),oe(Bi,z("p2p-stardust"))),Bo=nt(oe(Bi,z("p2p")),E9,S9,x9,v9,z("p2p")),b9=nt(oe(Bo,z("p2p-circuit"),Bo),oe(Bo,z("p2p-circuit")),oe(z("p2p-circuit"),Bo),oe(Bi,z("p2p-circuit")),oe(z("p2p-circuit"),Bi),z("p2p-circuit")),A9=()=>nt(oe(b9,A9),b9),Oi=A9(),I9=nt(oe(Oi,Bo,Oi),oe(Bo,Oi),oe(Oi,Bo),Oi,Bo);var Bj=nt(oe(Oi,z("webrtc"),z("p2p")),oe(Oi,z("webrtc")),oe(Bi,z("webrtc"),z("p2p")),oe(Bi,z("webrtc")),z("webrtc"));function T9(r){function e(t){let n;try{n=$(t)}catch{return!1}let o=r(n.protoNames());return o===null?!1:o===!0||o===!1?o:o.length===0}return e}function oe(...r){function e(t){if(t.length<r.length)return null;let n=t;return r.some(o=>(n=typeof o=="function"?o().partialMatch(t):o.partialMatch(t),Array.isArray(n)&&(t=n),n===null)),n}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:T9(e),partialMatch:e}}function nt(...r){function e(n){let o=null;return r.some(i=>{let s=typeof i=="function"?i().partialMatch(n):i.partialMatch(n);return s!=null?(o=s,!0):!1}),o}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:T9(e),partialMatch:e}}function z(r){let e=r;function t(o){let i;try{i=$(o)}catch{return!1}let s=i.protoNames();return s.length===1&&s[0]===e}function n(o){return o.length===0?null:o[0]===e?o.slice(1):null}return{toString:function(){return e},matches:t,partialMatch:n}}var AC="bootstrap",IC=50,TC=1e3,p3=class extends pe{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??TC,this.list=[];for(let n of t.list){if(!I9.matches(n)){this.log.error("Invalid multiaddr");continue}let o=$(n),i=o.getPeerId();if(i==null){this.log.error("Invalid bootstrap multiaddr without peer id");continue}let s={id:Ue(i),multiaddrs:[o]};this.list.push(s)}this._init=t}[Xo]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[Ae]=["@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(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??AC]:{value:this._init.tagValue??IC,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.id,t)})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function _9(r){return e=>new p3(e,r)}var kc;(function(r){let e;r.codec=()=>(e==null&&(e=re((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:se(0),payloadType:se(0),payload:se(0),signature:se(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)=>ee(t,r.codec(),n)})(kc||(kc={}));var i1=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var xr=class r{static createFromProtobuf=async e=>{let t=kc.decode(e),n=rt(t.publicKey);return new r({publicKey:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t)=>{if(t==null)throw new Error("Missing private key");let n=e.domain,o=e.codec,i=e.marshal(),s=C9(n,o,i),a=await t.sign(s.subarray());return new r({publicKey:t.publicKey,payloadType:o,payload:i,signature:a})};static openAndCertify=async(e,t)=>{let n=await r.createFromProtobuf(e);if(!await n.validate(t))throw new i1("Envelope signature is not valid for the given domain");return n};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=kc.encode({publicKey:Nt(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return J(this.marshal(),e.marshal())}async validate(e){let t=C9(e,this.payloadType,this.payload);return this.publicKey.verify(t.subarray(),this.signature)}},C9=(r,e,t)=>{let n=L(r),o=$e(n.byteLength),i=$e(e.length),s=$e(t.length);return new ae(o,n,i,e,s,t)};function k9(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 P9="libp2p-peer-record",R9=Uint8Array.from([3,1]);var Pc;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=re((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:se(0)},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.multiaddr=i.bytes();break}default:{i.skipType(u&7);break}}}return c})),o),n.encode=i=>te(i,n.codec()),n.decode=(i,s)=>ee(i,n.codec(),s)})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=re((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:se(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 Pe('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)=>ee(n,r.codec(),o)})(Pc||(Pc={}));var Qt=class r{static createFromProtobuf=e=>{let t=Pc.decode(e),n=it(Ee(t.peerId)),o=(t.addresses??[]).map(s=>$(s.multiaddr)),i=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:i})};static DOMAIN=P9;static CODEC=R9;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=Pc.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||!k9(this.multiaddrs,e.multiaddrs))}};var m3=1e3,D9=60*m3,N9=290;var gJ=2*60*D9,L9=1,s1=2e3,O9=100;var Rc=`${io}-circuit-relay`,yJ=`${io}-circuit-relay-source`,wJ=2*D9,bJ=BigInt(1<<17),Ui="/libp2p/circuit/relay/0.2.0/hop",g3="/libp2p/circuit/relay/0.2.0/stop",xJ=30*m3,vJ=30*m3,y3=300,M9=4096,B9=.001;var Uo;(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=()=>He(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=re((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),Ys.codec().encode(o.peer,i)),o.reservation!=null&&(i.uint32(26),a1.codec().encode(o.reservation,i)),o.limit!=null&&(i.uint32(34),Xs.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(40),xt.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=Ys.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.reservation=a1.codec().decode(o,o.uint32(),{limits:s.limits?.reservation});break}case 4:{a.limit=Xs.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 5:{a.status=xt.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>te(o,r.codec()),r.decode=(o,i)=>ee(o,r.codec(),i)})(Uo||(Uo={}));var Tn;(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=()=>He(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=re((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),Ys.codec().encode(o.peer,i)),o.limit!=null&&(i.uint32(26),Xs.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(32),xt.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=Ys.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.limit=Xs.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 4:{a.status=xt.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>te(o,r.codec()),r.decode=(o,i)=>ee(o,r.codec(),i)})(Tn||(Tn={}));var Ys;(function(r){let e;r.codec=()=>(e==null&&(e=re((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:se(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 Pe('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)=>ee(t,r.codec(),n)})(Ys||(Ys={}));var a1;(function(r){let e;r.codec=()=>(e==null&&(e=re((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),l1.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 Pe('Decode error - map field "addrs" had too many elements');i.addrs.push(t.bytes());break}case 3:{i.voucher=l1.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)=>ee(t,r.codec(),n)})(a1||(a1={}));var Xs;(function(r){let e;r.codec=()=>(e==null&&(e=re((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)=>ee(t,r.codec(),n)})(Xs||(Xs={}));var xt;(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"})(xt||(xt={}));var w3;(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"})(w3||(w3={}));(function(r){r.codec=()=>He(w3)})(xt||(xt={}));var c1;(function(r){let e;r.codec=()=>(e==null&&(e=re((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:se(0),peer:se(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)=>ee(t,r.codec(),n)})(c1||(c1={}));var l1;(function(r){let e;r.codec=()=>(e==null&&(e=re((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),c1.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:se(0),payloadType:se(0),signature:se(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=c1.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)=>ee(t,r.codec(),n)})(l1||(l1={}));var Dc=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},u1=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},d1=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function b3(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var Nc=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}},f1=De(ge(od.matchers[0],he("p2p-circuit"))),h1=De(he("p2p-circuit"));function x3(r){let{stream:e,remoteAddr:t,logger:n,onDataRead:o,onDataWrite:i}=r,s=n.forComponent("libp2p:stream:converter"),a=!1,c=!1,l=e.close.bind(e);e.close=async p=>{await l(p),h(!0)};let u=e.abort.bind(e);e.abort=p=>{u(p),h(!0)};let d=e.sink.bind(e);e.sink=async p=>{try{await d(ut(p,g=>Ei(g,m=>i?.(m))))}catch(g){g.type!=="aborted"&&s.error("%s error in sink",t,g)}finally{c=!0,h()}};let f={log:s,sink:e.sink,source:async function*(){try{for await(let p of e.source)o?.(p),yield p}finally{a=!0,h()}}(),remoteAddr:t,timeline:{open:Date.now(),close:void 0},close:e.close,abort:e.abort};function h(p){p===!0&&(a=!0,c=!0),a&&c&&f.timeline.close==null&&(f.timeline.close=Date.now())}return f}var p1=class extends pe{peerStore;registrar;connectionManager;randomWalk;started;running;topologyId;log;discoveryController;filter;queue;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.started=!1,this.running=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.connectionManager=e.connectionManager,this.randomWalk=e.randomWalk,this.filter=t.filter,this.discoveryController=new AbortController,this.discoveryController.signal}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(Ui,{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.registrar.unregister(this.topologyId),this.discoveryController?.abort(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,this.discoveryController.signal,Promise.resolve().then(async()=>{this.log("searching peer store for relays");let e=await this.peerStore.all({filters:[n=>n.protocols.includes(Ui)],orders:[()=>Math.random()<.5?1:-1,(n,o)=>{let i=U9(n),s=U9(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 gt({concurrency:5});this.log("start random walk");for await(let n of this.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.connectionManager.getConnections(n.id)?.length>0){this.log.trace("random peer %p was already connected",n.id);continue}if(!await this.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(async()=>{let o=le([this.discoveryController.signal,AbortSignal.timeout(5e3)]);try{await this.connectionManager.openConnection(n.id,{signal:o})}finally{o.clear()}},{peerId:n.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to random peer %p",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)}))}stopDiscovery(){this.log("stop discovery"),this.running=!1,this.discoveryController?.abort()}};function U9(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(O(e)).getTime()}var v3=class extends pe{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??s1,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(h1.exactMatch(e))this.log("searching for circuit relay servers"),this.reservationId=this.reservationStore.reserveRelay();else if(f1.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 Jo(`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=>$(t).encapsulate("/p2p-circuit")),this.listeningAddrs.forEach(t=>{this.addressManager.confirmObservedAddr(t,{type:"transport"})}),queueMicrotask(()=>{this.safeDispatchEvent("listening")})}};function F9(r){return new v3(r)}var V9="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var $9=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=V9[t[r]&63];return e};var _C=60*1e3*10,CC=60*1e3*5,kC=30*1e3,m1=class extends pe{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 ft,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??O9,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??s1,this.started=!1,this.relayFilter=rr(100),this.reserveQueue=new gt({concurrency:t?.reservationConcurrency??L9,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(Rc)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[Rc]: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(e)})}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}reserveRelay(){let e=$9();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 Jo("Cannot use self as relay");if(this.reserveQueue.size>this.maxReservationQueueLength)throw new d1("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 Jo("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 p=this.connectionManager.getConnections(e),g=!1;if(p.length===0&&this.log("already have relay reservation with %p but we are no longer connected",e),p.map(m=>m.id).includes(i.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),g=!0),g&&b3(i.reservation.expire)>_C)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 Dc("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(or.matches(a.remoteAddr))throw new u1("not creating reservation over relayed connection");let c=await this.#e(a,{signal:s}),l=b3(c.expire);this.log("created reservation on relay peer %p, expiry date is %s",e,new Date(Date.now()+l).toString());let u=Math.min(Math.max(l-CC,kC),Math.pow(2,31)-1),d=setTimeout(()=>{this.log("refresh reservation to relay %p",e),this.addRelay(e,t).catch(async p=>{this.log.error("could not refresh reservation to relay %p - %e",e,p),await this.#t(e)}).catch(p=>{this.log.error("could not remove expired reservation to relay %p - %e",e,p)})},u),f;if(t==="discovered"){let p=this.pendingReservations.pop();if(p==null)throw new Dc("Made reservation on relay but did not need any more discovered relays");f={timeout:d,reservation:c,type:t,connection:a.id,id:p}}else f={timeout:d,reservation:c,type:t,connection:a.id};this.reservations.set(e,f),await this.peerStore.merge(e,{tags:{[Rc]:{value:1,ttl:l}}}),this.#r();let h={relay:e,details:f};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(Ui,t),i=We(n).pb(Uo);this.log.trace("send RESERVE to %p",e.remotePeer),await i.write({type:Uo.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 %o",s),s.status===xt.OK&&s.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of s.reservation.addrs){let u=$(l);u.getPeerId()==null&&(u=u.encapsulate(`/p2p/${e.remotePeer}`)),u=$(u.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(u.toString())}return s.reservation.addrs=[...c].map(l=>$(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:{[Rc]: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=rr(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var PC=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach($)}catch{return!1}return!0},K9={maxInboundStopStreams:y3,maxOutboundStopStreams:y3,stopTimeout:3e4},g1=class{discovery;registrar;peerStore;connectionManager;transportManager;peerId;upgrader;addressManager;connectionGater;reservationStore;logger;maxInboundStopStreams;maxOutboundStopStreams;started;log;shutdownController;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.registrar=e.registrar,this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.logger=e.logger,this.peerId=e.peerId,this.upgrader=e.upgrader,this.addressManager=e.addressManager,this.connectionGater=e.connectionGater,this.maxInboundStopStreams=t.maxInboundStopStreams??K9.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??K9.maxOutboundStopStreams,this.shutdownController=new AbortController,this.discovery=new p1(e,{filter:t.discoveryFilter??Y2(M9,B9)}),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",n.detail,o)})}),this.reservationStore=new m1(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}[Symbol.toStringTag]="@libp2p/circuit-relay-v2-transport";[Ae]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[dr](){return this.discovery!=null?["@libp2p/identify"]:[]}[so]=!0;isStarted(){return this.started}async start(){this.shutdownController=new AbortController,await this.registrar.handle(g3,e=>{let t=this.upgrader.createInboundAbortSignal(this.shutdownController.signal);this.onStop(e,t).catch(n=>{this.log.error("error while handling STOP protocol",n),e.stream.abort(n)}).finally(()=>{t.clear()})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await mt(this.discovery,this.reservationStore),this.started=!0}async stop(){this.shutdownController.abort(),await Ct(this.discovery,this.reservationStore),await this.registrar.unhandle(g3),this.started=!1}async dial(e,t){if(e.protoCodes().filter(h=>h===N9).length!==1){let h="Invalid circuit relay address";throw this.log.error(h,e),new Dn(h)}let n=e.toString().split("/p2p-circuit"),o=$(n[0]),i=$(n[n.length-1]),s=o.getPeerId(),a=i.getPeerId();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 Dn(`C${h}`)}let c=Ue(s),l=Ue(a),d=this.connectionManager.getConnections(c)[0];d==null?(await this.peerStore.merge(c,{multiaddrs:[o]}),t.onProgress?.(new W("circuit-relay:open-connection")),d=await this.connectionManager.openConnection(c,t)):t.onProgress?.(new W("circuit-relay:reuse-connection"));let f;try{t.onProgress?.(new W("circuit-relay:open-hop-stream")),f=await d.newStream(Ui,t);let h=We(f),p=h.pb(Uo);t.onProgress?.(new W("circuit-relay:write-connect-message")),await p.write({type:Uo.Type.CONNECT,peer:{id:l.toMultihash().bytes,addrs:[$(i).bytes]}},t),t.onProgress?.(new W("circuit-relay:read-connect-response"));let g=await p.read(t);if(g.status!==xt.OK)throw new fe(`failed to connect via relay with status ${g?.status?.toString()??"undefined"}`);let m=new Nc(g.limit),y=x3({stream:h.unwrap(),remoteAddr:e,localAddr:o.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`),logger:this.logger,onDataRead:m.onData,onDataWrite:m.onData});return this.log("new outbound relayed connection %a",y.remoteAddr),await this.upgrader.upgradeOutbound(y,{...t,limits:m.getLimits()})}catch(h){throw this.log.error("circuit relay dial to destination %p via relay %p failed",l,c,h),f?.abort(h),h}}createListener(e){return F9({peerId:this.peerId,connectionManager:this.connectionManager,addressManager:this.addressManager,reservationStore:this.reservationStore,logger:this.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>f1.exactMatch(t)||h1.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>or.exactMatch(t))}async onStop({connection:e,stream:t},n){if(!this.reservationStore.hasReservation(e.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.transportManager.listen([e.remoteAddr.encapsulate("/p2p-circuit")])}catch(d){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on",d)}let o=We(t).pb(Tn),i=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",e.remotePeer,i.type),i?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",e.remotePeer),await o.write({type:Tn.Type.STATUS,status:xt.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(i.type!==Tn.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:Tn.Type.STATUS,status:xt.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!PC(i)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:Tn.Type.STATUS,status:xt.MALFORMED_MESSAGE},{signal:n}),await t.close({signal:n});return}let s=it(Ee(i.peer.id));if(await this.connectionGater.denyInboundRelayedConnection?.(e.remotePeer,s)===!0){this.log.error("connection gater denied inbound relayed connection from %p",e.remotePeer),await o.write({type:Tn.Type.STATUS,status:xt.PERMISSION_DENIED},{signal:n}),await t.close({signal:n});return}this.log.trace("sending success response to %p",e.remotePeer),await o.write({type:Tn.Type.STATUS,status:xt.OK},{signal:n});let a=new Nc(i.limit),c=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${s.toString()}`),l=this.addressManager.getAddresses()[0],u=x3({stream:o.unwrap().unwrap(),remoteAddr:c,localAddr:l,logger:this.logger,onDataRead:a.onData,onDataWrite:a.onData});this.log("new inbound relayed connection %a",u.remoteAddr),await this.upgrader.upgradeInbound(u,{limits:a.getLimits(),signal:n}),this.log("%s connection %a upgraded","inbound",u.remoteAddr)}};function E3(r={}){return e=>new g1(e,r)}var H9=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},RC=new WeakMap;function DC({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(H9());let i,s,a,c=r??clearTimeout,l=()=>{c(i),a(H9())},u=()=>{o&&o.removeEventListener("abort",l)},d=new Promise((f,h)=>{s=()=>{u(),f(n)},a=h,i=(e??setTimeout)(s,t)});return o&&o.addEventListener("abort",l,{once:!0}),RC.set(d,()=>{c(i),i=null,s()}),d}}var NC=DC(),y1=NC;var cn;(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=()=>He(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=re((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 Pe('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)=>ee(o,r.codec(),i)})(cn||(cn={}));function S3(r,e){return or.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:pc.matches(r)?!0:M5.matches(r)?Gt(r.toOptions().host)===!1:!1}var q9=1024*4,z9=100,w1={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},b1=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??w1.timeout,this.retries=t.retries??w1.retries,this.maxInboundStreams=t.maxInboundStreams??w1.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??w1.maxOutboundStreams}[Symbol.toStringTag]="@libp2p/dcutr";[dr]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Lc,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{or.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(Lc,e=>{this.handleIncomingUpgrade(e.stream,e.connection).catch(t=>{this.log.error("error during incoming DCUtR attempt",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(Lc),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([Lc],{signal:o.signal,runOnLimitedConnection:!0});let i=We(t,{maxDataLength:q9}).pb(cn);this.log("B sending connect to %p",e.remotePeer);let s=Date.now();await i.write({type:cn.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(d=>d.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await i.read(o);if(a.type!==cn.Type.CONNECT)throw this.log("A sent wrong message type"),new fe("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 fe("DCUtR connect message had no multiaddrs");let l=Date.now()-s;this.log("A sending sync, rtt %dms",l),await i.write({type:cn.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await y1(l/2),this.log("B dialing",c);let u=await this.connectionManager.openConnection(c,{signal:o.signal,priority:z9,force:!0,initiator:!1});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,u.remoteAddr),await e.close(o);break}catch(i){if(this.log.error("error while attempting DCUtR on attempt %d of %d",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.getPeerId()==null?i.encapsulate(`/p2p/${e.remotePeer}`):i}).filter(o=>S3(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(or.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.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)};try{let o=We(e,{maxDataLength:q9}).pb(cn);this.log("A receiving connect");let i=await o.read(n);if(i.type!==cn.Type.CONNECT)throw this.log("B sent wrong message type"),new fe("DCUtR message type was incorrect");if(i.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new fe("DCUtR connect message had no multiaddrs");let s=this.getDialableMultiaddrs(i.observedAddresses);if(s.length===0)throw this.log("B had no dialable multiaddrs"),new fe("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await o.write({type:cn.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==cn.Type.SYNC)throw new fe("DCUtR message type was incorrect");this.log("A dialing",s);let c=await this.connectionManager.openConnection(s,{signal:n.signal,priority:z9,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n)}catch(o){this.log.error("incoming DCUtR from %p failed",t.remotePeer,o),e.abort(o)}finally{await e.close(n)}}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let o=$(n);if(!S3(o,this.transportManager))continue;t.push(o)}catch{}return t}};var Lc="/libp2p/dcutr";function W9(r={}){return e=>new b1(e,r)}var x1=globalThis.CustomEvent??Event;async function*ln(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered??!1,o=new EventTarget,i=[],s=j(),a=j(),c=!1,l,u=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let p of r){if(i.length===t&&(s=j(),await s.promise),u)break;let g={done:!1};i.push(g),p().then(m=>{g.done=!0,g.ok=!0,g.value=m,o.dispatchEvent(new x1("task-complete"))},m=>{g.done=!0,g.err=m,o.dispatchEvent(new x1("task-complete"))})}c=!0,o.dispatchEvent(new x1("task-complete"))}catch(p){l=p,o.dispatchEvent(new x1("task-complete"))}});function d(){return n?i[0]?.done:!!i.find(p=>p.done)}function*f(){for(;i.length>0&&i[0].done;){let p=i[0];if(i.shift(),p.ok)yield p.value;else throw u=!0,s.resolve(),p.err;s.resolve()}}function*h(){for(;d();)for(let p=0;p<i.length;p++)if(i[p].done){let g=i[p];if(i.splice(p,1),p--,g.ok)yield g.value;else throw u=!0,s.resolve(),g.err;s.resolve()}}for(;;){if(d()||(a=j(),await a.promise),l!=null)throw l;if(n?yield*f():yield*h(),c&&i.length===0)break}}var G9="0.1.0",Q9="id",Y9="id/push",X9="1.0.0",Z9="1.0.0";var Fo;(function(r){let e;r.codec=()=>(e==null&&(e=re((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 Pe('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 Pe('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)=>ee(t,r.codec(),n)})(Fo||(Fo={}));var ar={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function j9(r){if(r!=null&&r.length>0)try{return $(r)}catch{}}function MC(r,e){return e??r.userAgent}async function v1(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new fe("message was null or undefined");let i={};if(o.listenAddrs.length>0&&(i.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:$(c)}))),o.protocols.length>0&&(i.protocols=o.protocols),o.publicKey!=null){let c=rt(o.publicKey);if(!vn(c).equals(n.remotePeer))throw new fe("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 xr.openAndCertify(c,Qt.DOMAIN),u=Qt.createFromProtobuf(l.payload),d=Qr(l.publicKey.toCID());if(!u.peerId.equals(d))throw new fe("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(u.peerId))throw new fe("signing key does not match remote PeerId");let f;try{f=await r.get(u.peerId)}catch(h){if(h.name!=="NotFoundError")throw h}if(f!=null&&(i.metadata=f.metadata,f.peerRecordEnvelope!=null)){let h=await xr.createFromProtobuf(f.peerRecordEnvelope),p=Qt.createFromProtobuf(h.payload);p.seqNumber>=u.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",p.seqNumber,u.seqNumber),u=p,c=f.peerRecordEnvelope)}i.peerRecordEnvelope=c,i.addresses=u.multiaddrs.map(h=>({isCertified:!0,multiaddr:h})),s={seq:u.seqNumber,addresses:u.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=L(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=L(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=>$(c)),observedAddr:o.observedAddr==null?void 0:$(o.observedAddr),protocols:o.protocols,signedPeerRecord:s,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var Zs=class{host;protocol;started;timeout;peerId;privateKey;peerStore;registrar;addressManager;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;events;runOnLimitedConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.peerId=e.peerId,this.privateKey=e.privateKey,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.events=e.events,this.log=t.log,this.timeout=t.timeout??ar.timeout,this.maxInboundStreams=t.maxInboundStreams??ar.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??ar.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??ar.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??ar.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??ar.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??ar.protocolPrefix}/${G9}`,agentVersion:MC(e.nodeInfo,t.agentVersion)}}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:L(this.host.agentVersion),ProtocolVersion:L(this.host.protocolVersion)}}),await this.registrar.handle(this.protocol,e=>{this.handleProtocol(e).catch(t=>{this.log.error(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0)}async stop(){await this.registrar.unhandle(this.protocol),this.started=!1}};var E1=class extends Zs{connectionManager;concurrency;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??ar.protocolPrefix}/${Y9}/${Z9}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??ar.concurrency,(t.runOnSelfUpdate??ar.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error(o)})})}[Ae]=["@libp2p/identify-push"];async push(){if(!this.isStarted())return;let e=this.addressManager.getAddresses().map(u=>u.decapsulateCode(ne("p2p").code)),t=new Qt({peerId:this.peerId,multiaddrs:e}),n=await xr.seal(t,this.privateKey),o=this.registrar.getProtocols(),i=await this.peerStore.get(this.peerId),s=O(i.metadata.get("AgentVersion")??L(this.host.agentVersion)),a=O(i.metadata.get("ProtocolVersion")??L(this.host.protocolVersion)),c=this;async function*l(){for(let u of c.connectionManager.getConnections())(await c.peerStore.get(u.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let f,h=AbortSignal.timeout(c.timeout);try{f=await u.newStream(c.protocol,{signal:h,runOnLimitedConnection:c.runOnLimitedConnection}),await We(f,{maxDataLength:c.maxMessageSize}).pb(Fo).write({listenAddrs:e.map(g=>g.bytes),signedPeerRecord:n.marshal(),protocols:o,agentVersion:s,protocolVersion:a},{signal:h}),await f.close({signal:h})}catch(p){c.log.error("could not push identify update to peer",p),f?.abort(p)}})}await kt(ln(l(),{concurrency:this.concurrency}))}async handleProtocol(e){let{connection:t,stream:n}=e;try{if(this.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let o={signal:AbortSignal.timeout(this.timeout)},s=await We(n,{maxDataLength:this.maxMessageSize}).pb(Fo).read(o);await n.close(o),await v1(this.peerStore,this.events,this.log,t,s)}catch(o){this.log.error("received invalid message",o),n.abort(o);return}this.log.trace("handled push from %p",t.remotePeer)}};var BC=41,S1=class extends Zs{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??ar.protocolPrefix}/${Q9}/${X9}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??ar.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(i=>{i.name!==Rn.name&&this.log.error("error during identify trigged by connection:open",i)})})}[Ae]=["@libp2p/identify"];async _identify(e,t={}){let n;if(t.signal==null){let o=AbortSignal.timeout(this.timeout);t={...t,signal:o}}try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let i=await We(n,{maxDataLength:this.maxMessageSize}).pb(Fo).read(t);return await n.close(t),i}catch(o){throw n?.abort(o),o}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:i,observedAddr:s}=n;if(o==null)throw new fe("public key was missing from identify message");let a=rt(o),c=Qr(a.toCID());if(!e.remotePeer.equals(c))throw new fe("identified peer does not match the expected peer");if(this.peerId.equals(c))throw new fe("identified peer is our own peer id?");return this.maybeAddObservedAddress(s),this.log("identify completed for peer %p and protocols %o",c,i),v1(this.peerStore,this.events,this.log,e,n)}maybeAddObservedAddress(e){let t=j9(e);if(t==null)return;if(this.log.trace("our observed address was %a",t),Dr(t)){this.log.trace("our observed address was private");return}if(t.stringTuples()[0][0]===BC&&!jd(t)){this.log.trace("our observed address was IPv6 but not a global unicast address");return}Ti.exactMatch(t)||(this.log.trace("storing the observed address"),this.addressManager.addObservedAddr(t))}async handleProtocol(e){let{connection:t,stream:n}=e,o=AbortSignal.timeout(this.timeout);try{let i=await this.peerStore.get(this.peerId),s=this.addressManager.getAddresses().map(u=>u.decapsulateCode(ne("p2p").code)),a=i.peerRecordEnvelope;if(s.length>0&&a==null){let u=new Qt({peerId:this.peerId,multiaddrs:s});a=(await xr.seal(u,this.privateKey)).marshal().subarray()}let c=t.remoteAddr.bytes;O5.matches(t.remoteAddr)||(c=void 0),await We(n).pb(Fo).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:Nt(this.privateKey.publicKey),listenAddrs:s.map(u=>u.bytes),signedPeerRecord:a,observedAddr:c,protocols:i.protocols},{signal:o}),await n.close({signal:o})}catch(i){this.log.error("could not respond to identify request",i),n.abort(i)}}};function J9(r={}){return e=>new S1(e,r)}function ey(r={}){return e=>new E1(e,r)}var js=1e3,A3=60*js,A1=60*A3,ty=36*A1,ry="/ipfs/kad/1.0.0",ny=48*A1;var oy=24*A1,iy=10,sy=16384,ay=A1,Lte=10*js;var I1=20,Js=3,cy=5*A3,ly=js,uy=5*js,dy=5*A3,fy=30*js,hy=180*js,I3=`${io}-kad-dht`;var Oc;(function(r){let e;r.codec=()=>(e==null&&(e=re((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:se(0),value:se(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)=>ee(t,r.codec(),n)})(Oc||(Oc={}));function py(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 my(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 vt=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 Oc.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:py(this.timeReceived)}}static deserialize(e){let t=Oc.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=my(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 Vo=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},T1=class extends Error{constructor(e="Query aborted"){super(e),this.name="QueryAbortedError"}},_1=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},C1=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var gy;(function(r){let e;r.codec=()=>(e==null&&(e=re((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)=>ee(t,r.codec(),n)})(gy||(gy={}));var xe;(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"})(xe||(xe={}));var k1;(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"})(k1||(k1={}));(function(r){r.codec=()=>He(k1)})(xe||(xe={}));var ta;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(ta||(ta={}));var T3;(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"})(T3||(T3={}));(function(r){r.codec=()=>He(T3)})(ta||(ta={}));var ea;(function(r){let e;r.codec=()=>(e==null&&(e=re((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),ta.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:se(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 Pe('Decode error - map field "multiaddrs" had too many elements');i.multiaddrs.push(t.bytes());break}case 3:{i.connection=ta.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(ea||(ea={}));var Xn;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&k1[t.type]!==0&&(n.uint32(8),xe.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),ea.codec().encode(i,n);if(t.providers!=null)for(let i of t.providers)n.uint32(74),ea.codec().encode(i,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={type:xe.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=xe.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 Pe('Decode error - map field "closer" had too many elements');i.closer.push(ea.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 Pe('Decode error - map field "providers" had too many elements');i.providers.push(ea.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)=>ee(t,r.codec(),n)})(Xn||(Xn={}));function _3(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 Mc(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 P1(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function vr(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function C3(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function Bc(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function k3(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function yy(r,e,t){if(t.length===0)throw new P("No records given");let o=O(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 C1(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:i(e,t)}function FC(r,e){return 0}var wy={pk:FC};async function ra(r,e){let t=e.key,o=O(t).split("/");if(o.length<3)return;let i=r[o[1].toString()];if(i==null)throw new P(`No validator available for key type "${o[1]}"`);await i(t,e.value)}var VC=async(r,e)=>{if(!(r instanceof Uint8Array))throw new P('"key" must be a Uint8Array');if(r.byteLength<5)throw new P("Invalid public key record");if(O(r.subarray(0,4))!=="/pk/")throw new P("key was not prefixed with /pk/");let n=rt(e),o=r.slice(4);if(!J(o,n.toMultihash().bytes))throw new P("public key does not match passed in key")},by={pk:VC};var $C=L("/pk/");function xy(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>{let[[t,n]]=e.stringTuples();if(t===53||t===54||t===55)return n!=="localhost";if(t!==4&&t!==6||n==null)return!1;let o=Gt(n);return o==null?!0:!o})}}async function $o(r){return(await Ye.digest(r)).digest}async function Et(r){return $o(r.toMultihash().bytes)}function Ko(r,e){return new Le(`${r}/${O(e,"base32")}`,!1)}function vy(r){return ke([$C,r.toMultihash().bytes])}function Ey(r){return O(r.subarray(0,4))==="/pk/"}function Sy(r){let e=Ee(r.subarray(4));return it(e)}function P3(r,e){let t=new Date;return new vt(r,e,t).serialize()}var KC=290,HC=54,qC=55,zC=56,WC=4,GC=41;function Ay(r){let e=r.stringTuples();for(let t of e)if(t[0]===KC)return!1;if(e[0][0]===HC||e[0][0]===qC||e[0][0]===zC)return!0;if(e[0][0]===WC||e[0][0]===GC){let t=Gt(`${e[0][1]}`);return t==null||!t}return!1}function R1(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:Q.createV1(ri,Ee(L(n,"base32"))),peerId:Ue(t)}}function D1(r,e,t){let n=typeof e=="string"?e:O(e.multihash.bytes,"base32"),o=[r,n];return t!=null&&o.push(t.toString()),new Le(o.join("/"))}function N1(r){return new Date(Kt(r))}function Fi(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 L1(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 O1=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){this.log("getLocal %b",e);let t=Ko(this.datastorePrefix,e);this.log("fetching record for key %k",t);let n=await this.components.datastore.get(t);this.log("found %k in local datastore",t);let o=vt.deserialize(n);return await ra(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o={}){this.log("sendCorrection for %b",e);let i=P3(e,n);for(let{value:s,from:a}of t){if(J(s,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let u=Ko(this.datastorePrefix,e);this.log(`Storing corrected record for key ${u.toString()}`),await this.components.datastore.put(u,i.subarray())}catch(u){this.log.error("Failed error correcting self",u)}continue}let c=!1,l={type:xe.PUT_VALUE,key:e,record:i};for await(let u of this.network.sendRequest(a,l,o))u.name==="PEER_RESPONSE"&&u.record!=null&&J(u.record.value,vt.deserialize(i).value)&&(c=!0),yield u;c||(yield vr({from:a,error:new Vo("Value not put correctly")},o)),this.log.error("Failed error correcting entry")}}async*put(e,t,n={}){this.log("put key %b value %b",e,t);let o=P3(e,t),i=Ko(this.datastorePrefix,e);this.log(`storing record for key ${i.toString()}`),await this.components.datastore.put(i,o.subarray()),yield*ut(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),s=>jt(s,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:xe.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let u of this.network.sendRequest(a.peer.id,l,n))c.push(u),u.name==="PEER_RESPONSE"&&(u.record!=null&&J(u.record.value,vt.deserialize(o).value)||c.push(vr({from:a.peer.id,error:new Vo("Value not put correctly")},n)));return c}),s=>ln(s,{ordered:!1,concurrency:Js}),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))a.name==="VALUE"&&n.push(a),yield a;if(n.length===0)return;let o=n.map(a=>a.value),i=0;try{i=yy(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 Ce("Best value was not found");yield*this.sendCorrectionRecord(e,n,s,t),yield n[i]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let i=await this.getLocal(e);yield Bc({value:i.value,from:this.components.peerId},t)}catch(i){this.log("error getting local value for %b",e,i)}let n=this,o=async function*({peer:i,signal:s}){for await(let a of n.peerRouting.getValueOrPeers(i,e,{...t,signal:s}))yield a,a.name==="PEER_RESPONSE"&&a.record!=null&&(yield Bc({from:i,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function Iy(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function Uc(r){if(r.id==null)throw new Error("Invalid peer in message");let e=Ee(r.id);return{id:it(e),multiaddrs:(r.multiaddrs??[]).map(t=>$(t))}}var M1=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,u)=>(l.name==="PROVIDER"&&(u.providers??=[],u.providers.push(...l.providers.map(d=>d.id.toString()))),u)})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.kadDHT.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PEER_RESPONSE"&&l.messageName==="ADD_PROVIDER"&&(u.providers??=[],u.providers.push(l.from.toString())),u)})??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);let i={type:xe.ADD_PROVIDER,key:o,providers:[Iy({id:this.components.peerId,multiaddrs:t})]},s=0,a=c=>async()=>{if(c.name!=="FINAL_PEER")return[c];let l=[];this.log("putProvider %s to %p",e,c.peer.id);try{this.log("sending provider record for %s to %p",e,c.peer.id);for await(let u of this.network.sendMessage(c.peer.id,i,n))u.name==="PEER_RESPONSE"&&(this.log("sent provider record for %s to %p",e,c.peer.id),s++),l.push(u)}catch(u){this.log.error("error sending provide record to peer %p",c.peer.id,u),l.push(vr({from:c.peer.id,error:u},n))}return l};yield*ut(this.peerRouting.getClosestPeers(o,n),c=>jt(c,l=>a(l)),c=>ln(c,{ordered:!1,concurrency:Js}),async function*(c){for await(let l of c)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);if(a.length>0){let u=[];for(let d of a.slice(0,n))try{let f=await this.components.peerStore.get(d);u.push({id:d,multiaddrs:f.addresses.map(({multiaddr:h})=>h)})}catch(f){if(f.name!=="NotFoundError")throw f;this.log("no peer store entry for %p",d)}if(yield Mc({from:this.components.peerId,messageType:xe.GET_PROVIDERS,providers:u},t),yield C3({from:this.components.peerId,providers:u},t),o+=u.length,o>=n)return}let c=async function*({peer:u,signal:d}){let f={type:xe.GET_PROVIDERS,key:i};yield*s.network.sendRequest(u,f,{...t,signal:d})},l=new zt(a);for await(let u of this.queryManager.run(i,c,t))if(yield u,u.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",u.providers.length,e,u.closer.length);let d=[];for(let f of u.providers)l.has(f.id)||(l.add(f.id),d.push(f));if(d.length>0&&(yield C3({from:u.from,providers:d},t),o+=d.length,o>=n))return}}};var na=class{movingAverage;variance;deviation;forecast;timeSpan;previousTime;constructor(e){this.timeSpan=e,this.movingAverage=0,this.variance=0,this.deviation=0,this.forecast=0}alpha(e,t){return 1-Math.exp(-(e-t)/this.timeSpan)}push(e,t=Date.now()){if(this.previousTime!=null){let n=this.alpha(t,this.previousTime),o=e-this.movingAverage,i=n*o;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+o*i),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*o}else this.movingAverage=e;this.previousTime=t}};var YC=1.2,XC=2,ZC=2e3,un=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;constructor(e={}){this.success=new na(e.interval??5e3),this.failure=new na(e.interval??5e3),this.next=new na(e.interval??5e3),this.failureMultiplier=e.failureMultiplier??XC,this.timeoutMultiplier=e.timeoutMultiplier??YC,this.minTimeout=e.minTimeout??ZC,e.metricName!=null&&(this.metric=e.metrics?.registerMetricGroup(e.metricName))}getTimeoutSignal(e={}){let t=Math.max(Math.round(this.next.movingAverage*(e.timeoutFactor??this.timeoutMultiplier)),this.minTimeout),n=AbortSignal.timeout(t),o=le([e.signal,n]);return o.start=Date.now(),o.timeout=t,o}cleanUp(e){let t=Date.now()-e.start;e.aborted?(this.failure.push(t),this.next.push(t*this.failureMultiplier),this.metric?.update({failureMovingAverage:this.failure.movingAverage,failureDeviation:this.failure.deviation,failureForecast:this.failure.forecast,failureVariance:this.failure.variance,failure:t})):(this.success.push(t),this.next.push(t),this.metric?.update({successMovingAverage:this.success.movingAverage,successDeviation:this.success.deviation,successForecast:this.success.forecast,successVariance:this.success.variance,success:t}))}};var B1=class extends pe{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 un({...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");this.log("sending %s to %p",t.type,e),yield k3({peer:e},n),yield _3({to:e,type:o},n);let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),i=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n);let c=await this._writeReadMessage(i,t,n);i.close(n).catch(l=>{this.log.error("error closing stream to %p",e,l),i?.abort(l)}),yield Mc({from:e,messageType:c.type,closer:c.closer.map(Uc),providers:c.providers.map(Uc),record:c.record==null?void 0:vt.deserialize(c.record)},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 vr({from:e,error:a},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");this.log("sending %s to %p",t.type,e),yield k3({peer:e},n),yield _3({to:e,type:o},n);let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),i=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n),await this._writeMessage(i,t,n),i.close(n).catch(c=>{this.log.error("error closing stream to %p",e,c),i?.abort(c)}),yield Mc({from:e,messageType:o},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),yield vr({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async _writeMessage(e,t,n){await We(e).write(t,Xn,n)}async _writeReadMessage(e,t,n){let o=We(e);await o.write(t,Xn,n);let i=await o.read(Xn,n);return i.closer.forEach(s=>{this.safeDispatchEvent("peer",{detail:Uc(s)})}),i.providers.forEach(s=>{this.safeDispatchEvent("peer",{detail:Uc(s)})}),i}};function Ho(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 qo=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.map(e=>e.peer)}async add(e){let t=await Et(e.id);this.addWithKadId(e,t)}addWithKadId(e,t){if(this.peerDistances.find(i=>i.peer.id.equals(e.id))!=null)return;let n={peer:e,distance:sr(this.originDhtKey,t)},o=!1;for(let i=0;i<this.peerDistances.length;i++){let s=Ho(this.peerDistances[i].distance,n.distance);if(s===0||s===1){o=!0,this.peerDistances.splice(i,0,n);break}}o||this.peerDistances.push(n),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e){if(this.length===0)return!0;let t=await Et(e),n=sr(t,this.originDhtKey),o=this.peerDistances[this.peerDistances.length-1].distance;return Ho(n,o)===-1}async anyCloser(e){return e.length===0?!1:Promise.any(e.map(async t=>this.isCloser(t)))}};var U1=class{log;routingTable;network;validators;queryManager;peerStore;peerId;constructor(e,t){this.routingTable=t.routingTable,this.network=t.network,this.validators=t.validators,this.queryManager=t.queryManager,this.peerStore=e.peerStore,this.peerId=e.peerId,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){let t,n=await this.routingTable.find(e);if(n!=null){this.log("findPeerLocal found %p in routing table",e);try{t=await this.peerStore.get(n)}catch(o){if(o.name!=="NotFoundError")throw o}}if(t==null)try{t=await this.peerStore.get(e)}catch(o){if(o.name!=="NotFoundError")throw o}if(t!=null)return this.log("findPeerLocal found %p in peer store",e),{id:t.id,multiaddrs:t.addresses.map(o=>o.multiaddr)}}async*_getValueSingle(e,t,n={}){let o={type:xe.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=vy(e);for await(let o of this._getValueSingle(e,n,t))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let i=rt(o.record.value),s=vn(i);if(!s.equals(e))throw new Pn("public key does not match id");if(s.publicKey==null)throw new Pn("public key missing");yield Bc({from:e,value:o.record.value},t)}throw new Vo(`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);if(o!=null){this.log("found local"),yield P1({from:this.peerId,peer:o},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,i=async function*({peer:s,signal:a}){let c={type:xe.FIND_NODE,key:e.toMultihash().bytes};for await(let l of o.network.sendRequest(s,c,{...t,signal:a}))if(yield l,l.name==="PEER_RESPONSE"){let u=l.closer.find(d=>d.id.equals(e));u!=null&&(yield P1({from:l.from,peer:u},t))}};for await(let s of this.queryManager.run(e.toMultihash().bytes,i,t))s.name==="FINAL_PEER"&&(n=!0),yield s}n||(yield vr({from:this.peerId,error:new Ce("Not found")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await $o(e),o=this.routingTable.closestPeers(n),i=this,s=new qo(n,this.routingTable.kBucketSize);await Promise.all(o.map(async c=>{await s.add({id:c,multiaddrs:[]})}));let a=async function*({peer:c,signal:l}){i.log("closerPeersSingle %s from %p",O(e,"base32"),c);let u={type:xe.FIND_NODE,key:e};yield*i.network.sendRequest(c,u,{...t,signal:l})};for await(let c of this.queryManager.run(e,a,t))c.name==="PEER_RESPONSE"&&await Promise.all(c.closer.map(async l=>{await s.add(l)})),yield c;this.log("found %d peers close to %b",s.length,e);for(let c of s.peers)yield P1({from:this.peerId,peer:c},t)}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)}catch{let s="invalid record received, discarded";this.log(s),yield vr({from:o.from,error:new Vo(s)},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new _1("invalid record received");await ra(this.validators,new vt(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=[];try{let c=Ee(e),l=it(c),u=await this.peerStore.get(l);n.push({id:u.id,multiaddrs:u.addresses.map(({multiaddr:d})=>d)})}catch{}let o=await $o(e),i=this.routingTable.closestPeers(o),s=await Et(t),a=sr(s,o);for(let c of i){let l=await Et(c),u=sr(l,o);if(Ho(u,a)===-1)try{let d=await this.peerStore.get(c);n.push({id:c,multiaddrs:d.addresses.map(({multiaddr:f})=>f)})}catch(d){if(d.name!=="NotFoundError")throw d}}return n.length>0?this.log("getCloserPeersOffline found %d peer(s) closer to %b than %p",n.length,e,t):this.log("getCloserPeersOffline could not find peer closer to %b than %p with %d peers in the routing table",e,t,this.routingTable.size),n}};var F1=class{log;datastore;datastorePrefix;lock;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:providers`),this.datastorePrefix=`${t.datastorePrefix}/provider`,this.datastore=e.datastore,this.lock=t.lock}async addProvider(e,t){let n=await this.lock.readLock();try{this.log("%p provides %s",t,e),await this.writeProviderEntry(e,t)}finally{n()}}async removeProvider(e,t){let n=await this.lock.writeLock();try{let o=D1(this.datastorePrefix,e,t);this.log("%p no longer provides %s",t,e),await this.datastore.delete(o)}finally{n()}}async getProviders(e){let t=await this.lock.readLock();try{this.log("get providers for %c",e);let n=await this.loadProviders(e);return this.log("got %d providers for %c",n.size,e),[...n.keys()]}finally{t()}}async writeProviderEntry(e,t,n=new Date){let o=D1(this.datastorePrefix,e,t),i=$e(n.getTime());await this.datastore.put(o,i)}async loadProviders(e){let t=new ft,n=D1(this.datastorePrefix,e);for await(let o of this.datastore.query({prefix:n.toString()})){let{peerId:i}=R1(o.key);t.set(i,N1(o.value))}return t}};async function*Ty(r){let{key:e,startingPeer:t,ourPeerId:n,signal:o,query:i,alpha:s,pathIndex:a,numPaths:c,queryFuncTimeout:l,log:u,peersSeen:d,connectionManager:f}=r,h=new $t({concurrency:s,sort:(m,y)=>Ho(m.options.distance,y.options.distance)}),p=await $o(e);function g(m,y){if(m==null)return;d.add(m);let x=sr(y,p);h.add(async()=>{let w=[o];l!=null&&w.push(AbortSignal.timeout(l));let I=le(w);try{for await(let M of i({...r,key:e,peer:m,signal:I,pathIndex:a,numPaths:c})){if(I.aborted)return;if(M.name==="PEER_RESPONSE")for(let D of M.closer){if(d.has(D.id)){u.trace("already seen %p in query",D.id);continue}if(n.equals(D.id)){u("not querying ourselves");continue}if(!await f.isDialable(D.multiaddrs)){u("not querying undialable peer");continue}let R=await Et(D.id),S=sr(R,p);if(Ho(S,x)!==-1){u.trace("skipping %p as they are not closer to %b than %p",D.id,e,m);continue}u.trace("querying closer peer %p",D.id),g(D.id,R)}h.safeDispatchEvent("completed",{detail:M})}}catch(M){if(!o.aborted)return vr({from:m,error:M},r)}finally{I.clear()}},{distance:x}).catch(w=>{u.error(w)})}g(t,await Et(t));try{for await(let m of h.toGenerator({signal:o}))m!=null&&(yield m)}catch(m){throw o.aborted?new T1("Query aborted"):m}}var V1=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??I1,this.alpha=t.alpha??Js,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,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(hy);n={...n,signal:c}}let o=new AbortController,i=le([this.shutDownController.signal,o.signal,n.signal]);o.signal;let s=this.logger.forComponent(`${this.logPrefix}:query:`+O(e,"base58btc")),a=!1;try{n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(s("waiting for initial query-self query before continuing"),await Ge(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),s("query:start");let c=await $o(e),l=this.routingTable.closestPeers(c),u=l.slice(0,Math.min(this.disjointPaths,l.length));if(l.length===0){s.error("Running query with no peers");return}let d=new zt,f=u.map((h,p)=>Ty({...n,key:e,startingPeer:h,ourPeerId:this.peerId,signal:i,query:t,pathIndex:p,numPaths:u.length,alpha:this.alpha,queryFuncTimeout:n.queryFuncTimeout,log:s,peersSeen:d,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let h of Ht(...f)){if(h.name==="QUERY_ERROR"&&s.error("query error",h.error),h.name==="PEER_RESPONSE")for(let p of[...h.closer,...h.providers])await this.connectionManager.isDialable(p.multiaddrs)&&await this.routingTable.add(p.id);yield h}a=!0}catch(c){if(!(!this.running&&c.name==="QueryAbortedError"))throw c}finally{a||(s("query exited early"),o.abort()),i.clear(),s("query:done")}}};function jC(r){return r[Symbol.asyncIterator]!=null}function JC(r){if(jC(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 $1=JC;var ek=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 tk(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!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:u}=ek(r),d=(...h)=>{let p=t.multiArgs?h:h[0];t.filter&&!t.filter(p)||(c.push(p),t.count===c.length&&(n(),i(c)))},f=h=>{n(),s(h)};n=()=>{for(let h of a)u(h,d);for(let h of t.rejectionEvents)u(h,f)};for(let h of a)l(h,d);for(let h of t.rejectionEvents)l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=Xr(o,{milliseconds:t.timeout});return i.cancel=n,i}return o}function _y(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=tk(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}var K1=class{log;peerId;peerRouting;routingTable;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.running=!1,this.peerRouting=t.peerRouting,this.routingTable=t.routingTable,this.count=t.count??I1,this.interval=t.interval??cy,this.initialInterval=t.initialInterval??ly,this.queryTimeout=t.queryTimeout??uy,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=L1(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)})},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=j(),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=le(e);this.controller.signal;try{this.routingTable.size===0&&(this.log("routing table was empty, waiting for some peers before running query"),await _y(this.routingTable,"peer:add",{signal:t,filter:i=>!this.peerId.equals(i.detail)}),this.log("routing table has peers, continuing with query")),this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await ut(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),i=>uo(i,this.count),async i=>$1(i));this.log("self-query found %d peers in %dms",o,Date.now()-n)}catch(n){this.log.error("self-query error",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)})},this.interval))}};var H1=class extends pe{log;reprovideQueue;maxQueueSize;datastore;timeout;reprovideTimeout;running;shutdownController;reprovideThreshold;contentRouting;datastorePrefix;addressManager;validity;interval;lock;peerId;constructor(e,t){super(),this.log=e.logger.forComponent(`${t.logPrefix}:reprovider`),this.peerId=e.peerId,this.reprovideQueue=new $t({concurrency:t.concurrency??iy,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new un({...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??oy,this.maxQueueSize=t.maxQueueSize??sy,this.validity=t.validity??ny,this.interval=t.interval??ay,this.contentRouting=t.contentRouting,this.lock=t.lock,this.running=!1,this.reprovide=L1(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,this.timeout=setTimeout(()=>{this.cleanUp().catch(e=>{this.log.error("error running reprovide/cleanup - %e",e)})},this.interval))}stop(){this.running=!1,this.reprovideQueue.clear(),clearTimeout(this.timeout),this.shutdownController?.abort()}async cleanUp(){let e=await this.lock.writeLock();try{this.safeDispatchEvent("reprovide:start");for await(let t of this.datastore.query({prefix:this.datastorePrefix}))try{let{cid:n,peerId:o}=R1(t.key),i=N1(t.value).getTime(),s=i+this.validity,a=Date.now(),c=a>s;this.log.trace("comparing: %d < %d = %s %s",i,a-this.validity,c,c?"(expired)":""),c&&await this.datastore.delete(t.key),this.peerId.equals(o)&&a-s<this.reprovideThreshold&&this.queueReprovide(n).catch(l=>{this.log.error("could not reprovide %c - %e",n,l)})}catch(n){this.log.error("error processing datastore key %s - %e",t.key,n.message)}this.log("reprovide/cleanup successful")}finally{e(),this.safeDispatchEvent("reprovide:end"),this.running&&(this.timeout=setTimeout(()=>{this.cleanUp().catch(t=>{this.log.error("error running re-provide - %e",t)})},this.interval))}}async queueReprovide(e){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);let t=this.reprovideQueue.queue.find(n=>n.options.cid.equals(e));if(t!=null)return this.log.trace("not adding %c to re-provide queue - already in queue",e),t.join();this.log.trace("adding %c to re-provide queue",e),this.reprovideQueue.add(async n=>{if(n.signal?.throwIfAborted(),!this.running)return;this.log.trace("re-providing %c",e);let o=this.reprovideTimeout.getTimeoutSignal(n);try{await this.reprovide(n.cid,n)}finally{this.reprovideTimeout.cleanUp(o)}this.log.trace("re-provided %c",e)},{signal:this.shutdownController?.signal,cid:e}).catch(n=>{this.log.error("could not re-provide key %c - %e",e,n)})}async reprovide(e,t){await kt(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var rk=20,nk=5e3,ok="kad-close",ik=50,q1=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??nk,this.peerSetSize=t.peerSetSize??rk,this.closeTagName=t.closeTagName??ok,this.closeTagValue=t.closeTagValue??ik,this.closestPeers=new zt,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await Et(this.components.peerId);this.newPeers=new qo(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 zt(this.newPeers?.peers.map(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},[I3]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[I3]:void 0}})})])}};function Fc(r){return Array.isArray(r?.peers)}var z1=class{root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e){this.prefixLength=e.prefixLength??Cy,this.kBucketSize=e.kBucketSize??R3,this.splitThreshold=e.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=e.numberOfOldContactsToPing??ky,this.lastPingThreshold=e.lastPingThreshold??Py,this.ping=e.ping,this.verify=e.verify,this.onAdd=e.onAdd,this.onRemove=e.onRemove,this.addingPeerMap=new ft,this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e){this.localPeer={peerId:e,kadId:await Et(e),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await Et(e),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),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!ak(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n);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);i&&await this._add(e,t)}*closest(e,t=this.kBucketSize){let n=new qo(e,t);for(let o of this.toIterable())n.addWithKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*jt(n.peers,o=>o.id)}count(){function e(t){if(Fc(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){let t=this._determineBucket(e),n=this._indexOf(t,e);if(n>-1){let o=t.peers.splice(n,1)[0];await this.onRemove?.(o,t)}}*toIterable(){function*e(t){if(Fc(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+O(sr(e,t),"base16"))}_determineBucket(e){let t=O(e,"base2");function n(o,i=0){return Fc(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=>J(n.kadId,t))}async _split(e){let t={prefix:"0",depth:e.depth+1,peers:[]},n={prefix:"1",depth:e.depth+1,peers:[]};for(let o of e.peers)O(o.kadId,"base2")[e.depth]==="0"?(t.peers.push(o),await this.onMove?.(o,e,t)):(n.peers.push(o),await this.onMove?.(o,e,n));sk(e,t,n)}};function sk(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function ak(r,e){return r.lastPing<Date.now()-e}var R3=20,Cy=6;var ck=20,lk=100,ky=3;var uk=20,dk=100,Ry="kad-peer",fk=1,Py=6e5,hk=!0,pk=1e3,W1=class extends pe{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??R3,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??Ry,this.peerTagValue=t.peerTagValue??fk,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??hk,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??pk,this.pingOldContactQueue=new gt({concurrency:t.pingOldContactConcurrency??uk,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??dk}),this.pingOldContactTimeout=new un({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new gt({concurrency:t.pingNewContactConcurrency??ck,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??lk}),this.pingNewContactTimeout=new un({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new z1({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}),this.closestPeerTagger=new q1(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,await mt(this.closestPeerTagger),await this.kb.addSelfPeer(this.components.peerId))}async afterStart(){Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let e=0;for(let t of await this.components.peerStore.all({filters:[n=>n.protocols.includes(this.protocol)&&n.tags.has(Ry)],limit:this.populateFromDatastoreLimit})){if(!this.running)return;try{await this.add(t.id),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(t.id,{tags:{[this.peerTagName]:void 0}})}}this.log("added %d peer store peers to the routing table",e)}).catch(e=>{this.log.error("error adding peer store peers to the routing table %e",e)})}async stop(){this.running=!1,await Ct(this.closestPeerTagger),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort()}async peerAdded(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}}),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=le([c,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 ln(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=le([n,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{this.log("pinging contact %p",e.peerId);for await(let o of this.network.sendRequest(e.peerId,{type:xe.PING},t))if(o.type===G1.PEER_RESPONSE)return o.messageType===xe.PING?(this.log("contact %p ping ok",e.peerId),this.safeDispatchEvent("peer:ping",{detail:e.peerId}),!0):!1;return!1}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){let t=await Et(e);return this.kb.get(t)?.peerId}closestPeer(e){let t=this.closestPeers(e,1);if(t.length>0)return t[0]}closestPeers(e,t=this.kBucketSize){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){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await Et(e);await this.kb.remove(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(Fc(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 Dy=[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 Q1=15,Y1=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??dy,this.refreshQueryTimeout=s??fy,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){this.log("refreshing routing table");let t=this._maxCommonPrefix(),n=this._getTrackedCommonPrefixLengthsForRefresh(t);this.log(`max common prefix length ${t}`),this.log(`tracked CPLs [ ${n.map(o=>o.toISOString()).join(", ")} ]`),Promise.all(n.map(async(o,i)=>{try{if(await this._refreshCommonPrefixLength(i,o,e),this._numPeersForCpl(t)===0){let s=Math.min(2*(i+1),n.length-1);for(let a=i+1;a<s+1;a++)try{await this._refreshCommonPrefixLength(a,o,e)}catch(c){this.log.error(c)}}}catch(s){this.log.error(s)}})).catch(o=>{this.log.error(o)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(o=>{this.log.error(o)})}async _refreshCommonPrefixLength(e,t,n){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 o=await this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,o,this.routingTable.size);let i=AbortSignal.timeout(this.refreshQueryTimeout);let s=await $1(this.peerRouting.getClosestPeers(o.toMultihash().bytes,{signal:i}));this.log(`found ${s} peers that were close to imaginary peer %p`,o),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,o,this.routingTable.size)}_getTrackedCommonPrefixLengthsForRefresh(e){e>Q1&&(e=Q1);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}async _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=qt(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),i=Ee(o);return it(i)}async _makePeerId(e,t,n){if(n>Q1)throw new Error(`Cannot generate peer ID for common prefix length greater than ${Q1}`);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=Dy[c],u=new ArrayBuffer(34),d=new DataView(u,0,u.byteLength);return d.setUint8(0,Ye.code),d.setUint8(1,32),d.setUint32(2,l,!1),new Uint8Array(d.buffer,d.byteOffset,d.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=sr(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var X1=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 fe("Missing key");let n;try{n=Q.decode(t.key)}catch{throw new fe("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=Ee(o.id),s=it(i),a=o.multiaddrs.map(c=>$(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 Z1=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){if(this.log("incoming request from %p for peers closer to %b",e,t.key),t.key==null)throw new fe("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getCloserPeersOffline(t.key,e);J(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(i=>i.decapsulateCode(ne("p2p").code))});let o={type:xe.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 than %p",t.key,e),o}};var j1=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 fe("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=Q.decode(t.key)}catch{throw new fe("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[o,i]=await Promise.all([Ri(jt(await this.providers.getProviders(n),async a=>{let c=await this.peerStore.get(a);return{id:c.id,multiaddrs:c.addresses.map(({multiaddr:u})=>u)}})),this.peerRouting.getCloserPeersOffline(t.key,this.peerId)]),s={type:xe.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 J1=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 fe("Invalid key");let o={type:xe.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(Ey(n)){this.log("is public key");let a=Sy(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new Ce("No public key found in key book");c=Nt(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new vt(n,c,new Date).serialize(),o}let[i,s]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getCloserPeersOffline(n,e)]);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=Ko(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(i){if(i.name==="NotFoundError")return;throw i}let o=vt.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>ty){await this.datastore.delete(t);return}return o}};var ef=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 tf=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){let o=`Empty record from: ${e.toString()}`;throw this.log.error(o),new fe(o)}try{let o=vt.deserialize(t.record);await ra(this.validators,o),o.timeReceived=new Date;let i=Ko(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 rf=class{handlers;routingTable;log;metrics;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`)},this.log=e.logger.forComponent(`${t.logPrefix}:rpc`),this.routingTable=t.routingTable,this.handlers={[xe.GET_VALUE.toString()]:new J1(e,t),[xe.PUT_VALUE.toString()]:new tf(e,t),[xe.FIND_NODE.toString()]:new Z1(e,t),[xe.ADD_PROVIDER.toString()]:new X1(e,t),[xe.GET_PROVIDERS.toString()]:new j1(e,t),[xe.PING.toString()]:new ef(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})}}onIncomingStream(e){let t="unknown";Promise.resolve().then(async()=>{let{stream:n,connection:o}=e,i=o.remotePeer,s=this;await ut(n,a=>Vr(a),async function*(a){for await(let c of a){let l=Xn.decode(c);t=l.type,s.log("incoming %s from %p",l.type,i);let u=await s.handleMessage(i,l);u!=null&&(yield Xn.encode(u))}},a=>Fr(a),n)}).catch(n=>{this.log.error("error handling %s RPC message from %p - %e",t,e.connection.remotePeer,n)})}};var nf=class extends pe{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 D3=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await kt(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)}async put(e,t,n){await kt(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 Ce("Could not find value for key")}},N3=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 Ce("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},mk=32,gk=64,of=class extends pe{protocol;routingTable;providers;network;peerRouting;components;log;running;kBucketSize;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;reprovider;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.protocol=t.protocol??ry,this.kBucketSize=t.kBucketSize??20,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??mk,this.maxOutboundStreams=t.maxOutboundStreams??gk,this.peerInfoMapper=t.peerInfoMapper??xy;let a=vi();this.providers=new F1(e,{...t.providers,logPrefix:n,datastorePrefix:o,lock:a}),this.validators={...by,...t.validators},this.selectors={...wy,...t.selectors},this.network=new B1(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:i}),this.routingTable=new W1(e,{kBucketSize:t.kBucketSize,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 c=j();t.allowQueryWithZeroPeers===!0&&c.resolve(),this.queryManager=new V1(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:n,metricsPrefix:i,initialQuerySelfHasRun:c,routingTable:this.routingTable}),this.peerRouting=new U1(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new O1(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:o}),this.contentRouting=new M1(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new Y1(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new rf(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 nf(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new K1(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:c,routingTable:this.routingTable,operationMetrics:s}),this.reprovider=new H1(e,{...t.reprovide,logPrefix:n,metricsPrefix:i,datastorePrefix:o,contentRouting:this.contentRouting,lock:a,operationMetrics:s}),this.network.addEventListener("peer",l=>{let u=l.detail;this.onPeerConnect(u).catch(d=>{this.log.error("could not add %p to routing table",u.id,d)}),this.dispatchEvent(new CustomEvent("peer",{detail:u}))}),this.topologyListener.addEventListener("peer",l=>{let u=l.detail;Promise.resolve().then(async()=>{let d=await this.components.peerStore.get(u),f={id:u,multiaddrs:d.addresses.map(({multiaddr:h})=>h),protocols:d.protocols};await this.onPeerConnect(f)}).catch(d=>{this.log.error("could not add %p to routing table - %e",u,d)})}),this.dhtPeerRouting=new N3(this),this.dhtContentRouting=new D3(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",l=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let u=l.detail.peer.addresses.some(({multiaddr:f})=>Ay(f)),d=this.getMode();u&&d==="client"?await this.setMode("server"):d==="server"&&!u&&await this.setMode("client")}).catch(u=>{this.log.error("error setting dht server mode",u)})}),this.get=Fi(this.get.bind(this),s,"GET_VALUE"),this.findProviders=Fi(this.findProviders.bind(this),s,"FIND_PROVIDERS"),this.findPeer=Fi(this.findPeer.bind(this),s,"FIND_PEER"),this.getClosestPeers=Fi(this.getClosestPeers.bind(this),s,"GET_CLOSEST_PEERS"),this.provide=Fi(this.provide.bind(this),s,"PROVIDE"),this.put=Fi(this.put.bind(this),s,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[Ae]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery"];[dr]=["@libp2p/identify"];get[hn](){return this.dhtContentRouting}get[pn](){return this.dhtPeerRouting}get[Xo](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id),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(t=>t.toString()));return}try{await this.routingTable.add(e.id)}catch(t){this.log.error("could not add %p to routing table",e.id,t)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e,t=!1){if(e===this.getMode()&&!t){this.log("already in %s mode",e);return}if(await this.components.registrar.unhandle(this.protocol),e===this.getMode()&&!t){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),{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running||(this.running=!0,await this.setMode(this.clientMode?"client":"server",!0),await mt(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await mt(this.querySelf))}async stop(){this.running=!1,await Ct(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){await this.providers.removeProvider(e,this.components.peerId)}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(){this.routingTableRefresh.refreshTable(!0)}};var G1;(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"})(G1||(G1={}));function Ny(r={}){return e=>new of(e,r)}var Ky=Mr($y(),1),sa=Ky.default;var Hw=Mr(Zy(),1);var aa={};Ze(aa,{create:()=>Lk,derivedEmptyPasswordKey:()=>cf});var cf={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function Lk(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=tr.get();t*=8;async function c(d,f){let h=a.getRandomValues(new Uint8Array(i)),p=a.getRandomValues(new Uint8Array(n)),g={name:e,iv:p};typeof f=="string"&&(f=L(f));let m;if(f.length===0){m=await a.subtle.importKey("jwk",cf,{name:"AES-GCM"},!0,["encrypt"]);try{let x={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},w=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(x,w,{name:e,length:t},!0,["encrypt"])}catch{m=await a.subtle.importKey("jwk",cf,{name:"AES-GCM"},!0,["encrypt"])}}else{let x={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},w=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(x,w,{name:e,length:t},!0,["encrypt"])}let y=await a.subtle.encrypt(g,m,d);return ke([h,g.iv,new Uint8Array(y)])}async function l(d,f){let h=d.subarray(0,i),p=d.subarray(i,i+n),g=d.subarray(i+n),m={name:e,iv:p};typeof f=="string"&&(f=L(f));let y;if(f.length===0)try{let w={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},I=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,I,{name:e,length:t},!0,["decrypt"])}catch{y=await a.subtle.importKey("jwk",cf,{name:"AES-GCM"},!0,["decrypt"])}else{let w={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},I=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,I,{name:e,length:t},!0,["decrypt"])}let x=await a.subtle.decrypt(m,y,g);return new Uint8Array(x)}return{encrypt:c,decrypt:l}}var ye=Mr(jy());function Vi(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 zo(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 u=a-1;u>=0;u--){let d=Math.pow(2,u*e);l[i-u-1]=Math.floor(o/d),o-=l[i-u-1]*d}return c}s*=Math.pow(2,e)}return new ArrayBuffer(0)}function df(...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 M3(){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=Vi(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,Vi(i,8)-n}function Jy(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=zo(s,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=zo(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 ew(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 cr(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 Zie=Math.log(2);function ff(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function B3(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 ro(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 $c=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return B3(this.items)}},Vc=[new Uint8Array([1])],tw="0123456789";var la="",dn=new ArrayBuffer(0),U3=new Uint8Array(0),Kc="EndOfContent",nw="OCTET STRING",ow="BIT STRING";function no(r){var e;return e=class extends r{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?ye.BufferSourceConverter.toUint8Array(i.valueHex):U3}get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}fromBER(n,o,i){let s=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!ro(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",dn)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:ye.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var jn=class{constructor({blockLength:e=0,error:t=la,warnings:n=[],valueBeforeDecode:o=U3}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=ye.BufferSourceConverter.toUint8Array(o)}static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:ye.Convert.ToHex(this.valueBeforeDecodeView)}}};jn.NAME="baseBlock";var Bt=class extends jn{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'")}};Bt.NAME="valueBlock";var hf=class extends no(jn){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?ye.BufferSourceConverter.toUint8Array(e.valueHex):U3,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",dn}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=zo(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=ye.BufferSourceConverter.toUint8Array(e);if(!ro(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),u=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===u){u+=255;let f=new Uint8Array(u);for(let h=0;h<l.length;h++)f[h]=l[h];l=this.valueHexView=new Uint8Array(u)}}this.blockLength=c+1,l[c-1]=i[c]&127;let d=new Uint8Array(c);for(let f=0;f<c;f++)d[f]=l[f];l=this.valueHexView=new Uint8Array(c),l.set(d),this.blockLength<=9?this.tagNumber=Vi(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}}};hf.NAME="identificationBlock";var pf=class extends jn{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=ye.BufferSourceConverter.toUint8Array(e);if(!ro(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=Vi(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=zo(this.length,8);if(o.byteLength>127)return this.error="Too big length",dn;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}}};pf.NAME="lengthBlock";var G={},St=class extends jn{constructor({name:e=la,optional:t=!1,primitiveSchema:n,...o}={},i){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new hf(o),this.lenBlock=new pf(o),this.valueBlock=i?new i(o):new Bt(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 $c;t||iw(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?dn: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():ye.Convert.ToHex(this.toBER())}onAsciiEncoding(){return`${this.constructor.NAME} : ${ye.Convert.ToHex(this.valueBlock.valueBeforeDecodeView)}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return ew(t,n)}};St.NAME="BaseBlock";function iw(r){if(r instanceof G.Constructed)for(let e of r.valueBlock.value)iw(e)&&(r.lenBlock.isIndefiniteForm=!0);return!!r.lenBlock.isIndefiniteForm}var mf=class extends St{constructor({value:e=la,...t}={},n){super(t,n),e&&this.fromString(e)}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=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}'`}};mf.NAME="BaseStringBlock";var gf=class extends no(Bt){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};gf.NAME="PrimitiveValueBlock";var sw,yf=class extends St{constructor(e={}){super(e,gf),this.idBlock.isConstructed=!1}};sw=yf;G.Primitive=sw;yf.NAME="PRIMITIVE";function Hk(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 Zf(r,e=0,t=r.length){let n=e,o=new St({},Bt),i=new jn;if(!ro(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=St;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=G.EndOfContent;break;case 1:c=G.Boolean;break;case 2:c=G.Integer;break;case 3:c=G.BitString;break;case 4:c=G.OctetString;break;case 5:c=G.Null;break;case 6:c=G.ObjectIdentifier;break;case 10:c=G.Enumerated;break;case 12:c=G.Utf8String;break;case 13:c=G.RelativeObjectIdentifier;break;case 14:c=G.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=G.Sequence;break;case 17:c=G.Set;break;case 18:c=G.NumericString;break;case 19:c=G.PrintableString;break;case 20:c=G.TeletexString;break;case 21:c=G.VideotexString;break;case 22:c=G.IA5String;break;case 23:c=G.UTCTime;break;case 24:c=G.GeneralizedTime;break;case 25:c=G.GraphicString;break;case 26:c=G.VisibleString;break;case 27:c=G.GeneralString;break;case 28:c=G.UniversalString;break;case 29:c=G.CharacterString;break;case 30:c=G.BmpString;break;case 31:c=G.DATE;break;case 32:c=G.TimeOfDay;break;case 33:c=G.DateTime;break;case 34:c=G.Duration;break;default:{let l=o.idBlock.isConstructed?new G.Constructed:new G.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?G.Constructed:G.Primitive}return o=Hk(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 jf(r){if(!r.byteLength){let e=new St({},Bt);return e.error="Input buffer has zero length",{offset:-1,result:e}}return Zf(ye.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function qk(r,e){return r?1:e}var _n=class extends Bt{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!ro(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(;qk(this.isIndefiniteForm,n)>0;){let s=Zf(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===Kc)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===Kc?this.value.pop():this.warnings.push("No EndOfContent block encoded")),i}toBER(e,t){let n=t||new $c;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?dn:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};_n.NAME="ConstructedValueBlock";var aw,Wo=class extends St{constructor(e={}){super(e,_n),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(`
4
15
  `).map(o=>` ${o}`).join(`
5
16
  `));let t=this.idBlock.tagClass===3?`[${this.idBlock.tagNumber}]`:this.constructor.NAME;return e.length?`${t} :
6
17
  ${e.join(`
7
- `)}`:`${t} :`}};e6=_o;G.Constructed=e6;_o.NAME="CONSTRUCTED";var fu=class extends Ut{fromBER(e,t,n){return t}toBER(e){return Yr}};fu.override="EndOfContentValueBlock";var t6,hu=class extends vt{constructor(e={}){super(e,fu),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};t6=hu;G.EndOfContent=t6;hu.NAME=Ha;var r6,Kn=class extends vt{constructor(e={}){super(e,Ut),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}`}};r6=Kn;G.Null=r6;Kn.NAME="NULL";var pu=class extends Wn(Ut){constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=ye.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);return zn(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,R2.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};pu.NAME="BooleanValueBlock";var n6,mu=class extends vt{constructor(e={}){super(e,pu),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};n6=mu;G.Boolean=n6;mu.NAME="BOOLEAN";var gu=class extends Wn(xn){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=xn.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===Ha){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(s!==Xg)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?xn.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};gu.NAME="OctetStringValueBlock";var o6,Hn=class r extends vt{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},gu),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=qu(i,0,i.byteLength);s.offset!==-1&&s.offset===n&&(this.valueBlock.value=[s.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){return this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length?_o.prototype.onAsciiEncoding.call(this):`${this.constructor.NAME} : ${ye.Convert.ToHex(this.valueBlock.valueHexView)}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let t of this.valueBlock.value)t instanceof r&&e.push(t.valueBlock.valueHexView);return ye.BufferSourceConverter.concat(e)}};o6=Hn;G.OctetString=o6;Hn.NAME=Xg;var yu=class extends Wn(xn){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=xn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===Ha){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==jg)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=ye.BufferSourceConverter.toUint8Array(e);if(!zn(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=qu(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 xn.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength)return Yr;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}}};yu.NAME="BitStringValueBlock";var i6,Is=class extends vt{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},yu),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 _o.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let o of t)e.push(o.toString(2).padStart(8,"0"));let n=e.join("");return`${this.constructor.NAME} : ${n.substring(0,n.length-this.valueBlock.unusedBits)}`}}};i6=Is;G.BitString=i6;Is.NAME=jg;var s6;function zS(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,u=c<s?s:c,d=0;for(let f=u;f>=0;f--,d++){switch(!0){case d<a.length:l=i[s-d]+a[c-d]+t[0];break;default:l=i[s-d]+t[0]}switch(t[0]=l/10,!0){case d>=i.length:i=iu(new Uint8Array([l%10]),i);break;default:i[s-d]=l%10}}return t[0]>0&&(i=iu(t,i)),i}function Yg(r){if(r>=$a.length)for(let e=$a.length;e<=r;e++){let t=new Uint8Array([0]),n=$a[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=iu(t,n)),$a.push(n)}return $a[r]}function WS(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,u=0;for(let d=c;d>=0;d--,u++)switch(l=i[s-u]-a[c-u]-t,!0){case l<0:t=1,i[s-u]=l+10;break;default:t=0,i[s-u]=l}if(t>0)for(let d=s-c+1;d>=0;d--,u++)if(l=i[s-u]-t,l<0)t=1,i[s-u]=l+10;else{t=0,i[s-u]=l;break}return i.slice()}var qa=class extends Wn(Ut){constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}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=R2.call(this)))}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(Wg(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?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=WS(Yg(n),t),s="-";break;default:t=zS(t,Yg(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(s+=Qg.charAt(t[c]));return a===!1&&(s+=Qg.charAt(0)),s}};s6=qa;qa.NAME="IntegerValueBlock";Object.defineProperty(s6.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var a6,rt=class r extends vt{constructor(e={}){super(e,qa),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return su(),BigInt(this.valueBlock.toString())}static fromBigInt(e){su();let t=BigInt(e),n=new Ka,o=t.toString(16).replace(/^-/,""),i=new Uint8Array(ye.Convert.FromHex(o));if(t<0){let a=new Uint8Array(i.length+(i[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${ye.Convert.ToHex(a)}`)+t,u=ye.BufferSourceConverter.toUint8Array(ye.Convert.FromHex(l.toString(16)));u[0]|=128,n.write(u)}else i[0]&128&&n.write(new Uint8Array([0])),n.write(i);return new r({valueHex:n.final()})}convertToDER(){let e=new r({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new r({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};a6=rt;G.Integer=a6;rt.NAME="INTEGER";var c6,wu=class extends rt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};c6=wu;G.Enumerated=c6;wu.NAME="ENUMERATED";var za=class extends Wn(Ut){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=ye.BufferSourceConverter.toUint8Array(e);if(!zn(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));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?(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=gi(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){su();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=To(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Yr;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=ye.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}}};za.NAME="sidBlock";var bu=class extends Ut{constructor({value:e=Ts,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new za;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,Yr;t.push(o)}return D2(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 za;if(o>Number.MAX_SAFE_INTEGER){su();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}};bu.NAME="ObjectIdentifierValueBlock";var l6,Cr=class extends vt{constructor(e={}){super(e,bu),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};l6=Cr;G.ObjectIdentifier=l6;Cr.NAME="OBJECT IDENTIFIER";var Wa=class extends Wn($n){constructor({valueDec:e=0,...t}={}){super(t),this.valueDec=e}fromBER(e,t,n){if(n===0)return t;let o=ye.BufferSourceConverter.toUint8Array(e);if(!zn(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));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?(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=gi(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=To(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Yr;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=ye.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};Wa.NAME="relativeSidBlock";var xu=class extends Ut{constructor({value:e=Ts,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new Wa;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,Yr;n.push(i)}return D2(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 Wa;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}};xu.NAME="RelativeObjectIdentifierValueBlock";var u6,vu=class extends vt{constructor(e={}){super(e,xu),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};u6=vu;G.RelativeObjectIdentifier=u6;vu.NAME="RelativeObjectIdentifier";var d6,ut=class extends _o{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};d6=ut;G.Sequence=d6;ut.NAME="SEQUENCE";var f6,Eu=class extends _o{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};f6=Eu;G.Set=f6;Eu.NAME="SET";var Su=class extends Wn(Ut){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=Ts}toJSON(){return{...super.toJSON(),value:this.value}}};Su.NAME="StringValueBlock";var Au=class extends Su{};Au.NAME="SimpleStringValueBlock";var zt=class extends lu{constructor({...e}={}){super(e,Au)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,ye.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}};zt.NAME="SIMPLE STRING";var Iu=class extends zt{fromBuffer(e){this.valueBlock.valueHexView=ye.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=ye.Convert.ToUtf8String(e)}catch(t){this.warnings.push(`Error during "decodeURIComponent": ${t}, using raw string`),this.valueBlock.value=ye.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array(ye.Convert.FromUtf8String(e)),this.valueBlock.value=e}};Iu.NAME="Utf8StringValueBlock";var h6,qn=class extends Iu{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};h6=qn;G.Utf8String=h6;qn.NAME="UTF8String";var Tu=class extends zt{fromBuffer(e){this.valueBlock.value=ye.Convert.ToUtf16String(e),this.valueBlock.valueHexView=ye.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array(ye.Convert.FromUtf16String(e))}};Tu.NAME="BmpStringValueBlock";var p6,_u=class extends Tu{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};p6=_u;G.BmpString=p6;_u.NAME="BMPString";var Cu=class extends zt{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=To(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}};Cu.NAME="UniversalStringValueBlock";var m6,ku=class extends Cu{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};m6=ku;G.UniversalString=m6;ku.NAME="UniversalString";var g6,Pu=class extends zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};g6=Pu;G.NumericString=g6;Pu.NAME="NumericString";var y6,Ru=class extends zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};y6=Ru;G.PrintableString=y6;Ru.NAME="PrintableString";var w6,Du=class extends zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};w6=Du;G.TeletexString=w6;Du.NAME="TeletexString";var b6,Lu=class extends zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};b6=Lu;G.VideotexString=b6;Lu.NAME="VideotexString";var x6,Nu=class extends zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};x6=Nu;G.IA5String=x6;Nu.NAME="IA5String";var v6,Bu=class extends zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};v6=Bu;G.GraphicString=v6;Bu.NAME="GraphicString";var E6,Ga=class extends zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};E6=Ga;G.VisibleString=E6;Ga.NAME="VisibleString";var S6,Ou=class extends zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};S6=Ou;G.GeneralString=S6;Ou.NAME="GeneralString";var A6,Mu=class extends zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};A6=Mu;G.CharacterString=A6;Mu.NAME="CharacterString";var I6,Qa=class extends Ga{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,ye.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]=rr(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=rr(this.month,2),t[2]=rr(this.day,2),t[3]=rr(this.hour,2),t[4]=rr(this.minute,2),t[5]=rr(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}}};I6=Qa;G.UTCTime=I6;Qa.NAME="UTCTime";var T6,Uu=class extends Qa{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(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond))}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 d=new Number(e[e.length-1]);if(isNaN(d.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 d=1,f=n.indexOf("+"),h="";if(f===-1&&(f=n.indexOf("-"),d=-1),f!==-1){if(h=n.substring(f+1),n=n.substring(0,f),h.length!==2&&h.length!==4)throw new Error("Wrong input string for conversion");let p=parseInt(h.substring(0,2),10);if(isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");if(a=d*p,h.length===4){if(p=parseInt(h.substring(2,4),10),isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");c=d*p}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let d=new Number(`0${n.substring(l)}`);if(isNaN(d.valueOf()))throw new Error("Wrong input string for conversion");i=d.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 d=60*i;this.minute=Math.floor(d),d=60*(d-this.minute),this.second=Math.floor(d),d=1e3*(d-this.second),this.millisecond=Math.floor(d)}break;case o.length===12:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=60*i;this.second=Math.floor(d),d=1e3*(d-this.second),this.millisecond=Math.floor(d)}break;case o.length===14:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=1e3*i;this.millisecond=Math.floor(d)}break;default:throw new Error("Wrong input string for conversion")}let u=s.exec(o);if(u===null)throw new Error("Wrong input string for conversion");for(let d=1;d<u.length;d++)switch(d){case 1:this.year=parseInt(u[d],10);break;case 2:this.month=parseInt(u[d],10);break;case 3:this.day=parseInt(u[d],10);break;case 4:this.hour=parseInt(u[d],10)+a;break;case 5:this.minute=parseInt(u[d],10)+c;break;case 6:this.second=parseInt(u[d],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let d=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=d.getUTCFullYear(),this.month=d.getUTCMonth(),this.day=d.getUTCDay(),this.hour=d.getUTCHours(),this.minute=d.getUTCMinutes(),this.second=d.getUTCSeconds(),this.millisecond=d.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(rr(this.year,4)),t.push(rr(this.month,2)),t.push(rr(this.day,2)),t.push(rr(this.hour,2)),t.push(rr(this.minute,2)),t.push(rr(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(rr(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};T6=Uu;G.GeneralizedTime=T6;Uu.NAME="GeneralizedTime";var _6,Fu=class extends qn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};_6=Fu;G.DATE=_6;Fu.NAME="DATE";var C6,Vu=class extends qn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};C6=Vu;G.TimeOfDay=C6;Vu.NAME="TimeOfDay";var k6,$u=class extends qn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};k6=$u;G.DateTime=k6;$u.NAME="DateTime";var P6,Ku=class extends qn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};P6=Ku;G.Duration=P6;Ku.NAME="Duration";var R6,Hu=class extends qn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};R6=Hu;G.TIME=R6;Hu.NAME="TIME";function U(r,e="utf8"){let t=Ul[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}function Wt(r){if(isNaN(r)||r<=0)throw new k("random bytes length must be a Number bigger than 0");return di(r)}var Ya=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},Xa=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},zu=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var D6={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new zu("Missing Web Crypto API. The most likely cause of this error is that this page is being accessed from an insecure context (i.e. not HTTPS). For more information and possible resolutions see https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api");return e}};var nr=D6;async function L6(r){let e=await nr.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),t=await GS(e);return{privateKey:t[0],publicKey:t[1]}}async function N6(r,e){let t=await nr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await nr.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function B6(r,e,t){let n=await nr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return nr.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function GS(r){if(r.privateKey==null||r.publicKey==null)throw new k("Private and public key are required");return Promise.all([nr.get().subtle.exportKey("jwk",r.privateKey),nr.get().subtle.exportKey("jwk",r.publicKey)])}function B2(r){if(r.kty!=="RSA")throw new k("invalid key type");if(r.n==null)throw new k("invalid key modulus");return N(r.n,"base64url").length*8}var _s=class{type="RSA";_key;_raw;_multihash;constructor(e,t){this._key=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=ja.jwkToPkix(this._key)),this._raw}toMultihash(){return this._multihash}toCID(){return X.createV1(114,this._multihash)}toString(){return ve.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ne(this.raw,e.raw)}verify(e,t){return B6(this._key,t,e)}},Za=class{type="RSA";_key;_raw;publicKey;constructor(e,t){this._key=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=ja.jwkToPkcs1(this._key)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ne(this.raw,e.raw)}sign(e){return N6(this._key,e)}};var Wu=8192,O2=18;function O6(r){let{result:e}=yi(r),t=e.valueBlock.value;return{n:vn(t[1]),e:vn(t[2]),d:vn(t[3]),p:vn(t[4]),q:vn(t[5]),dp:vn(t[6]),dq:vn(t[7]),qi:vn(t[8]),kty:"RSA",alg:"RS256"}}function QS(r){if(r.n==null||r.e==null||r.d==null||r.p==null||r.q==null||r.dp==null||r.dq==null||r.qi==null)throw new k("JWK was missing components");let t=new ut({value:[new rt({value:0}),rt.fromBigInt(En(N(r.n,"base64url"))),rt.fromBigInt(En(N(r.e,"base64url"))),rt.fromBigInt(En(N(r.d,"base64url"))),rt.fromBigInt(En(N(r.p,"base64url"))),rt.fromBigInt(En(N(r.q,"base64url"))),rt.fromBigInt(En(N(r.dp,"base64url"))),rt.fromBigInt(En(N(r.dq,"base64url"))),rt.fromBigInt(En(N(r.qi,"base64url")))]}).toBER();return new Uint8Array(t,0,t.byteLength)}function M6(r){let{result:e}=yi(r),t=e.valueBlock.value[1].valueBlock.value[0].valueBlock.value;return{kty:"RSA",n:vn(t[0]),e:vn(t[1])}}function M2(r){if(r.n==null||r.e==null)throw new k("JWK was missing components");let t=new ut({value:[new ut({value:[new Cr({value:"1.2.840.113549.1.1.1"}),new Kn]}),new Is({valueHex:new ut({value:[rt.fromBigInt(En(N(r.n,"base64url"))),rt.fromBigInt(En(N(r.e,"base64url")))]}).toBER()})]}).toBER();return new Uint8Array(t,0,t.byteLength)}function vn(r){let e=r.valueBlock.valueHexView;for(;e[0]===0;)e=e.subarray(1);return U(e,"base64url")}function En(r){let e=[];return r.forEach(function(t){let n=t.toString(16);n.length%2>0&&(n=`0${n}`),e.push(n)}),BigInt("0x"+e.join(""))}function Gu(r){let e=O6(r);return U6(e)}function U2(r){let e=M6(r);if(B2(e)>Wu)throw new Rn("Key size is too large");let t=Tr(bn.encode({Type:Ye.RSA,Data:r})),n=Ot(O2,t);return new _s(e,n)}function U6(r){if(B2(r)>Wu)throw new k("Key size is too large");let e=F6(r),t=Tr(bn.encode({Type:Ye.RSA,Data:M2(e.publicKey)})),n=Ot(O2,t);return new Za(e.privateKey,new _s(e.publicKey,n))}async function F2(r){if(r>Wu)throw new k("Key size is too large");let e=await L6(r),t=Tr(bn.encode({Type:Ye.RSA,Data:M2(e.publicKey)})),n=Ot(O2,t);return new Za(e.privateKey,new _s(e.publicKey,n))}function F6(r){if(r==null)throw new k("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}var Qu=class extends ys{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,ci(e);let n=zr(t);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let o=this.blockLen,i=new Uint8Array(o);i.set(n.length>o?e.create().update(n).digest():n);for(let s=0;s<i.length;s++)i[s]^=54;this.iHash.update(i),this.oHash=e.create();for(let s=0;s<i.length;s++)i[s]^=106;this.oHash.update(i),i.fill(0)}update(e){return gs(this),this.iHash.update(e),this}digestInto(e){gs(this),ms(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));let{oHash:t,iHash:n,finished:o,destroyed:i,blockLen:s,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=i,e.blockLen=s,e.outputLen=a,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},Co=(r,e,t)=>new Qu(r,e).update(t).digest();Co.create=(r,e)=>new Qu(r,e);function V6(r){r.lowS!==void 0&&Wr("lowS",r.lowS),r.prehash!==void 0&&Wr("prehash",r.prehash)}function YS(r){let e=Ba(r);Ir(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:t,Fp:n,a:o}=e;if(t){if(!n.eql(o,n.ZERO))throw new Error("invalid endomorphism, can only be defined for Koblitz curves that have a=0");if(typeof t!="object"||typeof t.beta!="bigint"||typeof t.splitScalar!="function")throw new Error("invalid endomorphism, expected beta: bigint and splitScalar: function")}return Object.freeze({...e})}var{bytesToNumberBE:XS,hexToBytes:jS}=jl,V2=class extends Error{constructor(e=""){super(e)}},Gn={Err:V2,_tlv:{encode:(r,e)=>{let{Err:t}=Gn;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length&1)throw new t("tlv.encode: unpadded data");let n=e.length/2,o=fi(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let i=n>127?fi(o.length/2|128):"";return fi(r)+i+o+e},decode(r,e){let{Err:t}=Gn,n=0;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length<2||e[n++]!==r)throw new t("tlv.decode: wrong tlv");let o=e[n++],i=!!(o&128),s=0;if(!i)s=o;else{let c=o&127;if(!c)throw new t("tlv.decode(long): indefinite length not supported");if(c>4)throw new t("tlv.decode(long): byte length is too big");let l=e.subarray(n,n+c);if(l.length!==c)throw new t("tlv.decode: length bytes not complete");if(l[0]===0)throw new t("tlv.decode(long): zero leftmost byte");for(let u of l)s=s<<8|u;if(n+=c,s<128)throw new t("tlv.decode(long): not minimal encoding")}let a=e.subarray(n,n+s);if(a.length!==s)throw new t("tlv.decode: wrong value length");return{v:a,l:e.subarray(n+s)}}},_int:{encode(r){let{Err:e}=Gn;if(r<Qn)throw new e("integer: negative integers are not allowed");let t=fi(r);if(Number.parseInt(t[0],16)&8&&(t="00"+t),t.length&1)throw new e("unexpected DER parsing assertion: unpadded hex");return t},decode(r){let{Err:e}=Gn;if(r[0]&128)throw new e("invalid signature integer: negative");if(r[0]===0&&!(r[1]&128))throw new e("invalid signature integer: unnecessary leading zero");return XS(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Gn,o=typeof r=="string"?jS(r):r;bs(o);let{v:i,l:s}=n.decode(48,o);if(s.length)throw new e("invalid signature: left bytes after parsing");let{v:a,l:c}=n.decode(2,i),{v:l,l:u}=n.decode(2,c);if(u.length)throw new e("invalid signature: left bytes after parsing");return{r:t.decode(a),s:t.decode(l)}},hexFromSig(r){let{_tlv:e,_int:t}=Gn,n=e.encode(2,t.encode(r.r)),o=e.encode(2,t.encode(r.s)),i=n+o;return e.encode(48,i)}},Qn=BigInt(0),ht=BigInt(1),AO=BigInt(2),$6=BigInt(3),IO=BigInt(4);function ZS(r){let e=YS(r),{Fp:t}=e,n=So(e.n,e.nBitLength),o=e.toBytes||((g,m,y)=>{let x=m.toAffine();return Fn(Uint8Array.from([4]),t.toBytes(x.x),t.toBytes(x.y))}),i=e.fromBytes||(g=>{let m=g.subarray(1),y=t.fromBytes(m.subarray(0,t.BYTES)),x=t.fromBytes(m.subarray(t.BYTES,2*t.BYTES));return{x:y,y:x}});function s(g){let{a:m,b:y}=e,x=t.sqr(g),w=t.mul(x,g);return t.add(t.add(w,t.mul(g,m)),y)}if(!t.eql(t.sqr(e.Gy),s(e.Gx)))throw new Error("bad generator point: equation left != right");function a(g){return La(g,ht,e.n)}function c(g){let{allowedPrivateKeyLengths:m,nByteLength:y,wrapPrivateKey:x,n:w}=e;if(m&&typeof g!="bigint"){if(vo(g)&&(g=On(g)),typeof g!="string"||!m.includes(g.length))throw new Error("invalid private key");g=g.padStart(y*2,"0")}let I;try{I=typeof g=="bigint"?g:Mn(De("private key",g,y))}catch{throw new Error("invalid private key, expected hex or "+y+" bytes, got "+typeof g)}return x&&(I=Ie(I,w)),xt("private key",I,ht,w),I}function l(g){if(!(g instanceof f))throw new Error("ProjectivePoint expected")}let u=pi((g,m)=>{let{px:y,py:x,pz:w}=g;if(t.eql(w,t.ONE))return{x:y,y:x};let I=g.is0();m==null&&(m=I?t.ONE:t.inv(w));let B=t.mul(y,m),D=t.mul(x,m),R=t.mul(w,m);if(I)return{x:t.ZERO,y:t.ZERO};if(!t.eql(R,t.ONE))throw new Error("invZ was invalid");return{x:B,y:D}}),d=pi(g=>{if(g.is0()){if(e.allowInfinityPoint&&!t.is0(g.py))return;throw new Error("bad point: ZERO")}let{x:m,y}=g.toAffine();if(!t.isValid(m)||!t.isValid(y))throw new Error("bad point: x or y not FE");let x=t.sqr(y),w=s(m);if(!t.eql(x,w))throw new Error("bad point: equation left != right");if(!g.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class f{constructor(m,y,x){if(this.px=m,this.py=y,this.pz=x,m==null||!t.isValid(m))throw new Error("x required");if(y==null||!t.isValid(y))throw new Error("y required");if(x==null||!t.isValid(x))throw new Error("z required");Object.freeze(this)}static fromAffine(m){let{x:y,y:x}=m||{};if(!m||!t.isValid(y)||!t.isValid(x))throw new Error("invalid affine point");if(m instanceof f)throw new Error("projective point not allowed");let w=I=>t.eql(I,t.ZERO);return w(y)&&w(x)?f.ZERO:new f(y,x,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(m){let y=t.invertBatch(m.map(x=>x.pz));return m.map((x,w)=>x.toAffine(y[w])).map(f.fromAffine)}static fromHex(m){let y=f.fromAffine(i(De("pointHex",m)));return y.assertValidity(),y}static fromPrivateKey(m){return f.BASE.multiply(c(m))}static msm(m,y){return tu(f,n,m,y)}_setWindowSize(m){p.setWindowSize(this,m)}assertValidity(){d(this)}hasEvenY(){let{y:m}=this.toAffine();if(t.isOdd)return!t.isOdd(m);throw new Error("Field doesn't support isOdd")}equals(m){l(m);let{px:y,py:x,pz:w}=this,{px:I,py:B,pz:D}=m,R=t.eql(t.mul(y,D),t.mul(I,w)),S=t.eql(t.mul(x,D),t.mul(B,w));return R&&S}negate(){return new f(this.px,t.neg(this.py),this.pz)}double(){let{a:m,b:y}=e,x=t.mul(y,$6),{px:w,py:I,pz:B}=this,D=t.ZERO,R=t.ZERO,S=t.ZERO,A=t.mul(w,w),F=t.mul(I,I),L=t.mul(B,B),M=t.mul(w,I);return M=t.add(M,M),S=t.mul(w,B),S=t.add(S,S),D=t.mul(m,S),R=t.mul(x,L),R=t.add(D,R),D=t.sub(F,R),R=t.add(F,R),R=t.mul(D,R),D=t.mul(M,D),S=t.mul(x,S),L=t.mul(m,L),M=t.sub(A,L),M=t.mul(m,M),M=t.add(M,S),S=t.add(A,A),A=t.add(S,A),A=t.add(A,L),A=t.mul(A,M),R=t.add(R,A),L=t.mul(I,B),L=t.add(L,L),A=t.mul(L,M),D=t.sub(D,A),S=t.mul(L,F),S=t.add(S,S),S=t.add(S,S),new f(D,R,S)}add(m){l(m);let{px:y,py:x,pz:w}=this,{px:I,py:B,pz:D}=m,R=t.ZERO,S=t.ZERO,A=t.ZERO,F=e.a,L=t.mul(e.b,$6),M=t.mul(y,I),K=t.mul(x,B),C=t.mul(w,D),P=t.add(y,x),E=t.add(I,B);P=t.mul(P,E),E=t.add(M,K),P=t.sub(P,E),E=t.add(y,w);let v=t.add(I,D);return E=t.mul(E,v),v=t.add(M,C),E=t.sub(E,v),v=t.add(x,w),R=t.add(B,D),v=t.mul(v,R),R=t.add(K,C),v=t.sub(v,R),A=t.mul(F,E),R=t.mul(L,C),A=t.add(R,A),R=t.sub(K,A),A=t.add(K,A),S=t.mul(R,A),K=t.add(M,M),K=t.add(K,M),C=t.mul(F,C),E=t.mul(L,E),K=t.add(K,C),C=t.sub(M,C),C=t.mul(F,C),E=t.add(E,C),M=t.mul(K,E),S=t.add(S,M),M=t.mul(v,E),R=t.mul(P,R),R=t.sub(R,M),M=t.mul(P,K),A=t.mul(v,A),A=t.add(A,M),new f(R,S,A)}subtract(m){return this.add(m.negate())}is0(){return this.equals(f.ZERO)}wNAF(m){return p.wNAFCached(this,m,f.normalizeZ)}multiplyUnsafe(m){let{endo:y,n:x}=e;xt("scalar",m,Qn,x);let w=f.ZERO;if(m===Qn)return w;if(this.is0()||m===ht)return this;if(!y||p.hasPrecomputes(this))return p.wNAFCachedUnsafe(this,m,f.normalizeZ);let{k1neg:I,k1:B,k2neg:D,k2:R}=y.splitScalar(m),S=w,A=w,F=this;for(;B>Qn||R>Qn;)B&ht&&(S=S.add(F)),R&ht&&(A=A.add(F)),F=F.double(),B>>=ht,R>>=ht;return I&&(S=S.negate()),D&&(A=A.negate()),A=new f(t.mul(A.px,y.beta),A.py,A.pz),S.add(A)}multiply(m){let{endo:y,n:x}=e;xt("scalar",m,ht,x);let w,I;if(y){let{k1neg:B,k1:D,k2neg:R,k2:S}=y.splitScalar(m),{p:A,f:F}=this.wNAF(D),{p:L,f:M}=this.wNAF(S);A=p.constTimeNegate(B,A),L=p.constTimeNegate(R,L),L=new f(t.mul(L.px,y.beta),L.py,L.pz),w=A.add(L),I=F.add(M)}else{let{p:B,f:D}=this.wNAF(m);w=B,I=D}return f.normalizeZ([w,I])[0]}multiplyAndAddUnsafe(m,y,x){let w=f.BASE,I=(D,R)=>R===Qn||R===ht||!D.equals(w)?D.multiplyUnsafe(R):D.multiply(R),B=I(this,y).add(I(m,x));return B.is0()?void 0:B}toAffine(m){return u(this,m)}isTorsionFree(){let{h:m,isTorsionFree:y}=e;if(m===ht)return!0;if(y)return y(f,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:m,clearCofactor:y}=e;return m===ht?this:y?y(f,this):this.multiplyUnsafe(e.h)}toRawBytes(m=!0){return Wr("isCompressed",m),this.assertValidity(),o(f,this,m)}toHex(m=!0){return Wr("isCompressed",m),On(this.toRawBytes(m))}}f.BASE=new f(e.Gx,e.Gy,t.ONE),f.ZERO=new f(t.ZERO,t.ONE,t.ZERO);let h=e.nBitLength,p=eu(f,e.endo?Math.ceil(h/2):h);return{CURVE:e,ProjectivePoint:f,normPrivateKeyToScalar:c,weierstrassEquation:s,isWithinCurveOrder:a}}function JS(r){let e=Ba(r);return Ir(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function K6(r){let e=JS(r),{Fp:t,n}=e,o=t.BYTES+1,i=2*t.BYTES+1;function s(C){return Ie(C,n)}function a(C){return Zl(C,n)}let{ProjectivePoint:c,normPrivateKeyToScalar:l,weierstrassEquation:u,isWithinCurveOrder:d}=ZS({...e,toBytes(C,P,E){let v=P.toAffine(),_=t.toBytes(v.x),T=Fn;return Wr("isCompressed",E),E?T(Uint8Array.from([P.hasEvenY()?2:3]),_):T(Uint8Array.from([4]),_,t.toBytes(v.y))},fromBytes(C){let P=C.length,E=C[0],v=C.subarray(1);if(P===o&&(E===2||E===3)){let _=Mn(v);if(!La(_,ht,t.ORDER))throw new Error("Point is not on curve");let T=u(_),H;try{H=t.sqrt(T)}catch(ae){let ie=ae instanceof Error?": "+ae.message:"";throw new Error("Point is not on curve"+ie)}let q=(H&ht)===ht;return(E&1)===1!==q&&(H=t.neg(H)),{x:_,y:H}}else if(P===i&&E===4){let _=t.fromBytes(v.subarray(0,t.BYTES)),T=t.fromBytes(v.subarray(t.BYTES,2*t.BYTES));return{x:_,y:T}}else{let _=o,T=i;throw new Error("invalid Point, expected length of "+_+", or uncompressed "+T+", got "+P)}}}),f=C=>On(Eo(C,e.nByteLength));function h(C){let P=n>>ht;return C>P}function p(C){return h(C)?s(-C):C}let g=(C,P,E)=>Mn(C.slice(P,E));class m{constructor(P,E,v){this.r=P,this.s=E,this.recovery=v,this.assertValidity()}static fromCompact(P){let E=e.nByteLength;return P=De("compactSignature",P,E*2),new m(g(P,0,E),g(P,E,2*E))}static fromDER(P){let{r:E,s:v}=Gn.toSig(De("DER",P));return new m(E,v)}assertValidity(){xt("r",this.r,ht,n),xt("s",this.s,ht,n)}addRecoveryBit(P){return new m(this.r,this.s,P)}recoverPublicKey(P){let{r:E,s:v,recovery:_}=this,T=D(De("msgHash",P));if(_==null||![0,1,2,3].includes(_))throw new Error("recovery id invalid");let H=_===2||_===3?E+e.n:E;if(H>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let q=_&1?"03":"02",Y=c.fromHex(q+f(H)),ae=a(H),ie=s(-T*ae),fe=s(v*ae),xe=c.BASE.multiplyAndAddUnsafe(Y,ie,fe);if(!xe)throw new Error("point at infinify");return xe.assertValidity(),xe}hasHighS(){return h(this.s)}normalizeS(){return this.hasHighS()?new m(this.r,s(-this.s),this.recovery):this}toDERRawBytes(){return hi(this.toDERHex())}toDERHex(){return Gn.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return hi(this.toCompactHex())}toCompactHex(){return f(this.r)+f(this.s)}}let y={isValidPrivateKey(C){try{return l(C),!0}catch{return!1}},normPrivateKeyToScalar:l,randomPrivateKey:()=>{let C=b2(e.n);return kg(e.randomBytes(C),e.n)},precompute(C=8,P=c.BASE){return P._setWindowSize(C),P.multiply(BigInt(3)),P}};function x(C,P=!0){return c.fromPrivateKey(C).toRawBytes(P)}function w(C){let P=vo(C),E=typeof C=="string",v=(P||E)&&C.length;return P?v===o||v===i:E?v===2*o||v===2*i:C instanceof c}function I(C,P,E=!0){if(w(C))throw new Error("first arg must be private key");if(!w(P))throw new Error("second arg must be public key");return c.fromHex(P).multiply(l(C)).toRawBytes(E)}let B=e.bits2int||function(C){if(C.length>8192)throw new Error("input is too large");let P=Mn(C),E=C.length*8-e.nBitLength;return E>0?P>>BigInt(E):P},D=e.bits2int_modN||function(C){return s(B(C))},R=Na(e.nBitLength);function S(C){return xt("num < 2^"+e.nBitLength,C,Qn,R),Eo(C,e.nByteLength)}function A(C,P,E=F){if(["recovered","canonical"].some(Be=>Be in E))throw new Error("sign() legacy options not supported");let{hash:v,randomBytes:_}=e,{lowS:T,prehash:H,extraEntropy:q}=E;T==null&&(T=!0),C=De("msgHash",C),V6(E),H&&(C=De("prehashed msgHash",v(C)));let Y=D(C),ae=l(P),ie=[S(ae),S(Y)];if(q!=null&&q!==!1){let Be=q===!0?_(t.BYTES):q;ie.push(De("extraEntropy",Be))}let fe=Fn(...ie),xe=Y;function Ne(Be){let Ke=B(Be);if(!d(Ke))return;let kt=a(Ke),Zt=c.BASE.multiply(Ke).toAffine(),$t=s(Zt.x);if($t===Qn)return;let fn=s(kt*s(xe+$t*ae));if(fn===Qn)return;let Pn=(Zt.x===$t?0:2)|Number(Zt.y&ht),Ea=fn;return T&&h(fn)&&(Ea=p(fn),Pn^=1),new m($t,Ea,Pn)}return{seed:fe,k2sig:Ne}}let F={lowS:e.lowS,prehash:!1},L={lowS:e.lowS,prehash:!1};function M(C,P,E=F){let{seed:v,k2sig:_}=A(C,P,E),T=e;return p2(T.hash.outputLen,T.nByteLength,T.hmac)(v,_)}c.BASE._setWindowSize(8);function K(C,P,E,v=L){let _=C;P=De("msgHash",P),E=De("publicKey",E);let{lowS:T,prehash:H,format:q}=v;if(V6(v),"strict"in v)throw new Error("options.strict was renamed to lowS");if(q!==void 0&&q!=="compact"&&q!=="der")throw new Error("format must be compact or der");let Y=typeof _=="string"||vo(_),ae=!Y&&!q&&typeof _=="object"&&_!==null&&typeof _.r=="bigint"&&typeof _.s=="bigint";if(!Y&&!ae)throw new Error("invalid signature, expected Uint8Array, hex string or Signature instance");let ie,fe;try{if(ae&&(ie=new m(_.r,_.s)),Y){try{q!=="compact"&&(ie=m.fromDER(_))}catch(Pn){if(!(Pn instanceof Gn.Err))throw Pn}!ie&&q!=="der"&&(ie=m.fromCompact(_))}fe=c.fromHex(E)}catch{return!1}if(!ie||T&&ie.hasHighS())return!1;H&&(P=e.hash(P));let{r:xe,s:Ne}=ie,Be=D(P),Ke=a(Ne),kt=s(Be*Ke),Zt=s(xe*Ke),$t=c.BASE.multiplyAndAddUnsafe(fe,kt,Zt)?.toAffine();return $t?s($t.x)===xe:!1}return{CURVE:e,getPublicKey:x,getSharedSecret:I,sign:M,verify:K,ProjectivePoint:c,Signature:m,utils:y}}function eA(r){return{hash:r,hmac:(e,...t)=>Co(r,e,a2(...t)),randomBytes:di}}function H6(r,e){let t=n=>K6({...r,...eA(n)});return{...t(e),create:t}}var W6=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),q6=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),tA=BigInt(1),$2=BigInt(2),z6=(r,e)=>(r+e/$2)/e;function rA(r){let e=W6,t=BigInt(3),n=BigInt(6),o=BigInt(11),i=BigInt(22),s=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%e,u=l*l*r%e,d=Fe(u,t,e)*u%e,f=Fe(d,t,e)*u%e,h=Fe(f,$2,e)*l%e,p=Fe(h,o,e)*h%e,g=Fe(p,i,e)*p%e,m=Fe(g,a,e)*g%e,y=Fe(m,c,e)*m%e,x=Fe(y,a,e)*g%e,w=Fe(x,t,e)*u%e,I=Fe(w,s,e)*p%e,B=Fe(I,n,e)*l%e,D=Fe(B,$2,e);if(!K2.eql(K2.sqr(D),r))throw new Error("Cannot find square root");return D}var K2=So(W6,void 0,void 0,{sqrt:rA}),kr=H6({a:BigInt(0),b:BigInt(7),Fp:K2,n:q6,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=q6,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-tA*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=t,s=BigInt("0x100000000000000000000000000000000"),a=z6(i*r,e),c=z6(-n*r,e),l=Ie(r-a*t-c*o,e),u=Ie(-a*n-c*i,e),d=l>s,f=u>s;if(d&&(l=e-l),f&&(u=e-u),l>s||u>s)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:d,k1:l,k2neg:f,k2:u}}}},Tr),NO=BigInt(0);var BO=kr.ProjectivePoint;function H2(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function G6(r,e){let t=Qe.digest(e instanceof Uint8Array?e:e.subarray());if(H2(t))return t.then(({digest:n})=>kr.sign(n,r).toDERRawBytes()).catch(n=>{throw new Ya(String(n))});try{return kr.sign(t.digest,r).toDERRawBytes()}catch(n){throw new Ya(String(n))}}function Q6(r,e,t){let n=Qe.digest(t instanceof Uint8Array?t:t.subarray());if(H2(n))return n.then(({digest:o})=>kr.verify(e,o,r)).catch(o=>{throw new Xa(String(o))});try{return kr.verify(e,n.digest,r)}catch(o){throw new Xa(String(o))}}var Ja=class{type="secp256k1";raw;_key;constructor(e){this._key=j6(e),this.raw=Y6(this._key)}toMultihash(){return er.digest(Mt(this))}toCID(){return X.createV1(114,this.toMultihash())}toString(){return ve.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ne(this.raw,e.raw)}verify(e,t){return Q6(this._key,t,e)}},ec=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=X6(e),this.publicKey=new Ja(t??Z6(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ne(this.raw,e.raw)}sign(e){return G6(this.raw,e)}};function q2(r){return new ec(r)}function z2(r){return new Ja(r)}async function J6(){let r=nA();return new ec(r)}function Y6(r){return kr.ProjectivePoint.fromHex(r).toRawBytes(!0)}function X6(r){try{return kr.getPublicKey(r,!0),r}catch(e){throw new Sa(String(e))}}function j6(r){try{return kr.ProjectivePoint.fromHex(r),r}catch(e){throw new Rn(String(e))}}function Z6(r){try{return kr.getPublicKey(r,!0)}catch(e){throw new Sa(String(e))}}function nA(){return kr.utils.randomPrivateKey()}async function Yu(r,e){if(r==="Ed25519")return Hg();if(r==="secp256k1")return J6();if(r==="RSA")return F2(e??2048);throw new Vr}function nt(r){let{Type:e,Data:t}=bn.decode(r),n=t??new Uint8Array;switch(e){case Ye.RSA:return U2(n);case Ye.Ed25519:return _2(n);case Ye.secp256k1:return z2(n);default:throw new Vr}}function Xu(r){let{Type:e,Data:t}=bn.decode(r.digest),n=t??new Uint8Array;switch(e){case Ye.Ed25519:return _2(n);case Ye.secp256k1:return z2(n);default:throw new Vr}}function Mt(r){return bn.encode({Type:Ye[r.type],Data:r.raw})}function e8(r){let e=Va.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Ye.RSA:return Gu(t);case Ye.Ed25519:return T2(t);case Ye.secp256k1:return q2(t);default:throw new Vr}}function t8(r){return r.byteLength===64?T2(r):r.byteLength===32?q2(r):Gu(r)}function Cs(r){return Va.encode({Type:Ye[r.type],Data:r.raw})}var r8=Symbol.for("nodejs.util.inspect.custom"),oA=114,tc=class{type;multihash;publicKey;string;constructor(e){this.type=e.type,this.multihash=e.multihash,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[pl]=!0;toString(){return this.string==null&&(this.string=ve.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return X.createV1(oA,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return ne(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return ne(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[r8](){return`PeerId(${this.toString()})`}},rc=class extends tc{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},nc=class extends tc{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},oc=class extends tc{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},iA=2336,ic=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=er.digest(N(this.url))}[r8](){return`PeerId(${this.url})`}[pl]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return X.createV1(iA,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=U(e)),e.toString()===this.toString())}};var sA=114,n8=2336;function Ve(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=Ae(ve.decode(`z${r}`));else{if(e==null)throw new k('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=Ae(e.decode(r))}return st(t)}function Sn(r){if(r.type==="Ed25519")return new nc({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new oc({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new rc({multihash:r.toCID().multihash,publicKey:r});throw new Vr}function o8(r){return Sn(r.publicKey)}function st(r){if(cA(r))return new rc({multihash:r});if(aA(r))try{let e=Xu(r);if(e.type==="Ed25519")return new nc({multihash:r,publicKey:e});if(e.type==="secp256k1")return new oc({multihash:r,publicKey:e})}catch{let t=U(r.digest);return new ic(new URL(t))}throw new uo("Supplied PeerID Multihash is invalid")}function An(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==sA&&r.code!==n8)throw new bl("Supplied PeerID CID is invalid");if(r.code===n8){let e=U(r.multihash.digest);return new ic(new URL(e))}return st(r.multihash)}function aA(r){return r.code===er.code}function cA(r){return r.code===Qe.code}function wi(r,e){let t={[Symbol.iterator]:()=>t,next:()=>{let n=r.next(),o=n.value;return n.done===!0||o==null?{done:!0,value:void 0}:{done:!1,value:e(o)}}};return t}function ju(r){let e=Ae(ve.decode(`z${r}`));return st(e)}var pt=class{map;constructor(e){if(this.map=new Map,e!=null)for(let[t,n]of e.entries())this.map.set(t.toString(),{key:t,value:n})}[Symbol.iterator](){return this.entries()}clear(){this.map.clear()}delete(e){return this.map.delete(e.toString())}entries(){return wi(this.map.entries(),e=>[e[1].key,e[1].value])}forEach(e){this.map.forEach((t,n)=>{e(t.value,t.key,this)})}get(e){return this.map.get(e.toString())?.value}has(e){return this.map.has(e.toString())}set(e,t){this.map.set(e.toString(),{key:e,value:t})}keys(){return wi(this.map.values(),e=>e.key)}values(){return wi(this.map.values(),e=>e.value)}get size(){return this.map.size}};var Gt=class r{set;constructor(e){if(this.set=new Set,e!=null)for(let t of e)this.set.add(t.toString())}get size(){return this.set.size}[Symbol.iterator](){return this.values()}add(e){this.set.add(e.toString())}clear(){this.set.clear()}delete(e){this.set.delete(e.toString())}entries(){return wi(this.set.entries(),e=>{let t=ju(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=ju(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return wi(this.set.values(),e=>ju(e))}intersection(e){let t=new r;for(let n of e)this.has(n)&&t.add(n);return t}difference(e){let t=new r;for(let n of this)e.has(n)||t.add(n);return t}union(e){let t=new r;for(let n of e)t.add(n);for(let n of this)t.add(n);return t}};function W2(){return new Gt}function i8(r,e,t,n){ci(r);let o=vg({dkLen:32,asyncTick:10},n),{c:i,dkLen:s,asyncTick:a}=o;if(go(i),go(s),go(a),i<1)throw new Error("PBKDF2: iterations (c) should be >= 1");let c=zr(e),l=zr(t),u=new Uint8Array(s),d=Co.create(r,c),f=d._cloneInto().update(l);return{c:i,dkLen:s,asyncTick:a,DK:u,PRF:d,PRFSalt:f}}function s8(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),o.fill(0),t}function a8(r,e,t,n){let{c:o,dkLen:i,DK:s,PRF:a,PRFSalt:c}=i8(r,e,t,n),l,u=new Uint8Array(4),d=ui(u),f=new Uint8Array(a.outputLen);for(let h=1,p=0;p<i;h++,p+=a.outputLen){let g=s.subarray(p,p+a.outputLen);d.setInt32(0,h,!1),(l=c._cloneInto(l)).update(u).digestInto(f),g.set(f.subarray(0,g.length));for(let m=1;m<o;m++){a._cloneInto(l).update(f).digestInto(f);for(let y=0;y<g.length;y++)g[y]^=f[y]}}return s8(a,c,s,l,f)}async function Zu(r,e,t,n){let{c:o,dkLen:i,asyncTick:s,DK:a,PRF:c,PRFSalt:l}=i8(r,e,t,n),u,d=new Uint8Array(4),f=ui(d),h=new Uint8Array(c.outputLen);for(let p=1,g=0;g<i;p++,g+=c.outputLen){let m=a.subarray(g,g+c.outputLen);f.setInt32(0,p,!1),(u=l._cloneInto(u)).update(d).digestInto(h),m.set(h.subarray(0,m.length)),await bg(o-1,s,()=>{c._cloneInto(u).update(h).digestInto(h);for(let y=0;y<m.length;y++)m[y]^=h[y]})}return s8(c,l,a,u,h)}var sc=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),ko=new Uint32Array(80),G2=class extends yo{constructor(){super(64,20,8,!1),this.A=sc[0]|0,this.B=sc[1]|0,this.C=sc[2]|0,this.D=sc[3]|0,this.E=sc[4]|0}get(){let{A:e,B:t,C:n,D:o,E:i}=this;return[e,t,n,o,i]}set(e,t,n,o,i){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0}process(e,t){for(let c=0;c<16;c++,t+=4)ko[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)ko[c]=zl(ko[c-3]^ko[c-8]^ko[c-14]^ko[c-16],1);let{A:n,B:o,C:i,D:s,E:a}=this;for(let c=0;c<80;c++){let l,u;c<20?(l=Wl(o,i,s),u=1518500249):c<40?(l=o^i^s,u=1859775393):c<60?(l=Gl(o,i,s),u=2400959708):(l=o^i^s,u=3395469782);let d=zl(n,5)+l+a+u+ko[c]|0;a=s,s=i,i=zl(o,30),o=n,n=d}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,this.set(n,o,i,s,a)}roundClean(){ko.fill(0)}destroy(){this.set(0,0,0,0,0),this.buffer.fill(0)}},c8=ws(()=>new G2);var l8={sha1:c8,"sha2-256":Tr,"sha2-512":xo};function ac(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(l8).join(" / ");throw new k(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let i=l8[o],s=a8(i,r,e,{c:t,dkLen:n});return it.encode(s).substring(1)}var Q2={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},u8={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},d8=new globalThis.TextEncoder;function lA(r,e){let t=Q2[e],n=u8[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function uA(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=Q2[e],o=u8[e],i=r;for(;i.length>0;){let s=d8.encodeInto(i,t);i=i.slice(s.read);for(let a=0;a<s.written;a++)o^=BigInt(t[a]),o=BigInt.asUintN(e,o*n)}return o}function Y2(r,{size:e=32,utf8Buffer:t}={}){if(!Q2[e])throw new Error("The `size` option must be one of 32, 64, 128, 256, 512, or 1024");if(typeof r=="string"){if(t)return uA(r,e,t);r=d8.encode(r)}return lA(r,e)}var cc={hash:r=>Number(Y2(r,{size:32})),hashV:(r,e)=>dA(cc.hash(r,e))};function dA(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),N(e,"base16")}var X2=64,Xr=class{fp;h;seed;constructor(e,t,n,o=2){if(o>X2)throw new TypeError("Invalid Fingerprint Size");let i=t.hashV(e,n),s=se(o);for(let a=0;a<s.length;a++)s[a]=i[a];s.length===0&&(s[0]=7),this.fp=s,this.h=t,this.seed=n}hash(){return this.h.hash(this.fp,this.seed)}equals(e){return e?.fp instanceof Uint8Array?ne(this.fp,e.fp):!1}};function bi(r,e){return Math.floor(Math.random()*(e-r))+r}var xi=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof Xr))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof Xr))throw new TypeError("Invalid Fingerprint");for(let t=0;t<this.contents.length;t++)if(this.contents[t]==null)return this.contents[t]=e,!0;return!0}swap(e){if(!(e instanceof Xr))throw new TypeError("Invalid Fingerprint");let t=bi(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof Xr))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var fA=500,lc=class{bucketSize;filterSize;fingerprintSize;buckets;count;hash;seed;constructor(e){this.filterSize=e.filterSize,this.bucketSize=e.bucketSize??4,this.fingerprintSize=e.fingerprintSize??2,this.count=0,this.buckets=[],this.hash=e.hash??cc,this.seed=e.seed??bi(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=N(e));let t=new Xr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=(n^t.hash())%this.filterSize;if(this.buckets[n]==null&&(this.buckets[n]=new xi(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new xi(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let i=[n,o],s=i[bi(0,i.length-1)];this.buckets[s]==null&&(this.buckets[s]=new xi(this.bucketSize));for(let a=0;a<fA;a++){let c=this.buckets[s].swap(t);if(c!=null&&(s=(s^c.hash())%this.filterSize,this.buckets[s]==null&&(this.buckets[s]=new xi(this.bucketSize)),this.buckets[s].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=N(e));let t=new Xr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.has(t)??!1;if(o)return o;let i=(n^t.hash())%this.filterSize;return this.buckets[i]?.has(t)??!1}remove(e){typeof e=="string"&&(e=N(e));let t=new Xr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.remove(t)??!1;if(o)return this.count--,o;let i=(n^t.hash())%this.filterSize,s=this.buckets[i]?.remove(t)??!1;return s&&this.count--,s}get reliable(){return Math.floor(100*(this.count/this.filterSize))<=90}},hA={1:.5,2:.84,4:.95,8:.98};function pA(r=.001){return r>.002?2:r>1e-5?4:8}function f8(r,e=.001){let t=pA(e),n=hA[t],o=Math.round(r/n),i=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),X2);return{filterSize:o,bucketSize:t,fingerprintSize:i}}var Ju=class{filterSize;bucketSize;fingerprintSize;scale;filterSeries;hash;seed;constructor(e){this.bucketSize=e.bucketSize??4,this.filterSize=e.filterSize??(1<<18)/this.bucketSize,this.fingerprintSize=e.fingerprintSize??2,this.scale=e.scale??2,this.hash=e.hash??cc,this.seed=e.seed??bi(0,Math.pow(2,10)),this.filterSeries=[new lc({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=N(e)),this.has(e))return!0;let t=this.filterSeries.find(n=>n.reliable);if(t==null){let n=this.filterSize*Math.pow(this.scale,this.filterSeries.length);t=new lc({filterSize:n,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed}),this.filterSeries.push(t)}return t.add(e)}has(e){typeof e=="string"&&(e=N(e));for(let t=0;t<this.filterSeries.length;t++)if(this.filterSeries[t].has(e))return!0;return!1}remove(e){typeof e=="string"&&(e=N(e));for(let t=0;t<this.filterSeries.length;t++)if(this.filterSeries[t].remove(e))return!0;return!1}get count(){return this.filterSeries.reduce((e,t)=>e+t.count,0)}};function or(r,e=.001,t){return new Ju({...f8(r,e),...t??{}})}var ed=class{filter;constructor(e,t){this.filter=or(e,t)}has(e){return this.filter.has(e.toMultihash().bytes)}add(e){this.filter.add(e.toMultihash().bytes)}remove(e){this.filter.remove?.(e.toMultihash().bytes)}};function j2(r,e=.001){return new ed(r,e)}var Z2=class extends pt{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function uc(r){let{name:e,metrics:t}=r,n;return t!=null?n=new Z2({name:e,metrics:t}):n=new pt,n}var Yn=class{full;pendingBytes;wantlist;blocks;blockPresences;constructor(e=!1,t=0){this.full=e,this.wantlist=new Map,this.blocks=new Map,this.blockPresences=new Map,this.pendingBytes=0}addWantlistEntry(e,t){let n=it.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=it.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=it.encode(e.multihash.bytes);this.blocks.set(n,t)}};function mA(r){let e=new Uint8Array(r.reduce((n,o)=>n+ue(o),0)),t=0;for(let n of r)e=Re(n,e,t),t+=ue(n);return e}var h8=mA;function J2(r){return h8([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var td=class{peerId;blockstore;network;wants;exchangeCount;bytesSent;bytesReceived;lastExchange;maxSizeReplaceHasWithBlock;log;constructor(e,t){this.peerId=e.peerId,this.blockstore=e.blockstore,this.network=e.network,this.wants=new Map,this.log=e.logger.forComponent(`helia:bitswap:ledger:${e.peerId}`),this.exchangeCount=0,this.bytesSent=0,this.bytesReceived=0,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock??1024}sentBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesSent+=e}receivedBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesReceived+=e}debtRatio(){return this.bytesSent/(this.bytesReceived+1)}async sendBlocksToPeer(e){let t=new Yn,n=new Set;for(let[o,i]of this.wants.entries())try{let s=await this.blockstore.get(i.cid,e);i.wantType===tt.WantHave?s.byteLength<this.maxSizeReplaceHasWithBlock?(this.log("sending have and block for %c",i.cid),n.add(o),t.addBlock(i.cid,{data:s,prefix:J2(i.cid)})):(this.log("sending have for %c",i.cid),t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Ar.HaveBlock})):(this.log("sending block for %c",i.cid),n.add(o),t.addBlock(i.cid,{data:s,prefix:J2(i.cid)}))}catch(s){if(s.name!=="NotFoundError")throw s;if(this.log("do not have block for %c",i.cid),!i.sendDontHave||i.sentDontHave===!0)continue;i.sentDontHave=!0,t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Ar.DontHaveBlock})}if(t.blocks.size>0||t.blockPresences.size>0){this.log("sending message"),await this.network.sendMessage(this.peerId,t,e),this.log("sent message"),this.sentBytes([...t.blocks.values()].reduce((o,i)=>o+i.data.byteLength,0));for(let o of n)this.wants.delete(o)}}};var rd=class{blockstore;network;ledgerMap;maxSizeReplaceHasWithBlock;log;logger;constructor(e,t={}){this.blockstore=e.blockstore,this.network=e.network,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock,this.log=e.logger.forComponent("helia:bitswap:peer-want-lists"),this.logger=e.logger,this.ledgerMap=uc({name:"helia_bitswap_ledger_map",metrics:e.metrics}),this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}ledgerForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return{peer:t.peerId,value:t.debtRatio(),sent:t.bytesSent,received:t.bytesReceived,exchanged:t.exchangeCount}}wantListForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return[...t.wants.values()]}peers(){return Array.from(this.ledgerMap.values()).map(e=>e.peerId)}async receiveMessage(e,t){let n=this.ledgerMap.get(e);if(n==null&&(n=new td({peerId:e,blockstore:this.blockstore,network:this.network,logger:this.logger},{maxSizeReplaceHasWithBlock:this.maxSizeReplaceHasWithBlock}),this.ledgerMap.set(e,n)),n.receivedBytes(t.blocks?.reduce((o,i)=>o+i.data.byteLength,0)??0),t.wantlist!=null){t.wantlist.full===!0&&n.wants.clear();for(let o of t.wantlist.entries){let i=X.decode(o.cid),s=U(i.multihash.bytes,"base64");o.cancel===!0?(this.log("peer %p cancelled want of block for %c",e,i),n.wants.delete(s)):(o.wantType===tt.WantHave?this.log("peer %p wanted block presence for %c",e,i):this.log("peer %p wanted block for %c",e,i),n.wants.set(s,{cid:i,priority:o.priority,wantType:o.wantType??tt.WantBlock,sendDontHave:o.sendDontHave??!1}))}}this.log("send blocks to peer"),await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=U(e.multihash.bytes,"base64"),o=[];for(let i of this.ledgerMap.values())i.wants.has(n)&&o.push(i);await Promise.all(o.map(async i=>i.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};function gA(r,e){try{if(typeof r=="string"&&r.length>0)return yA(r);if(typeof r=="number"&&isFinite(r))return e?.long?bA(r):wA(r);throw new Error("Value is not a string or number.")}catch(t){let n=xA(t)?`${t.message}. value=${JSON.stringify(r)}`:"An unknown error has occured.";throw new Error(n)}}function yA(r){if(r=String(r),r.length>100)throw new Error("Value exceeds the maximum length of 100 characters.");let e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(!e)return NaN;let t=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return t*315576e5;case"weeks":case"week":case"w":return t*6048e5;case"days":case"day":case"d":return t*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return t*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return t*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return t*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:throw new Error(`The unit ${n} was matched, but no matching case exists.`)}}var od=gA;function wA(r){let e=Math.abs(r);return 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 bA(r){let e=Math.abs(r);return e>=864e5?nd(r,e,864e5,"day"):e>=36e5?nd(r,e,36e5,"hour"):e>=6e4?nd(r,e,6e4,"minute"):e>=1e3?nd(r,e,1e3,"second"):`${r} ms`}function nd(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function xA(r){return typeof r=="object"&&r!==null&&"message"in r}function ep(r){t.debug=t,t.default=t,t.coerce=c,t.disable=i,t.enable=o,t.enabled=s,t.humanize=od,t.destroy=l,Object.keys(r).forEach(u=>{t[u]=r[u]}),t.names=[],t.skips=[],t.formatters={};function e(u){let d=0;for(let f=0;f<u.length;f++)d=(d<<5)-d+u.charCodeAt(f),d|=0;return t.colors[Math.abs(d)%t.colors.length]}t.selectColor=e;function t(u){let d,f=null,h,p;function g(...m){if(!g.enabled)return;let y=g,x=Number(new Date),w=x-(d||x);y.diff=w,y.prev=d,y.curr=x,d=x,m[0]=t.coerce(m[0]),typeof m[0]!="string"&&m.unshift("%O");let I=0;m[0]=m[0].replace(/%([a-zA-Z%])/g,(D,R)=>{if(D==="%%")return"%";I++;let S=t.formatters[R];if(typeof S=="function"){let A=m[I];D=S.call(y,A),m.splice(I,1),I--}return D}),t.formatArgs.call(y,m),(y.log||t.log).apply(y,m)}return g.namespace=u,g.useColors=t.useColors(),g.color=t.selectColor(u),g.extend=n,g.destroy=t.destroy,Object.defineProperty(g,"enabled",{enumerable:!0,configurable:!1,get:()=>f!==null?f:(h!==t.namespaces&&(h=t.namespaces,p=t.enabled(u)),p),set:m=>{f=m}}),typeof t.init=="function"&&t.init(g),g}function n(u,d){let f=t(this.namespace+(typeof d>"u"?":":d)+u);return f.log=this.log,f}function o(u){t.save(u),t.namespaces=u,t.names=[],t.skips=[];let d,f=(typeof u=="string"?u:"").split(/[\s,]+/),h=f.length;for(d=0;d<h;d++)f[d]&&(u=f[d].replace(/\*/g,".*?"),u[0]==="-"?t.skips.push(new RegExp("^"+u.substr(1)+"$")):t.names.push(new RegExp("^"+u+"$")))}function i(){let u=[...t.names.map(a),...t.skips.map(a).map(d=>"-"+d)].join(",");return t.enable(""),u}function s(u){if(u[u.length-1]==="*")return!0;let d,f;for(d=0,f=t.skips.length;d<f;d++)if(t.skips[d].test(u))return!1;for(d=0,f=t.names.length;d<f;d++)if(t.names[d].test(u))return!0;return!1}function a(u){return u.toString().substring(2,u.toString().length-2).replace(/\.\*\?$/,"*")}function c(u){return u instanceof Error?u.stack??u.message:u}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 id=_A(),vA=["#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 EA(){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 SA(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+od(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 AA=console.debug??console.log??(()=>{});function IA(r){try{r?id?.setItem("debug",r):id?.removeItem("debug")}catch{}}function TA(){let r;try{r=id?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function _A(){try{return localStorage}catch{}}function CA(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var p8=ep({formatArgs:SA,save:IA,load:TA,useColors:EA,setupFormatters:CA,colors:vA,storage:id,log:AA});var ir=p8;ir.formatters.b=r=>r==null?"undefined":ve.baseEncode(r);ir.formatters.t=r=>r==null?"undefined":ct.baseEncode(r);ir.formatters.m=r=>r==null?"undefined":it.baseEncode(r);ir.formatters.p=r=>r==null?"undefined":r.toString();ir.formatters.c=r=>r==null?"undefined":r.toString();ir.formatters.k=r=>r==null?"undefined":r.toString();ir.formatters.a=r=>r==null?"undefined":r.toString();ir.formatters.e=r=>r==null?"undefined":m8(r.stack)??m8(r.message)??r.toString();function kA(r){let e=()=>{};return e.enabled=!1,e.color="",e.diff=0,e.log=()=>{},e.namespace=r,e.destroy=()=>!0,e.extend=()=>e,e}function Po(){return{forComponent(r){return pr(r)}}}function pr(r){let e=kA(`${r}:trace`);return ir.enabled(`${r}:trace`)&&ir.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=ir(`${r}:trace`)),Object.assign(ir(r),{error:ir(`${r}:error`),trace:e})}function m8(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}var rp=Ur(y8(),1);var fc=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},np=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},w8=r=>globalThis.DOMException===void 0?new np(r):new DOMException(r),b8=r=>{let e=r.reason===void 0?w8("This operation was aborted."):r.reason;return e instanceof Error?e:w8(e)};function jr(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,a,l=new Promise((u,d)=>{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&&d(b8(h)),a=()=>{d(b8(h))},h.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(u,d);return}let f=new fc;s=i.setTimeout.call(void 0,()=>{if(n){try{u(n())}catch(h){d(h)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?u():o instanceof Error?d(o):(f.message=o??`Promise timed out after ${t} milliseconds`,d(f))},t),(async()=>{try{u(await r)}catch(h){d(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}function op(r,e,t){let n=0,o=r.length;for(;o>0;){let i=Math.trunc(o/2),s=n+i;t(r[s],e)<=0?(n=++s,o-=i+1):o=i}return n}var hc=class{#e=[];enqueue(e,t){t={priority:0,...t};let n={priority:t.priority,id:t.id,run:e};if(this.size===0||this.#e[this.size-1].priority>=t.priority){this.#e.push(n);return}let o=op(this.#e,n,(i,s)=>s.priority-i.priority);this.#e.splice(o,0,n)}setPriority(e,t){let n=this.#e.findIndex(i=>i.id===e);if(n===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);let[o]=this.#e.splice(n,1);this.enqueue(o.run,{priority:t,id:e})}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(t=>t.priority===e.priority).map(t=>t.run)}get size(){return this.#e.length}};var In=class extends rp.default{#e;#t;#r=0;#o;#a;#l=0;#i;#u;#n;#m;#s=0;#d;#c;#g;#b=1n;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:hc,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#t=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#o=e.intervalCap,this.#a=e.interval,this.#n=new e.queueClass,this.#m=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#g=e.throwOnTimeout===!0,this.#c=e.autoStart===!1}get#x(){return this.#t||this.#r<this.#o}get#v(){return this.#s<this.#d}#E(){this.#s--,this.#f(),this.emit("next")}#S(){this.#w(),this.#y(),this.#u=void 0}get#A(){let e=Date.now();if(this.#i===void 0){let t=this.#l-e;if(t<0)this.#r=this.#e?this.#s:0;else return this.#u===void 0&&(this.#u=setTimeout(()=>{this.#S()},t)),!0}return!1}#f(){if(this.#n.size===0)return this.#i&&clearInterval(this.#i),this.#i=void 0,this.emit("empty"),this.#s===0&&this.emit("idle"),!1;if(!this.#c){let e=!this.#A;if(this.#x&&this.#v){let t=this.#n.dequeue();return t?(this.emit("active"),t(),e&&this.#y(),!0):!1}}return!1}#y(){this.#t||this.#i!==void 0||(this.#i=setInterval(()=>{this.#w()},this.#a),this.#l=Date.now()+this.#a)}#w(){this.#r===0&&this.#s===0&&this.#i&&(clearInterval(this.#i),this.#i=void 0),this.#r=this.#e?this.#s:0,this.#h()}#h(){for(;this.#f(););}get concurrency(){return this.#d}set concurrency(e){if(!(typeof e=="number"&&e>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this.#d=e,this.#h()}async#I(e){return new Promise((t,n)=>{e.addEventListener("abort",()=>{n(e.reason)},{once:!0})})}setPriority(e,t){this.#n.setPriority(e,t)}async add(e,t={}){return t.id??=(this.#b++).toString(),t={timeout:this.timeout,throwOnTimeout:this.#g,...t},new Promise((n,o)=>{this.#n.enqueue(async()=>{this.#s++,this.#r++;try{t.signal?.throwIfAborted();let i=e({signal:t.signal});t.timeout&&(i=jr(Promise.resolve(i),{milliseconds:t.timeout})),t.signal&&(i=Promise.race([i,this.#I(t.signal)]));let s=await i;n(s),this.emit("completed",s)}catch(i){if(i instanceof fc&&!t.throwOnTimeout){n();return}o(i),this.emit("error",i)}finally{this.#E()}},t),this.emit("add"),this.#f()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#c?(this.#c=!1,this.#h(),this):this}pause(){this.#c=!0}clear(){this.#n=new this.#m}async onEmpty(){this.#n.size!==0&&await this.#p("empty")}async onSizeLessThan(e){this.#n.size<e||await this.#p("next",()=>this.#n.size<e)}async onIdle(){this.#s===0&&this.#n.size===0||await this.#p("idle")}async#p(e,t){return new Promise(n=>{let o=()=>{t&&!t()||(this.off(e,o),n())};this.on(e,o)})}get size(){return this.#n.size}sizeBy(e){return this.#n.filter(e).length}get pending(){return this.#s}get isPaused(){return this.#c}};function ad(r){let e=[mr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var ip=60;function cd(r){return{Status:r.Status??0,TC:r.TC??r.flag_tc??!1,RD:r.RD??r.flag_rd??!1,RA:r.RA??r.flag_ra??!1,AD:r.AD??r.flag_ad??!1,CD:r.CD??r.flag_cd??!1,Question:(r.Question??r.questions??[]).map(e=>({name:e.name,type:mr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:mr[e.type],TTL:e.TTL??e.ttl??ip,data:e.data instanceof Uint8Array?U(e.data):e.data}))}}var DA=4;function sp(r,e={}){let t=new In({concurrency:e.queryConcurrency??DA});return async(n,o={})=>{let i=new URLSearchParams;i.set("name",n),ad(o.types).forEach(a=>{i.append("type",mr[a])}),o.onProgress?.(new W("dns:query",{detail:n}));let s=await t.add(async()=>{let a=await fetch(`${r}?${i}`,{headers:{accept:"application/dns-json"},signal:o?.signal});if(a.status!==200)throw new Error(`Unexpected HTTP status: ${a.status} - ${a.statusText}`);let c=cd(await a.json());return o.onProgress?.(new W("dns:response",{detail:c})),c},{signal:o.signal});if(s==null)throw new Error("No DNS response received");return s}}function x8(){return[sp("https://cloudflare-dns.com/dns-query"),sp("https://dns.google/resolve")]}var S8=Ur(E8(),1);var ap=class{lru;constructor(e){this.lru=(0,S8.default)(e)}get(e,t){let n=!0,o=[];for(let i of t){let s=this.getAnswers(e,i);if(s.length===0){n=!1;break}o.push(...s)}if(n)return cd({answers:o})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,o=this.lru.get(n);if(o!=null){let i=o.filter(s=>s.expires>Date.now()).map(({expires:s,value:a})=>({...a,TTL:Math.round((s-Date.now())/1e3),type:mr[a.type]}));return i.length===0&&this.lru.remove(n),i}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,o=this.lru.get(n)??[];o.push({expires:Date.now()+(t.TTL??ip)*1e3,value:t}),this.lru.set(n,o)}remove(e,t){let n=`${e.toLowerCase()}-${t}`;this.lru.remove(n)}clear(){this.lru.clear()}};function A8(r){return new ap(r)}var LA=1e3,ld=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=A8(e.cacheSize??LA),Object.entries(e.resolvers??{}).forEach(([t,n])=>{Array.isArray(n)||(n=[n]),t.endsWith(".")||(t=`${t}.`),this.resolvers[t]=n}),this.resolvers["."]==null&&(this.resolvers["."]=x8())}async query(e,t={}){let n=ad(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new W("dns:cache",{detail:o})),o;let i=`${e.split(".").pop()}.`,s=(this.resolvers[i]??this.resolvers["."]).sort(()=>Math.random()>.5?-1:1),a=[];for(let c of s){if(t.signal?.aborted===!0)break;try{let l=await c(e,{...t,types:n});for(let u of l.Answer)this.cache.add(e,u);return l}catch(l){a.push(l),t.onProgress?.(new W("dns:error",{detail:l}))}}throw a.length===1?a[0]:new AggregateError(a,`DNS lookup of ${e} ${n} failed`)}};var mr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(mr||(mr={}));function ud(r={}){return new ld(r)}var NA=["string","number","bigint","symbol"],BA=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function I8(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(NA.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(OA(r))return"Buffer";let t=MA(r);return t||"Object"}function OA(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function MA(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(BA.includes(e))return e}var b=class{constructor(e,t,n){this.major=e,this.majorEncoded=e<<5,this.name=t,this.terminal=n}toString(){return`Type[${this.major}].${this.name}`}compare(e){return this.major<e.major?-1:this.major>e.major?1:0}};b.uint=new b(0,"uint",!0);b.negint=new b(1,"negint",!0);b.bytes=new b(2,"bytes",!0);b.string=new b(3,"string",!0);b.array=new b(4,"array",!1);b.map=new b(5,"map",!1);b.tag=new b(6,"tag",!1);b.float=new b(7,"float",!0);b.false=new b(7,"false",!0);b.true=new b(7,"true",!0);b.null=new b(7,"null",!0);b.undefined=new b(7,"undefined",!0);b.break=new b(7,"break",!0);var O=class{constructor(e,t,n){this.type=e,this.value=t,this.encodedLength=n,this.encodedBytes=void 0,this.byteValue=void 0}toString(){return`Token[${this.type}].${this.value}`}};var ks=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",UA=new TextDecoder,FA=new TextEncoder;function dd(r){return ks&&globalThis.Buffer.isBuffer(r)}function pc(r){return r instanceof Uint8Array?dd(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var k8=ks?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):_8(r,e,t):(r,e,t)=>t-e>64?UA.decode(r.subarray(e,t)):_8(r,e,t),fd=ks?r=>r.length>64?globalThis.Buffer.from(r):T8(r):r=>r.length>64?FA.encode(r):T8(r),Tn=r=>Uint8Array.from(r),Ps=ks?(r,e,t)=>dd(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),P8=ks?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),pc(globalThis.Buffer.concat(r,e))):(r,e)=>{let t=new Uint8Array(e),n=0;for(let o of r)n+o.length>t.length&&(o=o.subarray(0,t.length-n)),t.set(o,n),n+=o.length;return t},R8=ks?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function D8(r,e){if(dd(r)&&dd(e))return r.compare(e);for(let t=0;t<r.length;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}function T8(r){let e=[],t=0;for(let n=0;n<r.length;n++){let o=r.charCodeAt(n);o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&n+1<r.length&&(r.charCodeAt(n+1)&64512)===56320?(o=65536+((o&1023)<<10)+(r.charCodeAt(++n)&1023),e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}function _8(r,e,t){let n=[];for(;e<t;){let o=r[e],i=null,s=o>239?4:o>223?3:o>191?2:1;if(e+s<=t){let a,c,l,u;switch(s){case 1:o<128&&(i=o);break;case 2:a=r[e+1],(a&192)===128&&(u=(o&31)<<6|a&63,u>127&&(i=u));break;case 3:a=r[e+1],c=r[e+2],(a&192)===128&&(c&192)===128&&(u=(o&15)<<12|(a&63)<<6|c&63,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:a=r[e+1],c=r[e+2],l=r[e+3],(a&192)===128&&(c&192)===128&&(l&192)===128&&(u=(o&15)<<18|(a&63)<<12|(c&63)<<6|l&63,u>65535&&u<1114112&&(i=u))}}i===null?(i=65533,s=1):i>65535&&(i-=65536,n.push(i>>>10&1023|55296),i=56320|i&1023),n.push(i),e+=s}return cp(n)}var C8=4096;function cp(r){let e=r.length;if(e<=C8)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=C8));return t}var VA=256,mc=class{constructor(e=VA){this.chunkSize=e,this.cursor=0,this.maxCursor=-1,this.chunks=[],this._initReuseChunk=null}reset(){this.cursor=0,this.maxCursor=-1,this.chunks.length&&(this.chunks=[]),this._initReuseChunk!==null&&(this.chunks.push(this._initReuseChunk),this.maxCursor=this._initReuseChunk.length-1)}push(e){let t=this.chunks[this.chunks.length-1];if(this.cursor+e.length<=this.maxCursor+1){let o=t.length-(this.maxCursor-this.cursor)-1;t.set(e,o)}else{if(t){let o=t.length-(this.maxCursor-this.cursor)-1;o<t.length&&(this.chunks[this.chunks.length-1]=t.subarray(0,o),this.maxCursor=this.cursor-1)}e.length<64&&e.length<this.chunkSize?(t=R8(this.chunkSize),this.chunks.push(t),this.maxCursor+=t.length,this._initReuseChunk===null&&(this._initReuseChunk=t),t.set(e,0)):(this.chunks.push(e),this.maxCursor+=e.length)}this.cursor+=e.length}toBytes(e=!1){let t;if(this.chunks.length===1){let n=this.chunks[0];e&&this.cursor>n.length/2?(t=this.cursor===n.length?n:n.subarray(0,this.cursor),this._initReuseChunk=null,this.chunks=[]):t=Ps(n,0,this.cursor)}else t=P8(this.chunks,this.cursor);return e&&this.reset(),t}};var j="CBOR decode error:",Xn="CBOR encode error:",gc=[];gc[23]=1;gc[24]=2;gc[25]=3;gc[26]=5;gc[27]=9;function jn(r,e,t){if(r.length-e<t)throw new Error(`${j} not enough data for type`)}var mt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function gr(r,e,t){jn(r,e,1);let n=r[e];if(t.strict===!0&&n<mt[0])throw new Error(`${j} integer encoded in more bytes than necessary (strict decode)`);return n}function yr(r,e,t){jn(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<mt[1])throw new Error(`${j} integer encoded in more bytes than necessary (strict decode)`);return n}function wr(r,e,t){jn(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<mt[2])throw new Error(`${j} integer encoded in more bytes than necessary (strict decode)`);return n}function br(r,e,t){jn(r,e,8);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3],o=r[e+4]*16777216+(r[e+5]<<16)+(r[e+6]<<8)+r[e+7],i=(BigInt(n)<<BigInt(32))+BigInt(o);if(t.strict===!0&&i<mt[3])throw new Error(`${j} integer encoded in more bytes than necessary (strict decode)`);if(i<=Number.MAX_SAFE_INTEGER)return Number(i);if(t.allowBigInt===!0)return i;throw new Error(`${j} integers outside of the safe integer range are not supported`)}function L8(r,e,t,n){return new O(b.uint,gr(r,e+1,n),2)}function N8(r,e,t,n){return new O(b.uint,yr(r,e+1,n),3)}function B8(r,e,t,n){return new O(b.uint,wr(r,e+1,n),5)}function O8(r,e,t,n){return new O(b.uint,br(r,e+1,n),9)}function Pr(r,e){return Et(r,0,e.value)}function Et(r,e,t){if(t<mt[0]){let n=Number(t);r.push([e|n])}else if(t<mt[1]){let n=Number(t);r.push([e|24,n])}else if(t<mt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<mt[3]){let n=Number(t);r.push([e|26,n>>>24&255,n>>>16&255,n>>>8&255,n&255])}else{let n=BigInt(t);if(n<mt[4]){let o=[e|27,0,0,0,0,0,0,0],i=Number(n&BigInt(4294967295)),s=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=i&255,i=i>>8,o[7]=i&255,i=i>>8,o[6]=i&255,i=i>>8,o[5]=i&255,o[4]=s&255,s=s>>8,o[3]=s&255,s=s>>8,o[2]=s&255,s=s>>8,o[1]=s&255,r.push(o)}else throw new Error(`${j} encountered BigInt larger than allowable range`)}}Pr.encodedSize=function(e){return Et.encodedSize(e.value)};Et.encodedSize=function(e){return e<mt[0]?1:e<mt[1]?2:e<mt[2]?3:e<mt[3]?5:9};Pr.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function M8(r,e,t,n){return new O(b.negint,-1-gr(r,e+1,n),2)}function U8(r,e,t,n){return new O(b.negint,-1-yr(r,e+1,n),3)}function F8(r,e,t,n){return new O(b.negint,-1-wr(r,e+1,n),5)}var lp=BigInt(-1),V8=BigInt(1);function $8(r,e,t,n){let o=br(r,e+1,n);if(typeof o!="bigint"){let i=-1-o;if(i>=Number.MIN_SAFE_INTEGER)return new O(b.negint,i,9)}if(n.allowBigInt!==!0)throw new Error(`${j} integers outside of the safe integer range are not supported`);return new O(b.negint,lp-BigInt(o),9)}function hd(r,e){let t=e.value,n=typeof t=="bigint"?t*lp-V8:t*-1-1;Et(r,e.type.majorEncoded,n)}hd.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*lp-V8:t*-1-1;return n<mt[0]?1:n<mt[1]?2:n<mt[2]?3:n<mt[3]?5:9};hd.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function yc(r,e,t,n){jn(r,e,t+n);let o=Ps(r,e+t,e+t+n);return new O(b.bytes,o,t+n)}function K8(r,e,t,n){return yc(r,e,1,t)}function H8(r,e,t,n){return yc(r,e,2,gr(r,e+1,n))}function q8(r,e,t,n){return yc(r,e,3,yr(r,e+1,n))}function z8(r,e,t,n){return yc(r,e,5,wr(r,e+1,n))}function W8(r,e,t,n){let o=br(r,e+1,n);if(typeof o=="bigint")throw new Error(`${j} 64-bit integer bytes lengths not supported`);return yc(r,e,9,o)}function pd(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===b.string?fd(r.value):r.value),r.encodedBytes}function Rs(r,e){let t=pd(e);Et(r,e.type.majorEncoded,t.length),r.push(t)}Rs.encodedSize=function(e){let t=pd(e);return Et.encodedSize(t.length)+t.length};Rs.compareTokens=function(e,t){return KA(pd(e),pd(t))};function KA(r,e){return r.length<e.length?-1:r.length>e.length?1:D8(r,e)}function wc(r,e,t,n,o){let i=t+n;jn(r,e,i);let s=new O(b.string,k8(r,e+t,e+i),i);return o.retainStringBytes===!0&&(s.byteValue=Ps(r,e+t,e+i)),s}function G8(r,e,t,n){return wc(r,e,1,t,n)}function Q8(r,e,t,n){return wc(r,e,2,gr(r,e+1,n),n)}function Y8(r,e,t,n){return wc(r,e,3,yr(r,e+1,n),n)}function X8(r,e,t,n){return wc(r,e,5,wr(r,e+1,n),n)}function j8(r,e,t,n){let o=br(r,e+1,n);if(typeof o=="bigint")throw new Error(`${j} 64-bit integer string lengths not supported`);return wc(r,e,9,o,n)}var Z8=Rs;function Ds(r,e,t,n){return new O(b.array,n,t)}function J8(r,e,t,n){return Ds(r,e,1,t)}function e5(r,e,t,n){return Ds(r,e,2,gr(r,e+1,n))}function t5(r,e,t,n){return Ds(r,e,3,yr(r,e+1,n))}function r5(r,e,t,n){return Ds(r,e,5,wr(r,e+1,n))}function n5(r,e,t,n){let o=br(r,e+1,n);if(typeof o=="bigint")throw new Error(`${j} 64-bit integer array lengths not supported`);return Ds(r,e,9,o)}function o5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${j} indefinite length items not allowed`);return Ds(r,e,1,1/0)}function md(r,e){Et(r,b.array.majorEncoded,e.value)}md.compareTokens=Pr.compareTokens;md.encodedSize=function(e){return Et.encodedSize(e.value)};function Ls(r,e,t,n){return new O(b.map,n,t)}function i5(r,e,t,n){return Ls(r,e,1,t)}function s5(r,e,t,n){return Ls(r,e,2,gr(r,e+1,n))}function a5(r,e,t,n){return Ls(r,e,3,yr(r,e+1,n))}function c5(r,e,t,n){return Ls(r,e,5,wr(r,e+1,n))}function l5(r,e,t,n){let o=br(r,e+1,n);if(typeof o=="bigint")throw new Error(`${j} 64-bit integer map lengths not supported`);return Ls(r,e,9,o)}function u5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${j} indefinite length items not allowed`);return Ls(r,e,1,1/0)}function gd(r,e){Et(r,b.map.majorEncoded,e.value)}gd.compareTokens=Pr.compareTokens;gd.encodedSize=function(e){return Et.encodedSize(e.value)};function d5(r,e,t,n){return new O(b.tag,t,1)}function f5(r,e,t,n){return new O(b.tag,gr(r,e+1,n),2)}function h5(r,e,t,n){return new O(b.tag,yr(r,e+1,n),3)}function p5(r,e,t,n){return new O(b.tag,wr(r,e+1,n),5)}function m5(r,e,t,n){return new O(b.tag,br(r,e+1,n),9)}function yd(r,e){Et(r,b.tag.majorEncoded,e.value)}yd.compareTokens=Pr.compareTokens;yd.encodedSize=function(e){return Et.encodedSize(e.value)};var QA=20,YA=21,XA=22,jA=23;function g5(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${j} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new O(b.null,null,1):new O(b.undefined,void 0,1)}function y5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${j} indefinite length items not allowed`);return new O(b.break,void 0,1)}function up(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${j} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${j} Infinity values are not supported`)}return new O(b.float,r,e)}function w5(r,e,t,n){return up(dp(r,e+1),3,n)}function b5(r,e,t,n){return up(fp(r,e+1),5,n)}function x5(r,e,t,n){return up(A5(r,e+1),9,n)}function wd(r,e,t){let n=e.value;if(n===!1)r.push([b.float.majorEncoded|QA]);else if(n===!0)r.push([b.float.majorEncoded|YA]);else if(n===null)r.push([b.float.majorEncoded|XA]);else if(n===void 0)r.push([b.float.majorEncoded|jA]);else{let o,i=!1;(!t||t.float64!==!0)&&(E5(n),o=dp(Zr,1),n===o||Number.isNaN(n)?(Zr[0]=249,r.push(Zr.slice(0,3)),i=!0):(S5(n),o=fp(Zr,1),n===o&&(Zr[0]=250,r.push(Zr.slice(0,5)),i=!0))),i||(ZA(n),o=A5(Zr,1),Zr[0]=251,r.push(Zr.slice(0,9)))}}wd.encodedSize=function(e,t){let n=e.value;if(n===!1||n===!0||n===null||n===void 0)return 1;if(!t||t.float64!==!0){E5(n);let o=dp(Zr,1);if(n===o||Number.isNaN(n))return 3;if(S5(n),o=fp(Zr,1),n===o)return 5}return 9};var v5=new ArrayBuffer(9),Rr=new DataView(v5,1),Zr=new Uint8Array(v5,0);function E5(r){if(r===1/0)Rr.setUint16(0,31744,!1);else if(r===-1/0)Rr.setUint16(0,64512,!1);else if(Number.isNaN(r))Rr.setUint16(0,32256,!1);else{Rr.setFloat32(0,r);let e=Rr.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)Rr.setUint16(0,31744,!1);else if(t===0)Rr.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?Rr.setUint16(0,0):o<-14?Rr.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):Rr.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function dp(r,e){if(r.length-e<2)throw new Error(`${j} not enough data for float16`);let t=(r[e]<<8)+r[e+1];if(t===31744)return 1/0;if(t===64512)return-1/0;if(t===32256)return NaN;let n=t>>10&31,o=t&1023,i;return n===0?i=o*2**-24:n!==31?i=(o+1024)*2**(n-25):i=o===0?1/0:NaN,t&32768?-i:i}function S5(r){Rr.setFloat32(0,r,!1)}function fp(r,e){if(r.length-e<4)throw new Error(`${j} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function ZA(r){Rr.setFloat64(0,r,!1)}function A5(r,e){if(r.length-e<8)throw new Error(`${j} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}wd.compareTokens=Pr.compareTokens;function Ee(r,e,t){throw new Error(`${j} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function bd(r){return()=>{throw new Error(`${j} ${r}`)}}var V=[];for(let r=0;r<=23;r++)V[r]=Ee;V[24]=L8;V[25]=N8;V[26]=B8;V[27]=O8;V[28]=Ee;V[29]=Ee;V[30]=Ee;V[31]=Ee;for(let r=32;r<=55;r++)V[r]=Ee;V[56]=M8;V[57]=U8;V[58]=F8;V[59]=$8;V[60]=Ee;V[61]=Ee;V[62]=Ee;V[63]=Ee;for(let r=64;r<=87;r++)V[r]=K8;V[88]=H8;V[89]=q8;V[90]=z8;V[91]=W8;V[92]=Ee;V[93]=Ee;V[94]=Ee;V[95]=bd("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)V[r]=G8;V[120]=Q8;V[121]=Y8;V[122]=X8;V[123]=j8;V[124]=Ee;V[125]=Ee;V[126]=Ee;V[127]=bd("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)V[r]=J8;V[152]=e5;V[153]=t5;V[154]=r5;V[155]=n5;V[156]=Ee;V[157]=Ee;V[158]=Ee;V[159]=o5;for(let r=160;r<=183;r++)V[r]=i5;V[184]=s5;V[185]=a5;V[186]=c5;V[187]=l5;V[188]=Ee;V[189]=Ee;V[190]=Ee;V[191]=u5;for(let r=192;r<=215;r++)V[r]=d5;V[216]=f5;V[217]=h5;V[218]=p5;V[219]=m5;V[220]=Ee;V[221]=Ee;V[222]=Ee;V[223]=Ee;for(let r=224;r<=243;r++)V[r]=bd("simple values are not supported");V[244]=Ee;V[245]=Ee;V[246]=Ee;V[247]=g5;V[248]=bd("simple values are not supported");V[249]=w5;V[250]=b5;V[251]=x5;V[252]=Ee;V[253]=Ee;V[254]=Ee;V[255]=y5;var Jr=[];for(let r=0;r<24;r++)Jr[r]=new O(b.uint,r,1);for(let r=-1;r>=-24;r--)Jr[31-r]=new O(b.negint,r,1);Jr[64]=new O(b.bytes,new Uint8Array(0),1);Jr[96]=new O(b.string,"",1);Jr[128]=new O(b.array,0,1);Jr[160]=new O(b.map,0,1);Jr[244]=new O(b.false,!1,1);Jr[245]=new O(b.true,!0,1);Jr[246]=new O(b.null,null,1);function I5(r){switch(r.type){case b.false:return Tn([244]);case b.true:return Tn([245]);case b.null:return Tn([246]);case b.bytes:return r.value.length?void 0:Tn([64]);case b.string:return r.value===""?Tn([96]):void 0;case b.array:return r.value===0?Tn([128]):void 0;case b.map:return r.value===0?Tn([160]):void 0;case b.uint:return r.value<24?Tn([Number(r.value)]):void 0;case b.negint:if(r.value>=-24)return Tn([31-Number(r.value)])}}var eI={float64:!1,mapSorter:nI,quickEncodeToken:I5};function tI(){let r=[];return r[b.uint.major]=Pr,r[b.negint.major]=hd,r[b.bytes.major]=Rs,r[b.string.major]=Z8,r[b.array.major]=md,r[b.map.major]=gd,r[b.tag.major]=yd,r[b.float.major]=wd,r}var T5=tI(),hp=new mc,vd=class r{constructor(e,t){this.obj=e,this.parent=t}includes(e){let t=this;do if(t.obj===e)return!0;while(t=t.parent);return!1}static createCheck(e,t){if(e&&e.includes(t))throw new Error(`${Xn} object contains circular references`);return new r(t,e)}},Ro={null:new O(b.null,null),undefined:new O(b.undefined,void 0),true:new O(b.true,!0),false:new O(b.false,!1),emptyArray:new O(b.array,0),emptyMap:new O(b.map,0)},Do={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new O(b.float,r):r>=0?new O(b.uint,r):new O(b.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new O(b.uint,r):new O(b.negint,r)},Uint8Array(r,e,t,n){return new O(b.bytes,r)},string(r,e,t,n){return new O(b.string,r)},boolean(r,e,t,n){return r?Ro.true:Ro.false},null(r,e,t,n){return Ro.null},undefined(r,e,t,n){return Ro.undefined},ArrayBuffer(r,e,t,n){return new O(b.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new O(b.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[Ro.emptyArray,new O(b.break)]:Ro.emptyArray;n=vd.createCheck(n,r);let o=[],i=0;for(let s of r)o[i++]=xd(s,t,n);return t.addBreakTokens?[new O(b.array,r.length),o,new O(b.break)]:[new O(b.array,r.length),o]},Object(r,e,t,n){let o=e!=="Object",i=o?r.keys():Object.keys(r),s=o?r.size:i.length;if(!s)return t.addBreakTokens===!0?[Ro.emptyMap,new O(b.break)]:Ro.emptyMap;n=vd.createCheck(n,r);let a=[],c=0;for(let l of i)a[c++]=[xd(l,t,n),xd(o?r.get(l):r[l],t,n)];return rI(a,t),t.addBreakTokens?[new O(b.map,s),a,new O(b.break)]:[new O(b.map,s),a]}};Do.Map=Do.Object;Do.Buffer=Do.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))Do[`${r}Array`]=Do.DataView;function xd(r,e={},t){let n=I8(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||Do[n];if(typeof o=="function"){let s=o(r,n,e,t);if(s!=null)return s}let i=Do[n];if(!i)throw new Error(`${Xn} unsupported type: ${n}`);return i(r,n,e,t)}function rI(r,e){e.mapSorter&&r.sort(e.mapSorter)}function nI(r,e){let t=Array.isArray(r[0])?r[0][0]:r[0],n=Array.isArray(e[0])?e[0][0]:e[0];if(t.type!==n.type)return t.type.compare(n.type);let o=t.type.major,i=T5[o].compareTokens(t,n);return i===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),i}function _5(r,e,t,n){if(Array.isArray(e))for(let o of e)_5(r,o,t,n);else t[e.type.major](r,e,n)}function pp(r,e,t){let n=xd(r,t);if(!Array.isArray(n)&&t.quickEncodeToken){let o=t.quickEncodeToken(n);if(o)return o;let i=e[n.type.major];if(i.encodedSize){let s=i.encodedSize(n,t),a=new mc(s);if(i(a,n,t),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${n} was wrong`);return pc(a.chunks[0])}}return hp.reset(),_5(hp,n,e,t),hp.toBytes(!0)}function Lo(r,e){return e=Object.assign({},eI,e),pp(r,T5,e)}var oI={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},Ed=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t}pos(){return this._pos}done(){return this._pos>=this.data.length}next(){let e=this.data[this._pos],t=Jr[e];if(t===void 0){let n=V[e];if(!n)throw new Error(`${j} no decoder for major type ${e>>>5} (byte 0x${e.toString(16).padStart(2,"0")})`);let o=e&31;t=n(this.data,this._pos,o,this.options)}return this._pos+=t.encodedLength,t}},bc=Symbol.for("DONE"),Sd=Symbol.for("BREAK");function iI(r,e,t){let n=[];for(let o=0;o<r.value;o++){let i=Ns(e,t);if(i===Sd){if(r.value===1/0)break;throw new Error(`${j} got unexpected break to lengthed array`)}if(i===bc)throw new Error(`${j} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=i}return n}function sI(r,e,t){let n=t.useMaps===!0,o=n?void 0:{},i=n?new Map:void 0;for(let s=0;s<r.value;s++){let a=Ns(e,t);if(a===Sd){if(r.value===1/0)break;throw new Error(`${j} got unexpected break to lengthed map`)}if(a===bc)throw new Error(`${j} found map but not enough entries (got ${s} [no key], expected ${r.value})`);if(n!==!0&&typeof a!="string")throw new Error(`${j} non-string keys not supported (got ${typeof a})`);if(t.rejectDuplicateMapKeys===!0&&(n&&i.has(a)||!n&&a in o))throw new Error(`${j} found repeat map key "${a}"`);let c=Ns(e,t);if(c===bc)throw new Error(`${j} found map but not enough entries (got ${s} [no value], expected ${r.value})`);n?i.set(a,c):o[a]=c}return n?i:o}function Ns(r,e){if(r.done())return bc;let t=r.next();if(t.type===b.break)return Sd;if(t.type.terminal)return t.value;if(t.type===b.array)return iI(t,r,e);if(t.type===b.map)return sI(t,r,e);if(t.type===b.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=Ns(r,e);return e.tags[t.value](n)}throw new Error(`${j} tag not supported (${t.value})`)}throw new Error("unsupported")}function mp(r,e){if(!(r instanceof Uint8Array))throw new Error(`${j} data to decode must be a Uint8Array`);e=Object.assign({},oI,e);let t=e.tokenizer||new Ed(r,e),n=Ns(t,e);if(n===bc)throw new Error(`${j} did not find any content to decode`);if(n===Sd)throw new Error(`${j} got unexpected break`);return[n,r.subarray(t.pos())]}function xr(r,e){let[t,n]=mp(r,e);if(n.length>0)throw new Error(`${j} too many terminals, data makes no sense`);return t}var Zn="/",C5=new TextEncoder().encode(Zn),Ad=C5[0],Le=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=N(e);else if(e instanceof Uint8Array)this._buf=e;else throw new Error("Invalid key, should be String of Uint8Array");if(t==null&&(t=!0),t&&this.clean(),this._buf.byteLength===0||this._buf[0]!==Ad)throw new Error("Invalid key")}toString(e="utf8"){return U(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Zn))}static random(){return new r(Math.random().toString().substring(2))}static asKey(e){return e instanceof Uint8Array||typeof e=="string"?new r(e):typeof e.uint8Array=="function"?new r(e.uint8Array()):null}clean(){if((this._buf==null||this._buf.byteLength===0)&&(this._buf=C5),this._buf[0]!==Ad){let e=new Uint8Array(this._buf.byteLength+1);e.fill(Ad,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===Ad;)this._buf=this._buf.subarray(0,-1)}less(e){let t=this.list(),n=e.list();for(let o=0;o<t.length;o++){if(n.length<o+1)return!1;let i=t[o],s=n[o];if(i<s)return!0;if(i>s)return!1}return t.length<n.length}reverse(){return r.withNamespaces(this.list().slice().reverse())}namespaces(){return this.list()}baseNamespace(){let e=this.namespaces();return e[e.length-1]}list(){return this.toString().split(Zn).slice(1)}type(){return aI(this.baseNamespace())}name(){return cI(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Zn)||(e+=Zn),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Zn):new r(e.slice(0,-1).join(Zn))}child(e){return this.toString()===Zn?e:e.toString()===Zn?this:new r(this.toString()+e.toString(),!1)}isAncestorOf(e){return e.toString()===this.toString()?!1:e.toString().startsWith(this.toString())}isDecendantOf(e){return e.toString()===this.toString()?!1:this.toString().startsWith(e.toString())}isTopLevel(){return this.list().length===1}concat(...e){return r.withNamespaces([...this.namespaces(),...lI(e.map(t=>t.namespaces()))])}};function aI(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function cI(r){let e=r.split(":");return e[e.length-1]}function lI(r){return[].concat(...r)}function Id({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*uI(r,e){if(e!=null&&typeof e=="object")if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t],i=X.asCID(n);i!=null?yield[o.join("/"),i]:typeof n=="object"&&(yield*yp(n,o))}else{let t=X.asCID(e);t!=null?yield[r.join("/"),t]:yield*yp(e,r)}}function*yp(r,e){if(r==null||r instanceof Uint8Array)return;let t=X.asCID(r);t!=null&&(yield[e.join("/"),t]);for(let[n,o]of Object.entries(r)){let i=[...e,n];yield*uI(i,o)}}function*dI(r,e){if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t];yield o.join("/"),typeof n=="object"&&X.asCID(n)==null&&(yield*wp(n,o))}else yield*wp(e,r)}function*wp(r,e){if(!(r==null||typeof r!="object"))for(let[t,n]of Object.entries(r)){let o=[...e,t];yield o.join("/"),n!=null&&!(n instanceof Uint8Array)&&typeof n=="object"&&X.asCID(n)==null&&(yield*dI(o,n))}}function fI(r,e){let t=r;for(let[n,o]of e.entries()){if(t=t[o],t==null)throw new Error(`Object has no property at ${e.slice(0,n+1).map(s=>`[${JSON.stringify(s)}]`).join("")}`);let i=X.asCID(t);if(i!=null)return{value:i,remaining:e.slice(n+1).join("/")}}return{value:t}}var bp=class{cid;bytes;value;asBlock;constructor({cid:e,bytes:t,value:n}){if(e==null||t==null||typeof n>"u")throw new Error("Missing required argument");this.cid=e,this.bytes=t,this.value=n,this.asBlock=this,Object.defineProperties(this,{cid:Id(),bytes:Id(),value:Id(),asBlock:Id()})}links(){return yp(this.value,[])}tree(){return wp(this.value,[])}get(e="/"){return fI(this.value,e.split("/").filter(Boolean))}};function k5({bytes:r,cid:e,value:t,codec:n}){let o=t!==void 0?t:n?.decode(r);if(o===void 0)throw new Error('Missing required argument, must either provide "value" or "codec"');return new bp({cid:e,bytes:r,value:o})}var D5="/pin/",P5="/pinned-block/",xp=yn,R5=1;function Td(r){return r.version===0&&(r=r.toV1()),new Le(`${D5}${r.toString(xp)}`)}var _d=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=Td(e);if(await this.datastore.has(n))throw new Error("Already pinned");let o=Math.round(t.depth??1/0);if(o<0)throw new Error("Depth must be greater than or equal to 0");let i=new Ht({concurrency:R5});for await(let a of this.#e(e,i,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>ne(l,e.bytes))!=null?!1:(c.pinCount++,c.pinnedBy.push(e.bytes),!0),t),yield a;let s={depth:o,metadata:t.metadata??{}};await this.datastore.put(n,Lo(s),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=await this.getCodec(e.code),i=await this.blockstore.get(e,n),s=k5({bytes:i,cid:e,codec:o});yield e;for await(let[,a]of s.links())yield*await t.add(async()=>this.#e(a,t,{...n,depth:n.depth-1}))}async#t(e,t,n){let o=new Le(`${P5}${xp.encode(e.multihash.bytes)}`),i={pinCount:0,pinnedBy:[]};try{i=xr(await this.datastore.get(o,n))}catch(a){if(a.name!=="NotFoundError")throw a}if(t(i)){if(i.pinCount===0&&await this.datastore.has(o)){await this.datastore.delete(o);return}await this.datastore.put(o,Lo(i),n),n.onProgress?.(new W("helia:pin:add",e))}}async*rm(e,t={}){let n=Td(e),o=await this.datastore.get(n,t),i=xr(o);await this.datastore.delete(n,t);let s=new Ht({concurrency:R5});for await(let a of this.#e(e,s,{...t,depth:i.depth}))await this.#t(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>ne(l,e.bytes)),!0),{...t,depth:i.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:D5+(e.cid!=null?`${e.cid.toString(yn)}`:"")},e)){let o=X.parse(t.toString().substring(5),yn),i=xr(n);yield{cid:o,...i}}}async isPinned(e,t={}){let n=new Le(`${P5}${xp.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=Td(e),o=await this.datastore.get(n,t);return xr(o)}async setMetadata(e,t,n){let o=Td(e),i=await this.datastore.get(o,n),s=xr(i);s.metadata=t??{},await this.datastore.put(o,Lo(s),n)}};var vp=1,Ep=5;var xc=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},No=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}},vc=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},Ec=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}};var hI=5,Cd=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??hI,this.findProviders=e.metrics?.traceFunction("helia.routing.findProviders",this.findProviders.bind(this),{optionsIndex:1})??this.findProviders,this.provide=e.metrics?.traceFunction("helia.routing.provide",this.provide.bind(this),{optionsIndex:1})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("helia.routing.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1})??this.cancelReprovide,this.put=e.metrics?.traceFunction("helia.routing.put",this.put.bind(this),{optionsIndex:2})??this.put,this.get=e.metrics?.traceFunction("helia.routing.get",this.get.bind(this),{optionsIndex:1})??this.get,this.findPeer=e.metrics?.traceFunction("helia.routing.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("helia.routing.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async start(){await yt(...this.routers)}async stop(){await Rt(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new No("No content routers available");let n=new wt({concurrency:this.providerLookupConcurrency});n.addEventListener("error",()=>{});for await(let o of qt(n.toGenerator(),...Ei(this.routers,"findProviders").map(i=>i.findProviders(e,t))))if(o!=null){if(o.multiaddrs.length===0){if(n.find(o.id)!=null)continue;n.add(async()=>{try{let i=await this.findPeer(o.id,t);return i.multiaddrs.length===0?null:i}catch(i){return this.log.error("could not load multiaddrs for peer %p",o.id,i),null}},{peerId:o.id,signal:t.signal}).catch(i=>{this.log.error("could not load multiaddrs for peer %p",o.id,i)})}yield o}}async provide(e,t={}){if(this.routers.length===0)throw new No("No content routers available");await Promise.all(Ei(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){await Promise.all(Ei(this.routers,"cancelReprovide").map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){await Promise.all(Ei(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){return Promise.any(Ei(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new No("No peer routers available");let n=this,o=qt(...Ei(this.routers,"findPeer").map(i=>async function*(){try{yield await i.findPeer(e,t)}catch(s){n.log.error(s)}}()));for await(let i of o)if(i!=null)return i;throw new Oe("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new No("No peer routers available");for await(let n of qt(...Ei(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function Ei(r,e){return r.filter(t=>t[e]!=null)}var Bo={},Bs=r=>{r.addEventListener("message",e=>{Bs.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{Bs.dispatchEvent("message",r,e)})};Bs.addEventListener=(r,e)=>{Bo[r]==null&&(Bo[r]=[]),Bo[r].push(e)};Bs.removeEventListener=(r,e)=>{Bo[r]!=null&&(Bo[r]=Bo[r].filter(t=>t===e))};Bs.dispatchEvent=function(r,e,t){Bo[r]!=null&&Bo[r].forEach(n=>n(e,t))};var Sp=Bs;var Ap="lock:worker:request-read",Ip="lock:worker:release-read",Tp="lock:master:grant-read",_p="lock:worker:request-write",Cp="lock:worker:release-write",kp="lock:master:grant-write";var L5=(r=21)=>Math.random().toString().substring(2);var N5=(r,e,t,n,o)=>(i,s)=>{if(s.data.type!==t)return;let a={type:s.data.type,name:s.data.name,identifier:s.data.identifier};r.dispatchEvent(new MessageEvent(e,{data:{name:a.name,handler:async()=>{i.postMessage({type:o,name:a.name,identifier:a.identifier}),await new Promise(c=>{let l=u=>{if(u?.data==null)return;let d={type:u.data.type,name:u.data.name,identifier:u.data.identifier};d.type===n&&d.identifier===a.identifier&&(i.removeEventListener("message",l),c())};i.addEventListener("message",l)})}}}))},B5=(r,e,t,n)=>async()=>{let o=L5();return globalThis.postMessage({type:e,identifier:o,name:r}),new Promise(i=>{let s=a=>{if(a?.data==null)return;let c={type:a.data.type,identifier:a.data.identifier};c.type===t&&c.identifier===o&&(globalThis.removeEventListener("message",s),i(()=>{globalThis.postMessage({type:n,identifier:o,name:r})}))};globalThis.addEventListener("message",s)})},pI={singleProcess:!1},O5=r=>{if(r=Object.assign({},pI,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return Sp.addEventListener("message",N5(t,"requestReadLock",Ap,Ip,Tp)),Sp.addEventListener("message",N5(t,"requestWriteLock",_p,Cp,kp)),t}return{isWorker:!0,readLock:t=>B5(t,Ap,Tp,Ip),writeLock:t=>B5(t,_p,kp,Cp)}};var Si={},Oo;async function Pp(r,e){let t,n=new Promise(o=>{t=o});return r.add(async()=>jr((async()=>{await new Promise(o=>{t(()=>{o()})})})(),{milliseconds:e.timeout})),n}var mI=(r,e)=>{if(Oo.isWorker===!0)return{readLock:Oo.readLock(r,e),writeLock:Oo.writeLock(r,e)};let t=new In({concurrency:1}),n;return{async readLock(){if(n!=null)return Pp(n,e);n=new In({concurrency:e.concurrency,autoStart:!1});let o=n,i=Pp(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),i},async writeLock(){return n=null,Pp(t,e)}}},gI={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function Ai(r){let e=Object.assign({},gI,r);return Oo==null&&(Oo=O5(e),Oo.isWorker!==!0&&(Oo.addEventListener("requestReadLock",t=>{Si[t.data.name]!=null&&Si[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),Oo.addEventListener("requestWriteLock",async t=>{Si[t.data.name]!=null&&Si[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),Si[e.name]==null&&(Si[e.name]=mI(e.name,e)),Si[e.name]}var kd=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=Ai({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await yt(this.child),this.started=!0}async stop(){await Rt(this.child),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){n?.signal?.throwIfAborted();let o=await this.lock.readLock();try{return await this.child.put(e,t,n)}finally{o()}}async*putMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.putMany(e,t)}finally{n()}}async get(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.get(e,t)}finally{n()}}async*getMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.getMany(e,t)}finally{n()}}async delete(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{if(await this.pins.isPinned(e))throw new Error("CID was pinned");await this.child.delete(e,t)}finally{n()}}async*deleteMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{let o=this;yield*this.child.deleteMany(async function*(){for await(let i of e){if(await o.pins.isPinned(i))throw new Error("CID was pinned");yield i}}(),t)}finally{n()}}async has(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.has(e,t)}finally{n()}}async*getAll(e={}){e?.signal?.throwIfAborted();let t=await this.lock.readLock();try{yield*this.child.getAll(e)}finally{t()}}createSession(e,t){return t?.signal?.throwIfAborted(),this.child.createSession(e,t)}};var Rp=new Le("/version"),M5=1;async function U5(r){if(!await r.has(Rp)){await r.put(Rp,N(`${M5}`));return}let e=await r.get(Rp),t=U(e);if(parseInt(t,10)!==M5)throw new Error("Unknown datastore version, a datastore migration may be required")}var Np={};Xe(Np,{code:()=>Lp,decode:()=>II,decodeOptions:()=>EI,encode:()=>AI,encodeOptions:()=>xI,name:()=>SI,toByteView:()=>V5});var F5=42;function V5(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function yI(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=X.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new O(b.tag,F5),new O(b.bytes,t)]}function wI(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function bI(r){if(Number.isNaN(r))throw new Error("`NaN` is not supported by the IPLD Data Model and cannot be encoded");if(r===1/0||r===-1/0)throw new Error("`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded");return null}var Dp={float64:!0,typeEncoders:{Object:yI,undefined:wI,number:bI}},xI={...Dp,typeEncoders:{...Dp.typeEncoders}};function vI(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return X.decode(r.subarray(1))}var Pd={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Pd.tags[F5]=vI;var EI={...Pd,tags:Pd.tags.slice()},SI="dag-cbor",Lp=113,AI=r=>Lo(r,Dp),II=r=>xr(V5(r),Pd);var $p={};Xe($p,{code:()=>Vp,decode:()=>K5,encode:()=>$5,format:()=>OI,name:()=>BI,parse:()=>UI,stringify:()=>OI});var Bp=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(t.type===b.array&&(t.elements++,t.elements!==1&&e.push([44])),t.type===b.map&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[b.uint.major](e,t){this.prefix(e);let n=String(t.value),o=[];for(let i=0;i<n.length;i++)o[i]=n.charCodeAt(i);e.push(o)}[b.negint.major](e,t){this[b.uint.major](e,t)}[b.bytes.major](e,t){throw new Error(`${Xn} unsupported type: Uint8Array`)}[b.string.major](e,t){this.prefix(e);let n=fd(JSON.stringify(t.value));e.push(n.length>32?pc(n):n)}[b.array.major](e,t){this.prefix(e),this.inRecursive.push({type:b.array,elements:0}),e.push([91])}[b.map.major](e,t){this.prefix(e),this.inRecursive.push({type:b.map,elements:0}),e.push([123])}[b.tag.major](e,t){}[b.float.major](e,t){if(t.type.name==="break"){let s=this.inRecursive.pop();if(s){if(s.type===b.array)e.push([93]);else if(s.type===b.map)e.push([125]);else throw new Error("Unexpected recursive type; this should not happen!");return}throw new Error("Unexpected break; this should not happen!")}if(t.value===void 0)throw new Error(`${Xn} unsupported type: undefined`);if(this.prefix(e),t.type.name==="true"){e.push([116,114,117,101]);return}else if(t.type.name==="false"){e.push([102,97,108,115,101]);return}else if(t.type.name==="null"){e.push([110,117,108,108]);return}let n=String(t.value),o=[],i=!1;for(let s=0;s<n.length;s++)o[s]=n.charCodeAt(s),!i&&(o[s]===46||o[s]===101||o[s]===69)&&(i=!0);i||(o.push(46),o.push(48)),e.push(o)}};function TI(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${Xn} complex map keys are not supported`);let t=r[0],n=e[0];if(t.type!==b.string||n.type!==b.string)throw new Error(`${Xn} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${Xn} unexpected duplicate map keys, this is not supported`)}var _I={addBreakTokens:!0,mapSorter:TI};function Op(r,e){return e=Object.assign({},_I,e),pp(r,new Bp,e)}var Os=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t,this.modeStack=["value"],this.lastToken=""}pos(){return this._pos}done(){return this._pos>=this.data.length}ch(){return this.data[this._pos]}currentMode(){return this.modeStack[this.modeStack.length-1]}skipWhitespace(){let e=this.ch();for(;e===32||e===9||e===13||e===10;)e=this.data[++this._pos]}expect(e){if(this.data.length-this._pos<e.length)throw new Error(`${j} unexpected end of input at position ${this._pos}`);for(let t=0;t<e.length;t++)if(this.data[this._pos++]!==e[t])throw new Error(`${j} unexpected token at position ${this._pos}, expected to find '${String.fromCharCode(...e)}'`)}parseNumber(){let e=this._pos,t=!1,n=!1,o=a=>{for(;!this.done();){let c=this.ch();if(a.includes(c))this._pos++;else break}};if(this.ch()===45&&(t=!0,this._pos++),this.ch()===48)if(this._pos++,this.ch()===46)this._pos++,n=!0;else return new O(b.uint,0,this._pos-e);if(o([48,49,50,51,52,53,54,55,56,57]),t&&this._pos===e+1)throw new Error(`${j} unexpected token at position ${this._pos}`);if(!this.done()&&this.ch()===46){if(n)throw new Error(`${j} unexpected token at position ${this._pos}`);n=!0,this._pos++,o([48,49,50,51,52,53,54,55,56,57])}!this.done()&&(this.ch()===101||this.ch()===69)&&(n=!0,this._pos++,!this.done()&&(this.ch()===43||this.ch()===45)&&this._pos++,o([48,49,50,51,52,53,54,55,56,57]));let i=String.fromCharCode.apply(null,this.data.subarray(e,this._pos)),s=parseFloat(i);return n?new O(b.float,s,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(s)?new O(s>=0?b.uint:b.negint,s,this._pos-e):new O(s>=0?b.uint:b.negint,BigInt(i),this._pos-e)}parseString(){if(this.ch()!==34)throw new Error(`${j} unexpected character at position ${this._pos}; this shouldn't happen`);this._pos++;for(let i=this._pos,s=0;i<this.data.length&&s<65536;i++,s++){let a=this.data[i];if(a===92||a<32||a>=128)break;if(a===34){let c=String.fromCharCode.apply(null,this.data.subarray(this._pos,i));return this._pos=i+1,new O(b.string,c,s)}}let e=this._pos,t=[],n=()=>{if(this._pos+4>=this.data.length)throw new Error(`${j} unexpected end of unicode escape sequence at position ${this._pos}`);let i=0;for(let s=0;s<4;s++){let a=this.ch();if(a>=48&&a<=57)a-=48;else if(a>=97&&a<=102)a=a-97+10;else if(a>=65&&a<=70)a=a-65+10;else throw new Error(`${j} unexpected unicode escape character at position ${this._pos}`);i=i*16+a,this._pos++}return i},o=()=>{let i=this.ch(),s=null,a=i>239?4:i>223?3:i>191?2:1;if(this._pos+a>this.data.length)throw new Error(`${j} unexpected unicode sequence at position ${this._pos}`);let c,l,u,d;switch(a){case 1:i<128&&(s=i);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(d=(i&31)<<6|c&63,d>127&&(s=d));break;case 3:c=this.data[this._pos+1],l=this.data[this._pos+2],(c&192)===128&&(l&192)===128&&(d=(i&15)<<12|(c&63)<<6|l&63,d>2047&&(d<55296||d>57343)&&(s=d));break;case 4:c=this.data[this._pos+1],l=this.data[this._pos+2],u=this.data[this._pos+3],(c&192)===128&&(l&192)===128&&(u&192)===128&&(d=(i&15)<<18|(c&63)<<12|(l&63)<<6|u&63,d>65535&&d<1114112&&(s=d))}s===null?(s=65533,a=1):s>65535&&(s-=65536,t.push(s>>>10&1023|55296),s=56320|s&1023),t.push(s),this._pos+=a};for(;!this.done();){let i=this.ch(),s;switch(i){case 92:if(this._pos++,this.done())throw new Error(`${j} unexpected string termination at position ${this._pos}`);switch(s=this.ch(),this._pos++,s){case 34:case 39:case 92:case 47:t.push(s);break;case 98:t.push(8);break;case 116:t.push(9);break;case 110:t.push(10);break;case 102:t.push(12);break;case 114:t.push(13);break;case 117:t.push(n());break;default:throw new Error(`${j} unexpected string escape character at position ${this._pos}`)}break;case 34:return this._pos++,new O(b.string,cp(t),this._pos-e);default:if(i<32)throw new Error(`${j} invalid control character at position ${this._pos}`);i<128?(t.push(i),this._pos++):o()}}throw new Error(`${j} unexpected end of string at position ${this._pos}`)}parseValue(){switch(this.ch()){case 123:return this.modeStack.push("obj-start"),this._pos++,new O(b.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new O(b.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new O(b.null,null,4);case 102:return this.expect([102,97,108,115,101]),new O(b.false,!1,5);case 116:return this.expect([116,114,117,101]),new O(b.true,!0,4);case 45:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.parseNumber();default:throw new Error(`${j} unexpected character at position ${this._pos}`)}}next(){switch(this.skipWhitespace(),this.currentMode()){case"value":return this.modeStack.pop(),this.parseValue();case"array-value":{if(this.modeStack.pop(),this.ch()===93)return this._pos++,this.skipWhitespace(),new O(b.break,void 0,1);if(this.ch()!==44)throw new Error(`${j} unexpected character at position ${this._pos}, was expecting array delimiter but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue()}case"array-start":return this.modeStack.pop(),this.ch()===93?(this._pos++,this.skipWhitespace(),new O(b.break,void 0,1)):(this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue());case"obj-key":if(this.ch()===125)return this.modeStack.pop(),this._pos++,this.skipWhitespace(),new O(b.break,void 0,1);if(this.ch()!==44)throw new Error(`${j} unexpected character at position ${this._pos}, was expecting object delimiter but found '${String.fromCharCode(this.ch())}'`);this._pos++,this.skipWhitespace();case"obj-start":{if(this.modeStack.pop(),this.ch()===125)return this._pos++,this.skipWhitespace(),new O(b.break,void 0,1);let e=this.parseString();if(this.skipWhitespace(),this.ch()!==58)throw new Error(`${j} unexpected character at position ${this._pos}, was expecting key/value delimiter ':' but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("obj-value"),e}case"obj-value":return this.modeStack.pop(),this.modeStack.push("obj-key"),this.skipWhitespace(),this.parseValue();default:throw new Error(`${j} unexpected parse state at position ${this._pos}; this shouldn't happen`)}}};function Mp(r,e){return e=Object.assign({tokenizer:new Os(r,e)},e),xr(r,e)}function kI(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function PI(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=X.asCID(r);if(!e)return null;let t=e.toString();return[new O(b.map,1/0,1),new O(b.string,"/",1),new O(b.string,t,t.length),new O(b.break,void 0,1)]}function Rd(r){let e=it.encode(r).slice(1);return[new O(b.map,1/0,1),new O(b.string,"/",1),new O(b.map,1/0,1),new O(b.string,"bytes",5),new O(b.string,e,e.length),new O(b.break,void 0,1),new O(b.break,void 0,1)]}function en(r){return Rd(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function RI(r){return Rd(new Uint8Array(r))}function DI(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function LI(r){if(Number.isNaN(r))throw new Error("`NaN` is not supported by the IPLD Data Model and cannot be encoded");if(r===1/0||r===-1/0)throw new Error("`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded");return null}var NI={typeEncoders:{Object:PI,Buffer:Rd,Uint8Array:Rd,Int8Array:en,Uint16Array:en,Int16Array:en,Uint32Array:en,Int32Array:en,Float32Array:en,Float64Array:en,Uint8ClampedArray:en,BigInt64Array:en,BigUint64Array:en,DataView:en,ArrayBuffer:RI,undefined:DI,number:LI}},Up=class extends Os{constructor(e,t){super(e,t),this.tokenBuffer=[]}done(){return this.tokenBuffer.length===0&&super.done()}_next(){return this.tokenBuffer.length>0?this.tokenBuffer.pop():super.next()}next(){let e=this._next();if(e.type===b.map){let t=this._next();if(t.type===b.string&&t.value==="/"){let n=this._next();if(n.type===b.string){if(this._next().type!==b.break)throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new O(b.tag,42,0)}if(n.type===b.map){let o=this._next();if(o.type===b.string&&o.value==="bytes"){let i=this._next();if(i.type===b.string){for(let a=0;a<2;a++)if(this._next().type!==b.break)throw new Error("Invalid encoded Bytes form");let s=it.decode(`m${i.value}`);return new O(b.bytes,s,i.value.length)}this.tokenBuffer.push(i)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},Fp={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Fp.tags[42]=X.parse;var BI="dag-json",Vp=297,$5=r=>Op(r,NI),K5=r=>{let e=kI(r),t=Object.assign(Fp,{tokenizer:new Up(e,Fp)});return Mp(e,t)},OI=r=>MI.decode($5(r));var MI=new TextDecoder,UI=r=>K5(FI.encode(r)),FI=new TextEncoder;var Gp={};Xe(Gp,{code:()=>Wp,createLink:()=>Z5,createNode:()=>j5,decode:()=>ZI,encode:()=>jI,name:()=>XI,prepare:()=>qp,validate:()=>zp});var VI=new TextDecoder;function Kp(r,e){let t=0;for(let n=0;;n+=7){if(n>=64)throw new Error("protobuf: varint overflow");if(e>=r.length)throw new Error("protobuf: unexpected end of data");let o=r[e++];if(t+=n<28?(o&127)<<n:(o&127)*2**n,o<128)break}return[t,e]}function Dd(r,e){let t;[t,e]=Kp(r,e);let n=e+t;if(t<0||n<0)throw new Error("protobuf: invalid length");if(n>r.length)throw new Error("protobuf: unexpected end of data");return[r.subarray(e,n),n]}function H5(r,e){let t;return[t,e]=Kp(r,e),[t&7,t>>3,e]}function $I(r){let e={},t=r.length,n=0;for(;n<t;){let o,i;if([o,i,n]=H5(r,n),i===1){if(e.Hash)throw new Error("protobuf: (PBLink) duplicate Hash section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Hash`);if(e.Name!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Name before Hash");if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Hash");[e.Hash,n]=Dd(r,n)}else if(i===2){if(e.Name!==void 0)throw new Error("protobuf: (PBLink) duplicate Name section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Name`);if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Name");let s;[s,n]=Dd(r,n),e.Name=VI.decode(s)}else if(i===3){if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) duplicate Tsize section");if(o!==0)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Tsize`);[e.Tsize,n]=Kp(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${i}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function q5(r){let e=r.length,t=0,n,o=!1,i;for(;t<e;){let a,c;if([a,c,t]=H5(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(i)throw new Error("protobuf: (PBNode) duplicate Data section");[i,t]=Dd(r,t),n&&(o=!0)}else if(c===2){if(o)throw new Error("protobuf: (PBNode) duplicate Links section");n||(n=[]);let l;[l,t]=Dd(r,t),n.push($I(l))}else throw new Error(`protobuf: (PBNode) invalid fieldNumber, expected 1 or 2, got ${c}`)}if(t>e)throw new Error("protobuf: (PBNode) unexpected end of data");let s={};return i&&(s.Data=i),s.Links=n||[],s}var W5=new TextEncoder,z5=2**32,KI=2**31;function HI(r,e){let t=e.length;if(typeof r.Tsize=="number"){if(r.Tsize<0)throw new Error("Tsize cannot be negative");if(!Number.isSafeInteger(r.Tsize))throw new Error("Tsize too large for encoding");t=Sc(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=W5.encode(r.Name);t-=n.length,e.set(n,t),t=Sc(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=Sc(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function G5(r){let e=zI(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=Sc(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let o=r.Links.length-1;o>=0;o--){let i=HI(r.Links[o],t.subarray(0,n));n-=i,n=Sc(t,n,i)-1,t[n]=18}return t}function qI(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+Ms(t)}if(typeof r.Name=="string"){let t=W5.encode(r.Name).length;e+=1+t+Ms(t)}return typeof r.Tsize=="number"&&(e+=1+Ms(r.Tsize)),e}function zI(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+Ms(t)}if(r.Links)for(let t of r.Links){let n=qI(t);e+=1+n+Ms(n)}return e}function Sc(r,e,t){e-=Ms(t);let n=e;for(;t>=KI;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function Ms(r){return r%2===0&&r++,Math.floor((WI(r)+6)/7)}function WI(r){let e=0;return r>=z5&&(r=Math.floor(r/z5),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+GI[r]}var GI=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8];var QI=["Data","Links"],YI=["Hash","Name","Tsize"],Hp=new TextEncoder;function Y5(r,e){if(r===e)return 0;let t=r.Name?Hp.encode(r.Name):[],n=e.Name?Hp.encode(e.Name):[],o=t.length,i=n.length;for(let s=0,a=Math.min(o,i);s<a;++s)if(t[s]!==n[s]){o=t[s],i=n[s];break}return o<i?-1:i<o?1:0}function Q5(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function X5(r){if(typeof r.asCID=="object"){let t=X.asCID(r);if(!t)throw new TypeError("Invalid DAG-PB form");return{Hash:t}}if(typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Hash){let t=X.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=X.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=X.decode(r.Hash)))}catch(n){throw new TypeError(`Invalid DAG-PB form: ${n.message}`)}t&&(e.Hash=t)}if(!e.Hash)throw new TypeError("Invalid DAG-PB form");return typeof r.Name=="string"&&(e.Name=r.Name),typeof r.Tsize=="number"&&(e.Tsize=r.Tsize),e}function qp(r){if((r instanceof Uint8Array||typeof r=="string")&&(r={Data:r}),typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Data!==void 0)if(typeof r.Data=="string")e.Data=Hp.encode(r.Data);else if(r.Data instanceof Uint8Array)e.Data=r.Data;else throw new TypeError("Invalid DAG-PB form");if(r.Links!==void 0)if(Array.isArray(r.Links))e.Links=r.Links.map(X5),e.Links.sort(Y5);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function zp(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!Q5(r,QI))throw new TypeError("Invalid DAG-PB form (extraneous properties)");if(r.Data!==void 0&&!(r.Data instanceof Uint8Array))throw new TypeError("Invalid DAG-PB form (Data must be bytes)");if(!Array.isArray(r.Links))throw new TypeError("Invalid DAG-PB form (Links must be a list)");for(let e=0;e<r.Links.length;e++){let t=r.Links[e];if(!t||typeof t!="object"||Array.isArray(t)||t instanceof Uint8Array||t["/"]&&t["/"]===t.bytes)throw new TypeError("Invalid DAG-PB form (bad link)");if(!Q5(t,YI))throw new TypeError("Invalid DAG-PB form (extraneous properties on link)");if(t.Hash===void 0)throw new TypeError("Invalid DAG-PB form (link must have a Hash)");if(t.Hash==null||!t.Hash["/"]||t.Hash["/"]!==t.Hash.bytes)throw new TypeError("Invalid DAG-PB form (link Hash must be a CID)");if(t.Name!==void 0&&typeof t.Name!="string")throw new TypeError("Invalid DAG-PB form (link Name must be a string)");if(t.Tsize!==void 0){if(typeof t.Tsize!="number"||t.Tsize%1!==0)throw new TypeError("Invalid DAG-PB form (link Tsize must be an integer)");if(t.Tsize<0)throw new TypeError("Invalid DAG-PB form (link Tsize cannot be negative)")}if(e>0&&Y5(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function j5(r,e=[]){return qp({Data:r,Links:e})}function Z5(r,e,t){return X5({Hash:t,Name:r,Tsize:e})}function J5(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var XI="dag-pb",Wp=112;function jI(r){zp(r);let e={};return r.Links&&(e.Links=r.Links.map(t=>{let n={};return t.Hash&&(n.Hash=t.Hash.bytes),t.Name!==void 0&&(n.Name=t.Name),t.Tsize!==void 0&&(n.Tsize=t.Tsize),n})),r.Data&&(e.Data=r.Data),G5(e)}function ZI(r){let e=J5(r),t=q5(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let i={};try{i.Hash=X.decode(o.Hash)}catch{}if(!i.Hash)throw new Error("Invalid Hash field found in link, expected CID");return o.Name!==void 0&&(i.Name=o.Name),o.Tsize!==void 0&&(i.Tsize=o.Tsize),i})),n}function Us(r){return r?.then!=null}function e7(r=[],e){let t={[Wp]:Gp,[ni]:cs,[Lp]:Np,[Vp]:$p,[H0]:Bl};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Us(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new Ec(`Could not load codec for ${n}`)}}function t7(r=[],e){let t={[Qe.code]:Qe,[Ml.code]:Ml,[er.code]:er};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Us(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new vc(`No hasher configured for multihash code 0x${n.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`)}}var Dr=class r extends Error{static name="NotFoundError";static code="ERR_NOT_FOUND";name=r.name;code=r.code;constructor(e="Not Found"){super(e)}};var Jn=class{has(e,t){return Promise.reject(new Error(".has is not implemented"))}put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}async*putMany(e,t){for await(let{cid:n,block:o}of e)await this.put(n,o,t),yield n}get(e,t){return Promise.reject(new Error(".get is not implemented"))}async*getMany(e,t){for await(let n of e)yield{cid:n,block:await this.get(n,t)}}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*deleteMany(e,t){for await(let n of e)await this.delete(n,t),yield n}async*getAll(e){throw new Error(".getAll is not implemented")}};var Ld=0,Nd=class extends Jn{child;constructor(e){super(),this.child=e}put(e,t){return e.multihash.code===Ld||this.child==null?e:this.child.put(e,t)}get(e){if(e.multihash.code===Ld)return e.multihash.digest;if(this.child==null)throw new Dr;return this.child.get(e)}has(e){return e.multihash.code===Ld?!0:this.child==null?!1:this.child.has(e)}delete(e){if(e.code!==Ld&&this.child!=null)return this.child.delete(e)}getAll(e){return this.child!=null?this.child.getAll(e):[]}};function JI(r){return r[Symbol.asyncIterator]!=null}function eT(r,e){let t=0;if(JI(r))return async function*(){for await(let c of r)await e(c,t++)&&(yield c)}();let n=ss(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();let s=e(o,t++);if(typeof s.then=="function")return async function*(){await s&&(yield o);for await(let c of n)await e(c,t++)&&(yield c)}();let a=e;return function*(){s===!0&&(yield o);for(let c of n)a(c,t++)&&(yield c)}()}var tn=eT;function tT(r){return r[Symbol.asyncIterator]!=null}function r7(r){return r?.then!=null}function rT(r,e){let t=0;if(tT(r))return async function*(){for await(let c of r){let l=e(c,t++);r7(l)&&await l,yield c}}();let n=ss(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();if(typeof e(o,t++)?.then=="function")return async function*(){yield o;for await(let c of n){let l=e(c,t++);r7(l)&&await l,yield c}}();let a=e;return function*(){yield o;for(let c of n)a(c,t++),yield c}()}var Ii=rT;var Bd=class{child;getHasher;log;logger;components;constructor(e){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.components=e,this.child=new Nd(e.blockstore),this.getHasher=e.getHasher}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new W("blocks:put:duplicate",e)),e):(n.onProgress?.(new W("blocks:put:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,t,n))),n.onProgress?.(new W("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=tn(e,async({cid:i})=>{let s=await this.child.has(i,t);return s&&t.onProgress?.(new W("blocks:put-many:duplicate",i)),!s}),o=Ii(n,async({cid:i,block:s})=>{t.onProgress?.(new W("blocks:put-many:providers:notify",i)),await Promise.all(this.components.blockBrokers.map(async a=>a.announce?.(i,s,t)))});t.onProgress?.(new W("blocks:put-many:blockstore:put-many")),yield*this.child.putMany(o,t)}async get(e,t={}){if(t.offline!==!0&&!await this.child.has(e,t)){let n=await this.getHasher(e.multihash.code);t.onProgress?.(new W("blocks:get:providers:get",e));let o=await n7(e,this.components.blockBrokers,n,{...t,log:this.log});return t.onProgress?.(new W("blocks:get:blockstore:put",e)),await this.child.put(e,o,t),t.onProgress?.(new W("blocks:get:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async i=>i.announce?.(e,o,t))),o}return t.onProgress?.(new W("blocks:get:blockstore:get",e)),this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new W("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(Ii(e,async n=>{if(t.offline!==!0&&!await this.child.has(n,t)){let o=await this.getHasher(n.multihash.code);t.onProgress?.(new W("blocks:get-many:providers:get",n));let i=await n7(n,this.components.blockBrokers,o,{...t,log:this.log});t.onProgress?.(new W("blocks:get-many:blockstore:put",n)),await this.child.put(n,i,t),t.onProgress?.(new W("blocks:get-many:providers:notify",n)),await Promise.all(this.components.blockBrokers.map(async s=>s.announce?.(n,i,t)))}}))}async delete(e,t={}){t.onProgress?.(new W("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new W("blocks:delete-many:blockstore:delete-many")),yield*this.child.deleteMany(async function*(){for await(let n of e)yield n}(),t)}async has(e,t={}){return this.child.has(e,t)}async*getAll(e={}){e.onProgress?.(new W("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}},Od=class extends Bd{started;constructor(e){super(e),this.started=!1}isStarted(){return this.started}async start(){await yt(this.child,...this.components.blockBrokers),this.started=!0}async stop(){await Rt(this.child,...this.components.blockBrokers),this.started=!1}unwrap(){return this.child}createSession(e,t){let n=this.components.blockBrokers.map(o=>o.createSession==null?o:o.createSession(t));return new Qp({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}},Qp=class extends Bd{closeController;constructor(e,t){super(e),this.closeController=new AbortController,this.closeController.signal,this.log=e.logger.forComponent(`helia:session-storage:${t.root}`)}close(){this.closeController.abort()}async put(e,t,n={}){let o=le([this.closeController.signal,n.signal]);try{return await super.put(e,t,{...n,signal:o})}finally{o.clear()}}async*putMany(e,t={}){let n=le([this.closeController.signal,t.signal]);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async get(e,t={}){let n=le([this.closeController.signal,t.signal]);try{return await super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=le([this.closeController.signal,t.signal]);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=le([this.closeController.signal,t.signal]);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=le([this.closeController.signal,t.signal]);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=le([this.closeController.signal,t.signal]);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=le([this.closeController.signal,e.signal]);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};function nT(r){return typeof r.retrieve=="function"}var oT=(r,e)=>{if(e==null)throw new k(`No hasher configured for multihash code 0x${r.multihash.code.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`);return async t=>{let n,o=e.digest(t);if(Us(o)?n=await o:n=o,!ne(n.digest,r.multihash.digest))throw new uo("Hash of downloaded block did not match multihash from passed CID")}};async function n7(r,e,t,n){let o=oT(r,t),i=new AbortController,s=le([i.signal,n.signal]);i.signal;let a=[];for(let c of e)nT(c)&&a.push(c);try{return await Promise.any(a.map(async c=>{try{let l=!1,u=await c.retrieve(r,{...n,signal:s,validateFn:async d=>{await o(d),l=!0}});return l||await o(u),u}catch(l){throw n.log.error("could not retrieve verified block for %c",r,l),l}}))}finally{i.abort(),s.clear()}}var Ti=class extends me{intialPeerSearchComplete;requests;name;log;logger;minProviders;maxProviders;providers;evictionFilter;constructor(e,t){super(),this.name=t.name,this.logger=e.logger,this.log=e.logger.forComponent(this.name),this.requests=new Map,this.minProviders=t.minProviders??1,this.maxProviders=t.maxProviders??5,this.providers=[],this.evictionFilter=or(this.maxProviders)}async retrieve(e,t={}){let n=it.encode(e.multihash.bytes),o=this.requests.get(n);if(o!=null)return this.log("join existing request for %c",e),o;let i=J();if(this.requests.set(n,i.promise),this.providers.length===0){let l=!1;this.intialPeerSearchComplete==null&&(l=!0,this.log=this.logger.forComponent(`${this.name}:${e}`),this.intialPeerSearchComplete=this.findProviders(e,this.minProviders,t)),await this.intialPeerSearchComplete,l&&this.log("found initial session peers for %c",e)}let s=!1,a=new Ht({concurrency:this.maxProviders});a.addEventListener("error",()=>{}),a.addEventListener("failure",l=>{this.log.error("error querying provider %o, evicting from session",l.detail.job.options.provider,l.detail.error),this.evict(l.detail.job.options.provider)}),a.addEventListener("success",l=>{s=!0,i.resolve(l.detail.result)}),a.addEventListener("idle",()=>{s||t.signal?.aborted===!0||Promise.resolve().then(async()=>{this.log("no session peers had block for for %c, finding new providers",e);for(let l=0;l<this.minProviders&&this.providers.length!==0;l++){let u=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(u)}await this.findProviders(e,this.minProviders,t),this.log("found new providers re-retrieving %c",e),this.requests.delete(n),i.resolve(await this.retrieve(e,t))}).catch(l=>{this.log.error("could not find new providers for %c",e,l),i.reject(l)})});let c=l=>{a.add(async()=>this.queryProvider(e,l.detail,t),{provider:l.detail}).catch(u=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,u)})};this.addEventListener("provider",c),Promise.all([...this.providers].map(async l=>a.add(async()=>this.queryProvider(e,l,t),{provider:l}))).catch(l=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,l)});try{return await i.promise}finally{this.removeEventListener("provider",c),a.clear(),this.requests.delete(n)}}evict(e){this.evictionFilter.add(this.toEvictionKey(e));let t=this.providers.findIndex(n=>this.equals(n,e));t!==-1&&this.providers.splice(t,1)}isEvicted(e){return this.evictionFilter.has(this.toEvictionKey(e))}hasProvider(e){return!!(this.providers.find(t=>this.equals(t,e))!=null||this.isEvicted(e))}async findProviders(e,t,n){let o=J(),i=0;return Promise.resolve().then(async()=>{this.log("finding %d-%d new provider(s) for %c",t,this.maxProviders,e);for await(let s of this.findNewProviders(e,n)){if(i===this.maxProviders||n.signal?.aborted===!0)break;if(!this.hasProvider(s)&&(this.log("found %d/%d new providers",i,this.maxProviders),this.providers.push(s),this.safeDispatchEvent("provider",{detail:s}),i++,i===t&&(this.log("session is ready"),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",i);break}}if(this.log("found %d/%d new session peers",i,this.maxProviders),i<t)throw new xc(`Found ${i} of ${t} ${this.name} providers for ${e}`)}).catch(s=>{this.log.error("error searching routing for potential session peers for %c",e,s.errors??s),o.reject(s)}),o.promise}};var Md=class{blockstore;datastore;pins;logger;routing;getCodec;getHasher;dns;metrics;log;constructor(e){this.logger=e.logger??Po(),this.log=this.logger.forComponent("helia"),this.getHasher=t7(e.hashers,e.loadHasher),this.getCodec=e7(e.codecs,e.loadCodec),this.dns=e.dns??ud(),this.metrics=e.metrics;let t={blockstore:e.blockstore,datastore:e.datastore,logger:this.logger,blockBrokers:[],getHasher:this.getHasher,getCodec:this.getCodec,dns:this.dns,metrics:this.metrics,...e.components??{}};this.routing=t.routing=new Cd(t,{routers:(e.routers??[]).flatMap(o=>{let i=[o];return o[hn]!=null&&i.push(o[hn]),o[pn]!=null&&i.push(o[pn]),i}),providerLookupConcurrency:e.providerLookupConcurrency});let n=new Od(t);this.pins=new _d(e.datastore,n,this.getCodec),this.blockstore=new kd(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(o=>o(t))}async start(){await U5(this.datastore),await yt(this.blockstore,this.datastore,this.routing)}async stop(){await Rt(this.blockstore,this.datastore,this.routing)}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,o=this.blockstore.unwrap();this.log("gc start"),await Lt(o.deleteMany(async function*(){for await(let{cid:i}of o.getAll())try{if(await n.pins.isPinned(i,e))continue;yield i,e.onProgress?.(new W("helia:gc:deleted",i))}catch(s){n.log.error("Error during gc",s),e.onProgress?.(new W("helia:gc:error",s))}}()))}finally{t()}this.log("gc finished")}};var Yp=class extends Ti{wantList;network;constructor(e,t){super(e,{...t,name:"helia:bitswap:session"}),this.wantList=e.wantList,this.network=e.network}async queryProvider(e,t,n){this.log("sending WANT-BLOCK for %c to %p",e,t);let o=await this.wantList.wantSessionBlock(e,t,n);if(this.log("%p %s %c",t,o.has?"has":"does not have",e),o.has&&o.block!=null)return o.block;throw new Error("Provider did not have block")}async*findNewProviders(e,t={}){for await(let n of this.network.findProviders(e,t))yield n.id}toEvictionKey(e){return e.toMultihash().bytes}equals(e,t){return e.equals(t)}};function o7(r,e){return new Yp(r,e)}var Ud=class{blocksReceived;duplicateBlocksReceived;dataReceived;duplicateDataReceived;constructor(e){this.blocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_received_blocks"),this.duplicateBlocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_received_blocks"),this.dataReceived=e.metrics?.registerMetricGroup("helia_bitswap_data_received_bytes"),this.duplicateDataReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_data_received_bytes")}updateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.blocksReceived?.increment(n)}updateDuplicateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateBlocksReceived?.increment(n)}updateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.dataReceived?.increment(n)}updateDuplicateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateDataReceived?.increment(n)}};var Xp=class extends Map{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function Fd(r){let{name:e,metrics:t}=r,n;return t!=null?n=new Xp({name:e,metrics:t}):n=new Map,n}function iT(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=bt(r);e.push(t),r=r.slice(ue(t))}return e}var i7=iT;var Vd=class extends me{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),this.peers=uc({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=Fd({name:"helia_bitswap_wantlist",metrics:e.metrics}),this.network=e.network,this.sendMessagesDelay=t.sendMessagesDelay??10,this.log=e.logger.forComponent("helia:bitswap:wantlist"),this.hashLoader=t.hashLoader,this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:connected",n=>{this.peerConnected(n.detail).catch(o=>{this.log.error("error processing newly connected bitswap peer %p",n.detail,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}async addEntry(e,t){let n=U(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,priority:t.priority??1,wantType:t.wantType??tt.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,o)),o.wantType===tt.WantHave&&t.wantType===tt.WantBlock&&(o.wantType=tt.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===tt.WantBlock?(await dt(this,"block",t?.signal,{filter:a=>ne(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await dt(this,"presence",t?.signal,{filter:s=>ne(e.multihash.digest,s.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail}finally{t.signal?.aborted===!0&&(this.log("want for %c was aborted, cancelling want",e),o.cancel=!0,await this.sendMessagesDebounced())}}async sendMessagesDebounced(){await this.sendingMessages?.promise,clearTimeout(this.sendMessagesTimeout),this.sendMessagesTimeout=setTimeout(()=>{this.sendMessages().catch(e=>{this.log("error sending messages to peers",e)})},this.sendMessagesDelay)}async sendMessages(){this.sendingMessages=J(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o=new Yn;for(let[i,s]of this.wants.entries())t.has(i)||s.cancel||(n.add(i),o.addWantlistEntry(s.cid,{cid:s.cid.bytes,priority:s.priority,wantType:s.wantType,cancel:s.cancel,sendDontHave:s.sendDontHave}));if(o.wantlist.size!==0)try{await this.network.sendMessage(e,o);for(let i of n)t.add(i)}catch(i){this.log.error("error sending full wantlist to new peer",i)}})).catch(e=>{this.log.error("error sending messages",e)});for(let[e,t]of this.wants)if(t.cancel){this.wants.delete(e);for(let n of this.peers.values())n.delete(e)}this.sendingMessages.resolve()}has(e){let t=U(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let o=new Yn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:tt.WantHave,priority:1}),await this.network.sendMessage(t,o),(await dt(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&ne(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:tt.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new Yn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:tt.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await dt(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&ne(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=U(e.multihash.bytes,"base64"),o=this.wants.get(n);o!=null&&(o.cancel=!0,await this.sendMessagesDebounced())}async receiveMessage(e,t){this.log("received message from %p with %d blocks",e,t.blocks.length);let n=!1;for(let o of t.blocks){if(o.prefix==null||o.data==null)continue;let i=i7(o.prefix),s=i[0],a=i[1],c=i[2],l=c===Qe.code?Qe:await this.hashLoader?.getHasher(c);if(l==null){this.log.error("unknown hash algorithm",c);continue}let u=l.digest(o.data);u.then!=null&&(u=await u);let d=X.create(s===0?0:1,a,u);this.log("received block from %p for %c",e,d),this.safeDispatchEvent("block",{detail:{sender:e,cid:d,block:o.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:d,has:!0,block:o.data}});let f=U(d.multihash.bytes,"base64"),h=this.wants.get(f);h!=null&&(h.cancel=!0,n=!0)}for(let{cid:o,type:i}of t.blockPresences){let s=X.decode(o);this.log("received %s from %p for %c",i,e,s),this.safeDispatchEvent("presence",{detail:{sender:e,cid:s,has:i===Ar.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new Yn(!0);for(let[o,i]of this.wants.entries())i.cancel||(t.add(o),n.addWantlistEntry(i.cid,{cid:i.cid.bytes,priority:1,wantType:tt.WantBlock,cancel:!1,sendDontHave:!1}));if(n.wantlist.size===0){this.peers.set(e,t);return}try{await this.network.sendMessage(e,n),this.peers.set(e,t)}catch(o){this.log.error("error sending full wantlist to new peer %p",e,o)}}peerDisconnected(e){this.peers.delete(e)}start(){}stop(){this.peers.clear(),clearTimeout(this.sendMessagesTimeout)}};var $d=class{log;logger;stats;network;blockstore;peerWantLists;wantList;constructor(e,t={}){this.logger=e.logger,this.log=e.logger.forComponent("helia:bitswap"),this.blockstore=e.blockstore,this.stats=new Ud(e),this.network=new ql(e,t),this.peerWantLists=new rd({...e,network:this.network},t),this.wantList=new Vd({...e,network:this.network},t)}createSession(e={}){return o7({wantList:this.wantList,network:this.network,logger:this.logger},e)}async want(e,t={}){let n=new AbortController,o=le([n.signal,t.signal]);n.signal,this.network.findAndConnect(e,{...t,signal:o}).catch(i=>{n.signal.aborted||this.log.error("error during finding and connect for cid %c",e,i)});try{return(await this.wantList.wantBlock(e,{...t,signal:o})).block}finally{n.abort(),o.clear()}}async notify(e,t,n={}){await Promise.all([this.peerWantLists.receivedBlock(e,n),this.wantList.receivedBlock(e,n)])}getWantlist(){return[...this.wantList.wants.values()].filter(e=>!e.cancel).map(e=>({cid:e.cid,priority:e.priority,wantType:e.wantType}))}getPeerWantlist(e){return this.peerWantLists.wantListForPeer(e)}async start(){this.wantList.start(),await this.network.start()}async stop(){this.wantList.stop(),await this.network.stop()}};var s7=(r,e={})=>new $d(r,e);var jp=class{bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=s7(e,{hashLoader:{getHasher:async o=>n(o)},...t}),this.started=!1}isStarted(){return this.started}async start(){await this.bitswap.start(),this.started=!0}async stop(){await this.bitswap.stop(),this.started=!1}async announce(e,t,n){await this.bitswap.notify(e,t,n)}async retrieve(e,t={}){return this.bitswap.want(e,t)}createSession(e){let t=this.bitswap.createSession(e);return{announce:async(n,o,i)=>{await this.bitswap.notify(n,o,i)},retrieve:async(n,o)=>t.retrieve(n,o)}}};function Zp(r={}){return e=>new jp(e,r)}var Kd=class{index=0;input="";new(e){return this.index=0,this.input=e,this}readAtomically(e){let t=this.index,n=e();return n===void 0&&(this.index=t),n}parseWith(e){let t=e();if(this.index===this.input.length)return t}peekChar(){if(!(this.index>=this.input.length))return this.input[this.index]}readChar(){if(!(this.index>=this.input.length))return this.input[this.index++]}readGivenChar(e){return this.readAtomically(()=>{let t=this.readChar();if(t===e)return t})}readSeparator(e,t,n){return this.readAtomically(()=>{if(!(t>0&&this.readGivenChar(e)===void 0))return n()})}readNumber(e,t,n,o){return this.readAtomically(()=>{let i=0,s=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*o)-1;for(;;){let u=this.readAtomically(()=>{let d=this.readChar();if(d===void 0)return;let f=Number.parseInt(d,e);if(!Number.isNaN(f))return f});if(u===void 0)break;if(i*=e,i+=u,i>l||(s+=1,t!==void 0&&s>t))return}if(s!==0)return!n&&c&&s>1?void 0:i})}readIPv4Addr(){return this.readAtomically(()=>{let e=new Uint8Array(4);for(let t=0;t<e.length;t++){let n=this.readSeparator(".",t,()=>this.readNumber(10,3,!1,1));if(n===void 0)return;e[t]=n}return e})}readIPv6Addr(){let e=t=>{for(let n=0;n<t.length/2;n++){let o=n*2;if(n<t.length-3){let s=this.readSeparator(":",n,()=>this.readIPv4Addr());if(s!==void 0)return t[o]=s[0],t[o+1]=s[1],t[o+2]=s[2],t[o+3]=s[3],[o+4,!0]}let i=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(i===void 0)return[o,!1];t[o]=i>>8,t[o+1]=i&255}return[t.length,!1]};return this.readAtomically(()=>{let t=new Uint8Array(16),[n,o]=e(t);if(n===16)return t;if(o||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let i=new Uint8Array(14),s=16-(n+2),[a]=e(i.subarray(0,s));return t.set(i.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var a7=45,sT=15,Fs=new Kd;function Hd(r){if(!(r.length>sT))return Fs.new(r).parseWith(()=>Fs.readIPv4Addr())}function qd(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>a7))return Fs.new(r).parseWith(()=>Fs.readIPv6Addr())}function _i(r,e=!1){if(r.includes("%")&&(r=r.split("%")[0]),r.length>a7)return;let t=Fs.new(r).parseWith(()=>Fs.readIPAddr());if(t)return e&&t.length===4?Uint8Array.from([0,0,0,0,0,0,0,0,0,0,255,255,t[0],t[1],t[2],t[3]]):t}function rn(r){return!!Hd(r)}function Vs(r){return!!qd(r)}function zd(r){return!!_i(r)}var l7=Ur(c7(),1),aT=["0.0.0.0/8","10.0.0.0/8","100.64.0.0/10","127.0.0.0/8","169.254.0.0/16","172.16.0.0/12","192.0.0.0/24","192.0.0.0/29","192.0.0.8/32","192.0.0.9/32","192.0.0.10/32","192.0.0.170/32","192.0.0.171/32","192.0.2.0/24","192.31.196.0/24","192.52.193.0/24","192.88.99.0/24","192.168.0.0/16","192.175.48.0/24","198.18.0.0/15","198.51.100.0/24","203.0.113.0/24","240.0.0.0/4","255.255.255.255/32"],cT=aT.map(r=>new l7.Netmask(r));function Jp(r){for(let e of cT)if(e.contains(r))return!0;return!1}function lT(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function uT(r){let e=r.split(":");if(e.length<2)return!1;let t=e[e.length-1].padStart(4,"0"),n=e[e.length-2].padStart(4,"0"),o=`${parseInt(n.substring(0,2),16)}.${parseInt(n.substring(2),16)}.${parseInt(t.substring(0,2),16)}.${parseInt(t.substring(2),16)}`;return Jp(o)}function dT(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function fT(r){let e=r.split(":"),t=e[e.length-1];return Jp(t)}function hT(r){return/^::$/.test(r)||/^::1$/.test(r)||/^64:ff9b::([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)||/^100::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:2[0-9a-fA-F]:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:db8:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2002:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^f[c-d]([0-9a-fA-F]{2,2}):/i.test(r)||/^fe[8-9a-bA-B][0-9a-fA-F]:/i.test(r)||/^ff([0-9a-fA-F]{2,2}):/i.test(r)}function Yt(r){return rn(r)?Jp(r):lT(r)?uT(r):dT(r)?fT(r):Vs(r)?hT(r):void 0}var pT=r=>r.toString().split("/").slice(1),$s=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),pe=r=>({match:e=>$s(t=>t===r).match(e),pattern:r}),Ci=()=>({match:r=>$s(e=>typeof e=="string").match(r),pattern:"{string}"}),Ic=()=>({match:r=>$s(e=>!isNaN(parseInt(e))).match(r),pattern:"{number}"}),ke=()=>({match:r=>{if(r.length<2||r[0]!=="p2p"&&r[0]!=="ipfs")return!1;if(r[1].startsWith("Q")||r[1].startsWith("1"))try{ve.decode(`z${r[1]}`)}catch{return!1}else return!1;return r.slice(2)},pattern:"/p2p/{peerid}"}),Tc=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{Ta.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),Te=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),Vt=(...r)=>({match:e=>{let t;for(let n of r){let o=n.match(e);o!==!1&&(t==null||o.length<t.length)&&(t=o)}return t??!1},pattern:`or(${r.map(e=>e.pattern).join(", ")})`}),ge=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e},pattern:`and(${r.map(e=>e.pattern).join(", ")})`});function Pe(...r){function e(o){let i=pT(o);for(let s of r){let a=s.match(i);if(a===!1)return!1;i=a}return i}function t(o){return e(o)!==!1}function n(o){let i=e(o);return i===!1?!1:i.length===0}return{matchers:r,matches:t,exactMatch:n}}var Gd=ge(pe("dns4"),Ci()),Qd=ge(pe("dns6"),Ci()),Yd=ge(pe("dnsaddr"),Ci()),tm=ge(pe("dns"),Ci()),BH=Pe(Gd,Te(ke())),OH=Pe(Qd,Te(ke())),MH=Pe(Yd,Te(ke())),_c=Pe(Vt(tm,Yd,Gd,Qd),Te(ke())),u7=ge(pe("ip4"),$s(rn)),d7=ge(pe("ip6"),$s(Vs)),rm=Vt(u7,d7),eo=Vt(rm,tm,Gd,Qd,Yd),f7=Pe(Vt(rm,ge(Vt(tm,Yd,Gd,Qd),Te(ke())))),UH=Pe(u7),FH=Pe(d7),h7=Pe(rm),nm=ge(eo,pe("tcp"),Ic()),Cc=ge(eo,pe("udp"),Ic()),ki=Pe(ge(nm,Te(ke()))),VH=Pe(Cc),om=ge(Cc,pe("quic"),Te(ke())),Xd=ge(Cc,pe("quic-v1"),Te(ke())),mT=Vt(om,Xd),$H=Pe(om),p7=Pe(Xd),em=Vt(eo,nm,Cc,om,Xd),m7=Vt(ge(em,pe("ws"),Te(ke()))),to=Pe(m7),g7=Vt(ge(em,pe("wss"),Te(ke())),ge(em,pe("tls"),Te(ge(pe("sni"),Ci())),pe("ws"),Te(ke()))),Pi=Pe(g7),y7=ge(Cc,pe("webrtc-direct"),Te(Tc()),Te(Tc()),Te(ke())),kc=Pe(y7),w7=ge(Xd,pe("webtransport"),Te(Tc()),Te(Tc()),Te(ke())),im=Pe(w7),Wd=Vt(m7,g7,ge(nm,Te(ke())),ge(mT,Te(ke())),ge(eo,Te(ke())),y7,w7,ke()),jd=Pe(Wd),gT=ge(Wd,pe("p2p-circuit"),ke()),sr=Pe(gT),yT=Vt(ge(Wd,pe("p2p-circuit"),pe("webrtc"),Te(ke())),ge(Wd,pe("webrtc"),Te(ke())),ge(pe("webrtc"),Te(ke()))),Pc=Pe(yT),wT=Vt(ge(eo,pe("tcp"),Ic(),pe("http"),Te(ke())),ge(eo,pe("http"),Te(ke()))),b7=Pe(wT),bT=Vt(ge(eo,pe("tcp"),Vt(ge(pe("443"),pe("http")),ge(Ic(),pe("https"))),Te(ke())),ge(eo,pe("tls"),pe("http"),Te(ke())),ge(eo,pe("https"),Te(ke()))),x7=Pe(bT),xT=Vt(ge(pe("memory"),Ci(),Te(ke()))),KH=Pe(xT);function v7(r,e,t){let n=0;for(let o of r)if(!(n<e)){if(n>t)break;if(o!==255)return!1;n++}return!0}function E7(r,e,t,n){let o=0;for(let i of r)if(!(o<t)){if(o>n)break;if(i!==e[o])return!1;o++}return!0}function sm(r){switch(r.length){case Ri:return r.join(".");case Di:{let e=[];for(let t=0;t<r.length;t++)t%2===0&&e.push(r[t].toString(16).padStart(2,"0")+r[t+1].toString(16).padStart(2,"0"));return e.join(":")}default:throw new Error("Invalid ip length")}}function S7(r){let e=0;for(let[t,n]of r.entries()){if(n===255){e+=8;continue}for(;n&128;)e++,n=n<<1;if(n&128)return-1;for(let o=t+1;o<r.length;o++)if(r[o]!=0)return-1;break}return e}function A7(r){let e="0x";for(let t of r)e+=(t>>4).toString(16)+(t&15).toString(16);return e}var Ri=4,Di=16,QH=parseInt("0xFFFF",16),vT=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function Rc(r,e){e.length===Di&&r.length===Ri&&v7(e,0,11)&&(e=e.slice(12)),e.length===Ri&&r.length===Di&&E7(r,vT,0,11)&&(r=r.slice(12));let t=r.length;if(t!=e.length)throw new Error("Failed to mask ip");let n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=r[o]&e[o];return n}function I7(r,e){if(typeof e=="string"&&(e=_i(e)),e==null)throw new Error("Invalid ip");if(e.length!==r.network.length)return!1;for(let t=0;t<e.length;t++)if((r.network[t]&r.mask[t])!==(e[t]&r.mask[t]))return!1;return!0}function am(r){let[e,t]=r.split("/");if(!e||!t)throw new Error("Failed to parse given CIDR: "+r);let n=Ri,o=Hd(e);if(o==null&&(n=Di,o=qd(e),o==null))throw new Error("Failed to parse given CIDR: "+r);let i=parseInt(t,10);if(Number.isNaN(i)||String(i).length!==t.length||i<0||i>n*8)throw new Error("Failed to parse given CIDR: "+r);let s=cm(i,8*n);return{network:Rc(o,s),mask:s}}function cm(r,e){if(e!==8*Ri&&e!==8*Di)throw new Error("Invalid CIDR mask");if(r<0||r>e)throw new Error("Invalid CIDR mask");let t=e/8,n=new Uint8Array(t);for(let o=0;o<t;o++){if(r>=8){n[o]=255,r-=8;continue}n[o]=255-(255>>r),r=0}return n}var Li=class{constructor(e,t){if(t==null)({network:this.network,mask:this.mask}=am(e));else{let n=_i(e);if(n==null)throw new Error("Failed to parse network");t=String(t);let o=parseInt(t,10);if(Number.isNaN(o)||String(o).length!==t.length||o<0||o>n.length*8){let i=_i(t);if(i==null)throw new Error("Failed to parse mask");this.mask=i}else this.mask=cm(o,8*n.length);this.network=Rc(n,this.mask)}}contains(e){return I7({network:this.network,mask:this.mask},e)}toString(){let e=S7(this.mask),t=e!==-1?String(e):A7(this.mask);return sm(this.network)+"/"+t}};function T7(r,e){return new Li(r).contains(e)}var _7=rn,ET=Vs,lm=function(r){let e=0;if(r=r.toString().trim(),_7(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(ET(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let i=_7(t[n]),s;i&&(s=lm(t[n]),t[n]=U(s.slice(0,2),"base16")),s!=null&&++n<8&&t.splice(n,0,U(s.slice(2,4),"base16"))}if(t[0]==="")for(;t.length<8;)t.unshift("0");else if(t[t.length-1]==="")for(;t.length<8;)t.push("0");else if(t.length<8){for(n=0;n<t.length&&t[n]!=="";n++);let i=[n,1];for(n=9-t.length;n>0;n--)i.push("0");t.splice.apply(t,i)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){let i=parseInt(t[n],16);o[e++]=i>>8&255,o[e++]=i&255}return o}throw new Error("invalid ip address")},C7=function(r,e=0,t){e=~~e,t=t??r.length-e;let n=new DataView(r.buffer);if(t===4){let o=[];for(let i=0;i<t;i++)o.push(r[e+i]);return o.join(".")}if(t===16){let o=[];for(let i=0;i<t;i+=2)o.push(n.getUint16(e+i).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var Ks={},um={},AT=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,-1,"ip6zone"],[43,8,"ipcidr"],[53,-1,"dns",!0],[54,-1,"dns4",!0],[55,-1,"dns6",!0],[56,-1,"dnsaddr",!0],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[280,0,"webrtc-direct"],[281,0,"webrtc"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,-1,"unix",!1,!0],[421,-1,"ipfs"],[421,-1,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,-1,"garlic64"],[448,0,"tls"],[449,-1,"sni"],[460,0,"quic"],[461,0,"quic-v1"],[465,0,"webtransport"],[466,-1,"certhash"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"],[481,-1,"http-path"],[777,-1,"memory"]];AT.forEach(r=>{let e=IT(...r);um[e.code]=e,Ks[e.name]=e});function IT(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function Z(r){if(typeof r=="number"){if(um[r]!=null)return um[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(Ks[r]!=null)return Ks[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var TT=Z("ip4"),_T=Z("ip6"),CT=Z("ipcidr");function pm(r,e){switch(Z(r).code){case 4:case 41:return PT(e);case 42:return hm(e);case 43:return U(e,"base10");case 6:case 273:case 33:case 132:return R7(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return hm(e);case 421:return NT(e);case 444:return P7(e);case 445:return P7(e);case 466:return LT(e);case 481:return globalThis.encodeURIComponent(hm(e));default:return U(e,"base16")}}function mm(r,e){switch(Z(r).code){case 4:return k7(e);case 41:return k7(e);case 42:return fm(e);case 43:return N(e,"base10");case 6:case 273:case 33:case 132:return ym(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return fm(e);case 421:return RT(e);case 444:return BT(e);case 445:return OT(e);case 466:return DT(e);case 481:return fm(globalThis.decodeURIComponent(e));default:return N(e,"base16")}}function gm(r){let e,t;if(r.stringTuples().forEach(([n,o])=>{(n===TT.code||n===_T.code)&&(t=o),n===CT.code&&(e=o)}),e==null||t==null)throw new Error("Invalid multiaddr");return new Li(t,e)}var dm=Object.values(ii).map(r=>r.decoder),kT=function(){let r=dm[0].or(dm[1]);return dm.slice(2).forEach(e=>r=r.or(e)),r}();function k7(r){if(!zd(r))throw new Error("invalid ip address");return lm(r)}function PT(r){let e=C7(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!zd(e))throw new Error("invalid ip address");return e}function ym(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function R7(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function fm(r){let e=N(r),t=Uint8Array.from(Re(e.length));return Ce([t,e],t.length+e.length)}function hm(r){let e=bt(r);if(r=r.slice(ue(e)),r.length!==e)throw new Error("inconsistent lengths");return U(r)}function RT(r){let e;r[0]==="Q"||r[0]==="1"?e=Ae(ve.decode(`z${r}`)).bytes:e=X.parse(r).multihash.bytes;let t=Uint8Array.from(Re(e.length));return Ce([t,e],t.length+e.length)}function DT(r){let e=kT.decode(r),t=Uint8Array.from(Re(e.length));return Ce([t,e],t.length+e.length)}function LT(r){let e=bt(r),t=r.slice(ue(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+U(t,"base64url")}function NT(r){let e=bt(r),t=r.slice(ue(e));if(t.length!==e)throw new Error("inconsistent lengths");return U(t,"base58btc")}function BT(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==16)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion address.`);let t=ct.decode("b"+e[0]),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=ym(n);return Ce([t,o],t.length+o.length)}function OT(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==56)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion3 address.`);let t=ct.decode(`b${e[0]}`),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=ym(n);return Ce([t,o],t.length+o.length)}function P7(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=U(e,"base32"),o=R7(t);return`${n}:${o}`}function D7(r){r=wm(r);let e=[],t=[],n=null,o=r.split("/").slice(1);if(o.length===1&&o[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let i=0;i<o.length;i++){let s=o[i],a=Z(s);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(i++,i>=o.length)throw new Zd("invalid address: "+r);if(a.path===!0){n=wm(o.slice(i).join("/")),e.push([a.code,mm(a.code,n)]),t.push([a.code,n]);break}let c=mm(a.code,o[i]);e.push([a.code,c]),t.push([a.code,pm(a.code,c)])}return{string:L7(t),bytes:xm(e),tuples:e,stringTuples:t,path:n}}function bm(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let i=bt(r,o),s=ue(i),a=Z(i),c=MT(a,r.slice(o+s));if(c===0){e.push([i]),t.push([i]),o+=s;continue}let l=r.slice(o+s,o+s+c);if(o+=c+s,o>r.length)throw new Zd("Invalid address Uint8Array: "+U(r,"base16"));e.push([i,l]);let u=pm(i,l);if(t.push([i,u]),a.path===!0){n=u;break}}return{bytes:Uint8Array.from(r),string:L7(t),tuples:e,stringTuples:t,path:n}}function L7(r){let e=[];return r.map(t=>{let n=Z(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),wm(e.join("/"))}function xm(r){return Ce(r.map(e=>{let t=Z(e[0]),n=Uint8Array.from(Re(t.code));return e.length>1&&e[1]!=null&&(n=Ce([n,e[1]])),n}))}function MT(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=bt(e instanceof Uint8Array?e:Uint8Array.from(e));return t+ue(t)}}function wm(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}var Zd=class extends Error{static name="ParseError";name="ParseError";constructor(e){super(`Error parsing address: ${e}`)}};var UT=Symbol.for("nodejs.util.inspect.custom"),Em=Symbol.for("@multiformats/js-multiaddr/multiaddr"),FT=[Z("dns").code,Z("dns4").code,Z("dns6").code,Z("dnsaddr").code],vm=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},Jd=class r{bytes;#e;#t;#r;#o;[Em]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=bm(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=D7(e)}else if(Mo(e))t=bm(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=t.bytes,this.#e=t.string,this.#t=t.tuples,this.#r=t.stringTuples,this.#o=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,o,i="",s=Z("tcp"),a=Z("udp"),c=Z("ip4"),l=Z("ip6"),u=Z("dns6"),d=Z("ip6zone");for(let[h,p]of this.stringTuples())h===d.code&&(i=`%${p??""}`),FT.includes(h)&&(t=s.name==="tcp"?"tcp":"udp",o=443,n=`${p??""}${i}`,e=h===u.code?6:4),(h===s.code||h===a.code)&&(t=Z(h).name==="tcp"?"tcp":"udp",o=parseInt(p??"")),(h===c.code||h===l.code)&&(t=Z(h).name==="tcp"?"tcp":"udp",n=`${p??""}${i}`,e=h===l.code?6:4);if(e==null||t==null||n==null||o==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:e,host:n,transport:t,port:o}}protos(){return this.#t.map(([e])=>Object.assign({},Z(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>Z(e).name)}tuples(){return this.#t.map(([e,t])=>t==null?[e]:[e,t])}stringTuples(){return this.#r.map(([e,t])=>t==null?[e]:[e,t])}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,o))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(xm(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===Ks.p2p.code&&e.push([n,o]),n===Ks["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?U(ve.decode(`z${n}`),"base58btc"):U(X.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#o}equals(e){return ne(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(i=>i.resolvable);if(t==null)return[this];let n=Hs.get(t.name);if(n==null)throw new vm(`no available resolver for ${t.name}`);return(await n(this,e)).map(i=>$(i))}nodeAddress(){let e=this.toOptions();if(e.transport!=="tcp"&&e.transport!=="udp")throw new Error(`multiaddr must have a valid format - no protocol with name: "${e.transport}". Must have a valid transport protocol: "{tcp, udp}"`);return{family:e.family,address:e.host,port:e.port}}isThinWaistAddress(e){let t=(e??this).protos();return!(t.length!==2||t[0].code!==4&&t[0].code!==41||t[1].code!==6&&t[1].code!==273)}[UT](){return`Multiaddr(${this.#e})`}};var Hs=new Map;function Mo(r){return!!r?.[Em]}function $(r){return new Jd(r)}var VT=[Z("tcp").code,Z("dns").code,Z("dnsaddr").code,Z("dns4").code,Z("dns6").code];function N7(r){return M7("sni",r)?.[1]}function B7(r){let e=M7("tcp",r)?.[1];return e==null?"":`:${e}`}function M7(r,e){let t;try{t=Z(r).code}catch{return}for(let[n,o]of e)if(n===t&&o!=null)return[n,o]}function O7(r){return r.some(([e,t])=>e===Z("tls").code)}function nn(r,e,t){let n=U7[Z(r).name];if(n==null)throw new Error(`Can't interpret protocol ${Z(r).name}`);let o=n(e,t);return r===Z("ip6").code?`[${o}]`:o}var U7={ip4:(r,e)=>r,ip6:(r,e)=>e.length===0?r:`[${r}]`,tcp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`tcp://${nn(t[0],t[1]??"",e)}:${r}`},udp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`udp://${nn(t[0],t[1]??"",e)}:${r}`},dnsaddr:(r,e)=>r,dns4:(r,e)=>r,dns6:(r,e)=>r,dns:(r,e)=>r,ipfs:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${nn(t[0],t[1]??"",e)}`},p2p:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${nn(t[0],t[1]??"",e)}`},http:(r,e)=>{let t=O7(e),n=N7(e),o=B7(e);if(t&&n!=null)return`https://${n}${o}`;let i=t?"https://":"http://",s=e.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let a=nn(s[0],s[1]??"",e);return a=a.replace("tcp://",""),`${i}${a}`},"http-path":(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=nn(t[0],t[1]??"",e),o=decodeURIComponent(r);return`${n}/${o}`},tls:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return nn(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return nn(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=nn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=O7(e),n=N7(e),o=B7(e);if(t&&n!=null)return`wss://${n}${o}`;let i=t?"wss://":"ws://",s=e.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let a=nn(s[0],s[1]??"",e);return a=a.replace("tcp://",""),`${i}${a}`},wss:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=nn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`}};function e1(r,e){let n=$(r).stringTuples(),o=n.pop();if(o==null)throw new Error("Unexpected end of multiaddr");let i=Z(o[0]),s=U7[i.name];if(s==null)throw new Error(`No interpreter found for ${i.name}`);let a=s(o[1]??"",n);return e?.assumeHttp!==!1&&VT.includes(o[0])&&(a=a.replace(/^.*:\/\//,""),o[1]==="443"?a=`https://${a}`:a=`http://${a}`),(a.startsWith("http://")||a.startsWith("https://")||a.startsWith("ws://")||a.startsWith("wss://"))&&(a=new URL(a).toString(),a.endsWith("/")&&(a=a.substring(0,a.length-1))),a}var t1=class{url;#e=0;#t=0;#r=0;#o=0;#a=new Map;log;constructor(e,t){this.url=e instanceof URL?e:new URL(e),this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.hostname}`)}#l(e){let t=e.multihash.bytes;return it.encode(t)}async getRawBlock(e,t){let n=new URL(this.url.toString());if(n.pathname=`/ipfs/${e.toString()}`,n.search="?format=raw",t?.aborted===!0)throw new Error(`Signal to fetch raw block for CID ${e} from gateway ${this.url} was aborted prior to fetch`);let o=this.#l(e),i=new AbortController,s=()=>{i.abort()};t?.addEventListener("abort",s);try{let a=this.#a.get(o);return a==null&&(this.#e++,a=fetch(n.toString(),{signal:i.signal,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"}).then(async c=>{if(this.log("GET %s %d",n,c.status),!c.ok)throw this.#t++,new Error(`unable to fetch raw block for CID ${e} from gateway ${this.url}`);return this.#o++,new Uint8Array(await c.arrayBuffer())}),this.#a.set(o,a)),await a}catch{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}`))}finally{t?.removeEventListener("abort",s),this.#a.delete(o)}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#o/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}getStats(){return{attempts:this.#e,errors:this.#t,invalidBlocks:this.#r,successes:this.#o,pendingResponses:this.#a.size}}};function $T(r,e,t){return r.filter(n=>{if(x7.matches(n)||e&&b7.matches(n))return t||_c.matches(n)?!0:Yt(n.toOptions().host)===!1;if(!e&&t){let{host:o}=n.toOptions();if(o==="127.0.0.1"||o==="localhost"||o.endsWith(".localhost"))return!0}return!1})}async function*r1(r,e,t,n,o,i){for await(let s of e.findProviders(r,i)){let a=$T(s.multiaddrs,n,o);if(a.length===0)continue;let c=e1(a[0]);yield new t1(c,t)}}var Sm=class extends Ti{routing;allowInsecure;allowLocal;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??n1,this.allowLocal=t.allowLocal??o1}async queryProvider(e,t,n){this.log("fetching BLOCK for %c from %s",e,t.url);let o=await t.getRawBlock(e,n.signal);return this.log.trace("got block for %c from %s",e,t.url),await n.validateFn?.(o),o}async*findNewProviders(e,t={}){yield*r1(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,t)}toEvictionKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}};function F7(r,e){return new Sm(r,e)}var i1=class{allowInsecure;allowLocal;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??n1,this.allowLocal=t.allowLocal??o1}async retrieve(e,t={}){let n=[];for await(let o of r1(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,t)){this.log("getting block for %c from %s",e,o.url);try{let i=await o.getRawBlock(e,t.signal);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,o.url,s);continue}return i}catch(i){if(this.log.error("failed to get block for %c from %s",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 F7({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure})}};var n1=!1,o1=!1;function Am(r={}){return e=>new i1(e,r)}async function*s1(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 GT=Ur(a1(),1);var on=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},c1=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},qs=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},l1=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},u1=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},d1=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},Dc=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var ar;(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=()=>He(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=re((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)=>ee(o,r.codec(),i)})(ar||(ar={}));var KT=pr("ipns:utils"),V7=N("/ipns/");var HT=0,qT=18;function $7(r){let e;if(r.pubKey!=null)try{e=nt(r.pubKey)}catch(t){throw KT.error(t),t}if(e!=null)return e}function K7(r){let e=N("ipns-signature:");return Ce([e,r])}function Lc(r){return"signatureV1"in r?ar.encode({value:N(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:N(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):ar.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function _n(r){let e=ar.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 on("Missing data or signatureV2");let t=H7(e.data),n=zT(t.Value),o=U(t.Validity);if(e.value!=null&&e.signatureV1!=null)return WT(e),{value:n,validityType:ar.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:ar.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 Nc(r){return Ce([V7,r.bytes])}function zs(r){let e=Ae(r.slice(V7.length));if(!f1(e,HT)&&!f1(e,qT))throw new uo("Multihash in IPNS key was not identity or sha2-256");return e}function H7(r){let e=xr(r);if(e.ValidityType===0)e.ValidityType=ar.ValidityType.EOL;else throw new qs("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 zT(r){let e=U(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${X.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${X.parse(e).toV1().toString()}`}catch{}throw new u1("Value must be a valid content path starting with /")}function WT(r){if(r.data==null)throw new d1("Record data is missing");let e=H7(r.data);if(!ne(e.Value,r.value??new Uint8Array(0)))throw new on('Field "value" did not match between protobuf and CBOR');if(!ne(e.Validity,r.validity??new Uint8Array(0)))throw new on('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new on('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new on('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new on('Field "ttl" did not match between protobuf and CBOR')}function f1(r,e){return r.code===e}var Oz=pr("ipns"),Mz=60*60*1e9,QT="/ipns/",Uz=QT.length;var q7=Ur(a1(),1);var h1=pr("ipns:validator"),YT=1024*10,XT=async(r,e)=>{let t=_n(e),n;try{let o=K7(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw h1.error("record signature verification failed"),new on("Record signature verification failed");if(t.validityType===ar.ValidityType.EOL){if(q7.default.fromString(t.validity).toDate().getTime()<Date.now())throw h1.error("record has expired"),new c1("record has expired")}else if(t.validityType!=null)throw h1.error("the validity type is unsupported"),new qs("The validity type is unsupported");h1("ipns record for %s is valid",t.value)};async function p1(r,e){if(e.byteLength>YT)throw new l1("The record is too large");let t=zs(r),n;f1(t,0)&&(n=Xu(t));let o=_n(e),i=$7(o)??n;if(i==null)throw new Dc("Could not extract public key from IPNS record or routing key");let s=Nc(i.toMultihash());if(!ne(s,r))throw new Dc("Embedded public key did not match routing key");await XT(i,e)}var m1=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MESSAGE_LENGTH"};async function*Bc(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)),os(i)&&(i=i.subarray()),o+=n.decode(i,{stream:!0}),o.length>(e?.maxMessageLength??o.length))throw new m1("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 Ws=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},sn=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function jT(r){return r[Symbol.asyncIterator]!=null}function ZT(r){if(jT(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var z7=ZT;var W7=N("/ipns/");function G7(r){return ne(r.subarray(0,W7.byteLength),W7)}var g1=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){yield*Jt(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[]}))}async provide(){}async cancelReprovide(){}async put(e,t,n){if(!G7(e))return;let o=zs(e),i=X.createV1(114,o),s=_n(t);await this.client.putIPNS(i,s,n)}async get(e,t){if(!G7(e))throw new Oe("Not found");let n=zs(e),o=X.createV1(114,n);try{let i=await this.client.getIPNS(o,t);return Lc(i)}catch(i){throw i.name==="BadResponseError"?new Oe("Not found"):i}}},y1=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await z7(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new Oe("Not found")}async*getClosestPeers(e,t={}){}};var gt=pr("delegated-routing-v1-http-api-client"),w1={concurrentRequests:4,timeout:3e4,cacheTTL:5*60*1e3,cacheName:"delegated-routing-v1-cache"},b1=class{started;httpQueue;shutDownController;clientUrl;timeout;contentRouting;peerRouting;filterAddrs;filterProtocols;inFlightRequests;cacheName;cache;cacheTTL;constructor(e,t={}){this.started=!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.httpQueue=new In({concurrency:t.concurrentRequests??w1.concurrentRequests}),this.inFlightRequests=new Map,this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??w1.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new g1(this),this.peerRouting=new y1(this),this.cacheName=t.cacheName??w1.cacheName,this.cacheTTL=t.cacheTTL??w1.cacheTTL}get[hn](){return this.contentRouting}get[pn](){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&&gt("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={}){gt("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let i=J(),s=J();this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let a=new URL(`${this.clientUrl}routing/v1/providers/${e.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==null)throw new sn("No response received");if(!l.ok)throw l.status===404?new Oe("No matching records found"):l.status===422?new Ws("Request does not conform to schema or semantic constraints"):new sn(`Unexpected status code: ${l.status}`);if(l.body==null)throw new sn("Routing response had no body");let u=l.headers.get("Content-Type");if(u==null)throw new sn("No Content-Type header received");if(u?.startsWith("application/json")){let d=await l.json();for(let f of d.Providers){let h=this.#e(f);h!=null&&(yield h)}}else if(u.includes("application/x-ndjson"))for await(let d of Bc(s1(l.body))){let f=this.#e(d);f!=null&&(yield f)}else throw new sn(`Unsupported Content-Type: ${u}`)}catch(a){gt.error("getProviders errored:",a)}finally{o.clear(),s.resolve(),gt("getProviders finished: %c",e)}}async*getPeers(e,t={}){gt("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let i=J(),s=J();this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let a=new URL(`${this.clientUrl}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)throw new Oe("No matching records found");if(l.status===422)throw new Ws("Request does not conform to schema or semantic constraints");if(l.body==null)throw new sn("Routing response had no body");if(l.headers.get("Content-Type")==="application/json"){let d=await l.json();for(let f of d.Peers){let h=this.#e(f);h!=null&&(yield h)}}else for await(let d of Bc(s1(l.body))){let f=this.#e(d);f!=null&&(yield f)}}catch(a){gt.error("getPeers errored:",a)}finally{o.clear(),s.resolve(),gt("getPeers finished: %c",e)}}async getIPNS(e,t={}){gt("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let i=J(),s=J();this.httpQueue.add(async()=>(i.resolve(),s.promise));let a=`${this.clientUrl}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(gt("getIPNS GET %s %d",a,l.status),l.status===404)throw new Oe("No matching records found");if(l.status===422)throw new Ws("Request does not conform to schema or semantic constraints");if(l.body==null)throw new sn("GET ipns response had no body");let u=await l.arrayBuffer(),d=new Uint8Array(u,0,u.byteLength);return t.validate!==!1&&await p1(Nc(e.multihash),d),_n(d)}catch(c){throw gt.error("getIPNS GET %s error:",a,c),c}finally{o.clear(),s.resolve(),gt("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){gt("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),i=le([this.shutDownController.signal,o,n.signal]);let s=J(),a=J();this.httpQueue.add(async()=>(s.resolve(),a.promise));let c=`${this.clientUrl}routing/v1/ipns/${e}`;try{await s.promise;let l=Lc(t),u={method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:i},d=await this.#r(c,u);if(gt("putIPNS PUT %s %d",c,d.status),d.status!==200)throw new sn("PUT ipns response had status other than 200")}catch(l){throw gt.error("putIPNS PUT %s error:",c,l.stack),l}finally{i.clear(),a.resolve(),gt("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map($)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:Ve(e.ID),Addrs:n,Protocols:t}}catch(t){gt.error("could not conform record to peer schema",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 gt("returning cached response for %s",o),c;await this.cache?.delete(e)}}let i=this.inFlightRequests.get(o);if(i!=null){let c=await i;return gt("deduplicating outgoing request for %s",o),c.clone()}let s=fetch(e,t).then(async c=>{if(this.cache!=null&&c.ok&&n==="GET"){let l=Date.now()+this.cacheTTL,u=new Headers(c.headers);u.set("x-cache-expires",l.toString());let d=new Response(c.clone().body,{status:c.status,statusText:c.statusText,headers:u});await this.cache.put(e,d)}return c}).finally(()=>{this.inFlightRequests.delete(o)});return this.inFlightRequests.set(o,s),await s}};function Q7(r,e={}){return new b1(new URL(r),e)}function Tm(){return{filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss","tls"]}}var Y7="[a-fA-F\\d:]",Uo=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${Y7})|(?<=${Y7})(?=\\s|$))`:"",an="(?: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}",at="[a-fA-F\\d]{1,4}",x1=`
8
- (?:
9
- (?:${at}:){7}(?:${at}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
10
- (?:${at}:){6}(?:${an}|:${at}|:)| // 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
11
- (?:${at}:){5}(?::${an}|(?::${at}){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4
12
- (?:${at}:){4}(?:(?::${at}){0,1}:${an}|(?::${at}){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4
13
- (?:${at}:){3}(?:(?::${at}){0,2}:${an}|(?::${at}){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4
14
- (?:${at}:){2}(?:(?::${at}){0,3}:${an}|(?::${at}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
15
- (?:${at}:){1}(?:(?::${at}){0,4}:${an}|(?::${at}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
16
- (?::(?:(?::${at}){0,5}:${an}|(?::${at}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
17
- )(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
18
- `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),JT=new RegExp(`(?:^${an}$)|(?:^${x1}$)`),e_=new RegExp(`^${an}$`),t_=new RegExp(`^${x1}$`),_m=r=>r&&r.exact?JT:new RegExp(`(?:${Uo(r)}${an}${Uo(r)})|(?:${Uo(r)}${x1}${Uo(r)})`,"g");_m.v4=r=>r&&r.exact?e_:new RegExp(`${Uo(r)}${an}${Uo(r)}`,"g");_m.v6=r=>r&&r.exact?t_:new RegExp(`${Uo(r)}${x1}${Uo(r)}`,"g");var Cm=_m;function km(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function X7(){return!1}var{toString:r_}=Object.prototype;function Pm(r){return r_.call(r)==="[object RegExp]"}var j7={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function Rm(r,e={}){if(!Pm(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(j7).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?j7[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function Dm(r,e,{timeout:t}={}){try{return km(()=>Rm(r).test(e),{timeout:t})()}catch(n){if(X7(n))return!1;throw n}}var n_=15,o_=45,Z7={timeout:400};function Lm(r){return r.length>o_?!1:Dm(Cm.v6({exact:!0}),r,Z7)}function J7(r){return r.length>n_?!1:Dm(Cm.v4({exact:!0}),r,Z7)}var e9={http:"80",https:"443",ws:"80",wss:"443"},i_=["http","https","ws","wss"];function t9(r,e){e=e??{};let t=e.defaultDnsType??"dns4",{scheme:n,hostname:o,port:i}=s_(r),a="/"+[a_(o,t),c_(i,n),l_(n)].filter(c=>!!c).reduce((c,l)=>c.concat(l),[]).join("/");return $(a)}function s_(r){let[e]=r.split(":");i_.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o}=new URL(r);if(o==null||o===""){let i=u_(e);i!=null&&(o=i),i==null&&t==="http:"&&(o="80")}return{scheme:e,hostname:n,port:o}}function a_(r,e){if(!(r==null||r==="")){if(J7(r))return["ip4",r];if(Lm(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(Lm(t))return["ip6",t]}return[e,r]}}function c_(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function l_(r){if(r.match(/^tcp$|^udp$/)==null)return[r]}function u_(r){if(!(r==null||r===""||e9[r]==null))return e9[r]}var d_=["https://trustless-gateway.link","https://4everland.io"],f_=2336;function h_(r){return r=r.toString(),{id:An(X.createV1(f_,er.digest(N(r)))),multiaddrs:[t9(r)]}}var Nm=class{gateways;constructor(e={}){this.gateways=(e.gateways??d_).map(t=>h_(t))}async*findProviders(e,t){yield*this.gateways.toSorted(()=>Math.random()>.5?1:-1).map(n=>({...n,protocols:["transport-ipfs-gateway-http"]}))}};function Bm(r={}){return new Nm(r)}var Om=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)}};function Mm(r){return new Om(r)}var Oc=class extends Jn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(ct.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(ct.encode(e.multihash.bytes));if(t==null)throw new Dr;return t}has(e){return this.data.has(ct.encode(e.multihash.bytes))}async delete(e){this.data.delete(ct.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:X.createV1(ni,Ae(ct.decode(e))),block:t}}};var EG=pr("blockstore:core:tiered");var o9="SHARDING";function m_(r){return r[Symbol.asyncIterator]!=null}function g_(r){if(m_(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 Ni=g_;function y_(r){return r[Symbol.asyncIterator]!=null}function w_(r,e){return y_(r)?async function*(){yield*(await Ni(r)).sort(e)}():function*(){yield*Ni(r).sort(e)}()}var v1=w_;var ro=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 Lt(this.putMany(e,n)),e=[],await Lt(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=tn(n,i=>i.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>tn(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>v1(o,i),n)),e.offset!=null){let o=0,i=e.offset;n=tn(n,()=>o++>=i)}return e.limit!=null&&(n=ho(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=tn(n,i=>i.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>tn(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>v1(o,i),n)),e.offset!=null){let o=e.offset,i=0;n=tn(n,()=>i++>=o)}return e.limit!=null&&(n=ho(n,e.limit)),n}};var Bi=class extends ro{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(e.toString(),t),e}get(e){let t=this.data.get(e.toString());if(t==null)throw new Dr;return t}has(e){return this.data.has(e.toString())}delete(e){this.data.delete(e.toString())}*_all(){for(let[e,t]of this.data.entries())yield{key:new Le(e),value:t}}*_allKeys(){for(let e of this.data.keys())yield new Le(e)}};var tQ=new Le(o9);var mQ=pr("datastore:core:tiered");var E1=class extends Md{libp2p;constructor(e){super({...e,components:{libp2p:e.libp2p}}),this.libp2p=e.libp2p}async start(){await super.start(),await this.libp2p.start()}async stop(){await super.stop(),await this.libp2p.stop()}};function S1(r){return r[Symbol.asyncIterator]!=null}var A1=r=>{let e=ue(r),t=Me(e);return Re(r,t),A1.bytes=e,t};A1.bytes=0;function s9(r,e){e=e??{};let t=e.lengthEncoder??A1;function*n(o){let i=t(o.byteLength);i instanceof Uint8Array?yield i:yield*i,o instanceof Uint8Array?yield o:yield*o}return S1(r)?async function*(){for await(let o of r)yield*n(o)}():function*(){for(let o of r)yield*n(o)}()}s9.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??A1;return new ce(t(r.byteLength),r)};var I1=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},T1=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},_1=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},Mc=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var b_=8,x_=1024*1024*4,Oi;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(Oi||(Oi={}));var Um=r=>{let e=bt(r);return Um.bytes=ue(e),e};Um.bytes=0;function Uc(r,e){let t=new ce,n=Oi.LENGTH,o=-1,i=e?.lengthDecoder??Um,s=e?.maxLengthLength??b_,a=e?.maxDataLength??x_;function*c(){for(;t.byteLength>0;){if(n===Oi.LENGTH)try{if(o=i(t),o<0)throw new I1("Invalid message length");if(o>a)throw new T1("Message length too long");let l=i.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=Oi.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>s)throw new _1("Message length length too long");break}throw l}if(n===Oi.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=Oi.LENGTH}}}return S1(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Mc("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Mc("Unexpected end of input")}()}Uc.fromReader=(r,e)=>{let t=1,n=async function*(){for(;;)try{let{done:i,value:s}=await r.next(t);if(i===!0)return;s!=null&&(yield s)}catch(i){if(i.code==="ERR_UNDER_READ")return{done:!0,value:null};throw i}finally{t=1}}();return Uc(n,{...e??{},onLength:i=>{t=i}})};var Fm=class{readNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.readNext=J(),this.haveNext=J()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let e=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=J(),e}async throw(e){return this.ended=!0,e!=null&&(this.haveNext.promise.catch(()=>{}),this.haveNext.reject(e)),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return await this._push(void 0),e}async push(e,t){await this._push(e,t)}async end(e,t){e!=null?await this.throw(e):await this._push(void 0,t)}async _push(e,t){if(e!=null&&this.ended)throw new Error("Cannot push value onto an ended pushable");for(;this.nextResult!=null;)await this.readNext.promise;e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=J(),await et(this.readNext.promise,t?.signal,t)}};function a9(){return new Fm}var C1=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var Vm=class extends Error{code;constructor(e,t){super(e),this.code=t}},$m=class extends Vm{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted",this.name="AbortError"}};function Mi(r,e){let t=a9();r.sink(t).catch(async s=>{await t.end(s)}),r.sink=async s=>{for await(let a of s)await t.push(a);await t.end()};let n=r.source;r.source[Symbol.iterator]!=null?n=r.source[Symbol.iterator]():r.source[Symbol.asyncIterator]!=null&&(n=r.source[Symbol.asyncIterator]());let o=new ce;return{read:async(s,a)=>{a?.signal?.throwIfAborted();let c,l=new Promise((u,d)=>{c=()=>{d(new $m("Read aborted"))},a?.signal?.addEventListener("abort",c)});try{if(s==null){let{done:d,value:f}=await Promise.race([n.next(),l]);return d===!0?new ce:f}for(;o.byteLength<s;){let{value:d,done:f}=await Promise.race([n.next(),l]);if(f===!0)throw new C1("unexpected end of input");o.append(d)}let u=o.sublist(0,s);return o.consume(s),u}finally{c!=null&&a?.signal?.removeEventListener("abort",c)}},write:async(s,a)=>{a?.signal?.throwIfAborted(),s instanceof Uint8Array?await t.push(s,a):await t.push(s.subarray(),a)},unwrap:()=>{if(o.byteLength>0){let s=r.source;r.source=async function*(){e?.yieldBytes===!1?yield o:yield*o,yield*s}()}return r}}}var k1=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},P1=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},R1=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function Cn(r,e={}){let t=Mi(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=ue(e.maxDataLength));let n=e?.lengthDecoder??bt,o=e?.lengthEncoder??Re;return{read:async s=>{let a=-1,c=new ce;for(;;){c.append(await t.read(1,s));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new k1("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new R1("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new P1("message length too long");return t.read(a,s)},write:async(s,a)=>{await t.write(new ce(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new ce(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function Km(){let r=J(),e=!1;return{sink:async t=>{if(e)throw new Error("already piped");e=!0,r.resolve(t)},source:async function*(){yield*await r.promise}()}}function c9(){let r=Km(),e=Km();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var Gs=!!globalThis.process?.env?.DUMP_SESSION_KEYS;function D1(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function Hm(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function qm(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function cr(r,...e){if(!qm(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function zm(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 l9(r,e){cr(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var no=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4)),u9=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),v_=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!v_)throw new Error("Non little-endian hardware is not supported");function E_(r){if(typeof r!="string")throw new Error(`string expected, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function L1(r){if(typeof r=="string")r=E_(r);else if(qm(r))r=N1(r);else throw new Error(`Uint8Array expected, got ${typeof r}`);return r}function d9(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function f9(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 Wm=(r,e)=>(Object.assign(e,r),e);function Gm(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}function N1(r){return Uint8Array.from(r)}function oo(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}var p9=r=>Uint8Array.from(r.split("").map(e=>e.charCodeAt(0))),S_=p9("expand 16-byte k"),A_=p9("expand 32-byte k"),I_=no(S_),m9=no(A_),yY=m9.slice();function Q(r,e){return r<<e|r>>>32-e}function Qm(r){return r.byteOffset%4===0}var B1=64,T_=16,g9=2**32-1,h9=new Uint32Array;function __(r,e,t,n,o,i,s,a){let c=o.length,l=new Uint8Array(B1),u=no(l),d=Qm(o)&&Qm(i),f=d?no(o):h9,h=d?no(i):h9;for(let p=0;p<c;s++){if(r(e,t,n,u,s,a),s>=g9)throw new Error("arx: counter overflow");let g=Math.min(B1,c-p);if(d&&g===B1){let m=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let y=0,x;y<T_;y++)x=m+y,h[x]=f[x]^u[y];p+=B1;continue}for(let m=0,y;m<g;m++)y=p+m,i[y]=o[y]^l[m];p+=g}}function Ym(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:i,rounds:s}=d9({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return D1(o),D1(s),Hm(i),Hm(t),(a,c,l,u,d=0)=>{cr(a),cr(c),cr(l);let f=l.length;if(u===void 0&&(u=new Uint8Array(f)),cr(u),D1(d),d<0||d>=g9)throw new Error("arx: counter overflow");if(u.length<f)throw new Error(`arx: output (${u.length}) is shorter than data (${f})`);let h=[],p=a.length,g,m;if(p===32)h.push(g=N1(a)),m=m9;else if(p===16&&t)g=new Uint8Array(32),g.set(a),g.set(a,16),m=I_,h.push(g);else throw new Error(`arx: invalid 32-byte key, got length=${p}`);Qm(c)||h.push(c=N1(c));let y=no(g);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(m,y,no(c.subarray(0,16)),y),c=c.subarray(16)}let x=16-o;if(x!==c.length)throw new Error(`arx: nonce must be ${x} or 16 bytes`);if(x!==12){let I=new Uint8Array(12);I.set(c,i?0:12-c.length),c=I,h.push(c)}let w=no(c);return __(r,m,y,w,l,u,d,s),oo(...h),u}}var St=(r,e)=>r[e++]&255|(r[e++]&255)<<8,Xm=class{constructor(e){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,e=L1(e),cr(e,32);let t=St(e,0),n=St(e,2),o=St(e,4),i=St(e,6),s=St(e,8),a=St(e,10),c=St(e,12),l=St(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 u=0;u<8;u++)this.pad[u]=St(e,16+2*u)}process(e,t,n=!1){let o=n?0:2048,{h:i,r:s}=this,a=s[0],c=s[1],l=s[2],u=s[3],d=s[4],f=s[5],h=s[6],p=s[7],g=s[8],m=s[9],y=St(e,t+0),x=St(e,t+2),w=St(e,t+4),I=St(e,t+6),B=St(e,t+8),D=St(e,t+10),R=St(e,t+12),S=St(e,t+14),A=i[0]+(y&8191),F=i[1]+((y>>>13|x<<3)&8191),L=i[2]+((x>>>10|w<<6)&8191),M=i[3]+((w>>>7|I<<9)&8191),K=i[4]+((I>>>4|B<<12)&8191),C=i[5]+(B>>>1&8191),P=i[6]+((B>>>14|D<<2)&8191),E=i[7]+((D>>>11|R<<5)&8191),v=i[8]+((R>>>8|S<<8)&8191),_=i[9]+(S>>>5|o),T=0,H=T+A*a+F*(5*m)+L*(5*g)+M*(5*p)+K*(5*h);T=H>>>13,H&=8191,H+=C*(5*f)+P*(5*d)+E*(5*u)+v*(5*l)+_*(5*c),T+=H>>>13,H&=8191;let q=T+A*c+F*a+L*(5*m)+M*(5*g)+K*(5*p);T=q>>>13,q&=8191,q+=C*(5*h)+P*(5*f)+E*(5*d)+v*(5*u)+_*(5*l),T+=q>>>13,q&=8191;let Y=T+A*l+F*c+L*a+M*(5*m)+K*(5*g);T=Y>>>13,Y&=8191,Y+=C*(5*p)+P*(5*h)+E*(5*f)+v*(5*d)+_*(5*u),T+=Y>>>13,Y&=8191;let ae=T+A*u+F*l+L*c+M*a+K*(5*m);T=ae>>>13,ae&=8191,ae+=C*(5*g)+P*(5*p)+E*(5*h)+v*(5*f)+_*(5*d),T+=ae>>>13,ae&=8191;let ie=T+A*d+F*u+L*l+M*c+K*a;T=ie>>>13,ie&=8191,ie+=C*(5*m)+P*(5*g)+E*(5*p)+v*(5*h)+_*(5*f),T+=ie>>>13,ie&=8191;let fe=T+A*f+F*d+L*u+M*l+K*c;T=fe>>>13,fe&=8191,fe+=C*a+P*(5*m)+E*(5*g)+v*(5*p)+_*(5*h),T+=fe>>>13,fe&=8191;let xe=T+A*h+F*f+L*d+M*u+K*l;T=xe>>>13,xe&=8191,xe+=C*c+P*a+E*(5*m)+v*(5*g)+_*(5*p),T+=xe>>>13,xe&=8191;let Ne=T+A*p+F*h+L*f+M*d+K*u;T=Ne>>>13,Ne&=8191,Ne+=C*l+P*c+E*a+v*(5*m)+_*(5*g),T+=Ne>>>13,Ne&=8191;let Be=T+A*g+F*p+L*h+M*f+K*d;T=Be>>>13,Be&=8191,Be+=C*u+P*l+E*c+v*a+_*(5*m),T+=Be>>>13,Be&=8191;let Ke=T+A*m+F*g+L*p+M*h+K*f;T=Ke>>>13,Ke&=8191,Ke+=C*d+P*u+E*l+v*c+_*a,T+=Ke>>>13,Ke&=8191,T=(T<<2)+T|0,T=T+H|0,H=T&8191,T=T>>>13,q+=T,i[0]=H,i[1]=q,i[2]=Y,i[3]=ae,i[4]=ie,i[5]=fe,i[6]=xe,i[7]=Ne,i[8]=Be,i[9]=Ke}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;oo(n)}update(e){zm(this);let{buffer:t,blockLen:n}=this;e=L1(e);let 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(){oo(this.h,this.r,this.buffer,this.pad)}digestInto(e){zm(this),l9(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 C_(r){let e=(n,o)=>r(o).update(L1(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var y9=C_(r=>new Xm(r));function x9(r,e,t,n,o,i=20){let s=r[0],a=r[1],c=r[2],l=r[3],u=e[0],d=e[1],f=e[2],h=e[3],p=e[4],g=e[5],m=e[6],y=e[7],x=o,w=t[0],I=t[1],B=t[2],D=s,R=a,S=c,A=l,F=u,L=d,M=f,K=h,C=p,P=g,E=m,v=y,_=x,T=w,H=I,q=B;for(let ae=0;ae<i;ae+=2)D=D+F|0,_=Q(_^D,16),C=C+_|0,F=Q(F^C,12),D=D+F|0,_=Q(_^D,8),C=C+_|0,F=Q(F^C,7),R=R+L|0,T=Q(T^R,16),P=P+T|0,L=Q(L^P,12),R=R+L|0,T=Q(T^R,8),P=P+T|0,L=Q(L^P,7),S=S+M|0,H=Q(H^S,16),E=E+H|0,M=Q(M^E,12),S=S+M|0,H=Q(H^S,8),E=E+H|0,M=Q(M^E,7),A=A+K|0,q=Q(q^A,16),v=v+q|0,K=Q(K^v,12),A=A+K|0,q=Q(q^A,8),v=v+q|0,K=Q(K^v,7),D=D+L|0,q=Q(q^D,16),E=E+q|0,L=Q(L^E,12),D=D+L|0,q=Q(q^D,8),E=E+q|0,L=Q(L^E,7),R=R+M|0,_=Q(_^R,16),v=v+_|0,M=Q(M^v,12),R=R+M|0,_=Q(_^R,8),v=v+_|0,M=Q(M^v,7),S=S+K|0,T=Q(T^S,16),C=C+T|0,K=Q(K^C,12),S=S+K|0,T=Q(T^S,8),C=C+T|0,K=Q(K^C,7),A=A+F|0,H=Q(H^A,16),P=P+H|0,F=Q(F^P,12),A=A+F|0,H=Q(H^A,8),P=P+H|0,F=Q(F^P,7);let Y=0;n[Y++]=s+D|0,n[Y++]=a+R|0,n[Y++]=c+S|0,n[Y++]=l+A|0,n[Y++]=u+F|0,n[Y++]=d+L|0,n[Y++]=f+M|0,n[Y++]=h+K|0,n[Y++]=p+C|0,n[Y++]=g+P|0,n[Y++]=m+E|0,n[Y++]=y+v|0,n[Y++]=x+_|0,n[Y++]=w+T|0,n[Y++]=I+H|0,n[Y++]=B+q|0}function k_(r,e,t,n){let o=r[0],i=r[1],s=r[2],a=r[3],c=e[0],l=e[1],u=e[2],d=e[3],f=e[4],h=e[5],p=e[6],g=e[7],m=t[0],y=t[1],x=t[2],w=t[3];for(let B=0;B<20;B+=2)o=o+c|0,m=Q(m^o,16),f=f+m|0,c=Q(c^f,12),o=o+c|0,m=Q(m^o,8),f=f+m|0,c=Q(c^f,7),i=i+l|0,y=Q(y^i,16),h=h+y|0,l=Q(l^h,12),i=i+l|0,y=Q(y^i,8),h=h+y|0,l=Q(l^h,7),s=s+u|0,x=Q(x^s,16),p=p+x|0,u=Q(u^p,12),s=s+u|0,x=Q(x^s,8),p=p+x|0,u=Q(u^p,7),a=a+d|0,w=Q(w^a,16),g=g+w|0,d=Q(d^g,12),a=a+d|0,w=Q(w^a,8),g=g+w|0,d=Q(d^g,7),o=o+l|0,w=Q(w^o,16),p=p+w|0,l=Q(l^p,12),o=o+l|0,w=Q(w^o,8),p=p+w|0,l=Q(l^p,7),i=i+u|0,m=Q(m^i,16),g=g+m|0,u=Q(u^g,12),i=i+u|0,m=Q(m^i,8),g=g+m|0,u=Q(u^g,7),s=s+d|0,y=Q(y^s,16),f=f+y|0,d=Q(d^f,12),s=s+d|0,y=Q(y^s,8),f=f+y|0,d=Q(d^f,7),a=a+c|0,x=Q(x^a,16),h=h+x|0,c=Q(c^h,12),a=a+c|0,x=Q(x^a,8),h=h+x|0,c=Q(c^h,7);let I=0;n[I++]=o,n[I++]=i,n[I++]=s,n[I++]=a,n[I++]=m,n[I++]=y,n[I++]=x,n[I++]=w}var P_=Ym(x9,{counterRight:!1,counterLength:4,allowShortKeys:!1}),R_=Ym(x9,{counterRight:!1,counterLength:8,extendNonceFn:k_,allowShortKeys:!1});var D_=new Uint8Array(16),w9=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(D_.subarray(t))},L_=new Uint8Array(32);function b9(r,e,t,n,o){let i=r(e,t,L_),s=y9.create(i);o&&w9(s,o),w9(s,n);let a=new Uint8Array(16),c=u9(a);Gm(c,0,BigInt(o?o.length:0),!0),Gm(c,8,BigInt(n.length),!0),s.update(a);let l=s.digest();return oo(i,a),l}var v9=r=>(e,t,n)=>(cr(e,32),cr(t),{encrypt(i,s){let a=i.length,c=a+16;s?cr(s,c):s=new Uint8Array(c),r(e,t,i,s,1);let l=b9(r,e,t,s.subarray(0,-16),n);return s.set(l,a),oo(l),s},decrypt(i,s){let a=i.length,c=a-16;if(a<16)throw new Error("encrypted data must be at least 16 bytes");s?cr(s,c):s=new Uint8Array(c);let l=i.subarray(0,-16),u=i.subarray(-16),d=b9(r,e,t,l,n);if(!f9(u,d))throw new Error("invalid tag");return r(e,t,l,s,1),oo(d),s}}),jm=Wm({blockSize:64,nonceLength:12,tagLength:16},v9(P_)),TY=Wm({blockSize:64,nonceLength:24,tagLength:16},v9(R_));function S9(r,e,t){return ci(r),t===void 0&&(t=new Uint8Array(r.outputLen)),Co(r,zr(t),zr(e))}var Zm=new Uint8Array([0]),E9=new Uint8Array;function A9(r,e,t,n=32){if(ci(r),go(n),n>255*r.outputLen)throw new Error("Length should be <= 255*HashLen");let o=Math.ceil(n/r.outputLen);t===void 0&&(t=E9);let i=new Uint8Array(o*r.outputLen),s=Co.create(r,e),a=s._cloneInto(),c=new Uint8Array(s.outputLen);for(let l=0;l<o;l++)Zm[0]=l+1,a.update(l===0?E9:c).update(t).update(Zm).digestInto(c),i.set(c,r.outputLen*l),s._cloneInto(a);return s.destroy(),a.destroy(),c.fill(0),Zm.fill(0),i.slice(0,n)}var Jm={hashSHA256(r){return Tr(r.subarray())},getHKDF(r,e){let t=S9(Tr,e,r),o=A9(Tr,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=Ua.utils.randomPrivateKey();return{publicKey:Ua.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:Ua.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return Ua.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return jm(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return jm(n,e,t).decrypt(r.subarray(),o)}};var I9=Jm;function T9(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 Qs=r=>{let e=Me(2);return e[0]=r>>8,e[1]=r,e};Qs.bytes=2;var Fc=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)};Fc.bytes=2;function _9(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 e3(r,e){!e.enabled||!Gs||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${U(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${U(r.privateKey,"hex")}`)):e("Missing local static keys."))}function t3(r,e){!e.enabled||!Gs||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${U(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${U(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function C9(r,e){!e.enabled||!Gs||e(r?`REMOTE_STATIC_PUBLIC_KEY ${U(r.subarray(),"hex")}`:"Missing remote static public key.")}function r3(r,e){!e.enabled||!Gs||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${U(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function n3(r,e,t){!t.enabled||!Gs||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&U(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&U(e.k,"hex")}`))}function lr(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=Me(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var Ys=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var N_=0,B_=4294967295,O_="Cipherstate has reached maximum n, a new handshake must be performed",O1=class{n;bytes;view;constructor(e=N_){this.n=e,this.bytes=se(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>B_)throw new Error(O_)}};var Ui=se(0),Xs=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new O1(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}},o3=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=N(t,"utf-8");this.h=M_(e,n),this.ck=this.h,this.cs=new Xs(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new Xs(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new ce(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,Ui);return[new Xs(this.crypto,e),new Xs(this.crypto,t)]}},i3=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 o3(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()}},Vc=class extends i3{writeMessageA(e){return new ce(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new ce(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new ce(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new Ys(`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 Ys(`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 Ys(`handshake stage 2 validation fail: ${t.message}`)}}};function M_(r,e){if(e.length<=32){let t=se(32);return t.set(e),t}else return r.hash(e)}var M1;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let i of t.webtransportCerthashes)n.uint32(10),n.bytes(i);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={webtransportCerthashes:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let s=t.uint32();switch(s>>>3){case 1:{o.webtransportCerthashes.push(t.bytes());break}default:{t.skipType(s&7);break}}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(M1||(M1={}));var $c;(function(r){let e;r.codec=()=>(e==null&&(e=re((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),M1.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={identityKey:se(0),identitySig:se(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let s=t.uint32();switch(s>>>3){case 1:{o.identityKey=t.bytes();break}case 2:{o.identitySig=t.bytes();break}case 4:{o.extensions=M1.codec().decode(t,t.uint32());break}default:{t.skipType(s&7);break}}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})($c||($c={}));async function s3(r,e,t){let n=await r.sign(k9(e));return $c.encode({identityKey:Mt(r.publicKey),identitySig:n,extensions:t})}async function a3(r,e,t){try{let n=$c.decode(r),o=nt(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=k9(e);if(!await o.verify(i,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new gl(n.message)}}function k9(r){let e=N("noise-libp2p-static-key:");return r instanceof Uint8Array?Ce([e,r],e.length+r.length):(r.prepend(e),r)}async function P9(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await s3(i,a.publicKey,l),d=new Vc({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:a});e3(d.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(d.writeMessageA(Ui),e),t.trace("Stage 0 - Initiator finished sending first message."),t3(d.e,t),t.trace("Stage 1 - Initiator waiting to receive first message from responder...");let f=d.readMessageB(await n.read(e));t.trace("Stage 1 - Initiator received the message."),r3(d.re,t),C9(d.rs,t),t.trace("Initiator going to check remote's signature...");let h=await a3(f,d.rs,c);t.trace("All good with the signature!"),t.trace("Stage 2 - Initiator sending third handshake message."),await n.write(d.writeMessageC(u),e),t.trace("Stage 2 - Initiator sent message with signed payload.");let[p,g]=d.ss.split();return n3(p,g,t),{payload:h,encrypt:m=>p.encryptWithAd(Ui,m),decrypt:(m,y)=>g.decryptWithAd(Ui,m,y)}}async function R9(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await s3(i,a.publicKey,l),d=new Vc({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:a});e3(d.s,t),t.trace("Stage 0 - Responder waiting to receive first message."),d.readMessageA(await n.read(e)),t.trace("Stage 0 - Responder received first message."),r3(d.re,t),t.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await n.write(d.writeMessageB(u),e),t.trace("Stage 1 - Responder sent the second handshake message with signed payload."),t3(d.e,t),t.trace("Stage 2 - Responder waiting for third handshake message...");let f=d.readMessageC(await n.read(e));t.trace("Stage 2 - Responder received the message, finished handshake.");let h=await a3(f,d.rs,c),[p,g]=d.ss.split();return n3(p,g,t),{payload:h,encrypt:m=>g.encryptWithAd(Ui,m),decrypt:(m,y)=>p.decryptWithAd(Ui,m,y)}}var L9=16;function N9(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65519){let i=o+65519;i>n.length&&(i=n.length);let s;n instanceof Uint8Array?s=r.encrypt(n.subarray(o,i)):s=r.encrypt(n.sublist(o,i)),e?.encryptedPackets.increment(),yield new ce(Qs(s.byteLength),s)}}}function B9(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65535){let i=o+65535;if(i>n.length&&(i=n.length),i-L9<o)throw new Error("Invalid chunk");let s=n.sublist(o,i),a=n.subarray(o,i-L9);try{let c=r.decrypt(s,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var U1=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:i,prologueBytes:s}=t,{metrics:a}=e;this.components=e;let c=i??I9;this.crypto=T9(c),this.extensions=o,this.metrics=a?_9(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=s??se(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[Se]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=Cn(e,{lengthEncoder:Qs,lengthDecoder:Fc,maxDataLength:65535}),o=await this.performHandshakeInitiator(n,this.components.privateKey,t?.remotePeer?.publicKey,t),i=await this.createSecureConnection(n,o);e.source=i.source,e.sink=i.sink;let s=nt(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:Sn(s)}}async secureInbound(e,t){let n=Cn(e,{lengthEncoder:Qs,lengthDecoder:Fc,maxDataLength:65535}),o=await this.performHandshakeResponder(n,this.components.privateKey,t?.remotePeer?.publicKey,t),i=await this.createSecureConnection(n,o);e.source=i.source,e.sink=i.sink;let s=nt(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:Sn(s)}}async performHandshakeInitiator(e,t,n,o){let i;try{i=await P9({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:this.extensions},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return i}async performHandshakeResponder(e,t,n,o){let i;try{i=await R9({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:this.extensions},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return i}async createSecureConnection(e,t){let[n,o]=c9(),i=e.unwrap();return await ft(n,N9(t,this.metrics),i,s=>Uc(s,{lengthDecoder:Fc}),B9(t,this.metrics),n),o}};function F1(r={}){return e=>new U1(e,r)}function V1(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")}var cn=class extends Error{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e),this.name="InvalidFrameError"}},js=class extends Error{static name="UnrequestedPingError";constructor(e="Unrequested ping error"){super(e),this.name="UnrequestedPingError"}},Zs=class extends Error{static name="NotMatchingPingError";constructor(e="Unrequested ping error"){super(e),this.name="NotMatchingPingError"}},$1=class extends Error{static name="InvalidStateError";constructor(e="Invalid state"){super(e),this.name="InvalidStateError"}},K1=class extends Error{static name="StreamAlreadyExistsError";constructor(e="Strean already exists"){super(e),this.name="StreamAlreadyExistsError"}},H1=class extends Error{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e),this.name="DecodeInvalidVersionError"}},q1=class extends Error{static name="BothClientsError";constructor(e="Both clients"){super(e),this.name="BothClientsError"}},Js=class extends Error{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e),this.name="ReceiveWindowExceededError"}};var O9=new Set([cn.name,js.name,Zs.name,K1.name,H1.name,q1.name,Js.name]),Hc=256*1024,M9=16*1024*1024;var U9={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:Hc,maxStreamWindowSize:M9,maxMessageSize:64*1024};function F9(r){if(r.keepAliveInterval<=0)throw new k("keep-alive interval must be positive");if(r.maxInboundStreams<0)throw new k("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams<0)throw new k("max outbound streams must be larger or equal 0");if(r.initialStreamWindowSize<Hc)throw new k("InitialStreamWindowSize must be larger or equal 256 kB");if(r.maxStreamWindowSize<r.initialStreamWindowSize)throw new k("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.maxStreamWindowSize>2**32-1)throw new k("MaxStreamWindowSize must be less than equal MAX_UINT32");if(r.maxMessageSize<1024)throw new k("MaxMessageSize must be greater than a kilobyte")}var Je;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(Je||(Je={}));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 oj=Object.values(ze).filter(r=>typeof r!="string"),V9=0,Lr;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(Lr||(Lr={}));var Fo=12;var $9=2**24;function U_(r){if(r[0]!==V9)throw new cn("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*$9+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*$9+(r[9]<<16)+(r[10]<<8)+r[11]}}var z1=class{source;buffer;frameInProgress;constructor(e){this.source=F_(e),this.buffer=new ce,this.frameInProgress=!1}async*emitFrames(){for await(let e of this.source)for(this.buffer.append(e);;){let t=this.readHeader();if(t===void 0)break;let{type:n,length:o}=t;n===Je.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,o)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new $1("decoding frame already in progress");if(this.buffer.length<Fo)return;let e=U_(this.buffer.subarray(0,Fo));return this.buffer.consume(Fo),e}async readBytes(e){if(this.buffer.length<e){for await(let n of this.source)if(this.buffer.append(n),this.buffer.length>=e)break}let t=this.buffer.sublist(0,e);return this.buffer.consume(e),this.frameInProgress=!1,t}};function F_(r){if(r[Symbol.iterator]!==void 0){let e=r[Symbol.iterator]();return e.return=void 0,{[Symbol.iterator](){return e}}}else if(r[Symbol.asyncIterator]!==void 0){let e=r[Symbol.asyncIterator]();return e.return=void 0,{[Symbol.asyncIterator](){return e}}}else throw new Error("a source must be either an iterable or an async iterable")}function c3(r){let e=new Uint8Array(Fo);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}function K9(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function W1(r,e){let t=V1(r).return?.();K9(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var V_=5e3;function l3(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Vo=class{id;direction;timeline;protocol;metadata;source;status;readStatus;writeStatus;log;sinkController;sinkEnd;closed;endErr;streamSource;onEnd;onCloseRead;onCloseWrite;onReset;onAbort;sendCloseWriteTimeout;sendingData;constructor(e){this.sinkController=new AbortController,this.sinkEnd=J(),this.closed=J(),this.log=e.log,this.status="open",this.readStatus="ready",this.writeStatus="ready",this.id=e.id,this.metadata=e.metadata??{},this.direction=e.direction,this.timeline={open:Date.now()},this.sendCloseWriteTimeout=e.sendCloseWriteTimeout??V_,this.onEnd=e.onEnd,this.onCloseRead=e?.onCloseRead,this.onCloseWrite=e?.onCloseWrite,this.onReset=e?.onReset,this.onAbort=e?.onAbort,this.source=this.streamSource=Dt({onEnd:t=>{t!=null?this.log.trace("source ended with error",t):this.log.trace("source ended"),this.onSourceEnd(t)}}),this.sink=this.sink.bind(this)}async sink(e){if(this.writeStatus!=="ready")throw new Jo(`writable end state is "${this.writeStatus}" not "ready"`);try{this.writeStatus="writing";let t={signal:this.sinkController.signal};if(this.direction==="outbound"){let o=this.sendNewStream(t);l3(o)&&await o}let n=()=>{W1(e,this.log)};try{this.sinkController.signal.addEventListener("abort",n),this.log.trace("sink reading from source");for await(let o of e){o=o instanceof Uint8Array?new ce(o):o;let i=this.sendData(o,t);l3(i)&&(this.sendingData=J(),await i,this.sendingData.resolve(),this.sendingData=void 0)}}finally{this.sinkController.signal.removeEventListener("abort",n)}this.log.trace('sink finished reading from source, write status is "%s"',this.writeStatus),this.writeStatus==="writing"&&(this.writeStatus="closing",this.log.trace("send close write to remote"),await this.sendCloseWrite({signal:AbortSignal.timeout(this.sendCloseWriteTimeout)}),this.writeStatus="closed"),this.onSinkEnd()}catch(t){throw this.log.trace("sink ended with error, calling abort with error",t),this.abort(t),t}finally{this.log.trace("resolve sink end"),this.sinkEnd.resolve()}}onSourceEnd(e){this.timeline.closeRead==null&&(this.timeline.closeRead=Date.now(),this.readStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseRead?.(),this.timeline.closeWrite!=null?(this.log.trace("source and sink ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("source ended, waiting for sink to end"))}onSinkEnd(e){this.timeline.closeWrite==null&&(this.timeline.closeWrite=Date.now(),this.writeStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseWrite?.(),this.timeline.closeRead!=null?(this.log.trace("sink and source ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("sink ended, waiting for source to end"))}async close(e){this.status==="open"&&(this.log.trace("closing gracefully"),this.status="closing",await et(Promise.all([this.closeWrite(e),this.closeRead(e),this.closed.promise]),e?.signal),this.status="closed",this.log.trace("closed gracefully"))}async closeRead(e={}){if(this.readStatus==="closing"||this.readStatus==="closed")return;this.log.trace('closing readable end of stream with starting read status "%s"',this.readStatus);let t=this.readStatus;this.readStatus="closing",this.status!=="reset"&&this.status!=="aborted"&&this.timeline.closeRead==null&&(this.log.trace("send close read to remote"),await this.sendCloseRead(e)),t==="ready"&&(this.log.trace("ending internal source queue with %d queued bytes",this.streamSource.readableLength),this.streamSource.end()),this.log.trace("closed readable end of stream")}async closeWrite(e={}){this.writeStatus==="closing"||this.writeStatus==="closed"||(this.log.trace('closing writable end of stream with starting write status "%s"',this.writeStatus),this.writeStatus==="ready"&&(this.log.trace("sink was never sunk, sink an empty array"),await et(this.sink([]),e.signal)),this.writeStatus==="writing"&&(this.sendingData!=null&&await et(this.sendingData.promise,e.signal),this.log.trace("aborting source passed to .sink"),this.sinkController.abort(),await et(this.sinkEnd.promise,e.signal)),this.writeStatus="closed",this.log.trace("closed writable end of stream"))}abort(e){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;this.log("abort with error",e),this.log("try to send reset to remote");let t=this.sendReset();l3(t)&&t.catch(n=>{this.log.error("error sending reset message",n)}),this.status="aborted",this.timeline.abort=Date.now(),this._closeSinkAndSource(e),this.onAbort?.(e)}reset(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;let e=new wl("stream reset");this.status="reset",this.timeline.reset=Date.now(),this._closeSinkAndSource(e),this.onReset?.()}_closeSinkAndSource(e){this._closeSink(e),this._closeSource(e)}_closeSink(e){this.writeStatus==="writing"&&(this.log.trace("end sink source"),this.sinkController.abort()),this.onSinkEnd(e)}_closeSource(e){this.readStatus!=="closing"&&this.readStatus!=="closed"&&(this.log.trace("ending source with %d bytes to be read by consumer",this.streamSource.readableLength),this.readStatus="closing",this.streamSource.end(e))}remoteCloseWrite(){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("received remote close write but local source is already closed");return}this.log.trace("remote close write"),this._closeSource()}remoteCloseRead(){if(this.writeStatus==="closing"||this.writeStatus==="closed"){this.log("received remote close read but local sink is already closed");return}this.log.trace("remote close read"),this._closeSink()}destroy(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset"){this.log("received destroy but we are already closed");return}this.log.trace("stream destroyed"),this._closeSinkAndSource()}sourcePush(e){this.streamSource.push(e)}sourceReadableLength(){return this.streamSource.readableLength}};var Nr;(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"})(Nr||(Nr={}));var G1=class extends Vo{name;state;config;_id;sendWindowCapacity;sendWindowCapacityUpdate;recvWindow;recvWindowCapacity;epochStart;getRTT;sendFrame;constructor(e){super({...e,onEnd:t=>{this.state=Nr.Finished,e.onEnd?.(t)}}),this.config=e.config,this._id=parseInt(e.id,10),this.name=e.name,this.state=e.state,this.sendWindowCapacity=Hc,this.recvWindow=this.config.initialStreamWindowSize,this.recvWindowCapacity=this.recvWindow,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame,this.source=Ii(this.source,()=>{this.sendWindowUpdate()})}async sendNewStream(){}async sendData(e,t={}){for(e=e.sublist();e.byteLength!==0;){if(this.sendWindowCapacity===0&&(this.log?.trace("wait for send window capacity, status %s",this.status),await this.waitForSendWindowCapacity(t),this.status==="closed"||this.status==="aborted"||this.status==="reset")){this.log?.trace("%s while waiting for send window capacity",this.status);return}let n=Math.min(this.sendWindowCapacity,this.config.maxMessageSize-Fo,e.length),o=this.getSendFlags();this.sendFrame({type:Je.Data,flag:o,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:Je.WindowUpdate,flag:ze.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|ze.FIN;this.sendFrame({type:Je.WindowUpdate,flag:e,streamID:this._id,length:0})}async sendCloseRead(){}async waitForSendWindowCapacity(e={}){if(this.sendWindowCapacity>0)return;let t,n,o=()=>{this.status==="open"||this.status==="closing"?n(new Kt("Stream aborted")):t()};e.signal?.addEventListener("abort",o);try{await new Promise((i,s)=>{this.sendWindowCapacityUpdate=()=>{i()},n=s,t=i})}finally{e.signal?.removeEventListener("abort",o)}}handleWindowUpdate(e){this.log?.trace("stream received window update id=%s",this._id),this.processFlags(e.flag);let t=this.sendWindowCapacity;this.sendWindowCapacity+=e.length,t===0&&e.length>0&&this.sendWindowCapacityUpdate?.()}async handleData(e,t){if(this.log?.trace("stream received data id=%s",this._id),this.processFlags(e.flag),this.recvWindowCapacity<e.length)throw new Js("Receive window exceeded");let n=await t();this.recvWindowCapacity-=e.length,this.sourcePush(n)}processFlags(e){(e&ze.ACK)===ze.ACK&&this.state===Nr.SYNSent&&(this.state=Nr.Established),(e&ze.FIN)===ze.FIN&&this.remoteCloseWrite(),(e&ze.RST)===ze.RST&&this.reset()}getSendFlags(){switch(this.state){case Nr.Init:return this.state=Nr.SYNSent,ze.SYN;case Nr.SYNReceived:return this.state=Nr.Established,ze.ACK;default:return 0}}sendWindowUpdate(){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.config.maxStreamWindowSize)),this.recvWindowCapacity>=this.recvWindow&&e===0)return;let o=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:Je.WindowUpdate,flag:e,streamID:this._id,length:o})}};var H9="/yamux/1.0.0",$_=500,Q1=class{protocol=H9;_components;_init;constructor(e,t={}){this._components=e,this._init=t}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[Se]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new u3(this._components,{...this._init,...e})}},u3=class{protocol=H9;source;sink;config;log;logger;closeController;nextStreamID;_streams;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;onIncomingStream;onStreamEnd;constructor(e,t){this.client=t.direction==="outbound",this.config={...U9,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),F9(this.config),this.closeController=new AbortController,this.closeController.signal,this.onIncomingStream=t.onIncomingStream,this.onStreamEnd=t.onStreamEnd,this._streams=new Map,this.source=Dt({onEnd:()=>{this.log?.trace("muxer source ended"),this._streams.forEach(n=>{n.destroy()})}}),this.sink=async n=>{let o=()=>{let a=V1(n);if(a.return!=null){let c=a.return();K_(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},i,s;try{let a=new z1(n);try{this.closeController.signal.addEventListener("abort",o);for await(let c of a.emitFrames())await this.handleFrame(c.header,c.readData)}finally{this.closeController.signal.removeEventListener("abort",o)}i=Lr.NormalTermination}catch(a){O9.has(a.name)?(this.log?.error("protocol error in sink",a),i=Lr.ProtocolError):(this.log?.error("internal error in sink",a),i=Lr.InternalError),s=a}this.log?.trace("muxer sink ended"),s!=null?this.abort(s,i):await this.close({reason:i})},this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log?.trace("muxer created"),this.config.enableKeepAlive&&this.keepAliveLoop().catch(n=>this.log?.error("keepalive error: %s",n)),this.ping().catch(n=>this.log?.error("ping error: %s",n))}get streams(){return Array.from(this._streams.values())}newStream(e){if(this.remoteGoAway!==void 0)throw new mn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new mn("Muxer closed locally");let t=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.config.maxOutboundStreams)throw new fo("max outbound streams exceeded");this.log?.trace("new outgoing stream id=%s",t);let n=this._newStream(t,e,Nr.Init,"outbound");return this._streams.set(t,n),this.numOutboundStreams++,n.sendWindowUpdate(),n}async ping(){if(this.remoteGoAway!==void 0)throw new mn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new mn("Muxer closed locally");if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((o,i)=>{let s=()=>{i(new mn("Muxer closed locally"))};this.closeController.signal.addEventListener("abort",s,{once:!0}),e=()=>{this.closeController.signal.removeEventListener("abort",s),o()}}),resolve:e};let t=Date.now();this.sendPing(this.activePing.id);try{await this.activePing.promise}finally{delete this.activePing}let n=Date.now();this.rtt=n-t}else await this.activePing.promise;return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.closeController.signal.aborted)return;let t=e?.reason??Lr.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout($_);e={...e,signal:n}}try{await Promise.all([...this._streams.values()].map(async n=>n.close(e))),this.sendGoAway(t),this._closeMuxer()}catch(n){this.abort(n)}}abort(e,t){if(!this.closeController.signal.aborted){t=t??Lr.InternalError,this.log?.error("muxer abort reason=%s error=%s",t,e);for(let n of this._streams.values())n.abort(e);this.sendGoAway(t),this._closeMuxer()}}isClosed(){return this.closeController.signal.aborted}_closeMuxer(){this.closeController.abort(),this.source.end()}_newStream(e,t,n,o){if(this._streams.get(e)!=null)throw new k("Stream already exists with that id");let i=new G1({id:e.toString(),name:t,state:n,direction:o,sendFrame:this.sendFrame.bind(this),onEnd:()=>{this.closeStream(e),this.onStreamEnd?.(i)},log:this.logger.forComponent(`libp2p:yamux:${o}:${e}`),config:this.config,getRTT:this.getRTT.bind(this)});return i}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--,this._streams.delete(e)}async keepAliveLoop(){let e=new Promise((t,n)=>{this.closeController.signal.addEventListener("abort",n,{once:!0})});for(this.log?.trace("muxer keepalive enabled interval=%s",this.config.keepAliveInterval);;){let t;try{await Promise.race([e,new Promise(n=>{t=setTimeout(n,this.config.keepAliveInterval)})]),this.ping().catch(n=>this.log?.error("ping error: %s",n))}catch{clearInterval(t);return}}}async handleFrame(e,t){let{streamID:n,type:o,length:i}=e;if(this.log?.trace("received frame %o",e),n===0)switch(o){case Je.Ping:{this.handlePing(e);return}case Je.GoAway:{this.handleGoAway(i);return}default:throw new cn("Invalid frame type")}else switch(e.type){case Je.Data:case Je.WindowUpdate:{await this.handleStreamMessage(e,t);return}default:throw new cn("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 cn("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new js("ping not requested");if(this.activePing.id!==e)throw new Zs("ping doesn't match our id");this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",Lr[e]??"unknown"),this.remoteGoAway=e;for(let t of this._streams.values())t.reset();this._closeMuxer()}async handleStreamMessage(e,t){let{streamID:n,flag:o,type:i}=e;(o&ze.SYN)===ze.SYN&&this.incomingStream(n);let s=this._streams.get(n);if(s===void 0){if(i===Je.Data){if(this.log?.("discarding data for stream id=%s",n),t===void 0)throw new Error("unreachable");await t()}else this.log?.trace("frame for missing stream id=%s",n);return}switch(i){case Je.WindowUpdate:{s.handleWindowUpdate(e);return}case Je.Data:{if(t===void 0)throw new Error("unreachable");await s.handleData(e,t);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new k("Both endpoints are clients");if(this._streams.has(e))return;if(this.log?.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:Je.WindowUpdate,flag:ze.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.config.maxInboundStreams){this.log?.("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:Je.WindowUpdate,flag:ze.RST,streamID:e,length:0});return}let t=this._newStream(e,void 0,Nr.SYNReceived,"inbound");this.numInboundStreams++,this._streams.set(e,t),this.onIncomingStream?.(t)}sendFrame(e,t){if(this.log?.trace("sending frame %o",e),e.type===Je.Data){if(t===void 0)throw new cn("Invalid frame");this.source.push(new ce(c3(e),t))}else this.source.push(c3(e))}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:Je.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=Lr.NormalTermination){this.log?.("sending GoAway reason=%s",Lr[e]),this.localGoAway=e,this.sendFrame({type:Je.GoAway,flag:0,streamID:0,length:e})}};function K_(r){return r!=null&&typeof r.then=="function"}function q9(r={}){return e=>new Q1(e,r)}var H_=41;function Y1(r){try{let[[e,t]]=r.stringTuples();if(t==null)return!1;if(e===H_)return T7("2000::/3",t)}catch{}return!1}var q_=4,z_=41,W_=53,G_=54,Q_=55,Y_=56;function Br(r){try{let[[e,t]]=r.stringTuples();if(t==null)return!0;if(e===W_||e===G_||e===Q_||e===Y_)return!1;if(e===q_||e===z_)return Yt(t)??!1}catch{}return!0}function z9(r,e,t){let n,o;function i(){let a={signal:o.signal};if(t?.timeout!=null){let c=le([o.signal,AbortSignal.timeout(t.timeout)]);a.signal=c}Promise.resolve().then(async()=>{await r(a)}).catch(()=>{}).finally(()=>{o.signal.aborted||(n=setTimeout(i,e))})}let s=!1;return{setInterval:a=>{e=a,n!=null&&(clearTimeout(n),n=setTimeout(i,e))},setTimeout:a=>{t==null&&(t={}),t.timeout=a},start:()=>{s||(s=!0,o=new AbortController,o.signal,t?.runImmediately===!0?queueMicrotask(()=>{i()}):n=setTimeout(i,e))},stop:()=>{clearTimeout(n),o?.abort(),s=!1}}}function We(r,e){let t=Cn(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(a=>i.encode(a)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var W9="libp2p",G9="autonat",Q9="1.0.0";var $e;(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=()=>He(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=()=>He(o)}(n=r.ResponseStatus||(r.ResponseStatus={}));let i;(function(l){let u;l.codec=()=>(u==null&&(u=re((d,f,h={})=>{if(h.lengthDelimited!==!1&&f.fork(),d.id!=null&&(f.uint32(10),f.bytes(d.id)),d.addrs!=null)for(let p of d.addrs)f.uint32(18),f.bytes(p);h.lengthDelimited!==!1&&f.ldelim()},(d,f,h={})=>{let p={addrs:[]},g=f==null?d.len:d.pos+f;for(;d.pos<g;){let m=d.uint32();switch(m>>>3){case 1:{p.id=d.bytes();break}case 2:{if(h.limits?.addrs!=null&&p.addrs.length===h.limits.addrs)throw new Ue('Decode error - map field "addrs" had too many elements');p.addrs.push(d.bytes());break}default:{d.skipType(m&7);break}}}return p})),u),l.encode=d=>te(d,l.codec()),l.decode=(d,f)=>ee(d,l.codec(),f)})(i=r.PeerInfo||(r.PeerInfo={}));let s;(function(l){let u;l.codec=()=>(u==null&&(u=re((d,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),d.peer!=null&&(f.uint32(10),r.PeerInfo.codec().encode(d.peer,f)),h.lengthDelimited!==!1&&f.ldelim()},(d,f,h={})=>{let p={},g=f==null?d.len:d.pos+f;for(;d.pos<g;){let m=d.uint32();switch(m>>>3){case 1:{p.peer=r.PeerInfo.codec().decode(d,d.uint32(),{limits:h.limits?.peer});break}default:{d.skipType(m&7);break}}}return p})),u),l.encode=d=>te(d,l.codec()),l.decode=(d,f)=>ee(d,l.codec(),f)})(s=r.Dial||(r.Dial={}));let a;(function(l){let u;l.codec=()=>(u==null&&(u=re((d,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),d.status!=null&&(f.uint32(8),r.ResponseStatus.codec().encode(d.status,f)),d.statusText!=null&&(f.uint32(18),f.string(d.statusText)),d.addr!=null&&(f.uint32(26),f.bytes(d.addr)),h.lengthDelimited!==!1&&f.ldelim()},(d,f,h={})=>{let p={},g=f==null?d.len:d.pos+f;for(;d.pos<g;){let m=d.uint32();switch(m>>>3){case 1:{p.status=r.ResponseStatus.codec().decode(d);break}case 2:{p.statusText=d.string();break}case 3:{p.addr=d.bytes();break}default:{d.skipType(m&7);break}}}return p})),u),l.encode=d=>te(d,l.codec()),l.decode=(d,f)=>ee(d,l.codec(),f)})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=re((l,u,d={})=>{d.lengthDelimited!==!1&&u.fork(),l.type!=null&&(u.uint32(8),r.MessageType.codec().encode(l.type,u)),l.dial!=null&&(u.uint32(18),r.Dial.codec().encode(l.dial,u)),l.dialResponse!=null&&(u.uint32(26),r.DialResponse.codec().encode(l.dialResponse,u)),d.lengthDelimited!==!1&&u.ldelim()},(l,u,d={})=>{let f={},h=u==null?l.len:l.pos+u;for(;l.pos<h;){let p=l.uint32();switch(p>>>3){case 1:{f.type=r.MessageType.codec().decode(l);break}case 2:{f.dial=r.Dial.codec().decode(l,l.uint32(),{limits:d.limits?.dial});break}case 3:{f.dialResponse=r.DialResponse.codec().decode(l,l.uint32(),{limits:d.limits?.dialResponse});break}default:{l.skipType(p&7);break}}}return f})),c),r.encode=l=>te(l,r.codec()),r.decode=(l,u)=>ee(l,r.codec(),u)})($e||($e={}));var tC=4,rC=8,X1=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??W9}/${G9}/${Q9}`,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=new Map,this.findPeers=z9(this.findRandomPeers.bind(this),6e4),this.addressFilter=or(1024)}[Symbol.toStringTag]="@libp2p/autonat";[Se]=["@libp2p/autonat"];get[fr](){return["@libp2p/identify"]}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,e=>{this.handleIncomingAutonatStream(e).catch(t=>{this.log.error("error handling incoming autonat stream - %e",t)})},{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=le([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){let t=AbortSignal.timeout(this.timeout);let n=We(e.stream,{maxDataLength:this.maxMessageSize}).pb($e);try{let o=await n.read({signal:t}),i=await this.handleAutonatMessage(o,e.connection,{signal:t});await n.write(i,{signal:t}),await n.unwrap().unwrap().close({signal:t})}catch(o){this.log.error("error handling incoming autonat stream - %e",o),e.stream.abort(o)}}async handleAutonatMessage(e,t,n){let o=this.components.addressManager.getAddresses().map(d=>d.toOptions().host),i=e.dial;if(i==null)return this.log.error("dial was missing from message"),{type:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.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:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let d=Ae(a.id);s=st(d)}catch(d){return this.log.error("invalid PeerId - %e",d),{type:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.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:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(d=>$(d)).filter(d=>{let f=d.toOptions();return Br(d)?!1:f.host!==t.remoteAddr.toOptions().host?(this.log.trace("not dialing %a - target host did not match remote host %a",d,t.remoteAddr),!1):o.includes(f.host)?!1:this.components.transportManager.dialTransportForMultiaddr(d)==null?(this.log.trace("not dialing %a - transport unsupported",d),!1):!0}).map(d=>(d.getPeerId()==null&&(d=d.encapsulate(`/p2p/${s.toString()}`)),d));if(c.length===0)return this.log("refused to dial all multiaddrs for %p from message",s),{type:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}};this.log("dial multiaddrs %s for peer %p",c.map(d=>d.toString()).join(", "),s);let l="",u=c[0];for await(let d of c){let f;u=d;try{if(f=await this.components.connectionManager.openConnection(d,n),!f.remoteAddr.equals(d))throw this.log.error("tried to dial %a but dialed %a",d,f.remoteAddr),new Error("Unexpected remote address");return this.log("successfully dialed %p via %a",s,d),{type:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.ResponseStatus.OK,addr:f.remoteAddr.decapsulateCode(Z("p2p").code).bytes}}}catch(h){this.log.error("could not dial %p - %e",s,h),l=h.message}finally{f!=null&&await f.close()}}return{type:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:u.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())||o.multiaddr.toOptions().family===6&&(!t||!Y1(o.multiaddr))||Br(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:W2(),queue:new wt({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})=>s.toOptions().family===6),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 %p to verify multiaddr %s",e.remotePeer,n.multiaddr);let s=await e.newStream(this.protocol,{signal:i});try{let a=We(s).pb($e),[,c]=await Promise.all([a.write({type:$e.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:[n.multiaddr.bytes]}}},{signal:i}),a.read({signal:i})]);if(c.type!==$e.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!==$e.ResponseStatus.OK&&l!==$e.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===$e.ResponseStatus.OK){if(o.success++,o.type!=="observed"){this.confirmAddress(o);return}}else l===$e.ResponseStatus.E_DIAL_ERROR&&o.failure++;this.log("%a success %d failure %d",o.multiaddr,o.success,o.failure),o.success===tC&&this.confirmAddress(o),o.failure===rC&&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=e.toOptions();return t.family===4?t.host.split(".")[0].padStart(3,"0"):t.host.split(":")[0].padStart(4,"0")}};function Y9(r={}){return e=>new X1(e,r)}var nC=z("dns4"),oC=z("dns6"),iC=z("dnsaddr"),Vi=ot(z("dns"),iC,nC,oC),J1=ot(z("ip4"),z("ip6")),ea=ot(oe(J1,z("tcp")),oe(Vi,z("tcp"))),ef=oe(J1,z("udp")),sC=oe(ef,z("utp")),aC=oe(ef,z("quic")),cC=oe(ef,z("quic-v1")),d3=ot(oe(ea,z("ws")),oe(Vi,z("ws"))),j1=ot(oe(d3,z("p2p")),d3),f3=ot(oe(ea,z("wss")),oe(Vi,z("wss")),oe(ea,z("tls"),z("ws")),oe(Vi,z("tls"),z("ws"))),Z1=ot(oe(f3,z("p2p")),f3),h3=ot(oe(ea,z("http")),oe(J1,z("http")),oe(Vi,z("http"))),p3=ot(oe(ea,z("https")),oe(J1,z("https")),oe(Vi,z("https"))),X9=oe(ef,z("webrtc-direct"),z("certhash")),J9=ot(oe(X9,z("p2p")),X9),j9=oe(cC,z("webtransport"),z("certhash"),z("certhash")),ey=ot(oe(j9,z("p2p")),j9),ty=ot(oe(j1,z("p2p-webrtc-star"),z("p2p")),oe(Z1,z("p2p-webrtc-star"),z("p2p")),oe(j1,z("p2p-webrtc-star")),oe(Z1,z("p2p-webrtc-star"))),xZ=ot(oe(j1,z("p2p-websocket-star"),z("p2p")),oe(Z1,z("p2p-websocket-star"),z("p2p")),oe(j1,z("p2p-websocket-star")),oe(Z1,z("p2p-websocket-star"))),ry=ot(oe(h3,z("p2p-webrtc-direct"),z("p2p")),oe(p3,z("p2p-webrtc-direct"),z("p2p")),oe(h3,z("p2p-webrtc-direct")),oe(p3,z("p2p-webrtc-direct"))),$i=ot(d3,f3,h3,p3,ty,ry,ea,sC,aC,Vi,J9,ey),vZ=ot(oe($i,z("p2p-stardust"),z("p2p")),oe($i,z("p2p-stardust"))),$o=ot(oe($i,z("p2p")),ty,ry,J9,ey,z("p2p")),Z9=ot(oe($o,z("p2p-circuit"),$o),oe($o,z("p2p-circuit")),oe(z("p2p-circuit"),$o),oe($i,z("p2p-circuit")),oe(z("p2p-circuit"),$i),z("p2p-circuit")),ny=()=>ot(oe(Z9,ny),Z9),Fi=ny(),oy=ot(oe(Fi,$o,Fi),oe($o,Fi),oe(Fi,$o),Fi,$o);var EZ=ot(oe(Fi,z("webrtc"),z("p2p")),oe(Fi,z("webrtc")),oe($i,z("webrtc"),z("p2p")),oe($i,z("webrtc")),z("webrtc"));function iy(r){function e(t){let n;try{n=$(t)}catch{return!1}let o=r(n.protoNames());return o===null?!1:o===!0||o===!1?o:o.length===0}return e}function oe(...r){function e(t){if(t.length<r.length)return null;let n=t;return r.some(o=>(n=typeof o=="function"?o().partialMatch(t):o.partialMatch(t),Array.isArray(n)&&(t=n),n===null)),n}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:iy(e),partialMatch:e}}function ot(...r){function e(n){let o=null;return r.some(i=>{let s=typeof i=="function"?i().partialMatch(n):i.partialMatch(n);return s!=null?(o=s,!0):!1}),o}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:iy(e),partialMatch:e}}function z(r){let e=r;function t(o){let i;try{i=$(o)}catch{return!1}let s=i.protoNames();return s.length===1&&s[0]===e}function n(o){return o.length===0?null:o[0]===e?o.slice(1):null}return{toString:function(){return e},matches:t,partialMatch:n}}var lC="bootstrap",uC=50,dC=1e3,m3=class extends me{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??dC,this.list=[];for(let n of t.list){if(!oy.matches(n)){this.log.error("Invalid multiaddr");continue}let o=$(n),i=o.getPeerId();if(i==null){this.log.error("Invalid bootstrap multiaddr without peer id");continue}let s={id:Ve(i),multiaddrs:[o]};this.list.push(s)}this._init=t}[Zo]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[Se]=["@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(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??lC]:{value:this._init.tagValue??uC,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.id,t)})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function sy(r){return e=>new m3(e,r)}var qc;(function(r){let e;r.codec=()=>(e==null&&(e=re((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:se(0),payloadType:se(0),payload:se(0),signature:se(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)=>ee(t,r.codec(),n)})(qc||(qc={}));var tf=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var vr=class r{static createFromProtobuf=async e=>{let t=qc.decode(e),n=nt(t.publicKey);return new r({publicKey:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t)=>{if(t==null)throw new Error("Missing private key");let n=e.domain,o=e.codec,i=e.marshal(),s=ay(n,o,i),a=await t.sign(s.subarray());return new r({publicKey:t.publicKey,payloadType:o,payload:i,signature:a})};static openAndCertify=async(e,t)=>{let n=await r.createFromProtobuf(e);if(!await n.validate(t))throw new tf("Envelope signature is not valid for the given domain");return n};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=qc.encode({publicKey:Mt(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return ne(this.marshal(),e.marshal())}async validate(e){let t=ay(e,this.payloadType,this.payload);return this.publicKey.verify(t.subarray(),this.signature)}},ay=(r,e,t)=>{let n=N(r),o=Re(n.byteLength),i=Re(e.length),s=Re(t.length);return new ce(o,n,i,e,s,t)};function cy(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 ly="libp2p-peer-record",uy=Uint8Array.from([3,1]);var zc;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=re((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:se(0)},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.multiaddr=i.bytes();break}default:{i.skipType(u&7);break}}}return c})),o),n.encode=i=>te(i,n.codec()),n.decode=(i,s)=>ee(i,n.codec(),s)})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=re((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:se(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 Ue('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)=>ee(n,r.codec(),o)})(zc||(zc={}));var Xt=class r{static createFromProtobuf=e=>{let t=zc.decode(e),n=st(Ae(t.peerId)),o=(t.addresses??[]).map(s=>$(s.multiaddr)),i=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:i})};static DOMAIN=ly;static CODEC=uy;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=zc.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||!cy(this.multiaddrs,e.multiaddrs))}};var g3=1e3,dy=60*g3,fy=290;var tJ=2*60*dy,hy=1,rf=2e3,py=100;var Wc=`${so}-circuit-relay`,rJ=`${so}-circuit-relay-source`,nJ=2*dy,oJ=BigInt(1<<17),Ki="/libp2p/circuit/relay/0.2.0/hop",y3="/libp2p/circuit/relay/0.2.0/stop",iJ=30*g3,sJ=30*g3,w3=300,my=4096,gy=.001;var Ko;(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=()=>He(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=re((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),ta.codec().encode(o.peer,i)),o.reservation!=null&&(i.uint32(26),nf.codec().encode(o.reservation,i)),o.limit!=null&&(i.uint32(34),ra.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(40),At.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=ta.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.reservation=nf.codec().decode(o,o.uint32(),{limits:s.limits?.reservation});break}case 4:{a.limit=ra.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 5:{a.status=At.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>te(o,r.codec()),r.decode=(o,i)=>ee(o,r.codec(),i)})(Ko||(Ko={}));var kn;(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=()=>He(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=re((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),ta.codec().encode(o.peer,i)),o.limit!=null&&(i.uint32(26),ra.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(32),At.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=ta.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.limit=ra.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 4:{a.status=At.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>te(o,r.codec()),r.decode=(o,i)=>ee(o,r.codec(),i)})(kn||(kn={}));var ta;(function(r){let e;r.codec=()=>(e==null&&(e=re((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:se(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 Ue('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)=>ee(t,r.codec(),n)})(ta||(ta={}));var nf;(function(r){let e;r.codec=()=>(e==null&&(e=re((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),sf.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 Ue('Decode error - map field "addrs" had too many elements');i.addrs.push(t.bytes());break}case 3:{i.voucher=sf.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)=>ee(t,r.codec(),n)})(nf||(nf={}));var ra;(function(r){let e;r.codec=()=>(e==null&&(e=re((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)=>ee(t,r.codec(),n)})(ra||(ra={}));var At;(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"})(At||(At={}));var b3;(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"})(b3||(b3={}));(function(r){r.codec=()=>He(b3)})(At||(At={}));var of;(function(r){let e;r.codec=()=>(e==null&&(e=re((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:se(0),peer:se(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)=>ee(t,r.codec(),n)})(of||(of={}));var sf;(function(r){let e;r.codec=()=>(e==null&&(e=re((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),of.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:se(0),payloadType:se(0),signature:se(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=of.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)=>ee(t,r.codec(),n)})(sf||(sf={}));var Gc=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},af=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},cf=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function x3(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var Qc=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}},lf=Pe(ge(jd.matchers[0],pe("p2p-circuit"))),uf=Pe(pe("p2p-circuit"));function v3(r){let{stream:e,remoteAddr:t,logger:n,onDataRead:o,onDataWrite:i}=r,s=n.forComponent("libp2p:stream:converter"),a=!1,c=!1,l=e.close.bind(e);e.close=async p=>{await l(p),h(!0)};let u=e.abort.bind(e);e.abort=p=>{u(p),h(!0)};let d=e.sink.bind(e);e.sink=async p=>{try{await d(ft(p,g=>Ii(g,m=>i?.(m))))}catch(g){g.type!=="aborted"&&s.error("%s error in sink",t,g)}finally{c=!0,h()}};let f={log:s,sink:e.sink,source:async function*(){try{for await(let p of e.source)o?.(p),yield p}finally{a=!0,h()}}(),remoteAddr:t,timeline:{open:Date.now(),close:void 0},close:e.close,abort:e.abort};function h(p){p===!0&&(a=!0,c=!0),a&&c&&f.timeline.close==null&&(f.timeline.close=Date.now())}return f}var df=class extends me{peerStore;registrar;connectionManager;randomWalk;started;running;topologyId;log;discoveryController;filter;queue;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.started=!1,this.running=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.connectionManager=e.connectionManager,this.randomWalk=e.randomWalk,this.filter=t.filter,this.discoveryController=new AbortController,this.discoveryController.signal}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(Ki,{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.registrar.unregister(this.topologyId),this.discoveryController?.abort(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,this.discoveryController.signal,Promise.resolve().then(async()=>{this.log("searching peer store for relays");let e=await this.peerStore.all({filters:[n=>n.protocols.includes(Ki)],orders:[()=>Math.random()<.5?1:-1,(n,o)=>{let i=yy(n),s=yy(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 wt({concurrency:5});this.log("start random walk");for await(let n of this.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.connectionManager.getConnections(n.id)?.length>0){this.log.trace("random peer %p was already connected",n.id);continue}if(!await this.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(async()=>{let o=le([this.discoveryController.signal,AbortSignal.timeout(5e3)]);try{await this.connectionManager.openConnection(n.id,{signal:o})}finally{o.clear()}},{peerId:n.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to random peer %p",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)}))}stopDiscovery(){this.log("stop discovery"),this.running=!1,this.discoveryController?.abort()}};function yy(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(U(e)).getTime()}var E3=class extends me{peerId;connectionManager;addressManager;reservationStore;listeningAddrs;log;listenTimeout;reservationId;relay;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:listener"),this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.addressManager=e.addressManager,this.reservationStore=e.reservationStore,this.listeningAddrs=[],this.listenTimeout=t.listenTimeout??rf,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(this.log("listen on %a",e),uf.exactMatch(e))this.reservationId=this.reservationStore.reserveRelay();else if(lf.exactMatch(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 ei(`Could not listen on p2p-circuit address "${e}"`)}getAddrs(){return[...this.listeningAddrs.values()].flat()}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=>$(t).encapsulate("/p2p-circuit")),this.listeningAddrs.forEach(t=>{this.addressManager.confirmObservedAddr(t,{type:"transport"})}),queueMicrotask(()=>{this.safeDispatchEvent("listening")})}};function wy(r){return new E3(r)}var by="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var xy=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=by[t[r]&63];return e};var fC=60*1e3*10,hC=60*1e3*5,pC=30*1e3,ff=class extends me{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 pt,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??py,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??rf,this.started=!1,this.relayFilter=or(100),this.reserveQueue=new wt({concurrency:t?.reservationConcurrency??hy,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(Wc)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[Wc]: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(e)})}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}reserveRelay(){let e=xy();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 ei("Cannot use self as relay");if(this.reserveQueue.size>this.maxReservationQueueLength)throw new cf("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 ei("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 p=this.connectionManager.getConnections(e),g=!1;if(p.length===0&&this.log("already have relay reservation with %p but we are no longer connected",e),p.map(m=>m.id).includes(i.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),g=!0),g&&x3(i.reservation.expire)>fC)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 Gc("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(sr.matches(a.remoteAddr))throw new af("not creating reservation over relayed connection");let c=await this.#e(a,{signal:s}),l=x3(c.expire);this.log("created reservation on relay peer %p, expiry date is %s",e,new Date(Date.now()+l).toString());let u=Math.min(Math.max(l-hC,pC),Math.pow(2,31)-1),d=setTimeout(()=>{this.log("refresh reservation to relay %p",e),this.addRelay(e,t).catch(async p=>{this.log.error("could not refresh reservation to relay %p - %e",e,p),await this.#t(e)}).catch(p=>{this.log.error("could not remove expired reservation to relay %p - %e",e,p)})},u),f;if(t==="discovered"){let p=this.pendingReservations.pop();if(p==null)throw new Gc("Made reservation on relay but did not need any more discovered relays");f={timeout:d,reservation:c,type:t,connection:a.id,id:p}}else f={timeout:d,reservation:c,type:t,connection:a.id};this.reservations.set(e,f),await this.peerStore.merge(e,{tags:{[Wc]:{value:1,ttl:l}}}),this.#r();let h={relay:e,details:f};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(Ki,t),i=We(n).pb(Ko);this.log.trace("send RESERVE to %p",e.remotePeer),await i.write({type:Ko.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 %o",s),s.status===At.OK&&s.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of s.reservation.addrs){let u=$(l);u.getPeerId()==null&&(u=u.encapsulate(`/p2p/${e.remotePeer}`)),u=$(u.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(u.toString())}return s.reservation.addrs=[...c].map(l=>$(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:{[Wc]: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=or(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var mC=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach($)}catch{return!1}return!0},S3={maxInboundStopStreams:w3,maxOutboundStopStreams:w3,stopTimeout:3e4},hf=class{discovery;registrar;peerStore;connectionManager;transportManager;peerId;upgrader;addressManager;connectionGater;reservationStore;logger;maxInboundStopStreams;maxOutboundStopStreams;stopTimeout;started;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.registrar=e.registrar,this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.logger=e.logger,this.peerId=e.peerId,this.upgrader=e.upgrader,this.addressManager=e.addressManager,this.connectionGater=e.connectionGater,this.maxInboundStopStreams=t.maxInboundStopStreams??S3.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??S3.maxOutboundStopStreams,this.stopTimeout=t.stopTimeout??S3.stopTimeout,this.discovery=new df(e,{filter:t.discoveryFilter??j2(my,gy)}),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",n.detail,o)})}),this.reservationStore=new ff(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}[Symbol.toStringTag]="@libp2p/circuit-relay-v2-transport";[Se]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[fr](){return this.discovery!=null?["@libp2p/identify"]:[]}[co]=!0;isStarted(){return this.started}async start(){await this.registrar.handle(y3,e=>{this.onStop(e).catch(t=>{this.log.error("error while handling STOP protocol",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await yt(this.discovery,this.reservationStore),this.started=!0}async stop(){await Rt(this.discovery,this.reservationStore),await this.registrar.unhandle(y3),this.started=!1}async dial(e,t){if(e.protoCodes().filter(h=>h===fy).length!==1){let h="Invalid circuit relay address";throw this.log.error(h,e),new Ln(h)}let n=e.toString().split("/p2p-circuit"),o=$(n[0]),i=$(n[n.length-1]),s=o.getPeerId(),a=i.getPeerId();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 Ln(`C${h}`)}let c=Ve(s),l=Ve(a),d=this.connectionManager.getConnections(c)[0];d==null?(await this.peerStore.merge(c,{multiaddrs:[o]}),t.onProgress?.(new W("circuit-relay:open-connection")),d=await this.connectionManager.openConnection(c,t)):t.onProgress?.(new W("circuit-relay:reuse-connection"));let f;try{t.onProgress?.(new W("circuit-relay:open-hop-stream")),f=await d.newStream(Ki,t);let h=We(f),p=h.pb(Ko);t.onProgress?.(new W("circuit-relay:write-connect-message")),await p.write({type:Ko.Type.CONNECT,peer:{id:l.toMultihash().bytes,addrs:[$(i).bytes]}},t),t.onProgress?.(new W("circuit-relay:read-connect-response"));let g=await p.read(t);if(g.status!==At.OK)throw new he(`failed to connect via relay with status ${g?.status?.toString()??"undefined"}`);let m=new Qc(g.limit),y=v3({stream:h.unwrap(),remoteAddr:e,localAddr:o.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`),logger:this.logger,onDataRead:m.onData,onDataWrite:m.onData});return this.log("new outbound relayed connection %a",y.remoteAddr),await this.upgrader.upgradeOutbound(y,{...t,limits:m.getLimits()})}catch(h){throw this.log.error("circuit relay dial to destination %p via relay %p failed",l,c,h),f?.abort(h),h}}createListener(e){return wy({peerId:this.peerId,connectionManager:this.connectionManager,addressManager:this.addressManager,reservationStore:this.reservationStore,logger:this.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>lf.exactMatch(t)||uf.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>sr.exactMatch(t))}async onStop({connection:e,stream:t}){if(!this.reservationStore.hasReservation(e.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.transportManager.listen([e.remoteAddr.encapsulate("/p2p-circuit")])}catch(d){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on",d)}let n=AbortSignal.timeout(this.stopTimeout),o=We(t).pb(kn),i=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",e.remotePeer,i.type),i?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",e.remotePeer),await o.write({type:kn.Type.STATUS,status:At.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(i.type!==kn.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:kn.Type.STATUS,status:At.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!mC(i)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:kn.Type.STATUS,status:At.MALFORMED_MESSAGE},{signal:n}),await t.close();return}let s=st(Ae(i.peer.id));if(await this.connectionGater.denyInboundRelayedConnection?.(e.remotePeer,s)===!0){this.log.error("connection gater denied inbound relayed connection from %p",e.remotePeer),await o.write({type:kn.Type.STATUS,status:At.PERMISSION_DENIED},{signal:n}),await t.close();return}this.log.trace("sending success response to %p",e.remotePeer),await o.write({type:kn.Type.STATUS,status:At.OK},{signal:n});let a=new Qc(i.limit),c=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${s.toString()}`),l=this.addressManager.getAddresses()[0],u=v3({stream:o.unwrap().unwrap(),remoteAddr:c,localAddr:l,logger:this.logger,onDataRead:a.onData,onDataWrite:a.onData});this.log("new inbound relayed connection %a",u.remoteAddr),await this.upgrader.upgradeInbound(u,{limits:a.getLimits()}),this.log("%s connection %a upgraded","inbound",u.remoteAddr)}};function A3(r={}){return e=>new hf(e,r)}var vy=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},gC=new WeakMap;function yC({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(vy());let i,s,a,c=r??clearTimeout,l=()=>{c(i),a(vy())},u=()=>{o&&o.removeEventListener("abort",l)},d=new Promise((f,h)=>{s=()=>{u(),f(n)},a=h,i=(e??setTimeout)(s,t)});return o&&o.addEventListener("abort",l,{once:!0}),gC.set(d,()=>{c(i),i=null,s()}),d}}var wC=yC(),pf=wC;var ln;(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=()=>He(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=re((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 Ue('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)=>ee(o,r.codec(),i)})(ln||(ln={}));function I3(r,e){return sr.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:_c.matches(r)?!0:h7.matches(r)?Yt(r.toOptions().host)===!1:!1}var Ey=1024*4,Sy=100,mf={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},gf=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??mf.timeout,this.retries=t.retries??mf.retries,this.maxInboundStreams=t.maxInboundStreams??mf.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??mf.maxOutboundStreams}[Symbol.toStringTag]="@libp2p/dcutr";[fr]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Yc,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{sr.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(Yc,e=>{this.handleIncomingUpgrade(e.stream,e.connection).catch(t=>{this.log.error("error during incoming DCUtR attempt",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(Yc),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([Yc],{signal:o.signal,runOnLimitedConnection:!0});let i=We(t,{maxDataLength:Ey}).pb(ln);this.log("B sending connect to %p",e.remotePeer);let s=Date.now();await i.write({type:ln.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(d=>d.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await i.read(o);if(a.type!==ln.Type.CONNECT)throw this.log("A sent wrong message type"),new he("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 he("DCUtR connect message had no multiaddrs");let l=Date.now()-s;this.log("A sending sync, rtt %dms",l),await i.write({type:ln.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await pf(l/2),this.log("B dialing",c);let u=await this.connectionManager.openConnection(c,{signal:o.signal,priority:Sy,force:!0,initiator:!1});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,u.remoteAddr),await e.close(o);break}catch(i){if(this.log.error("error while attempting DCUtR on attempt %d of %d",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.getPeerId()==null?i.encapsulate(`/p2p/${e.remotePeer}`):i}).filter(o=>I3(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(sr.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.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)};try{let o=We(e,{maxDataLength:Ey}).pb(ln);this.log("A receiving connect");let i=await o.read(n);if(i.type!==ln.Type.CONNECT)throw this.log("B sent wrong message type"),new he("DCUtR message type was incorrect");if(i.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new he("DCUtR connect message had no multiaddrs");let s=this.getDialableMultiaddrs(i.observedAddresses);if(s.length===0)throw this.log("B had no dialable multiaddrs"),new he("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await o.write({type:ln.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==ln.Type.SYNC)throw new he("DCUtR message type was incorrect");this.log("A dialing",s);let c=await this.connectionManager.openConnection(s,{signal:n.signal,priority:Sy,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n)}catch(o){this.log.error("incoming DCUtR from %p failed",t.remotePeer,o),e.abort(o)}finally{await e.close(n)}}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let o=$(n);if(!I3(o,this.transportManager))continue;t.push(o)}catch{}return t}};var Yc="/libp2p/dcutr";function Ay(r={}){return e=>new gf(e,r)}var yf=globalThis.CustomEvent??Event;async function*un(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered==null?!1:e.ordered,o=new EventTarget,i=[],s=J(),a=J(),c=!1,l,u=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let p of r){if(i.length===t&&(s=J(),await s.promise),u)break;let g={done:!1};i.push(g),p().then(m=>{g.done=!0,g.ok=!0,g.value=m,o.dispatchEvent(new yf("task-complete"))},m=>{g.done=!0,g.err=m,o.dispatchEvent(new yf("task-complete"))})}c=!0,o.dispatchEvent(new yf("task-complete"))}catch(p){l=p,o.dispatchEvent(new yf("task-complete"))}});function d(){return n?i[0]?.done:!!i.find(p=>p.done)}function*f(){for(;i.length>0&&i[0].done;){let p=i[0];if(i.shift(),p.ok)yield p.value;else throw u=!0,s.resolve(),p.err;s.resolve()}}function*h(){for(;d();)for(let p=0;p<i.length;p++)if(i[p].done){let g=i[p];if(i.splice(p,1),p--,g.ok)yield g.value;else throw u=!0,s.resolve(),g.err;s.resolve()}}for(;;){if(d()||(a=J(),await a.promise),l!=null)throw l;if(n?yield*f():yield*h(),c&&i.length===0)break}}var Iy="0.1.0",Ty="id",_y="id/push",Cy="1.0.0",ky="1.0.0";var Ho;(function(r){let e;r.codec=()=>(e==null&&(e=re((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 Ue('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 Ue('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)=>ee(t,r.codec(),n)})(Ho||(Ho={}));var ur={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function Py(r){if(r!=null&&r.length>0)try{return $(r)}catch{}}function vC(r,e){return e??r.userAgent}async function wf(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new he("message was null or undefined");let i={};if(o.listenAddrs.length>0&&(i.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:$(c)}))),o.protocols.length>0&&(i.protocols=o.protocols),o.publicKey!=null){let c=nt(o.publicKey);if(!Sn(c).equals(n.remotePeer))throw new he("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 vr.openAndCertify(c,Xt.DOMAIN),u=Xt.createFromProtobuf(l.payload),d=An(l.publicKey.toCID());if(!u.peerId.equals(d))throw new he("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(u.peerId))throw new he("signing key does not match remote PeerId");let f;try{f=await r.get(u.peerId)}catch(h){if(h.name!=="NotFoundError")throw h}if(f!=null&&(i.metadata=f.metadata,f.peerRecordEnvelope!=null)){let h=await vr.createFromProtobuf(f.peerRecordEnvelope),p=Xt.createFromProtobuf(h.payload);p.seqNumber>=u.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",p.seqNumber,u.seqNumber),u=p,c=f.peerRecordEnvelope)}i.peerRecordEnvelope=c,i.addresses=u.multiaddrs.map(h=>({isCertified:!0,multiaddr:h})),s={seq:u.seqNumber,addresses:u.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=N(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=N(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=>$(c)),observedAddr:o.observedAddr==null?void 0:$(o.observedAddr),protocols:o.protocols,signedPeerRecord:s,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var na=class{host;protocol;started;timeout;peerId;privateKey;peerStore;registrar;addressManager;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;events;runOnLimitedConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.peerId=e.peerId,this.privateKey=e.privateKey,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.events=e.events,this.log=t.log,this.timeout=t.timeout??ur.timeout,this.maxInboundStreams=t.maxInboundStreams??ur.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??ur.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??ur.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??ur.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??ur.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??ur.protocolPrefix}/${Iy}`,agentVersion:vC(e.nodeInfo,t.agentVersion)}}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:N(this.host.agentVersion),ProtocolVersion:N(this.host.protocolVersion)}}),await this.registrar.handle(this.protocol,e=>{this.handleProtocol(e).catch(t=>{this.log.error(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0)}async stop(){await this.registrar.unhandle(this.protocol),this.started=!1}};var bf=class extends na{connectionManager;concurrency;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??ur.protocolPrefix}/${_y}/${ky}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??ur.concurrency,(t.runOnSelfUpdate??ur.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error(o)})})}[Se]=["@libp2p/identify-push"];async push(){if(!this.isStarted())return;let e=this.addressManager.getAddresses().map(u=>u.decapsulateCode(Z("p2p").code)),t=new Xt({peerId:this.peerId,multiaddrs:e}),n=await vr.seal(t,this.privateKey),o=this.registrar.getProtocols(),i=await this.peerStore.get(this.peerId),s=U(i.metadata.get("AgentVersion")??N(this.host.agentVersion)),a=U(i.metadata.get("ProtocolVersion")??N(this.host.protocolVersion)),c=this;async function*l(){for(let u of c.connectionManager.getConnections())(await c.peerStore.get(u.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let f,h=AbortSignal.timeout(c.timeout);try{f=await u.newStream(c.protocol,{signal:h,runOnLimitedConnection:c.runOnLimitedConnection}),await We(f,{maxDataLength:c.maxMessageSize}).pb(Ho).write({listenAddrs:e.map(g=>g.bytes),signedPeerRecord:n.marshal(),protocols:o,agentVersion:s,protocolVersion:a},{signal:h}),await f.close({signal:h})}catch(p){c.log.error("could not push identify update to peer",p),f?.abort(p)}})}await Lt(un(l(),{concurrency:this.concurrency}))}async handleProtocol(e){let{connection:t,stream:n}=e;try{if(this.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let o={signal:AbortSignal.timeout(this.timeout)},s=await We(n,{maxDataLength:this.maxMessageSize}).pb(Ho).read(o);await n.close(o),await wf(this.peerStore,this.events,this.log,t,s)}catch(o){this.log.error("received invalid message",o),n.abort(o);return}this.log.trace("handled push from %p",t.remotePeer)}};var EC=41,xf=class extends na{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??ur.protocolPrefix}/${Ty}/${Cy}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??ur.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(i=>{i.name!==Dn.name&&this.log.error("error during identify trigged by connection:open",i)})})}[Se]=["@libp2p/identify"];async _identify(e,t={}){let n;if(t.signal==null){let o=AbortSignal.timeout(this.timeout);t={...t,signal:o}}try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let i=await We(n,{maxDataLength:this.maxMessageSize}).pb(Ho).read(t);return await n.close(t),i}catch(o){throw n?.abort(o),o}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:i,observedAddr:s}=n;if(o==null)throw new he("public key was missing from identify message");let a=nt(o),c=An(a.toCID());if(!e.remotePeer.equals(c))throw new he("identified peer does not match the expected peer");if(this.peerId.equals(c))throw new he("identified peer is our own peer id?");return this.maybeAddObservedAddress(s),this.log("identify completed for peer %p and protocols %o",c,i),wf(this.peerStore,this.events,this.log,e,n)}maybeAddObservedAddress(e){let t=Py(e);if(t==null)return;if(this.log.trace("our observed address was %a",t),Br(t)){this.log.trace("our observed address was private");return}if(t.stringTuples()[0][0]===EC&&!Y1(t)){this.log.trace("our observed address was IPv6 but not a global unicast address");return}ki.exactMatch(t)||(this.log.trace("storing the observed address"),this.addressManager.addObservedAddr(t))}async handleProtocol(e){let{connection:t,stream:n}=e,o=AbortSignal.timeout(this.timeout);try{let i=await this.peerStore.get(this.peerId),s=this.addressManager.getAddresses().map(u=>u.decapsulateCode(Z("p2p").code)),a=i.peerRecordEnvelope;if(s.length>0&&a==null){let u=new Xt({peerId:this.peerId,multiaddrs:s});a=(await vr.seal(u,this.privateKey)).marshal().subarray()}let c=t.remoteAddr.bytes;f7.matches(t.remoteAddr)||(c=void 0),await We(n).pb(Ho).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:Mt(this.privateKey.publicKey),listenAddrs:s.map(u=>u.bytes),signedPeerRecord:a,observedAddr:c,protocols:i.protocols},{signal:o}),await n.close({signal:o})}catch(i){this.log.error("could not respond to identify request",i),n.abort(i)}}};function Ry(r={}){return e=>new xf(e,r)}function Dy(r={}){return e=>new bf(e,r)}var oa=1e3,T3=60*oa,vf=60*T3,Ly=36*vf,Ny="/ipfs/kad/1.0.0",By=48*vf;var Oy=24*vf,My=10,Uy=16384,Fy=vf,bte=10*oa;var Ef=20,ia=3,Vy=5*T3,$y=oa,Ky=5*oa,Hy=5*T3,qy=30*oa,zy=180*oa,_3=`${so}-kad-dht`;var Xc;(function(r){let e;r.codec=()=>(e==null&&(e=re((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:se(0),value:se(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)=>ee(t,r.codec(),n)})(Xc||(Xc={}));function Wy(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 Gy(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 It=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 Xc.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:Wy(this.timeReceived)}}static deserialize(e){let t=Xc.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=Gy(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 qo=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},Sf=class extends Error{constructor(e="Query aborted"){super(e),this.name="QueryAbortedError"}},Af=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},If=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var Qy;(function(r){let e;r.codec=()=>(e==null&&(e=re((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)=>ee(t,r.codec(),n)})(Qy||(Qy={}));var be;(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"})(be||(be={}));var Tf;(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"})(Tf||(Tf={}));(function(r){r.codec=()=>He(Tf)})(be||(be={}));var aa;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(aa||(aa={}));var C3;(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"})(C3||(C3={}));(function(r){r.codec=()=>He(C3)})(aa||(aa={}));var sa;(function(r){let e;r.codec=()=>(e==null&&(e=re((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),aa.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:se(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 Ue('Decode error - map field "multiaddrs" had too many elements');i.multiaddrs.push(t.bytes());break}case 3:{i.connection=aa.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(sa||(sa={}));var io;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&Tf[t.type]!==0&&(n.uint32(8),be.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),sa.codec().encode(i,n);if(t.providers!=null)for(let i of t.providers)n.uint32(74),sa.codec().encode(i,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={type:be.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=be.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 Ue('Decode error - map field "closer" had too many elements');i.closer.push(sa.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 Ue('Decode error - map field "providers" had too many elements');i.providers.push(sa.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)=>ee(t,r.codec(),n)})(io||(io={}));function k3(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 jc(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 _f(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function Er(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function P3(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function Zc(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function R3(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function Yy(r,e,t){if(t.length===0)throw new k("No records given");let o=U(e).split("/");if(o.length<3)throw new k("Record key does not have a selector function");let i=r[o[1].toString()];if(i==null)throw new If(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:i(e,t)}function AC(r,e){return 0}var Xy={pk:AC};async function ca(r,e){let t=e.key,o=U(t).split("/");if(o.length<3)return;let i=r[o[1].toString()];if(i==null)throw new k(`No validator available for key type "${o[1]}"`);await i(t,e.value)}var IC=async(r,e)=>{if(!(r instanceof Uint8Array))throw new k('"key" must be a Uint8Array');if(r.byteLength<5)throw new k("Invalid public key record");if(U(r.subarray(0,4))!=="/pk/")throw new k("key was not prefixed with /pk/");let n=nt(e),o=r.slice(4);if(!ne(o,n.toMultihash().bytes))throw new k("public key does not match passed in key")},jy={pk:IC};var TC=N("/pk/");function Zy(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>{let[[t,n]]=e.stringTuples();if(t===53||t===54||t===55)return n!=="localhost";if(t!==4&&t!==6||n==null)return!1;let o=Yt(n);return o==null?!0:!o})}}async function zo(r){return(await Qe.digest(r)).digest}async function Tt(r){return zo(r.toMultihash().bytes)}function Wo(r,e){return new Le(`${r}/${U(e,"base32")}`,!1)}function Jy(r){return Ce([TC,r.toMultihash().bytes])}function ew(r){return U(r.subarray(0,4))==="/pk/"}function tw(r){let e=Ae(r.subarray(4));return st(e)}function D3(r,e){let t=new Date;return new It(r,e,t).serialize()}var _C=290,CC=54,kC=55,PC=56,RC=4,DC=41;function rw(r){let e=r.stringTuples();for(let t of e)if(t[0]===_C)return!1;if(e[0][0]===CC||e[0][0]===kC||e[0][0]===PC)return!0;if(e[0][0]===RC||e[0][0]===DC){let t=Yt(`${e[0][1]}`);return t==null||!t}return!1}function Cf(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:X.createV1(ni,Ae(N(n,"base32"))),peerId:Ve(t)}}function kf(r,e,t){let n=typeof e=="string"?e:U(e.multihash.bytes,"base32"),o=[r,n];return t!=null&&o.push(t.toString()),new Le(o.join("/"))}function Pf(r){return new Date(bt(r))}function Hi(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 Rf(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 Df=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){this.log("getLocal %b",e);let t=Wo(this.datastorePrefix,e);this.log("fetching record for key %k",t);let n=await this.components.datastore.get(t);this.log("found %k in local datastore",t);let o=It.deserialize(n);return await ca(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o={}){this.log("sendCorrection for %b",e);let i=D3(e,n);for(let{value:s,from:a}of t){if(ne(s,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let u=Wo(this.datastorePrefix,e);this.log(`Storing corrected record for key ${u.toString()}`),await this.components.datastore.put(u,i.subarray())}catch(u){this.log.error("Failed error correcting self",u)}continue}let c=!1,l={type:be.PUT_VALUE,key:e,record:i};for await(let u of this.network.sendRequest(a,l,o))u.name==="PEER_RESPONSE"&&u.record!=null&&ne(u.record.value,It.deserialize(i).value)&&(c=!0),yield u;c||(yield Er({from:a,error:new qo("Value not put correctly")},o)),this.log.error("Failed error correcting entry")}}async*put(e,t,n={}){this.log("put key %b value %b",e,t);let o=D3(e,t),i=Wo(this.datastorePrefix,e);this.log(`storing record for key ${i.toString()}`),await this.components.datastore.put(i,o.subarray()),yield*ft(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),s=>Jt(s,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:be.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let u of this.network.sendRequest(a.peer.id,l,n))c.push(u),u.name==="PEER_RESPONSE"&&(u.record!=null&&ne(u.record.value,It.deserialize(o).value)||c.push(Er({from:a.peer.id,error:new qo("Value not put correctly")},n)));return c}),s=>un(s,{ordered:!1,concurrency:ia}),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))a.name==="VALUE"&&n.push(a),yield a;if(n.length===0)return;let o=n.map(a=>a.value),i=0;try{i=Yy(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 Oe("Best value was not found");yield*this.sendCorrectionRecord(e,n,s,t),yield n[i]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let i=await this.getLocal(e);yield Zc({value:i.value,from:this.components.peerId},t)}catch(i){this.log("error getting local value for %b",e,i)}let n=this,o=async function*({peer:i,signal:s}){for await(let a of n.peerRouting.getValueOrPeers(i,e,{...t,signal:s}))yield a,a.name==="PEER_RESPONSE"&&a.record!=null&&(yield Zc({from:i,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function nw(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function Jc(r){if(r.id==null)throw new Error("Invalid peer in message");let e=Ae(r.id);return{id:st(e),multiaddrs:(r.multiaddrs??[]).map(t=>$(t))}}var Lf=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,u)=>(l.name==="PROVIDER"&&(u.providers??=[],u.providers.push(...l.providers.map(d=>d.id.toString()))),u)})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.kadDHT.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PEER_RESPONSE"&&l.messageName==="ADD_PROVIDER"&&(u.providers??=[],u.providers.push(l.from.toString())),u)})??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);let i={type:be.ADD_PROVIDER,key:o,providers:[nw({id:this.components.peerId,multiaddrs:t})]},s=0,a=c=>async()=>{if(c.name!=="FINAL_PEER")return[c];let l=[];this.log("putProvider %s to %p",e,c.peer.id);try{this.log("sending provider record for %s to %p",e,c.peer.id);for await(let u of this.network.sendMessage(c.peer.id,i,n))u.name==="PEER_RESPONSE"&&(this.log("sent provider record for %s to %p",e,c.peer.id),s++),l.push(u)}catch(u){this.log.error("error sending provide record to peer %p",c.peer.id,u),l.push(Er({from:c.peer.id,error:u},n))}return l};yield*ft(this.peerRouting.getClosestPeers(o,n),c=>Jt(c,l=>a(l)),c=>un(c,{ordered:!1,concurrency:ia}),async function*(c){for await(let l of c)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);if(a.length>0){let u=[];for(let d of a.slice(0,n))try{let f=await this.components.peerStore.get(d);u.push({id:d,multiaddrs:f.addresses.map(({multiaddr:h})=>h)})}catch(f){if(f.name!=="NotFoundError")throw f;this.log("no peer store entry for %p",d)}if(yield jc({from:this.components.peerId,messageType:be.GET_PROVIDERS,providers:u},t),yield P3({from:this.components.peerId,providers:u},t),o+=u.length,o>=n)return}let c=async function*({peer:u,signal:d}){let f={type:be.GET_PROVIDERS,key:i};yield*s.network.sendRequest(u,f,{...t,signal:d})},l=new Gt(a);for await(let u of this.queryManager.run(i,c,t))if(yield u,u.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",u.providers.length,e,u.closer.length);let d=[];for(let f of u.providers)l.has(f.id)||(l.add(f.id),d.push(f));if(d.length>0&&(yield P3({from:u.from,providers:d},t),o+=d.length,o>=n))return}}};var la=class{movingAverage;variance;deviation;forecast;timespan;previousTime;constructor(e){this.timespan=e,this.movingAverage=0,this.variance=0,this.deviation=0,this.forecast=0}alpha(e,t){return 1-Math.exp(-(e-t)/this.timespan)}push(e,t=Date.now()){if(this.previousTime!=null){let n=this.alpha(t,this.previousTime),o=e-this.movingAverage,i=n*o;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+o*i),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*o}else this.movingAverage=e;this.previousTime=t}};var NC=1.2,BC=2,OC=2e3,dn=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;constructor(e={}){this.success=new la(e.interval??5e3),this.failure=new la(e.interval??5e3),this.next=new la(e.interval??5e3),this.failureMultiplier=e.failureMultiplier??BC,this.timeoutMultiplier=e.timeoutMultiplier??NC,this.minTimeout=e.minTimeout??OC,e.metricName!=null&&(this.metric=e.metrics?.registerMetricGroup(e.metricName))}getTimeoutSignal(e={}){let t=Math.max(Math.round(this.next.movingAverage*(e.timeoutFactor??this.timeoutMultiplier)),this.minTimeout),n=AbortSignal.timeout(t),o=le([e.signal,n]);return o.start=Date.now(),o.timeout=t,o}cleanUp(e){let t=Date.now()-e.start;e.aborted?(this.failure.push(t),this.next.push(t*this.failureMultiplier),this.metric?.update({failureMovingAverage:this.failure.movingAverage,failureDeviation:this.failure.deviation,failureForecast:this.failure.forecast,failureVariance:this.failure.variance,failure:t})):(this.success.push(t),this.next.push(t),this.metric?.update({successMovingAverage:this.success.movingAverage,successDeviation:this.success.deviation,successForecast:this.success.forecast,successVariance:this.success.variance,success:t}))}};var Nf=class extends me{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 dn({...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 k("Message type was missing");this.log("sending %s to %p",t.type,e),yield R3({peer:e},n),yield k3({to:e,type:o},n);let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),i=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n);let c=await this._writeReadMessage(i,t,n);i.close(n).catch(l=>{this.log.error("error closing stream to %p",e,l),i?.abort(l)}),yield jc({from:e,messageType:c.type,closer:c.closer.map(Jc),providers:c.providers.map(Jc),record:c.record==null?void 0:It.deserialize(c.record)},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 Er({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async*sendMessage(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new k("Message type was missing");this.log("sending %s to %p",t.type,e),yield R3({peer:e},n),yield k3({to:e,type:o},n);let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),i=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n),await this._writeMessage(i,t,n),i.close(n).catch(c=>{this.log.error("error closing stream to %p",e,c),i?.abort(c)}),yield jc({from:e,messageType:o},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),yield Er({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async _writeMessage(e,t,n){await We(e).write(t,io,n)}async _writeReadMessage(e,t,n){let o=We(e);await o.write(t,io,n);let i=await o.read(io,n);return i.closer.forEach(s=>{this.safeDispatchEvent("peer",{detail:Jc(s)})}),i.providers.forEach(s=>{this.safeDispatchEvent("peer",{detail:Jc(s)})}),i}};function Go(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 Qo=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.map(e=>e.peer)}async add(e){let t=await Tt(e.id);this.addWitKadId(e,t)}addWitKadId(e,t){if(this.peerDistances.find(o=>o.peer.id.equals(e.id))!=null)return;let n={peer:e,distance:lr(this.originDhtKey,t)};this.peerDistances.push(n),this.peerDistances.sort((o,i)=>Go(o.distance,i.distance)),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e){if(this.length===0)return!0;let t=await Tt(e),n=lr(t,this.originDhtKey),o=this.peerDistances[this.peerDistances.length-1].distance;return Go(n,o)===-1}async anyCloser(e){return e.length===0?!1:Promise.any(e.map(async t=>this.isCloser(t)))}};var Bf=class{log;routingTable;network;validators;queryManager;peerStore;peerId;constructor(e,t){this.routingTable=t.routingTable,this.network=t.network,this.validators=t.validators,this.queryManager=t.queryManager,this.peerStore=e.peerStore,this.peerId=e.peerId,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){let t,n=await this.routingTable.find(e);if(n!=null){this.log("findPeerLocal found %p in routing table",e);try{t=await this.peerStore.get(n)}catch(o){if(o.name!=="NotFoundError")throw o}}if(t==null)try{t=await this.peerStore.get(e)}catch(o){if(o.name!=="NotFoundError")throw o}if(t!=null)return this.log("findPeerLocal found %p in peer store",e),{id:t.id,multiaddrs:t.addresses.map(o=>o.multiaddr)}}async*_getValueSingle(e,t,n={}){let o={type:be.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=Jy(e);for await(let o of this._getValueSingle(e,n,t))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let i=nt(o.record.value),s=Sn(i);if(!s.equals(e))throw new Rn("public key does not match id");if(s.publicKey==null)throw new Rn("public key missing");yield Zc({from:e,value:o.record.value},t)}throw new qo(`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);if(o!=null){this.log("found local"),yield _f({from:this.peerId,peer:o},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,i=async function*({peer:s,signal:a}){let c={type:be.FIND_NODE,key:e.toMultihash().bytes};for await(let l of o.network.sendRequest(s,c,{...t,signal:a}))if(yield l,l.name==="PEER_RESPONSE"){let u=l.closer.find(d=>d.id.equals(e));u!=null&&(yield _f({from:l.from,peer:u},t))}};for await(let s of this.queryManager.run(e.toMultihash().bytes,i,t))s.name==="FINAL_PEER"&&(n=!0),yield s}n||(yield Er({from:this.peerId,error:new Oe("Not found")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await zo(e),o=this.routingTable.closestPeers(n),i=this,s=new Qo(n,this.routingTable.kBucketSize);await Promise.all(o.map(async c=>{await s.add({id:c,multiaddrs:[]})}));let a=async function*({peer:c,signal:l}){i.log("closerPeersSingle %s from %p",U(e,"base32"),c);let u={type:be.FIND_NODE,key:e};yield*i.network.sendRequest(c,u,{...t,signal:l})};for await(let c of this.queryManager.run(e,a,t))c.name==="PEER_RESPONSE"&&await Promise.all(c.closer.map(async l=>{await s.add(l)})),yield c;this.log("found %d peers close to %b",s.length,e);for(let c of s.peers)yield _f({from:this.peerId,peer:c},t)}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)}catch{let s="invalid record received, discarded";this.log(s),yield Er({from:o.from,error:new qo(s)},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new Af("invalid record received");await ca(this.validators,new It(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=[];try{let c=Ae(e),l=st(c),u=await this.peerStore.get(l);n.push({id:u.id,multiaddrs:u.addresses.map(({multiaddr:d})=>d)})}catch{}let o=await zo(e),i=this.routingTable.closestPeers(o),s=await Tt(t),a=lr(s,o);for(let c of i){let l=await Tt(c),u=lr(l,o);if(Go(u,a)===-1)try{let d=await this.peerStore.get(c);n.push({id:c,multiaddrs:d.addresses.map(({multiaddr:f})=>f)})}catch(d){if(d.name!=="NotFoundError")throw d}}return n.length>0?this.log("getCloserPeersOffline found %d peer(s) closer to %b than %p",n.length,e,t):this.log("getCloserPeersOffline could not find peer closer to %b than %p with %d peers in the routing table",e,t,this.routingTable.size),n}};var Of=class{log;datastore;datastorePrefix;lock;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:providers`),this.datastorePrefix=`${t.datastorePrefix}/provider`,this.datastore=e.datastore,this.lock=t.lock}async addProvider(e,t){let n=await this.lock.readLock();try{this.log("%p provides %s",t,e),await this.writeProviderEntry(e,t)}finally{n()}}async removeProvider(e,t){let n=await this.lock.writeLock();try{let o=kf(this.datastorePrefix,e,t);this.log("%p no longer provides %s",t,e),await this.datastore.delete(o)}finally{n()}}async getProviders(e){let t=await this.lock.readLock();try{this.log("get providers for %c",e);let n=await this.loadProviders(e);return this.log("got %d providers for %c",n.size,e),[...n.keys()]}finally{t()}}async writeProviderEntry(e,t,n=new Date){let o=kf(this.datastorePrefix,e,t),i=Re(n.getTime());await this.datastore.put(o,i)}async loadProviders(e){let t=new pt,n=kf(this.datastorePrefix,e);for await(let o of this.datastore.query({prefix:n.toString()})){let{peerId:i}=Cf(o.key);t.set(i,Pf(o.value))}return t}};async function*ow(r){let{key:e,startingPeer:t,ourPeerId:n,signal:o,query:i,alpha:s,pathIndex:a,numPaths:c,queryFuncTimeout:l,log:u,peersSeen:d,connectionManager:f}=r,h=new Ht({concurrency:s,sort:(m,y)=>Go(m.options.distance,y.options.distance)}),p=await zo(e);function g(m,y){if(m==null)return;d.add(m);let x=lr(y,p);h.add(async()=>{let w=[o];l!=null&&w.push(AbortSignal.timeout(l));let I=le(w);try{for await(let B of i({...r,key:e,peer:m,signal:I,pathIndex:a,numPaths:c})){if(I.aborted)return;if(B.name==="PEER_RESPONSE")for(let D of B.closer){if(d.has(D.id)){u.trace("already seen %p in query",D.id);continue}if(n.equals(D.id)){u("not querying ourselves");continue}if(!await f.isDialable(D.multiaddrs)){u("not querying undialable peer");continue}let R=await Tt(D.id),S=lr(R,p);if(Go(S,x)!==-1){u.trace("skipping %p as they are not closer to %b than %p",D.id,e,m);continue}u.trace("querying closer peer %p",D.id),g(D.id,R)}h.safeDispatchEvent("completed",{detail:B})}}catch(B){if(!o.aborted)return Er({from:m,error:B},r)}finally{I.clear()}},{distance:x}).catch(w=>{u.error(w)})}g(t,await Tt(t));try{for await(let m of h.toGenerator({signal:o}))m!=null&&(yield m)}catch(m){throw o.aborted?new Sf("Query aborted"):m}}var Mf=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??Ef,this.alpha=t.alpha??ia,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,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(zy);n={...n,signal:c}}let o=new AbortController,i=le([this.shutDownController.signal,o.signal,n.signal]);o.signal;let s=this.logger.forComponent(`${this.logPrefix}:query:`+U(e,"base58btc")),a=!1;try{n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(s("waiting for initial query-self query before continuing"),await et(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),s("query:start");let c=await zo(e),l=this.routingTable.closestPeers(c),u=l.slice(0,Math.min(this.disjointPaths,l.length));if(l.length===0){s.error("Running query with no peers");return}let d=new Gt,f=u.map((h,p)=>ow({...n,key:e,startingPeer:h,ourPeerId:this.peerId,signal:i,query:t,pathIndex:p,numPaths:u.length,alpha:this.alpha,queryFuncTimeout:n.queryFuncTimeout,log:s,peersSeen:d,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let h of qt(...f)){if(h.name==="QUERY_ERROR"&&s.error("query error",h.error),h.name==="PEER_RESPONSE")for(let p of[...h.closer,...h.providers])await this.connectionManager.isDialable(p.multiaddrs)&&await this.routingTable.add(p.id);yield h}a=!0}catch(c){if(!(!this.running&&c.name==="QueryAbortedError"))throw c}finally{a||(s("query exited early"),o.abort()),i.clear(),s("query:done")}}};function MC(r){return r[Symbol.asyncIterator]!=null}function UC(r){if(MC(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 Uf=UC;var FC=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 VC(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!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:u}=FC(r),d=(...h)=>{let p=t.multiArgs?h:h[0];t.filter&&!t.filter(p)||(c.push(p),t.count===c.length&&(n(),i(c)))},f=h=>{n(),s(h)};n=()=>{for(let h of a)u(h,d);for(let h of t.rejectionEvents)u(h,f)};for(let h of a)l(h,d);for(let h of t.rejectionEvents)l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=jr(o,{milliseconds:t.timeout});return i.cancel=n,i}return o}function iw(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=VC(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}var Ff=class{log;peerId;peerRouting;routingTable;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.running=!1,this.peerRouting=t.peerRouting,this.routingTable=t.routingTable,this.count=t.count??Ef,this.interval=t.interval??Vy,this.initialInterval=t.initialInterval??$y,this.queryTimeout=t.queryTimeout??Ky,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=Rf(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)})},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=J(),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=le(e);this.controller.signal;try{this.routingTable.size===0&&(this.log("routing table was empty, waiting for some peers before running query"),await iw(this.routingTable,"peer:add",{signal:t,filter:i=>!this.peerId.equals(i.detail)}),this.log("routing table has peers, continuing with query")),this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await ft(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),i=>ho(i,this.count),async i=>Uf(i));this.log("self-query found %d peers in %dms",o,Date.now()-n)}catch(n){this.log.error("self-query error",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)})},this.interval))}};var Vf=class extends me{log;reprovideQueue;maxQueueSize;datastore;timeout;reprovideTimeout;running;shutdownController;reprovideThreshold;contentRouting;datastorePrefix;addressManager;validity;interval;lock;peerId;constructor(e,t){super(),this.log=e.logger.forComponent(`${t.logPrefix}:reprovider`),this.peerId=e.peerId,this.reprovideQueue=new Ht({concurrency:t.concurrency??My,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new dn({...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??Oy,this.maxQueueSize=t.maxQueueSize??Uy,this.validity=t.validity??By,this.interval=t.interval??Fy,this.contentRouting=t.contentRouting,this.lock=t.lock,this.running=!1,this.reprovide=Rf(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,this.timeout=setTimeout(()=>{this.cleanUp().catch(e=>{this.log.error("error running reprovide/cleanup - %e",e)})},this.interval))}stop(){this.running=!1,this.reprovideQueue.clear(),clearTimeout(this.timeout),this.shutdownController?.abort()}async cleanUp(){let e=await this.lock.writeLock();try{this.safeDispatchEvent("reprovide:start");for await(let t of this.datastore.query({prefix:this.datastorePrefix}))try{let{cid:n,peerId:o}=Cf(t.key),i=Pf(t.value).getTime(),s=i+this.validity,a=Date.now(),c=a>s;this.log.trace("comparing: %d < %d = %s %s",i,a-this.validity,c,c?"(expired)":""),c&&await this.datastore.delete(t.key),this.peerId.equals(o)&&a-s<this.reprovideThreshold&&this.queueReprovide(n).catch(l=>{this.log.error("could not reprovide %c - %e",n,l)})}catch(n){this.log.error("error processing datastore key %s - %e",t.key,n.message)}this.log("reprovide/cleanup successful")}finally{e(),this.safeDispatchEvent("reprovide:end"),this.running&&(this.timeout=setTimeout(()=>{this.cleanUp().catch(t=>{this.log.error("error running re-provide - %e",t)})},this.interval))}}async queueReprovide(e){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);let t=this.reprovideQueue.queue.find(n=>n.options.cid.equals(e));if(t!=null)return this.log.trace("not adding %c to re-provide queue - already in queue",e),t.join();this.log.trace("adding %c to re-provide queue",e),this.reprovideQueue.add(async n=>{if(n.signal?.throwIfAborted(),!this.running)return;this.log.trace("re-providing %c",e);let o=this.reprovideTimeout.getTimeoutSignal(n);try{await this.reprovide(n.cid,n)}finally{this.reprovideTimeout.cleanUp(o)}this.log.trace("re-provided %c",e)},{signal:this.shutdownController?.signal,cid:e}).catch(n=>{this.log.error("could not re-provide key %c - %e",e,n)})}async reprovide(e,t){await Lt(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var $C=20,KC=5e3,HC="kad-close",qC=50,$f=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??KC,this.peerSetSize=t.peerSetSize??$C,this.closeTagName=t.closeTagName??HC,this.closeTagValue=t.closeTagValue??qC,this.closestPeers=new Gt,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await Tt(this.components.peerId);this.newPeers=new Qo(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 Gt(this.newPeers?.peers.map(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},[_3]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[_3]:void 0}})})])}};function el(r){return Array.isArray(r?.peers)}var Kf=class{root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e){this.prefixLength=e.prefixLength??sw,this.kBucketSize=e.kBucketSize??L3,this.splitThreshold=e.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=e.numberOfOldContactsToPing??aw,this.lastPingThreshold=e.lastPingThreshold??cw,this.ping=e.ping,this.verify=e.verify,this.onAdd=e.onAdd,this.onRemove=e.onRemove,this.addingPeerMap=new pt,this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e){this.localPeer={peerId:e,kadId:await Tt(e),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await Tt(e),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),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!WC(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n);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);i&&await this._add(e,t)}*closest(e,t=this.kBucketSize){let n=new Qo(e,t);for(let o of this.toIterable())n.addWitKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*Jt(n.peers,o=>o.id)}count(){function e(t){if(el(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){let t=this._determineBucket(e),n=this._indexOf(t,e);if(n>-1){let o=t.peers.splice(n,1)[0];await this.onRemove?.(o,t)}}*toIterable(){function*e(t){if(el(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+U(lr(e,t),"base16"))}_determineBucket(e){let t=U(e,"base2");function n(o,i=0){return el(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=>ne(n.kadId,t))}async _split(e){let t={prefix:"0",depth:e.depth+1,peers:[]},n={prefix:"1",depth:e.depth+1,peers:[]};for(let o of e.peers)U(o.kadId,"base2")[e.depth]==="0"?(t.peers.push(o),await this.onMove?.(o,e,t)):(n.peers.push(o),await this.onMove?.(o,e,n));zC(e,t,n)}};function zC(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function WC(r,e){return r.lastPing<Date.now()-e}var L3=20,sw=8;var GC=20,QC=100,aw=3;var YC=20,XC=100,lw="kad-peer",jC=1,cw=6e5,ZC=!0,JC=1e3,Hf=class extends me{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??L3,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??lw,this.peerTagValue=t.peerTagValue??jC,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??ZC,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??JC,this.pingOldContactQueue=new wt({concurrency:t.pingOldContactConcurrency??YC,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??XC}),this.pingOldContactTimeout=new dn({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new wt({concurrency:t.pingNewContactConcurrency??GC,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??QC}),this.pingNewContactTimeout=new dn({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new Kf({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}),this.closestPeerTagger=new $f(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,await yt(this.closestPeerTagger),await this.kb.addSelfPeer(this.components.peerId))}async afterStart(){Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let e=0;for(let t of await this.components.peerStore.all({filters:[n=>n.protocols.includes(this.protocol)&&n.tags.has(lw)],limit:this.populateFromDatastoreLimit})){if(!this.running)return;try{await this.add(t.id),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(t.id,{tags:{[this.peerTagName]:void 0}})}}this.log("added %d peer store peers to the routing table",e)}).catch(e=>{this.log.error("error adding peer store peers to the routing table %e",e)})}async stop(){this.running=!1,await Rt(this.closestPeerTagger),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort()}async peerAdded(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}}),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=le([c,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 un(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=le([n,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{this.log("pinging contact %p",e.peerId);for await(let o of this.network.sendRequest(e.peerId,{type:be.PING},t))if(o.type===qf.PEER_RESPONSE)return o.messageType===be.PING?(this.log("contact %p ping ok",e.peerId),this.safeDispatchEvent("peer:ping",{detail:e.peerId}),!0):!1;return!1}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){let t=await Tt(e);return this.kb.get(t)?.peerId}closestPeer(e){let t=this.closestPeers(e,1);if(t.length>0)return t[0]}closestPeers(e,t=this.kBucketSize){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){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await Tt(e);await this.kb.remove(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(el(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 uw=[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 zf=15,Wf=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??Hy,this.refreshQueryTimeout=s??qy,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){this.log("refreshing routing table");let t=this._maxCommonPrefix(),n=this._getTrackedCommonPrefixLengthsForRefresh(t);this.log(`max common prefix length ${t}`),this.log(`tracked CPLs [ ${n.map(o=>o.toISOString()).join(", ")} ]`),Promise.all(n.map(async(o,i)=>{try{if(await this._refreshCommonPrefixLength(i,o,e),this._numPeersForCpl(t)===0){let s=Math.min(2*(i+1),n.length-1);for(let a=i+1;a<s+1;a++)try{await this._refreshCommonPrefixLength(a,o,e)}catch(c){this.log.error(c)}}}catch(s){this.log.error(s)}})).catch(o=>{this.log.error(o)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(o=>{this.log.error(o)})}async _refreshCommonPrefixLength(e,t,n){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 o=await this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,o,this.routingTable.size);let i=AbortSignal.timeout(this.refreshQueryTimeout);let s=await Uf(this.peerRouting.getClosestPeers(o.toMultihash().bytes,{signal:i}));this.log(`found ${s} peers that were close to imaginary peer %p`,o),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,o,this.routingTable.size)}_getTrackedCommonPrefixLengthsForRefresh(e){e>zf&&(e=zf);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}async _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=Wt(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),i=Ae(o);return st(i)}async _makePeerId(e,t,n){if(n>zf)throw new Error(`Cannot generate peer ID for common prefix length greater than ${zf}`);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=uw[c],u=new ArrayBuffer(34),d=new DataView(u,0,u.byteLength);return d.setUint8(0,Qe.code),d.setUint8(1,32),d.setUint32(2,l,!1),new Uint8Array(d.buffer,d.byteOffset,d.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=lr(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var Gf=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 he("Missing key");let n;try{n=X.decode(t.key)}catch{throw new he("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=Ae(o.id),s=st(i),a=o.multiaddrs.map(c=>$(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 Qf=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){if(this.log("incoming request from %p for peers closer to %b",e,t.key),t.key==null)throw new he("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getCloserPeersOffline(t.key,e);ne(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(i=>i.decapsulateCode(Z("p2p").code))});let o={type:be.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 than %p",t.key,e),o}};var Yf=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 he("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=X.decode(t.key)}catch{throw new he("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[o,i]=await Promise.all([Ni(Jt(await this.providers.getProviders(n),async a=>{let c=await this.peerStore.get(a);return{id:c.id,multiaddrs:c.addresses.map(({multiaddr:u})=>u)}})),this.peerRouting.getCloserPeersOffline(t.key,this.peerId)]),s={type:be.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 Xf=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 he("Invalid key");let o={type:be.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(ew(n)){this.log("is public key");let a=tw(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new Oe("No public key found in key book");c=Mt(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new It(n,c,new Date).serialize(),o}let[i,s]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getCloserPeersOffline(n,e)]);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=Wo(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(i){if(i.name==="NotFoundError")return;throw i}let o=It.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>Ly){await this.datastore.delete(t);return}return o}};var jf=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 Zf=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){let o=`Empty record from: ${e.toString()}`;throw this.log.error(o),new he(o)}try{let o=It.deserialize(t.record);await ca(this.validators,o),o.timeReceived=new Date;let i=Wo(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 Jf=class{handlers;routingTable;log;metrics;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`)},this.log=e.logger.forComponent(`${t.logPrefix}:rpc`),this.routingTable=t.routingTable,this.handlers={[be.GET_VALUE.toString()]:new Xf(e,t),[be.PUT_VALUE.toString()]:new Zf(e,t),[be.FIND_NODE.toString()]:new Qf(e,t),[be.ADD_PROVIDER.toString()]:new Gf(e,t),[be.GET_PROVIDERS.toString()]:new Yf(e,t),[be.PING.toString()]:new jf(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})}}onIncomingStream(e){let t="unknown";Promise.resolve().then(async()=>{let{stream:n,connection:o}=e,i=o.remotePeer,s=this;await ft(n,a=>Nn(a),async function*(a){for await(let c of a){let l=io.decode(c);t=l.type,s.log("incoming %s from %p",l.type,i);let u=await s.handleMessage(i,l);u!=null&&(yield io.encode(u))}},a=>$r(a),n)}).catch(n=>{this.log.error("error handling %s RPC message from %p - %e",t,e.connection.remotePeer,n)})}};var eh=class extends me{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 N3=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await Lt(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)}async put(e,t,n){await Lt(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 Oe("Could not find value for key")}},B3=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 Oe("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},ek=32,tk=64,th=class extends me{protocol;routingTable;providers;network;peerRouting;components;log;running;kBucketSize;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;reprovider;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.protocol=t.protocol??Ny,this.kBucketSize=t.kBucketSize??20,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??ek,this.maxOutboundStreams=t.maxOutboundStreams??tk,this.peerInfoMapper=t.peerInfoMapper??Zy;let a=Ai();this.providers=new Of(e,{...t.providers,logPrefix:n,datastorePrefix:o,lock:a}),this.validators={...jy,...t.validators},this.selectors={...Xy,...t.selectors},this.network=new Nf(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:i}),this.routingTable=new Hf(e,{kBucketSize:t.kBucketSize,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 c=J();t.allowQueryWithZeroPeers===!0&&c.resolve(),this.queryManager=new Mf(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:n,metricsPrefix:i,initialQuerySelfHasRun:c,routingTable:this.routingTable}),this.peerRouting=new Bf(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new Df(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:o}),this.contentRouting=new Lf(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new Wf(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new Jf(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 eh(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new Ff(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:c,routingTable:this.routingTable,operationMetrics:s}),this.reprovider=new Vf(e,{...t.reprovide,logPrefix:n,metricsPrefix:i,datastorePrefix:o,contentRouting:this.contentRouting,lock:a,operationMetrics:s}),this.network.addEventListener("peer",l=>{let u=l.detail;this.onPeerConnect(u).catch(d=>{this.log.error("could not add %p to routing table",u.id,d)}),this.dispatchEvent(new CustomEvent("peer",{detail:u}))}),this.topologyListener.addEventListener("peer",l=>{let u=l.detail;Promise.resolve().then(async()=>{let d=await this.components.peerStore.get(u),f={id:u,multiaddrs:d.addresses.map(({multiaddr:h})=>h),protocols:d.protocols};await this.onPeerConnect(f)}).catch(d=>{this.log.error("could not add %p to routing table - %e",u,d)})}),this.dhtPeerRouting=new B3(this),this.dhtContentRouting=new N3(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",l=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let u=l.detail.peer.addresses.some(({multiaddr:f})=>rw(f)),d=this.getMode();u&&d==="client"?await this.setMode("server"):d==="server"&&!u&&await this.setMode("client")}).catch(u=>{this.log.error("error setting dht server mode",u)})}),this.get=Hi(this.get.bind(this),s,"GET_VALUE"),this.findProviders=Hi(this.findProviders.bind(this),s,"FIND_PROVIDERS"),this.findPeer=Hi(this.findPeer.bind(this),s,"FIND_PEER"),this.getClosestPeers=Hi(this.getClosestPeers.bind(this),s,"GET_CLOSEST_PEERS"),this.provide=Hi(this.provide.bind(this),s,"PROVIDE"),this.put=Hi(this.put.bind(this),s,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[Se]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery"];[fr]=["@libp2p/identify"];get[hn](){return this.dhtContentRouting}get[pn](){return this.dhtPeerRouting}get[Zo](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id),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(t=>t.toString()));return}try{await this.routingTable.add(e.id)}catch(t){this.log.error("could not add %p to routing table",e.id,t)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e,t=!1){if(e===this.getMode()&&!t){this.log("already in %s mode",e);return}if(await this.components.registrar.unhandle(this.protocol),e===this.getMode()&&!t){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),{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running||(this.running=!0,await this.setMode(this.clientMode?"client":"server",!0),await yt(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await yt(this.querySelf))}async stop(){this.running=!1,await Rt(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){await this.providers.removeProvider(e,this.components.peerId)}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(){this.routingTableRefresh.refreshTable(!0)}};var qf;(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"})(qf||(qf={}));function dw(r={}){return e=>new th(e,r)}var xw=Ur(bw(),1),fa=xw.default;var Lw=Ur(kw(),1);var ha={};Xe(ha,{create:()=>bk,derivedEmptyPasswordKey:()=>oh});var oh={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function bk(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=nr.get();t*=8;async function c(d,f){let h=a.getRandomValues(new Uint8Array(i)),p=a.getRandomValues(new Uint8Array(n)),g={name:e,iv:p};typeof f=="string"&&(f=N(f));let m;if(f.length===0){m=await a.subtle.importKey("jwk",oh,{name:"AES-GCM"},!0,["encrypt"]);try{let x={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},w=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(x,w,{name:e,length:t},!0,["encrypt"])}catch{m=await a.subtle.importKey("jwk",oh,{name:"AES-GCM"},!0,["encrypt"])}}else{let x={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},w=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(x,w,{name:e,length:t},!0,["encrypt"])}let y=await a.subtle.encrypt(g,m,d);return Ce([h,g.iv,new Uint8Array(y)])}async function l(d,f){let h=d.subarray(0,i),p=d.subarray(i,i+n),g=d.subarray(i+n),m={name:e,iv:p};typeof f=="string"&&(f=N(f));let y;if(f.length===0)try{let w={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},I=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,I,{name:e,length:t},!0,["decrypt"])}catch{y=await a.subtle.importKey("jwk",oh,{name:"AES-GCM"},!0,["decrypt"])}else{let w={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},I=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,I,{name:e,length:t},!0,["decrypt"])}let x=await a.subtle.decrypt(m,y,g);return new Uint8Array(x)}return{encrypt:c,decrypt:l}}async function M3(r,e){let n=await ha.create().encrypt(r,e);return it.encode(n)}async function U3(r,e,t){if(r.type==="RSA")return Ek(r,e,t);if(r.type==="Ed25519")return xk(r,e,t);if(r.type==="secp256k1")return vk(r,e,t);throw new Vr}async function xk(r,e,t="libp2p-key"){if(t==="libp2p-key")return M3(Cs(r),e);throw new k(`export format '${t}' is not supported`)}async function vk(r,e,t="libp2p-key"){if(t==="libp2p-key")return M3(Cs(r),e);throw new k("Export format is not supported")}async function Ek(r,e,t="pkcs-8"){if(t==="pkcs-8")return Sk(r,e);if(t==="libp2p-key")return M3(Cs(r),e);throw new k("Export format is not supported")}async function Sk(r,e){let t=nr.get(),o=new ut({value:[new rt({value:0}),new ut({value:[new Cr({value:"1.2.840.113549.1.1.1"}),new Kn]}),new Hn({valueHex:r.raw})]}).toBER(),i=new Uint8Array(o,0,o.byteLength),s=Wt(16),a=await Zu(xo,e,s,{c:1e4,dkLen:32}),c=Wt(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),u=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,i),d=new ut({value:[new Hn({valueHex:s}),new rt({value:1e4}),new rt({value:32}),new ut({value:[new Cr({value:"1.2.840.113549.2.11"}),new Kn]})]}),f=new ut({value:[new Cr({value:"1.2.840.113549.1.5.13"}),new ut({value:[new ut({value:[new Cr({value:"1.2.840.113549.1.5.12"}),d]}),new ut({value:[new Cr({value:"2.16.840.1.101.3.4.1.42"}),new Hn({valueHex:c})]})]})]}),p=new ut({value:[f,new Hn({valueHex:u})]}).toBER(),g=new Uint8Array(p,0,p.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...U(g,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
19
- `)}async function F3(r,e){try{let t=await Ak(r,e);return e8(t)}catch{}if(!r.includes("BEGIN"))throw new k("Encrypted key was not a libp2p-key or a PEM file");return Ik(r,e)}async function Ak(r,e){let t=it.decode(r);return ha.create().decrypt(t,e)}async function Ik(r,e){let t=nr.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let i=N(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=yi(i),{iv:a,salt:c,iterations:l,keySize:u,cipherText:d}=Tk(s),f=await Zu(xo,e,c,{c:l,dkLen:u}),h=await t.subtle.importKey("raw",f,"AES-CBC",!1,["decrypt"]),p=tl(await t.subtle.decrypt({name:"AES-CBC",iv:a},h,d)),{result:g}=yi(p);n=Dw(g)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let i=N(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=yi(i);n=Dw(s)}else throw new k("Could not parse private key from PEM data");let o=t8(n);if(o.type!=="RSA")throw new k("Could not parse RSA private key from PEM data");return o}function Tk(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new k("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 k("Only pkcs5PBKDF2 key derivation functions are supported");let i=n.valueBlock.value[1],s=tl(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 k("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],u=l.valueBlock.value[0].toString();if(u!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(u!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new k("Only AES-CBC encryption schemes are supported")}}}}let d=tl(l.valueBlock.value[1].getValue());return{cipherText:tl(r.valueBlock.value[1].getValue()),salt:s,iterations:a,keySize:c,iv:d}}function Dw(r){return tl(r.valueBlock.value[2].getValue())}function tl(r){return new Uint8Array(r,0,r.byteLength)}var _k="/pkcs8/",$3="/info/",rl=new WeakMap,qi={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},V3={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function pa(r){return r==null||typeof r!="string"?!1:r===(0,Lw.default)(r.trim())&&r.length>0}async function _t(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function zi(r){return new Le(_k+r)}function ma(r){return new Le($3+r)}async function Ck(r){let e=Cs(r),t=await Qe.digest(e);return ve.encode(t.bytes).substring(1)}var ih=class{components;init;log;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init=fa(V3,t),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<qi.minKeyLength)throw new Error(`dek.keyLength must be least ${qi.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<qi.minSaltLength)throw new Error(`dek.saltLength must be least ${qi.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<qi.minIterationCount)throw new Error(`dek.iterationCount must be least ${qi.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?ac(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";rl.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[Se]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},V3),t=Math.ceil(qi.minSaltLength/3)*3;return e.dek.salt=U(Wt(t),"base64"),e}static get options(){return V3}async findKeyByName(e){if(!pa(e))throw await _t(),new k(`Invalid key name '${e}'`);let t=ma(e);try{let n=await this.components.datastore.get(t);return JSON.parse(U(n))}catch(n){throw await _t(),this.log.error(n),new Oe(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:$3};for await(let n of this.components.datastore.query(t)){let o=JSON.parse(U(n.value));if(o.id===e)return o}throw new k(`Key with id '${e}' does not exist.`)}catch(t){throw await _t(),t}}async importKey(e,t){if(!pa(e))throw await _t(),new k(`Invalid key name '${e}'`);if(t==null)throw await _t(),new k("Key is required");let n=zi(e);if(await this.components.datastore.has(n))throw await _t(),new k(`Key '${e}' already exists`);let i,s;try{i=await Ck(t);let l=rl.get(this);if(l==null)throw new k("dek missing");let u=l.dek;s=await U3(t,u,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await _t(),l}let a={name:e,id:i},c=this.components.datastore.batch();return c.put(n,N(s)),c.put(ma(e),N(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!pa(e))throw await _t(),new k(`Invalid key name '${e}'`);let t=zi(e);try{let n=await this.components.datastore.get(t),o=U(n),i=rl.get(this);if(i==null)throw new k("dek missing");let s=i.dek;return await F3(o,s)}catch(n){throw await _t(),n}}async removeKey(e){if(!pa(e)||e==="self")throw await _t(),new k(`Invalid key name '${e}'`);let t=zi(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(ma(e)),await o.commit(),n}async listKeys(){let e={prefix:$3},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(U(n.value)));return t}async renameKey(e,t){if(!pa(e)||e==="self")throw await _t(),new k(`Invalid old key name '${e}'`);if(!pa(t)||t==="self")throw await _t(),new k(`Invalid new key name '${t}'`);let n=zi(e),o=zi(t),i=ma(e),s=ma(t);if(await this.components.datastore.has(o))throw await _t(),new k(`Key '${t}' already exists`);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(i),u=JSON.parse(U(l));u.name=t;let d=this.components.datastore.batch();return d.put(o,c),d.put(s,N(JSON.stringify(u))),d.delete(n),d.delete(i),await d.commit(),u}catch(c){throw await _t(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await _t(),new k(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await _t(),new k(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await _t(),new k(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=rl.get(this);if(n==null)throw new k("dek missing");let o=n.dek;this.init.pass=t;let i=t!=null&&this.init.dek?.salt!=null?ac(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";rl.set(this,{dek:i});let s=await this.listKeys();for(let a of s){let c=await this.components.datastore.get(zi(a.name)),l=U(c),u=await F3(l,o),d=i.toString(),f=await U3(u,d,u.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),p={name:a.name,id:a.id};h.put(zi(a.name),N(f)),h.put(ma(a.name),N(JSON.stringify(p))),await h.commit()}this.log("keychain reconstructed")}};function sh(r={}){return e=>new ih(e,r)}var ga=class{memoryStorage;points;duration;blockDuration;execEvenly;execEvenlyMinDelayMs;keyPrefix;constructor(e={}){this.points=e.points??4,this.duration=e.duration??1,this.blockDuration=e.blockDuration??0,this.execEvenly=e.execEvenly??!1,this.execEvenlyMinDelayMs=e.execEvenlyMinDelayMs??this.duration*1e3/this.points,this.keyPrefix=e.keyPrefix??"rlflx",this.memoryStorage=new K3}async consume(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,t,i);if(s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s.consumedPoints>this.points)throw this.blockDuration>0&&s.consumedPoints<=this.points+t&&(s=this.memoryStorage.set(o,s.consumedPoints,this.blockDuration)),new Al("Rate limit exceeded",s);if(this.execEvenly&&s.msBeforeNext>0&&!s.isFirstInDuration){let a=Math.ceil(s.msBeforeNext/(s.remainingPoints+2));a<this.execEvenlyMinDelayMs&&(a=s.consumedPoints*this.execEvenlyMinDelayMs),await pf(a)}return s}penalty(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,t,i);return s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s}reward(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,-t,i);return s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s}block(e,t){let n=t*1e3,o=this.points+1;return this.memoryStorage.set(this.getKey(e),o,t),{remainingPoints:0,msBeforeNext:n===0?-1:n,consumedPoints:o,isFirstInDuration:!1}}set(e,t,n=0){let o=(n>=0?n:this.duration)*1e3;return this.memoryStorage.set(this.getKey(e),t,n),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:t,isFirstInDuration:!1}}get(e){let t=this.memoryStorage.get(this.getKey(e));return t!=null&&(t.remainingPoints=Math.max(this.points-t.consumedPoints,0)),t}delete(e){this.memoryStorage.delete(this.getKey(e))}_getKeySecDuration(e){return e?.customDuration!=null&&e.customDuration>=0?e.customDuration:this.duration}getKey(e){return this.keyPrefix.length>0?`${this.keyPrefix}:${e}`:e}parseKey(e){return e.substring(this.keyPrefix.length)}},K3=class{storage;constructor(){this.storage=new Map}incrby(e,t,n){let o=this.storage.get(e);if(o!=null){let i=o.expiresAt!=null?o.expiresAt.getTime()-new Date().getTime():-1;return o.expiresAt==null||i>0?(o.value+=t,{remainingPoints:0,msBeforeNext:i,consumedPoints:o.value,isFirstInDuration:!1}):this.set(e,t,n)}return this.set(e,t,n)}set(e,t,n){let o=n*1e3,i=this.storage.get(e);i!=null&&clearTimeout(i.timeoutId);let s={value:t,expiresAt:o>0?new Date(Date.now()+o):void 0};return this.storage.set(e,s),o>0&&(s.timeoutId=setTimeout(()=>{this.storage.delete(e)},o),s.timeoutId.unref!=null&&s.timeoutId.unref()),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:s.value,isFirstInDuration:!0}}get(e){let t=this.storage.get(e);if(t!=null)return{remainingPoints:0,msBeforeNext:t.expiresAt!=null?t.expiresAt.getTime()-new Date().getTime():-1,consumedPoints:t.value,isFirstInDuration:!1}}delete(e){let t=this.storage.get(e);return t!=null?(t.timeoutId!=null&&clearTimeout(t.timeoutId),this.storage.delete(e),!0):!1}};var we;(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"})(we||(we={}));var nl=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),H3=Object.freeze({NEW_STREAM:we.NEW_STREAM,MESSAGE:we.MESSAGE_INITIATOR,CLOSE:we.CLOSE_INITIATOR,RESET:we.RESET_INITIATOR}),Nw=Object.freeze({MESSAGE:we.MESSAGE_RECEIVER,CLOSE:we.CLOSE_RECEIVER,RESET:we.RESET_RECEIVER});var q3=1<<20,kk=4<<20,ah=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=q3,t=kk){this._buffer=new ce,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 he("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===we.NEW_STREAM||o===we.MESSAGE_INITIATOR||o===we.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}=Ow(e),{value:o,offset:i}=Ow(e,n),s=t&7;if(nl[s]==null)throw new Error(`Invalid type received: ${s}`);if(o>this._maxMessageSize)throw new he("Message size too large");return{id:t>>3,type:s,offset:n+i,length:o}}},Pk=128,Bw=127;function Ow(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&Bw)<<n:(i&Bw)*Math.pow(2,n),n+=7}while(i>=Pk);return e=o-e,{value:t,offset:e}}var z3=10*1024,W3=class{_pool;_poolOffset;constructor(){this._pool=Me(z3),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Re(e.id<<3|e.type,n,o),o+=ue(e.id<<3|e.type),(e.type===we.NEW_STREAM||e.type===we.MESSAGE_INITIATOR||e.type===we.MESSAGE_RECEIVER)&&e.data!=null?(Re(e.data.length,n,o),o+=ue(e.data.length)):(Re(0,n,o),o+=ue(0));let i=n.subarray(this._poolOffset,o);z3-o<100?(this._pool=Me(z3),this._poolOffset=0):this._poolOffset=o,t.append(i),(e.type===we.NEW_STREAM||e.type===we.MESSAGE_INITIATOR||e.type===we.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},Rk=new W3;async function*Mw(r){for await(let e of r){let t=new ce;Rk.write(e,t),yield t}}var ch=class extends Error{constructor(e="Stream input buffer error"){super(e),this.name="StreamInputBufferError"}};var G3=class extends Vo{name;streamId;send;types;maxDataSize;constructor(e){super(e),this.types=e.direction==="outbound"?H3:Nw,this.send=e.send,this.name=e.name,this.streamId=e.streamId,this.maxDataSize=e.maxDataSize}async sendNewStream(){await this.send({id:this.streamId,type:H3.NEW_STREAM,data:new ce(N(this.name))})}async sendData(e){for(e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxDataSize);await this.send({id:this.streamId,type:this.types.MESSAGE,data:e.sublist(0,t)}),e.consume(t)}}async sendReset(){await this.send({id:this.streamId,type:this.types.RESET})}async sendCloseWrite(){await this.send({id:this.streamId,type:this.types.CLOSE})}async sendCloseRead(){}};function Uw(r){let{id:e,name:t,send:n,onEnd:o,type:i="initiator",maxMsgSize:s=q3}=r;return new G3({id:i==="initiator"?`i${e}`:`r${e}`,streamId:e,name:`${t??e}`,direction:i==="initiator"?"outbound":"inbound",maxDataSize:s,onEnd:o,send:n,log:r.logger.forComponent(`libp2p:mplex:stream:${i}:${e}`)})}var Dk=1024,Lk=1024,Nk=1024*1024*4,Bk=5,Ok=500;function Fw(r){let e={...r,type:`${nl[r.type]} (${r.type})`};return r.type===we.NEW_STREAM&&(e.data=U(r.data instanceof Uint8Array?r.data:r.data.subarray())),(r.type===we.MESSAGE_INITIATOR||r.type===we.MESSAGE_RECEIVER)&&(e.data=U(r.data instanceof Uint8Array?r.data:r.data.subarray(),"base16")),e}var lh=class{protocol="/mplex/6.7.0";sink;source;log;_streamId;_streams;_init;_source;closeController;rateLimiter;closeTimeout;logger;constructor(e,t){t=t??{},this.log=e.logger.forComponent("libp2p:mplex"),this.logger=e.logger,this._streamId=0,this._streams={initiators:new Map,receivers:new Map},this._init=t,this.closeTimeout=t.closeTimeout??Ok,this.sink=this._createSink(),this._source=Dt({objectMode:!0,onEnd:()=>{for(let n of this._streams.initiators.values())n.destroy();for(let n of this._streams.receivers.values())n.destroy()}}),this.source=ft(this._source,n=>Mw(n)),this.closeController=new AbortController,this.rateLimiter=new ga({points:t.disconnectThreshold??Bk,duration:1})}get streams(){let e=[];for(let t of this._streams.initiators.values())e.push(t);for(let t of this._streams.receivers.values())e.push(t);return e}newStream(e){if(this.closeController.signal.aborted)throw new mn("Muxer already closed");let t=this._streamId++;e=e==null?t.toString():e.toString();let n=this._streams.initiators;return this._newStream({id:t,name:e,type:"initiator",registry:n})}async close(e){if(this.closeController.signal.aborted)return;let t=e?.signal??AbortSignal.timeout(this.closeTimeout);try{await Promise.all(this.streams.map(async n=>n.close({signal:t}))),this._source.end(),await this._source.onEmpty({signal:t}),this.closeController.abort()}catch(n){this.abort(n)}}abort(e){this.closeController.signal.aborted||(this.streams.forEach(t=>{t.abort(e)}),this.closeController.abort(e))}_newReceiverStream(e){let{id:t,name:n}=e,o=this._streams.receivers;return this._newStream({id:t,name:n,type:"receiver",registry:o})}_newStream(e){let{id:t,name:n,type:o,registry:i}=e;if(this.log("new %s stream %s",o,t),o==="initiator"&&this._streams.initiators.size===(this._init.maxOutboundStreams??Lk))throw new fo("Too many outbound streams open");if(i.has(t))throw new Error(`${o} stream ${t} already exists!`);let c=Uw({id:t,name:n,send:async l=>{this.log.enabled&&this.log.trace("%s stream %s send",o,t,Fw(l)),this._source.push(l)},type:o,onEnd:()=>{this.log("%s stream with id %s and protocol %s ended",o,t,c.protocol),i.delete(t),this._init.onStreamEnd!=null&&this._init.onStreamEnd(c)},maxMsgSize:this._init.maxMsgSize,logger:this.logger});return i.set(t,c),c}_createSink(){return async t=>{let n=()=>{W1(t,this.log)};this.closeController.signal.addEventListener("abort",n);try{let o=new ah(this._init.maxMsgSize,this._init.maxUnprocessedMessageQueueSize);for await(let i of t)for(let s of o.write(i))await this._handleIncoming(s);this._source.end()}catch(o){this.log("error in sink",o),this._source.end(o)}finally{this.closeController.signal.removeEventListener("abort",n)}}}async _handleIncoming(e){let{id:t,type:n}=e;if(this.log.enabled&&this.log.trace("incoming message",Fw(e)),e.type===we.NEW_STREAM){if(this._streams.receivers.size===(this._init.maxInboundStreams??Dk)){this.log("too many inbound streams open"),this._source.push({id:t,type:we.RESET_RECEIVER});try{await 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}return}let a=this._newReceiverStream({id:t,name:U(e.data instanceof Uint8Array?e.data:e.data.subarray())});this._init.onIncomingStream!=null&&this._init.onIncomingStream(a);return}let i=((n&1)===1?this._streams.initiators:this._streams.receivers).get(t);if(i==null){this.log("missing stream %s for message type %s",t,nl[n]);try{await 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}let s=this._init.maxStreamBufferSize??Nk;try{switch(n){case we.MESSAGE_INITIATOR:case we.MESSAGE_RECEIVER:if(i.sourceReadableLength()>s)throw this._source.push({id:e.id,type:n===we.MESSAGE_INITIATOR?we.RESET_RECEIVER:we.RESET_INITIATOR}),new ch("Input buffer full - increase Mplex maxBufferSize to accommodate slow consumers");i.sourcePush(e.data);break;case we.CLOSE_INITIATOR:case we.CLOSE_RECEIVER:i.remoteCloseWrite();break;case we.RESET_INITIATOR:case we.RESET_RECEIVER:i.reset();break;default:this.log("unknown message type %s",n)}}catch(a){this.log.error("error while processing message",a),i.abort(a)}}};var Q3=class{protocol="/mplex/6.7.0";_init;components;constructor(e,t={}){this.components=e,this._init=t}[Symbol.toStringTag]="@libp2p/mplex";[Se]=["@libp2p/stream-multiplexing"];createStreamMuxer(e={}){return new lh(this.components,{...e,...this._init})}};function Vw(r={}){return e=>new Q3(e,r)}var $w="1.0.0",Kw="ping",Hw="ipfs";var uh=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;log;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:ping"),this.started=!1,this.protocol=`/${t.protocolPrefix??Hw}/${Kw}/${$w}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnLimitedConnection=t.runOnLimitedConnection??!0,this.handleMessage=this.handleMessage.bind(this)}[Symbol.toStringTag]="@libp2p/ping";async start(){await this.components.registrar.handle(this.protocol,this.handleMessage,{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}handleMessage(e){this.log("incoming ping from %p",e.connection.remotePeer);let{stream:t}=e,n=Date.now(),o=Mi(t),i=!1;Promise.resolve().then(async()=>{for(;;){let s=AbortSignal.timeout(this.timeout);s.addEventListener("abort",()=>{t?.abort(new gn("ping timeout"))});let a=await o.read(32,{signal:s});await o.write(a,{signal:s}),i=!0}}).catch(s=>{i&&s.name==="UnexpectedEOFError"&&t.readStatus!=="ready"||(this.log.error("incoming ping from %p failed with error - %e",e.connection.remotePeer,s),t?.abort(s))}).finally(()=>{let s=Date.now()-n;this.log("incoming ping from %p complete in %dms",e.connection.remotePeer,s);let a=AbortSignal.timeout(this.timeout);t.close({signal:a}).catch(c=>{this.log.error("error closing ping stream from %p - %e",e.connection.remotePeer,c),t?.abort(c)})})}async ping(e,t={}){this.log("pinging %p",e);let n=Date.now(),o=Wt(32),i=await this.components.connectionManager.openConnection(e,t),s;if(t.signal==null){let a=AbortSignal.timeout(this.timeout);t={...t,signal:a}}try{s=await i.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let a=Mi(s),[,c]=await Promise.all([a.write(o,t),a.read(32,t)]),l=Date.now()-n;if(!ne(o,c.subarray()))throw new xl(`Received wrong ping ack after ${l}ms`);return this.log("ping %p complete in %dms",i.remotePeer,l),l}catch(a){throw this.log.error("error while pinging %p",i.remotePeer,a),s?.abort(a),a}finally{s!=null&&await s.close(t)}}};function qw(r={}){return e=>new uh(e,r)}var zw=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))},Vk=function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r}();var $k=function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r}();var Kk=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 Hk=function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r}();var qk=function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r}();var zk=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,Wk=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,Ww=3,Gk=[["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",zk]],Gw=[["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 Yw(r){return r?Qw(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new qk:typeof navigator<"u"?Qw(navigator.userAgent):Xk()}function Qk(r){return r!==""&&Gk.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 Qw(r){var e=Qk(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new Hk;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<Ww&&(o=zw(zw([],o,!0),jk(Ww-o.length),!0)):o=[];var i=o.join("."),s=Yk(r),a=Wk.exec(r);return a&&a[1]?new Kk(t,i,s,a[1]):new Vk(t,i,s)}function Yk(r){for(var e=0,t=Gw.length;e<t;e++){var n=Gw[e],o=n[0],i=n[1],s=i.exec(r);if(s)return o}return null}function Xk(){var r=typeof process<"u"&&process.version;return r?new $k(process.version.slice(1)):null}function jk(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var Xw=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"],X3=Array.from("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"),jw="libp2p+webrtc+v1/";var Zw=Yw(),ol=Zw!=null&&Zw.name==="firefox",dh=async function*(){},fh=async r=>{},Zk=30*1e3;function Jw(r,e,t=Zk,n){r.readyState==="open"&&Promise.resolve().then(async()=>{if(r.bufferedAmount>0){n.log("%s drain channel with %d buffered bytes",e,r.bufferedAmount);let o=J(),i=!1;r.bufferedAmountLowThreshold=0;let s=()=>{i||(n.log("%s drain channel closed before drain",e),o.resolve())};r.addEventListener("close",s,{once:!0}),r.addEventListener("bufferedamountlow",()=>{i=!0,r.removeEventListener("close",s),o.resolve()}),await jr(o.promise,{milliseconds:t})}}).then(async()=>{r.readyState==="open"&&r.close()}).catch(o=>{n.log.error("error closing outbound stream",o)})}async function j3(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??Xw.map(e=>({urls:[e]})),r}var eb=(r=32)=>jw+[...Array(r)].map(()=>X3.at(Math.floor(Math.random()*X3.length))).join("");var Wi=class{log;peerConnection;remoteAddr;timeline;metrics;source=dh();sink=fh;constructor(e,t){this.log=e.logger.forComponent("libp2p:webrtc:maconn"),this.remoteAddr=t.remoteAddr,this.timeline=t.timeline,this.peerConnection=t.peerConnection;let n=this.peerConnection,o=n.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change",n.connectionState,"initial state",o),(n.connectionState==="disconnected"||n.connectionState==="failed"||n.connectionState==="closed")&&(this.timeline.close=Date.now())}}async close(e){this.log.trace("closing connection"),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({close:!0})}abort(e){this.log.error("closing connection due to error",e),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({abort:!0})}};var jt;(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=()=>He(t)}(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=re((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)=>ee(o,r.codec(),i)})(jt||(jt={}));var Jk=2*1024*1024,eP=30*1e3,il=16*1024;function tP(r=il){let e=ue(r-ue(r)),t=1+ue(Object.keys(jt.Flag).length-1),n=1,o=r-e-t-n,i=ue(o);return e+t+n+i}var rP=tP(),nP=5e3,oP=5e3,Z3=class extends Vo{channel;incomingData;maxBufferedAmount;bufferedAmountLowEventTimeout;maxMessageSize;receiveFinAck;finAckTimeout;openTimeout;closeController;constructor(e){let t=e.onEnd;switch(e.onEnd=o=>{this.log.trace("readable and writeable ends closed",this.status),Promise.resolve(async()=>{if(!(this.timeline.abort!=null||this.timeline.reset!==null))try{await jr(this.receiveFinAck.promise,{milliseconds:this.finAckTimeout})}catch(i){this.log.error("error receiving FIN_ACK",i)}}).then(()=>{this.incomingData.end(),this.channel.close(),t?.(o)}).catch(i=>{this.log.error("error ending stream",i)})},super(e),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=Dt(),this.bufferedAmountLowEventTimeout=e.bufferedAmountLowEventTimeout??eP,this.maxBufferedAmount=e.maxBufferedAmount??Jk,this.maxMessageSize=(e.maxMessageSize??il)-rP,this.receiveFinAck=J(),this.finAckTimeout=e.closeTimeout??nP,this.openTimeout=e.openTimeout??oP,this.closeController=new AbortController,this.channel.readyState){case"open":this.timeline.open=new Date().getTime();break;case"closed":case"closing":(this.timeline.close===void 0||this.timeline.close===0)&&(this.timeline.close=Date.now());break;case"connecting":break;default:throw this.log.error("unknown datachannel state %s",this.channel.readyState),new Jo("Unknown datachannel state")}this.channel.onopen=o=>{this.timeline.open=new Date().getTime()},this.channel.onclose=o=>{this.log.trace("received onclose event"),this.closeController.abort(),this.receiveFinAck.resolve(),this.close().catch(i=>{this.log.error("error closing stream after channel closed",i)})},this.channel.onerror=o=>{this.log.trace("received onerror event"),this.closeController.abort();let i=o.error;this.abort(i)},this.channel.onmessage=async o=>{let{data:i}=o;i===null||i.byteLength===0||this.incomingData.push(new Uint8Array(i,0,i.byteLength))};let n=this;Promise.resolve().then(async()=>{for await(let o of Nn(this.incomingData)){let i=n.processIncomingProtobuf(o);i!=null&&n.sourcePush(new ce(i))}}).catch(o=>{this.log.error("error processing incoming data channel messages",o)})}sendNewStream(){}async _sendMessage(e,t=!0){if(this.channel.readyState==="closed"||this.channel.readyState==="closing")throw new Jo(`Invalid datachannel state - ${this.channel.readyState}`);if(this.channel.readyState!=="open"){let n=AbortSignal.timeout(this.openTimeout),o=le([this.closeController.signal,n]);try{this.log('channel state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),await dt(this.channel,"open",o)}finally{o.clear()}this.log('channel state is now "%s", sending data',this.channel.readyState)}if(t&&this.channel.bufferedAmount>this.maxBufferedAmount){let n=AbortSignal.timeout(this.bufferedAmountLowEventTimeout),o=le([this.closeController.signal,n]);try{this.log('channel buffer is %d, wait for "bufferedamountlow" event',this.channel.bufferedAmount),await dt(this.channel,"bufferedamountlow",o)}catch(i){throw n.aborted?new gn(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`):i}finally{o.clear()}}try{this.channel.send(e.subarray())}catch(n){this.log.error("error while sending message",n)}}async sendData(e){for(this.log.trace("-> will send %d bytes",e.byteLength),e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxMessageSize),n=e.subarray(0,t),o=jt.encode({message:n}),i=$r.single(o);this.log.trace("-> sending message %s",this.channel.readyState),await this._sendMessage(i),this.log.trace("-> sent message %s",this.channel.readyState),e.consume(t)}this.log.trace("-> sent data %s",this.channel.readyState)}async sendReset(){try{await this._sendFlag(jt.Flag.RESET)}catch(e){this.log.error("failed to send reset - %e",e)}}async sendCloseWrite(e){if(this.channel.readyState!=="open"){this.receiveFinAck.resolve();return}if(await this._sendFlag(jt.Flag.FIN)){this.log.trace("awaiting FIN_ACK");try{await et(this.receiveFinAck.promise,e?.signal,{errorMessage:"sending close-write was aborted before FIN_ACK was received",errorName:"FinAckNotReceivedError"})}catch(n){this.log.error("failed to await FIN_ACK",n)}}else this.log.trace("sending FIN failed, not awaiting FIN_ACK");this.receiveFinAck.resolve()}async sendCloseRead(){this.channel.readyState==="open"&&await this._sendFlag(jt.Flag.STOP_SENDING)}processIncomingProtobuf(e){let t=jt.decode(e);if(t.flag!==void 0&&(this.log.trace('incoming flag %s, write status "%s", read status "%s"',t.flag,this.writeStatus,this.readStatus),t.flag===jt.Flag.FIN&&(this.remoteCloseWrite(),this.log.trace("sending FIN_ACK"),this._sendFlag(jt.Flag.FIN_ACK).catch(n=>{this.log.error("error sending FIN_ACK immediately",n)})),t.flag===jt.Flag.RESET&&this.reset(),t.flag===jt.Flag.STOP_SENDING&&this.remoteCloseRead(),t.flag===jt.Flag.FIN_ACK&&(this.log.trace("received FIN_ACK"),this.receiveFinAck.resolve())),this.readStatus==="ready")return t.message}async _sendFlag(e){if(this.channel.readyState!=="open")return this.log.trace('not sending flag %s because channel is "%s" and not "open"',this.channel.readyState,e.toString()),!1;this.log.trace("sending flag %s",e.toString());let t=jt.encode({flag:e}),n=$r.single(t);try{return await this._sendMessage(n,!1),!0}catch(o){this.log.error("could not send flag %s - %e",e.toString(),o)}return!1}};function ya(r){let{channel:e,direction:t}=r;return new Z3({id:t==="inbound"?`i${e.id}`:`r${e.id}`,log:r.logger.forComponent(`libp2p:webrtc:stream:${t}:${e.id}`),...r})}var tb="/webrtc",Yo=class{protocol;peerConnection;bufferedStreams=[];metrics;dataChannelOptions;components;log;constructor(e,t){this.components=e,this.peerConnection=t.peerConnection,this.metrics=t.metrics,this.protocol=t.protocol??tb,this.dataChannelOptions=t.dataChannelOptions??{},this.log=e.logger.forComponent("libp2p:webrtc:muxerfactory"),this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace('incoming early datachannel with channel id %d and label "%s"',n.id),n.label==="init"){this.log.trace("closing early init channel"),n.close();return}let o={},i=ya({channel:n,direction:"inbound",onEnd:s=>{o.onEnd(s)},logger:e.logger,...this.dataChannelOptions});o.stream=i,o.channel=n,o.onEnd=()=>{this.bufferedStreams=this.bufferedStreams.filter(s=>s.stream.id!==i.id)},this.bufferedStreams.push(o)}}createStreamMuxer(e){return new J3(this.components,{...e,peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,streams:this.bufferedStreams,protocol:this.protocol})}},J3=class{init;streams;protocol;log;peerConnection;dataChannelOptions;metrics;logger;constructor(e,t){this.init=t,this.log=e.logger.forComponent("libp2p:webrtc:muxer"),this.logger=e.logger,this.streams=t.streams.map(n=>n.stream),this.peerConnection=t.peerConnection,this.protocol=t.protocol??tb,this.metrics=t.metrics,this.dataChannelOptions=t.dataChannelOptions??{},this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace("incoming datachannel with channel id %d",n.id),n.label==="init"){this.log.trace("closing init channel"),n.close();return}let o=n.id,i=ya({channel:n,direction:"inbound",onEnd:()=>{this.#e(i,n),this.log("incoming channel %s ended",o)},logger:this.logger,...this.dataChannelOptions});this.streams.push(i),this.metrics?.increment({incoming_stream:!0}),t?.onIncomingStream?.(i)},this.init.streams.length>0&&queueMicrotask(()=>{this.init.streams.forEach(n=>{n.onEnd=()=>{this.log("incoming early channel %s ended with state %s",n.channel.id,n.channel.readyState),this.#e(n.stream,n.channel)},this.metrics?.increment({incoming_stream:!0}),this.init?.onIncomingStream?.(n.stream)})})}#e(e,t){this.log.trace("stream %s %s %s onEnd",e.direction,e.id,e.protocol),Jw(t,`${e.direction} ${e.id} ${e.protocol}`,this.dataChannelOptions.drainTimeout,{log:this.log}),this.streams=this.streams.filter(n=>n.id!==e.id),this.metrics?.increment({stream_end:!0}),this.init?.onStreamEnd?.(e)}async close(e){try{await Promise.all(this.streams.map(async t=>t.close(e)))}catch(t){this.abort(t)}}abort(e){for(let t of this.streams)t.abort(e)}source=dh();sink=fh;newStream(){let e=this.peerConnection.createDataChannel(""),t=e.id;this.log.trace("opened outgoing datachannel with channel id %s",t);let n=ya({channel:e,direction:"outbound",onEnd:()=>{this.#e(n,e),this.log("outgoing channel %s ended",t)},logger:this.logger,...this.dataChannelOptions});return this.streams.push(n),this.metrics?.increment({outgoing_stream:!0}),n}};var hh=globalThis.RTCPeerConnection,ph=globalThis.RTCSessionDescription,rb=globalThis.RTCIceCandidate;var Xo=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},Or=class extends Xo{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var mh=class extends Xo{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var gh=class extends Xo{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},yh=class extends Xo{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 dr;(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=()=>He(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=re((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)=>ee(o,r.codec(),i)})(dr||(dr={}));var wh=async(r,e,t)=>{try{let n=J();for(iP(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal}).catch(()=>{})]);if(o==null){t.signal?.throwIfAborted();break}if(o.type!==dr.Type.ICE_CANDIDATE)throw new he("ICE candidate message expected");let i=JSON.parse(o.data??"null");if(i===""||i===null){t.onProgress?.(new W("webrtc:end-of-ice-candidates")),t.log.trace("end-of-candidates received");continue}let s=new rb(i);t.log.trace("%s received new ICE candidate %o",t.direction,i);try{t.onProgress?.(new W("webrtc:add-ice-candidate",s.candidate)),await r.addIceCandidate(s)}catch(a){t.log.error("%s bad candidate received",t.direction,i,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate",t.direction,n),t.signal?.aborted===!0&&bh(r)!=="connected")throw n}};function bh(r){return ol?r.iceConnectionState:r.connectionState}function iP(r,e){r[ol?"oniceconnectionstatechange":"onconnectionstatechange"]=t=>{switch(bh(r)){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new es("RTCPeerConnection was closed"));break;default:break}}}async function nb({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:i,transportManager:s,log:a,logger:c,onProgress:l}){let{baseAddr:u}=ob(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing base address: %a",u);let d=u.getPeerId();if(d==null)throw new k("Relay peer was missing");let f=i.getConnections(Ve(d)),h,p=!1;f.length===0?(l?.(new W("webrtc:dial-relay")),h=await s.dial(u,{signal:t,onProgress:l}),p=!0):(l?.(new W("webrtc:reuse-relay-connection")),h=f[0]);try{l?.(new W("webrtc:open-signaling-stream"));let g=await h.newStream(xh,{signal:t,runOnLimitedConnection:!0}),m=We(g).pb(dr),y=new hh(r),x=new Yo({logger:c},{peerConnection:y,dataChannelOptions:e});try{let w=y.createDataChannel("init");y.onicecandidate=({candidate:R})=>{let S=JSON.stringify(R?.toJSON()??null);a.trace("initiator sending ICE candidate %o",R),m.write({type:dr.Type.ICE_CANDIDATE,data:S},{signal:t}).catch(A=>{a.error("error sending ICE candidate",A)})},y.onicecandidateerror=R=>{a.error("initiator ICE candidate error",R)};let I=await y.createOffer().catch(R=>{throw a.error("could not execute createOffer",R),new Or("Failed to set createOffer")});a.trace("initiator send SDP offer %s",I.sdp),l?.(new W("webrtc:send-sdp-offer")),await m.write({type:dr.Type.SDP_OFFER,data:I.sdp},{signal:t}),await y.setLocalDescription(I).catch(R=>{throw a.error("could not execute setLocalDescription",R),new Or("Failed to set localDescription")}),l?.(new W("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let B=await m.read({signal:t});if(B.type!==dr.Type.SDP_ANSWER)throw new Or("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",B.data);let D=new ph({type:"answer",sdp:B.data});return await y.setRemoteDescription(D).catch(R=>{throw a.error("could not execute setRemoteDescription",R),new Or("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new W("webrtc:read-ice-candidates")),await wh(y,m,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected, closing init channel"),w.close(),l?.(new W("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await g.close({signal:t}),a.trace("initiator connected to remote address %s",o),{remoteAddress:o,peerConnection:y,muxerFactory:x}}catch(w){throw a.error("outgoing signaling error",w),y.close(),g.abort(w),w}finally{y.onicecandidate=null,y.onicecandidateerror=null}}finally{if(p)try{await h.close({signal:t})}catch(g){h.abort(g)}}}var sP=Pe(jd.matchers[0],pe("p2p-circuit")),vh=class extends me{transportManager;shutdownController;constructor(e,t){super(),this.transportManager=e.transportManager,this.shutdownController=t.shutdownController}async listen(){queueMicrotask(()=>{this.safeDispatchEvent("listening")})}getAddrs(){return this.transportManager.getListeners().filter(e=>e!==this).map(e=>e.getAddrs().filter(t=>sP.exactMatch(t)).map(t=>t.encapsulate("/webrtc"))).flat()}async close(){this.shutdownController.abort(),queueMicrotask(()=>{this.safeDispatchEvent("close")})}};async function ib({peerConnection:r,stream:e,signal:t,connection:n,log:o}){o.trace("new inbound signaling stream");let i=We(e).pb(dr);try{r.onicecandidate=({candidate:u})=>{let d=JSON.stringify(u?.toJSON()??null);o.trace("recipient sending ICE candidate %s",d),i.write({type:dr.Type.ICE_CANDIDATE,data:d},{signal:t}).catch(f=>{o.error("error sending ICE candidate",f)})},o.trace("recipient read SDP offer");let a=await i.read({signal:t});if(a.type!==dr.Type.SDP_OFFER)throw new Or(`expected message type SDP_OFFER, received: ${a.type??"undefined"} `);o.trace("recipient received SDP offer %s",a.data);let c=new ph({type:"offer",sdp:a.data});await r.setRemoteDescription(c).catch(u=>{throw o.error("could not execute setRemoteDescription",u),new Or("Failed to set remoteDescription")});let l=await r.createAnswer().catch(u=>{throw o.error("could not execute createAnswer",u),new Or("Failed to create answer")});o.trace("recipient send SDP answer %s",l.sdp),await i.write({type:dr.Type.SDP_ANSWER,data:l.sdp},{signal:t}),await r.setLocalDescription(l).catch(u=>{throw o.error("could not execute setLocalDescription",u),new Or("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await wh(r,i,{direction:"recipient",signal:t,log:o})}catch(a){if(bh(r)!=="connected")throw o.error("error while handling signaling stream from peer %a",n.remoteAddr,a),r.close(),a;o("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",n.remoteAddr,a)}let s=$(`/webrtc/p2p/${n.remoteAddr.getPeerId()}`);return o.trace("recipient connected to remote address %s",s),{remoteAddress:s}}var aP="/webrtc",cP="/p2p-circuit",xh="/webrtc-signaling/0.0.1",lP=30*1e3,Eh=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"})})}[co]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[Se]=["@libp2p/transport"];[fr]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(xh,e=>{this._onProtocol(e).catch(t=>{this.log.error("failed to handle incoming connect from %p",e.connection.remotePeer,t)})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(xh),this._started=!1}createListener(e){return new vh(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(Pc.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 nb({rtcConfiguration:await j3(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=new Wi(this.components,{peerConnection:o,timeline:{open:Date.now()},remoteAddr:n,metrics:this.metrics?.dialerEvents}),a=await t.upgrader.upgradeOutbound(s,{skipProtection:!0,skipEncryption:!0,muxerFactory:i,onProgress:t.onProgress});return this._closeOnShutdown(o,s),a}async _onProtocol({connection:e,stream:t}){let n=AbortSignal.timeout(this.init.inboundConnectionTimeout??lP),o=new hh(await j3(this.init.rtcConfiguration)),i=new Yo(this.components,{peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:s}=await ib({peerConnection:o,connection:e,stream:t,signal:n,log:this.log});await t.close({signal:n});let a=new Wi(this.components,{peerConnection:o,timeline:{open:new Date().getTime()},remoteAddr:s,metrics:this.metrics?.listenerEvents});await this.components.upgrader.upgradeInbound(a,{skipEncryption:!0,skipProtection:!0,muxerFactory:i}),this._closeOnShutdown(o,a)}catch(s){throw this.log.error("incoming signaling error",s),o.close(),t.abort(s),s}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function ob(r){let e=r.toString().split(aP+"/");if(e.length!==2)throw new k("webrtc protocol was not present in multiaddr");if(!e[0].includes(cP))throw new k("p2p-circuit protocol was not present in multiaddr");let t=$(e[0]),o=$("/"+e[1]).getPeerId();if(o==null)throw new k("destination peer id was missing");let i=t.protos().pop();if(i===void 0)throw new k("invalid multiaddr");return i.name!=="p2p"&&(t=t.encapsulate(`/p2p/${o}`)),{baseAddr:t,peerId:Ve(o)}}var Sh=class extends me{async listen(){throw new gh("WebRTCTransport.createListener")}getAddrs(){return[]}async close(){}};var e4=Object.values(ii).map(r=>r.decoder).reduce((r,e)=>r.or(e)),uP=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function sb(r){return r?.match(uP)?.groups?.fingerprint}function t4(r){let t=r.stringTuples().filter(n=>n[0]===db).map(n=>n[1])[0];if(t===void 0||t==="")throw new k(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function dP(r){return Ge.decode(e4.decode(r))}function fP(r){let e=dP(t4(r)),t=hP(e.code),n=e.digest.reduce((i,s)=>i+s.toString(16).padStart(2,"0"),""),o=n.match(/.{1,2}/g);if(o==null)throw new mh(n,r.toString());return`${t} ${o.join(":").toUpperCase()}`}function ab(r){let e=r.split(":").map(o=>parseInt(o,16)),t=Uint8Array.from(e),n=Ot(Qe.code,t);return $(`/certhash/${Ta.encode(n.bytes)}`)}function hP(r){switch(r){case 17:return"sha-1";case 18:return"sha-256";case 19:return"sha-512";default:throw new yh(r)}}function cb(r,e){let{host:t,port:n,family:o}=r.toOptions(),i=fP(r);return{type:"answer",sdp:`v=0
18
+ `)}`:`${t} :`}};aw=Wo;G.Constructed=aw;Wo.NAME="CONSTRUCTED";var wf=class extends Bt{fromBER(e,t,n){return t}toBER(e){return dn}};wf.override="EndOfContentValueBlock";var cw,bf=class extends St{constructor(e={}){super(e,wf),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};cw=bf;G.EndOfContent=cw;bf.NAME=Kc;var lw,$i=class extends St{constructor(e={}){super(e,Bt),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}`}};lw=$i;G.Null=lw;$i.NAME="NULL";var xf=class extends no(Bt){constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=ye.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);return ro(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,M3.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};xf.NAME="BooleanValueBlock";var uw,vf=class extends St{constructor(e={}){super(e,xf),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};uw=vf;G.Boolean=uw;vf.NAME="BOOLEAN";var Ef=class extends no(_n){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=_n.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===Kc){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(s!==nw)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?_n.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};Ef.NAME="OctetStringValueBlock";var dw,Jn=class r extends St{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},Ef),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=Zf(i,0,i.byteLength);s.offset!==-1&&s.offset===n&&(this.valueBlock.value=[s.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){return this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length?Wo.prototype.onAsciiEncoding.call(this):`${this.constructor.NAME} : ${ye.Convert.ToHex(this.valueBlock.valueHexView)}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let t of this.valueBlock.value)t instanceof r&&e.push(t.valueBlock.valueHexView);return ye.BufferSourceConverter.concat(e)}};dw=Jn;G.OctetString=dw;Jn.NAME=nw;var Sf=class extends no(_n){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=_n.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===Kc){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==ow)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=ye.BufferSourceConverter.toUint8Array(e);if(!ro(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=Zf(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 _n.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength)return dn;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}}};Sf.NAME="BitStringValueBlock";var fw,Af=class extends St{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},Sf),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 Wo.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let o of t)e.push(o.toString(2).padStart(8,"0"));let n=e.join("");return`${this.constructor.NAME} : ${n.substring(0,n.length-this.valueBlock.unusedBits)}`}}};fw=Af;G.BitString=fw;Af.NAME=ow;var hw;function zk(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,u=c<s?s:c,d=0;for(let f=u;f>=0;f--,d++){switch(!0){case d<a.length:l=i[s-d]+a[c-d]+t[0];break;default:l=i[s-d]+t[0]}switch(t[0]=l/10,!0){case d>=i.length:i=df(new Uint8Array([l%10]),i);break;default:i[s-d]=l%10}}return t[0]>0&&(i=df(t,i)),i}function rw(r){if(r>=Vc.length)for(let e=Vc.length;e<=r;e++){let t=new Uint8Array([0]),n=Vc[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=df(t,n)),Vc.push(n)}return Vc[r]}function Wk(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,u=0;for(let d=c;d>=0;d--,u++)switch(l=i[s-u]-a[c-u]-t,!0){case l<0:t=1,i[s-u]=l+10;break;default:t=0,i[s-u]=l}if(t>0)for(let d=s-c+1;d>=0;d--,u++)if(l=i[s-u]-t,l<0)t=1,i[s-u]=l+10;else{t=0,i[s-u]=l;break}return i.slice()}var Hc=class extends no(Bt){constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}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=M3.call(this)))}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(Jy(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=Wk(rw(n),t),s="-";break;default:t=zk(t,rw(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(s+=tw.charAt(t[c]));return a===!1&&(s+=tw.charAt(0)),s}};hw=Hc;Hc.NAME="IntegerValueBlock";Object.defineProperty(hw.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var pw,eo=class r extends St{constructor(e={}){super(e,Hc),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return ff(),BigInt(this.valueBlock.toString())}static fromBigInt(e){ff();let t=BigInt(e),n=new $c,o=t.toString(16).replace(/^-/,""),i=new Uint8Array(ye.Convert.FromHex(o));if(t<0){let a=new Uint8Array(i.length+(i[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${ye.Convert.ToHex(a)}`)+t,u=ye.BufferSourceConverter.toUint8Array(ye.Convert.FromHex(l.toString(16)));u[0]|=128,n.write(u)}else i[0]&128&&n.write(new Uint8Array([0])),n.write(i);return new r({valueHex:n.final()})}convertToDER(){let e=new r({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new r({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};pw=eo;G.Integer=pw;eo.NAME="INTEGER";var mw,If=class extends eo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};mw=If;G.Enumerated=mw;If.NAME="ENUMERATED";var qc=class extends no(Bt){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=ye.BufferSourceConverter.toUint8Array(e);if(!ro(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=Vi(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){ff();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=zo(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",dn;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=ye.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}}};qc.NAME="sidBlock";var Tf=class extends Bt{constructor({value:e=la,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new qc;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,dn;t.push(o)}return B3(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 qc;if(o>Number.MAX_SAFE_INTEGER){ff();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}};Tf.NAME="ObjectIdentifierValueBlock";var gw,Cn=class extends St{constructor(e={}){super(e,Tf),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};gw=Cn;G.ObjectIdentifier=gw;Cn.NAME="OBJECT IDENTIFIER";var zc=class extends no(jn){constructor({valueDec:e=0,...t}={}){super(t),this.valueDec=e}fromBER(e,t,n){if(n===0)return t;let o=ye.BufferSourceConverter.toUint8Array(e);if(!ro(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=Vi(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=zo(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",dn;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=ye.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};zc.NAME="relativeSidBlock";var _f=class extends Bt{constructor({value:e=la,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new zc;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,dn;n.push(i)}return B3(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 zc;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}};_f.NAME="RelativeObjectIdentifierValueBlock";var yw,Cf=class extends St{constructor(e={}){super(e,_f),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};yw=Cf;G.RelativeObjectIdentifier=yw;Cf.NAME="RelativeObjectIdentifier";var ww,lr=class extends Wo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};ww=lr;G.Sequence=ww;lr.NAME="SEQUENCE";var bw,kf=class extends Wo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};bw=kf;G.Set=bw;kf.NAME="SET";var Pf=class extends no(Bt){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=la}toJSON(){return{...super.toJSON(),value:this.value}}};Pf.NAME="StringValueBlock";var Rf=class extends Pf{};Rf.NAME="SimpleStringValueBlock";var Yt=class extends mf{constructor({...e}={}){super(e,Rf)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,ye.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}};Yt.NAME="SIMPLE STRING";var Df=class extends Yt{fromBuffer(e){this.valueBlock.valueHexView=ye.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=ye.Convert.ToUtf8String(e)}catch(t){this.warnings.push(`Error during "decodeURIComponent": ${t}, using raw string`),this.valueBlock.value=ye.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array(ye.Convert.FromUtf8String(e)),this.valueBlock.value=e}};Df.NAME="Utf8StringValueBlock";var xw,to=class extends Df{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};xw=to;G.Utf8String=xw;to.NAME="UTF8String";var Nf=class extends Yt{fromBuffer(e){this.valueBlock.value=ye.Convert.ToUtf16String(e),this.valueBlock.valueHexView=ye.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array(ye.Convert.FromUtf16String(e))}};Nf.NAME="BmpStringValueBlock";var vw,Lf=class extends Nf{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};vw=Lf;G.BmpString=vw;Lf.NAME="BMPString";var Of=class extends Yt{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=zo(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}};Of.NAME="UniversalStringValueBlock";var Ew,Mf=class extends Of{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};Ew=Mf;G.UniversalString=Ew;Mf.NAME="UniversalString";var Sw,Bf=class extends Yt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};Sw=Bf;G.NumericString=Sw;Bf.NAME="NumericString";var Aw,Uf=class extends Yt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};Aw=Uf;G.PrintableString=Aw;Uf.NAME="PrintableString";var Iw,Ff=class extends Yt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};Iw=Ff;G.TeletexString=Iw;Ff.NAME="TeletexString";var Tw,Vf=class extends Yt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};Tw=Vf;G.VideotexString=Tw;Vf.NAME="VideotexString";var _w,$f=class extends Yt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};_w=$f;G.IA5String=_w;$f.NAME="IA5String";var Cw,Kf=class extends Yt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};Cw=Kf;G.GraphicString=Cw;Kf.NAME="GraphicString";var kw,Wc=class extends Yt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};kw=Wc;G.VisibleString=kw;Wc.NAME="VisibleString";var Pw,Hf=class extends Yt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};Pw=Hf;G.GeneralString=Pw;Hf.NAME="GeneralString";var Rw,qf=class extends Yt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};Rw=qf;G.CharacterString=Rw;qf.NAME="CharacterString";var Dw,Gc=class extends Wc{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,ye.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]=cr(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=cr(this.month,2),t[2]=cr(this.day,2),t[3]=cr(this.hour,2),t[4]=cr(this.minute,2),t[5]=cr(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}}};Dw=Gc;G.UTCTime=Dw;Gc.NAME="UTCTime";var Nw,zf=class extends Gc{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(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond))}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 d=new Number(e[e.length-1]);if(isNaN(d.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 d=1,f=n.indexOf("+"),h="";if(f===-1&&(f=n.indexOf("-"),d=-1),f!==-1){if(h=n.substring(f+1),n=n.substring(0,f),h.length!==2&&h.length!==4)throw new Error("Wrong input string for conversion");let p=parseInt(h.substring(0,2),10);if(isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");if(a=d*p,h.length===4){if(p=parseInt(h.substring(2,4),10),isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");c=d*p}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let d=new Number(`0${n.substring(l)}`);if(isNaN(d.valueOf()))throw new Error("Wrong input string for conversion");i=d.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 d=60*i;this.minute=Math.floor(d),d=60*(d-this.minute),this.second=Math.floor(d),d=1e3*(d-this.second),this.millisecond=Math.floor(d)}break;case o.length===12:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=60*i;this.second=Math.floor(d),d=1e3*(d-this.second),this.millisecond=Math.floor(d)}break;case o.length===14:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=1e3*i;this.millisecond=Math.floor(d)}break;default:throw new Error("Wrong input string for conversion")}let u=s.exec(o);if(u===null)throw new Error("Wrong input string for conversion");for(let d=1;d<u.length;d++)switch(d){case 1:this.year=parseInt(u[d],10);break;case 2:this.month=parseInt(u[d],10);break;case 3:this.day=parseInt(u[d],10);break;case 4:this.hour=parseInt(u[d],10)+a;break;case 5:this.minute=parseInt(u[d],10)+c;break;case 6:this.second=parseInt(u[d],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let d=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=d.getUTCFullYear(),this.month=d.getUTCMonth(),this.day=d.getUTCDay(),this.hour=d.getUTCHours(),this.minute=d.getUTCMinutes(),this.second=d.getUTCSeconds(),this.millisecond=d.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(cr(this.year,4)),t.push(cr(this.month,2)),t.push(cr(this.day,2)),t.push(cr(this.hour,2)),t.push(cr(this.minute,2)),t.push(cr(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(cr(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};Nw=zf;G.GeneralizedTime=Nw;zf.NAME="GeneralizedTime";var Lw,Wf=class extends to{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};Lw=Wf;G.DATE=Lw;Wf.NAME="DATE";var Ow,Gf=class extends to{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};Ow=Gf;G.TimeOfDay=Ow;Gf.NAME="TimeOfDay";var Mw,Qf=class extends to{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};Mw=Qf;G.DateTime=Mw;Qf.NAME="DateTime";var Bw,Yf=class extends to{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};Bw=Yf;G.Duration=Bw;Yf.NAME="Duration";var Uw,Xf=class extends to{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};Uw=Xf;G.TIME=Uw;Xf.NAME="TIME";async function F3(r,e){let n=await aa.create().encrypt(r,e);return ot.encode(n)}async function V3(r,e,t){if(r.type==="RSA")return Yk(r,e,t);if(r.type==="Ed25519")return Gk(r,e,t);if(r.type==="secp256k1")return Qk(r,e,t);throw new Ur}async function Gk(r,e,t="libp2p-key"){if(t==="libp2p-key")return F3(Es(r),e);throw new P(`export format '${t}' is not supported`)}async function Qk(r,e,t="libp2p-key"){if(t==="libp2p-key")return F3(Es(r),e);throw new P("Export format is not supported")}async function Yk(r,e,t="pkcs-8"){if(t==="pkcs-8")return Xk(r,e);if(t==="libp2p-key")return F3(Es(r),e);throw new P("Export format is not supported")}async function Xk(r,e){let t=tr.get(),o=new lr({value:[new eo({value:0}),new lr({value:[new Cn({value:"1.2.840.113549.1.1.1"}),new $i]}),new Jn({valueHex:r.raw})]}).toBER(),i=new Uint8Array(o,0,o.byteLength),s=qt(16),a=await iu(wo,e,s,{c:1e4,dkLen:32}),c=qt(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),u=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,i),d=new lr({value:[new Jn({valueHex:s}),new eo({value:1e4}),new eo({value:32}),new lr({value:[new Cn({value:"1.2.840.113549.2.11"}),new $i]})]}),f=new lr({value:[new Cn({value:"1.2.840.113549.1.5.13"}),new lr({value:[new lr({value:[new Cn({value:"1.2.840.113549.1.5.12"}),d]}),new lr({value:[new Cn({value:"2.16.840.1.101.3.4.1.42"}),new Jn({valueHex:c})]})]})]}),p=new lr({value:[f,new Jn({valueHex:u})]}).toBER(),g=new Uint8Array(p,0,p.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...O(g,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
19
+ `)}async function $3(r,e){try{let t=await Zk(r,e);return S6(t)}catch{}if(!r.includes("BEGIN"))throw new P("Encrypted key was not a libp2p-key or a PEM file");return jk(r,e)}async function Zk(r,e){let t=ot.decode(r);return aa.create().decrypt(t,e)}async function jk(r,e){let t=tr.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let i=L(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=jf(i),{iv:a,salt:c,iterations:l,keySize:u,cipherText:d}=Jk(s),f=await iu(wo,e,c,{c:l,dkLen:u}),h=await t.subtle.importKey("raw",f,"AES-CBC",!1,["decrypt"]),p=Qc(await t.subtle.decrypt({name:"AES-CBC",iv:a},h,d)),{result:g}=jf(p);n=Kw(g)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let i=L(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=jf(i);n=Kw(s)}else throw new P("Could not parse private key from PEM data");let o=A6(n);if(o.type!=="RSA")throw new P("Could not parse RSA private key from PEM data");return o}function Jk(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=Qc(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],u=l.valueBlock.value[0].toString();if(u!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(u!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new P("Only AES-CBC encryption schemes are supported")}}}}let d=Qc(l.valueBlock.value[1].getValue());return{cipherText:Qc(r.valueBlock.value[1].getValue()),salt:s,iterations:a,keySize:c,iv:d}}function Kw(r){return Qc(r.valueBlock.value[2].getValue())}function Qc(r){return new Uint8Array(r,0,r.byteLength)}var eP="/pkcs8/",H3="/info/",Yc=new WeakMap,Ki={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},K3={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function ua(r){return r==null||typeof r!="string"?!1:r===(0,Hw.default)(r.trim())&&r.length>0}async function At(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function Hi(r){return new Le(eP+r)}function da(r){return new Le(H3+r)}async function tP(r){let e=Es(r),t=await Ye.digest(e);return be.encode(t.bytes).substring(1)}var Jf=class{components;init;log;self;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init=sa(K3,t),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<Ki.minKeyLength)throw new Error(`dek.keyLength must be least ${Ki.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<Ki.minSaltLength)throw new Error(`dek.saltLength must be least ${Ki.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<Ki.minIterationCount)throw new Error(`dek.iterationCount must be least ${Ki.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?Qa(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Yc.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[Ae]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},K3),t=Math.ceil(Ki.minSaltLength/3)*3;return e.dek.salt=O(qt(t),"base64"),e}static get options(){return K3}async findKeyByName(e){if(!ua(e))throw await At(),new P(`Invalid key name '${e}'`);let t=da(e);try{let n=await this.components.datastore.get(t);return JSON.parse(O(n))}catch(n){throw await At(),this.log.error(n),new Ce(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:H3};for await(let n of this.components.datastore.query(t)){let o=JSON.parse(O(n.value));if(o.id===e)return o}throw new P(`Key with id '${e}' does not exist.`)}catch(t){throw await At(),t}}async importKey(e,t){if(!ua(e))throw await At(),new P(`Invalid key name '${e}'`);if(t==null)throw await At(),new P("Key is required");let n=Hi(e);if(await this.components.datastore.has(n))throw await At(),new P(`Key '${e}' already exists`);let i,s;try{i=await tP(t);let l=Yc.get(this);if(l==null)throw new P("dek missing");let u=l.dek;s=await V3(t,u,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await At(),l}let a={name:e,id:i},c=this.components.datastore.batch();return c.put(n,L(s)),c.put(da(e),L(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!ua(e))throw await At(),new P(`Invalid key name '${e}'`);let t=Hi(e);try{let n=await this.components.datastore.get(t),o=O(n),i=Yc.get(this);if(i==null)throw new P("dek missing");let s=i.dek;return await $3(o,s)}catch(n){throw await At(),n}}async removeKey(e){if(!ua(e)||e===this.self)throw await At(),new P(`Invalid key name '${e}'`);let t=Hi(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(da(e)),await o.commit(),n}async listKeys(){let e={prefix:H3},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(O(n.value)));return t}async renameKey(e,t){if(!ua(e)||e===this.self)throw await At(),new P(`Invalid old key name '${e}'`);if(!ua(t)||t===this.self)throw await At(),new P(`Invalid new key name '${t}'`);let n=Hi(e),o=Hi(t),i=da(e),s=da(t);if(await this.components.datastore.has(o))throw await At(),new P(`Key '${t}' already exists`);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(i),u=JSON.parse(O(l));u.name=t;let d=this.components.datastore.batch();return d.put(o,c),d.put(s,L(JSON.stringify(u))),d.delete(n),d.delete(i),await d.commit(),u}catch(c){throw await At(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await At(),new P(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await At(),new P(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await At(),new P(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=Yc.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?Qa(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Yc.set(this,{dek:i});let s=await this.listKeys();for(let a of s){let c=await this.components.datastore.get(Hi(a.name)),l=O(c),u=await $3(l,o),d=i.toString(),f=await V3(u,d,u.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),p={name:a.name,id:a.id};h.put(Hi(a.name),L(f)),h.put(da(a.name),L(JSON.stringify(p))),await h.commit()}this.log("keychain reconstructed")}};function eh(r={}){return e=>new Jf(e,r)}var fa=class{memoryStorage;points;duration;blockDuration;execEvenly;execEvenlyMinDelayMs;keyPrefix;constructor(e={}){this.points=e.points??4,this.duration=e.duration??1,this.blockDuration=e.blockDuration??0,this.execEvenly=e.execEvenly??!1,this.execEvenlyMinDelayMs=e.execEvenlyMinDelayMs??this.duration*1e3/this.points,this.keyPrefix=e.keyPrefix??"rlflx",this.memoryStorage=new q3}async consume(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,t,i);if(s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s.consumedPoints>this.points)throw this.blockDuration>0&&s.consumedPoints<=this.points+t&&(s=this.memoryStorage.set(o,s.consumedPoints,this.blockDuration)),new wl("Rate limit exceeded",s);if(this.execEvenly&&s.msBeforeNext>0&&!s.isFirstInDuration){let a=Math.ceil(s.msBeforeNext/(s.remainingPoints+2));a<this.execEvenlyMinDelayMs&&(a=s.consumedPoints*this.execEvenlyMinDelayMs),await y1(a)}return s}penalty(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,t,i);return s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s}reward(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,-t,i);return s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s}block(e,t){let n=t*1e3,o=this.points+1;return this.memoryStorage.set(this.getKey(e),o,t),{remainingPoints:0,msBeforeNext:n===0?-1:n,consumedPoints:o,isFirstInDuration:!1}}set(e,t,n=0){let o=(n>=0?n:this.duration)*1e3;return this.memoryStorage.set(this.getKey(e),t,n),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:t,isFirstInDuration:!1}}get(e){let t=this.memoryStorage.get(this.getKey(e));return t!=null&&(t.remainingPoints=Math.max(this.points-t.consumedPoints,0)),t}delete(e){this.memoryStorage.delete(this.getKey(e))}_getKeySecDuration(e){return e?.customDuration!=null&&e.customDuration>=0?e.customDuration:this.duration}getKey(e){return this.keyPrefix.length>0?`${this.keyPrefix}:${e}`:e}parseKey(e){return e.substring(this.keyPrefix.length)}},q3=class{storage;constructor(){this.storage=new Map}incrby(e,t,n){let o=this.storage.get(e);if(o!=null){let i=o.expiresAt!=null?o.expiresAt.getTime()-new Date().getTime():-1;return o.expiresAt==null||i>0?(o.value+=t,{remainingPoints:0,msBeforeNext:i,consumedPoints:o.value,isFirstInDuration:!1}):this.set(e,t,n)}return this.set(e,t,n)}set(e,t,n){let o=n*1e3,i=this.storage.get(e);i!=null&&clearTimeout(i.timeoutId);let s={value:t,expiresAt:o>0?new Date(Date.now()+o):void 0};return this.storage.set(e,s),o>0&&(s.timeoutId=setTimeout(()=>{this.storage.delete(e)},o),s.timeoutId.unref!=null&&s.timeoutId.unref()),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:s.value,isFirstInDuration:!0}}get(e){let t=this.storage.get(e);if(t!=null)return{remainingPoints:0,msBeforeNext:t.expiresAt!=null?t.expiresAt.getTime()-new Date().getTime():-1,consumedPoints:t.value,isFirstInDuration:!1}}delete(e){let t=this.storage.get(e);return t!=null?(t.timeoutId!=null&&clearTimeout(t.timeoutId),this.storage.delete(e),!0):!1}};var we;(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"})(we||(we={}));var Xc=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),z3=Object.freeze({NEW_STREAM:we.NEW_STREAM,MESSAGE:we.MESSAGE_INITIATOR,CLOSE:we.CLOSE_INITIATOR,RESET:we.RESET_INITIATOR}),qw=Object.freeze({MESSAGE:we.MESSAGE_RECEIVER,CLOSE:we.CLOSE_RECEIVER,RESET:we.RESET_RECEIVER});var W3=1<<20,rP=4<<20,th=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=W3,t=rP){this._buffer=new ae,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 fe("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===we.NEW_STREAM||o===we.MESSAGE_INITIATOR||o===we.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}=Ww(e),{value:o,offset:i}=Ww(e,n),s=t&7;if(Xc[s]==null)throw new Error(`Invalid type received: ${s}`);if(o>this._maxMessageSize)throw new fe("Message size too large");return{id:t>>3,type:s,offset:n+i,length:o}}},nP=128,zw=127;function Ww(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&zw)<<n:(i&zw)*Math.pow(2,n),n+=7}while(i>=nP);return e=o-e,{value:t,offset:e}}var G3=10*1024,Q3=class{_pool;_poolOffset;constructor(){this._pool=Qe(G3),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;$e(e.id<<3|e.type,n,o),o+=me(e.id<<3|e.type),(e.type===we.NEW_STREAM||e.type===we.MESSAGE_INITIATOR||e.type===we.MESSAGE_RECEIVER)&&e.data!=null?($e(e.data.length,n,o),o+=me(e.data.length)):($e(0,n,o),o+=me(0));let i=n.subarray(this._poolOffset,o);G3-o<100?(this._pool=Qe(G3),this._poolOffset=0):this._poolOffset=o,t.append(i),(e.type===we.NEW_STREAM||e.type===we.MESSAGE_INITIATOR||e.type===we.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},oP=new Q3;async function*Gw(r){for await(let e of r){let t=new ae;oP.write(e,t),yield t}}var rh=class extends Error{constructor(e="Stream input buffer error"){super(e),this.name="StreamInputBufferError"}};var Y3=class extends Mo{name;streamId;send;types;maxDataSize;constructor(e){super(e),this.types=e.direction==="outbound"?z3:qw,this.send=e.send,this.name=e.name,this.streamId=e.streamId,this.maxDataSize=e.maxDataSize}async sendNewStream(){await this.send({id:this.streamId,type:z3.NEW_STREAM,data:new ae(L(this.name))})}async sendData(e){for(e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxDataSize);await this.send({id:this.streamId,type:this.types.MESSAGE,data:e.sublist(0,t)}),e.consume(t)}}async sendReset(){await this.send({id:this.streamId,type:this.types.RESET})}async sendCloseWrite(){await this.send({id:this.streamId,type:this.types.CLOSE})}async sendCloseRead(){}};function Qw(r){let{id:e,name:t,send:n,onEnd:o,type:i="initiator",maxMsgSize:s=W3}=r;return new Y3({id:i==="initiator"?`i${e}`:`r${e}`,streamId:e,name:`${t??e}`,direction:i==="initiator"?"outbound":"inbound",maxDataSize:s,onEnd:o,send:n,log:r.logger.forComponent(`libp2p:mplex:stream:${i}:${e}`)})}var iP=1024,sP=1024,aP=1024*1024*4,cP=5,lP=500;function Yw(r){let e={...r,type:`${Xc[r.type]} (${r.type})`};return r.type===we.NEW_STREAM&&(e.data=O(r.data instanceof Uint8Array?r.data:r.data.subarray())),(r.type===we.MESSAGE_INITIATOR||r.type===we.MESSAGE_RECEIVER)&&(e.data=O(r.data instanceof Uint8Array?r.data:r.data.subarray(),"base16")),e}var nh=class{protocol="/mplex/6.7.0";sink;source;log;_streamId;_streams;_init;_source;closeController;rateLimiter;closeTimeout;logger;constructor(e,t){t=t??{},this.log=e.logger.forComponent("libp2p:mplex"),this.logger=e.logger,this._streamId=0,this._streams={initiators:new Map,receivers:new Map},this._init=t,this.closeTimeout=t.closeTimeout??lP,this.sink=this._createSink(),this._source=Zt({objectMode:!0,onEnd:()=>{for(let n of this._streams.initiators.values())n.destroy();for(let n of this._streams.receivers.values())n.destroy()}}),this.source=ut(this._source,n=>Gw(n)),this.closeController=new AbortController,this.rateLimiter=new fa({points:t.disconnectThreshold??cP,duration:1})}get streams(){let e=[];for(let t of this._streams.initiators.values())e.push(t);for(let t of this._streams.receivers.values())e.push(t);return e}newStream(e){if(this.closeController.signal.aborted)throw new mn("Muxer already closed");let t=this._streamId++;e=e==null?t.toString():e.toString();let n=this._streams.initiators;return this._newStream({id:t,name:e,type:"initiator",registry:n})}async close(e){if(this.closeController.signal.aborted)return;let t=e?.signal??AbortSignal.timeout(this.closeTimeout);try{await Promise.all(this.streams.map(async n=>n.close({signal:t}))),this._source.end(),await this._source.onEmpty({signal:t}),this.closeController.abort()}catch(n){this.abort(n)}}abort(e){this.closeController.signal.aborted||(this.streams.forEach(t=>{t.abort(e)}),this.closeController.abort(e))}_newReceiverStream(e){let{id:t,name:n}=e,o=this._streams.receivers;return this._newStream({id:t,name:n,type:"receiver",registry:o})}_newStream(e){let{id:t,name:n,type:o,registry:i}=e;if(this.log("new %s stream %s",o,t),o==="initiator"&&this._streams.initiators.size===(this._init.maxOutboundStreams??sP))throw new lo("Too many outbound streams open");if(i.has(t))throw new Error(`${o} stream ${t} already exists!`);let c=Qw({id:t,name:n,send:async l=>{this.log.enabled&&this.log.trace("%s stream %s send",o,t,Yw(l)),this._source.push(l)},type:o,onEnd:()=>{this.log("%s stream with id %s and protocol %s ended",o,t,c.protocol),i.delete(t),this._init.onStreamEnd!=null&&this._init.onStreamEnd(c)},maxMsgSize:this._init.maxMsgSize,logger:this.logger});return i.set(t,c),c}_createSink(){return async t=>{let n=()=>{Yd(t,this.log)};this.closeController.signal.addEventListener("abort",n);try{let o=new th(this._init.maxMsgSize,this._init.maxUnprocessedMessageQueueSize);for await(let i of t)for(let s of o.write(i))await this._handleIncoming(s);this._source.end()}catch(o){this.log("error in sink",o),this._source.end(o)}finally{this.closeController.signal.removeEventListener("abort",n)}}}async _handleIncoming(e){let{id:t,type:n}=e;if(this.log.enabled&&this.log.trace("incoming message",Yw(e)),e.type===we.NEW_STREAM){if(this._streams.receivers.size===(this._init.maxInboundStreams??iP)){this.log("too many inbound streams open"),this._source.push({id:t,type:we.RESET_RECEIVER});try{await 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}return}let a=this._newReceiverStream({id:t,name:O(e.data instanceof Uint8Array?e.data:e.data.subarray())});this._init.onIncomingStream!=null&&this._init.onIncomingStream(a);return}let i=((n&1)===1?this._streams.initiators:this._streams.receivers).get(t);if(i==null){this.log("missing stream %s for message type %s",t,Xc[n]);try{await 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}let s=this._init.maxStreamBufferSize??aP;try{switch(n){case we.MESSAGE_INITIATOR:case we.MESSAGE_RECEIVER:if(i.sourceReadableLength()>s)throw this._source.push({id:e.id,type:n===we.MESSAGE_INITIATOR?we.RESET_RECEIVER:we.RESET_INITIATOR}),new rh("Input buffer full - increase Mplex maxBufferSize to accommodate slow consumers");i.sourcePush(e.data);break;case we.CLOSE_INITIATOR:case we.CLOSE_RECEIVER:i.remoteCloseWrite();break;case we.RESET_INITIATOR:case we.RESET_RECEIVER:i.reset();break;default:this.log("unknown message type %s",n)}}catch(a){this.log.error("error while processing message",a),i.abort(a)}}};var X3=class{protocol="/mplex/6.7.0";_init;components;constructor(e,t={}){this.components=e,this._init=t}[Symbol.toStringTag]="@libp2p/mplex";[Ae]=["@libp2p/stream-multiplexing"];createStreamMuxer(e={}){return new nh(this.components,{...e,...this._init})}};function Xw(r={}){return e=>new X3(e,r)}var Zw="1.0.0",jw="ping",Jw="ipfs";var oh=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;log;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:ping"),this.started=!1,this.protocol=`/${t.protocolPrefix??Jw}/${jw}/${Zw}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnLimitedConnection=t.runOnLimitedConnection??!0,this.handleMessage=this.handleMessage.bind(this)}[Symbol.toStringTag]="@libp2p/ping";async start(){await this.components.registrar.handle(this.protocol,this.handleMessage,{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}handleMessage(e){this.log("incoming ping from %p",e.connection.remotePeer);let{stream:t}=e,n=Date.now(),o=Ni(t),i=!1;Promise.resolve().then(async()=>{for(;;){let s=AbortSignal.timeout(this.timeout);s.addEventListener("abort",()=>{t?.abort(new gn("ping timeout"))});let a=await o.read(32,{signal:s});await o.write(a,{signal:s}),i=!0}}).catch(s=>{i&&s.name==="UnexpectedEOFError"&&t.readStatus!=="ready"||(this.log.error("incoming ping from %p failed with error - %e",e.connection.remotePeer,s),t?.abort(s))}).finally(()=>{let s=Date.now()-n;this.log("incoming ping from %p complete in %dms",e.connection.remotePeer,s);let a=AbortSignal.timeout(this.timeout);t.close({signal:a}).catch(c=>{this.log.error("error closing ping stream from %p - %e",e.connection.remotePeer,c),t?.abort(c)})})}async ping(e,t={}){this.log("pinging %p",e);let n=Date.now(),o=qt(32),i=await this.components.connectionManager.openConnection(e,t),s;if(t.signal==null){let a=AbortSignal.timeout(this.timeout);t={...t,signal:a}}try{s=await i.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let a=Ni(s),[,c]=await Promise.all([a.write(o,t),a.read(32,t)]),l=Date.now()-n;if(!J(o,c.subarray()))throw new pl(`Received wrong ping ack after ${l}ms`);return this.log("ping %p complete in %dms",i.remotePeer,l),l}catch(a){throw this.log.error("error while pinging %p",i.remotePeer,a),s?.abort(a),a}finally{s!=null&&await s.close(t)}}};function eb(r={}){return e=>new oh(e,r)}var Ut;(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=()=>He(t)}(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=re((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)=>ee(o,r.codec(),i)})(Ut||(Ut={}));var tb=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"],j3=Array.from("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"),rb="libp2p+webrtc+v1/";var nb=466,ob=2*1024*1024,ib=30*1e3,ha=16*1024;function hP(r=ha){let e=me(r-me(r)),t=1+me(Object.keys(Ut.Flag).length-1),n=1,o=r-e-t-n,i=me(o);return e+t+n+i}var sb=hP(),ab=5e3,cb=5e3,lb=3e4,J3="/webrtc",Zc="/webrtc-signaling/0.0.1";var ub=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))},pP=function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r}();var mP=function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r}();var gP=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 yP=function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r}();var wP=function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r}();var bP=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,xP=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,db=3,vP=[["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",bP]],fb=[["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 pb(r){return r?hb(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new wP:typeof navigator<"u"?hb(navigator.userAgent):AP()}function EP(r){return r!==""&&vP.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 hb(r){var e=EP(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new yP;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<db&&(o=ub(ub([],o,!0),IP(db-o.length),!0)):o=[];var i=o.join("."),s=SP(r),a=xP.exec(r);return a&&a[1]?new gP(t,i,s,a[1]):new pP(t,i,s)}function SP(r){for(var e=0,t=fb.length;e<t;e++){var n=fb[e],o=n[0],i=n[1],s=i.exec(r);if(s)return o}return null}function AP(){var r=typeof process<"u"&&process.version;return r?new mP(process.version.slice(1)):null}function IP(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var mb=pb(),jc=mb!=null&&mb.name==="firefox",ih=async function*(){},sh=async r=>{};function gb(r,e,t=lb,n){r.readyState==="open"&&Promise.resolve().then(async()=>{if(r.bufferedAmount>0){n.log("%s drain channel with %d buffered bytes",e,r.bufferedAmount);let o=j(),i=!1;r.bufferedAmountLowThreshold=0;let s=()=>{i||(n.log("%s drain channel closed before drain",e),o.resolve())};r.addEventListener("close",s,{once:!0}),r.addEventListener("bufferedamountlow",()=>{i=!0,r.removeEventListener("close",s),o.resolve()}),await Xr(o.promise,{milliseconds:t})}}).then(async()=>{r.readyState==="open"&&r.close()}).catch(o=>{n.log.error("error closing outbound stream",o)})}async function e4(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??tb.map(e=>({urls:[e]})),r}var yb=(r=32)=>rb+[...Array(r)].map(()=>j3.at(Math.floor(Math.random()*j3.length))).join("");var qi=class{log;peerConnection;remoteAddr;timeline;metrics;source=ih();sink=sh;constructor(e,t){this.log=e.logger.forComponent("libp2p:webrtc:maconn"),this.remoteAddr=t.remoteAddr,this.timeline=t.timeline,this.peerConnection=t.peerConnection;let n=this.peerConnection,o=n.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change",n.connectionState,"initial state",o),(n.connectionState==="disconnected"||n.connectionState==="failed"||n.connectionState==="closed")&&(this.timeline.close=Date.now())}}async close(e){this.log.trace("closing connection"),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({close:!0})}abort(e){this.log.error("closing connection due to error",e),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({abort:!0})}};var t4=class extends Mo{channel;incomingData;maxBufferedAmount;bufferedAmountLowEventTimeout;maxMessageSize;receiveFinAck;finAckTimeout;openTimeout;closeController;constructor(e){let t=e.onEnd;switch(e.onEnd=o=>{this.log.trace("readable and writeable ends closed",this.status),Promise.resolve(async()=>{if(!(this.timeline.abort!=null||this.timeline.reset!==null))try{await Xr(this.receiveFinAck.promise,{milliseconds:this.finAckTimeout})}catch(i){this.log.error("error receiving FIN_ACK",i)}}).then(()=>{this.incomingData.end(),this.channel.close(),t?.(o)}).catch(i=>{this.log.error("error ending stream",i)})},super(e),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=Zt(),this.bufferedAmountLowEventTimeout=e.bufferedAmountLowEventTimeout??ib,this.maxBufferedAmount=e.maxBufferedAmount??ob,this.maxMessageSize=(e.maxMessageSize??ha)-sb,this.receiveFinAck=j(),this.finAckTimeout=e.closeTimeout??ab,this.openTimeout=e.openTimeout??cb,this.closeController=new AbortController,this.channel.readyState){case"open":this.timeline.open=new Date().getTime();break;case"closed":case"closing":(this.timeline.close===void 0||this.timeline.close===0)&&(this.timeline.close=Date.now());break;case"connecting":break;default:throw this.log.error("unknown datachannel state %s",this.channel.readyState),new jo("Unknown datachannel state")}this.channel.onopen=o=>{this.timeline.open=new Date().getTime()},this.channel.onclose=o=>{this.log.trace("received onclose event"),this.closeController.abort(),this.receiveFinAck.resolve(),this.close().catch(i=>{this.log.error("error closing stream after channel closed",i)})},this.channel.onerror=o=>{this.log.trace("received onerror event"),this.closeController.abort();let i=o.error;this.abort(i)},this.channel.onmessage=async o=>{let{data:i}=o;i===null||i.byteLength===0||this.incomingData.push(new Uint8Array(i,0,i.byteLength))};let n=this;Promise.resolve().then(async()=>{for await(let o of Vr(this.incomingData)){let i=n.processIncomingProtobuf(o);i!=null&&n.sourcePush(new ae(i))}}).catch(o=>{this.log.error("error processing incoming data channel messages",o)})}sendNewStream(){}async _sendMessage(e,t=!0){if(this.channel.readyState==="closed"||this.channel.readyState==="closing")throw new jo(`Invalid datachannel state - ${this.channel.readyState}`);if(this.channel.readyState!=="open"){let n=AbortSignal.timeout(this.openTimeout),o=le([this.closeController.signal,n]);try{this.log('channel state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),await lt(this.channel,"open",o)}finally{o.clear()}this.log('channel state is now "%s", sending data',this.channel.readyState)}if(t&&this.channel.bufferedAmount>this.maxBufferedAmount){let n=AbortSignal.timeout(this.bufferedAmountLowEventTimeout),o=le([this.closeController.signal,n]);try{this.log('channel buffer is %d, wait for "bufferedamountlow" event',this.channel.bufferedAmount),await lt(this.channel,"bufferedamountlow",o)}catch(i){throw n.aborted?new gn(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`):i}finally{o.clear()}}try{this.channel.send(e.subarray())}catch(n){this.log.error("error while sending message",n)}}async sendData(e){for(this.log.trace("-> will send %d bytes",e.byteLength),e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxMessageSize),n=e.subarray(0,t),o=Ut.encode({message:n}),i=Fr.single(o);this.log.trace("-> sending message %s",this.channel.readyState),await this._sendMessage(i),this.log.trace("-> sent message %s",this.channel.readyState),e.consume(t)}this.log.trace("-> sent data %s",this.channel.readyState)}async sendReset(){try{await this._sendFlag(Ut.Flag.RESET)}catch(e){this.log.error("failed to send reset - %e",e)}}async sendCloseWrite(e){if(this.channel.readyState!=="open"){this.receiveFinAck.resolve();return}if(await this._sendFlag(Ut.Flag.FIN)){this.log.trace("awaiting FIN_ACK");try{await Ge(this.receiveFinAck.promise,e?.signal,{errorMessage:"sending close-write was aborted before FIN_ACK was received",errorName:"FinAckNotReceivedError"})}catch(n){this.log.error("failed to await FIN_ACK",n)}}else this.log.trace("sending FIN failed, not awaiting FIN_ACK");this.receiveFinAck.resolve()}async sendCloseRead(){this.channel.readyState==="open"&&await this._sendFlag(Ut.Flag.STOP_SENDING)}processIncomingProtobuf(e){let t=Ut.decode(e);if(t.flag!==void 0&&(this.log.trace('incoming flag %s, write status "%s", read status "%s"',t.flag,this.writeStatus,this.readStatus),t.flag===Ut.Flag.FIN&&(this.remoteCloseWrite(),this.log.trace("sending FIN_ACK"),this._sendFlag(Ut.Flag.FIN_ACK).catch(n=>{this.log.error("error sending FIN_ACK immediately",n)})),t.flag===Ut.Flag.RESET&&this.reset(),t.flag===Ut.Flag.STOP_SENDING&&this.remoteCloseRead(),t.flag===Ut.Flag.FIN_ACK&&(this.log.trace("received FIN_ACK"),this.receiveFinAck.resolve())),this.readStatus==="ready")return t.message}async _sendFlag(e){if(this.channel.readyState!=="open")return this.log.trace('not sending flag %s because channel is "%s" and not "open"',this.channel.readyState,e.toString()),!1;this.log.trace("sending flag %s",e.toString());let t=Ut.encode({flag:e}),n=Fr.single(t);try{return await this._sendMessage(n,!1),!0}catch(o){this.log.error("could not send flag %s - %e",e.toString(),o)}return!1}};function pa(r){let{channel:e,direction:t}=r;return new t4({id:t==="inbound"?`i${e.id}`:`r${e.id}`,log:r.logger.forComponent(`libp2p:webrtc:stream:${t}:${e.id}`),...r})}var Go=class{protocol;peerConnection;bufferedStreams=[];metrics;dataChannelOptions;components;log;constructor(e,t){this.components=e,this.peerConnection=t.peerConnection,this.metrics=t.metrics,this.protocol=t.protocol??J3,this.dataChannelOptions=t.dataChannelOptions??{},this.log=e.logger.forComponent("libp2p:webrtc:muxerfactory"),this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace('incoming early datachannel with channel id %d and label "%s"',n.id),n.label==="init"){this.log.trace("closing early init channel"),n.close();return}let o={},i=pa({channel:n,direction:"inbound",onEnd:s=>{o.onEnd(s)},logger:e.logger,...this.dataChannelOptions});o.stream=i,o.channel=n,o.onEnd=()=>{this.bufferedStreams=this.bufferedStreams.filter(s=>s.stream.id!==i.id)},this.bufferedStreams.push(o)}}createStreamMuxer(e){return new r4(this.components,{...e,peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,streams:this.bufferedStreams,protocol:this.protocol})}},r4=class{init;streams;protocol;log;peerConnection;dataChannelOptions;metrics;logger;constructor(e,t){this.init=t,this.log=e.logger.forComponent("libp2p:webrtc:muxer"),this.logger=e.logger,this.streams=t.streams.map(n=>n.stream),this.peerConnection=t.peerConnection,this.protocol=t.protocol??J3,this.metrics=t.metrics,this.dataChannelOptions=t.dataChannelOptions??{},this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace("incoming datachannel with channel id %d",n.id),n.label==="init"){this.log.trace("closing init channel"),n.close();return}let o=n.id,i=pa({channel:n,direction:"inbound",onEnd:()=>{this.#e(i,n),this.log("incoming channel %s ended",o)},logger:this.logger,...this.dataChannelOptions});this.streams.push(i),this.metrics?.increment({incoming_stream:!0}),t?.onIncomingStream?.(i)},this.init.streams.length>0&&queueMicrotask(()=>{this.init.streams.forEach(n=>{n.onEnd=()=>{this.log("incoming early channel %s ended with state %s",n.channel.id,n.channel.readyState),this.#e(n.stream,n.channel)},this.metrics?.increment({incoming_stream:!0}),this.init?.onIncomingStream?.(n.stream)})})}#e(e,t){this.log.trace("stream %s %s %s onEnd",e.direction,e.id,e.protocol),gb(t,`${e.direction} ${e.id} ${e.protocol}`,this.dataChannelOptions.drainTimeout,{log:this.log}),this.streams=this.streams.filter(n=>n.id!==e.id),this.metrics?.increment({stream_end:!0}),this.init?.onStreamEnd?.(e)}async close(e){try{await Promise.all(this.streams.map(async t=>t.close(e)))}catch(t){this.abort(t)}}abort(e){for(let t of this.streams)t.abort(e)}source=ih();sink=sh;newStream(){let e=this.peerConnection.createDataChannel(""),t=e.id;this.log.trace("opened outgoing datachannel with channel id %s",t);let n=pa({channel:e,direction:"outbound",onEnd:()=>{this.#e(n,e),this.log("outgoing channel %s ended",t)},logger:this.logger,...this.dataChannelOptions});return this.streams.push(n),this.metrics?.increment({outgoing_stream:!0}),n}};var ah=globalThis.RTCPeerConnection,ch=globalThis.RTCSessionDescription,wb=globalThis.RTCIceCandidate;var Qo=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},Lr=class extends Qo{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var lh=class extends Qo{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var uh=class extends Qo{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},dh=class extends Qo{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 ur;(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=()=>He(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=re((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)=>ee(o,r.codec(),i)})(ur||(ur={}));var fh=async(r,e,t)=>{try{let n=j();for(TP(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal}).catch(()=>{})]);if(o==null){t.signal?.throwIfAborted();break}if(o.type!==ur.Type.ICE_CANDIDATE)throw new fe("ICE candidate message expected");let i=JSON.parse(o.data??"null");if(i===""||i===null){t.onProgress?.(new W("webrtc:end-of-ice-candidates")),t.log.trace("end-of-candidates received");continue}let s=new wb(i);t.log.trace("%s received new ICE candidate %o",t.direction,i);try{t.onProgress?.(new W("webrtc:add-ice-candidate",s.candidate)),await r.addIceCandidate(s)}catch(a){t.log.error("%s bad candidate received",t.direction,i,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate",t.direction,n),t.signal?.aborted===!0&&hh(r)!=="connected")throw n}};function hh(r){return jc?r.iceConnectionState:r.connectionState}function TP(r,e){r[jc?"oniceconnectionstatechange":"onconnectionstatechange"]=t=>{switch(hh(r)){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new Zi("RTCPeerConnection was closed"));break;default:break}}}async function bb({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:i,transportManager:s,log:a,logger:c,onProgress:l}){let{baseAddr:u}=xb(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing base address: %a",u);let d=u.getPeerId();if(d==null)throw new P("Relay peer was missing");let f=i.getConnections(Ue(d)),h,p=!1;f.length===0?(l?.(new W("webrtc:dial-relay")),h=await s.dial(u,{signal:t,onProgress:l}),p=!0):(l?.(new W("webrtc:reuse-relay-connection")),h=f[0]);try{l?.(new W("webrtc:open-signaling-stream"));let g=await h.newStream(Zc,{signal:t,runOnLimitedConnection:!0}),m=We(g).pb(ur),y=new ah(r),x=new Go({logger:c},{peerConnection:y,dataChannelOptions:e});try{let w=y.createDataChannel("init");y.onicecandidate=({candidate:R})=>{let S=JSON.stringify(R?.toJSON()??null);a.trace("initiator sending ICE candidate %o",R),m.write({type:ur.Type.ICE_CANDIDATE,data:S},{signal:t}).catch(A=>{a.error("error sending ICE candidate",A)})},y.onicecandidateerror=R=>{a.error("initiator ICE candidate error",R)};let I=await y.createOffer().catch(R=>{throw a.error("could not execute createOffer",R),new Lr("Failed to set createOffer")});a.trace("initiator send SDP offer %s",I.sdp),l?.(new W("webrtc:send-sdp-offer")),await m.write({type:ur.Type.SDP_OFFER,data:I.sdp},{signal:t}),await y.setLocalDescription(I).catch(R=>{throw a.error("could not execute setLocalDescription",R),new Lr("Failed to set localDescription")}),l?.(new W("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let M=await m.read({signal:t});if(M.type!==ur.Type.SDP_ANSWER)throw new Lr("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",M.data);let D=new ch({type:"answer",sdp:M.data});return await y.setRemoteDescription(D).catch(R=>{throw a.error("could not execute setRemoteDescription",R),new Lr("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new W("webrtc:read-ice-candidates")),await fh(y,m,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected, closing init channel"),w.close(),l?.(new W("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await g.close({signal:t}),a.trace("initiator connected to remote address %s",o),{remoteAddress:o,peerConnection:y,muxerFactory:x}}catch(w){throw a.error("outgoing signaling error",w),y.close(),g.abort(w),w}finally{y.onicecandidate=null,y.onicecandidateerror=null}}finally{if(p)try{await h.close({signal:t})}catch(g){h.abort(g)}}}var vb=De(od.matchers[0],he("p2p-circuit")),ph=class r extends pe{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=>vb.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=>vb.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 Eb({peerConnection:r,stream:e,signal:t,connection:n,log:o}){o.trace("new inbound signaling stream");let i=We(e).pb(ur);try{r.onicecandidate=({candidate:u})=>{let d=JSON.stringify(u?.toJSON()??null);o.trace("recipient sending ICE candidate %s",d),i.write({type:ur.Type.ICE_CANDIDATE,data:d},{signal:t}).catch(f=>{o.error("error sending ICE candidate",f)})},o.trace("recipient read SDP offer");let a=await i.read({signal:t});if(a.type!==ur.Type.SDP_OFFER)throw new Lr(`expected message type SDP_OFFER, received: ${a.type??"undefined"} `);o.trace("recipient received SDP offer %s",a.data);let c=new ch({type:"offer",sdp:a.data});await r.setRemoteDescription(c).catch(u=>{throw o.error("could not execute setRemoteDescription",u),new Lr("Failed to set remoteDescription")});let l=await r.createAnswer().catch(u=>{throw o.error("could not execute createAnswer",u),new Lr("Failed to create answer")});o.trace("recipient send SDP answer %s",l.sdp),await i.write({type:ur.Type.SDP_ANSWER,data:l.sdp},{signal:t}),await r.setLocalDescription(l).catch(u=>{throw o.error("could not execute setLocalDescription",u),new Lr("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await fh(r,i,{direction:"recipient",signal:t,log:o})}catch(a){if(hh(r)!=="connected")throw o.error("error while handling signaling stream from peer %a",n.remoteAddr,a),r.close(),a;o("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",n.remoteAddr,a)}let s=$(`/webrtc/p2p/${n.remoteAddr.getPeerId()}`);return o.trace("recipient connected to remote address %s",s),{remoteAddress:s}}var mh=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"})})}[so]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[Ae]=["@libp2p/transport"];[dr]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(Zc,e=>{let t=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);this._onProtocol(e,t).catch(n=>{this.log.error("failed to handle incoming connect from %p",e.connection.remotePeer,n)}).finally(()=>{t.clear()})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(Zc),this._started=!1}createListener(e){return new ph(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(yc.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 bb({rtcConfiguration:await e4(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=new qi(this.components,{peerConnection:o,timeline:{open:Date.now()},remoteAddr:n,metrics:this.metrics?.dialerEvents}),a=await t.upgrader.upgradeOutbound(s,{skipProtection:!0,skipEncryption:!0,muxerFactory:i,onProgress:t.onProgress,signal:t.signal});return this._closeOnShutdown(o,s),a}async _onProtocol({connection:e,stream:t},n){let o=new ah(await e4(this.init.rtcConfiguration)),i=new Go(this.components,{peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:s}=await Eb({peerConnection:o,connection:e,stream:t,signal:n,log:this.log});await t.close({signal:n});let a=new qi(this.components,{peerConnection:o,timeline:{open:new Date().getTime()},remoteAddr:s,metrics:this.metrics?.listenerEvents});await this.components.upgrader.upgradeInbound(a,{skipEncryption:!0,skipProtection:!0,muxerFactory:i,signal:n}),this._closeOnShutdown(o,a)}catch(s){throw this.log.error("incoming signaling error",s),o.close(),t.abort(s),s}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function xb(r){let e=r.toString().split("/webrtc/");if(e.length!==2)throw new P("webrtc protocol was not present in multiaddr");if(!e[0].includes("/p2p-circuit"))throw new P("p2p-circuit protocol was not present in multiaddr");let t=$(e[0]),o=$("/"+e[1]).getPeerId();if(o==null)throw new P("destination peer id was missing");let i=t.protos().pop();if(i===void 0)throw new P("invalid multiaddr");return i.name!=="p2p"&&(t=t.encapsulate(`/p2p/${o}`)),{baseAddr:t,peerId:Ue(o)}}var gh=class extends pe{async listen(){throw new uh("WebRTCTransport.createListener")}getAddrs(){return[]}updateAnnounceAddrs(){}async close(){}};var n4=Object.values(oi).map(r=>r.decoder).reduce((r,e)=>r.or(e)),_P=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function Sb(r){return r?.match(_P)?.groups?.fingerprint}function o4(r){let t=r.stringTuples().filter(n=>n[0]===nb).map(n=>n[1])[0];if(t===void 0||t==="")throw new P(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function CP(r){return Ke.decode(n4.decode(r))}function kP(r){let e=CP(o4(r)),t=PP(e.code),n=e.digest.reduce((i,s)=>i+s.toString(16).padStart(2,"0"),""),o=n.match(/.{1,2}/g);if(o==null)throw new lh(n,r.toString());return`${t} ${o.join(":").toUpperCase()}`}function Ab(r){let e=r.split(":").map(o=>parseInt(o,16)),t=Uint8Array.from(e),n=Dt(Ye.code,t);return $(`/certhash/${xa.encode(n.bytes)}`)}function PP(r){switch(r){case 17:return"sha-1";case 18:return"sha-256";case 19:return"sha-512";default:throw new dh(r)}}function Ib(r,e){let{host:t,port:n,family:o}=r.toOptions(),i=kP(r);return{type:"answer",sdp:`v=0
20
20
  o=- 0 0 IN IP${o} ${t}
21
21
  s=-
22
22
  t=0 0
@@ -30,10 +30,10 @@ a=ice-pwd:${e}
30
30
  a=fingerprint:${i}
31
31
  a=setup:passive
32
32
  a=sctp-port:5000
33
- a=max-message-size:${il}
33
+ a=max-message-size:${ha}
34
34
  a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host
35
35
  a=end-of-candidates
36
- `}}function lb(r,e){let{host:t,port:n,family:o}=r.toOptions();return{type:"offer",sdp:`v=0
36
+ `}}function Tb(r,e){let{host:t,port:n,family:o}=r.toOptions();return{type:"offer",sdp:`v=0
37
37
  o=- 0 0 IN IP${o} ${t}
38
38
  s=-
39
39
  c=IN IP${o} ${t}
@@ -46,28 +46,33 @@ a=ice-ufrag:${e}
46
46
  a=ice-pwd:${e}
47
47
  a=fingerprint:sha-256 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
48
48
  a=sctp-port:5000
49
- a=max-message-size:${il}
49
+ a=max-message-size:${ha}
50
50
  a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host
51
51
  a=end-of-candidates
52
- `}}function r4(r,e){if(r.sdp===void 0)throw new k("Can't munge a missing SDP");let t=r.sdp.includes(`\r
52
+ `}}function i4(r,e){if(r.sdp===void 0)throw new P("Can't munge a missing SDP");let t=r.sdp.includes(`\r
53
53
  `)?`\r
54
54
  `:`
55
55
  `;return r.sdp=r.sdp.replace(/\na=ice-ufrag:[^\n]*\n/,`
56
56
  a=ice-ufrag:`+e+t).replace(/\na=ice-pwd:[^\n]*\n/,`
57
- a=ice-pwd:`+e+t),r}var n4=N("libp2p-webrtc-noise:");function fb(r,e,t){let n=r.trim().toLowerCase().replaceAll(":",""),o=N(n,"hex"),i=Ot(Qe.code,o),s=e4.decode(t4(e)),a=n4.byteLength+i.bytes.byteLength+s.byteLength;return t==="server"?Ce([n4,s,i.bytes],a):Ce([n4,i.bytes,s],a)}var pP=ol?"iceconnectionstatechange":"connectionstatechange";async function hb(r,e,t){let n=r.createDataChannel("",{negotiated:!0,id:0});if(t.role==="client"){t.log.trace("client creating local offer");let f=await r.createOffer();t.log.trace("client created local offer %s",f.sdp);let h=r4(f,e);t.log.trace("client setting local offer %s",h.sdp),await r.setLocalDescription(h);let p=cb(t.remoteAddr,e);t.log.trace("client setting server description %s",p.sdp),await r.setRemoteDescription(p)}else{let f=lb(t.remoteAddr,e);t.log.trace("server setting client %s %s",f.type,f.sdp),await r.setRemoteDescription(f),t.log.trace("server creating local answer");let h=await r.createAnswer();t.log.trace("server created local answer");let p=r4(h,e);t.log.trace("server setting local description %s",h.sdp),await r.setLocalDescription(p)}if(t.log.trace("%s wait for handshake channel to open",t.role),await dt(n,"open",t.signal),t.log.trace("%s handshake channel opened",t.role),t.role==="server"){let f=r.remoteFingerprint()?.value??"";t.remoteAddr=t.remoteAddr.encapsulate(ab(f))}let o=sb(r.localDescription?.sdp);if(o==null)throw new Xo("Could not get fingerprint from local description sdp");t.log.trace("%s performing noise handshake",t.role);let i=fb(o,t.remoteAddr,t.role),s=F1({prologueBytes:i})(t),a=ya({channel:n,direction:"inbound",logger:t.logger,...t.dataChannel??{}}),c={...a,sink:a.sink.bind(a),source:async function*(){for await(let f of a.source)for(let h of f)yield h}()},l=new Wi(t,{peerConnection:r,remoteAddr:t.remoteAddr,timeline:{open:Date.now()},metrics:t.events});r.addEventListener(pP,()=>{switch(r.connectionState){case"failed":case"disconnected":case"closed":l.close().catch(f=>{t.log.error("error closing connection",f)});break;default:break}}),t.events?.increment({peer_connection:!0});let u=new Yo(t,{peerConnection:r,metrics:t.events,dataChannelOptions:t.dataChannel});if(t.role==="client")return t.log.trace("%s secure inbound",t.role),await s.secureInbound(c,{remotePeer:t.remotePeerId}),t.log.trace("%s upgrade outbound",t.role),t.upgrader.upgradeOutbound(l,{skipProtection:!0,skipEncryption:!0,muxerFactory:u});t.log.trace("%s secure outbound",t.role);let d=await s.secureOutbound(c,{remotePeer:t.remotePeerId});l.remoteAddr=l.remoteAddr.encapsulate(`/p2p/${d.remotePeer}`),t.log.trace("%s upgrade inbound",t.role),await t.upgrader.upgradeInbound(l,{skipProtection:!0,skipEncryption:!0,muxerFactory:u})}async function pb(r,e,t,n){n==null&&(n=await RTCPeerConnection.generateCertificate({name:"ECDSA",namedCurve:"P-256"}));let o=typeof t=="function"?await t():t;return new RTCPeerConnection({...o??{},certificates:[n]})}var mP=1e4,tle=Z("webrtc-direct").code,db=Z("certhash").code,Ah=class{log;metrics;components;init;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:webrtc-direct"),this.components=e,this.init=t,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"})})}[co]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[Se]=["@libp2p/transport"];async dial(e,t){t?.signal?.throwIfAborted();let n=await this._connect(e,t);return this.log("dialing address: %a",e),n}createListener(e){return new Sh(this.components,{...this.init,...e})}listenFilter(e){return e.filter(kc.exactMatch)}dialFilter(e){return this.listenFilter(e)}async _connect(e,t){let n,o=e.getPeerId();o!=null&&(n=Ve(o));let i=eb(),s=await pb("client",i,typeof this.init.rtcConfiguration=="function"?await this.init.rtcConfiguration():this.init.rtcConfiguration??{});try{return await et(hb(s,i,{role:"client",log:this.log,logger:this.components.logger,metrics:this.components.metrics,events:this.metrics?.dialerEvents,signal:t.signal??AbortSignal.timeout(mP),remoteAddr:e,dataChannel:this.init.dataChannel,upgrader:t.upgrader,peerId:this.components.peerId,remotePeerId:n,privateKey:this.components.privateKey}),t.signal)}catch(a){throw s.close(),a}}};function mb(r){return e=>new Ah(e,r)}function gb(r){return e=>new Eh(e,r)}var yb=async r=>{if(r.readyState>=2)throw new Error("socket closed");r.readyState!==1&&await new Promise((e,t)=>{function n(){r.removeEventListener("open",o),r.removeEventListener("error",i)}function o(){n(),e()}function i(s){n(),t(s.error??new Error(`connect ECONNREFUSED ${r.url}`))}r.addEventListener("open",o),r.addEventListener("error",i)})};var wb=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await yb(r)}catch(i){if(i.message==="socket closed")break;throw i}if(r.readyState===r.CLOSING||r.readyState===r.CLOSED)break;r.send(o)}e.closeOnEnd!=null&&r.readyState<=1&&await new Promise((o,i)=>{r.addEventListener("close",s=>{if(s.wasClean||s.code===1006)o();else{let a=Object.assign(new Error("ws error"),{event:s});i(a)}}),setTimeout(()=>{r.close()})})});var Eb=Ur(xb(),1);function vb(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var Sb=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((i,s)=>{if(n){i();return}if(o!=null){s(o);return}let a=u=>{r.removeEventListener("open",c),r.removeEventListener("error",l),u()},c=()=>{a(i)},l=u=>{a(()=>{s(u.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let i=new Eb.EventIterator(({push:s,stop:a,fail:c})=>{let l=d=>{let f=null;typeof d.data=="string"&&(f=N(d.data)),vb(d.data)&&(f=new Uint8Array(d.data)),d.data instanceof Uint8Array&&(f=d.data),f!=null&&s(f)},u=d=>{c(d.error??new Error("Socket error"))};return r.addEventListener("message",l),r.addEventListener("error",u),r.addEventListener("close",a),()=>{r.removeEventListener("message",l),r.removeEventListener("error",u),r.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let s of i)yield vb(s)?new Uint8Array(s):s}(),n=r.readyState===1,o;return r.addEventListener("open",()=>{n=!0,o=null}),r.addEventListener("close",()=>{n=!1,o=null}),r.addEventListener("error",i=>{n||(o=i.error??new Error(`connect ECONNREFUSED ${r.url}`))}),Object.assign(t,{connected:e})};var Ab=(r,e)=>{e=e??{};let t=Sb(r),n=e.remoteAddress,o=e.remotePort;if(r.url!=null)try{let s=new URL(r.url);n=s.hostname,o=parseInt(s.port,10)}catch{}if(n==null||o==null)throw new Error("Remote connection did not have address and/or port");return{sink:wb(r,e),source:t,connected:async()=>{await t.connected()},close:async()=>{(r.readyState===r.CONNECTING||r.readyState===r.OPEN)&&await new Promise(s=>{r.addEventListener("close",()=>{s()}),r.close()})},destroy:()=>{r.terminate!=null?r.terminate():r.close()},remoteAddress:n,remotePort:o,socket:r}};var Ib=WebSocket;var yP={"http:":"ws:","https:":"wss:"},Tb="ws:",_b=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??Tb}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??Tb,o=e.host,i=e.port!=null&&o?.endsWith(`:${e.port}`)!==!0?`:${e.port}`:"";r=`${n}//${o}${i}${r}`}let t=new URL(r);for(let[n,o]of Object.entries(yP))t.protocol===n&&(t.protocol=o);return t};function Cb(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=_b(r,t),o=new Ib(n.toString(),e.websocket);return Ab(o,e)}function kb(r){return r.filter(e=>Pi.exactMatch(e)||to.exactMatch(e))}function Pb(){throw new Error("WebSocket Servers can not be created in the browser!")}function Rb(r,e,t){let n=t.logger.forComponent("libp2p:websockets:maconn"),o=t.metrics,i=t.metricPrefix??"",s={log:n,async sink(a){try{await r.sink(async function*(){for await(let c of a)c instanceof Uint8Array?yield c:yield c.subarray()}())}catch(c){c.type!=="aborted"&&n.error(c)}},source:r.source,remoteAddr:e,timeline:{open:Date.now()},async close(a={}){let c=Date.now();if(a.signal==null){let u=AbortSignal.timeout(500);a={...a,signal:u}}let l=()=>{let{host:u,port:d}=s.remoteAddr.toOptions();n("timeout closing stream to %s:%s after %dms, destroying it manually",u,d,Date.now()-c),this.abort(new Kt("Socket close timeout"))};a.signal?.addEventListener("abort",l);try{await r.close()}catch(u){n.error("error closing WebSocket gracefully",u),this.abort(u)}finally{a.signal?.removeEventListener("abort",l),s.timeline.close=Date.now()}},abort(a){let{host:c,port:l}=s.remoteAddr.toOptions();n("timeout closing stream to %s:%s due to error",c,l,a),r.destroy(),s.timeline.close=Date.now(),o?.increment({[`${i}error`]:!0})}};return r.socket.addEventListener("close",()=>{o?.increment({[`${i}close`]:!0}),s.timeline.close==null&&(s.timeline.close=Date.now())},{once:!0}),s}var s4=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"})})}[co]=!0;[Symbol.toStringTag]="@libp2p/websockets";[Se]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=await this._connect(e,t),o=Rb(n,e,{logger:this.logger,metrics:this.metrics?.dialerEvents});this.log("new outbound connection %s",o.remoteAddr);let i=await t.upgrader.upgradeOutbound(o,t);return this.log("outbound connection %s upgraded",o.remoteAddr),i}async _connect(e,t){t?.signal?.throwIfAborted();let n=e.toOptions();this.log("dialing %s:%s",n.host,n.port);let o=J(),i=Cb(e1(e),this.init);i.socket.addEventListener("error",()=>{let s=new es(`Could not connect to ${e.toString()}`);this.log.error("connection error:",s),this.metrics?.dialerEvents.increment({error:!0}),o.reject(s)});try{t.onProgress?.(new W("websockets:open-connection")),await et(Promise.race([i.connected(),o.promise]),t.signal)}catch(s){throw t.signal?.aborted===!0&&this.metrics?.dialerEvents.increment({abort:!0}),i.close().catch(a=>{this.log.error("error closing raw socket",a)}),s}return this.log("connected %s",e),this.metrics?.dialerEvents.increment({connect:!0}),i}createListener(e){return Pb({logger:this.logger,events:this.components.events,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):kb(e)}dialFilter(e){return this.listenFilter(e)}};function Db(r={}){return e=>new s4(e,r)}var a4=Ur(a1(),1);function Lb(r,e){let t=e.map((n,o)=>({record:_n(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===ar.ValidityType.EOL&&o.record.validityType===ar.ValidityType.EOL){let a=a4.default.fromString(n.record.validity).toDate(),c=a4.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 Nb="2.6.3",al="js-libp2p";function _h(r,e){return`${r??al}/${e??Nb} browser/${globalThis.navigator.userAgent}`}var Ob="5.2.1-eaf789a",Mb="helia";var Ub={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 Ch(r={}){let e=`${Mb}/${Ob} ${_h()}`;return{privateKey:r.privateKey,dns:r.dns,nodeInfo:{userAgent:e},addresses:{listen:["/p2p-circuit","/webrtc"]},transports:[A3(),gb(),mb(),Db()],connectionEncrypters:[F1()],streamMuxers:[q9(),Vw()],peerDiscovery:[sy(Ub)],services:{autoNAT:Y9(),dcutr:Ay(),delegatedRouting:()=>Q7("https://delegated-ipfs.dev",Tm()),dht:dw({clientMode:!0,validators:{ipns:p1},selectors:{ipns:Lb}}),identify:Ry(),identifyPush:Dy(),keychain:sh(r.keychain),ping:qw()}}}async function c4(r,e={}){let t=sh(e)({datastore:r,logger:Po()}),n=new Le("/pkcs8/self"),o;return await r.has(n)?o=await t.exportKey("self"):(o=await Yu(e.keyType??"Ed25519"),await t.importKey("self",o)),o}var bP=32,{code:xP}=Z("dnsaddr"),l4=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}},Gi=async function(e,t={}){let n=t.maxRecursiveDepth??bP;if(n===0)throw new l4("Max recursive depth reached");let[,o]=e.stringTuples().find(([l])=>l===xP)??[],s=await(t?.dns??ud()).query(`_dnsaddr.${o}`,{signal:t?.signal,types:[mr.TXT]}),a=e.getPeerId(),c=[];for(let l of s.Answer){let u=l.data.replace(/["']/g,"").trim().split("=")[1];if(u==null||a!=null&&!u.includes(a))continue;let d=$(u);if(u.startsWith("/dnsaddr")){let f=await d.resolve({...t,maxRecursiveDepth:n-1});c.push(...f.map(h=>h.toString()))}else c.push(d.toString())}return c};var vP={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:Gi}},transportManager:{faultTolerance:ao.FATAL_ALL}};async function Fb(r){let e=fa(vP,r);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new k("Private network is enforced, but no protector was provided");return e}var wa;(function(r){let e;(function(o){let i;o.codec=()=>(i==null&&(i=re((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:se(0)},u=a==null?s.len:s.pos+a;for(;s.pos<u;){let d=s.uint32();switch(d>>>3){case 1:{l.key=s.string();break}case 2:{l.value=s.bytes();break}default:{s.skipType(d&7);break}}}return l})),i),o.encode=s=>te(s,o.codec()),o.decode=(s,a)=>ee(s,o.codec(),a)})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let i;o.codec=()=>(i==null&&(i=re((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),Ph.codec().encode(s.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={key:""},u=a==null?s.len:s.pos+a;for(;s.pos<u;){let d=s.uint32();switch(d>>>3){case 1:{l.key=s.string();break}case 2:{l.value=Ph.codec().decode(s,s.uint32(),{limits:c.limits?.value});break}default:{s.skipType(d&7);break}}}return l})),i),o.encode=s=>te(s,o.codec()),o.decode=(s,a)=>ee(s,o.codec(),a)})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=re((o,i,s={})=>{if(s.lengthDelimited!==!1&&i.fork(),o.addresses!=null)for(let a of o.addresses)i.uint32(10),kh.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);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 Ue('Decode error - map field "addresses" had too many elements');a.addresses.push(kh.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 Ue('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 Da('Decode error - map field "metadata" had too many elements');let u=r.Peer$metadataEntry.codec().decode(o,o.uint32());a.metadata.set(u.key,u.value);break}case 7:{if(s.limits?.tags!=null&&a.tags.size===s.limits.tags)throw new Da('Decode error - map field "tags" had too many elements');let u=r.Peer$tagsEntry.codec().decode(o,o.uint32(),{limits:{value:s.limits?.tags$value}});a.tags.set(u.key,u.value);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>te(o,r.codec()),r.decode=(o,i)=>ee(o,r.codec(),i)})(wa||(wa={}));var kh;(function(r){let e;r.codec=()=>(e==null&&(e=re((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)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={multiaddr:se(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}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(kh||(kh={}));var Ph;(function(r){let e;r.codec=()=>(e==null&&(e=re((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)=>ee(t,r.codec(),n)})(Ph||(Ph={}));function ba(r,e){let t=wa.decode(e);if(t.publicKey!=null&&r.publicKey==null){let i=nt(t.publicKey);r=Sn(i)}let n=new Map,o=BigInt(Date.now());for(let[i,s]of t.tags.entries())s.expiry!=null&&s.expiry<o||n.set(i,s);return{...t,id:r,addresses:t.addresses.map(({multiaddr:i,isCertified:s})=>({multiaddr:$(i),isCertified:s??!1})),metadata:t.metadata,peerRecordEnvelope:t.peerRecordEnvelope??void 0,tags:n}}var u4="/peers/";function xa(r){if(!ml(r)||r.type==null)throw new k("Invalid PeerId");let e=r.toCID().toString();return new Le(`${u4}${e}`)}async function Vb(r,e,t){let n=new Map;for(let o of t){if(o==null)continue;if(o.multiaddr instanceof Uint8Array&&(o.multiaddr=$(o.multiaddr)),!Mo(o.multiaddr))throw new k("Multiaddr was invalid");if(!await e(r,o.multiaddr))continue;let i=o.isCertified??!1,s=o.multiaddr.toString(),a=n.get(s);a!=null?o.isCertified=a.isCertified||i:n.set(s,{multiaddr:o.multiaddr,isCertified:i})}return[...n.values()].sort((o,i)=>o.multiaddr.toString().localeCompare(i.multiaddr.toString())).map(({isCertified:o,multiaddr:i})=>({isCertified:o,multiaddr:i.bytes}))}async function Dh(r,e,t,n){if(e==null)throw new k("Invalid PeerData");if(e.publicKey!=null&&r.publicKey!=null&&!e.publicKey.equals(r.publicKey))throw new k("publicKey bytes do not match peer id publicKey bytes");let o=n.existingPeer;if(o!=null&&!r.equals(o.id))throw new k("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(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&i.push(...e.addresses)),e.protocols!=null&&(s=new Set(e.protocols)),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=Rh(f,{validate:$b})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=Rh(f,{validate:Kb,map:Hb})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&i.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&i.push(...e.addresses),e.protocols!=null&&(s=new Set([...s,...e.protocols])),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);for(let[h,p]of f)p==null?a.delete(h):a.set(h,p);a=Rh([...a.entries()],{validate:$b})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),h=new Map(c);for(let[p,g]of f)g==null?h.delete(p):h.set(p,g);c=Rh([...h.entries()],{validate:Kb,map:Hb})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let u;o?.id.publicKey!=null?u=Mt(o.id.publicKey):e.publicKey!=null?u=Mt(e.publicKey):r.publicKey!=null&&(u=Mt(r.publicKey));let d={addresses:await Vb(r,n.addressFilter??(async()=>!0),i),protocols:[...s.values()].sort((f,h)=>f.localeCompare(h)),metadata:a,tags:c,publicKey:u,peerRecordEnvelope:l};return r.type!=="RSA"&&delete d.publicKey,d}function Rh(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 $b(r,e){if(typeof r!="string")throw new k("Metadata key must be a string");if(!(e instanceof Uint8Array))throw new k("Metadata value must be a Uint8Array")}function Kb(r,e){if(typeof r!="string")throw new k("Tag name must be a string");if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new k("Tag value must be an integer");if(e.value<0||e.value>100)throw new k("Tag value must be between 0-100")}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new k("Tag ttl must be an integer");if(e.ttl<0)throw new k("Tag ttl must be between greater than 0")}}function Hb(r,e){let t;return e.expiry!=null&&(t=e.expiry),e.ttl!=null&&(t=BigInt(Date.now()+Number(e.ttl))),{value:e.value??0,expiry:t}}function Lh(r,e){let t=r.toString().split("/")[2],n=X.parse(t,ct),o=An(n);return ba(o,e)}function EP(r){return r==null?{}:{prefix:u4,filters:(r.filters??[]).map(e=>({key:t,value:n})=>e(Lh(t,n))),orders:(r.orders??[]).map(e=>(t,n)=>e(Lh(t.key,t.value),Lh(n.key,n.value)))}}var Nh=class{peerId;datastore;lock;addressFilter;log;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.lock=Ai({name:"peer-store",singleProcess:!0})}async has(e){return this.datastore.has(xa(e))}async delete(e){if(this.peerId.equals(e))throw new k("Cannot delete self peer");await this.datastore.delete(xa(e))}async load(e){let t=await this.datastore.get(xa(e));return ba(e,t)}async save(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),i=await Dh(e,t,"patch",{addressFilter:this.addressFilter});return this.#t(e,i,n,o)}async patch(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),i=await Dh(e,t,"patch",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,i,n,o)}async merge(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),i=await Dh(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,i,n,o)}async*all(e){for await(let{key:t,value:n}of this.datastore.query(EP(e??{}))){let o=Lh(t,n);o.id.equals(this.peerId)||(yield o)}}async#e(e){try{let t=await this.datastore.get(xa(e)),n=ba(e,t);return{existingBuf:t,existingPeer:n}}catch(t){t.name!=="NotFoundError"&&this.log.error("invalid peer data found in peer store - %e",t)}return{}}async#t(e,t,n,o){let i=wa.encode(t);return n!=null&&ne(i,n)?{peer:ba(e,i),previous:o,updated:!1}:(await this.datastore.put(xa(e),i),{peer:ba(e,i),previous:o,updated:!0})}};var d4=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 Nh(e,t)}[Symbol.toStringTag]="@libp2p/peer-store";async forEach(e,t){this.log.trace("forEach await read lock");let n=await this.store.lock.readLock();this.log.trace("forEach got read lock");try{for await(let o of this.store.all(t))e(o)}finally{this.log.trace("forEach release read lock"),n()}}async all(e){this.log.trace("all await read lock");let t=await this.store.lock.readLock();this.log.trace("all got read lock");try{return await Ni(this.store.all(e))}finally{this.log.trace("all release read lock"),t()}}async delete(e){this.log.trace("delete await write lock");let t=await this.store.lock.writeLock();this.log.trace("delete got write lock");try{await this.store.delete(e)}finally{this.log.trace("delete release write lock"),t()}}async has(e){this.log.trace("has await read lock");let t=await this.store.lock.readLock();this.log.trace("has got read lock");try{return await this.store.has(e)}finally{this.log.trace("has release read lock"),t()}}async get(e){this.log.trace("get await read lock");let t=await this.store.lock.readLock();this.log.trace("get got read lock");try{return await this.store.load(e)}finally{this.log.trace("get release read lock"),t()}}async save(e,t){this.log.trace("save await write lock");let n=await this.store.lock.writeLock();this.log.trace("save got write lock");try{let o=await this.store.save(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("save release write lock"),n()}}async patch(e,t){this.log.trace("patch await write lock");let n=await this.store.lock.writeLock();this.log.trace("patch got write lock");try{let o=await this.store.patch(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("patch release write lock"),n()}}async merge(e,t){this.log.trace("merge await write lock");let n=await this.store.lock.writeLock();this.log.trace("merge got write lock");try{let o=await this.store.merge(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("merge release write lock"),n()}}async consumePeerRecord(e,t){let n=await vr.openAndCertify(e,Xt.DOMAIN),o=An(n.publicKey.toCID());if(t?.equals(o)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",t,o),!1;let i=Xt.createFromProtobuf(n.payload),s;try{s=await this.get(o)}catch(a){if(a.name!=="NotFoundError")throw a}if(s?.peerRecordEnvelope!=null){let a=await vr.createFromProtobuf(s.peerRecordEnvelope),c=Xt.createFromProtobuf(a.payload);if(c.seqNumber>=i.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",c.seqNumber,i.seqNumber),!1}return await this.patch(i.peerId,{peerRecordEnvelope:e,addresses:i.multiaddrs.map(a=>({isCertified:!0,multiaddr:a}))}),!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 qb(r,e={}){return new d4(r,e)}function zb(r,e){let t,n=function(){let o=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(o,e)};return n.start=()=>{},n.stop=()=>{clearTimeout(t)},n}var Wb=864e13;var SP=448,f4=449,AP=53,IP=54,TP=55,_P=56,Bh=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:dns-mappings"),this.mappings=new Map}has(e){let t=this.findHost(e);for(let n of this.mappings.values())if(n.domain===t)return!0;return!1}add(e,t){t.forEach(n=>{this.log("add DNS mapping %s to %s",n,e);let o=Yt(n)===!0;this.mappings.set(n,{domain:e,verified:o,expires:o?Wb-Date.now():0,lastVerified:o?Wb-Date.now():void 0})})}remove(e){let t=this.findHost(e),n=!1;for(let[o,i]of this.mappings.entries())i.domain===t&&(this.log("removing %s to %s DNS mapping %e",o,i.domain,new Error("where")),this.mappings.delete(o),n=n||i.verified);return n}getAll(e){let t=[];for(let n=0;n<e.length;n++){let i=e[n].multiaddr.stringTuples(),s=i[0][1];if(s!=null)for(let[a,c]of this.mappings.entries()){if(s!==a)continue;this.maybeAddSNITuple(i,c.domain)&&(e.splice(n,1),n--,t.push({multiaddr:$(`/${i.map(u=>[Z(u[0]).name,u[1]].join("/")).join("/")}`),verified:c.verified,type:"dns-mapping",expires:c.expires,lastVerified:c.lastVerified}))}}return t}maybeAddSNITuple(e,t){for(let n=0;n<e.length;n++)if(e[n][0]===SP&&e[n+1]?.[0]!==f4)return e.splice(n+1,0,[f4,t]),!0;return!1}confirm(e,t){let n=this.findHost(e),o=!1;for(let[i,s]of this.mappings.entries())s.domain===n&&(this.log("marking %s to %s DNS mapping as verified",i,s.domain),o=s.verified,s.verified=!0,s.expires=Date.now()+t,s.lastVerified=Date.now());return o}unconfirm(e,t){let n=this.findHost(e),o=!1;for(let[i,s]of this.mappings.entries())s.domain===n&&(this.log("removing verification of %s to %s DNS mapping",i,s.domain),o=o||s.verified,s.verified=!1,s.expires=Date.now()+t);return o}findHost(e){for(let t of e.stringTuples())if(t[0]===f4||t[0]===AP||t[0]===IP||t[0]===TP||t[0]===_P)return t[1]}};var h4=4,p4=41,m4=6,CP=273,Oh=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:ip-mappings"),this.mappings=new Map}has(e){let t=e.stringTuples();for(let n of this.mappings.values())for(let o of n)if(o.externalIp===t[0][1])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:rn(n)?4:6,protocol:i,verified:!1,expires:0};a.push(c),this.mappings.set(s,a)}remove(e){let t=e.stringTuples(),n=t[0][1]??"",o=t[1][0]===m4?"tcp":"udp",i=parseInt(t[1][1]??"0"),s=!1;for(let[a,c]of this.mappings.entries()){for(let l=0;l<c.length;l++){let u=c[l];u.externalIp===n&&u.externalPort===i&&u.protocol===o&&(this.log("removing %s:%s to %s:%s %s IP mapping",u.externalIp,u.externalPort,n,i,o),s=s||u.verified,c.splice(l,1),l--)}c.length===0&&this.mappings.delete(a)}return s}getAll(e){let t=[];for(let{multiaddr:n}of e){let o=n.stringTuples(),i;if((o[0][0]===h4||o[0][0]===p4)&&o[1][0]===m4?i=`${o[0][1]}-${o[1][1]}-tcp`:(o[0][0]===h4||o[0][0]===p4)&&o[1][0]===CP&&(i=`${o[0][1]}-${o[1][1]}-udp`),i==null)continue;let s=this.mappings.get(i);if(s!=null)for(let a of s)o[0][0]=a.externalFamily===4?h4:p4,o[0][1]=a.externalIp,o[1][1]=`${a.externalPort}`,t.push({multiaddr:$(`/${o.map(c=>[Z(c[0]).name,c[1]].join("/")).join("/")}`),verified:a.verified,type:"ip-mapping",expires:a.expires,lastVerified:a.lastVerified})}return t}confirm(e,t){let o=e.stringTuples()[0][1],i=!1;for(let s of this.mappings.values())for(let a of s)a.externalIp===o&&(this.log("marking %s to %s IP mapping as verified",a.internalIp,a.externalIp),i=a.verified,a.verified=!0,a.expires=Date.now()+t,a.lastVerified=Date.now());return i}unconfirm(e,t){let n=e.stringTuples(),o=n[0][1]??"",i=n[1][0]===m4?"tcp":"udp",s=parseInt(n[1][1]??"0"),a=!1;for(let c of this.mappings.values())for(let l=0;l<c.length;l++){let u=c[l];u.externalIp===o&&u.externalPort===s&&u.protocol===i&&(this.log("removing verification of %s:%s to %s:%s %s IP mapping",u.externalIp,u.externalPort,o,s,i),a=a||u.verified,u.verified=!1,u.expires=Date.now()+t)}return a}};function Gb(r){try{let[[e,t]]=r.stringTuples();if(t==null)return!1;if(e===4)return t.startsWith("169.254.");if(e===41)return t.toLowerCase().startsWith("fe80")}catch{}return!1}var kP={maxObservedAddresses:10},Mh=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=new Map,this.maxObservedAddresses=t.maxObservedAddresses??kP.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&&(Br(e)||Gb(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:$(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 PP={maxObservedAddresses:10},Uh=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=new Map,this.maxObservedAddresses=t.maxObservedAddresses??PP.maxObservedAddresses}get(e,t){if(Br(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:!1,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){let t=e.toOptions();return`${t.host}-${t.port}-${t.transport}`}};var Qb=6e4,Yb={maxObservedAddresses:10,addressVerificationTTL:Qb*10,addressVerificationRetry:Qb*5},RP=r=>r;function g4(r,e){let t=r.getPeerId();return t!=null&&Ve(t).equals(e)&&(r=r.decapsulate($(`/p2p/${e.toString()}`))),r}var Fh=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 Mh(e,t),this.dnsMappings=new Bh(e,t),this.ipMappings=new Oh(e,t),this.transportAddresses=new Uh(e,t),this.announceFilter=t.announceFilter??RP,this.observedAddressFilter=or(1024),this.addressVerificationTTL=t.addressVerificationTTL??Yb.addressVerificationTTL,this.addressVerificationRetry=t.addressVerificationRetry??Yb.addressVerificationRetry,this._updatePeerStoreAddresses=zb(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.getPeerId()===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",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>$(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>$(e))}getAppendAnnounceAddrs(){return Array.from(this.appendAnnounce).map(e=>$(e))}getObservedAddrs(){return this.observed.getAll().map(e=>e.multiaddr)}addObservedAddr(e){let t=e.stringTuples(),n=`${t[0][1]}:${t[1][1]}`;this.observedAddressFilter.has(n)||(this.observedAddressFilter.add(n),e=g4(e,this.components.peerId),!this.ipMappings.has(e)&&(this.dnsMappings.has(e)||this.observed.add(e)))}confirmObservedAddr(e,t){e=g4(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=g4(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=$(n);return o.protos().pop()?.path===!0||o.getPeerId()===this.components.peerId.toString()?o:o.encapsulate(`/p2p/${this.components.peerId.toString()}`)}))}getAddressesWithMetadata(){let e=this.getAnnounceAddrs();if(e.length>0)return e.map(n=>({multiaddr:n,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()}));let t=[];return t=t.concat(this.components.transportManager.getAddrs().map(n=>this.transportAddresses.get(n,this.addressVerificationTTL))),t=t.concat(this.getAppendAnnounceAddrs().map(n=>({multiaddr:n,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($(`/dns/${e}`))&&this._updatePeerStoreAddresses()}addPublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.add(e,t,n,o,i),this.observed.removePrefixed(`/ip${rn(n)?4:6}/${n}/${i}/${o}`)}removePublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.remove($(`/ip${rn(n)?4:6}/${n}/${i}/${o}`))&&this._updatePeerStoreAddresses()}maybeUpgradeToIPMapping(e){if(this.ipMappings.has(e))return!1;let t=e.toOptions();if(t.family===6||t.host==="127.0.0.1"||Yt(t.host)===!0)return!1;let n=this.components.transportManager.getListeners(),o=[i=>to.exactMatch(i)||Pi.exactMatch(i),i=>ki.exactMatch(i),i=>p7.exactMatch(i)];for(let i of o){if(!i(e))continue;let s=n.filter(l=>l.getAddrs().filter(u=>u.toOptions().family===4&&i(u)).length>0);if(s.length!==1)continue;let a=s[0].getAddrs().filter(l=>l.toOptions().host!=="127.0.0.1").pop();if(a==null)continue;let c=a.toOptions();return this.observed.remove(e),this.ipMappings.add(c.host,c.port,t.host,t.port,t.transport),!0}return!1}};var Xb;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(Xb||(Xb={}));var Vh=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},$h=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},va=class extends Error{constructor(e="No content routers available"){super(e),this.name="NoContentRoutersError"}},cl=class extends Error{constructor(e="No peer routers available"){super(e),this.name="NoPeerRoutersError"}},Kh=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},Hh=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},qh=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},ll=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},Qi=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},zh=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},Wh=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},Yi=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},Xi=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},Gh=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}};var y4=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=Po())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>El(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")}},LP=["metrics","connectionProtector","dns"],NP=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function jb(r={}){let e=new y4(r);return new Proxy(e,{get(n,o,i){if(typeof o=="string"&&!NP.includes(o)){let s=e.components[o];if(s==null&&!LP.includes(o))throw new Vh(`${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 Zb(r){let e={};for(let t of Object.values(r.components))for(let n of BP(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of OP(t))if(e[n]!==!0)throw new $h(`Service "${MP(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function BP(r){return Array.isArray(r?.[Se])?r[Se]:[]}function OP(r){return Array.isArray(r?.[fr])?r[fr]:[]}function MP(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}var UP=4,FP=41;function Jb(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{if(to.matches(e))return!1;let t=e.stringTuples();return t[0][0]===UP||t[0][0]===FP?!!Yt(`${t[0][1]}`):!1},denyInboundConnection:async()=>!1,denyOutboundConnection:async()=>!1,denyInboundEncryptedConnection:async()=>!1,denyOutboundEncryptedConnection:async()=>!1,denyInboundUpgradedConnection:async()=>!1,denyOutboundUpgradedConnection:async()=>!1,filterMultiaddrForPeer:async()=>!0,...r}}function Qh(r){if(ml(r))return{peerId:r,multiaddrs:[]};Array.isArray(r)||(r=[r]);let e;if(r.length>0){let t=r[0].getPeerId();e=t==null?void 0:Ve(t),r.forEach(n=>{if(!Mo(n))throw new lo("Invalid multiaddr");let o=n.getPeerId();if(o==null){if(e!=null)throw new k("Multiaddrs must all have the same peer id or have no peer id")}else{let i=Ve(o);if(e?.equals(i)!==!0)throw new k("Multiaddrs must all have the same peer id or have no peer id")}})}return{peerId:e,multiaddrs:r}}var VP=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function ex(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??VP;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}var tx="last-dial-failure",rx="last-dial-success";var Yh=100,Xh=50;async function nx(r,e){let t=!1;for(let o of Hs.keys())if(t=r.protoNames().includes(o),t)break;if(!t)return[r];let n=await r.resolve(e);return e.log("resolved %s to",r,n.map(o=>o.toString())),n}function ul(r){try{let e;if(typeof r=="string"?e=$(r):e=r,!e.protoNames().includes("ipcidr")){let n=e.protoNames().includes("ip6")?"/ipcidr/128":"/ipcidr/32";e=e.encapsulate(n)}return gm(e)}catch{throw new Error(`Can't convert to IpNet, Invalid multiaddr format: ${r}`)}}var $P={maxConnections:Yh,allow:[]},jh=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??$P.maxConnections,this.allow=(t.allow??[]).map(n=>ul(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;if(this.log("checking max connections limit %d/%d",t,this.maxConnections),t<=this.maxConnections)return;let n=new pt;for(let a of e){let c=a.remotePeer;if(!n.has(c)){n.set(c,0);try{let l=await this.peerStore.get(c);n.set(c,[...l.tags.values()].reduce((u,d)=>u+d.value,0))}catch(l){l.name!=="NotFoundError"&&this.log.error("error loading peer tags",l)}}}let o=this.sortConnections(e,n),i=Math.max(t-this.maxConnections,0),s=[];for(let a of o)if(this.log("too many connections open - closing a connection to %p",a.remotePeer),this.allow.some(l=>l.contains(a.remoteAddr.nodeAddress().address))||s.push(a),s.length===i)break;await Promise.all(s.map(async a=>{await ex(a,{signal:AbortSignal.timeout(1e3)})})),this.events.safeDispatchEvent("connection:prune",{detail:s})}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 Zh=class extends Ht{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};function KP(r,e){let t=ki.exactMatch(r.multiaddr),n=ki.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=Pi.exactMatch(r.multiaddr),i=Pi.exactMatch(e.multiaddr);if(o&&!i)return-1;if(!o&&i)return 1;let s=to.exactMatch(r.multiaddr),a=to.exactMatch(e.multiaddr);if(s&&!a)return-1;if(!s&&a)return 1;let c=Pc.exactMatch(r.multiaddr),l=Pc.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let u=kc.exactMatch(r.multiaddr),d=kc.exactMatch(e.multiaddr);if(u&&!d)return-1;if(!u&&d)return 1;let f=im.exactMatch(r.multiaddr),h=im.exactMatch(e.multiaddr);return f&&!h?-1:!f&&h?1:0}function HP(r,e){let t=Br(r.multiaddr),n=Br(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function qP(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function zP(r,e){let t=sr.exactMatch(r.multiaddr),n=sr.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function ox(r){return r.sort(KP).sort(qP).sort(zP).sort(HP)}var Jh={maxParallelDials:Xh,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:5e3,resolvers:{dnsaddr:Gi}},e0=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??Jh.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??Jh.maxDialQueueLength,this.dialTimeout=t.dialTimeout??Jh.dialTimeout,this.connections=t.connections??new pt,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.shutDownController=new AbortController,this.shutDownController.signal;for(let[n,o]of Object.entries(t.resolvers??{}))Hs.set(n,o);this.queue=new Zh({concurrency:t.maxParallelDials??Jh.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("error",n=>{n.detail.name!==Kt.name&&this.log.error("error in dial queue - %e",n.detail)})}start(){this.shutDownController=new AbortController,this.shutDownController.signal}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=Qh(e),i=Array.from(this.connections.values()).flat().find(a=>t.force===!0?!1:a.remotePeer.equals(n)?!0:o.find(c=>c.equals(a.remoteAddr)));if(i?.status==="open")return this.log("already connected to %a",i.remoteAddr),t.onProgress?.(new W("dial-queue:already-connected")),i;let s=this.queue.queue.find(a=>{if(n?.equals(a.options.peerId)===!0)return!0;let c=a.options.multiaddrs;if(c==null)return!1;for(let l of o)if(c.has(l.toString()))return!0;return!1});if(s!=null){this.log("joining existing dial target for %p",n);for(let a of o)s.options.multiaddrs.add(a.toString());return t.onProgress?.(new W("dial-queue:already-in-dial-queue")),s.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new Ln("Dial queue is full");return this.log("creating dial target for %p",n,o.map(a=>a.toString())),t.onProgress?.(new W("dial-queue:add-to-dial-queue")),this.queue.add(async a=>{a?.onProgress?.(new W("dial-queue:start-dial"));let c=le([this.shutDownController.signal,a.signal]);let l;try{l=await this.calculateMultiaddrs(n,a?.multiaddrs,{...a,signal:c}),a?.onProgress?.(new W("dial-queue:calculated-addresses",l)),l.map(({multiaddr:u})=>u.toString()).forEach(u=>{a?.multiaddrs.add(u)})}catch(u){throw c.clear(),u}try{let u=0,d=[];for(let f of l){if(u===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",u,n),new Ln("Peer had more than maxPeerAddrsToDial");u++;try{let h=await this.components.transportManager.dial(f.multiaddr,{...a,signal:c});this.log("dial to %a succeeded",f.multiaddr);try{await this.components.peerStore.merge(h.remotePeer,{multiaddrs:[h.remoteAddr],metadata:{[rx]:N(Date.now().toString())}})}catch(p){this.log.error("could not update last dial failure key for %p",n,p)}return h}catch(h){if(this.log.error("dial failed to %a",f.multiaddr,h),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[tx]:N(Date.now().toString())}})}catch(p){this.log.error("could not update last dial failure key for %p",n,p)}if(c.aborted)throw new gn(h.message);d.push(h)}}throw d.length===1?d[0]:new AggregateError(d,"All multiaddr dials failed")}finally{c.clear()}},{peerId:n,priority:t.priority??v4,multiaddrs:new Set(o.map(a=>a.toString())),signal:t.signal??AbortSignal.timeout(this.dialTimeout),onProgress:t.onProgress})}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(d=>({multiaddr:$(d),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new Ln("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new ll("The dial request is blocked by gater.allowDialPeer");if(o.length===0){this.log("loading multiaddrs for %p",e);try{let d=await this.components.peerStore.get(e);o.push(...d.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:f})=>f.toString()))}catch(d){if(d.name!=="NotFoundError")throw d}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let d=await this.components.peerRouting.findPeer(e,n);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:f})=>f.toString())),o.push(...d.multiaddrs.map(f=>({multiaddr:f,isCertified:!1})))}catch(d){d.name!=="NoPeerRoutersError"&&this.log.error("looking up multiaddrs for %p in the peer routing failed",e,d)}}}let i=(await Promise.all(o.map(async d=>{let f=await nx(d.multiaddr,{dns:this.components.dns,...n,log:this.log});return f.length===1&&f[0].equals(d.multiaddr)?d:f.map(h=>({multiaddr:h,isCertified:!1}))}))).flat();if(e!=null){let d=`/p2p/${e.toString()}`;i=i.map(f=>f.multiaddr.protos().pop()?.path===!0?f:f.multiaddr.getPeerId()==null?{multiaddr:f.multiaddr.encapsulate(d),isCertified:f.isCertified}:f)}let s=i.filter(d=>{if(this.components.transportManager.dialTransportForMultiaddr(d.multiaddr)==null)return!1;let f=d.multiaddr.getPeerId();return e!=null&&f!=null?e.equals(f):!0}),a=new Map;for(let d of s){let f=d.multiaddr.toString(),h=a.get(f);if(h!=null){h.isCertified=h.isCertified||d.isCertified||!1;continue}a.set(f,d)}let c=[...a.values()];if(c.length===0)throw new Qi("The dial request has no valid addresses");let l=[];for(let d of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(d.multiaddr)||l.push(d);let u=this.addressSorter==null?ox(l):l.sort(this.addressSorter);if(u.length===0)throw new ll("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:d})=>d.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",u.map(({multiaddr:d})=>d.toString())),u}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=>!sr.matches(o.multiaddr))!=null:!0}catch(n){this.log.trace("error calculating if multiaddr(s) were dialable",n)}return!1}};var dx=Ur(lx(),1);var GP=Object.prototype.toString,QP=r=>GP.call(r)==="[object Error]",YP=new Set(["network error","Failed to fetch","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Load failed","Network request failed","fetch failed","terminated"]);function E4(r){return r&&QP(r)&&r.name==="TypeError"&&typeof r.message=="string"?r.message==="Load failed"?r.stack===void 0:YP.has(r.message):!1}var S4=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}},ux=(r,e,t)=>{let n=t.retries-(e-1);return r.attemptNumber=e,r.retriesLeft=n,r};async function A4(r,e){return new Promise((t,n)=>{e={...e},e.onFailedAttempt??=()=>{},e.shouldRetry??=()=>!0,e.retries??=10;let o=dx.default.operation(e),i=()=>{o.stop(),n(e.signal?.reason)};e.signal&&!e.signal.aborted&&e.signal.addEventListener("abort",i,{once:!0});let s=()=>{e.signal?.removeEventListener("abort",i),o.stop()};o.attempt(async a=>{try{let c=await r(a);s(),t(c)}catch(c){try{if(!(c instanceof Error))throw new TypeError(`Non-error was thrown: "${c}". You should only throw errors.`);if(c instanceof S4)throw c.originalError;if(c instanceof TypeError&&!E4(c))throw c;if(ux(c,a,e),await e.shouldRetry(c)||(o.stop(),n(c)),await e.onFailedAttempt(c),!o.retry(c))throw o.mainError()}catch(l){ux(l,a,e),s(),n(l)}}})})}var t0=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 wt({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);fx(t)&&(this.queue.has(e)||this.queue.add(async n=>{await A4(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(so)&&(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=>fx(t)]});await Promise.all(e.map(async t=>{await this.connectionManager.openConnection(t.id).catch(n=>{this.log.error(n)})}))}).catch(e=>{this.log.error(e)})}stop(){this.started=!1,this.queue.abort()}};function fx(r){for(let e of r.tags.keys())if(e.startsWith(so))return!0;return!1}var v4=50,I4={maxConnections:Yh,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},r0=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??I4.maxConnections,this.maxConnections<1)throw new k("Connection Manager maxConnections must be greater than 0");this.connections=new pt,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=>ul(n)),this.deny=(t.deny??[]).map(n=>ul(n)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??I4.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new ga({points:t.inboundConnectionThreshold??I4.inboundConnectionThreshold,duration:1}),this.connectionPruner=new jh({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:t.allow?.map(n=>$(n))}),this.dialQueue=new e0(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??Xh,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??5e3,resolvers:t.resolvers??{dnsaddr:Gi},connections:this.connections}),this.reconnectQueue=new t0({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 yt(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 Rt(this.reconnectQueue,this.dialQueue,this.connectionPruner);let e=[];for(let t of this.connections.values())for(let n of t)e.push((async()=>{try{await n.close()}catch(o){this.log.error(o)}})());this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}getMaxConnections(){return this.maxConnections}onConnect(e){this._onConnect(e).catch(t=>{this.log.error(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("onDisconnect remove all connections for peer %p",n),this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:t.remotePeer}))}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 Fr("Not started");this.outboundPendingConnections++;try{t.signal?.throwIfAborted();let{peerId:n}=Qh(e);if(this.peerId.equals(n))throw new ts("Can not dial self");if(n!=null&&t.force!==!0){this.log("dial %p",n);let a=this.getConnections(n).find(c=>c.limits==null);if(a!=null)return this.log("had an existing non-limited connection to %p",n),t.onProgress?.(new W("dial-queue:already-connected")),a}let o=await this.dialQueue.dial(e,{...t,priority:t.priority??v4});if(o.status!=="open")throw new Ji("Remote closed connection during opening");let i=this.connections.get(o.remotePeer);i==null&&(i=[],this.connections.set(o.remotePeer,i));let s=!1;for(let a of i)if(a.id===o.id&&(s=!0),t.force!==!0&&a.id!==o.id&&a.remoteAddr.equals(o.remoteAddr))return o.abort(new lo("Duplicate multiaddr connection")),a;return s||i.push(o),o}finally{this.outboundPendingConnections--}}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await o.close(t)}catch(i){o.abort(i)}}))}async acceptIncomingConnection(e){if(this.deny.some(o=>o.contains(e.remoteAddr.nodeAddress().address)))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>o.contains(e.remoteAddr.nodeAddress().address)))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(e.remoteAddr.isThinWaistAddress()){let o=e.remoteAddr.nodeAddress().address;try{await this.inboundConnectionRateLimiter.consume(o,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o),!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=>$(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var ZP=1e4,JP="1.0.0",eR="ping",tR="ipfs",hx=32,rR=!0,n0=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??tR}/${eR}/${JP}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??ZP,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??rR,this.timeout=new dn({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[Se]=["@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=Mi(o);t=Date.now(),await Promise.all([i.write(Wt(hx),{signal:n}),i.read(hx,{signal:n})]),e.rtt=Date.now()-t,await i.unwrap().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",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 o0=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:U(n,"base36")})})??this.put,this.get=e.metrics?.traceFunction("libp2p.contentRouting.get",this.get.bind(this),{optionsIndex:1,getAttributesFromArgs:([n])=>({key:U(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 va("No content routers available");let n=this,o=new Gt;for await(let i of qt(...n.routers.map(s=>s.findProviders(e,t))))i!=null&&(i.multiaddrs.length>0&&await this.components.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),!o.has(i.id)&&(o.add(i.id),yield i))}async provide(e,t={}){if(this.routers.length===0)throw new va("No content routers available");await Promise.all(this.routers.map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){if(this.routers.length===0)throw new va("No content routers available");await Promise.all(this.routers.map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new Fr;await Promise.all(this.routers.map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new Fr;return Promise.any(this.routers.map(async n=>n.get(e,t)))}};var i0=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:U(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 cl("No peer routers available");if(e.toString()===this.peerId.toString())throw new Kh("Should not try to find self");let n=this,o=qt(...this.routers.map(i=>async function*(){try{yield await i.findPeer(e,t)}catch(s){n.log.error(s)}}()));for await(let i of o)if(i!=null)return i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),i;throw new Oe}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new cl("No peer routers available");let n=this,o=or(1024);for await(let i of un(async function*(){let s=qt(...n.routers.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",c);return}return a}}()))i!=null&&(i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),!o.has(i.id.toMultihash().bytes)&&(o.add(i.id.toMultihash().bytes),yield i))}};var s0=class extends me{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=le([this.shutdownController.signal,e?.signal]);try{for(;;)this.needNext?.resolve(),this.needNext=J(),yield(await dt(this,"walk:peer",t,{errorEvent:"walk:error"})).detail}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=le([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=Wt(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 et(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("randomwalk errored",o),this.safeDispatchEvent("walk:error",{detail:o})}this.log("no walkers left, ended walk")}).catch(o=>{this.log.error("randomwalk errored",o)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var T4=32,_4=64,a0=class{log;topologies;handlers;components;constructor(e){this.log=e.logger.forComponent("libp2p:registrar"),this.topologies=new Map,this.handlers=new Map,this.components=e,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 Hh(`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 qh(`Handler already registered for protocol ${e}`);let o=fa.bind({ignoreUndefined:!0})({maxInboundStreams:T4,maxOutboundStreams:_4},n);this.handlers.set(e,{handler:t,options:o}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]})}async unhandle(e){(Array.isArray(e)?e:[e]).forEach(n=>{this.handlers.delete(n)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()})}async register(e,t){if(t==null)throw new k("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))}_onDisconnect(e){let t=e.detail;this.components.peerStore.get(t).then(n=>{for(let o of n.protocols){let i=this.topologies.get(o);if(i!=null)for(let s of i.values())s.filter?.has(t)!==!1&&(s.filter?.remove(t),s.onDisconnect?.(t))}}).catch(n=>{n.name!=="NotFoundError"&&this.log.error("could not inform topologies of disconnecting peer %p",t,n)})}_onPeerUpdate(e){let{peer:t,previous:n}=e.detail,o=(n?.protocols??[]).filter(i=>!t.protocols.includes(i));for(let i of o){let s=this.topologies.get(i);if(s!=null)for(let a of s.values())a.filter?.has(t.id)!==!1&&(a.filter?.remove(t.id),a.onDisconnect?.(t.id))}}_onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;for(let i of t){let s=this.topologies.get(i);if(s!=null)for(let a of s.values())n.limits!=null&&a.notifyOnLimitedConnection!==!0||a.filter?.has(o)!==!0&&(a.filter?.add(o),a.onConnect?.(o,n))}}};var c0=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=new Map,this.listeners=Fd({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??ao.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new k("Transport must have a valid tag");if(this.transports.has(t))throw new k(`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 Gh(`No transport available for address ${String(e)}`);return t?.onProgress?.(new W("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 Fr("Not started");if(e==null||e.length===0){this.log("no addresses were provided for listening, this node is dial only");return}let t=[];for(let[n,o]of this.transports.entries()){let i=o.listenFilter(e),s=[];for(let l of i){this.log("creating listener for %s on %a",n,l);let u=o.createListener({upgrader:this.components.upgrader}),d=this.listeners.get(n)??[];d==null&&(d=[],this.listeners.set(n,d)),d.push(u),u.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:u})}),u.addEventListener("close",()=>{let f=d.findIndex(h=>h===u);d.splice(f,1),this.components.events.safeDispatchEvent("transport:close",{detail:u})}),s.push(u.listen(l))}if(s.length===0){t.push(n);continue}if((await Promise.allSettled(s)).find(l=>l.status==="fulfilled")==null&&this.faultTolerance!==ao.NO_FATAL)throw new Qi(`Transport (${n}) could not listen on any available address`)}if(t.length===this.transports.size){let n=`no valid addresses were provided for transports [${t.join(", ")}]`;if(this.faultTolerance===ao.FATAL_ALL)throw new Qi(n);this.log(`libp2p in dial mode only: ${n}`)}}async remove(e){let t=this.listeners.get(e)??[];this.log.trace("removing transport %s",e);let n=[];for(this.log.trace("closing listeners for %s",e);t.length>0;){let o=t.pop();o!=null&&n.push(o.close())}await Promise.all(n),this.transports.delete(e),this.listeners.delete(e)}async removeAll(){let e=[];for(let t of this.transports.keys())e.push(this.remove(t));await Promise.all(e)}};var Ct="/multistream/1.0.0";var nR=N(`
58
- `);async function Zi(r,e,t){await r.write(e,t)}async function px(r,e,t){await r.writeV(e,t)}async function oR(r,e){let t=await r.read(e);if(t.byteLength===0||t.get(t.byteLength-1)!==nR[0])throw e.log.error("Invalid mss message - missing newline",t),new he("Missing newline");return t.sublist(0,-1)}async function jo(r,e){let t=await oR(r,e);return U(t.subarray())}async function dl(r,e,t){if(e=Array.isArray(e)?[...e]:[e],e.length===1&&t.negotiateFully===!1)return iR(r,e[0],t);let n=Cn(r,{...t,maxDataLength:1024}),o=e.shift();if(o==null)throw new Error("At least one protocol must be specified");t.log.trace('select: write ["%s", "%s"]',Ct,o);let i=N(`${Ct}
59
- `),s=N(`${o}
60
- `);await px(n,[i,s],t),t.log.trace("select: reading multistream-select header");let a=await jo(n,t);if(t.log.trace('select: read "%s"',a),a===Ct&&(t.log.trace("select: reading protocol response"),a=await jo(n,t),t.log.trace('select: read "%s"',a)),a===o)return{stream:n.unwrap(),protocol:o};for(let c of e){t.log.trace('select: write "%s"',c),await Zi(n,N(`${c}
61
- `),t),t.log.trace("select: reading protocol response");let l=await jo(n,t);if(t.log.trace('select: read "%s" for "%s"',l,c),l===c)return{stream:n.unwrap(),protocol:c}}throw new Dn("protocol selection failed")}function iR(r,e,t){let n=r.sink.bind(r),o=r.source,i=!1,s=!1,a=J(),c=!1,l=!1,u=J(),d=!1,f=!1,h=J(),p=Cn({sink:n,source:o},{...t,maxDataLength:1024});r.sink=async x=>{let{sink:w}=p.unwrap();await w(async function*(){let I=!1;for await(let B of x){if(l&&await u.promise,c)yield B;else{l=!0,t.log.trace('optimistic: write ["%s", "%s", data(%d)] in sink',Ct,e,B.byteLength);let D=`${e}
62
- `;yield new ce(Uint8Array.from([19]),N(`${Ct}
63
- `),Re(D.length),N(D),B).subarray(),t.log.trace('optimistic: wrote ["%s", "%s", data(%d)] in sink',Ct,e,B.byteLength),c=!0,l=!1,u.resolve(),g().catch(R=>{t.log.error("could not finish optimistic protocol negotiation of %s",e,R)})}I=!0}I||await g()}())};async function g(){if(s){t.log.trace("optimistic: already negotiating %s stream",e),await a.promise;return}s=!0;try{c||(t.log.trace("optimistic: doing send protocol for %s stream",e),await m()),d||(t.log.trace("optimistic: doing read protocol for %s stream",e),await y())}finally{s=!1,i=!0,a.resolve()}}async function m(){if(l){await u.promise;return}l=!0;try{t.log.trace('optimistic: write ["%s", "%s", data] in source',Ct,e),await p.writeV([N(`${Ct}
64
- `),N(`${e}
65
- `)]),t.log.trace('optimistic: wrote ["%s", "%s", data] in source',Ct,e)}finally{c=!0,l=!1,u.resolve()}}async function y(){if(f){await h.promise;return}f=!0;try{t.log.trace("optimistic: reading multistream select header");let x=await jo(p,t);if(t.log.trace('optimistic: read multistream select header "%s"',x),x===Ct&&(x=await jo(p,t)),t.log.trace('optimistic: read protocol "%s", expecting "%s"',x,e),x!==e)throw new Dn("protocol selection failed")}finally{d=!0,f=!1,h.resolve()}}if(r.source=async function*(){await g(),t.log.trace('optimistic: reading data from "%s" stream',e),yield*p.unwrap().source}(),r.closeRead!=null){let x=r.closeRead.bind(r);r.closeRead=async w=>{i||await g().catch(I=>{t.log.error("could not negotiate protocol before close read",I)}),await x(w)}}if(r.closeWrite!=null){let x=r.closeWrite.bind(r);r.closeWrite=async w=>{i||await g().catch(I=>{t.log.error("could not negotiate protocol before close write",I)}),await x(w)}}if(r.close!=null){let x=r.close.bind(r);r.close=async w=>{let I=[];l&&I.push(u.promise),f&&I.push(h.promise),I.length>0?await et(Promise.all(I),w?.signal):(i=!0,s=!1,a.resolve()),await x(w)}}return{stream:r,protocol:e}}async function fl(r,e,t){e=Array.isArray(e)?e:[e],t.log.trace("handle: available protocols %s",e);let n=Cn(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){t.log.trace("handle: reading incoming string");let o=await jo(n,t);if(t.log.trace('handle: read "%s"',o),o===Ct){t.log.trace('handle: respond with "%s" for "%s"',Ct,o),await Zi(n,N(`${Ct}
66
- `),t),t.log.trace('handle: responded with "%s" for "%s"',Ct,o);continue}if(e.includes(o))return t.log.trace('handle: respond with "%s" for "%s"',o,o),await Zi(n,N(`${o}
67
- `),t),t.log.trace('handle: responded with "%s" for "%s"',o,o),{stream:n.unwrap(),protocol:o};if(o==="ls"){let i=new ce(...e.map(s=>$r.single(N(`${s}
68
- `))),N(`
69
- `));t.log.trace('handle: respond with "%s" for %s',e,o),await Zi(n,i,t),t.log.trace('handle: responded with "%s" for %s',e,o);continue}t.log.trace('handle: respond with "na" for "%s"',o),await Zi(n,N(`na
70
- `),t),t.log('handle: responded with "na" for "%s"',o)}}var aR=500,k4=class{id;remoteAddr;remotePeer;direction;timeline;multiplexer;encryption;status;limits;log;tags;_newStream;_close;_abort;_getStreams;constructor(e){let{remoteAddr:t,remotePeer:n,newStream:o,close:i,abort:s,getStreams:a}=e;this.id=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`,this.remoteAddr=t,this.remotePeer=n,this.direction=e.direction,this.status="open",this.timeline=e.timeline,this.multiplexer=e.multiplexer,this.encryption=e.encryption,this.limits=e.limits,this.log=e.logger.forComponent(`libp2p:connection:${this.direction}:${this.id}`),this.remoteAddr.getPeerId()==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),this._newStream=o,this._close=i,this._abort=s,this._getStreams=a,this.tags=[]}[Symbol.toStringTag]="Connection";[U4]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new yl("the connection is being closed");if(this.status==="closed")throw new Ji("the connection is closed");if(Array.isArray(e)||(e=[e]),this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new rs("Cannot open protocol stream on limited connection");let n=await this._newStream(e,t);return n.direction="outbound",n}async close(e={}){if(!(this.status==="closed"||this.status==="closing")){if(this.log("closing connection to %a",this.remoteAddr),this.status="closing",e.signal==null){let t=AbortSignal.timeout(aR);e={...e,signal:t}}try{this.log.trace("closing underlying transport"),await this._close(e),this.log.trace("updating timeline with close time"),this.status="closed",this.timeline.close=Date.now()}catch(t){this.log.error("error encountered during graceful close of connection to %a",this.remoteAddr,t),this.abort(t)}}}abort(e){this.status!=="closed"&&(this.log.error("aborting connection to %a due to error",this.remoteAddr,e),this.status="closing",this._abort(e),this.status="closed",this.timeline.close=Date.now())}};function gx(r){return new k4(r)}function uR(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return T4}function dR(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??_4}function yx(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var l0=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;outboundUpgradeTimeout;inboundStreamProtocolNegotiationTimeout;outboundStreamProtocolNegotiationTimeout;events;metrics;constructor(e,t){this.components=e,this.connectionEncrypters=new Map,t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=new Map,t.streamMuxers.forEach(n=>{this.streamMuxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??3e3,this.outboundUpgradeTimeout=t.outboundUpgradeTimeout??3e3,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??2e3,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??2e3,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")}}[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 zh(`The multiaddr connection is blocked by gater.${e}`)}async upgradeInbound(e,t={}){let n=!1;try{if(this.metrics.dials?.increment({inbound:!0}),n=await this.components.connectionManager.acceptIncomingConnection(e),!n)throw new Wh("Connection denied");await this.shouldBlockConnection("denyInboundConnection",e),await this._performUpgrade(e,"inbound",t)}catch(o){throw this.metrics.errors?.increment({inbound:!0}),o}finally{n&&this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t={}){try{this.metrics.dials?.increment({outbound:!0});let n=e.remoteAddr.getPeerId(),o;n!=null&&(o=Ve(n),await this.shouldBlockConnection("denyOutboundConnection",o,e));let i="outbound";return t.initiator===!1&&(i="inbound"),await this._performUpgrade(e,i,t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),n}}async _performUpgrade(e,t,n){let o,i,s,a,c;if(n.signal==null){e.log("no abort signal was passed while trying to upgrade connection, falling back to default timeout");let u=AbortSignal.timeout(t==="inbound"?this.inboundUpgradeTimeout:this.outboundUpgradeTimeout);n.signal=u}this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t);let l=e;if(n?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(e.log("protecting the %s connection",t),l=await u.protect(e,n))}try{if(o=l,n?.skipEncryption!==!0){n?.onProgress?.(new W(`upgrader:encrypt-${t}-connection`)),{conn:o,remotePeer:i,protocol:c}=await(t==="inbound"?this._encryptInbound(l,n):this._encryptOutbound(l,n));let u={...l,...o};await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",i,u)}else{let u=e.remoteAddr.getPeerId();if(u==null)throw new lo(`${t} connection that skipped encryption must have a peer id`);let d=Ve(u);c="native",i=d}if(i.equals(this.components.peerId)){let u=new ts("Can not dial self");throw e.abort(u),u}if(s=o,n?.muxerFactory!=null)a=n.muxerFactory;else if(this.streamMuxers.size>0){n?.onProgress?.(new W(`upgrader:multiplex-${t}-connection`));let u=await(t==="inbound"?this._multiplexInbound({...l,...o},this.streamMuxers,n):this._multiplexOutbound({...l,...o},this.streamMuxers,n));a=u.muxerFactory,s=u.stream}}catch(u){throw e.log.error("failed to upgrade inbound connection %s %a - %e",t==="inbound"?"from":"to",e.remoteAddr,u),u}return await this.shouldBlockConnection(t==="inbound"?"denyInboundUpgradedConnection":"denyOutboundUpgradedConnection",i,e),e.log("successfully upgraded %s connection",t),this._createConnection({cryptoProtocol:c,direction:t,maConn:e,upgradedConn:s,muxerFactory:a,remotePeer:i,limits:n?.limits})}_createConnection(e){let{cryptoProtocol:t,direction:n,maConn:o,upgradedConn:i,remotePeer:s,muxerFactory:a,limits:c}=e,l,u,d;a!=null&&(l=a.createStreamMuxer({direction:n,onIncomingStream:p=>{d!=null&&Promise.resolve().then(async()=>{let g=this.components.registrar.getProtocols(),m=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);let{stream:y,protocol:x}=await fl(p,g,{signal:m,log:p.log,yieldBytes:!1});if(d==null)return;d.log("incoming stream opened on %s",x);let w=uR(x,this.components.registrar);if(yx(x,"inbound",d)===w){let B=new vl(`Too many inbound protocol streams for protocol "${x}" - limit ${w}`);throw p.abort(B),B}p.source=y.source,p.sink=y.sink,p.protocol=x,y.closeWrite!=null&&(p.closeWrite=y.closeWrite),y.closeRead!=null&&(p.closeRead=y.closeRead),y.close!=null&&(p.close=y.close),await this.components.peerStore.merge(s,{protocols:[x]}),this.components.metrics?.trackProtocolStream(p,d),this._onStream({connection:d,stream:p,protocol:x})}).catch(async g=>{d.log.error("error handling incoming stream id %s - %e",p.id,g),p.timeline.close==null&&await p.close()})}}),u=async(p,g={})=>{if(l==null)throw new Yi("Connection is not multiplexed");d.log.trace("starting new stream for protocols %s",p);let m=await l.newStream();d.log.trace("started new stream %s for protocols %s",m.id,p);try{if(g.signal==null){m.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",p);let B=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);g={...g,signal:B}}m.log.trace("selecting protocol from protocols %s",p);let{stream:y,protocol:x}=await dl(m,p,{...g,log:m.log,yieldBytes:!0});m.log.trace("selected protocol %s",x);let w=dR(x,this.components.registrar,g),I=yx(x,"outbound",d);if(I>=w){let B=new fo(`Too many outbound protocol streams for protocol "${x}" - ${I}/${w}`);throw m.abort(B),B}return await this.components.peerStore.merge(s,{protocols:[x]}),m.source=y.source,m.sink=y.sink,m.protocol=x,y.closeWrite!=null&&(m.closeWrite=y.closeWrite),y.closeRead!=null&&(m.closeRead=y.closeRead),y.close!=null&&(m.close=y.close),this.components.metrics?.trackProtocolStream(m,d),m}catch(y){throw d.log.error("could not create new outbound stream on connection %s %a for protocols %s - %e",n==="inbound"?"from":"to",e.maConn.remoteAddr,p,y),m.timeline.close==null&&m.abort(y),y}},Promise.all([l.sink(i.source),i.sink(l.source)]).catch(p=>{d.log.error("error piping data through muxer - %e",p)}));let f=o.timeline;o.timeline=new Proxy(f,{set:(...p)=>(p[1]==="close"&&p[2]!=null&&f.close==null&&(async()=>{try{d.status==="open"&&await d.close()}catch(g){d.log.error("error closing connection after timeline close %e",g)}finally{this.events.safeDispatchEvent("connection:close",{detail:d})}})().catch(g=>{d.log.error("error thrown while dispatching connection:close event %e",g)}),Reflect.set(...p))}),o.timeline.upgraded=Date.now();let h=()=>{throw new Yi("Connection is not multiplexed")};return d=gx({remoteAddr:o.remoteAddr,remotePeer:s,status:"open",direction:n,timeline:o.timeline,multiplexer:l?.protocol,encryption:t,limits:c,logger:this.components.logger,newStream:u??h,getStreams:()=>l?.streams??[],close:async p=>{await l?.close(p),await o.close(p)},abort:p=>{o.abort(p),l?.abort(p)}}),this.events.safeDispatchEvent("connection:open",{detail:d}),d.__maConnTimeline=f,d}_onStream(e){let{connection:t,stream:n,protocol:o}=e,{handler:i,options:s}=this.components.registrar.getHandler(o);if(t.limits!=null&&s.runOnLimitedConnection!==!0)throw new rs("Cannot open protocol stream on limited connection");i({connection:t,stream:n})}async _encryptInbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{let{stream:o,protocol:i}=await fl(e,n,{...t,log:e.log}),s=this.connectionEncrypters.get(i);if(s==null)throw new Xi(`no crypto module found for ${i}`);return e.log("encrypting inbound connection to %a using %s",e.remoteAddr,i),{...await s.secureInbound(o,t),protocol:i}}catch(o){throw e.log.error("encrypting inbound connection from %a failed",e.remoteAddr,o),new Xi(o.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{e.log.trace("selecting encrypter from %s",n);let{stream:o,protocol:i}=await dl(e,n,{...t,log:e.log,yieldBytes:!0}),s=this.connectionEncrypters.get(i);if(s==null)throw new Xi(`no crypto module found for ${i}`);return e.log("encrypting outbound connection to %a using %s",e.remoteAddr,i),{...await s.secureOutbound(o,t),protocol:i}}catch(o){throw e.log.error("encrypting outbound connection to %a failed",e.remoteAddr,o),new Xi(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{stream:i,protocol:s}=await dl(e,o,{...n,log:e.log,yieldBytes:!0});e.log("selected %s as muxer protocol",s);let a=t.get(s);return{stream:i,muxerFactory:a}}catch(i){throw e.log.error("error multiplexing outbound connection",i),new Yi(String(i))}}async _multiplexInbound(e,t,n){let o=Array.from(t.keys());e.log("inbound handling muxers %s",o);try{let{stream:i,protocol:s}=await fl(e,o,{...n,log:e.log}),a=t.get(s);return{stream:i,muxerFactory:a}}catch(i){throw e.log.error("error multiplexing inbound connection",i),new Yi(String(i))}}};var u0=class extends me{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new me,n=t.dispatchEvent.bind(t);t.dispatchEvent=l=>{let u=n(l),d=this.dispatchEvent(new CustomEvent(l.type,{detail:l.detail}));return u||d},this.peerId=e.peerId,this.logger=e.logger??Po(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=e.nodeInfo?.name??al,i=e.nodeInfo?.version??al,s=this.components=jb({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:{name:o,version:i,userAgent:e.nodeInfo?.userAgent??_h(o,i)},logger:this.logger,events:t,datastore:e.datastore??new Bi,connectionGater:Jb(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",qb(s,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),s.events.addEventListener("peer:update",l=>{if(l.detail.previous==null){let u={id:l.detail.peer.id,multiaddrs:l.detail.peer.addresses.map(d=>d.multiaddr)};s.events.safeDispatchEvent("peer:discovery",{detail:u})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(s)),this.components.upgrader=new l0(this.components,{connectionEncrypters:(e.connectionEncrypters??[]).map((l,u)=>this.configureComponent(`connection-encryption-${u}`,l(this.components))),streamMuxers:(e.streamMuxers??[]).map((l,u)=>this.configureComponent(`stream-muxers-${u}`,l(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout,outboundUpgradeTimeout:e.connectionManager?.outboundUpgradeTimeout,inboundStreamProtocolNegotiationTimeout:e.connectionManager?.inboundStreamProtocolNegotiationTimeout??e.connectionManager?.protocolNegotiationTimeout,outboundStreamProtocolNegotiationTimeout:e.connectionManager?.outboundStreamProtocolNegotiationTimeout??e.connectionManager?.protocolNegotiationTimeout}),this.configureComponent("transportManager",new c0(this.components,e.transportManager)),this.configureComponent("connectionManager",new r0(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new n0(this.components,e.connectionMonitor)),this.configureComponent("registrar",new a0(this.components)),this.configureComponent("addressManager",new Fh(this.components,e.addresses));let a=(e.peerRouters??[]).map((l,u)=>this.configureComponent(`peer-router-${u}`,l(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new i0(this.components,{routers:a}));let c=(e.contentRouters??[]).map((l,u)=>this.configureComponent(`content-router-${u}`,l(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new o0(this.components,{routers:c})),this.configureComponent("randomWalk",new s0(this.components)),(e.peerDiscovery??[]).forEach((l,u)=>{this.configureComponent(`peer-discovery-${u}`,l(this.components)).addEventListener("peer",f=>{this.#e(f)})}),e.transports?.forEach((l,u)=>{this.components.transportManager.add(this.configureComponent(`transport-${u}`,l(this.components)))}),e.services!=null)for(let l of Object.keys(e.services)){let u=e.services[l],d=u(this.components);if(d==null){this.log.error("service factory %s returned null or undefined instance",l);continue}this.services[l]=d,this.configureComponent(l,d),d[hn]!=null&&(this.log("registering service %s for content routing",l),c.push(d[hn])),d[pn]!=null&&(this.log("registering service %s for peer routing",l),a.push(d[pn])),d[Zo]!=null&&(this.log("registering service %s for peer discovery",l),d[Zo].addEventListener?.("peer",f=>{this.#e(f)}))}Zb(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")}catch(e){throw this.log.error("An error occurred starting libp2p",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 Gt;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 k("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new k("no protocols were provided to open a stream");return(await this.dial(e,n)).newStream(t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){Mo(e)&&(e=Ve(e.getPeerId()??"")),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);if(s.id.publicKey!=null)return s.id.publicKey}catch(s){if(s.name!=="NotFoundError")throw s}let n=Ce([N("/pk/"),e.toMultihash().bytes]),o=await this.contentRouting.get(n,t),i=nt(o);return await this.peerStore.patch(e,{publicKey:i}),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){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async t=>{await this.components.registrar.unhandle(t)}))}async register(e,t){return this.components.registrar.register(e,t)}unregister(e){this.components.registrar.unregister(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(n)})}};async function wx(r={}){r.privateKey??=await Yu("Ed25519");let e=new u0({...await Fb(r),peerId:o8(r.privateKey)});return r.start!==!1&&await e.start(),e}async function bx(r){let e=r.libp2p??{};e.privateKey==null&&r.datastore!=null&&(e.privateKey=await c4(r.datastore,r.keychain));let t=Ch(e);return t.datastore=t.datastore??r.datastore,await wx({...t,...e,start:!1})}async function fR(r={}){let e=r.datastore??new Bi,t=r.blockstore??new Oc,n;hR(r.libp2p)?n=r.libp2p:n=await bx({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let o=new E1({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[Am(),Zp()],routers:r.routers??[Mm(n),Bm()],metrics:n.metrics});return r.start!==!1&&await o.start(),o}function hR(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}return Lx(pR);})();
57
+ a=ice-pwd:`+e+t),r}var s4=L("libp2p-webrtc-noise:");function Cb(r,e,t){let n=r.trim().toLowerCase().replaceAll(":",""),o=L(n,"hex"),i=Dt(Ye.code,o),s=n4.decode(o4(e)),a=s4.byteLength+i.bytes.byteLength+s.byteLength;return t==="server"?ke([s4,s,i.bytes],a):ke([s4,i.bytes,s],a)}var RP=jc?"iceconnectionstatechange":"connectionstatechange";async function kb(r,e,t){let n=r.createDataChannel("",{negotiated:!0,id:0});if(t.role==="client"){t.log.trace("client creating local offer");let f=await r.createOffer();t.log.trace("client created local offer %s",f.sdp);let h=i4(f,e);t.log.trace("client setting local offer %s",h.sdp),await r.setLocalDescription(h);let p=Ib(t.remoteAddr,e);t.log.trace("client setting server description %s",p.sdp),await r.setRemoteDescription(p)}else{let f=Tb(t.remoteAddr,e);t.log.trace("server setting client %s %s",f.type,f.sdp),await r.setRemoteDescription(f),t.log.trace("server creating local answer");let h=await r.createAnswer();t.log.trace("server created local answer");let p=i4(h,e);t.log.trace("server setting local description %s",h.sdp),await r.setLocalDescription(p)}if(t.log.trace("%s wait for handshake channel to open",t.role),await lt(n,"open",t.signal),t.log.trace("%s handshake channel opened",t.role),t.role==="server"){let f=r.remoteFingerprint()?.value??"";t.remoteAddr=t.remoteAddr.encapsulate(Ab(f))}let o=Sb(r.localDescription?.sdp);if(o==null)throw new Qo("Could not get fingerprint from local description sdp");t.log.trace("%s performing noise handshake",t.role);let i=Cb(o,t.remoteAddr,t.role),s=Kd({prologueBytes:i})(t),a=pa({channel:n,direction:"inbound",logger:t.logger,...t.dataChannel??{}}),c={...a,sink:a.sink.bind(a),source:async function*(){for await(let f of a.source)for(let h of f)yield h}()},l=new qi(t,{peerConnection:r,remoteAddr:t.remoteAddr,timeline:{open:Date.now()},metrics:t.events});r.addEventListener(RP,()=>{switch(r.connectionState){case"failed":case"disconnected":case"closed":l.close().catch(f=>{t.log.error("error closing connection",f),l.abort(f)});break;default:break}}),t.events?.increment({peer_connection:!0});let u=new Go(t,{peerConnection:r,metrics:t.events,dataChannelOptions:t.dataChannel});if(t.role==="client")return t.log.trace("%s secure inbound",t.role),await s.secureInbound(c,{remotePeer:t.remotePeerId,signal:t.signal}),t.log.trace("%s upgrade outbound",t.role),t.upgrader.upgradeOutbound(l,{skipProtection:!0,skipEncryption:!0,muxerFactory:u,signal:t.signal});t.log.trace("%s secure outbound",t.role);let d=await s.secureOutbound(c,{remotePeer:t.remotePeerId,signal:t.signal});l.remoteAddr=l.remoteAddr.encapsulate(`/p2p/${d.remotePeer}`),t.log.trace("%s upgrade inbound",t.role),await t.upgrader.upgradeInbound(l,{skipProtection:!0,skipEncryption:!0,muxerFactory:u,signal:t.signal})}async function Pb(r,e,t,n){n==null&&(n=await RTCPeerConnection.generateCertificate({name:"ECDSA",namedCurve:"P-256"}));let o=typeof t=="function"?await t():t;return new RTCPeerConnection({...o??{},certificates:[n]})}var yh=class{log;metrics;components;init;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:webrtc-direct"),this.components=e,this.init=t,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"})})}[so]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[Ae]=["@libp2p/transport"];async dial(e,t){let n=await this._connect(e,t);return this.log("dialing address: %a",e),n}createListener(e){return new gh(this.components,{...this.init,...e})}listenFilter(e){return e.filter(gc.exactMatch)}dialFilter(e){return this.listenFilter(e)}async _connect(e,t){t.signal.throwIfAborted();let n,o=e.getPeerId();o!=null&&(n=Ue(o));let i=yb(),s=await Pb("client",i,typeof this.init.rtcConfiguration=="function"?await this.init.rtcConfiguration():this.init.rtcConfiguration??{});try{return await Ge(kb(s,i,{role:"client",log:this.log,logger:this.components.logger,metrics:this.components.metrics,events:this.metrics?.dialerEvents,signal:t.signal,remoteAddr:e,dataChannel:this.init.dataChannel,upgrader:t.upgrader,peerId:this.components.peerId,remotePeerId:n,privateKey:this.components.privateKey}),t.signal)}catch(a){throw s.close(),a}}};function Rb(r){return e=>new yh(e,r)}function Db(r){return e=>new mh(e,r)}var Nb=async r=>{if(r.readyState>=2)throw new Error("socket closed");r.readyState!==1&&await new Promise((e,t)=>{function n(){r.removeEventListener("open",o),r.removeEventListener("error",i)}function o(){n(),e()}function i(s){n(),t(s.error??new Error(`connect ECONNREFUSED ${r.url}`))}r.addEventListener("open",o),r.addEventListener("error",i)})};var Lb=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await Nb(r)}catch(i){if(i.message==="socket closed")break;throw i}if(r.readyState===r.CLOSING||r.readyState===r.CLOSED)break;r.send(o)}e.closeOnEnd!=null&&r.readyState<=1&&await new Promise((o,i)=>{r.addEventListener("close",s=>{if(s.wasClean||s.code===1006)o();else{let a=Object.assign(new Error("ws error"),{event:s});i(a)}}),setTimeout(()=>{r.close()})})});var Ub=Mr(Mb(),1);function Bb(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var Fb=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((i,s)=>{if(n){i();return}if(o!=null){s(o);return}let a=u=>{r.removeEventListener("open",c),r.removeEventListener("error",l),u()},c=()=>{a(i)},l=u=>{a(()=>{s(u.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let i=new Ub.EventIterator(({push:s,stop:a,fail:c})=>{let l=d=>{let f=null;typeof d.data=="string"&&(f=L(d.data)),Bb(d.data)&&(f=new Uint8Array(d.data)),d.data instanceof Uint8Array&&(f=d.data),f!=null&&s(f)},u=d=>{c(d.error??new Error("Socket error"))};return r.addEventListener("message",l),r.addEventListener("error",u),r.addEventListener("close",a),()=>{r.removeEventListener("message",l),r.removeEventListener("error",u),r.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let s of i)yield Bb(s)?new Uint8Array(s):s}(),n=r.readyState===1,o;return r.addEventListener("open",()=>{n=!0,o=null}),r.addEventListener("close",()=>{n=!1,o=null}),r.addEventListener("error",i=>{n||(o=i.error??new Error(`connect ECONNREFUSED ${r.url}`))}),Object.assign(t,{connected:e})};var Vb=(r,e)=>{e=e??{};let t=Fb(r),n=e.remoteAddress,o=e.remotePort;if(r.url!=null)try{let s=new URL(r.url);n=s.hostname,o=parseInt(s.port,10)}catch{}if(n==null||o==null)throw new Error("Remote connection did not have address and/or port");return{sink:Lb(r,e),source:t,connected:async()=>{await t.connected()},close:async()=>{(r.readyState===r.CONNECTING||r.readyState===r.OPEN)&&await new Promise(s=>{r.addEventListener("close",()=>{s()}),r.close()})},destroy:()=>{r.terminate!=null?r.terminate():r.close()},remoteAddress:n,remotePort:o,socket:r}};var $b=WebSocket;var NP={"http:":"ws:","https:":"wss:"},Kb="ws:",Hb=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??Kb}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??Kb,o=e.host,i=e.port!=null&&o?.endsWith(`:${e.port}`)!==!0?`:${e.port}`:"";r=`${n}//${o}${i}${r}`}let t=new URL(r);for(let[n,o]of Object.entries(NP))t.protocol===n&&(t.protocol=o);return t};function qb(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=Hb(r,t),o=new $b(n.toString(),e.websocket);return Vb(o,e)}function zb(r){return r.filter(e=>_i.exactMatch(e)||Wn.exactMatch(e))}function Wb(){throw new Error("WebSocket Servers can not be created in the browser!")}function Gb(r,e,t){let n=t.logger.forComponent("libp2p:websockets:maconn"),o=t.metrics,i=t.metricPrefix??"",s={log:n,async sink(a){try{await r.sink(async function*(){for await(let c of a)c instanceof Uint8Array?yield c:yield c.subarray()}())}catch(c){c.type!=="aborted"&&n.error(c)}},source:r.source,remoteAddr:e,timeline:{open:Date.now()},async close(a={}){let c=Date.now();if(a.signal==null){let u=AbortSignal.timeout(500);a={...a,signal:u}}let l=()=>{let{host:u,port:d}=s.remoteAddr.toOptions();n("timeout closing stream to %s:%s after %dms, destroying it manually",u,d,Date.now()-c),this.abort(new Vt("Socket close timeout"))};a.signal?.addEventListener("abort",l);try{await r.close()}catch(u){n.error("error closing WebSocket gracefully",u),this.abort(u)}finally{a.signal?.removeEventListener("abort",l),s.timeline.close=Date.now()}},abort(a){let{host:c,port:l}=s.remoteAddr.toOptions();n("timeout closing stream to %s:%s due to error",c,l,a),r.destroy(),s.timeline.close=Date.now(),o?.increment({[`${i}error`]:!0})}};return r.socket.addEventListener("close",()=>{o?.increment({[`${i}close`]:!0}),s.timeline.close==null&&(s.timeline.close=Date.now())},{once:!0}),s}var l4=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"})})}[so]=!0;[Symbol.toStringTag]="@libp2p/websockets";[Ae]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=await this._connect(e,t),o=Gb(n,e,{logger:this.logger,metrics:this.metrics?.dialerEvents});this.log("new outbound connection %s",o.remoteAddr);let i=await t.upgrader.upgradeOutbound(o,t);return this.log("outbound connection %s upgraded",o.remoteAddr),i}async _connect(e,t){t?.signal?.throwIfAborted();let n=e.toOptions();this.log("dialing %s:%s",n.host,n.port);let o=j(),i=qb(cd(e),this.init);i.socket.addEventListener("error",()=>{let s=new Zi(`Could not connect to ${e.toString()}`);this.log.error("connection error:",s),this.metrics?.dialerEvents.increment({error:!0}),o.reject(s)});try{t.onProgress?.(new W("websockets:open-connection")),await Ge(Promise.race([i.connected(),o.promise]),t.signal)}catch(s){throw t.signal?.aborted&&this.metrics?.dialerEvents.increment({abort:!0}),i.close().catch(a=>{this.log.error("error closing raw socket",a)}),s}return this.log("connected %s",e),this.metrics?.dialerEvents.increment({connect:!0}),i}createListener(e){return Wb({logger:this.logger,events:this.components.events,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):zb(e)}dialFilter(e){return this.listenFilter(e)}};function Qb(r={}){return e=>new l4(e,r)}var u4=Mr(md(),1);function Yb(r,e){let t=e.map((n,o)=>({record:An(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===ir.ValidityType.EOL&&o.record.validityType===ir.ValidityType.EOL){let a=u4.default.fromString(n.record.validity).toDate(),c=u4.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 xh="2.8.2",vh="js-libp2p";function Eh(r,e){return`${r??vh}/${e??xh} browser/${globalThis.navigator.userAgent}`}var Zb="5.3.0-325b36f",jb="helia";var Jb={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 Sh(r={}){let e=`${jb}/${Zb} ${Eh()}`;return{privateKey:r.privateKey,dns:r.dns,nodeInfo:{userAgent:e},addresses:{listen:["/p2p-circuit","/webrtc"]},transports:[E3(),Db(),Rb(),Qb()],connectionEncrypters:[Kd()],streamMuxers:[d9(),Xw()],peerDiscovery:[_9(Jb)],services:{autoNAT:g9(),dcutr:W9(),delegatedRouting:()=>y7("https://delegated-ipfs.dev",Im()),dht:Ny({clientMode:!0,validators:{ipns:Ed},selectors:{ipns:Yb}}),identify:J9(),identifyPush:ey(),keychain:eh(r.keychain),ping:eb()}}}async function d4(r,e={}){let t=e.selfKey??"self",n=eh(e)({datastore:r,logger:To()}),o;return await r.has(new Le(`/pkcs8/${t}`))?o=await n.exportKey(t):(o=await ru(e.keyType??"Ed25519"),await n.importKey(t,o)),o}var OP=32,{code:MP}=ne("dnsaddr"),f4=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}},zi=async function(e,t={}){let n=t.maxRecursiveDepth??OP;if(n===0)throw new f4("Max recursive depth reached");let[,o]=e.stringTuples().find(([l])=>l===MP)??[],s=await(t?.dns??yu()).query(`_dnsaddr.${o}`,{signal:t?.signal,types:[pr.TXT]}),a=e.getPeerId(),c=[];for(let l of s.Answer){let u=l.data.replace(/["']/g,"").trim().split("=")[1];if(u==null||a!=null&&!u.includes(a))continue;let d=$(u);if(u.startsWith("/dnsaddr")){let f=await d.resolve({...t,maxRecursiveDepth:n-1});c.push(...f.map(h=>h.toString()))}else c.push(d.toString())}return c};var BP={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:zi}},transportManager:{faultTolerance:Zo.FATAL_ALL}};async function ex(r){let e=sa(BP,r);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new P("Private network is enforced, but no protector was provided");return e}var oo;(function(r){let e;(function(o){let i;o.codec=()=>(i==null&&(i=re((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:se(0)},u=a==null?s.len:s.pos+a;for(;s.pos<u;){let d=s.uint32();switch(d>>>3){case 1:{l.key=s.string();break}case 2:{l.value=s.bytes();break}default:{s.skipType(d&7);break}}}return l})),i),o.encode=s=>te(s,o.codec()),o.decode=(s,a)=>ee(s,o.codec(),a)})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let i;o.codec=()=>(i==null&&(i=re((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),Ih.codec().encode(s.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={key:""},u=a==null?s.len:s.pos+a;for(;s.pos<u;){let d=s.uint32();switch(d>>>3){case 1:{l.key=s.string();break}case 2:{l.value=Ih.codec().decode(s,s.uint32(),{limits:c.limits?.value});break}default:{s.skipType(d&7);break}}}return l})),i),o.encode=s=>te(s,o.codec()),o.decode=(s,a)=>ee(s,o.codec(),a)})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=re((o,i,s={})=>{if(s.lengthDelimited!==!1&&i.fork(),o.addresses!=null)for(let a of o.addresses)i.uint32(10),Ah.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 Pe('Decode error - map field "addresses" had too many elements');a.addresses.push(Ah.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 Pe('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 Ta('Decode error - map field "metadata" had too many elements');let u=r.Peer$metadataEntry.codec().decode(o,o.uint32());a.metadata.set(u.key,u.value);break}case 7:{if(s.limits?.tags!=null&&a.tags.size===s.limits.tags)throw new Ta('Decode error - map field "tags" had too many elements');let u=r.Peer$tagsEntry.codec().decode(o,o.uint32(),{limits:{value:s.limits?.tags$value}});a.tags.set(u.key,u.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)=>ee(o,r.codec(),i)})(oo||(oo={}));var Ah;(function(r){let e;r.codec=()=>(e==null&&(e=re((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:se(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)=>ee(t,r.codec(),n)})(Ah||(Ah={}));var Ih;(function(r){let e;r.codec=()=>(e==null&&(e=re((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)=>ee(t,r.codec(),n)})(Ih||(Ih={}));function UP(r,e){if(r.publicKey!=null||e.publicKey==null)return r;let t;if(r.type==="RSA"){let o=be.decode(`z${r}`);t=Ee(o)}let n=rt(e.publicKey,t);return vn(n)}function Th(r,e,t){let n=oo.decode(e);return _h(r,n,t)}function _h(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:UP(r,e),addresses:e.addresses.filter(({observed:i})=>i!=null&&i>Date.now()-t).map(({multiaddr:i,isCertified:s})=>({multiaddr:$(i),isCertified:s??!1})),metadata:e.metadata,peerRecordEnvelope:e.peerRecordEnvelope??void 0,tags:n}}function tx(r,e){return FP(r.addresses,e.addresses)&&VP(r.protocols,e.protocols)&&$P(r.publicKey,e.publicKey)&&KP(r.peerRecordEnvelope,e.peerRecordEnvelope)&&HP(r.metadata,e.metadata)&&qP(r.tags,e.tags)}function FP(r,e){return nx(r,e,(t,n)=>!(t.isCertified!==n.isCertified||!J(t.multiaddr,n.multiaddr)))}function VP(r,e){return nx(r,e,(t,n)=>t===n)}function $P(r,e){return rx(r,e)}function KP(r,e){return rx(r,e)}function HP(r,e){return ox(r,e,(t,n)=>J(t,n))}function qP(r,e){return ox(r,e,(t,n)=>t.value===n.value&&t.expiry===n.expiry)}function rx(r,e){return r==null&&e==null?!0:r!=null&&e!=null?J(r,e):!1}function nx(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 ox(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 h4="/peers/";function el(r){if(!cl(r)||r.type==null)throw new P("Invalid PeerId");let e=r.toCID().toString();return new Le(`${h4}${e}`)}async function ix(r,e,t,n){let o=new Map;for(let i of t){if(i==null)continue;if(i.multiaddr instanceof Uint8Array&&(i.multiaddr=$(i.multiaddr)),!No(i.multiaddr))throw new P("Multiaddr was invalid");if(!await e(r,i.multiaddr))continue;let s=i.isCertified??!1,a=i.multiaddr.toString(),c=o.get(a);c!=null?i.isCertified=c.isCertified||s:o.set(a,{multiaddr:i.multiaddr,isCertified:s})}return[...o.values()].sort((i,s)=>i.multiaddr.toString().localeCompare(s.multiaddr.toString())).map(({isCertified:i,multiaddr:s})=>({isCertified:i,multiaddr:s.bytes}))}async function kh(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(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&i.push(...e.addresses)),e.protocols!=null&&(s=new Set(e.protocols)),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=Ch(f,{validate:sx})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=Ch(f,{validate:ax,map:cx})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&i.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&i.push(...e.addresses),e.protocols!=null&&(s=new Set([...s,...e.protocols])),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);for(let[h,p]of f)p==null?a.delete(h):a.set(h,p);a=Ch([...a.entries()],{validate:sx})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),h=new Map(c);for(let[p,g]of f)g==null?h.delete(p):h.set(p,g);c=Ch([...h.entries()],{validate:ax,map:cx})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let u;o?.id.publicKey!=null?u=Nt(o.id.publicKey):e.publicKey!=null?u=Nt(e.publicKey):r.publicKey!=null&&(u=Nt(r.publicKey));let d={addresses:await ix(r,n.addressFilter??(async()=>!0),i,n.existingPeer?.peerPB.addresses),protocols:[...s.values()].sort((f,h)=>f.localeCompare(h)),metadata:a,tags:c,publicKey:u,peerRecordEnvelope:l};return d.addresses.forEach(f=>{f.observed=n.existingPeer?.peerPB.addresses?.find(h=>J(h.multiaddr,h.multiaddr))?.observed??Date.now()}),r.type!=="RSA"&&delete d.publicKey,d}function Ch(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 sx(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 ax(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 cx(r,e){let t;return e.expiry!=null&&(t=e.expiry),e.ttl!=null&&(t=BigInt(Date.now()+Number(e.ttl))),{value:e.value??0,expiry:t}}function lx(r){let e=r.toString().split("/")[2],t=Q.parse(e,at);return Qr(t)}function p4(r,e,t){let n=lx(r);return Th(n,e,t)}function zP(r,e){return{prefix:h4,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(p4(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(p4(n.key,n.value,e),p4(o.key,o.value,e)))}}var Ph=class{peerId;datastore;lock;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.lock=vi({name:"peer-store",singleProcess:!0}),this.maxAddressAge=t.maxAddressAge??36e5,this.maxPeerAge=t.maxPeerAge??216e5}async has(e){try{return await this.load(e),!0}catch(t){if(t.name!=="NotFoundError")throw t}return!1}async delete(e){this.peerId.equals(e)||await this.datastore.delete(el(e))}async load(e){let t=el(e),n=await this.datastore.get(t),o=oo.decode(n);if(this.#r(e,o))throw await this.datastore.delete(t),new Ce;return _h(e,o,this.peerId.equals(e)?1/0:this.maxAddressAge)}async save(e,t){let n=await this.#e(e),o=await kh(e,t,"patch",{addressFilter:this.addressFilter});return this.#t(e,o,n)}async patch(e,t){let n=await this.#e(e),o=await kh(e,t,"patch",{addressFilter:this.addressFilter,existingPeer:n});return this.#t(e,o,n)}async merge(e,t){let n=await this.#e(e),o=await kh(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:n});return this.#t(e,o,n)}async*all(e){for await(let{key:t,value:n}of this.datastore.query(zP(e??{},this.maxAddressAge))){let o=lx(t);if(o.equals(this.peerId))continue;let i=oo.decode(n);if(this.#r(o,i)){await this.datastore.delete(t);continue}yield _h(o,i,this.peerId.equals(o)?1/0:this.maxAddressAge)}}async#e(e){try{let t=el(e),n=await this.datastore.get(t),o=oo.decode(n);if(this.#r(e,o))throw await this.datastore.delete(t),new Ce;return{peerPB:o,peer:Th(e,n,this.maxAddressAge)}}catch(t){t.name!=="NotFoundError"&&this.log.error("invalid peer data found in peer store - %e",t)}}async#t(e,t,n){t.updated=Date.now();let o=oo.encode(t);return await this.datastore.put(el(e),o),{peer:Th(e,o,this.maxAddressAge),previous:n?.peer,updated:n==null||!tx(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 m4=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 Ph(e,t)}[Symbol.toStringTag]="@libp2p/peer-store";async forEach(e,t){this.log.trace("forEach await read lock");let n=await this.store.lock.readLock();this.log.trace("forEach got read lock");try{for await(let o of this.store.all(t))e(o)}finally{this.log.trace("forEach release read lock"),n()}}async all(e){this.log.trace("all await read lock");let t=await this.store.lock.readLock();this.log.trace("all got read lock");try{return await Ri(this.store.all(e))}finally{this.log.trace("all release read lock"),t()}}async delete(e){this.log.trace("delete await write lock");let t=await this.store.lock.writeLock();this.log.trace("delete got write lock");try{await this.store.delete(e)}finally{this.log.trace("delete release write lock"),t()}}async has(e){this.log.trace("has await read lock");let t=await this.store.lock.readLock();this.log.trace("has got read lock");try{return await this.store.has(e)}finally{this.log.trace("has release read lock"),t()}}async get(e){this.log.trace("get await read lock");let t=await this.store.lock.readLock();this.log.trace("get got read lock");try{return await this.store.load(e)}finally{this.log.trace("get release read lock"),t()}}async save(e,t){this.log.trace("save await write lock");let n=await this.store.lock.writeLock();this.log.trace("save got write lock");try{let o=await this.store.save(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("save release write lock"),n()}}async patch(e,t){this.log.trace("patch await write lock");let n=await this.store.lock.writeLock();this.log.trace("patch got write lock");try{let o=await this.store.patch(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("patch release write lock"),n()}}async merge(e,t){this.log.trace("merge await write lock");let n=await this.store.lock.writeLock();this.log.trace("merge got write lock");try{let o=await this.store.merge(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("merge release write lock"),n()}}async consumePeerRecord(e,t){let n=await xr.openAndCertify(e,Qt.DOMAIN),o=Qr(n.publicKey.toCID());if(t?.equals(o)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",t,o),!1;let i=Qt.createFromProtobuf(n.payload),s;try{s=await this.get(o)}catch(a){if(a.name!=="NotFoundError")throw a}if(s?.peerRecordEnvelope!=null){let a=await xr.createFromProtobuf(s.peerRecordEnvelope),c=Qt.createFromProtobuf(a.payload);if(c.seqNumber>=i.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",c.seqNumber,i.seqNumber),!1}return await this.patch(i.peerId,{peerRecordEnvelope:e,addresses:i.multiaddrs.map(a=>({isCertified:!0,multiaddr:a}))}),!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 ux(r,e={}){return new m4(r,e)}function dx(r,e){let t,n=function(){let o=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(o,e)};return n.start=()=>{},n.stop=()=>{clearTimeout(t)},n}var fx=864e13;var WP=448,g4=449,GP=53,QP=54,YP=55,XP=56,Rh=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:dns-mappings"),this.mappings=new Map}has(e){let t=this.findHost(e);for(let n of this.mappings.values())if(n.domain===t)return!0;return!1}add(e,t){t.forEach(n=>{this.log("add DNS mapping %s to %s",n,e);let o=Gt(n)===!0;this.mappings.set(n,{domain:e,verified:o,expires:o?fx-Date.now():0,lastVerified:o?fx-Date.now():void 0})})}remove(e){let t=this.findHost(e),n=!1;for(let[o,i]of this.mappings.entries())i.domain===t&&(this.log("removing %s to %s DNS mapping %e",o,i.domain,new Error("where")),this.mappings.delete(o),n=n||i.verified);return n}getAll(e){let t=[];for(let n=0;n<e.length;n++){let i=e[n].multiaddr.stringTuples(),s=i[0][1];if(s!=null)for(let[a,c]of this.mappings.entries()){if(s!==a)continue;this.maybeAddSNITuple(i,c.domain)&&(e.splice(n,1),n--,t.push({multiaddr:$(`/${i.map(u=>[ne(u[0]).name,u[1]].join("/")).join("/")}`),verified:c.verified,type:"dns-mapping",expires:c.expires,lastVerified:c.lastVerified}))}}return t}maybeAddSNITuple(e,t){for(let n=0;n<e.length;n++)if(e[n][0]===WP&&e[n+1]?.[0]!==g4)return e.splice(n+1,0,[g4,t]),!0;return!1}confirm(e,t){let n=this.findHost(e),o=!1;for(let[i,s]of this.mappings.entries())s.domain===n&&(this.log("marking %s to %s DNS mapping as verified",i,s.domain),o=s.verified,s.verified=!0,s.expires=Date.now()+t,s.lastVerified=Date.now());return o}unconfirm(e,t){let n=this.findHost(e),o=!1;for(let[i,s]of this.mappings.entries())s.domain===n&&(this.log("removing verification of %s to %s DNS mapping",i,s.domain),o=o||s.verified,s.verified=!1,s.expires=Date.now()+t);return o}findHost(e){for(let t of e.stringTuples())if(t[0]===g4||t[0]===GP||t[0]===QP||t[0]===YP||t[0]===XP)return t[1]}};var y4=4,w4=41,b4=6,ZP=273,Dh=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:ip-mappings"),this.mappings=new Map}has(e){let t=e.stringTuples();for(let n of this.mappings.values())for(let o of n)if(o.externalIp===t[0][1])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:tn(n)?4:6,protocol:i,verified:!1,expires:0};a.push(c),this.mappings.set(s,a)}remove(e){let t=e.stringTuples(),n=t[0][1]??"",o=t[1][0]===b4?"tcp":"udp",i=parseInt(t[1][1]??"0"),s=!1;for(let[a,c]of this.mappings.entries()){for(let l=0;l<c.length;l++){let u=c[l];u.externalIp===n&&u.externalPort===i&&u.protocol===o&&(this.log("removing %s:%s to %s:%s %s IP mapping",u.externalIp,u.externalPort,n,i,o),s=s||u.verified,c.splice(l,1),l--)}c.length===0&&this.mappings.delete(a)}return s}getAll(e){let t=[];for(let{multiaddr:n}of e){let o=n.stringTuples(),i;if((o[0][0]===y4||o[0][0]===w4)&&o[1][0]===b4?i=`${o[0][1]}-${o[1][1]}-tcp`:(o[0][0]===y4||o[0][0]===w4)&&o[1][0]===ZP&&(i=`${o[0][1]}-${o[1][1]}-udp`),i==null)continue;let s=this.mappings.get(i);if(s!=null)for(let a of s)o[0][0]=a.externalFamily===4?y4:w4,o[0][1]=a.externalIp,o[1][1]=`${a.externalPort}`,t.push({multiaddr:$(`/${o.map(c=>[ne(c[0]).name,c[1]].join("/")).join("/")}`),verified:a.verified,type:"ip-mapping",expires:a.expires,lastVerified:a.lastVerified})}return t}confirm(e,t){let o=e.stringTuples()[0][1],i=!1;for(let s of this.mappings.values())for(let a of s)a.externalIp===o&&(this.log("marking %s to %s IP mapping as verified",a.internalIp,a.externalIp),i=a.verified,a.verified=!0,a.expires=Date.now()+t,a.lastVerified=Date.now());return i}unconfirm(e,t){let n=e.stringTuples(),o=n[0][1]??"",i=n[1][0]===b4?"tcp":"udp",s=parseInt(n[1][1]??"0"),a=!1;for(let c of this.mappings.values())for(let l=0;l<c.length;l++){let u=c[l];u.externalIp===o&&u.externalPort===s&&u.protocol===i&&(this.log("removing verification of %s:%s to %s:%s %s IP mapping",u.externalIp,u.externalPort,o,s,i),a=a||u.verified,u.verified=!1,u.expires=Date.now()+t)}return a}};function hx(r){try{let[[e,t]]=r.stringTuples();if(t==null)return!1;if(e===4)return t.startsWith("169.254.");if(e===41)return t.toLowerCase().startsWith("fe80")}catch{}return!1}var jP={maxObservedAddresses:10},Nh=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=new Map,this.maxObservedAddresses=t.maxObservedAddresses??jP.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&&(Dr(e)||hx(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:$(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 JP=[4,41,53,54,55,56];function x4(r){try{let[[e]]=r.stringTuples();return JP.includes(e)}catch{}return!1}var eR={maxObservedAddresses:10},Lh=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=new Map,this.maxObservedAddresses=t.maxObservedAddresses??eR.maxObservedAddresses}get(e,t){if(Dr(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:!x4(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(x4(e)){let t=e.toOptions();return`${t.host}-${t.port}-${t.transport}`}return e.toString()}};var px=6e4,mx={maxObservedAddresses:10,addressVerificationTTL:px*10,addressVerificationRetry:px*5},tR=r=>r;function v4(r,e){let t=r.getPeerId();return t!=null&&Ue(t).equals(e)&&(r=r.decapsulate($(`/p2p/${e.toString()}`))),r}var Oh=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 Nh(e,t),this.dnsMappings=new Rh(e,t),this.ipMappings=new Dh(e,t),this.transportAddresses=new Lh(e,t),this.announceFilter=t.announceFilter??tR,this.observedAddressFilter=rr(1024),this.addressVerificationTTL=t.addressVerificationTTL??mx.addressVerificationTTL,this.addressVerificationRetry=t.addressVerificationRetry??mx.addressVerificationRetry,this._updatePeerStoreAddresses=dx(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.getPeerId()===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",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>$(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>$(e))}getAppendAnnounceAddrs(){return Array.from(this.appendAnnounce).map(e=>$(e))}getObservedAddrs(){return this.observed.getAll().map(e=>e.multiaddr)}addObservedAddr(e){let t=e.stringTuples(),n=`${t[0][1]}:${t[1][1]}`;this.observedAddressFilter.has(n)||(this.observedAddressFilter.add(n),e=v4(e,this.components.peerId),!this.ipMappings.has(e)&&(this.dnsMappings.has(e)||this.observed.add(e)))}confirmObservedAddr(e,t){e=v4(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=v4(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=$(n);return o.protos().pop()?.path===!0||o.getPeerId()===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(n=>{n.updateAnnounceAddrs(e)}),e.map(n=>({multiaddr:n,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()}));let t=[];return t=t.concat(this.components.transportManager.getAddrs().map(n=>this.transportAddresses.get(n,this.addressVerificationTTL))),t=t.concat(this.getAppendAnnounceAddrs().map(n=>({multiaddr:n,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($(`/dns/${e}`))&&this._updatePeerStoreAddresses()}addPublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.add(e,t,n,o,i),this.observed.removePrefixed(`/ip${tn(n)?4:6}/${n}/${i}/${o}`)}removePublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.remove($(`/ip${tn(n)?4:6}/${n}/${i}/${o}`))&&this._updatePeerStoreAddresses()}maybeUpgradeToIPMapping(e){if(this.ipMappings.has(e))return!1;let t=e.toOptions();if(t.family===6||t.host==="127.0.0.1"||Gt(t.host)===!0)return!1;let n=this.components.transportManager.getListeners(),o=[i=>Wn.exactMatch(i)||_i.exactMatch(i),i=>Ti.exactMatch(i),i=>B5.exactMatch(i)];for(let i of o){if(!i(e))continue;let s=n.filter(l=>l.getAddrs().filter(u=>u.toOptions().family===4&&i(u)).length>0);if(s.length!==1)continue;let a=s[0].getAddrs().filter(l=>l.toOptions().host!=="127.0.0.1").pop();if(a==null)continue;let c=a.toOptions();return this.observed.remove(e),this.ipMappings.add(c.host,c.port,t.host,t.port,t.transport),!0}return!1}};var gx;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(gx||(gx={}));var Mh=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},Bh=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},ma=class extends Error{constructor(e="No content routers available"){super(e),this.name="NoContentRoutersError"}},tl=class extends Error{constructor(e="No peer routers available"){super(e),this.name="NoPeerRoutersError"}},Uh=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},Fh=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},Vh=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},rl=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},$h=class extends Error{constructor(e="No transport was configured to listen on this address"){super(e),this.name="UnsupportedListenAddressError"}},Kh=class extends Error{constructor(e="Configured listen addresses could not be listened on"){super(e),this.name="UnsupportedListenAddressesError"}},Hh=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},qh=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},zh=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},Wi=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},Gi=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},Wh=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}};var E4=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=To())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>gl(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")}},nR=["metrics","connectionProtector","dns"],oR=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function yx(r={}){let e=new E4(r);return new Proxy(e,{get(n,o,i){if(typeof o=="string"&&!oR.includes(o)){let s=e.components[o];if(s==null&&!nR.includes(o))throw new Mh(`${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 wx(r){let e={};for(let t of Object.values(r.components))for(let n of iR(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of sR(t))if(e[n]!==!0)throw new Bh(`Service "${aR(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function iR(r){return Array.isArray(r?.[Ae])?r[Ae]:[]}function sR(r){return Array.isArray(r?.[dr])?r[dr]:[]}function aR(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}var cR=4,lR=41;function bx(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{if(Wn.matches(e))return!1;let t=e.stringTuples();return t[0][0]===cR||t[0][0]===lR?!!Gt(`${t[0][1]}`):!1},denyInboundConnection:async()=>!1,denyOutboundConnection:async()=>!1,denyInboundEncryptedConnection:async()=>!1,denyOutboundEncryptedConnection:async()=>!1,denyInboundUpgradedConnection:async()=>!1,denyOutboundUpgradedConnection:async()=>!1,filterMultiaddrForPeer:async()=>!0,...r}}function Gh(r){if(cl(r))return{peerId:r,multiaddrs:[]};Array.isArray(r)||(r=[r]);let e;if(r.length>0){let t=r[0].getPeerId();e=t==null?void 0:Ue(t),r.forEach(n=>{if(!No(n))throw new ao("Invalid multiaddr");let o=n.getPeerId();if(o==null){if(e!=null)throw new P("Multiaddrs must all have the same peer id or have no peer id")}else{let i=Ue(o);if(e?.equals(i)!==!0)throw new P("Multiaddrs must all have the same peer id or have no peer id")}})}return{peerId:e,multiaddrs:r}}var uR=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function xx(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??uR;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}var vx="last-dial-failure",Ex="last-dial-success";var Qh=100,Yh=50;async function Sx(r,e){let t=!1;for(let o of Bs.keys())if(t=r.protoNames().includes(o),t)break;if(!t)return[r];let n=await r.resolve(e);return e.log("resolved %s to",r,n.map(o=>o.toString())),n}function nl(r){try{let e;if(typeof r=="string"?e=$(r):e=r,!e.protoNames().includes("ipcidr")){let n=e.protoNames().includes("ip6")?"/ipcidr/128":"/ipcidr/32";e=e.encapsulate(n)}return gm(e)}catch{throw new Error(`Can't convert to IpNet, Invalid multiaddr format: ${r}`)}}var dR={maxConnections:Qh,allow:[]},Xh=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??dR.maxConnections,this.allow=(t.allow??[]).map(n=>nl(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;if(this.log("checking max connections limit %d/%d",t,this.maxConnections),t<=this.maxConnections)return;let n=new ft;for(let a of e){let c=a.remotePeer;if(!n.has(c)){n.set(c,0);try{let l=await this.peerStore.get(c);n.set(c,[...l.tags.values()].reduce((u,d)=>u+d.value,0))}catch(l){l.name!=="NotFoundError"&&this.log.error("error loading peer tags",l)}}}let o=this.sortConnections(e,n),i=Math.max(t-this.maxConnections,0),s=[];for(let a of o)if(this.log("too many connections open - closing a connection to %p",a.remotePeer),this.allow.some(l=>l.contains(a.remoteAddr.nodeAddress().address))||s.push(a),s.length===i)break;await Promise.all(s.map(async a=>{await xx(a,{signal:AbortSignal.timeout(1e3)})})),this.events.safeDispatchEvent("connection:prune",{detail:s})}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 Zh=class extends $t{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};function Ax(r){return/^127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(r)||/^::1$/.test(r)}function S4(r){if(!Jd(r))return!1;let{address:e}=r.nodeAddress();return Ax(e)}function fR(r,e){let t=Ti.exactMatch(r.multiaddr),n=Ti.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=_i.exactMatch(r.multiaddr),i=_i.exactMatch(e.multiaddr);if(o&&!i)return-1;if(!o&&i)return 1;let s=Wn.exactMatch(r.multiaddr),a=Wn.exactMatch(e.multiaddr);if(s&&!a)return-1;if(!s&&a)return 1;let c=yc.exactMatch(r.multiaddr),l=yc.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let u=gc.exactMatch(r.multiaddr),d=gc.exactMatch(e.multiaddr);if(u&&!d)return-1;if(!u&&d)return 1;let f=im.exactMatch(r.multiaddr),h=im.exactMatch(e.multiaddr);return f&&!h?-1:!f&&h?1:0}function hR(r,e){let t=S4(r.multiaddr),n=S4(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function pR(r,e){let t=Dr(r.multiaddr),n=Dr(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function mR(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function gR(r,e){let t=or.exactMatch(r.multiaddr),n=or.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Ix(r){return r.sort(fR).sort(mR).sort(gR).sort(pR).sort(hR)}var jh={maxParallelDials:Yh,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:1e4,resolvers:{dnsaddr:zi}},Jh=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??jh.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??jh.maxDialQueueLength,this.dialTimeout=t.dialTimeout??jh.dialTimeout,this.connections=t.connections??new ft,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.shutDownController=new AbortController,this.shutDownController.signal;for(let[n,o]of Object.entries(t.resolvers??{}))Bs.set(n,o);this.queue=new Zh({concurrency:t.maxParallelDials??jh.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("error",n=>{n.detail.name!==Vt.name&&this.log.error("error in dial queue - %e",n.detail)})}start(){this.shutDownController=new AbortController,this.shutDownController.signal}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=Gh(e),i=Array.from(this.connections.values()).flat().find(a=>t.force===!0?!1:a.remotePeer.equals(n)?!0:o.find(c=>c.equals(a.remoteAddr)));if(i?.status==="open")return this.log("already connected to %a",i.remoteAddr),t.onProgress?.(new W("dial-queue:already-connected")),i;let s=this.queue.queue.find(a=>{if(n?.equals(a.options.peerId)===!0)return!0;let c=a.options.multiaddrs;if(c==null)return!1;for(let l of o)if(c.has(l.toString()))return!0;return!1});if(s!=null){this.log("joining existing dial target for %p",n);for(let a of o)s.options.multiaddrs.add(a.toString());return t.onProgress?.(new W("dial-queue:already-in-dial-queue")),s.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new Dn("Dial queue is full");return this.log("creating dial target for %p",n,o.map(a=>a.toString())),t.onProgress?.(new W("dial-queue:add-to-dial-queue")),this.queue.add(async a=>{a.onProgress?.(new W("dial-queue:start-dial"));let c=le([this.shutDownController.signal,a.signal]);try{return await this.dialPeer(a,c)}finally{c.clear()}},{peerId:n,priority:t.priority??_4,multiaddrs:new Set(o.map(a=>a.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 u=[],d=new Set(e.multiaddrs);o.clear(),this.log("calculating addrs to dial %p from %s",n,[...d]);let f=await this.calculateMultiaddrs(n,d,{...e,signal:t});for(let h of f){if(i.has(h.multiaddr.toString())){this.log.trace("skipping previously failed multiaddr %a while dialing %p",h.multiaddr,n);continue}u.push(h)}this.log("%s dial to %p with %s",c===1?"starting":"continuing",n,u.map(h=>h.multiaddr.toString())),e?.onProgress?.(new W("dial-queue:calculated-addresses",u));for(let h of u){if(a===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",a,e.peerId),new Dn("Peer had more than maxPeerAddrsToDial");a++;try{let p=await this.components.transportManager.dial(h.multiaddr,{...e,signal:t});this.log("dial to %a succeeded",h.multiaddr);try{await this.components.peerStore.merge(p.remotePeer,{multiaddrs:[p.remoteAddr],metadata:{[Ex]:L(Date.now().toString())}})}catch(g){this.log.error("could not update last dial failure key for %p",n,g)}return p}catch(p){if(this.log.error("dial failed to %a",h.multiaddr,p),i.add(h.multiaddr.toString()),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[vx]:L(Date.now().toString())}})}catch(g){this.log.error("could not update last dial failure key for %p",n,g)}if(t.aborted)throw new gn(p.message);l.push(p)}}}throw l.length===1?l[0]:new AggregateError(l,"All multiaddr dials failed")}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(d=>({multiaddr:$(d),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new Dn("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new rl("The dial request is blocked by gater.allowDialPeer");if(o.length===0){this.log("loading multiaddrs for %p",e);try{let d=await this.components.peerStore.get(e);o.push(...d.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:f})=>f.toString()))}catch(d){if(d.name!=="NotFoundError")throw d}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let d=await this.components.peerRouting.findPeer(e,n);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:f})=>f.toString())),o.push(...d.multiaddrs.map(f=>({multiaddr:f,isCertified:!1})))}catch(d){d.name==="NoPeerRoutersError"?this.log("no peer routers configured",e):this.log.error("looking up multiaddrs for %p in the peer routing failed - %e",e,d)}}}let i=(await Promise.all(o.map(async d=>{let f=await Sx(d.multiaddr,{dns:this.components.dns,...n,log:this.log});return f.length===1&&f[0].equals(d.multiaddr)?d:f.map(h=>({multiaddr:h,isCertified:!1}))}))).flat();if(e!=null){let d=`/p2p/${e.toString()}`;i=i.map(f=>f.multiaddr.protos().pop()?.path===!0?f:f.multiaddr.getPeerId()==null?{multiaddr:f.multiaddr.encapsulate(d),isCertified:f.isCertified}:f)}let s=i.filter(d=>{if(this.components.transportManager.dialTransportForMultiaddr(d.multiaddr)==null)return!1;let f=d.multiaddr.getPeerId();return e!=null&&f!=null?e.equals(f):!0}),a=new Map;for(let d of s){let f=d.multiaddr.toString(),h=a.get(f);if(h!=null){h.isCertified=h.isCertified||d.isCertified||!1;continue}a.set(f,d)}let c=[...a.values()];if(c.length===0)throw new Hh("The dial request has no valid addresses");let l=[];for(let d of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(d.multiaddr)||l.push(d);let u=this.addressSorter==null?Ix(l):l.sort(this.addressSorter);if(u.length===0)throw new rl("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:d})=>d.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",u.map(({multiaddr:d})=>d.toString())),u}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=>!or.matches(o.multiaddr))!=null:!0}catch(n){this.log.trace("error calculating if multiaddr(s) were dialable",n)}return!1}};var Dx=Mr(Px(),1);var wR=Object.prototype.toString,bR=r=>wR.call(r)==="[object Error]",xR=new Set(["network error","Failed to fetch","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Load failed","Network request failed","fetch failed","terminated"]);function C4(r){return r&&bR(r)&&r.name==="TypeError"&&typeof r.message=="string"?r.message==="Load failed"?r.stack===void 0:xR.has(r.message):!1}var k4=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}},Rx=(r,e,t)=>{let n=t.retries-(e-1);return r.attemptNumber=e,r.retriesLeft=n,r};async function P4(r,e){return new Promise((t,n)=>{e={...e},e.onFailedAttempt??=()=>{},e.shouldRetry??=()=>!0,e.retries??=10;let o=Dx.default.operation(e),i=()=>{o.stop(),n(e.signal?.reason)};e.signal&&!e.signal.aborted&&e.signal.addEventListener("abort",i,{once:!0});let s=()=>{e.signal?.removeEventListener("abort",i),o.stop()};o.attempt(async a=>{try{let c=await r(a);s(),t(c)}catch(c){try{if(!(c instanceof Error))throw new TypeError(`Non-error was thrown: "${c}". You should only throw errors.`);if(c instanceof k4)throw c.originalError;if(c instanceof TypeError&&!C4(c))throw c;if(Rx(c,a,e),await e.shouldRetry(c)||(o.stop(),n(c)),await e.onFailedAttempt(c),!o.retry(c))throw o.mainError()}catch(l){Rx(l,a,e),s(),n(l)}}})})}var e0=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 gt({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);Nx(t)&&(this.queue.has(e)||this.queue.add(async n=>{await P4(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(io)&&(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=>Nx(t)]});await Promise.all(e.map(async t=>{await this.connectionManager.openConnection(t.id).catch(n=>{this.log.error(n)})}))}).catch(e=>{this.log.error(e)})}stop(){this.started=!1,this.queue.abort()}};function Nx(r){for(let e of r.tags.keys())if(e.startsWith(io))return!0;return!1}var _4=50,R4={maxConnections:Qh,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},t0=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??R4.maxConnections,this.maxConnections<1)throw new P("Connection Manager maxConnections must be greater than 0");this.connections=new ft,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=>nl(n)),this.deny=(t.deny??[]).map(n=>nl(n)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??R4.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new fa({points:t.inboundConnectionThreshold??R4.inboundConnectionThreshold,duration:1}),this.connectionPruner=new Xh({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:t.allow?.map(n=>$(n))}),this.dialQueue=new Jh(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??Yh,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??1e4,resolvers:t.resolvers??{dnsaddr:zi},connections:this.connections}),this.reconnectQueue=new e0({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 mt(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 Ct(this.reconnectQueue,this.dialQueue,this.connectionPruner);let e=[];for(let t of this.connections.values())for(let n of t)e.push((async()=>{try{await n.close()}catch(o){this.log.error(o)}})());this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}getMaxConnections(){return this.maxConnections}onConnect(e){this._onConnect(e).catch(t=>{this.log.error(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("onDisconnect remove all connections for peer %p",n),this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:t.remotePeer}))}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 Br("Not started");this.outboundPendingConnections++;try{t.signal?.throwIfAborted();let{peerId:n}=Gh(e);if(this.peerId.equals(n))throw new ji("Can not dial self");if(n!=null&&t.force!==!0){this.log("dial %p",n);let a=this.getConnections(n).find(c=>c.limits==null);if(a!=null)return this.log("had an existing non-limited connection to %p",n),t.onProgress?.(new W("dial-queue:already-connected")),a}let o=await this.dialQueue.dial(e,{...t,priority:t.priority??_4});if(o.status!=="open")throw new Xi("Remote closed connection during opening");let i=this.connections.get(o.remotePeer);i==null&&(i=[],this.connections.set(o.remotePeer,i));let s=!1;for(let a of i)if(a.id===o.id&&(s=!0),t.force!==!0&&a.id!==o.id&&a.remoteAddr.equals(o.remoteAddr))return o.abort(new ao("Duplicate multiaddr connection")),a;return s||i.push(o),o}finally{this.outboundPendingConnections--}}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await o.close(t)}catch(i){o.abort(i)}}))}async acceptIncomingConnection(e){if(this.deny.some(o=>o.contains(e.remoteAddr.nodeAddress().address)))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>o.contains(e.remoteAddr.nodeAddress().address)))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(e.remoteAddr.isThinWaistAddress()){let o=e.remoteAddr.nodeAddress().address;try{await this.inboundConnectionRateLimiter.consume(o,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o),!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=>$(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var SR=1e4,AR="1.0.0",IR="ping",TR="ipfs",Lx=32,_R=!0,r0=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??TR}/${IR}/${AR}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??SR,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??_R,this.timeout=new un({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[Ae]=["@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=Ni(o);t=Date.now(),await Promise.all([i.write(qt(Lx),{signal:n}),i.read(Lx,{signal:n})]),e.rtt=Date.now()-t,await i.unwrap().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",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 n0=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:O(n,"base36")})})??this.put,this.get=e.metrics?.traceFunction("libp2p.contentRouting.get",this.get.bind(this),{optionsIndex:1,getAttributesFromArgs:([n])=>({key:O(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 ma("No content routers available");let n=this,o=new zt;for await(let i of Ht(...n.routers.map(s=>s.findProviders(e,t))))i!=null&&(i.multiaddrs.length>0&&await this.components.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),!o.has(i.id)&&(o.add(i.id),yield i))}async provide(e,t={}){if(this.routers.length===0)throw new ma("No content routers available");await Promise.all(this.routers.map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){if(this.routers.length===0)throw new ma("No content routers available");await Promise.all(this.routers.map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new Br;await Promise.all(this.routers.map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new Br;return Promise.any(this.routers.map(async n=>n.get(e,t)))}};var o0=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:O(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 tl("No peer routers available");if(e.toString()===this.peerId.toString())throw new Uh("Should not try to find self");let n=this,o=Ht(...this.routers.map(i=>async function*(){try{yield await i.findPeer(e,t)}catch(s){n.log.error(s)}}()));for await(let i of o)if(i!=null)return i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),i;throw new Ce}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new tl("No peer routers available");let n=this,o=rr(1024);for await(let i of ln(async function*(){let s=Ht(...n.routers.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",c);return}return a}}()))i!=null&&(i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),!o.has(i.id.toMultihash().bytes)&&(o.add(i.id.toMultihash().bytes),yield i))}};var i0=class extends pe{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=le([this.shutdownController.signal,e?.signal]);try{for(;;)this.needNext?.resolve(),this.needNext=j(),yield(await lt(this,"walk:peer",t,{errorEvent:"walk:error"})).detail}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=le([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=qt(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 Ge(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",o),this.safeDispatchEvent("walk:error",{detail:o})}this.log("no walkers left, ended walk")}).catch(o=>{this.log.error("random walk errored",o)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var D4=32,N4=64,s0=class{log;topologies;handlers;components;constructor(e){this.log=e.logger.forComponent("libp2p:registrar"),this.topologies=new Map,this.handlers=new Map,this.components=e,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 Fh(`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 Vh(`Handler already registered for protocol ${e}`);let o=sa.bind({ignoreUndefined:!0})({maxInboundStreams:D4,maxOutboundStreams:N4},n);this.handlers.set(e,{handler:t,options:o}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]})}async unhandle(e){(Array.isArray(e)?e:[e]).forEach(n=>{this.handlers.delete(n)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()})}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))}_onDisconnect(e){let t=e.detail;this.components.peerStore.get(t).then(n=>{for(let o of n.protocols){let i=this.topologies.get(o);if(i!=null)for(let s of i.values())s.filter?.has(t)!==!1&&(s.filter?.remove(t),s.onDisconnect?.(t))}}).catch(n=>{n.name!=="NotFoundError"&&this.log.error("could not inform topologies of disconnecting peer %p",t,n)})}_onPeerUpdate(e){let{peer:t,previous:n}=e.detail,o=(n?.protocols??[]).filter(i=>!t.protocols.includes(i));for(let i of o){let s=this.topologies.get(i);if(s!=null)for(let a of s.values())a.filter?.has(t.id)!==!1&&(a.filter?.remove(t.id),a.onDisconnect?.(t.id))}}_onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;for(let i of t){let s=this.topologies.get(i);if(s!=null)for(let a of s.values())n.limits!=null&&a.notifyOnLimitedConnection!==!0||a.filter?.has(o)!==!0&&(a.filter?.add(o),a.onConnect?.(o,n))}}};var a0=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=new Map,this.listeners=Wu({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??Zo.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 Wh(`No transport available for address ${String(e)}`);return t?.onProgress?.(new W("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 Br("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 $h)});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}),u=this.listeners.get(i)??[];u==null&&(u=[],this.listeners.set(i,u)),u.push(l),l.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:l})}),l.addEventListener("close",()=>{let d=u.findIndex(f=>f===l);u.splice(d,1),this.components.events.safeDispatchEvent("transport:close",{detail:l})}),tm.matches(c)?t.ipv4.attempts++:rm.matches(c)&&t.ipv6.attempts++,n.push(l.listen(c).then(()=>{t.errors.delete(c.toString()),tm.matches(c)&&t.ipv4.success++,rm.matches(c)&&t.ipv6.success++},d=>{throw this.log.error("transport %s could not listen on address %a - %e",i,c,d),t.errors.set(c.toString(),d),d}))}}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===Zo.NO_FATAL){this.log("failed to listen on any address but fault tolerance allows this");return}throw new Kh(`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:
58
+ ${[...t.errors.entries()].map(([i,s])=>`
59
+ ${i}: ${`${s.stack??s}`.split(`
60
+ `).join(`
61
+ `)}
62
+ `).join("")}`)}}ipv6Unsupported(e){if(e.ipv4.attempts===0||e.ipv6.attempts===0)return!1;let t=e.ipv4.attempts===e.ipv4.success,n=e.ipv6.success===0;return t&&n}async remove(e){let t=this.listeners.get(e)??[];this.log.trace("removing transport %s",e);let n=[];for(this.log.trace("closing listeners for %s",e);t.length>0;){let o=t.pop();o!=null&&n.push(o.close())}await Promise.all(n),this.transports.delete(e),this.listeners.delete(e)}async removeAll(){let e=[];for(let t of this.transports.keys())e.push(this.remove(t));await Promise.all(e)}};var It="/multistream/1.0.0";var CR=L(`
63
+ `);async function Yi(r,e,t){await r.write(e,t)}async function Ox(r,e,t){await r.writeV(e,t)}async function kR(r,e){let t=await r.read(e);if(t.byteLength===0||t.get(t.byteLength-1)!==CR[0])throw e.log.error("Invalid mss message - missing newline",t),new fe("Missing newline");return t.sublist(0,-1)}async function Yo(r,e){let t=await kR(r,e);return O(t.subarray())}async function ol(r,e,t){if(e=Array.isArray(e)?[...e]:[e],e.length===1&&t.negotiateFully===!1)return PR(r,e[0],t);let n=In(r,{...t,maxDataLength:1024}),o=e.shift();if(o==null)throw new Error("At least one protocol must be specified");t.log.trace('select: write ["%s", "%s"]',It,o);let i=L(`${It}
64
+ `),s=L(`${o}
65
+ `);await Ox(n,[i,s],t),t.log.trace("select: reading multistream-select header");let a=await Yo(n,t);if(t.log.trace('select: read "%s"',a),a===It&&(t.log.trace("select: reading protocol response"),a=await Yo(n,t),t.log.trace('select: read "%s"',a)),a===o)return{stream:n.unwrap(),protocol:o};for(let c of e){t.log.trace('select: write "%s"',c),await Yi(n,L(`${c}
66
+ `),t),t.log.trace("select: reading protocol response");let l=await Yo(n,t);if(t.log.trace('select: read "%s" for "%s"',l,c),l===c)return{stream:n.unwrap(),protocol:c}}throw new Rn("protocol selection failed")}function PR(r,e,t){let n=r.sink.bind(r),o=r.source,i=!1,s=!1,a=j(),c=!1,l=!1,u=j(),d=!1,f=!1,h=j(),p=In({sink:n,source:o},{...t,maxDataLength:1024});r.sink=async x=>{let{sink:w}=p.unwrap();await w(async function*(){let I=!1;for await(let M of x){if(l&&await u.promise,c)yield M;else{l=!0,t.log.trace('optimistic: write ["%s", "%s", data(%d)] in sink',It,e,M.byteLength);let D=`${e}
67
+ `;yield new ae(Uint8Array.from([19]),L(`${It}
68
+ `),$e(D.length),L(D),M).subarray(),t.log.trace('optimistic: wrote ["%s", "%s", data(%d)] in sink',It,e,M.byteLength),c=!0,l=!1,u.resolve(),g().catch(R=>{t.log.error("could not finish optimistic protocol negotiation of %s",e,R)})}I=!0}I||await g()}())};async function g(){if(s){t.log.trace("optimistic: already negotiating %s stream",e),await a.promise;return}s=!0;try{c||(t.log.trace("optimistic: doing send protocol for %s stream",e),await m()),d||(t.log.trace("optimistic: doing read protocol for %s stream",e),await y())}finally{s=!1,i=!0,a.resolve()}}async function m(){if(l){await u.promise;return}l=!0;try{t.log.trace('optimistic: write ["%s", "%s", data] in source',It,e),await p.writeV([L(`${It}
69
+ `),L(`${e}
70
+ `)]),t.log.trace('optimistic: wrote ["%s", "%s", data] in source',It,e)}finally{c=!0,l=!1,u.resolve()}}async function y(){if(f){await h.promise;return}f=!0;try{t.log.trace("optimistic: reading multistream select header");let x=await Yo(p,t);if(t.log.trace('optimistic: read multistream select header "%s"',x),x===It&&(x=await Yo(p,t)),t.log.trace('optimistic: read protocol "%s", expecting "%s"',x,e),x!==e)throw new Rn("protocol selection failed")}finally{d=!0,f=!1,h.resolve()}}if(r.source=async function*(){await g(),t.log.trace('optimistic: reading data from "%s" stream',e),yield*p.unwrap().source}(),r.closeRead!=null){let x=r.closeRead.bind(r);r.closeRead=async w=>{i||await g().catch(I=>{t.log.error("could not negotiate protocol before close read",I)}),await x(w)}}if(r.closeWrite!=null){let x=r.closeWrite.bind(r);r.closeWrite=async w=>{i||await g().catch(I=>{t.log.error("could not negotiate protocol before close write",I)}),await x(w)}}if(r.close!=null){let x=r.close.bind(r);r.close=async w=>{let I=[];l&&I.push(u.promise),f&&I.push(h.promise),I.length>0?await Ge(Promise.all(I),w?.signal):(i=!0,s=!1,a.resolve()),await x(w)}}return{stream:r,protocol:e}}async function il(r,e,t){e=Array.isArray(e)?e:[e],t.log.trace("handle: available protocols %s",e);let n=In(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){t.log.trace("handle: reading incoming string");let o=await Yo(n,t);if(t.log.trace('handle: read "%s"',o),o===It){t.log.trace('handle: respond with "%s" for "%s"',It,o),await Yi(n,L(`${It}
71
+ `),t),t.log.trace('handle: responded with "%s" for "%s"',It,o);continue}if(e.includes(o))return t.log.trace('handle: respond with "%s" for "%s"',o,o),await Yi(n,L(`${o}
72
+ `),t),t.log.trace('handle: responded with "%s" for "%s"',o,o),{stream:n.unwrap(),protocol:o};if(o==="ls"){let i=new ae(...e.map(s=>Fr.single(L(`${s}
73
+ `))),L(`
74
+ `));t.log.trace('handle: respond with "%s" for %s',e,o),await Yi(n,i,t),t.log.trace('handle: responded with "%s" for %s',e,o);continue}t.log.trace('handle: respond with "na" for "%s"',o),await Yi(n,L(`na
75
+ `),t),t.log('handle: responded with "na" for "%s"',o)}}var DR=500,O4=class{id;remoteAddr;remotePeer;direction;timeline;multiplexer;encryption;status;limits;log;tags;_newStream;_close;_abort;_getStreams;constructor(e){let{remoteAddr:t,remotePeer:n,newStream:o,close:i,abort:s,getStreams:a}=e;this.id=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`,this.remoteAddr=t,this.remotePeer=n,this.direction=e.direction,this.status="open",this.timeline=e.timeline,this.multiplexer=e.multiplexer,this.encryption=e.encryption,this.limits=e.limits,this.log=e.logger.forComponent(`libp2p:connection:${this.direction}:${this.id}`),this.remoteAddr.getPeerId()==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),this._newStream=o,this._close=i,this._abort=s,this._getStreams=a,this.tags=[]}[Symbol.toStringTag]="Connection";[q4]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new dl("the connection is being closed");if(this.status==="closed")throw new Xi("the connection is closed");if(Array.isArray(e)||(e=[e]),this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new Ji("Cannot open protocol stream on limited connection");let n=await this._newStream(e,t);return n.direction="outbound",n}async close(e={}){if(!(this.status==="closed"||this.status==="closing")){if(this.log("closing connection to %a",this.remoteAddr),this.status="closing",e.signal==null){let t=AbortSignal.timeout(DR);e={...e,signal:t}}try{this.log.trace("closing underlying transport"),await this._close(e),this.log.trace("updating timeline with close time"),this.status="closed",this.timeline.close=Date.now()}catch(t){this.log.error("error encountered during graceful close of connection to %a",this.remoteAddr,t),this.abort(t)}}}abort(e){this.status!=="closed"&&(this.log.error("aborting connection to %a due to error",this.remoteAddr,e),this.status="closing",this._abort(e),this.status="closed",this.timeline.close=Date.now())}};function Bx(r){return new O4(r)}function LR(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return D4}function OR(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??N4}function Ux(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var c0=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;inboundStreamProtocolNegotiationTimeout;outboundStreamProtocolNegotiationTimeout;events;metrics;constructor(e,t){this.components=e,this.connectionEncrypters=new Map,t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=new Map,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.events=e.events,this.metrics={dials:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_total"),errors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dial_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 qh(`The multiaddr connection is blocked by gater.${e}`)}createInboundAbortSignal(e){let t=le([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=await this.components.connectionManager.acceptIncomingConnection(e),!n)throw new zh("Connection denied");await this.shouldBlockConnection("denyInboundConnection",e),await this._performUpgrade(e,"inbound",{...t,signal:o})}catch(i){throw this.metrics.errors?.increment({inbound:!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.getPeerId(),o;n!=null&&(o=Ue(n),await this.shouldBlockConnection("denyOutboundConnection",o,e));let i="outbound";return t.initiator===!1&&(i="inbound"),await this._performUpgrade(e,i,t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),n}}async _performUpgrade(e,t,n){let o,i,s,a,c;this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t);let l=e;if(n?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(e.log("protecting the %s connection",t),l=await u.protect(e,n))}try{if(o=l,n?.skipEncryption!==!0){n?.onProgress?.(new W(`upgrader:encrypt-${t}-connection`)),{conn:o,remotePeer:i,protocol:c,streamMuxer:a}=await(t==="inbound"?this._encryptInbound(l,n):this._encryptOutbound(l,n));let u={...l,...o};await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",i,u)}else{let u=e.remoteAddr.getPeerId();if(u==null)throw new ao(`${t} connection that skipped encryption must have a peer id`);let d=Ue(u);c="native",i=d}if(i.equals(this.components.peerId)){let u=new ji("Can not dial self");throw e.abort(u),u}if(s=o,n?.muxerFactory!=null)a=n.muxerFactory;else if(a==null&&this.streamMuxers.size>0){n?.onProgress?.(new W(`upgrader:multiplex-${t}-connection`));let u=await(t==="inbound"?this._multiplexInbound({...l,...o},this.streamMuxers,n):this._multiplexOutbound({...l,...o},this.streamMuxers,n));a=u.muxerFactory,s=u.stream}}catch(u){throw e.log.error("failed to upgrade inbound connection %s %a - %e",t==="inbound"?"from":"to",e.remoteAddr,u),u}return await this.shouldBlockConnection(t==="inbound"?"denyInboundUpgradedConnection":"denyOutboundUpgradedConnection",i,e),e.log("successfully upgraded %s connection",t),this._createConnection({cryptoProtocol:c,direction:t,maConn:e,upgradedConn:s,muxerFactory:a,remotePeer:i,limits:n?.limits})}_createConnection(e){let{cryptoProtocol:t,direction:n,maConn:o,upgradedConn:i,remotePeer:s,muxerFactory:a,limits:c}=e,l,u,d;a!=null&&(l=a.createStreamMuxer({direction:n,onIncomingStream:p=>{d!=null&&Promise.resolve().then(async()=>{let g=this.components.registrar.getProtocols(),m=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);let{stream:y,protocol:x}=await il(p,g,{signal:m,log:p.log,yieldBytes:!1});if(d==null)return;d.log("incoming stream opened on %s",x);let w=LR(x,this.components.registrar);if(Ux(x,"inbound",d)===w){let M=new ml(`Too many inbound protocol streams for protocol "${x}" - limit ${w}`);throw p.abort(M),M}p.source=y.source,p.sink=y.sink,p.protocol=x,y.closeWrite!=null&&(p.closeWrite=y.closeWrite),y.closeRead!=null&&(p.closeRead=y.closeRead),y.close!=null&&(p.close=y.close),await this.components.peerStore.merge(s,{protocols:[x]}),this.components.metrics?.trackProtocolStream(p,d),this._onStream({connection:d,stream:p,protocol:x})}).catch(async g=>{d.log.error("error handling incoming stream id %s - %e",p.id,g),p.timeline.close==null&&await p.close()})}}),u=async(p,g={})=>{if(l==null)throw new Wi("Connection is not multiplexed");d.log.trace("starting new stream for protocols %s",p);let m=await l.newStream();d.log.trace("started new stream %s for protocols %s",m.id,p);try{if(g.signal==null){m.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",p);let M=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);g={...g,signal:M}}m.log.trace("selecting protocol from protocols %s",p);let{stream:y,protocol:x}=await ol(m,p,{...g,log:m.log,yieldBytes:!0});m.log.trace("selected protocol %s",x);let w=OR(x,this.components.registrar,g),I=Ux(x,"outbound",d);if(I>=w){let M=new lo(`Too many outbound protocol streams for protocol "${x}" - ${I}/${w}`);throw m.abort(M),M}return await this.components.peerStore.merge(s,{protocols:[x]}),m.source=y.source,m.sink=y.sink,m.protocol=x,y.closeWrite!=null&&(m.closeWrite=y.closeWrite),y.closeRead!=null&&(m.closeRead=y.closeRead),y.close!=null&&(m.close=y.close),this.components.metrics?.trackProtocolStream(m,d),m}catch(y){throw d.log.error("could not create new outbound stream on connection %s %a for protocols %s - %e",n==="inbound"?"from":"to",e.maConn.remoteAddr,p,y),m.timeline.close==null&&m.abort(y),y}},Promise.all([l.sink(i.source),i.sink(l.source)]).catch(p=>{d.log.error("error piping data through muxer - %e",p)}));let f=o.timeline;o.timeline=new Proxy(f,{set:(...p)=>(p[1]==="close"&&p[2]!=null&&f.close==null&&(async()=>{try{d.status==="open"&&await d.close()}catch(g){d.log.error("error closing connection after timeline close %e",g)}finally{this.events.safeDispatchEvent("connection:close",{detail:d})}})().catch(g=>{d.log.error("error thrown while dispatching connection:close event %e",g)}),Reflect.set(...p))}),o.timeline.upgraded=Date.now();let h=()=>{throw new Wi("Connection is not multiplexed")};return d=Bx({remoteAddr:o.remoteAddr,remotePeer:s,status:"open",direction:n,timeline:o.timeline,multiplexer:l?.protocol,encryption:t,limits:c,logger:this.components.logger,newStream:u??h,getStreams:()=>l?.streams??[],close:async p=>{await l?.close(p),await o.close(p)},abort:p=>{o.abort(p),l?.abort(p)}}),this.events.safeDispatchEvent("connection:open",{detail:d}),d.__maConnTimeline=f,d}_onStream(e){let{connection:t,stream:n,protocol:o}=e,{handler:i,options:s}=this.components.registrar.getHandler(o);if(t.limits!=null&&s.runOnLimitedConnection!==!0)throw new Ji("Cannot open protocol stream on limited connection");i({connection:t,stream:n})}async _encryptInbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{let{stream:o,protocol:i}=await il(e,n,{...t,log:e.log}),s=this.connectionEncrypters.get(i);if(s==null)throw new Gi(`no crypto module found for ${i}`);return e.log("encrypting inbound connection to %a using %s",e.remoteAddr,i),{...await s.secureInbound(o,t),protocol:i}}catch(o){throw e.log.error("encrypting inbound connection from %a failed",e.remoteAddr,o),new Gi(o.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{e.log.trace("selecting encrypter from %s",n);let{stream:o,protocol:i}=await ol(e,n,{...t,log:e.log,yieldBytes:!0}),s=this.connectionEncrypters.get(i);if(s==null)throw new Gi(`no crypto module found for ${i}`);return e.log("encrypting outbound connection to %a using %s",e.remoteAddr,i),{...await s.secureOutbound(o,t),protocol:i}}catch(o){throw e.log.error("encrypting outbound connection to %a failed",e.remoteAddr,o),new Gi(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{stream:i,protocol:s}=await ol(e,o,{...n,log:e.log,yieldBytes:!0});e.log("selected %s as muxer protocol",s);let a=t.get(s);return{stream:i,muxerFactory:a}}catch(i){throw e.log.error("error multiplexing outbound connection",i),new Wi(String(i))}}async _multiplexInbound(e,t,n){let o=Array.from(t.keys());e.log("inbound handling muxers %s",o);try{let{stream:i,protocol:s}=await il(e,o,{...n,log:e.log}),a=t.get(s);return{stream:i,muxerFactory:a}}catch(i){throw e.log.error("error multiplexing inbound connection",i),new Wi(String(i))}}getConnectionEncrypters(){return this.connectionEncrypters}getStreamMuxers(){return this.streamMuxers}};var l0=class extends pe{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new pe,n=t.dispatchEvent.bind(t);t.dispatchEvent=l=>{let u=n(l),d=this.dispatchEvent(new CustomEvent(l.type,{detail:l.detail}));return u||d},this.peerId=e.peerId,this.logger=e.logger??To(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=e.nodeInfo?.name??vh,i=e.nodeInfo?.version??xh,s=this.components=yx({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:{name:o,version:i,userAgent:e.nodeInfo?.userAgent??Eh(o,i)},logger:this.logger,events:t,datastore:e.datastore??new Di,connectionGater:bx(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",ux(s,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),s.events.addEventListener("peer:update",l=>{if(l.detail.previous==null){let u={id:l.detail.peer.id,multiaddrs:l.detail.peer.addresses.map(d=>d.multiaddr)};s.events.safeDispatchEvent("peer:discovery",{detail:u})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(s)),this.components.upgrader=new c0(this.components,{connectionEncrypters:(e.connectionEncrypters??[]).map((l,u)=>this.configureComponent(`connection-encryption-${u}`,l(this.components))),streamMuxers:(e.streamMuxers??[]).map((l,u)=>this.configureComponent(`stream-muxers-${u}`,l(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout,inboundStreamProtocolNegotiationTimeout:e.connectionManager?.inboundStreamProtocolNegotiationTimeout??e.connectionManager?.protocolNegotiationTimeout,outboundStreamProtocolNegotiationTimeout:e.connectionManager?.outboundStreamProtocolNegotiationTimeout??e.connectionManager?.protocolNegotiationTimeout}),this.configureComponent("transportManager",new a0(this.components,e.transportManager)),this.configureComponent("connectionManager",new t0(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new r0(this.components,e.connectionMonitor)),this.configureComponent("registrar",new s0(this.components)),this.configureComponent("addressManager",new Oh(this.components,e.addresses));let a=(e.peerRouters??[]).map((l,u)=>this.configureComponent(`peer-router-${u}`,l(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new o0(this.components,{routers:a}));let c=(e.contentRouters??[]).map((l,u)=>this.configureComponent(`content-router-${u}`,l(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new n0(this.components,{routers:c})),this.configureComponent("randomWalk",new i0(this.components)),(e.peerDiscovery??[]).forEach((l,u)=>{this.configureComponent(`peer-discovery-${u}`,l(this.components)).addEventListener("peer",f=>{this.#e(f)})}),e.transports?.forEach((l,u)=>{this.components.transportManager.add(this.configureComponent(`transport-${u}`,l(this.components)))}),e.services!=null)for(let l of Object.keys(e.services)){let u=e.services[l],d=u(this.components);if(d==null){this.log.error("service factory %s returned null or undefined instance",l);continue}this.services[l]=d,this.configureComponent(l,d),d[hn]!=null&&(this.log("registering service %s for content routing",l),c.push(d[hn])),d[pn]!=null&&(this.log("registering service %s for peer routing",l),a.push(d[pn])),d[Xo]!=null&&(this.log("registering service %s for peer discovery",l),d[Xo].addEventListener?.("peer",f=>{this.#e(f)}))}wx(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")}catch(e){throw this.log.error("An error occurred starting libp2p",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 zt;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(await this.dial(e,n)).newStream(t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){No(e)&&(e=Ue(e.getPeerId()??"")),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);if(s.id.publicKey!=null)return s.id.publicKey}catch(s){if(s.name!=="NotFoundError")throw s}let n=ke([L("/pk/"),e.toMultihash().bytes]),o=await this.contentRouting.get(n,t),i=rt(o);return await this.peerStore.patch(e,{publicKey:i}),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){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async t=>{await this.components.registrar.unhandle(t)}))}async register(e,t){return this.components.registrar.register(e,t)}unregister(e){this.components.registrar.unregister(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(n)})}};async function Fx(r={}){r.privateKey??=await ru("Ed25519");let e=new l0({...await ex(r),peerId:_6(r.privateKey)});return r.start!==!1&&await e.start(),e}async function Vx(r){let e=r.libp2p??{};e.privateKey==null&&r.datastore!=null&&(e.privateKey=await d4(r.datastore,r.keychain));let t=Sh(e);return t.datastore=t.datastore??r.datastore,await Fx({...t,...e,start:!1})}async function MR(r={}){let e=r.datastore??new Di,t=r.blockstore??new Sc,n;BR(r.libp2p)?n=r.libp2p:n=await Vx({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let o=new Pd({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[Sm(),Xp()],routers:r.routers??[Mm(n),Lm()],metrics:n.metrics});return r.start!==!1&&await o.start(),o}function BR(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}return ev(UR);})();
71
76
  /*! Bundled license information:
72
77
 
73
78
  pvtsutils/build/index.js:
@@ -117,6 +122,18 @@ pvtsutils/build/index.js:
117
122
  @noble/curves/esm/ed25519.js:
118
123
  (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
119
124
 
125
+ @noble/curves/esm/abstract/weierstrass.js:
126
+ (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
127
+
128
+ @noble/curves/esm/_shortw_utils.js:
129
+ (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
130
+
131
+ @noble/curves/esm/secp256k1.js:
132
+ (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
133
+
134
+ @noble/ciphers/esm/utils.js:
135
+ (*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) *)
136
+
120
137
  pvutils/build/utils.es.js:
121
138
  (*!
122
139
  Copyright (c) Peculiar Ventures, LLC
@@ -156,17 +173,5 @@ asn1js/build/index.es.js:
156
173
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
157
174
  *
158
175
  *)
159
-
160
- @noble/curves/esm/abstract/weierstrass.js:
161
- (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
162
-
163
- @noble/curves/esm/_shortw_utils.js:
164
- (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
165
-
166
- @noble/curves/esm/secp256k1.js:
167
- (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
168
-
169
- @noble/ciphers/esm/utils.js:
170
- (*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) *)
171
176
  */
172
177
  return Helia}));