helia 6.0.20 → 6.0.21

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,16 +1,16 @@
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 iS=Object.create;var xu=Object.defineProperty;var aS=Object.getOwnPropertyDescriptor;var cS=Object.getOwnPropertyNames;var lS=Object.getPrototypeOf,uS=Object.prototype.hasOwnProperty;var an=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Je=(r,e)=>{for(var t in e)xu(r,t,{get:e[t],enumerable:!0})},A6=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of cS(e))!uS.call(r,o)&&o!==t&&xu(r,o,{get:()=>e[o],enumerable:!(n=aS(e,o))||n.enumerable});return r};var Ln=(r,e,t)=>(t=r!=null?iS(lS(r)):{},A6(e||!r||!r.__esModule?xu(t,"default",{value:r,enumerable:!0}):t,r)),dS=r=>A6(xu({},"__esModule",{value:!0}),r);var C6=an((ZN,q0)=>{"use strict";var fS=Object.prototype.hasOwnProperty,Ht="~";function Xa(){}Object.create&&(Xa.prototype=Object.create(null),new Xa().__proto__||(Ht=!1));function hS(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function T6(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var s=new hS(t,n||r,o),i=Ht?Ht+e:e;return r._events[i]?r._events[i].fn?r._events[i]=[r._events[i],s]:r._events[i].push(s):(r._events[i]=s,r._eventsCount++),r}function Lu(r,e){--r._eventsCount===0?r._events=new Xa:delete r._events[e]}function Lt(){this._events=new Xa,this._eventsCount=0}Lt.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)fS.call(t,n)&&e.push(Ht?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Lt.prototype.listeners=function(e){var t=Ht?Ht+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,s=n.length,i=new Array(s);o<s;o++)i[o]=n[o].fn;return i};Lt.prototype.listenerCount=function(e){var t=Ht?Ht+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Lt.prototype.emit=function(e,t,n,o,s,i){var a=Ht?Ht+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,d,u;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,o),!0;case 5:return c.fn.call(c.context,t,n,o,s),!0;case 6:return c.fn.call(c.context,t,n,o,s,i),!0}for(u=1,d=new Array(l-1);u<l;u++)d[u-1]=arguments[u];c.fn.apply(c.context,d)}else{var f=c.length,h;for(u=0;u<f;u++)switch(c[u].once&&this.removeListener(e,c[u].fn,void 0,!0),l){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,t);break;case 3:c[u].fn.call(c[u].context,t,n);break;case 4:c[u].fn.call(c[u].context,t,n,o);break;default:if(!d)for(h=1,d=new Array(l-1);h<l;h++)d[h-1]=arguments[h];c[u].fn.apply(c[u].context,d)}}return!0};Lt.prototype.on=function(e,t,n){return T6(this,e,t,n,!1)};Lt.prototype.once=function(e,t,n){return T6(this,e,t,n,!0)};Lt.prototype.removeListener=function(e,t,n,o){var s=Ht?Ht+e:e;if(!this._events[s])return this;if(!t)return Lu(this,s),this;var i=this._events[s];if(i.fn)i.fn===t&&(!o||i.once)&&(!n||i.context===n)&&Lu(this,s);else{for(var a=0,c=[],l=i.length;a<l;a++)(i[a].fn!==t||o&&!i[a].once||n&&i[a].context!==n)&&c.push(i[a]);c.length?this._events[s]=c.length===1?c[0]:c:Lu(this,s)}return this};Lt.prototype.removeAllListeners=function(e){var t;return e?(t=Ht?Ht+e:e,this._events[t]&&Lu(this,t)):(this._events=new Xa,this._eventsCount=0),this};Lt.prototype.off=Lt.prototype.removeListener;Lt.prototype.addListener=Lt.prototype.on;Lt.prefixed=Ht;Lt.EventEmitter=Lt;typeof q0<"u"&&(q0.exports=Lt)});var Q6=an((fM,j6)=>{j6.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(s,i){t[s]=i,e++,e>=r&&(e=0,n=t,t=Object.create(null))}return{has:function(s){return t[s]!==void 0||n[s]!==void 0},remove:function(s){t[s]!==void 0&&(t[s]=void 0),n[s]!==void 0&&(n[s]=void 0)},get:function(s){var i=t[s];if(i!==void 0)return i;if((i=n[s])!==void 0)return o(s,i),i},set:function(s,i){t[s]!==void 0?t[s]=i:o(s,i)},clear:function(){t=Object.create(null),n=Object.create(null)}}}});var i7=an(Mc=>{(function(){var r,e,t,n,o,s,i,a;a=function(c){var l,d,u,f;return l=(c&255<<24)>>>24,d=(c&255<<16)>>>16,u=(c&65280)>>>8,f=c&255,[l,d,u,f].join(".")},i=function(c){var l,d,u,f,h,p;for(l=[],u=f=0;f<=3&&c.length!==0;u=++f){if(u>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}p=e(c),h=p[0],d=p[1],c=c.substring(d),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"),s=t("a"),o=t("A"),e=function(c){var l,d,u,f,h;for(f=0,l=10,d="9",u=0,c.length>1&&c[u]==="0"&&(c[u+1]==="x"||c[u+1]==="X"?(u+=2,l=16):"0"<=c[u+1]&&c[u+1]<="9"&&(u++,l=8,d="7")),h=u;u<c.length;){if("0"<=c[u]&&c[u]<=d)f=f*l+(t(c[u])-n)>>>0;else if(l===16)if("a"<=c[u]&&c[u]<="f")f=f*l+(10+t(c[u])-s)>>>0;else if("A"<=c[u]&&c[u]<="F")f=f*l+(10+t(c[u])-o)>>>0;else break;else break;if(f>4294967295)throw new Error("too large");u++}if(u===h)throw new Error("empty octet");return[f,u]},r=(function(){function c(l,d){var u,f,h,p;if(typeof l!="string")throw new Error("Missing `net' parameter");if(d||(p=l.split("/",2),l=p[0],d=p[1]),d||(d=32),typeof d=="string"&&d.indexOf(".")>-1){try{this.maskLong=i(d)}catch(g){throw u=g,new Error("Invalid mask: "+d)}for(f=h=32;h>=0;f=--h)if(this.maskLong===4294967295<<32-f>>>0){this.bitmask=f;break}}else if(d||d===0)this.bitmask=parseInt(d,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(i(l)&this.maskLong)>>>0}catch(g){throw u=g,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+d);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):(i(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 d,u,f;for(f=i(this.first),u=i(this.last),d=0;f<=u;)l(a(f),f,d),d++,f++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c})(),Mc.ip2long=i,Mc.long2ip=a,Mc.Netmask=r}).call(Mc)});var th=an((YQ,m3)=>{var GQ=(function(){typeof m3<"u"&&(m3.exports=g);var r=86400,e=3200,t=146097*e/400,n=r*t,o=1e3*n,s=864e13,i=4294967296,a=1e6,c="000000000",l=Math.trunc||function(S){var x=S-S%1;return x==0&&(S<0||S===0&&1/S!=1/0)?-0:x},d=g.prototype,u=(g.fromDate=function(S){return new g(+S)},g.fromInt64BE=D(0,1,2,3,0,4),g.fromInt64LE=D(3,2,1,0,4,0),g.fromString=function(B){var x,L=new g,B=(B+="").replace(/^\s*[+\-]?\d+/,function(v){var v=+v,E=1970+(v-1970)%400;return L.year=v-E,E}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(P,v,E){return v<0&&(E*=-1),x=6e4*(60*+v+ +E),""}).replace(/\.\d+$/,function(P){return L.nano=+(P+c).substr(1,9),""}).split(/\D+/);if(1<B.length?B[1]--:B[1]=0,L.time=x=Date.UTC.apply(Date,B)-(x||0),isNaN(x))throw new TypeError("Invalid Date");return m(L)},g.fromTimeT=function(S){return T(S,0)},d.year=0,d.time=0,d.nano=0,d.addNano=function(S){return this.nano+=+S||0,this},d.getNano=function(){var S=m(this);return(S.time%1e3*a+ +S.nano+1e9)%1e9},d.getTimeT=function(){var x=m(this),S=Math.floor(x.time/1e3),x=x.year;return x&&(S+=x*t*r/e),S},d.getYear=function(){return this.toDate().getUTCFullYear()+this.year},d.toDate=function(){return w(m(this).time)},d.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},d.toString=function(S){var x=this,L=x.toDate(),B={H:function(){return $(L.getUTCHours())},L:function(){return W(L.getUTCMilliseconds(),3)},M:function(){return $(L.getUTCMinutes())},N:function(){return W(x.getNano(),9)},S:function(){return $(L.getUTCSeconds())},Y:function(){var P=x.getYear();return 999999<P?"+"+P:9999<P?"+"+W(P,6):0<=P?W(P,4):-999999<=P?"-"+W(-P,6):P},a:function(){return h[L.getUTCDay()]},b:function(){return f[L.getUTCMonth()]},d:function(){return $(L.getUTCDate())},e:function(){return(function(P){return(9<P?"":" ")+(0|P)})(L.getUTCDate())},m:function(){return $(L.getUTCMonth()+1)}};return(function P(v){return v.replace(/%./g,function(E){var C=E[1],b=p[C],C=B[C];return b?P(b):C?C():E})})(S||u)},d.writeInt64BE=I(0,1,2,3,0,4),d.writeInt64LE=I(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,x,L){var B=this;if(!(B instanceof g))return new g(S,x,L);B.time=+S||0,B.nano=+x||0,B.year=+L||0,m(B)}function m(S){var x,L,B,P=S.year,v=S.time,E=S.nano,b=((E<0||a<=E)&&(E-=(L=Math.floor(E/a))*a,v+=L,L=1),P%e);return(v<-s||s<v||b)&&((x=l(v/o))&&(P+=x*e,v-=x*o),(B=w(v)).setUTCFullYear(b+B.getUTCFullYear()),B=(v=+B)+(x=l((P-=b)/e))*o,x&&-s<=B&&B<=s&&(P-=x*e,v=B),L=1),L&&(S.year=P,S.time=v,S.nano=E),S}function w(S){var x=new Date(0);return x.setTime(S),x}function T(P,B){P=+P||0;var L=l((B=(B|0)*i)/n)+l(P/n),B=B%n+P%n,P=l(B/n);return P&&(L+=P,B-=P*n),new g(1e3*B,0,L*e)}function I(S,x,L,B,P,v){return function(b,C){var O=m(this);b=b||new Array(8),F(b,C|=0);var k=Math.floor(O.time/1e3),O=O.year*(t*r/e),M=l(O/i)+l(k/i),O=O%i+k%i,k=Math.floor(O/i);return k&&(M+=k,O-=k*i),E(b,C+P,M),E(b,C+v,O),b};function E(b,C,M){b[C+S]=M>>24&255,b[C+x]=M>>16&255,b[C+L]=M>>8&255,b[C+B]=255&M}}function D(S,x,L,B,P,v){return function(b,C){F(b,C|=0);var M=E(b,C+P);return T(E(b,C+v),M)};function E(b,C){return 16777216*b[C+S]+(b[C+x]<<16|b[C+L]<<8|b[C+B])}}function F(S,x){if(S=S&&S.length,S==null)throw new TypeError("Invalid Buffer");if(S<x+8)throw new RangeError("Out of range")}function $(S){return(9<S?"":"0")+(0|S)}function W(S,x){return(c+(0|S)).substr(-x)}})()});var Yw=an((hse,Gw)=>{"use strict";function lR(r){return r>=55296&&r<=56319}function uR(r){return r>=56320&&r<=57343}Gw.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var o=t.length,s=0,i,a,c=0;c<o;c+=1){if(i=t.charCodeAt(c),a=t[c],lR(i)&&uR(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),s+=e(a),s===n)return t.slice(0,c+1);if(s>n)return t.slice(0,c-a.length+1)}return t}});var Qw=an((pse,jw)=>{"use strict";function dR(r){return r>=55296&&r<=56319}function fR(r){return r>=56320&&r<=57343}jw.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,o=null,s=null,i=0;i<t;i++)o=e.charCodeAt(i),fR(o)?s!=null&&dR(s)?n+=1:n+=3:o<=127?n+=1:o>=128&&o<=2047?n+=2:o>=2048&&o<=65535&&(n+=3),s=o;return n}});var Zw=an((mse,Xw)=>{"use strict";var hR=Yw(),pR=Qw();Xw.exports=hR.bind(null,pR)});var tb=an((gse,eb)=>{"use strict";var mR=Zw(),gR=/[\/\?<>\\:\*\|"]/g,yR=/[\x00-\x1f\x80-\x9f]/g,wR=/^\.+$/,bR=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,ER=/[\. ]+$/;function Jw(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(gR,e).replace(yR,e).replace(wR,e).replace(bR,e).replace(ER,e);return mR(t,255)}eb.exports=function(r,e){var t=e&&e.replacement||"",n=Jw(r,t);return t===""?n:Jw(n,"")}});var rb=an(Aa=>{"use strict";var vR="[object ArrayBuffer]",ao=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===vR}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 s=0;s<n.length;s++)if(n[s]!==o[s])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 i of t)n+=i.byteLength;let o=new Uint8Array(n),s=0;for(let i of t){let a=this.toUint8Array(i);o.set(a,s),s+=a.length}return e[e.length-1]instanceof Function?this.toView(o,e[e.length-1]):o.buffer}},j3="string",SR=/^[0-9a-f\s]+$/i,AR=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,IR=/^[a-zA-Z0-9-_]+$/,i1=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=ao.toUint8Array(e),n="";for(let s=0;s<t.length;s++)n+=String.fromCharCode(t[s]);return decodeURIComponent(escape(n))}},Or=class{static toString(e,t=!1){let n=ao.toArrayBuffer(e),o=new DataView(n),s="";for(let i=0;i<n.byteLength;i+=2){let a=o.getUint16(i,t);s+=String.fromCharCode(a)}return s}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),o=new DataView(n);for(let s=0;s<e.length;s++)o.setUint16(s*2,e.charCodeAt(s),t);return n}},a1=class r{static isHex(e){return typeof e===j3&&SR.test(e)}static isBase64(e){return typeof e===j3&&AR.test(e)}static isBase64Url(e){return typeof e===j3&&IR.test(e)}static ToString(e,t="utf8"){let n=ao.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 Or.toString(n,!0);case"utf16":case"utf16be":return Or.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 Or.fromString(e,!0);case"utf16":case"utf16be":return Or.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=ao.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 i1.fromString(e);case"utf16":case"utf16be":return Or.fromString(e);case"utf16le":case"usc2":return Or.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 i1.toString(e);case"utf16":case"utf16be":return Or.toString(e);case"utf16le":case"usc2":return Or.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=ao.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=ao.toUint8Array(e),n="",o=t.length;for(let s=0;s<o;s++){let i=t[s];i<16&&(n+="0"),n+=i.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 s=t.slice(o,o+2);n[o/2]=parseInt(s,16)}return n.buffer}static ToUtf16String(e,t=!1){return Or.toString(e,t)}static FromUtf16String(e,t=!1){return Or.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,"")||""}};a1.DEFAULT_UTF8_ENCODING="utf8";function TR(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let o=arguments[n];for(let s in o)t[s]=o[s]}return t}function CR(...r){let e=r.map(o=>o.byteLength).reduce((o,s)=>o+s),t=new Uint8Array(e),n=0;return r.map(o=>new Uint8Array(o)).forEach(o=>{for(let s of o)t[n++]=s}),t.buffer}function _R(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}Aa.BufferSourceConverter=ao;Aa.Convert=a1;Aa.assign=TR;Aa.combine=CR;Aa.isEqual=_R});var wx=an(Rn=>{"use strict";Object.defineProperty(Rn,"__esModule",{value:!0});Rn.parseCookie=gx;Rn.parse=gx;Rn.stringifyCookie=jL;Rn.stringifySetCookie=Fp;Rn.serialize=Fp;Rn.parseSetCookie=QL;Rn.stringifySetCookie=Fp;Rn.serialize=Fp;var px=/^[\u0021-\u003A\u003C\u003E-\u007E]+$/,mx=/^[\u0021-\u003A\u003C-\u007E]*$/,qL=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,zL=/^[\u0020-\u003A\u003D-\u007E]*$/,WL=/^-?\d+$/,GL=Object.prototype.toString,YL=(()=>{let r=function(){};return r.prototype=Object.create(null),r})();function gx(r,e){let t=new YL,n=r.length;if(n<2)return t;let o=e?.decode||yx,s=0;do{let i=q4(r,s,n);if(i===-1)break;let a=H4(r,s,n);if(i>a){s=r.lastIndexOf(";",i-1)+1;continue}let c=Qo(r,s,i);t[c]===void 0&&(t[c]=o(Qo(r,i+1,a))),s=a+1}while(s<n);return t}function jL(r,e){let t=e?.encode||encodeURIComponent,n=[];for(let o of Object.keys(r)){let s=r[o];if(s===void 0)continue;if(!px.test(o))throw new TypeError(`cookie name is invalid: ${o}`);let i=t(s);if(!mx.test(i))throw new TypeError(`cookie val is invalid: ${s}`);n.push(`${o}=${i}`)}return n.join("; ")}function Fp(r,e,t){let n=typeof r=="object"?r:{...t,name:r,value:String(e)},s=(typeof e=="object"?e:t)?.encode||encodeURIComponent;if(!px.test(n.name))throw new TypeError(`argument name is invalid: ${n.name}`);let i=n.value?s(n.value):"";if(!mx.test(i))throw new TypeError(`argument val is invalid: ${n.value}`);let a=n.name+"="+i;if(n.maxAge!==void 0){if(!Number.isInteger(n.maxAge))throw new TypeError(`option maxAge is invalid: ${n.maxAge}`);a+="; Max-Age="+n.maxAge}if(n.domain){if(!qL.test(n.domain))throw new TypeError(`option domain is invalid: ${n.domain}`);a+="; Domain="+n.domain}if(n.path){if(!zL.test(n.path))throw new TypeError(`option path is invalid: ${n.path}`);a+="; Path="+n.path}if(n.expires){if(!XL(n.expires)||!Number.isFinite(n.expires.valueOf()))throw new TypeError(`option expires is invalid: ${n.expires}`);a+="; Expires="+n.expires.toUTCString()}if(n.httpOnly&&(a+="; HttpOnly"),n.secure&&(a+="; Secure"),n.partitioned&&(a+="; Partitioned"),n.priority)switch(typeof n.priority=="string"?n.priority.toLowerCase():void 0){case"low":a+="; Priority=Low";break;case"medium":a+="; Priority=Medium";break;case"high":a+="; Priority=High";break;default:throw new TypeError(`option priority is invalid: ${n.priority}`)}if(n.sameSite)switch(typeof n.sameSite=="string"?n.sameSite.toLowerCase():n.sameSite){case!0:case"strict":a+="; SameSite=Strict";break;case"lax":a+="; SameSite=Lax";break;case"none":a+="; SameSite=None";break;default:throw new TypeError(`option sameSite is invalid: ${n.sameSite}`)}return a}function QL(r,e){let t=e?.decode||yx,n=r.length,o=H4(r,0,n),s=q4(r,0,o),i=s===-1?{name:"",value:t(Qo(r,0,o))}:{name:Qo(r,0,s),value:t(Qo(r,s+1,o))},a=o+1;for(;a<n;){let c=H4(r,a,n),l=q4(r,a,c),d=l===-1?Qo(r,a,c):Qo(r,a,l),u=l===-1?void 0:Qo(r,l+1,c);switch(d.toLowerCase()){case"httponly":i.httpOnly=!0;break;case"secure":i.secure=!0;break;case"partitioned":i.partitioned=!0;break;case"domain":i.domain=u;break;case"path":i.path=u;break;case"max-age":u&&WL.test(u)&&(i.maxAge=Number(u));break;case"expires":if(!u)break;let f=new Date(u);Number.isFinite(f.valueOf())&&(i.expires=f);break;case"priority":if(!u)break;let h=u.toLowerCase();(h==="low"||h==="medium"||h==="high")&&(i.priority=h);break;case"samesite":if(!u)break;let p=u.toLowerCase();(p==="lax"||p==="strict"||p==="none")&&(i.sameSite=p);break}a=c+1}return i}function H4(r,e,t){let n=r.indexOf(";",e);return n===-1?t:n}function q4(r,e,t){let n=r.indexOf("=",e);return n<t?n:-1}function Qo(r,e,t){let n=e,o=t;do{let s=r.charCodeAt(n);if(s!==32&&s!==9)break}while(++n<o);for(;o>n;){let s=r.charCodeAt(o-1);if(s!==32&&s!==9)break;o--}return r.slice(n,o)}function yx(r){if(r.indexOf("%")===-1)return r;try{return decodeURIComponent(r)}catch{return r}}function XL(r){return GL.call(r)==="[object Date]"}});var fN={};Je(fN,{DEFAULT_CID_PEER_FILTER_SIZE:()=>Sg,DEFAULT_SESSION_MAX_PROVIDERS:()=>vg,DEFAULT_SESSION_MIN_PROVIDERS:()=>xg,InsufficientProvidersError:()=>rl,InvalidCodecError:()=>Ag,NoRoutersAvailableError:()=>Vo,UnknownCodecError:()=>ol,UnknownHashAlgorithmError:()=>nl,createHelia:()=>dN,heliaDefaults:()=>E6,libp2pDefaults:()=>H0});var I6=Symbol.for("@libp2p/connection");var Dn=Symbol.for("@libp2p/content-routing");var Vt=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},vu=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},Su=class extends Error{static name="InvalidCryptoExchangeError";constructor(e="Invalid crypto exchange"){super(e),this.name="InvalidCryptoExchangeError"}},A=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},Nn=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},Wa=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}},Ga=class extends Error{static name="UnsupportedOperationError";constructor(e="Unsupported operation"){super(e),this.name="UnsupportedOperationError"}};var is=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},di=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},Br=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},fi=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}};var cn=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},Ya=class extends Error{static name="StreamBufferError";constructor(e="The stream buffer was full"){super(e),this.name="StreamBufferError"}},Le=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},hi=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},ln=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},Au=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},bo=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},pi=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},de=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},as=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},un=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},Ur=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var Eo=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},cs=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},ja=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},Iu=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},mi=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},Fr=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var Tu=class extends Event{data;constructor(e,t){super("message",t),this.data=e}},xo=class extends Event{error;local;constructor(e,t,n){super("close",n),this.error=t,this.local=e}},Cu=class extends xo{constructor(e,t){super(!0,e,t)}},_u=class extends xo{constructor(e,t){super(!1,e,t)}};var ls=Symbol.for("@libp2p/peer-discovery");var ku=Symbol.for("@libp2p/peer-id");function Rt(r){return!!r?.[ku]}var On=Symbol.for("@libp2p/peer-routing");var us="keep-alive";function Pu(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function at(...r){let e=[];for(let t of r)Pu(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 lt(...r){let e=[];for(let t of r)Pu(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 vo=Symbol.for("@libp2p/transport");var Qa;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(Qa||(Qa={}));var ie=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:s})=>s!==t),this.#e.set(e,o))}dispatchEvent(e){let t=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:o})=>!o),this.#e.set(e.type,n)),t}safeDispatchEvent(e,t={}){return this.dispatchEvent(new CustomEvent(e,t))}};var me=Symbol.for("@libp2p/service-capabilities"),ur=Symbol.for("@libp2p/service-dependencies");var H=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var Ru=class extends AggregateError{static name="DNSQueryFailedError";name="DNSQueryFailedError"};var z0=Ln(C6(),1);var W0=class r extends Error{name="TimeoutError";constructor(e,t){super(e,t),Error.captureStackTrace?.(this,r)}},_6=r=>r.reason??new DOMException("This operation was aborted.","AbortError");function qt(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:s={setTimeout,clearTimeout},signal:i}=e,a,c,d=new Promise((u,f)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(i?.aborted){f(_6(i));return}if(i&&(c=()=>{f(_6(i))},i.addEventListener("abort",c,{once:!0})),r.then(u,f),t===Number.POSITIVE_INFINITY)return;let h=new W0;a=s.setTimeout.call(void 0,()=>{if(n){try{u(n())}catch(p){f(p)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?u():o instanceof Error?f(o):(h.message=o??`Promise timed out after ${t} milliseconds`,f(h))},t)}).finally(()=>{d.clear(),c&&i&&i.removeEventListener("abort",c)});return d.clear=()=>{s.clearTimeout.call(void 0,a),a=void 0},d}function G0(r,e,t){let n=0,o=r.length;for(;o>0;){let s=Math.trunc(o/2),i=n+s;t(r[i],e)<=0?(n=++i,o-=s+1):o=s}return n}var Za=class{#e=[];enqueue(e,t){let{priority:n=0,id:o}=t??{},s={priority:n,id:o,run:e};if(this.size===0||this.#e[this.size-1].priority>=n){this.#e.push(s);return}let i=G0(this.#e,s,(a,c)=>c.priority-a.priority);this.#e.splice(i,0,s)}setPriority(e,t){let n=this.#e.findIndex(s=>s.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 ds=class extends z0.default{#e;#t;#r=0;#a;#c=!1;#m=!1;#u;#T=0;#b=0;#d;#f;#l;#i=[];#s=0;#n;#C;#o=0;#y;#h;#L=1n;#w=new Map;timeout;constructor(e){if(super(),e={carryoverIntervalCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:Za,strict:!1,...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})`);if(e.strict&&e.interval===0)throw new TypeError("The `strict` option requires a non-zero `interval`");if(e.strict&&e.intervalCap===Number.POSITIVE_INFINITY)throw new TypeError("The `strict` option requires a finite `intervalCap`");if(this.#e=e.carryoverIntervalCount??e.carryoverConcurrencyCount??!1,this.#t=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#a=e.intervalCap,this.#u=e.interval,this.#l=e.strict,this.#n=new e.queueClass,this.#C=e.queueClass,this.concurrency=e.concurrency,e.timeout!==void 0&&!(Number.isFinite(e.timeout)&&e.timeout>0))throw new TypeError(`Expected \`timeout\` to be a positive finite number, got \`${e.timeout}\` (${typeof e.timeout})`);this.timeout=e.timeout,this.#h=e.autoStart===!1,this.#$()}#E(e){for(;this.#s<this.#i.length;){let n=this.#i[this.#s];if(n!==void 0&&e-n>=this.#u)this.#s++;else break}(this.#s>100&&this.#s>this.#i.length/2||this.#s===this.#i.length)&&(this.#i=this.#i.slice(this.#s),this.#s=0)}#D(e){this.#l?this.#i.push(e):this.#r++}#N(){this.#l?this.#i.length>this.#s&&this.#i.pop():this.#r>0&&this.#r--}#x(){return this.#i.length-this.#s}get#O(){return this.#t?!0:this.#l?this.#x()<this.#a:this.#r<this.#a}get#M(){return this.#o<this.#y}#B(){this.#o--,this.#o===0&&this.emit("pendingZero"),this.#A(),this.emit("next")}#U(){this.#f=void 0,this.#P(),this.#k()}#F(e){if(this.#l){if(this.#E(e),this.#x()>=this.#a){let n=this.#i[this.#s],o=this.#u-(e-n);return this.#v(o),!0}return!1}if(this.#d===void 0){let t=this.#T-e;if(t<0){if(this.#b>0){let n=e-this.#b;if(n<this.#u)return this.#v(this.#u-n),!0}this.#r=this.#e?this.#o:0}else return this.#v(t),!0}return!1}#v(e){this.#f===void 0&&(this.#f=setTimeout(()=>{this.#U()},e))}#S(){this.#d&&(clearInterval(this.#d),this.#d=void 0)}#_(){this.#f&&(clearTimeout(this.#f),this.#f=void 0)}#A(){if(this.#n.size===0){if(this.#S(),this.emit("empty"),this.#o===0){if(this.#_(),this.#l&&this.#s>0){let t=Date.now();this.#E(t)}this.emit("idle")}return!1}let e=!1;if(!this.#h){let t=Date.now(),n=!this.#F(t);if(this.#O&&this.#M){let o=this.#n.dequeue();this.#t||(this.#D(t),this.#g()),this.emit("active"),o(),n&&this.#k(),e=!0}}return e}#k(){this.#t||this.#d!==void 0||this.#l||(this.#d=setInterval(()=>{this.#P()},this.#u),this.#T=Date.now()+this.#u)}#P(){this.#l||(this.#r===0&&this.#o===0&&this.#d&&this.#S(),this.#r=this.#e?this.#o:0),this.#I(),this.#g()}#I(){for(;this.#A(););}get concurrency(){return this.#y}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.#y=e,this.#I()}setPriority(e,t){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`Expected \`priority\` to be a finite number, got \`${t}\` (${typeof t})`);this.#n.setPriority(e,t)}async add(e,t={}){return t={timeout:this.timeout,...t,id:t.id??(this.#L++).toString()},new Promise((n,o)=>{let s=Symbol(`task-${t.id}`);this.#n.enqueue(async()=>{this.#o++,this.#w.set(s,{id:t.id,priority:t.priority??0,startTime:Date.now(),timeout:t.timeout});let i;try{try{t.signal?.throwIfAborted()}catch(l){throw this.#K(),this.#w.delete(s),l}this.#b=Date.now();let a=e({signal:t.signal});if(t.timeout&&(a=qt(Promise.resolve(a),{milliseconds:t.timeout,message:`Task timed out after ${t.timeout}ms (queue has ${this.#o} running, ${this.#n.size} waiting)`})),t.signal){let{signal:l}=t;a=Promise.race([a,new Promise((d,u)=>{i=()=>{u(l.reason)},l.addEventListener("abort",i,{once:!0})})])}let c=await a;n(c),this.emit("completed",c)}catch(a){o(a),this.emit("error",a)}finally{i&&t.signal?.removeEventListener("abort",i),this.#w.delete(s),queueMicrotask(()=>{this.#B()})}},t),this.emit("add"),this.#A()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#h?(this.#h=!1,this.#I(),this):this}pause(){this.#h=!0}clear(){this.#n=new this.#C,this.#S(),this.#R(),this.emit("empty"),this.#o===0&&(this.#_(),this.emit("idle")),this.emit("next")}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.#o===0&&this.#n.size===0||await this.#p("idle")}async onPendingZero(){this.#o!==0&&await this.#p("pendingZero")}async onRateLimit(){this.isRateLimited||await this.#p("rateLimit")}async onRateLimitCleared(){this.isRateLimited&&await this.#p("rateLimitCleared")}onError(){return new Promise((e,t)=>{let n=o=>{this.off("error",n),t(o)};this.on("error",n)})}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.#o}get isPaused(){return this.#h}#$(){this.#t||(this.on("add",()=>{this.#n.size>0&&this.#g()}),this.on("next",()=>{this.#g()}))}#g(){this.#t||this.#m||(this.#m=!0,queueMicrotask(()=>{this.#m=!1,this.#R()}))}#K(){this.#t||(this.#N(),this.#g())}#R(){let e=this.#c;if(this.#t||this.#n.size===0){e&&(this.#c=!1,this.emit("rateLimitCleared"));return}let t;if(this.#l){let o=Date.now();this.#E(o),t=this.#x()}else t=this.#r;let n=t>=this.#a;n!==e&&(this.#c=n,this.emit(n?"rateLimit":"rateLimitCleared"))}get isRateLimited(){return this.#c}get isSaturated(){return this.#o===this.#y&&this.#n.size>0||this.isRateLimited&&this.#n.size>0}get runningTasks(){return[...this.#w.values()].map(e=>({...e}))}};function Du(r){let e=[dr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var J0={};Je(J0,{base10:()=>ES});var uO=new Uint8Array(0);function k6(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 $r(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 P6(r){return new TextEncoder().encode(r)}function R6(r){return new TextDecoder().decode(r)}function pS(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 s=r.charAt(o),i=s.charCodeAt(0);if(t[i]!==255)throw new TypeError(s+" is ambiguous");t[i]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),d=Math.log(256)/Math.log(a);function u(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,w=0,T=p.length;w!==T&&p[w]===0;)w++,g++;for(var I=(T-w)*d+1>>>0,D=new Uint8Array(I);w!==T;){for(var F=p[w],$=0,W=I-1;(F!==0||$<m)&&W!==-1;W--,$++)F+=256*D[W]>>>0,D[W]=F%a>>>0,F=F/a>>>0;if(F!==0)throw new Error("Non-zero carry");m=$,w++}for(var S=I-m;S!==I&&D[S]===0;)S++;for(var x=c.repeat(g);S<I;++S)x+=r.charAt(D[S]);return x}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,w=0;p[g]===c;)m++,g++;for(var T=(p.length-g)*l+1>>>0,I=new Uint8Array(T);p[g];){var D=t[p.charCodeAt(g)];if(D===255)return;for(var F=0,$=T-1;(D!==0||F<w)&&$!==-1;$--,F++)D+=a*I[$]>>>0,I[$]=D%256>>>0,D=D/256>>>0;if(D!==0)throw new Error("Non-zero carry");w=F,g++}if(p[g]!==" "){for(var W=T-w;W!==T&&I[W]===0;)W++;for(var S=new Uint8Array(m+(T-W)),x=m;W!==T;)S[x++]=I[W++];return S}}}function h(p){var g=f(p);if(g)return g;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:f,decode:h}}var mS=pS,gS=mS,L6=gS;var j0=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")}},Q0=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 D6(this,e)}},X0=class{decoders;constructor(e){this.decoders=e}or(e){return D6(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 D6(r,e){return new X0({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var Z0=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 j0(e,t,n),this.decoder=new Q0(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function gi({name:r,prefix:e,encode:t,decode:n}){return new Z0(r,e,t,n)}function So({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=L6(t,r);return gi({prefix:e,name:r,encode:n,decode:s=>$r(o(s))})}function yS(r,e,t,n){let o=r.length;for(;r[o-1]==="=";)--o;let s=new Uint8Array(o*t/8|0),i=0,a=0,c=0;for(let l=0;l<o;++l){let d=e[r[l]];if(d===void 0)throw new SyntaxError(`Non-${n} character`);a=a<<t|d,i+=t,i>=8&&(i-=8,s[c++]=255&a>>i)}if(i>=t||(255&a<<8-i)!==0)throw new SyntaxError("Unexpected end of data");return s}function wS(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],i+=8;i>t;)i-=t,s+=e[o&a>>i];if(i!==0&&(s+=e[o&a<<t-i]),n)for(;(s.length*t&7)!==0;)s+="=";return s}function bS(r){let e={};for(let t=0;t<r.length;++t)e[r[t]]=t;return e}function je({name:r,prefix:e,bitsPerChar:t,alphabet:n}){let o=bS(n);return gi({prefix:e,name:r,encode(s){return wS(s,n,t)},decode(s){return yS(s,o,t,r)}})}var ES=So({prefix:"9",name:"base10",alphabet:"0123456789"});var e2={};Je(e2,{base16:()=>xS,base16upper:()=>vS});var xS=je({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),vS=je({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var t2={};Je(t2,{base2:()=>SS});var SS=je({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var r2={};Je(r2,{base256emoji:()=>_S});var N6=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}"),AS=N6.reduce((r,e,t)=>(r[t]=e,r),[]),IS=N6.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function TS(r){return r.reduce((e,t)=>(e+=AS[t],e),"")}function CS(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=IS[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var _S=gi({prefix:"\u{1F680}",name:"base256emoji",encode:TS,decode:CS});var n2={};Je(n2,{base32:()=>ut,base32hex:()=>LS,base32hexpad:()=>NS,base32hexpadupper:()=>OS,base32hexupper:()=>DS,base32pad:()=>PS,base32padupper:()=>RS,base32upper:()=>kS,base32z:()=>MS});var ut=je({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),kS=je({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),PS=je({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),RS=je({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),LS=je({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),DS=je({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),NS=je({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),OS=je({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),MS=je({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var o2={};Je(o2,{base36:()=>Ar,base36upper:()=>BS});var Ar=So({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),BS=So({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var s2={};Je(s2,{base58btc:()=>De,base58flickr:()=>US});var De=So({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),US=So({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var i2={};Je(i2,{base64:()=>rt,base64pad:()=>Ja,base64url:()=>ec,base64urlpad:()=>FS});var rt=je({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),Ja=je({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),ec=je({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),FS=je({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var a2={};Je(a2,{base8:()=>$S});var $S=je({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var c2={};Je(c2,{identity:()=>KS});var KS=gi({prefix:"\0",name:"identity",encode:r=>R6(r),decode:r=>P6(r)});var Nu={};Je(Nu,{code:()=>l2,decode:()=>WS,encode:()=>zS,name:()=>qS});var VS=new TextEncoder,HS=new TextDecoder,qS="json",l2=512;function zS(r){return VS.encode(JSON.stringify(r))}function WS(r){return JSON.parse(HS.decode(r))}var fs={};Je(fs,{code:()=>Mn,decode:()=>jS,encode:()=>YS,name:()=>GS});var GS="raw",Mn=85;function YS(r){return $r(r)}function jS(r){return $r(r)}var f2={};Je(f2,{identity:()=>dt});var He={};Je(He,{Digest:()=>hs,create:()=>zt,decode:()=>ke,equals:()=>d2,hasCode:()=>pA});var QS=B6,O6=128,XS=127,ZS=~XS,JS=Math.pow(2,31);function B6(r,e,t){e=e||[],t=t||0;for(var n=t;r>=JS;)e[t++]=r&255|O6,r/=128;for(;r&ZS;)e[t++]=r&255|O6,r>>>=7;return e[t]=r|0,B6.bytes=t-n+1,e}var eA=u2,tA=128,M6=127;function u2(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw u2.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&M6)<<o:(i&M6)*Math.pow(2,o),o+=7}while(i>=tA);return u2.bytes=s-n,t}var rA=Math.pow(2,7),nA=Math.pow(2,14),oA=Math.pow(2,21),sA=Math.pow(2,28),iA=Math.pow(2,35),aA=Math.pow(2,42),cA=Math.pow(2,49),lA=Math.pow(2,56),uA=Math.pow(2,63),dA=function(r){return r<rA?1:r<nA?2:r<oA?3:r<sA?4:r<iA?5:r<aA?6:r<cA?7:r<lA?8:r<uA?9:10},fA={encode:QS,decode:eA,encodingLength:dA},hA=fA,tc=hA;function rc(r,e=0){return[tc.decode(r,e),tc.decode.bytes]}function yi(r,e,t=0){return tc.encode(r,e,t),e}function wi(r){return tc.encodingLength(r)}function zt(r,e){let t=e.byteLength,n=wi(r),o=n+wi(t),s=new Uint8Array(o+t);return yi(r,s,0),yi(t,s,n),s.set(e,o),new hs(r,t,e,s)}function ke(r){let e=$r(r),[t,n]=rc(e),[o,s]=rc(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new hs(t,o,i,e)}function d2(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&k6(r.bytes,t.bytes)}}var hs=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function pA(r,e){return r.code===e}var U6=0,mA="identity",F6=$r;function gA(r,e){if(e?.truncate!=null&&e.truncate!==r.byteLength){if(e.truncate<0||e.truncate>r.byteLength)throw new Error(`Invalid truncate option, must be less than or equal to ${r.byteLength}`);r=r.subarray(0,e.truncate)}return zt(U6,F6(r))}var dt={code:U6,name:mA,encode:F6,digest:gA};var p2={};Je(p2,{sha256:()=>We,sha512:()=>Mu});var yA=20;function nc({name:r,code:e,encode:t,minDigestLength:n,maxDigestLength:o}){return new h2(r,e,t,n,o)}var h2=class{name;code;encode;minDigestLength;maxDigestLength;constructor(e,t,n,o,s){this.name=e,this.code=t,this.encode=n,this.minDigestLength=o??yA,this.maxDigestLength=s}digest(e,t){if(t?.truncate!=null){if(t.truncate<this.minDigestLength)throw new Error(`Invalid truncate option, must be greater than or equal to ${this.minDigestLength}`);if(this.maxDigestLength!=null&&t.truncate>this.maxDigestLength)throw new Error(`Invalid truncate option, must be less than or equal to ${this.maxDigestLength}`)}if(e instanceof Uint8Array){let n=this.encode(e);return n instanceof Uint8Array?$6(n,this.code,t?.truncate):n.then(o=>$6(o,this.code,t?.truncate))}else throw Error("Unknown type, must be binary type")}};function $6(r,e,t){if(t!=null&&t!==r.byteLength){if(t>r.byteLength)throw new Error(`Invalid truncate option, must be less than or equal to ${r.byteLength}`);r=r.subarray(0,t)}return zt(e,r)}function V6(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var We=nc({name:"sha2-256",code:18,encode:V6("SHA-256")}),Mu=nc({name:"sha2-512",code:19,encode:V6("SHA-512")});function H6(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return bA(t,m2(r),e??De.encoder);default:return EA(t,m2(r),e??ut.encoder)}}var q6=new WeakMap;function m2(r){let e=q6.get(r);if(e==null){let t=new Map;return q6.set(r,t),t}return e}var G=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!==oc)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==xA)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=zt(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&&d2(e.multihash,n.multihash)}toString(e){return H6(this,e)}toJSON(){return{"/":H6(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:s,bytes:i}=t;return new r(n,o,s,i??z6(n,o,s.bytes))}else if(t[vA]===!0){let{version:n,multihash:o,code:s}=t,i=ke(o);return r.create(n,s,i)}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!==oc)throw new Error(`Version 0 CID must use dag-pb (code: ${oc}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=z6(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,oc,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=$r(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let s=o.subarray(t.multihashSize-t.digestSize),i=new hs(t.multihashCode,t.digestSize,s,o);return[t.version===0?r.createV0(i):r.createV1(t.codec,i),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[u,f]=rc(e.subarray(t));return t+=f,u},o=n(),s=oc;if(o===18?(o=0,t=0):s=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=t,a=n(),c=n(),l=t+c,d=l-i;return{version:o,codec:s,multihashCode:a,digestSize:c,multihashSize:d,size:l}}static parse(e,t){let[n,o]=wA(e,t),s=r.decode(o);if(s.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return m2(s).set(n,e),s}};function wA(r,e){switch(r[0]){case"Q":{let t=e??De;return[De.prefix,t.decode(`${De.prefix}${r}`)]}case De.prefix:{let t=e??De;return[De.prefix,t.decode(r)]}case ut.prefix:{let t=e??ut;return[ut.prefix,t.decode(r)]}case Ar.prefix:{let t=e??Ar;return[Ar.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 bA(r,e,t){let{prefix:n}=t;if(n!==De.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let s=t.encode(r).slice(1);return e.set(n,s),s}else return o}function EA(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let s=t.encode(r);return e.set(n,s),s}else return o}var oc=112,xA=18;function z6(r,e,t){let n=wi(r),o=n+wi(e),s=new Uint8Array(o+t.byteLength);return yi(r,s,0),yi(e,s,n),s.set(t,o),s}var vA=Symbol.for("@ipld/js-cid/CID");var ps={...c2,...t2,...a2,...J0,...e2,...n2,...o2,...s2,...i2,...r2},GO={...p2,...f2};function ae(r=0){return new Uint8Array(r)}function Ge(r=0){return new Uint8Array(r)}function G6(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var W6=G6("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),g2=G6("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=Ge(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),SA={utf8:W6,"utf-8":W6,hex:ps.base16,latin1:g2,ascii:g2,binary:g2,...ps},Bu=SA;function R(r,e="utf8"){let t=Bu[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var y2=60;function Uu(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:dr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:dr[e.type],TTL:e.TTL??e.ttl??y2,data:e.data instanceof Uint8Array?R(e.data):e.data}))}}var AA=4;function w2(r,e={}){let t=new ds({concurrency:e.queryConcurrency??AA});return async(n,o={})=>{let s=o?.logger?.forComponent("dns:dns-json-over-https"),i=new URLSearchParams;i.set("name",n),Du(o.types).forEach(c=>{i.append("type",dr[c])}),o.onProgress?.(new H("dns:query",n)),s?.("GET %s",`${r}?${i}`);let a=await t.add(async()=>{let c=await fetch(`${r}?${i}`,{headers:{accept:"application/dns-json"},signal:o?.signal});if(s?.("GET %s %d",c.url,c.status),c.status!==200)throw new Error(`Unexpected HTTP status: ${c.status} - ${c.statusText}`);let l=Uu(await c.json());return o.onProgress?.(new H("dns:response",l)),l},{signal:o.signal});if(a==null)throw new Error("No DNS response received");return a}}function Y6(){return[w2("https://cloudflare-dns.com/dns-query"),w2("https://dns.google/resolve")]}var X6=Ln(Q6(),1);var b2=class{lru;constructor(e){this.lru=(0,X6.default)(e)}get(e,t){let n=!0,o=[];for(let s of t){let i=this.getAnswers(e,s);if(i.length===0){n=!1;break}o.push(...i)}if(n)return Uu({answers:o})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,o=this.lru.get(n);if(o!=null){let s=o.filter(i=>i.expires>Date.now()).map(({expires:i,value:a})=>({...a,TTL:Math.round((i-Date.now())/1e3),type:dr[a.type]}));return s.length===0&&this.lru.remove(n),s}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,o=this.lru.get(n)??[];o.push({expires:Date.now()+(t.TTL??y2)*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 Z6(r){return new b2(r)}var IA=1e3,Fu=class{resolvers;cache;logger;constructor(e){this.resolvers={},this.cache=Z6(e.cacheSize??IA),this.logger=e.logger,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["."]=Y6())}async query(e,t={}){let n=Du(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new H("dns:cache",o)),o;let s=`${e.split(".").pop()}.`,i=(this.resolvers[s]??this.resolvers["."]).sort(()=>Math.random()>.5?-1:1),a=[];for(let c of i){if(t.signal?.aborted===!0)break;try{let l=await c(e,{...t,logger:this.logger,types:n});for(let d of l.Answer)this.cache.add(e,d);return l}catch(l){a.push(l),t.onProgress?.(new H("dns:error",l))}}throw new Ru(a,`DNS lookup of ${e} ${n} failed`)}};var dr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(dr||(dr={}));function $u(r={}){return new Fu(r)}function TA(r){return r[Symbol.asyncIterator]!=null}function CA(r){if(TA(r))return(async()=>{for await(let e of r);})();for(let e of r);}var er=CA;var sc=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},ic=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},Ku=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var J6={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new Ku("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 nt=J6;function ee(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 Oe(r,e){e==null&&(e=r.reduce((o,s)=>o+s.length,0));let t=Ge(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}var t5=Symbol.for("@achingbrain/uint8arraylist");function e5(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 bi(r){return!!r?.[t5]}var Q=class r{bufs;length;[t5]=!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(bi(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(bi(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=e5(this.bufs,e);return t.buf[t.index]}set(e,t){let n=e5(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(bi(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 Oe(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:Oe(n,o)}sublist(e,t){let{bufs:n,length:o}=this._subList(e,t),s=new r;return s.length=o,s.bufs=[...n],s}_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 s=0;s<this.bufs.length;s++){let i=this.bufs[s],a=o,c=a+i.byteLength;if(o=c,e>=c)continue;let l=e>=a&&e<c,d=t>a&&t<=c;if(l&&d){if(e===a&&t===c){n.push(i);break}let u=e-a;n.push(i.subarray(u,u+(t-e)));break}if(l){if(e===0){n.push(i);continue}n.push(i.subarray(e-a));continue}if(d){if(t===c){n.push(i);break}n.push(i.subarray(0,t-a));break}n.push(i)}return{bufs:n,length:t-e}}indexOf(e,t=0){if(!bi(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 s=256,i=new Int32Array(s);for(let u=0;u<s;u++)i[u]=-1;for(let u=0;u<o;u++)i[n[u]]=u;let a=i,c=this.byteLength-n.byteLength,l=n.byteLength-1,d;for(let u=t;u<=c;u+=d){d=0;for(let f=l;f>=0;f--){let h=this.get(u+f);if(n[f]!==h){d=Math.max(1,f-a[h]);break}}if(d===0)return u}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=Ge(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=ae(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=ae(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=ae(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=Ge(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=ae(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=ae(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=ae(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=ae(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=ae(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(!ee(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,s)=>o+s.byteLength,0)),n.length=t,n}};function _(r,e="utf8"){let t=Bu[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}var kA=parseInt("11111",2),E2=parseInt("10000000",2),PA=parseInt("01111111",2),r5={0:ac,1:ac,2:RA,3:NA,4:OA,5:DA,6:LA,16:ac,22:ac,48:ac};function Ir(r,e={offset:0}){let t=r[e.offset]&kA;if(e.offset++,r5[t]!=null)return r5[t](r,e);throw new Error("No decoder for tag "+t)}function cc(r,e){let t=0;if((r[e.offset]&E2)===E2){let n=r[e.offset]&PA,o="0x";e.offset++;for(let s=0;s<n;s++,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 ac(r,e){cc(r,e);let t=[];for(;!(e.offset>=r.byteLength);){let n=Ir(r,e);if(n===null)break;t.push(n)}return t}function RA(r,e){let t=cc(r,e),n=e.offset,o=e.offset+t,s=[];for(let i=n;i<o;i++)i===n&&r[i]===0||s.push(r[i]);return e.offset+=t,Uint8Array.from(s)}function LA(r,e){let t=cc(r,e),n=e.offset+t,o=r[e.offset];e.offset++;let s=0,i=0;o<40?(s=0,i=o):o<80?(s=1,i=o-40):(s=2,i=o-80);let a=`${s}.${i}`,c=[];for(;e.offset<n;){let l=r[e.offset];if(e.offset++,c.push(l&127),l<128){c.reverse();let d=0;for(let u=0;u<c.length;u++)d+=c[u]<<u*7;a+=`.${d}`,c=[]}}return a}function DA(r,e){return e.offset++,null}function NA(r,e){let t=cc(r,e),n=r[e.offset];e.offset++;let o=r.subarray(e.offset,e.offset+t-1);if(e.offset+=t,n!==0)throw new Error("Unused bits in bit string is unimplemented");return o}function OA(r,e){let t=cc(r,e),n=r.subarray(e.offset,e.offset+t);return e.offset+=t,n}function MA(r){let e=r.toString(16);e.length%2===1&&(e="0"+e);let t=new Q;for(let n=0;n<e.length;n+=2)t.append(Uint8Array.from([parseInt(`${e[n]}${e[n+1]}`,16)]));return t}function Vu(r){if(r.byteLength<128)return Uint8Array.from([r.byteLength]);let e=MA(r.byteLength);return new Q(Uint8Array.from([e.byteLength|E2]),e)}function Wt(r){let e=new Q,t=128;return(r.subarray()[0]&t)===t&&e.append(Uint8Array.from([0])),e.append(r),new Q(Uint8Array.from([2]),Vu(e),e)}function lc(r){let e=Uint8Array.from([0]),t=new Q(e,r);return new Q(Uint8Array.from([3]),Vu(t),t)}function n5(r){return new Q(Uint8Array.from([4]),Vu(r),r)}function Kr(r,e=48){let t=new Q;for(let n of r)t.append(n);return new Q(Uint8Array.from([e]),Vu(t),t)}var o5="1.2.840.10045.3.1.7",s5="1.3.132.0.34",i5="1.3.132.0.35";async function a5(r="P-256"){let e=await crypto.subtle.generateKey({name:"ECDSA",namedCurve:r},!0,["sign","verify"]);return{publicKey:await crypto.subtle.exportKey("jwk",e.publicKey),privateKey:await crypto.subtle.exportKey("jwk",e.privateKey)}}async function c5(r,e,t){let n=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["sign"]);t?.signal?.throwIfAborted();let o=await crypto.subtle.sign({name:"ECDSA",hash:{name:"SHA-256"}},n,e.subarray());return t?.signal?.throwIfAborted(),new Uint8Array(o,0,o.byteLength)}async function l5(r,e,t,n){let o=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["verify"]);n?.signal?.throwIfAborted();let s=await crypto.subtle.verify({name:"ECDSA",hash:{name:"SHA-256"}},o,e,t.subarray());return n?.signal?.throwIfAborted(),s}var BA=Uint8Array.from([6,8,42,134,72,206,61,3,1,7]),UA=Uint8Array.from([6,5,43,129,4,0,34]),FA=Uint8Array.from([6,5,43,129,4,0,35]),u5={ext:!0,kty:"EC",crv:"P-256"},d5={ext:!0,kty:"EC",crv:"P-384"},f5={ext:!0,kty:"EC",crv:"P-521"},Ei=32,xi=48,vi=66;function h5(r){let e=Ir(r);return x2(e)}function x2(r){let e=r[1],t=R(e,"base64url"),n=r[2][1][0],o=1,s,i;if(e.byteLength===Ei)return s=R(n.subarray(o,o+Ei),"base64url"),i=R(n.subarray(o+Ei),"base64url"),new gs({...u5,key_ops:["sign"],d:t,x:s,y:i});if(e.byteLength===xi)return s=R(n.subarray(o,o+xi),"base64url"),i=R(n.subarray(o+xi),"base64url"),new gs({...d5,key_ops:["sign"],d:t,x:s,y:i});if(e.byteLength===vi)return s=R(n.subarray(o,o+vi),"base64url"),i=R(n.subarray(o+vi),"base64url"),new gs({...f5,key_ops:["sign"],d:t,x:s,y:i});throw new A(`Private key length was wrong length, got ${e.byteLength}, expected 32, 48 or 66`)}function v2(r){let e=Ir(r);return p5(e)}function p5(r){let e=r[1][1][0],t=1,n,o;if(e.byteLength===Ei*2+1)return n=R(e.subarray(t,t+Ei),"base64url"),o=R(e.subarray(t+Ei),"base64url"),new ms({...u5,key_ops:["verify"],x:n,y:o});if(e.byteLength===xi*2+1)return n=R(e.subarray(t,t+xi),"base64url"),o=R(e.subarray(t+xi),"base64url"),new ms({...d5,key_ops:["verify"],x:n,y:o});if(e.byteLength===vi*2+1)return n=R(e.subarray(t,t+vi),"base64url"),o=R(e.subarray(t+vi),"base64url"),new ms({...f5,key_ops:["verify"],x:n,y:o});throw new A(`coordinates were wrong length, got ${e.byteLength}, expected 65, 97 or 133`)}function m5(r){return Kr([Wt(Uint8Array.from([1])),n5(_(r.d??"","base64url")),Kr([y5(r.crv)],160),Kr([lc(new Q(Uint8Array.from([4]),_(r.x??"","base64url"),_(r.y??"","base64url")))],161)]).subarray()}function g5(r){return Kr([Wt(Uint8Array.from([1])),Kr([y5(r.crv)],160),Kr([lc(new Q(Uint8Array.from([4]),_(r.x??"","base64url"),_(r.y??"","base64url")))],161)]).subarray()}function y5(r){if(r==="P-256")return BA;if(r==="P-384")return UA;if(r==="P-521")return FA;throw new A(`Invalid curve ${r}`)}async function w5(r="P-256"){let e=await a5(r);return new gs(e.privateKey)}var ms=class{type="ECDSA";jwk;_raw;constructor(e){this.jwk=e}get raw(){return this._raw==null&&(this._raw=g5(this.jwk)),this._raw}toMultihash(){return dt.digest(ft(this))}toCID(){return G.createV1(114,this.toMultihash())}toString(){return De.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}async verify(e,t,n){return l5(this.jwk,t,e,n)}},gs=class{type="ECDSA";jwk;publicKey;_raw;constructor(e){this.jwk=e,this.publicKey=new ms({crv:e.crv,ext:e.ext,key_ops:["verify"],kty:"EC",x:e.x,y:e.y})}get raw(){return this._raw==null&&(this._raw=m5(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}async sign(e,t){return c5(this.jwk,e,t)}};function ys(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function Dt(r,e=""){if(!Number.isSafeInteger(r)||r<0){let t=e&&`"${e}" `;throw new Error(`${t}expected integer >= 0, got ${r}`)}}function ce(r,e,t=""){let n=ys(r),o=r?.length,s=e!==void 0;if(!n||s&&o!==e){let i=t&&`"${t}" `,a=s?` of length ${e}`:"",c=n?`length=${o}`:`type=${typeof r}`;throw new Error(i+"expected Uint8Array"+a+", got "+c)}return r}function Un(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash must wrapped by utils.createHasher");Dt(r.outputLen),Dt(r.blockLen)}function Si(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 E5(r,e){ce(r,void 0,"digestInto() output");let t=e.outputLen;if(r.length<t)throw new Error('"digestInto() output" expected to be of length >='+t)}function Nt(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function ws(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function Vr(r,e){return r<<32-e|r>>>e}function Hu(r,e){return r<<e|r>>>32-e>>>0}var x5=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",$A=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function Fn(r){if(ce(r),x5)return r.toHex();let e="";for(let t=0;t<r.length;t++)e+=$A[r[t]];return e}var Bn={_0:48,_9:57,A:65,F:70,a:97,f:102};function b5(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 $n(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);if(x5)return Uint8Array.fromHex(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,s=0;o<t;o++,s+=2){let i=b5(r.charCodeAt(s)),a=b5(r.charCodeAt(s+1));if(i===void 0||a===void 0){let c=r[s]+r[s+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+s)}n[o]=i*16+a}return n}var KA=async()=>{};async function v5(r,e,t){let n=Date.now();for(let o=0;o<r;o++){t(o);let s=Date.now()-n;s>=0&&s<e||(await KA(),n+=s)}}function VA(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}function S2(r,e=""){return typeof r=="string"?VA(r):ce(r,void 0,e)}function tr(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];ce(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let s=r[n];t.set(s,o),o+=s.length}return t}function S5(r,e){if(e!==void 0&&{}.toString.call(e)!=="[object Object]")throw new Error("options must be object or undefined");return Object.assign(r,e)}function uc(r,e={}){let t=(o,s)=>r(s).update(o).digest(),n=r(void 0);return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=o=>r(o),Object.assign(t,e),Object.freeze(t)}function dn(r=32){let e=typeof globalThis=="object"?globalThis.crypto:null;if(typeof e?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");return e.getRandomValues(new Uint8Array(r))}var A2=r=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,r])});function qu(r,e,t){return r&e^~r&t}function zu(r,e,t){return r&e^r&t^e&t}var bs=class{blockLen;outputLen;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(e,t,n,o){this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.buffer=new Uint8Array(e),this.view=ws(this.buffer)}update(e){Si(this),ce(e);let{view:t,buffer:n,blockLen:o}=this,s=e.length;for(let i=0;i<s;){let a=Math.min(o-this.pos,s-i);if(a===o){let c=ws(e);for(;o<=s-i;i+=o)this.process(c,i);continue}n.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Si(this),E5(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:s}=this,{pos:i}=this;t[i++]=128,Nt(this.buffer.subarray(i)),this.padOffset>o-i&&(this.process(n,0),i=0);for(let u=i;u<o;u++)t[u]=0;n.setBigUint64(o-8,BigInt(this.length*8),s),this.process(n,0);let a=ws(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen must be aligned to 32bit");let l=c/4,d=this.get();if(l>d.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<l;u++)a.setUint32(4*u,d[u],s)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||=new this.constructor,e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:s,destroyed:i,pos:a}=this;return e.destroyed=i,e.finished=s,e.length=o,e.pos=a,o%t&&e.buffer.set(n),e}clone(){return this._cloneInto()}},Kn=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var bt=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var Wu=BigInt(4294967295),A5=BigInt(32);function HA(r,e=!1){return e?{h:Number(r&Wu),l:Number(r>>A5&Wu)}:{h:Number(r>>A5&Wu)|0,l:Number(r&Wu)|0}}function I5(r,e=!1){let t=r.length,n=new Uint32Array(t),o=new Uint32Array(t);for(let s=0;s<t;s++){let{h:i,l:a}=HA(r[s],e);[n[s],o[s]]=[i,a]}return[n,o]}var I2=(r,e,t)=>r>>>t,T2=(r,e,t)=>r<<32-t|e>>>t,Es=(r,e,t)=>r>>>t|e<<32-t,xs=(r,e,t)=>r<<32-t|e>>>t,dc=(r,e,t)=>r<<64-t|e>>>t-32,fc=(r,e,t)=>r>>>t-32|e<<64-t;function fn(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var T5=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),C5=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,_5=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),k5=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,P5=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),R5=(r,e,t,n,o,s)=>e+t+n+o+s+(r/2**32|0)|0;var zA=Uint32Array.from([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(64),C2=class extends bs{constructor(e){super(64,e,8,!1)}get(){let{A:e,B:t,C:n,D:o,E:s,F:i,G:a,H:c}=this;return[e,t,n,o,s,i,a,c]}set(e,t,n,o,s,i,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=a|0,this.H=c|0}process(e,t){for(let u=0;u<16;u++,t+=4)Ao[u]=e.getUint32(t,!1);for(let u=16;u<64;u++){let f=Ao[u-15],h=Ao[u-2],p=Vr(f,7)^Vr(f,18)^f>>>3,g=Vr(h,17)^Vr(h,19)^h>>>10;Ao[u]=g+Ao[u-7]+p+Ao[u-16]|0}let{A:n,B:o,C:s,D:i,E:a,F:c,G:l,H:d}=this;for(let u=0;u<64;u++){let f=Vr(a,6)^Vr(a,11)^Vr(a,25),h=d+f+qu(a,c,l)+zA[u]+Ao[u]|0,g=(Vr(n,2)^Vr(n,13)^Vr(n,22))+zu(n,o,s)|0;d=l,l=c,c=a,a=i+h|0,i=s,s=o,o=n,n=h+g|0}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,d=d+this.H|0,this.set(n,o,s,i,a,c,l,d)}roundClean(){Nt(Ao)}destroy(){this.set(0,0,0,0,0,0,0,0),Nt(this.buffer)}},_2=class extends C2{A=Kn[0]|0;B=Kn[1]|0;C=Kn[2]|0;D=Kn[3]|0;E=Kn[4]|0;F=Kn[5]|0;G=Kn[6]|0;H=Kn[7]|0;constructor(){super(32)}};var L5=I5(["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))),WA=L5[0],GA=L5[1],Io=new Uint32Array(80),To=new Uint32Array(80),k2=class extends bs{constructor(e){super(128,e,16,!1)}get(){let{Ah:e,Al:t,Bh:n,Bl:o,Ch:s,Cl:i,Dh:a,Dl:c,Eh:l,El:d,Fh:u,Fl:f,Gh:h,Gl:p,Hh:g,Hl:m}=this;return[e,t,n,o,s,i,a,c,l,d,u,f,h,p,g,m]}set(e,t,n,o,s,i,a,c,l,d,u,f,h,p,g,m){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=s|0,this.Cl=i|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=d|0,this.Fh=u|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 I=0;I<16;I++,t+=4)Io[I]=e.getUint32(t),To[I]=e.getUint32(t+=4);for(let I=16;I<80;I++){let D=Io[I-15]|0,F=To[I-15]|0,$=Es(D,F,1)^Es(D,F,8)^I2(D,F,7),W=xs(D,F,1)^xs(D,F,8)^T2(D,F,7),S=Io[I-2]|0,x=To[I-2]|0,L=Es(S,x,19)^dc(S,x,61)^I2(S,x,6),B=xs(S,x,19)^fc(S,x,61)^T2(S,x,6),P=_5(W,B,To[I-7],To[I-16]),v=k5(P,$,L,Io[I-7],Io[I-16]);Io[I]=v|0,To[I]=P|0}let{Ah:n,Al:o,Bh:s,Bl:i,Ch:a,Cl:c,Dh:l,Dl:d,Eh:u,El:f,Fh:h,Fl:p,Gh:g,Gl:m,Hh:w,Hl:T}=this;for(let I=0;I<80;I++){let D=Es(u,f,14)^Es(u,f,18)^dc(u,f,41),F=xs(u,f,14)^xs(u,f,18)^fc(u,f,41),$=u&h^~u&g,W=f&p^~f&m,S=P5(T,F,W,GA[I],To[I]),x=R5(S,w,D,$,WA[I],Io[I]),L=S|0,B=Es(n,o,28)^dc(n,o,34)^dc(n,o,39),P=xs(n,o,28)^fc(n,o,34)^fc(n,o,39),v=n&s^n&a^s&a,E=o&i^o&c^i&c;w=g|0,T=m|0,g=h|0,m=p|0,h=u|0,p=f|0,{h:u,l:f}=fn(l|0,d|0,x|0,L|0),l=a|0,d=c|0,a=s|0,c=i|0,s=n|0,i=o|0;let b=T5(L,P,E);n=C5(b,x,B,v),o=b|0}({h:n,l:o}=fn(this.Ah|0,this.Al|0,n|0,o|0)),{h:s,l:i}=fn(this.Bh|0,this.Bl|0,s|0,i|0),{h:a,l:c}=fn(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:d}=fn(this.Dh|0,this.Dl|0,l|0,d|0),{h:u,l:f}=fn(this.Eh|0,this.El|0,u|0,f|0),{h,l:p}=fn(this.Fh|0,this.Fl|0,h|0,p|0),{h:g,l:m}=fn(this.Gh|0,this.Gl|0,g|0,m|0),{h:w,l:T}=fn(this.Hh|0,this.Hl|0,w|0,T|0),this.set(n,o,s,i,a,c,l,d,u,f,h,p,g,m,w,T)}roundClean(){Nt(Io,To)}destroy(){Nt(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}},P2=class extends k2{Ah=bt[0]|0;Al=bt[1]|0;Bh=bt[2]|0;Bl=bt[3]|0;Ch=bt[4]|0;Cl=bt[5]|0;Dh=bt[6]|0;Dl=bt[7]|0;Eh=bt[8]|0;El=bt[9]|0;Fh=bt[10]|0;Fl=bt[11]|0;Gh=bt[12]|0;Gl=bt[13]|0;Hh=bt[14]|0;Hl=bt[15]|0;constructor(){super(64)}};var Tr=uc(()=>new _2,A2(1));var Co=uc(()=>new P2,A2(3));var L2=BigInt(0),R2=BigInt(1);function Vn(r,e=""){if(typeof r!="boolean"){let t=e&&`"${e}" `;throw new Error(t+"expected boolean, got type="+typeof r)}return r}function D5(r){if(typeof r=="bigint"){if(!Gu(r))throw new Error("positive bigint expected, got "+r)}else Dt(r);return r}function hc(r){let e=D5(r).toString(16);return e.length&1?"0"+e:e}function N5(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return r===""?L2:BigInt("0x"+r)}function Ai(r){return N5(Fn(r))}function hn(r){return N5(Fn(vs(ce(r)).reverse()))}function Yu(r,e){Dt(e),r=D5(r);let t=$n(r.toString(16).padStart(e*2,"0"));if(t.length!==e)throw new Error("number too large");return t}function pc(r,e){return Yu(r,e).reverse()}function vs(r){return Uint8Array.from(r)}var Gu=r=>typeof r=="bigint"&&L2<=r;function YA(r,e,t){return Gu(r)&&Gu(e)&&Gu(t)&&e<=r&&r<t}function _o(r,e,t,n){if(!YA(e,t,n))throw new Error("expected valid "+r+": "+t+" <= n < "+n+", got "+e)}function D2(r){let e;for(e=0;r>L2;r>>=R2,e+=1);return e}var mc=r=>(R2<<BigInt(r))-R2;function O5(r,e,t){if(Dt(r,"hashLen"),Dt(e,"qByteLen"),typeof t!="function")throw new Error("hmacFn must be a function");let n=m=>new Uint8Array(m),o=Uint8Array.of(),s=Uint8Array.of(0),i=Uint8Array.of(1),a=1e3,c=n(r),l=n(r),d=0,u=()=>{c.fill(1),l.fill(0),d=0},f=(...m)=>t(l,tr(c,...m)),h=(m=o)=>{l=f(s,m),c=f(),m.length!==0&&(l=f(i,m),c=f())},p=()=>{if(d++>=a)throw new Error("drbg: tried max amount of iterations");let m=0,w=[];for(;m<e;){c=f();let T=c.slice();w.push(T),m+=c.length}return tr(...w)};return(m,w)=>{u(),h(m);let T;for(;!(T=w(p()));)h();return u(),T}}function pn(r,e={},t={}){if(!r||typeof r!="object")throw new Error("expected valid options object");function n(s,i,a){let c=r[s];if(a&&c===void 0)return;let l=typeof c;if(l!==i||c===null)throw new Error(`param "${s}" is invalid: expected ${i}, got ${l}`)}let o=(s,i)=>Object.entries(s).forEach(([a,c])=>n(a,c,i));o(e,!1),o(t,!0)}function Ii(r){let e=new WeakMap;return(t,...n)=>{let o=e.get(t);if(o!==void 0)return o;let s=r(t,...n);return e.set(t,s),s}}var Gt=BigInt(0),ht=BigInt(1),Ss=BigInt(2),U5=BigInt(3),F5=BigInt(4),$5=BigInt(5),jA=BigInt(7),K5=BigInt(8),QA=BigInt(9),V5=BigInt(16);function qe(r,e){let t=r%e;return t>=Gt?t:e+t}function $e(r,e,t){let n=r;for(;e-- >Gt;)n*=n,n%=t;return n}function M5(r,e){if(r===Gt)throw new Error("invert: expected non-zero number");if(e<=Gt)throw new Error("invert: expected positive modulus, got "+e);let t=qe(r,e),n=e,o=Gt,s=ht,i=ht,a=Gt;for(;t!==Gt;){let l=n/t,d=n%t,u=o-i*l,f=s-a*l;n=t,t=d,o=i,s=a,i=u,a=f}if(n!==ht)throw new Error("invert: does not exist");return qe(o,e)}function O2(r,e,t){if(!r.eql(r.sqr(e),t))throw new Error("Cannot find square root")}function H5(r,e){let t=(r.ORDER+ht)/F5,n=r.pow(e,t);return O2(r,n,e),n}function XA(r,e){let t=(r.ORDER-$5)/K5,n=r.mul(e,Ss),o=r.pow(n,t),s=r.mul(e,o),i=r.mul(r.mul(s,Ss),o),a=r.mul(s,r.sub(i,r.ONE));return O2(r,a,e),a}function ZA(r){let e=Ti(r),t=q5(r),n=t(e,e.neg(e.ONE)),o=t(e,n),s=t(e,e.neg(n)),i=(r+jA)/V5;return(a,c)=>{let l=a.pow(c,i),d=a.mul(l,n),u=a.mul(l,o),f=a.mul(l,s),h=a.eql(a.sqr(d),c),p=a.eql(a.sqr(u),c);l=a.cmov(l,d,h),d=a.cmov(f,u,p);let g=a.eql(a.sqr(d),c),m=a.cmov(l,d,g);return O2(a,m,c),m}}function q5(r){if(r<U5)throw new Error("sqrt is not defined for small field");let e=r-ht,t=0;for(;e%Ss===Gt;)e/=Ss,t++;let n=Ss,o=Ti(r);for(;B5(o,n)===1;)if(n++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(t===1)return H5;let s=o.pow(n,e),i=(e+ht)/Ss;return function(c,l){if(c.is0(l))return l;if(B5(c,l)!==1)throw new Error("Cannot find square root");let d=t,u=c.mul(c.ONE,s),f=c.pow(l,e),h=c.pow(l,i);for(;!c.eql(f,c.ONE);){if(c.is0(f))return c.ZERO;let p=1,g=c.sqr(f);for(;!c.eql(g,c.ONE);)if(p++,g=c.sqr(g),p===d)throw new Error("Cannot find square root");let m=ht<<BigInt(d-p-1),w=c.pow(u,m);d=p,u=c.sqr(w),f=c.mul(f,u),h=c.mul(h,w)}return h}}function JA(r){return r%F5===U5?H5:r%K5===$5?XA:r%V5===QA?ZA(r):q5(r)}var z5=(r,e)=>(qe(r,e)&ht)===ht,eI=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function M2(r){let e={ORDER:"bigint",BYTES:"number",BITS:"number"},t=eI.reduce((n,o)=>(n[o]="function",n),e);return pn(r,t),r}function tI(r,e,t){if(t<Gt)throw new Error("invalid exponent, negatives unsupported");if(t===Gt)return r.ONE;if(t===ht)return e;let n=r.ONE,o=e;for(;t>Gt;)t&ht&&(n=r.mul(n,o)),o=r.sqr(o),t>>=ht;return n}function gc(r,e,t=!1){let n=new Array(e.length).fill(t?r.ZERO:void 0),o=e.reduce((i,a,c)=>r.is0(a)?i:(n[c]=i,r.mul(i,a)),r.ONE),s=r.inv(o);return e.reduceRight((i,a,c)=>r.is0(a)?i:(n[c]=r.mul(i,n[c]),r.mul(i,a)),s),n}function B5(r,e){let t=(r.ORDER-ht)/Ss,n=r.pow(e,t),o=r.eql(n,r.ONE),s=r.eql(n,r.ZERO),i=r.eql(n,r.neg(r.ONE));if(!o&&!s&&!i)throw new Error("invalid Legendre symbol result");return o?1:s?0:-1}function rI(r,e){e!==void 0&&Dt(e);let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}var N2=class{ORDER;BITS;BYTES;isLE;ZERO=Gt;ONE=ht;_lengths;_sqrt;_mod;constructor(e,t={}){if(e<=Gt)throw new Error("invalid field: expected ORDER > 0, got "+e);let n;this.isLE=!1,t!=null&&typeof t=="object"&&(typeof t.BITS=="number"&&(n=t.BITS),typeof t.sqrt=="function"&&(this.sqrt=t.sqrt),typeof t.isLE=="boolean"&&(this.isLE=t.isLE),t.allowedLengths&&(this._lengths=t.allowedLengths?.slice()),typeof t.modFromBytes=="boolean"&&(this._mod=t.modFromBytes));let{nBitLength:o,nByteLength:s}=rI(e,n);if(s>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");this.ORDER=e,this.BITS=o,this.BYTES=s,this._sqrt=void 0,Object.preventExtensions(this)}create(e){return qe(e,this.ORDER)}isValid(e){if(typeof e!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof e);return Gt<=e&&e<this.ORDER}is0(e){return e===Gt}isValidNot0(e){return!this.is0(e)&&this.isValid(e)}isOdd(e){return(e&ht)===ht}neg(e){return qe(-e,this.ORDER)}eql(e,t){return e===t}sqr(e){return qe(e*e,this.ORDER)}add(e,t){return qe(e+t,this.ORDER)}sub(e,t){return qe(e-t,this.ORDER)}mul(e,t){return qe(e*t,this.ORDER)}pow(e,t){return tI(this,e,t)}div(e,t){return qe(e*M5(t,this.ORDER),this.ORDER)}sqrN(e){return e*e}addN(e,t){return e+t}subN(e,t){return e-t}mulN(e,t){return e*t}inv(e){return M5(e,this.ORDER)}sqrt(e){return this._sqrt||(this._sqrt=JA(this.ORDER)),this._sqrt(this,e)}toBytes(e){return this.isLE?pc(e,this.BYTES):Yu(e,this.BYTES)}fromBytes(e,t=!1){ce(e);let{_lengths:n,BYTES:o,isLE:s,ORDER:i,_mod:a}=this;if(n){if(!n.includes(e.length)||e.length>o)throw new Error("Field.fromBytes: expected "+n+" bytes, got "+e.length);let l=new Uint8Array(o);l.set(e,s?0:l.length-e.length),e=l}if(e.length!==o)throw new Error("Field.fromBytes: expected "+o+" bytes, got "+e.length);let c=s?hn(e):Ai(e);if(a&&(c=qe(c,i)),!t&&!this.isValid(c))throw new Error("invalid field element: outside of range 0..ORDER");return c}invertBatch(e){return gc(this,e)}cmov(e,t,n){return n?t:e}};function Ti(r,e={}){return new N2(r,e)}function W5(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=W5(r);return e+Math.ceil(e/2)}function U2(r,e,t=!1){ce(r);let n=r.length,o=W5(e),s=B2(e);if(n<16||n<s||n>1024)throw new Error("expected "+s+"-1024 bytes of input, got "+n);let i=t?hn(r):Ai(r),a=qe(i,e-ht)+ht;return t?pc(a,o):Yu(a,o)}var Ci=BigInt(0),As=BigInt(1);function yc(r,e){let t=e.negate();return r?t:e}function Is(r,e){let t=gc(r.Fp,e.map(n=>n.Z));return e.map((n,o)=>r.fromAffine(n.toAffine(t[o])))}function Q5(r,e){if(!Number.isSafeInteger(r)||r<=0||r>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+r)}function F2(r,e){Q5(r,e);let t=Math.ceil(e/r)+1,n=2**(r-1),o=2**r,s=mc(r),i=BigInt(r);return{windows:t,windowSize:n,mask:s,maxNumber:o,shiftBy:i}}function G5(r,e,t){let{windowSize:n,mask:o,maxNumber:s,shiftBy:i}=t,a=Number(r&o),c=r>>i;a>n&&(a-=s,c+=As);let l=e*n,d=l+Math.abs(a)-1,u=a===0,f=a<0,h=e%2!==0;return{nextN:c,offset:d,isZero:u,isNeg:f,isNegF:h,offsetF:l}}var $2=new WeakMap,X5=new WeakMap;function K2(r){return X5.get(r)||1}function Y5(r){if(r!==Ci)throw new Error("invalid wNAF")}var _i=class{BASE;ZERO;Fn;bits;constructor(e,t){this.BASE=e.BASE,this.ZERO=e.ZERO,this.Fn=e.Fn,this.bits=t}_unsafeLadder(e,t,n=this.ZERO){let o=e;for(;t>Ci;)t&As&&(n=n.add(o)),o=o.double(),t>>=As;return n}precomputeWindow(e,t){let{windows:n,windowSize:o}=F2(t,this.bits),s=[],i=e,a=i;for(let c=0;c<n;c++){a=i,s.push(a);for(let l=1;l<o;l++)a=a.add(i),s.push(a);i=a.double()}return s}wNAF(e,t,n){if(!this.Fn.isValid(n))throw new Error("invalid scalar");let o=this.ZERO,s=this.BASE,i=F2(e,this.bits);for(let a=0;a<i.windows;a++){let{nextN:c,offset:l,isZero:d,isNeg:u,isNegF:f,offsetF:h}=G5(n,a,i);n=c,d?s=s.add(yc(f,t[h])):o=o.add(yc(u,t[l]))}return Y5(n),{p:o,f:s}}wNAFUnsafe(e,t,n,o=this.ZERO){let s=F2(e,this.bits);for(let i=0;i<s.windows&&n!==Ci;i++){let{nextN:a,offset:c,isZero:l,isNeg:d}=G5(n,i,s);if(n=a,!l){let u=t[c];o=o.add(d?u.negate():u)}}return Y5(n),o}getPrecomputes(e,t,n){let o=$2.get(t);return o||(o=this.precomputeWindow(t,e),e!==1&&(typeof n=="function"&&(o=n(o)),$2.set(t,o))),o}cached(e,t,n){let o=K2(e);return this.wNAF(o,this.getPrecomputes(o,e,n),t)}unsafe(e,t,n,o){let s=K2(e);return s===1?this._unsafeLadder(e,t,o):this.wNAFUnsafe(s,this.getPrecomputes(s,e,n),t,o)}createCache(e,t){Q5(t,this.bits),X5.set(e,t),$2.delete(e)}hasCache(e){return K2(e)!==1}};function Z5(r,e,t,n){let o=e,s=r.ZERO,i=r.ZERO;for(;t>Ci||n>Ci;)t&As&&(s=s.add(o)),n&As&&(i=i.add(o)),o=o.double(),t>>=As,n>>=As;return{p1:s,p2:i}}function j5(r,e,t){if(e){if(e.ORDER!==r)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return M2(e),e}else return Ti(r,{isLE:t})}function ju(r,e,t={},n){if(n===void 0&&(n=r==="edwards"),!e||typeof e!="object")throw new Error(`expected valid ${r} CURVE object`);for(let c of["p","n","h"]){let l=e[c];if(!(typeof l=="bigint"&&l>Ci))throw new Error(`CURVE.${c} must be positive bigint`)}let o=j5(e.p,t.Fp,n),s=j5(e.n,t.Fn,n),a=["Gx","Gy","a",r==="weierstrass"?"b":"d"];for(let c of a)if(!o.isValid(e[c]))throw new Error(`CURVE.${c} must be valid field element of CURVE.Fp`);return e=Object.freeze(Object.assign({},e)),{CURVE:e,Fp:o,Fn:s}}function ki(r,e){return function(n){let o=r(n);return{secretKey:o,publicKey:e(o)}}}var ko=BigInt(0),pt=BigInt(1),V2=BigInt(2),nI=BigInt(8);function oI(r,e,t,n){let o=r.sqr(t),s=r.sqr(n),i=r.add(r.mul(e.a,o),s),a=r.add(r.ONE,r.mul(e.d,r.mul(o,s)));return r.eql(i,a)}function J5(r,e={}){let t=ju("edwards",r,e,e.FpFnLE),{Fp:n,Fn:o}=t,s=t.CURVE,{h:i}=s;pn(e,{},{uvRatio:"function"});let a=V2<<BigInt(o.BYTES*8)-pt,c=m=>n.create(m),l=e.uvRatio||((m,w)=>{try{return{isValid:!0,value:n.sqrt(n.div(m,w))}}catch{return{isValid:!1,value:ko}}});if(!oI(n,s,s.Gx,s.Gy))throw new Error("bad curve params: generator point");function d(m,w,T=!1){let I=T?pt:ko;return _o("coordinate "+m,w,I,a),w}function u(m){if(!(m instanceof p))throw new Error("EdwardsPoint expected")}let f=Ii((m,w)=>{let{X:T,Y:I,Z:D}=m,F=m.is0();w==null&&(w=F?nI:n.inv(D));let $=c(T*w),W=c(I*w),S=n.mul(D,w);if(F)return{x:ko,y:pt};if(S!==pt)throw new Error("invZ was invalid");return{x:$,y:W}}),h=Ii(m=>{let{a:w,d:T}=s;if(m.is0())throw new Error("bad point: ZERO");let{X:I,Y:D,Z:F,T:$}=m,W=c(I*I),S=c(D*D),x=c(F*F),L=c(x*x),B=c(W*w),P=c(x*c(B+S)),v=c(L+c(T*c(W*S)));if(P!==v)throw new Error("bad point: equation left != right (1)");let E=c(I*D),b=c(F*$);if(E!==b)throw new Error("bad point: equation left != right (2)");return!0});class p{static BASE=new p(s.Gx,s.Gy,pt,c(s.Gx*s.Gy));static ZERO=new p(ko,pt,pt,ko);static Fp=n;static Fn=o;X;Y;Z;T;constructor(w,T,I,D){this.X=d("x",w),this.Y=d("y",T),this.Z=d("z",I,!0),this.T=d("t",D),Object.freeze(this)}static CURVE(){return s}static fromAffine(w){if(w instanceof p)throw new Error("extended point not allowed");let{x:T,y:I}=w||{};return d("x",T),d("y",I),new p(T,I,pt,c(T*I))}static fromBytes(w,T=!1){let I=n.BYTES,{a:D,d:F}=s;w=vs(ce(w,I,"point")),Vn(T,"zip215");let $=vs(w),W=w[I-1];$[I-1]=W&-129;let S=hn($),x=T?a:n.ORDER;_o("point.y",S,ko,x);let L=c(S*S),B=c(L-pt),P=c(F*L-D),{isValid:v,value:E}=l(B,P);if(!v)throw new Error("bad point: invalid y coordinate");let b=(E&pt)===pt,C=(W&128)!==0;if(!T&&E===ko&&C)throw new Error("bad point: x=0 and x_0=1");return C!==b&&(E=c(-E)),p.fromAffine({x:E,y:S})}static fromHex(w,T=!1){return p.fromBytes($n(w),T)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(w=8,T=!0){return g.createCache(this,w),T||this.multiply(V2),this}assertValidity(){h(this)}equals(w){u(w);let{X:T,Y:I,Z:D}=this,{X:F,Y:$,Z:W}=w,S=c(T*W),x=c(F*D),L=c(I*W),B=c($*D);return S===x&&L===B}is0(){return this.equals(p.ZERO)}negate(){return new p(c(-this.X),this.Y,this.Z,c(-this.T))}double(){let{a:w}=s,{X:T,Y:I,Z:D}=this,F=c(T*T),$=c(I*I),W=c(V2*c(D*D)),S=c(w*F),x=T+I,L=c(c(x*x)-F-$),B=S+$,P=B-W,v=S-$,E=c(L*P),b=c(B*v),C=c(L*v),M=c(P*B);return new p(E,b,M,C)}add(w){u(w);let{a:T,d:I}=s,{X:D,Y:F,Z:$,T:W}=this,{X:S,Y:x,Z:L,T:B}=w,P=c(D*S),v=c(F*x),E=c(W*I*B),b=c($*L),C=c((D+F)*(S+x)-P-v),M=b-E,O=b+E,k=c(v-T*P),U=c(C*M),K=c(O*k),z=c(C*k),we=c(M*O);return new p(U,K,we,z)}subtract(w){return this.add(w.negate())}multiply(w){if(!o.isValidNot0(w))throw new Error("invalid scalar: expected 1 <= sc < curve.n");let{p:T,f:I}=g.cached(this,w,D=>Is(p,D));return Is(p,[T,I])[0]}multiplyUnsafe(w,T=p.ZERO){if(!o.isValid(w))throw new Error("invalid scalar: expected 0 <= sc < curve.n");return w===ko?p.ZERO:this.is0()||w===pt?this:g.unsafe(this,w,I=>Is(p,I),T)}isSmallOrder(){return this.multiplyUnsafe(i).is0()}isTorsionFree(){return g.unsafe(this,s.n).is0()}toAffine(w){return f(this,w)}clearCofactor(){return i===pt?this:this.multiplyUnsafe(i)}toBytes(){let{x:w,y:T}=this.toAffine(),I=n.toBytes(T);return I[I.length-1]|=w&pt?128:0,I}toHex(){return Fn(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}let g=new _i(p,o.BITS);return p.BASE.precompute(8),p}function e8(r,e,t={}){if(typeof e!="function")throw new Error('"hash" function param is required');pn(t,{},{adjustScalarBytes:"function",randomBytes:"function",domain:"function",prehash:"function",mapToCurve:"function"});let{prehash:n}=t,{BASE:o,Fp:s,Fn:i}=r,a=t.randomBytes||dn,c=t.adjustScalarBytes||(S=>S),l=t.domain||((S,x,L)=>{if(Vn(L,"phflag"),x.length||L)throw new Error("Contexts/pre-hash are not supported");return S});function d(S){return i.create(hn(S))}function u(S){let x=I.secretKey;ce(S,I.secretKey,"secretKey");let L=ce(e(S),2*x,"hashedSecretKey"),B=c(L.slice(0,x)),P=L.slice(x,2*x),v=d(B);return{head:B,prefix:P,scalar:v}}function f(S){let{head:x,prefix:L,scalar:B}=u(S),P=o.multiply(B),v=P.toBytes();return{head:x,prefix:L,scalar:B,point:P,pointBytes:v}}function h(S){return f(S).pointBytes}function p(S=Uint8Array.of(),...x){let L=tr(...x);return d(e(l(L,ce(S,void 0,"context"),!!n)))}function g(S,x,L={}){S=ce(S,void 0,"message"),n&&(S=n(S));let{prefix:B,scalar:P,pointBytes:v}=f(x),E=p(L.context,B,S),b=o.multiply(E).toBytes(),C=p(L.context,b,v,S),M=i.create(E+C*P);if(!i.isValid(M))throw new Error("sign failed: invalid s");let O=tr(b,i.toBytes(M));return ce(O,I.signature,"result")}let m={zip215:!0};function w(S,x,L,B=m){let{context:P,zip215:v}=B,E=I.signature;S=ce(S,E,"signature"),x=ce(x,void 0,"message"),L=ce(L,I.publicKey,"publicKey"),v!==void 0&&Vn(v,"zip215"),n&&(x=n(x));let b=E/2,C=S.subarray(0,b),M=hn(S.subarray(b,E)),O,k,U;try{O=r.fromBytes(L,v),k=r.fromBytes(C,v),U=o.multiplyUnsafe(M)}catch{return!1}if(!v&&O.isSmallOrder())return!1;let K=p(P,k.toBytes(),O.toBytes(),x);return k.add(O.multiplyUnsafe(K)).subtract(U).clearCofactor().is0()}let T=s.BYTES,I={secretKey:T,publicKey:T,signature:2*T,seed:T};function D(S=a(I.seed)){return ce(S,I.seed,"seed")}function F(S){return ys(S)&&S.length===i.BYTES}function $(S,x){try{return!!r.fromBytes(S,x)}catch{return!1}}let W={getExtendedPublicKey:f,randomSecretKey:D,isValidSecretKey:F,isValidPublicKey:$,toMontgomery(S){let{y:x}=r.fromBytes(S),L=I.publicKey,B=L===32;if(!B&&L!==57)throw new Error("only defined for 25519 and 448");let P=B?s.div(pt+x,pt-x):s.div(x-pt,x+pt);return s.toBytes(P)},toMontgomerySecret(S){let x=I.secretKey;ce(S,x);let L=e(S.subarray(0,x));return c(L).subarray(0,x)}};return Object.freeze({keygen:ki(D,h),getPublicKey:h,sign:g,verify:w,utils:W,Point:r,lengths:I})}var wc=BigInt(0),Pi=BigInt(1),Qu=BigInt(2);function sI(r){return pn(r,{adjustScalarBytes:"function",powPminus2:"function"}),Object.freeze({...r})}function t8(r){let e=sI(r),{P:t,type:n,adjustScalarBytes:o,powPminus2:s,randomBytes:i}=e,a=n==="x25519";if(!a&&n!=="x448")throw new Error("invalid type");let c=i||dn,l=a?255:448,d=a?32:56,u=BigInt(a?9:5),f=BigInt(a?121665:39081),h=a?Qu**BigInt(254):Qu**BigInt(447),p=a?BigInt(8)*Qu**BigInt(251)-Pi:BigInt(4)*Qu**BigInt(445)-Pi,g=h+p+Pi,m=E=>qe(E,t),w=T(u);function T(E){return pc(m(E),d)}function I(E){let b=vs(ce(E,d,"uCoordinate"));return a&&(b[31]&=127),m(hn(b))}function D(E){return hn(o(vs(ce(E,d,"scalar"))))}function F(E,b){let C=L(I(b),D(E));if(C===wc)throw new Error("invalid private or public key received");return T(C)}function $(E){return F(E,w)}let W=$,S=F;function x(E,b,C){let M=m(E*(b-C));return b=m(b-M),C=m(C+M),{x_2:b,x_3:C}}function L(E,b){_o("u",E,wc,t),_o("scalar",b,h,g);let C=b,M=E,O=Pi,k=wc,U=E,K=Pi,z=wc;for(let pe=BigInt(l-1);pe>=wc;pe--){let ue=C>>pe&Pi;z^=ue,{x_2:O,x_3:U}=x(z,O,U),{x_2:k,x_3:K}=x(z,k,K),z=ue;let be=O+k,Re=m(be*be),Ze=O-k,Ee=m(Ze*Ze),it=Re-Ee,ui=U+K,Eu=U-K,za=m(Eu*be),x6=m(ui*Ze),v6=za+x6,S6=za-x6;U=m(v6*v6),K=m(M*m(S6*S6)),O=m(Re*Ee),k=m(it*(Re+m(f*it)))}({x_2:O,x_3:U}=x(z,O,U)),{x_2:k,x_3:K}=x(z,k,K);let we=s(k);return m(O*we)}let B={secretKey:d,publicKey:d,seed:d},P=(E=c(d))=>(ce(E,B.seed,"seed"),E),v={randomSecretKey:P};return Object.freeze({keygen:ki(P,W),getSharedSecret:S,getPublicKey:W,scalarMult:F,scalarMultBase:$,utils:v,GuBytes:w.slice(),lengths:B})}var iI=BigInt(1),r8=BigInt(2),aI=BigInt(3),cI=BigInt(5),lI=BigInt(8),Xu=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),uI={p:Xu,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:lI,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function o8(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),s=Xu,a=r*r%s*r%s,c=$e(a,r8,s)*a%s,l=$e(c,iI,s)*r%s,d=$e(l,cI,s)*l%s,u=$e(d,e,s)*d%s,f=$e(u,t,s)*u%s,h=$e(f,n,s)*f%s,p=$e(h,o,s)*h%s,g=$e(p,o,s)*h%s,m=$e(g,e,s)*d%s;return{pow_p_5_8:$e(m,r8,s)*r%s,b2:a}}function s8(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}var n8=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function dI(r,e){let t=Xu,n=qe(e*e*e,t),o=qe(n*n*e,t),s=o8(r*o).pow_p_5_8,i=qe(r*n*s,t),a=qe(e*i*i,t),c=i,l=qe(i*n8,t),d=a===r,u=a===qe(-r,t),f=a===qe(-r*n8,t);return d&&(i=c),(u||f)&&(i=l),z5(i,t)&&(i=qe(-i,t)),{isValid:d||u,value:i}}var fI=J5(uI,{uvRatio:dI});function hI(r){return e8(fI,Co,Object.assign({adjustScalarBytes:s8},r))}var bc=hI({});var Ec=(()=>{let r=Xu;return t8({P:r,type:"x25519",powPminus2:e=>{let{pow_p_5_8:t,b2:n}=o8(e);return qe($e(t,aI,r)*n,r)},adjustScalarBytes:s8})})();var Ts=32,fr=64,H2=32;var Ri,i8=(async()=>{try{return await nt.get().subtle.generateKey({name:"Ed25519"},!0,["sign","verify"]),!0}catch{return!1}})();function a8(){let r=bc.utils.randomSecretKey(),e=bc.getPublicKey(r);return{privateKey:wI(r,e),publicKey:e}}async function pI(r,e){let t;r.length===fr?t=r.subarray(0,32):t=r;let n={crv:"Ed25519",kty:"OKP",x:R(r.subarray(32),"base64url"),d:R(t,"base64url"),ext:!0,key_ops:["sign"]},o=await nt.get().subtle.importKey("jwk",n,{name:"Ed25519"},!0,["sign"]),s=await nt.get().subtle.sign({name:"Ed25519"},o,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(s,0,s.byteLength)}function mI(r,e){let t=r.subarray(0,H2);return bc.sign(e instanceof Uint8Array?e:e.subarray(),t)}async function c8(r,e){return Ri==null&&(Ri=await i8),Ri?pI(r,e):mI(r,e)}async function gI(r,e,t){if(r.buffer instanceof ArrayBuffer){let n=await nt.get().subtle.importKey("raw",r.buffer,{name:"Ed25519"},!1,["verify"]);return await nt.get().subtle.verify({name:"Ed25519"},n,e,t instanceof Uint8Array?t:t.subarray())}throw new TypeError("WebCrypto does not support SharedArrayBuffer for Ed25519 keys")}function yI(r,e,t){return bc.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}async function l8(r,e,t){return Ri==null&&(Ri=await i8),Ri?gI(r,e,t):yI(r,e,t)}function wI(r,e){let t=new Uint8Array(fr);for(let n=0;n<H2;n++)t[n]=r[n],t[H2+n]=e[n];return t}function Li(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var xc=class{type="Ed25519";raw;constructor(e){this.raw=Ni(e,Ts)}toMultihash(){return dt.digest(ft(this))}toCID(){return G.createV1(114,this.toMultihash())}toString(){return De.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}verify(e,t,n){n?.signal?.throwIfAborted();let o=l8(this.raw,t,e);return Li(o)?o.then(s=>(n?.signal?.throwIfAborted(),s)):o}},Di=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=Ni(e,fr),this.publicKey=new xc(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}sign(e,t){t?.signal?.throwIfAborted();let n=c8(this.raw,e);return Li(n)?n.then(o=>(t?.signal?.throwIfAborted(),o)):(t?.signal?.throwIfAborted(),n)}};function q2(r){if(r.length>fr){r=Ni(r,fr+Ts);let n=r.subarray(0,fr),o=r.subarray(fr,r.length);return new Di(n,o)}r=Ni(r,fr);let e=r.subarray(0,fr),t=r.subarray(Ts);return new Di(e,t)}function z2(r){return r=Ni(r,Ts),new xc(r)}async function d8(){let{privateKey:r,publicKey:e}=a8();return new Di(r,e)}function Ni(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new A(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var bI=Math.pow(2,7),EI=Math.pow(2,14),xI=Math.pow(2,21),W2=Math.pow(2,28),G2=Math.pow(2,35),Y2=Math.pow(2,42),j2=Math.pow(2,49),Te=128,Ot=127;function he(r){if(r<bI)return 1;if(r<EI)return 2;if(r<xI)return 3;if(r<W2)return 4;if(r<G2)return 5;if(r<Y2)return 6;if(r<j2)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Oi(r,e,t=0){switch(he(r)){case 8:e[t++]=r&255|Te,r/=128;case 7:e[t++]=r&255|Te,r/=128;case 6:e[t++]=r&255|Te,r/=128;case 5:e[t++]=r&255|Te,r/=128;case 4:e[t++]=r&255|Te,r>>>=7;case 3:e[t++]=r&255|Te,r>>>=7;case 2:e[t++]=r&255|Te,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function vI(r,e,t=0){switch(he(r)){case 8:e.set(t++,r&255|Te),r/=128;case 7:e.set(t++,r&255|Te),r/=128;case 6:e.set(t++,r&255|Te),r/=128;case 5:e.set(t++,r&255|Te),r/=128;case 4:e.set(t++,r&255|Te),r>>>=7;case 3:e.set(t++,r&255|Te),r>>>=7;case 2:e.set(t++,r&255|Te),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function Q2(r,e){let t=r[e],n=0;if(n+=t&Ot,t<Te||(t=r[e+1],n+=(t&Ot)<<7,t<Te)||(t=r[e+2],n+=(t&Ot)<<14,t<Te)||(t=r[e+3],n+=(t&Ot)<<21,t<Te)||(t=r[e+4],n+=(t&Ot)*W2,t<Te)||(t=r[e+5],n+=(t&Ot)*G2,t<Te)||(t=r[e+6],n+=(t&Ot)*Y2,t<Te)||(t=r[e+7],n+=(t&Ot)*j2,t<Te))return n;throw new RangeError("Could not decode varint")}function SI(r,e){let t=r.get(e),n=0;if(n+=t&Ot,t<Te||(t=r.get(e+1),n+=(t&Ot)<<7,t<Te)||(t=r.get(e+2),n+=(t&Ot)<<14,t<Te)||(t=r.get(e+3),n+=(t&Ot)<<21,t<Te)||(t=r.get(e+4),n+=(t&Ot)*W2,t<Te)||(t=r.get(e+5),n+=(t&Ot)*G2,t<Te)||(t=r.get(e+6),n+=(t&Ot)*Y2,t<Te)||(t=r.get(e+7),n+=(t&Ot)*j2,t<Te))return n;throw new RangeError("Could not decode varint")}function Mt(r,e,t=0){return e==null&&(e=Ge(he(r))),e instanceof Uint8Array?Oi(r,e,t):vI(r,e,t)}function hr(r,e=0){return r instanceof Uint8Array?Q2(r,e):SI(r,e)}var X2=new Float32Array([-0]),Po=new Uint8Array(X2.buffer);function f8(r,e,t){X2[0]=r,e[t]=Po[0],e[t+1]=Po[1],e[t+2]=Po[2],e[t+3]=Po[3]}function h8(r,e){return Po[0]=r[e],Po[1]=r[e+1],Po[2]=r[e+2],Po[3]=r[e+3],X2[0]}var Z2=new Float64Array([-0]),Bt=new Uint8Array(Z2.buffer);function p8(r,e,t){Z2[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 m8(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],Z2[0]}var AI=BigInt(Number.MAX_SAFE_INTEGER),II=BigInt(Number.MIN_SAFE_INTEGER),pr=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 Cs;if(e<AI&&e>II)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>g8&&(o=0n,++n>g8&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return Cs;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):Cs}},Cs=new pr(0,0);Cs.toBigInt=function(){return 0n};Cs.zzEncode=Cs.zzDecode=function(){return this};Cs.length=function(){return 1};var g8=4294967296n;function y8(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 w8(r,e,t){if(t-e<1)return"";let o,s=[],i=0,a;for(;e<t;)a=r[e++],a<128?s[i++]=a:a>191&&a<224?s[i++]=(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,s[i++]=55296+(a>>10),s[i++]=56320+(a&1023)):s[i++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,i>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,s)),i=0);return o!=null?(i>0&&o.push(String.fromCharCode.apply(String,s.slice(0,i))),o.join("")):String.fromCharCode.apply(String,s.slice(0,i))}function J2(r,e,t){let n=t,o,s;for(let i=0;i<r.length;++i)o=r.charCodeAt(i),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((s=r.charCodeAt(i+1))&64512)===56320?(o=65536+((o&1023)<<10)+(s&1023),++i,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 Hr(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Zu(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var em=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,Hr(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 Hr(this,4);return Zu(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Hr(this,4);return Zu(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Hr(this,4);let e=h8(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Hr(this,4);let e=m8(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 Hr(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return w8(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Hr(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Hr(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 pr(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 Hr(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 Hr(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 Hr(this,8);let e=Zu(this.buf,this.pos+=4),t=Zu(this.buf,this.pos+=4);return new pr(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=Q2(this.buf,this.pos);return this.pos+=he(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 tm(r){return new em(r instanceof Uint8Array?r:r.subarray())}function te(r,e,t){let n=tm(r);return e.decode(n,void 0,t)}function rm(r){let e=r??8192,t=e>>>1,n,o=e;return function(i){if(i<1||i>t)return Ge(i);o+i>e&&(n=Ge(e),o=0);let a=n.subarray(o,o+=i);return(o&7)!==0&&(o=(o|7)+1),a}}var _s=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function nm(){}var sm=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},TI=rm();function CI(r){return globalThis.Buffer!=null?Ge(r):TI(r)}var Sc=class{len;head;tail;states;constructor(){this.len=0,this.head=new _s(nm,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new _s(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new im((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(Ju,10,pr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=pr.fromBigInt(e);return this._push(Ju,t.length(),t)}uint64Number(e){return this._push(Oi,he(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=pr.fromBigInt(e).zzEncode();return this._push(Ju,t.length(),t)}sint64Number(e){let t=pr.fromNumber(e).zzEncode();return this._push(Ju,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(om,1,e?1:0)}fixed32(e){return this._push(vc,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=pr.fromBigInt(e);return this._push(vc,4,t.lo)._push(vc,4,t.hi)}fixed64Number(e){let t=pr.fromNumber(e);return this._push(vc,4,t.lo)._push(vc,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(f8,4,e)}double(e){return this._push(p8,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(om,1,0):this.uint32(t)._push(kI,t,e)}string(e){let t=y8(e);return t!==0?this.uint32(t)._push(J2,t,e):this._push(om,1,0)}fork(){return this.states=new sm(this),this.head=this.tail=new _s(nm,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 _s(nm,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=CI(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function om(r,e,t){e[t]=r&255}function _I(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var im=class extends _s{next;constructor(e,t){super(_I,e,t),this.next=void 0}};function Ju(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 vc(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 kI(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(Sc.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(PI,e,r),this},Sc.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(RI,e,r),this});function PI(r,e,t){e.set(r,t)}function RI(r,e,t){r.length<40?J2(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(_(r),t)}function am(){return new Sc}function re(r,e){let t=am();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Mi;(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"})(Mi||(Mi={}));function ed(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function ze(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(s,i){let a=e(s);i.int32(a)},n=function(s){let i=s.int32();return e(i)};return ed("enum",Mi.VARINT,t,n)}function ne(r,e){return ed("message",Mi.LENGTH_DELIMITED,r,e)}var Ne=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},Ac=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var Be;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1",r.ECDSA="ECDSA"})(Be||(Be={}));var cm;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1",r[r.ECDSA=3]="ECDSA"})(cm||(cm={}));(function(r){r.codec=()=>ze(cm)})(Be||(Be={}));var mn;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Be.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.Type=Be.codec().decode(t);break}case 2:{s.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(mn||(mn={}));var Ic;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Be.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.Type=Be.codec().decode(t);break}case 2:{s.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ic||(Ic={}));function Yt(r){if(isNaN(r)||r<=0)throw new A("random bytes length must be a Number bigger than 0");return dn(r)}var Cc={};Je(Cc,{MAX_RSA_KEY_SIZE:()=>lm,generateRSAKeyPair:()=>wm,jwkToJWKKeyPair:()=>S8,jwkToPkcs1:()=>OI,jwkToPkix:()=>hm,jwkToRSAPrivateKey:()=>ym,pkcs1MessageToJwk:()=>dm,pkcs1MessageToRSAPrivateKey:()=>td,pkcs1ToJwk:()=>NI,pkcs1ToRSAPrivateKey:()=>pm,pkixMessageToJwk:()=>fm,pkixMessageToRSAPublicKey:()=>gm,pkixToJwk:()=>MI,pkixToRSAPublicKey:()=>mm});var Bi=class{type="RSA";jwk;_raw;_multihash;constructor(e,t){this.jwk=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=Cc.jwkToPkix(this.jwk)),this._raw}toMultihash(){return this._multihash}toCID(){return G.createV1(114,this._multihash)}toString(){return De.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}verify(e,t,n){return v8(this.jwk,t,e,n)}},Tc=class{type="RSA";jwk;_raw;publicKey;constructor(e,t){this.jwk=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=Cc.jwkToPkcs1(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}sign(e,t){return x8(this.jwk,e,t)}};var lm=8192,um=18,LI=1062,DI=Uint8Array.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);function NI(r){let e=Ir(r);return dm(e)}function dm(r){return{n:R(r[1],"base64url"),e:R(r[2],"base64url"),d:R(r[3],"base64url"),p:R(r[4],"base64url"),q:R(r[5],"base64url"),dp:R(r[6],"base64url"),dq:R(r[7],"base64url"),qi:R(r[8],"base64url"),kty:"RSA"}}function OI(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 A("JWK was missing components");return Kr([Wt(Uint8Array.from([0])),Wt(_(r.n,"base64url")),Wt(_(r.e,"base64url")),Wt(_(r.d,"base64url")),Wt(_(r.p,"base64url")),Wt(_(r.q,"base64url")),Wt(_(r.dp,"base64url")),Wt(_(r.dq,"base64url")),Wt(_(r.qi,"base64url"))]).subarray()}function MI(r){let e=Ir(r,{offset:0});return fm(e)}function fm(r){let e=Ir(r[1],{offset:0});return{kty:"RSA",n:R(e[0],"base64url"),e:R(e[1],"base64url")}}function hm(r){if(r.n==null||r.e==null)throw new A("JWK was missing components");return Kr([DI,lc(Kr([Wt(_(r.n,"base64url")),Wt(_(r.e,"base64url"))]))]).subarray()}function pm(r){let e=Ir(r);return td(e)}function td(r){let e=dm(r);return ym(e)}function mm(r,e){if(r.byteLength>=LI)throw new Nn("Key size is too large");let t=Ir(r,{offset:0});return gm(t,r,e)}function gm(r,e,t){let n=fm(r);if(t==null){let o=Tr(mn.encode({Type:Be.RSA,Data:e}));t=zt(um,o)}return new Bi(n,t)}function ym(r){if(I8(r)>lm)throw new A("Key size is too large");let e=S8(r),t=Tr(mn.encode({Type:Be.RSA,Data:hm(e.publicKey)})),n=zt(um,t);return new Tc(e.privateKey,new Bi(e.publicKey,n))}async function wm(r){if(r>lm)throw new A("Key size is too large");let e=await A8(r),t=Tr(mn.encode({Type:Be.RSA,Data:hm(e.publicKey)})),n=zt(um,t);return new Tc(e.privateKey,new Bi(e.publicKey,n))}function S8(r){if(r==null)throw new A("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}async function A8(r,e){let t=await nt.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]);e?.signal?.throwIfAborted();let n=await BI(t,e);return{privateKey:n[0],publicKey:n[1]}}async function x8(r,e,t){let n=await nt.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]);t?.signal?.throwIfAborted();let o=await nt.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},n,e instanceof Uint8Array?e:e.subarray());return t?.signal?.throwIfAborted(),new Uint8Array(o,0,o.byteLength)}async function v8(r,e,t,n){let o=await nt.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);n?.signal?.throwIfAborted();let s=await nt.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},o,e,t instanceof Uint8Array?t:t.subarray());return n?.signal?.throwIfAborted(),s}async function BI(r,e){if(r.privateKey==null||r.publicKey==null)throw new A("Private and public key are required");let t=await Promise.all([nt.get().subtle.exportKey("jwk",r.privateKey),nt.get().subtle.exportKey("jwk",r.publicKey)]);return e?.signal?.throwIfAborted(),t}function I8(r){if(r.kty!=="RSA")throw new A("invalid key type");if(r.n==null)throw new A("invalid key modulus");return _(r.n,"base64url").length*8}var rd=class{oHash;iHash;blockLen;outputLen;finished=!1;destroyed=!1;constructor(e,t){if(Un(e),ce(t,void 0,"key"),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 n=this.blockLen,o=new Uint8Array(n);o.set(t.length>n?e.create().update(t).digest():t);for(let s=0;s<o.length;s++)o[s]^=54;this.iHash.update(o),this.oHash=e.create();for(let s=0;s<o.length;s++)o[s]^=106;this.oHash.update(o),Nt(o)}update(e){return Si(this),this.iHash.update(e),this}digestInto(e){Si(this),ce(e,this.outputLen,"output"),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||=Object.create(Object.getPrototypeOf(this),{});let{oHash:t,iHash:n,finished:o,destroyed:s,blockLen:i,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=s,e.blockLen=i,e.outputLen=a,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},Ro=(r,e,t)=>new rd(r,e).update(t).digest();Ro.create=(r,e)=>new rd(r,e);var T8=(r,e)=>(r+(r>=0?e:-e)/C8)/e;function UI(r,e,t){let[[n,o],[s,i]]=e,a=T8(i*r,t),c=T8(-o*r,t),l=r-a*n-c*s,d=-a*o-c*i,u=l<qn,f=d<qn;u&&(l=-l),f&&(d=-d);let h=mc(Math.ceil(D2(t)/2))+Ui;if(l<qn||l>=h||d<qn||d>=h)throw new Error("splitScalar (endomorphism): failed, k="+r);return{k1neg:u,k1:l,k2neg:f,k2:d}}function Em(r){if(!["compact","recovered","der"].includes(r))throw new Error('Signature format must be "compact", "recovered", or "der"');return r}function bm(r,e){let t={};for(let n of Object.keys(e))t[n]=r[n]===void 0?e[n]:r[n];return Vn(t.lowS,"lowS"),Vn(t.prehash,"prehash"),t.format!==void 0&&Em(t.format),t}var xm=class extends Error{constructor(e=""){super(e)}},Lo={Err:xm,_tlv:{encode:(r,e)=>{let{Err:t}=Lo;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=hc(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let s=n>127?hc(o.length/2|128):"";return hc(r)+s+o+e},decode(r,e){let{Err:t}=Lo,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++],s=!!(o&128),i=0;if(!s)i=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 d of l)i=i<<8|d;if(n+=c,i<128)throw new t("tlv.decode(long): not minimal encoding")}let a=e.subarray(n,n+i);if(a.length!==i)throw new t("tlv.decode: wrong value length");return{v:a,l:e.subarray(n+i)}}},_int:{encode(r){let{Err:e}=Lo;if(r<qn)throw new e("integer: negative integers are not allowed");let t=hc(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}=Lo;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 Ai(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Lo,o=ce(r,void 0,"signature"),{v:s,l:i}=n.decode(48,o);if(i.length)throw new e("invalid signature: left bytes after parsing");let{v:a,l:c}=n.decode(2,s),{v:l,l:d}=n.decode(2,c);if(d.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}=Lo,n=e.encode(2,t.encode(r.r)),o=e.encode(2,t.encode(r.s)),s=n+o;return e.encode(48,s)}},qn=BigInt(0),Ui=BigInt(1),C8=BigInt(2),nd=BigInt(3),FI=BigInt(4);function _8(r,e={}){let t=ju("weierstrass",r,e),{Fp:n,Fn:o}=t,s=t.CURVE,{h:i,n:a}=s;pn(e,{},{allowInfinityPoint:"boolean",clearCofactor:"function",isTorsionFree:"function",fromBytes:"function",toBytes:"function",endo:"object"});let{endo:c}=e;if(c&&(!n.is0(s.a)||typeof c.beta!="bigint"||!Array.isArray(c.basises)))throw new Error('invalid endo: expected "beta": bigint and "basises": array');let l=P8(n,o);function d(){if(!n.isOdd)throw new Error("compression is not supported: Field does not have .isOdd()")}function u(P,v,E){let{x:b,y:C}=v.toAffine(),M=n.toBytes(b);if(Vn(E,"isCompressed"),E){d();let O=!n.isOdd(C);return tr(k8(O),M)}else return tr(Uint8Array.of(4),M,n.toBytes(C))}function f(P){ce(P,void 0,"Point");let{publicKey:v,publicKeyUncompressed:E}=l,b=P.length,C=P[0],M=P.subarray(1);if(b===v&&(C===2||C===3)){let O=n.fromBytes(M);if(!n.isValid(O))throw new Error("bad point: is not on curve, wrong x");let k=g(O),U;try{U=n.sqrt(k)}catch(we){let pe=we instanceof Error?": "+we.message:"";throw new Error("bad point: is not on curve, sqrt error"+pe)}d();let K=n.isOdd(U);return(C&1)===1!==K&&(U=n.neg(U)),{x:O,y:U}}else if(b===E&&C===4){let O=n.BYTES,k=n.fromBytes(M.subarray(0,O)),U=n.fromBytes(M.subarray(O,O*2));if(!m(k,U))throw new Error("bad point: is not on curve");return{x:k,y:U}}else throw new Error(`bad point: got length ${b}, expected compressed=${v} or uncompressed=${E}`)}let h=e.toBytes||u,p=e.fromBytes||f;function g(P){let v=n.sqr(P),E=n.mul(v,P);return n.add(n.add(E,n.mul(P,s.a)),s.b)}function m(P,v){let E=n.sqr(v),b=g(P);return n.eql(E,b)}if(!m(s.Gx,s.Gy))throw new Error("bad curve params: generator point");let w=n.mul(n.pow(s.a,nd),FI),T=n.mul(n.sqr(s.b),BigInt(27));if(n.is0(n.add(w,T)))throw new Error("bad curve params: a or b");function I(P,v,E=!1){if(!n.isValid(v)||E&&n.is0(v))throw new Error(`bad point coordinate ${P}`);return v}function D(P){if(!(P instanceof x))throw new Error("Weierstrass Point expected")}function F(P){if(!c||!c.basises)throw new Error("no endo");return UI(P,c.basises,o.ORDER)}let $=Ii((P,v)=>{let{X:E,Y:b,Z:C}=P;if(n.eql(C,n.ONE))return{x:E,y:b};let M=P.is0();v==null&&(v=M?n.ONE:n.inv(C));let O=n.mul(E,v),k=n.mul(b,v),U=n.mul(C,v);if(M)return{x:n.ZERO,y:n.ZERO};if(!n.eql(U,n.ONE))throw new Error("invZ was invalid");return{x:O,y:k}}),W=Ii(P=>{if(P.is0()){if(e.allowInfinityPoint&&!n.is0(P.Y))return;throw new Error("bad point: ZERO")}let{x:v,y:E}=P.toAffine();if(!n.isValid(v)||!n.isValid(E))throw new Error("bad point: x or y not field elements");if(!m(v,E))throw new Error("bad point: equation left != right");if(!P.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});function S(P,v,E,b,C){return E=new x(n.mul(E.X,P),E.Y,E.Z),v=yc(b,v),E=yc(C,E),v.add(E)}class x{static BASE=new x(s.Gx,s.Gy,n.ONE);static ZERO=new x(n.ZERO,n.ONE,n.ZERO);static Fp=n;static Fn=o;X;Y;Z;constructor(v,E,b){this.X=I("x",v),this.Y=I("y",E,!0),this.Z=I("z",b),Object.freeze(this)}static CURVE(){return s}static fromAffine(v){let{x:E,y:b}=v||{};if(!v||!n.isValid(E)||!n.isValid(b))throw new Error("invalid affine point");if(v instanceof x)throw new Error("projective point not allowed");return n.is0(E)&&n.is0(b)?x.ZERO:new x(E,b,n.ONE)}static fromBytes(v){let E=x.fromAffine(p(ce(v,void 0,"point")));return E.assertValidity(),E}static fromHex(v){return x.fromBytes($n(v))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(v=8,E=!0){return B.createCache(this,v),E||this.multiply(nd),this}assertValidity(){W(this)}hasEvenY(){let{y:v}=this.toAffine();if(!n.isOdd)throw new Error("Field doesn't support isOdd");return!n.isOdd(v)}equals(v){D(v);let{X:E,Y:b,Z:C}=this,{X:M,Y:O,Z:k}=v,U=n.eql(n.mul(E,k),n.mul(M,C)),K=n.eql(n.mul(b,k),n.mul(O,C));return U&&K}negate(){return new x(this.X,n.neg(this.Y),this.Z)}double(){let{a:v,b:E}=s,b=n.mul(E,nd),{X:C,Y:M,Z:O}=this,k=n.ZERO,U=n.ZERO,K=n.ZERO,z=n.mul(C,C),we=n.mul(M,M),pe=n.mul(O,O),ue=n.mul(C,M);return ue=n.add(ue,ue),K=n.mul(C,O),K=n.add(K,K),k=n.mul(v,K),U=n.mul(b,pe),U=n.add(k,U),k=n.sub(we,U),U=n.add(we,U),U=n.mul(k,U),k=n.mul(ue,k),K=n.mul(b,K),pe=n.mul(v,pe),ue=n.sub(z,pe),ue=n.mul(v,ue),ue=n.add(ue,K),K=n.add(z,z),z=n.add(K,z),z=n.add(z,pe),z=n.mul(z,ue),U=n.add(U,z),pe=n.mul(M,O),pe=n.add(pe,pe),z=n.mul(pe,ue),k=n.sub(k,z),K=n.mul(pe,we),K=n.add(K,K),K=n.add(K,K),new x(k,U,K)}add(v){D(v);let{X:E,Y:b,Z:C}=this,{X:M,Y:O,Z:k}=v,U=n.ZERO,K=n.ZERO,z=n.ZERO,we=s.a,pe=n.mul(s.b,nd),ue=n.mul(E,M),be=n.mul(b,O),Re=n.mul(C,k),Ze=n.add(E,b),Ee=n.add(M,O);Ze=n.mul(Ze,Ee),Ee=n.add(ue,be),Ze=n.sub(Ze,Ee),Ee=n.add(E,C);let it=n.add(M,k);return Ee=n.mul(Ee,it),it=n.add(ue,Re),Ee=n.sub(Ee,it),it=n.add(b,C),U=n.add(O,k),it=n.mul(it,U),U=n.add(be,Re),it=n.sub(it,U),z=n.mul(we,Ee),U=n.mul(pe,Re),z=n.add(U,z),U=n.sub(be,z),z=n.add(be,z),K=n.mul(U,z),be=n.add(ue,ue),be=n.add(be,ue),Re=n.mul(we,Re),Ee=n.mul(pe,Ee),be=n.add(be,Re),Re=n.sub(ue,Re),Re=n.mul(we,Re),Ee=n.add(Ee,Re),ue=n.mul(be,Ee),K=n.add(K,ue),ue=n.mul(it,Ee),U=n.mul(Ze,U),U=n.sub(U,ue),ue=n.mul(Ze,be),z=n.mul(it,z),z=n.add(z,ue),new x(U,K,z)}subtract(v){return this.add(v.negate())}is0(){return this.equals(x.ZERO)}multiply(v){let{endo:E}=e;if(!o.isValidNot0(v))throw new Error("invalid scalar: out of range");let b,C,M=O=>B.cached(this,O,k=>Is(x,k));if(E){let{k1neg:O,k1:k,k2neg:U,k2:K}=F(v),{p:z,f:we}=M(k),{p:pe,f:ue}=M(K);C=we.add(ue),b=S(E.beta,z,pe,O,U)}else{let{p:O,f:k}=M(v);b=O,C=k}return Is(x,[b,C])[0]}multiplyUnsafe(v){let{endo:E}=e,b=this;if(!o.isValid(v))throw new Error("invalid scalar: out of range");if(v===qn||b.is0())return x.ZERO;if(v===Ui)return b;if(B.hasCache(this))return this.multiply(v);if(E){let{k1neg:C,k1:M,k2neg:O,k2:k}=F(v),{p1:U,p2:K}=Z5(x,b,M,k);return S(E.beta,U,K,C,O)}else return B.unsafe(b,v)}toAffine(v){return $(this,v)}isTorsionFree(){let{isTorsionFree:v}=e;return i===Ui?!0:v?v(x,this):B.unsafe(this,a).is0()}clearCofactor(){let{clearCofactor:v}=e;return i===Ui?this:v?v(x,this):this.multiplyUnsafe(i)}isSmallOrder(){return this.multiplyUnsafe(i).is0()}toBytes(v=!0){return Vn(v,"isCompressed"),this.assertValidity(),h(x,this,v)}toHex(v=!0){return Fn(this.toBytes(v))}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}let L=o.BITS,B=new _i(x,e.endo?Math.ceil(L/2):L);return x.BASE.precompute(8),x}function k8(r){return Uint8Array.of(r?2:3)}function P8(r,e){return{secretKey:e.BYTES,publicKey:1+r.BYTES,publicKeyUncompressed:1+2*r.BYTES,publicKeyHasPrefix:!0,signature:2*e.BYTES}}function $I(r,e={}){let{Fn:t}=r,n=e.randomBytes||dn,o=Object.assign(P8(r.Fp,t),{seed:B2(t.ORDER)});function s(h){try{let p=t.fromBytes(h);return t.isValidNot0(p)}catch{return!1}}function i(h,p){let{publicKey:g,publicKeyUncompressed:m}=o;try{let w=h.length;return p===!0&&w!==g||p===!1&&w!==m?!1:!!r.fromBytes(h)}catch{return!1}}function a(h=n(o.seed)){return U2(ce(h,o.seed,"seed"),t.ORDER)}function c(h,p=!0){return r.BASE.multiply(t.fromBytes(h)).toBytes(p)}function l(h){let{secretKey:p,publicKey:g,publicKeyUncompressed:m}=o;if(!ys(h)||"_lengths"in t&&t._lengths||p===g)return;let w=ce(h,void 0,"key").length;return w===g||w===m}function d(h,p,g=!0){if(l(h)===!0)throw new Error("first arg must be private key");if(l(p)===!1)throw new Error("second arg must be public key");let m=t.fromBytes(h);return r.fromBytes(p).multiply(m).toBytes(g)}let u={isValidSecretKey:s,isValidPublicKey:i,randomSecretKey:a},f=ki(a,c);return Object.freeze({getPublicKey:c,getSharedSecret:d,keygen:f,Point:r,utils:u,lengths:o})}function R8(r,e,t={}){Un(e),pn(t,{},{hmac:"function",lowS:"boolean",randomBytes:"function",bits2int:"function",bits2int_modN:"function"}),t=Object.assign({},t);let n=t.randomBytes||dn,o=t.hmac||((E,b)=>Ro(e,E,b)),{Fp:s,Fn:i}=r,{ORDER:a,BITS:c}=i,{keygen:l,getPublicKey:d,getSharedSecret:u,utils:f,lengths:h}=$I(r,t),p={prehash:!0,lowS:typeof t.lowS=="boolean"?t.lowS:!0,format:"compact",extraEntropy:!1},g=a*C8<s.ORDER;function m(E){let b=a>>Ui;return E>b}function w(E,b){if(!i.isValidNot0(b))throw new Error(`invalid signature ${E}: out of range 1..Point.Fn.ORDER`);return b}function T(){if(g)throw new Error('"recovered" sig type is not supported for cofactor >2 curves')}function I(E,b){Em(b);let C=h.signature,M=b==="compact"?C:b==="recovered"?C+1:void 0;return ce(E,M)}class D{r;s;recovery;constructor(b,C,M){if(this.r=w("r",b),this.s=w("s",C),M!=null){if(T(),![0,1,2,3].includes(M))throw new Error("invalid recovery id");this.recovery=M}Object.freeze(this)}static fromBytes(b,C=p.format){I(b,C);let M;if(C==="der"){let{r:K,s:z}=Lo.toSig(ce(b));return new D(K,z)}C==="recovered"&&(M=b[0],C="compact",b=b.subarray(1));let O=h.signature/2,k=b.subarray(0,O),U=b.subarray(O,O*2);return new D(i.fromBytes(k),i.fromBytes(U),M)}static fromHex(b,C){return this.fromBytes($n(b),C)}assertRecovery(){let{recovery:b}=this;if(b==null)throw new Error("invalid recovery id: must be present");return b}addRecoveryBit(b){return new D(this.r,this.s,b)}recoverPublicKey(b){let{r:C,s:M}=this,O=this.assertRecovery(),k=O===2||O===3?C+a:C;if(!s.isValid(k))throw new Error("invalid recovery id: sig.r+curve.n != R.x");let U=s.toBytes(k),K=r.fromBytes(tr(k8((O&1)===0),U)),z=i.inv(k),we=$(ce(b,void 0,"msgHash")),pe=i.create(-we*z),ue=i.create(M*z),be=r.BASE.multiplyUnsafe(pe).add(K.multiplyUnsafe(ue));if(be.is0())throw new Error("invalid recovery: point at infinify");return be.assertValidity(),be}hasHighS(){return m(this.s)}toBytes(b=p.format){if(Em(b),b==="der")return $n(Lo.hexFromSig(this));let{r:C,s:M}=this,O=i.toBytes(C),k=i.toBytes(M);return b==="recovered"?(T(),tr(Uint8Array.of(this.assertRecovery()),O,k)):tr(O,k)}toHex(b){return Fn(this.toBytes(b))}}let F=t.bits2int||function(b){if(b.length>8192)throw new Error("input is too large");let C=Ai(b),M=b.length*8-c;return M>0?C>>BigInt(M):C},$=t.bits2int_modN||function(b){return i.create(F(b))},W=mc(c);function S(E){return _o("num < 2^"+c,E,qn,W),i.toBytes(E)}function x(E,b){return ce(E,void 0,"message"),b?ce(e(E),void 0,"prehashed message"):E}function L(E,b,C){let{lowS:M,prehash:O,extraEntropy:k}=bm(C,p);E=x(E,O);let U=$(E),K=i.fromBytes(b);if(!i.isValidNot0(K))throw new Error("invalid private key");let z=[S(K),S(U)];if(k!=null&&k!==!1){let be=k===!0?n(h.secretKey):k;z.push(ce(be,void 0,"extraEntropy"))}let we=tr(...z),pe=U;function ue(be){let Re=F(be);if(!i.isValidNot0(Re))return;let Ze=i.inv(Re),Ee=r.BASE.multiply(Re).toAffine(),it=i.create(Ee.x);if(it===qn)return;let ui=i.create(Ze*i.create(pe+it*K));if(ui===qn)return;let Eu=(Ee.x===it?0:2)|Number(Ee.y&Ui),za=ui;return M&&m(ui)&&(za=i.neg(ui),Eu^=1),new D(it,za,g?void 0:Eu)}return{seed:we,k2sig:ue}}function B(E,b,C={}){let{seed:M,k2sig:O}=L(E,b,C);return O5(e.outputLen,i.BYTES,o)(M,O).toBytes(C.format)}function P(E,b,C,M={}){let{lowS:O,prehash:k,format:U}=bm(M,p);if(C=ce(C,void 0,"publicKey"),b=x(b,k),!ys(E)){let K=E instanceof D?", use sig.toBytes()":"";throw new Error("verify expects Uint8Array signature"+K)}I(E,U);try{let K=D.fromBytes(E,U),z=r.fromBytes(C);if(O&&K.hasHighS())return!1;let{r:we,s:pe}=K,ue=$(b),be=i.inv(pe),Re=i.create(ue*be),Ze=i.create(we*be),Ee=r.BASE.multiplyUnsafe(Re).add(z.multiplyUnsafe(Ze));return Ee.is0()?!1:i.create(Ee.x)===we}catch{return!1}}function v(E,b,C={}){let{prehash:M}=bm(C,p);return b=x(b,M),D.fromBytes(E,"recovered").recoverPublicKey(b).toBytes()}return Object.freeze({keygen:l,getPublicKey:d,getSharedSecret:u,utils:f,lengths:h,Point:r,sign:B,verify:P,recoverPublicKey:v,Signature:D,hash:e})}var Sm={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt(1),a:BigInt(0),b:BigInt(7),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")},KI={beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),basises:[[BigInt("0x3086d221a7d46bcde86c90e49284eb15"),-BigInt("0xe4437ed6010e88286f547fa90abfe4c3")],[BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),BigInt("0x3086d221a7d46bcde86c90e49284eb15")]]};var L8=BigInt(2);function VI(r){let e=Sm.p,t=BigInt(3),n=BigInt(6),o=BigInt(11),s=BigInt(22),i=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%e,d=l*l*r%e,u=$e(d,t,e)*d%e,f=$e(u,t,e)*d%e,h=$e(f,L8,e)*l%e,p=$e(h,o,e)*h%e,g=$e(p,s,e)*p%e,m=$e(g,a,e)*g%e,w=$e(m,c,e)*m%e,T=$e(w,a,e)*g%e,I=$e(T,t,e)*d%e,D=$e(I,i,e)*p%e,F=$e(D,n,e)*l%e,$=$e(F,L8,e);if(!vm.eql(vm.sqr($),r))throw new Error("Cannot find square root");return $}var vm=Ti(Sm.p,{sqrt:VI}),HI=_8(Sm,{Fp:vm,endo:KI}),qr=R8(HI,Tr);var D8=32;function N8(r,e,t){let n=We.digest(e instanceof Uint8Array?e:e.subarray());if(Li(n))return n.then(({digest:o})=>(t?.signal?.throwIfAborted(),qr.sign(o,r,{prehash:!1,format:"der"}))).catch(o=>{throw o.name==="AbortError"?o:new sc(String(o))});try{return qr.sign(n.digest,r,{prehash:!1,format:"der"})}catch(o){throw new sc(String(o))}}function O8(r,e,t,n){let o=We.digest(t instanceof Uint8Array?t:t.subarray());if(Li(o))return o.then(({digest:s})=>(n?.signal?.throwIfAborted(),qr.verify(e,s,r,{prehash:!1,format:"der"}))).catch(s=>{throw s.name==="AbortError"?s:new ic(String(s))});try{return n?.signal?.throwIfAborted(),qr.verify(e,o.digest,r,{prehash:!1,format:"der"})}catch(s){throw new ic(String(s))}}var _c=class{type="secp256k1";raw;_key;constructor(e){this._key=U8(e),this.raw=M8(this._key)}toMultihash(){return dt.digest(ft(this))}toCID(){return G.createV1(114,this.toMultihash())}toString(){return De.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}verify(e,t,n){return O8(this._key,t,e,n)}},kc=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=B8(e),this.publicKey=new _c(t??F8(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}sign(e,t){return N8(this.raw,e,t)}};function Am(r){return new kc(r)}function Im(r){return new _c(r)}async function $8(){let r=qI();return new kc(r)}function M8(r){return qr.Point.fromBytes(r).toBytes()}function B8(r){try{return qr.getPublicKey(r,!0),r}catch(e){throw new Wa(String(e))}}function U8(r){try{return qr.Point.fromBytes(r),r}catch(e){throw new Nn(String(e))}}function F8(r){try{return qr.getPublicKey(r,!0)}catch(e){throw new Wa(String(e))}}function qI(){return qr.utils.randomSecretKey()}async function od(r,e){if(r==="Ed25519")return d8();if(r==="secp256k1")return $8();if(r==="RSA")return wm(zI(e));if(r==="ECDSA")return w5(WI(e));throw new Fr}function et(r,e){let{Type:t,Data:n}=mn.decode(r),o=n??new Uint8Array;switch(t){case Be.RSA:return mm(o,e);case Be.Ed25519:return z2(o);case Be.secp256k1:return Im(o);case Be.ECDSA:return v2(o);default:throw new Fr}}function sd(r){let{Type:e,Data:t}=mn.decode(r.digest),n=t??new Uint8Array;switch(e){case Be.Ed25519:return z2(n);case Be.secp256k1:return Im(n);case Be.ECDSA:return v2(n);default:throw new Fr}}function ft(r){return mn.encode({Type:Be[r.type],Data:r.raw})}function K8(r){let e=Ic.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Be.RSA:return pm(t);case Be.Ed25519:return q2(t);case Be.secp256k1:return Am(t);case Be.ECDSA:return h5(t);default:throw new Fr}}function V8(r){if(r.byteLength===fr)return q2(r);if(r.byteLength===D8)return Am(r);let e=Ir(r),t=e[2]?.[0];if(t===o5||t===s5||t===i5)return x2(e);if(e.length>8)return td(e);throw new A("Could not extract private key from raw bytes")}function ks(r){return Ic.encode({Type:Be[r.type],Data:r.raw})}function zI(r){return r==null?2048:parseInt(r,10)}function WI(r){if(r==="P-256"||r==null)return"P-256";if(r==="P-384")return"P-384";if(r==="P-521")return"P-521";throw new A("Unsupported curve, should be P-256, P-384 or P-521")}var Pc=Uint32Array.from([1732584193,4023233417,2562383102,271733878,3285377520]),Do=new Uint32Array(80),Tm=class extends bs{A=Pc[0]|0;B=Pc[1]|0;C=Pc[2]|0;D=Pc[3]|0;E=Pc[4]|0;constructor(){super(64,20,8,!1)}get(){let{A:e,B:t,C:n,D:o,E:s}=this;return[e,t,n,o,s]}set(e,t,n,o,s){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=s|0}process(e,t){for(let c=0;c<16;c++,t+=4)Do[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)Do[c]=Hu(Do[c-3]^Do[c-8]^Do[c-14]^Do[c-16],1);let{A:n,B:o,C:s,D:i,E:a}=this;for(let c=0;c<80;c++){let l,d;c<20?(l=qu(o,s,i),d=1518500249):c<40?(l=o^s^i,d=1859775393):c<60?(l=zu(o,s,i),d=2400959708):(l=o^s^i,d=3395469782);let u=Hu(n,5)+l+a+d+Do[c]|0;a=i,i=s,s=Hu(o,30),o=n,n=u}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,this.set(n,o,s,i,a)}roundClean(){Nt(Do)}destroy(){this.set(0,0,0,0,0),Nt(this.buffer)}},H8=uc(()=>new Tm);function q8(r,e,t,n){Un(r);let o=S5({dkLen:32,asyncTick:10},n),{c:s,dkLen:i,asyncTick:a}=o;if(Dt(s,"c"),Dt(i,"dkLen"),Dt(a,"asyncTick"),s<1)throw new Error("iterations (c) must be >= 1");let c=S2(e,"password"),l=S2(t,"salt"),d=new Uint8Array(i),u=Ro.create(r,c),f=u._cloneInto().update(l);return{c:s,dkLen:i,asyncTick:a,DK:d,PRF:u,PRFSalt:f}}function z8(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),Nt(o),t}function W8(r,e,t,n){let{c:o,dkLen:s,DK:i,PRF:a,PRFSalt:c}=q8(r,e,t,n),l,d=new Uint8Array(4),u=ws(d),f=new Uint8Array(a.outputLen);for(let h=1,p=0;p<s;h++,p+=a.outputLen){let g=i.subarray(p,p+a.outputLen);u.setInt32(0,h,!1),(l=c._cloneInto(l)).update(d).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 w=0;w<g.length;w++)g[w]^=f[w]}}return z8(a,c,i,l,f)}async function id(r,e,t,n){let{c:o,dkLen:s,asyncTick:i,DK:a,PRF:c,PRFSalt:l}=q8(r,e,t,n),d,u=new Uint8Array(4),f=ws(u),h=new Uint8Array(c.outputLen);for(let p=1,g=0;g<s;p++,g+=c.outputLen){let m=a.subarray(g,g+c.outputLen);f.setInt32(0,p,!1),(d=l._cloneInto(d)).update(u).digestInto(h),m.set(h.subarray(0,m.length)),await v5(o-1,i,()=>{c._cloneInto(d).update(h).digestInto(h);for(let w=0;w<m.length;w++)m[w]^=h[w]})}return z8(c,l,a,d,h)}var G8={sha1:H8,"sha2-256":Tr,"sha2-512":Co};function Rc(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(G8).join(" / ");throw new A(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let s=G8[o],i=W8(s,r,e,{c:t,dkLen:n});return rt.encode(i).substring(1)}var Cm={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},Y8={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},j8=new globalThis.TextEncoder;function GI(r,e){let t=Cm[e],n=Y8[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function YI(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=Cm[e],o=Y8[e],s=r;for(;s.length>0;){let i=j8.encodeInto(s,t);s=s.slice(i.read);for(let a=0;a<i.written;a++)o^=BigInt(t[a]),o=BigInt.asUintN(e,o*n)}return o}function _m(r,{size:e=32,utf8Buffer:t}={}){if(!Cm[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 YI(r,e,t);r=j8.encode(r)}return GI(r,e)}var Lc={hash:r=>Number(_m(r,{size:32})),hashV:(r,e)=>jI(Lc.hash(r,e))};function jI(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),_(e,"base16")}var km=64,zr=class{fp;h;seed;constructor(e,t,n,o=2){if(o>km)throw new TypeError("Invalid Fingerprint Size");let s=t.hashV(e,n),i=ae(o);for(let a=0;a<i.length;a++)i[a]=s[a];i.length===0&&(i[0]=7),this.fp=i,this.h=t,this.seed=n}hash(){return this.h.hash(this.fp,this.seed)}equals(e){return e?.fp instanceof Uint8Array?ee(this.fp,e.fp):!1}};function Ps(r,e){return Math.floor(Math.random()*(e-r))+r}var Rs=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof zr))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof zr))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 zr))throw new TypeError("Invalid Fingerprint");let t=Ps(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof zr))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var QI=500,Dc=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??Lc,this.seed=e.seed??Ps(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=_(e));let t=new zr(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 Rs(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new Rs(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let s=[n,o],i=s[Ps(0,s.length-1)];this.buckets[i]==null&&(this.buckets[i]=new Rs(this.bucketSize));for(let a=0;a<QI;a++){let c=this.buckets[i].swap(t);if(c!=null&&(i=(i^c.hash())%this.filterSize,this.buckets[i]==null&&(this.buckets[i]=new Rs(this.bucketSize)),this.buckets[i].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=_(e));let t=new zr(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 s=(n^t.hash())%this.filterSize;return this.buckets[s]?.has(t)??!1}remove(e){typeof e=="string"&&(e=_(e));let t=new zr(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 s=(n^t.hash())%this.filterSize,i=this.buckets[s]?.remove(t)??!1;return i&&this.count--,i}get reliable(){return Math.floor(100*(this.count/this.filterSize))<=90}},XI={1:.5,2:.84,4:.95,8:.98};function ZI(r=.001){return r>.002?2:r>1e-5?4:8}function Q8(r,e=.001){let t=ZI(e),n=XI[t],o=Math.round(r/n),s=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),km);return{filterSize:o,bucketSize:t,fingerprintSize:s}}var ad=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??Lc,this.seed=e.seed??Ps(0,Math.pow(2,10)),this.filterSeries=[new Dc({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=_(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 Dc({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=_(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=_(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 Et(r,e=.001,t){return new ad({...Q8(r,e),...t??{}})}function oe(r){let e=r.getComponents(),t={},n=0;if(e[n]?.name==="ip6zone"&&(t.zone=`${e[n].value}`,n++),e[n].name==="ip4"||e[n].name==="ip6"||e[n].name==="dns"||e[n].name==="dns4"||e[n].name==="dns6"?(t.type=e[n].name,t.host=e[n].value,n++):e[n].name==="dnsaddr"&&(t.type=e[n].name,t.host=`_dnsaddr.${e[n].value}`,n++),(e[n]?.name==="tcp"||e[n]?.name==="udp")&&(t.protocol=e[n].name==="tcp"?"tcp":"udp",t.port=parseInt(`${e[n].value}`),n++),e[n]?.name==="ipcidr"&&(t.type==="ip4"?t.cidr=parseInt(`${e[n].value}`):t.type==="ip6"&&(t.cidr=`${e[n].value}`),n++),t.type==null||t.host==null)throw new A(`Multiaddr ${r} was not an IPv4, IPv6, DNS, DNS4, DNS6 or DNSADDR address`);return e[n]?.name==="tls"&&e[n+1]?.name==="sni"&&(t.sni=e[n+1].value,n+=2),t}var cd=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 s=0,i=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*o)-1;for(;;){let d=this.readAtomically(()=>{let u=this.readChar();if(u===void 0)return;let f=Number.parseInt(u,e);if(!Number.isNaN(f))return f});if(d===void 0)break;if(s*=e,s+=d,s>l||(i+=1,t!==void 0&&i>t))return}if(i!==0)return!n&&c&&i>1?void 0:s})}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 i=this.readSeparator(":",n,()=>this.readIPv4Addr());if(i!==void 0)return t[o]=i[0],t[o+1]=i[1],t[o+2]=i[2],t[o+3]=i[3],[o+4,!0]}let s=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(s===void 0)return[o,!1];t[o]=s>>8,t[o+1]=s&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 s=new Uint8Array(14),i=16-(n+2),[a]=e(s.subarray(0,i));return t.set(s.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var X8=45,JI=15,Fi=new cd;function ld(r){if(!(r.length>JI))return Fi.new(r).parseWith(()=>Fi.readIPv4Addr())}function ud(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>X8))return Fi.new(r).parseWith(()=>Fi.readIPv6Addr())}function $i(r,e=!1){if(r.includes("%")&&(r=r.split("%")[0]),r.length>X8)return;let t=Fi.new(r).parseWith(()=>Fi.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 Z8(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 J8(r,e,t,n){let o=0;for(let s of r)if(!(o<t)){if(o>n)break;if(s!==e[o])return!1;o++}return!0}function Pm(r){switch(r.length){case Ls:return r.join(".");case Ds:{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 e7(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 t7(r){let e="0x";for(let t of r)e+=(t>>4).toString(16)+(t&15).toString(16);return e}var Ls=4,Ds=16,M$=parseInt("0xFFFF",16),eT=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function Nc(r,e){e.length===Ds&&r.length===Ls&&Z8(e,0,11)&&(e=e.slice(12)),e.length===Ls&&r.length===Ds&&J8(r,eT,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 r7(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 Rm(r){let[e,t]=r.split("/");if(!e||!t)throw new Error("Failed to parse given CIDR: "+r);let n=Ls,o=ld(e);if(o==null&&(n=Ds,o=ud(e),o==null))throw new Error("Failed to parse given CIDR: "+r);let s=parseInt(t,10);if(Number.isNaN(s)||String(s).length!==t.length||s<0||s>n*8)throw new Error("Failed to parse given CIDR: "+r);let i=Lm(s,8*n);return{network:Nc(o,i),mask:i}}function Lm(r,e){if(e!==8*Ls&&e!==8*Ds)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 Ns=class{constructor(e,t){if(t==null)({network:this.network,mask:this.mask}=Rm(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 s=$i(t);if(s==null)throw new Error("Failed to parse mask");this.mask=s}else this.mask=Lm(o,8*n.length);this.network=Nc(n,this.mask)}}contains(e){return r7({network:this.network,mask:this.mask},e)}toString(){let e=e7(this.mask),t=e!==-1?String(e):t7(this.mask);return Pm(this.network)+"/"+t}};function n7(r,e){return new Ns(r).contains(e)}function dd(r){try{let e=oe(r);switch(e.type){case"ip6":return n7("2000::/3",e.host);default:return!1}}catch{return!1}}function o7(r){try{let e=oe(r);switch(e.type){case"ip4":return e.host.startsWith("169.254.");case"ip6":return e.host.toLowerCase().startsWith("fe80");default:return!1}}catch{return!1}}function s7(r){return/^127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(r)||/^::1$/.test(r)}function Oc(r){try{let e=oe(r);switch(e.type){case"ip4":case"ip6":return s7(e.host);default:return!1}}catch{return!1}}function xt(r){try{return oe(r),!0}catch{return!1}}function Wr(r){return!!ld(r)}function fd(r){return!!ud(r)}var a7=Ln(i7(),1),tT=["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"],rT=tT.map(r=>new a7.Netmask(r));function Dm(r){for(let e of rT)if(e.contains(r))return!0;return!1}function nT(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function oT(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 Dm(o)}function sT(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function iT(r){let e=r.split(":"),t=e[e.length-1];return Dm(t)}function aT(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 Ki(r){if(Wr(r))return Dm(r);if(nT(r))return oT(r);if(sT(r))return iT(r);if(fd(r))return aT(r)}function Qe(r){try{let e=oe(r);switch(e.type){case"ip4":case"ip6":return Ki(e.host)??!1;default:return e.host==="localhost"}}catch{return!1}}function fe(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var hd=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}},Vi=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new hd(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 hd(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 Nm=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function vt(r={}){return cT(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 cT(r,e){e=e??{};let t=e.onEnd,n=new Vi,o,s,i,a=fe(),c=async()=>{try{return n.isEmpty()?i?{done:!0}:await new Promise((m,w)=>{s=T=>{s=null,n.push(T);try{m(r(n))}catch(I){w(I)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=fe()})}},l=m=>s!=null?s(m):(n.push(m),o),d=m=>(n=new Vi,s!=null?s({error:m}):(n.push({error:m}),o)),u=m=>{if(i)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=>i?o:(i=!0,m!=null?d(m):l({done:!0})),h=()=>(n=new Vi,f(),{done:!0}),p=m=>(f(m),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:h,throw:p,push:u,end:f,get readableLength(){return n.size},onEmpty:async m=>{let w=m?.signal;if(w?.throwIfAborted(),n.isEmpty())return;let T,I;w!=null&&(T=new Promise((D,F)=>{I=()=>{F(new Nm)},w.addEventListener("abort",I)}));try{await Promise.race([a.promise,T])}finally{I!=null&&w!=null&&w?.removeEventListener("abort",I)}}},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:u,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 lT=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 uT(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:d}=lT(r),u=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(g){n(),i(g);return}c.push(p),t.count===c.length&&(n(),s(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)a.includes(h)||d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&s(c)});if(o.cancel=n,typeof t.timeout=="number"){let s=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function Cr(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=uT(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}function zn(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 pd=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}},md=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}},Os=class extends Error{static name="UnexpectedEOFError";name="UnexpectedEOFError"},gd=class extends Error{static name="MaxEarlyStreamsError";name="MaxEarlyStreamsError"},yd=class extends Error{static name="StreamClosedError";name="StreamClosedError"};function dT(r){return r.reason}async function Pe(r,e,t){if(e==null)return r;let n=t?.translateError??dT;if(e.aborted)return r.catch(()=>{}),Promise.reject(n(e));let o;try{return await Promise.race([r,new Promise((s,i)=>{o=()=>{i(n(e))},e.addEventListener("abort",o)})])}finally{o!=null&&e.removeEventListener("abort",o)}}var wd=class{deferred;signal;constructor(e){this.signal=e,this.deferred=fe(),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 fT(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var bd=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=fT(),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 wd(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 Pe(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 St=class extends ie{concurrency;maxSize;queue;pending;sort;paused;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,this.paused=!1,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=[],this.emitEmpty=zn(this.emitEmpty.bind(this),1),this.emitIdle=zn(this.emitIdle.bind(this),1)}emitEmpty(){this.size===0&&this.safeDispatchEvent("empty")}emitIdle(){this.running===0&&this.safeDispatchEvent("idle")}pause(){this.paused=!0}resume(){this.paused&&(this.paused=!1,this.tryToStartAnother())}tryToStartAnother(){if(this.paused)return!1;if(this.size===0)return this.emitEmpty(),this.running===0&&this.emitIdle(),!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 md;let n=new bd(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 s=0;s<this.queue.length;s++)if(this.queue[s]===n){this.queue.splice(s,1);break}}throw 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 Cr(this,"empty",e)}async onSizeLessThan(e,t){this.size<e||await Cr(this,"next",{...t,filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await Cr(this,"idle",e)}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=vt({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail)},s=c=>{n(c.detail.error)},i=()=>{n()},a=()=>{n(new Vt("Queue aborted"))};this.addEventListener("completed",o),this.addEventListener("failure",s),this.addEventListener("idle",i),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("failure",s),this.removeEventListener("idle",i),e?.signal?.removeEventListener("abort",a),n()}}};var hT=Math.pow(2,20)*4,No=class extends ie{status;timeline;inactivityTimeout;maxReadBufferLength;maxWriteBufferLength;log;direction;maxMessageSize;readStatus;writeStatus;remoteReadStatus;remoteWriteStatus;writableNeedsDrain;readBuffer;writeBuffer;sendingData;onDrainPromise;constructor(e){super(),this.status="open",this.log=e.log,this.direction=e.direction??"outbound",this.inactivityTimeout=e.inactivityTimeout??12e4,this.maxReadBufferLength=e.maxReadBufferLength??hT,this.maxWriteBufferLength=e.maxWriteBufferLength,this.maxMessageSize=e.maxMessageSize,this.readBuffer=new Q,this.writeBuffer=new Q,this.readStatus="readable",this.remoteReadStatus="readable",this.writeStatus="writable",this.remoteWriteStatus="writable",this.sendingData=!1,this.writableNeedsDrain=!1,this.timeline={open:Date.now()},this.processSendQueue=this.processSendQueue.bind(this);let t=()=>{this.writableNeedsDrain&&(this.log.trace("drain event received, continue sending data"),this.writableNeedsDrain=!1,this.processSendQueue()),this.onDrainPromise?.resolve()};this.addEventListener("drain",t);let n=o=>{this.onDrainPromise?.reject(o.error??new yd)};this.addEventListener("close",n)}get readBufferLength(){return this.readBuffer.byteLength}get writeBufferLength(){return this.writeBuffer.byteLength}async onDrain(e){return this.writableNeedsDrain!==!0?Promise.resolve():(this.onDrainPromise==null&&(this.onDrainPromise=Promise.withResolvers()),Pe(this.onDrainPromise.promise,e?.signal))}async*[Symbol.asyncIterator](){if(this.readStatus!=="readable"&&this.readStatus!=="paused")return;let e=vt(),t=s=>{e.push(s.data)};this.addEventListener("message",t);let n=s=>{e.end(s.error)};this.addEventListener("close",n);let o=()=>{e.end()};this.addEventListener("remoteCloseWrite",o);try{yield*e}finally{this.removeEventListener("message",t),this.removeEventListener("close",n),this.removeEventListener("remoteCloseWrite",o)}}isReadable(){return this.status==="open"}send(e){if(this.writeStatus==="closed"||this.writeStatus==="closing")throw new cn(`Cannot write to a stream that is ${this.writeStatus}`);return this.log.trace("append %d bytes to write buffer",e.byteLength),this.writeBuffer.append(e),this.processSendQueue()}abort(e){if(!(this.status==="aborted"||this.status==="reset"||this.status==="closed")){this.log.error("abort with error - %e",e),this.status="aborted",this.readBuffer.byteLength>0&&this.readBuffer.consume(this.readBuffer.byteLength),this.writeBuffer.byteLength>0&&(this.writeBuffer.consume(this.writeBuffer.byteLength),this.safeDispatchEvent("idle")),this.writeStatus="closed",this.remoteWriteStatus="closed",this.readStatus="closed",this.remoteReadStatus="closed",this.timeline.close=Date.now();try{this.sendReset(e)}catch(t){this.log("failed to send reset to remote - %e",t)}this.dispatchEvent(new Cu(e))}}pause(){if(this.readStatus==="closed"||this.readStatus==="closing")throw new cn("Cannot pause a stream that is closing/closed");this.readStatus!=="paused"&&(this.readStatus="paused",this.sendPause())}resume(){if(this.readStatus==="closed"||this.readStatus==="closing")throw new cn("Cannot resume a stream that is closing/closed");this.readStatus!=="readable"&&(this.readStatus="readable",this.dispatchReadBuffer(),this.sendResume())}push(e){if(this.readStatus==="closed"||this.readStatus==="closing")throw new cn(`Cannot push data onto a stream that is ${this.readStatus}`);if(e.byteLength!==0){if(this.readBuffer.append(e),this.readStatus==="paused"||this.listenerCount("message")===0){this.checkReadBufferLength();return}setTimeout(()=>{this.dispatchReadBuffer()},0)}}unshift(e){if(this.readStatus==="closed"||this.readStatus==="closing")throw new cn(`Cannot push data onto a stream that is ${this.readStatus}`);if(e.byteLength!==0){if(this.readBuffer.prepend(e),this.readStatus==="paused"||this.listenerCount("message")===0){this.checkReadBufferLength();return}setTimeout(()=>{this.dispatchReadBuffer()},0)}}onData(e){if(e.byteLength!==0){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("ignoring data - read status %s",this.readStatus);return}this.readBuffer.append(e),this.dispatchReadBuffer()}}addEventListener(...e){super.addEventListener.apply(this,e),e[0]==="message"&&this.readBuffer.byteLength>0&&queueMicrotask(()=>{this.dispatchReadBuffer()})}onRemoteReset(){this.log("remote reset"),this.status="reset",this.writeStatus="closed",this.remoteWriteStatus="closed",this.remoteReadStatus="closed",this.timeline.close=Date.now(),this.readBuffer.byteLength===0&&(this.readStatus="closed");let e=new fi;this.dispatchEvent(new _u(e))}onTransportClosed(e){this.log("transport closed"),this.readStatus==="readable"&&this.readBuffer.byteLength===0&&(this.log("close readable end after transport closed and read buffer is empty"),this.readStatus="closed"),this.remoteReadStatus!=="closed"&&(this.remoteReadStatus="closed"),this.remoteWriteStatus!=="closed"&&(this.remoteWriteStatus="closed"),this.writeStatus!=="closed"&&(this.writeStatus="closed"),e!=null?this.abort(e):(this.status==="open"||this.status==="closing")&&(this.timeline.close=Date.now(),this.status="closed",this.writeStatus="closed",this.remoteWriteStatus="closed",this.remoteReadStatus="closed",this.dispatchEvent(new xo))}onRemoteCloseWrite(){this.remoteWriteStatus!=="closed"&&(this.log.trace("on remote close write"),this.remoteWriteStatus="closed",this.safeDispatchEvent("remoteCloseWrite"),this.writeStatus==="closed"&&this.onTransportClosed())}onRemoteCloseRead(){this.log.trace("on remote close read"),this.remoteReadStatus="closed",this.writeBuffer.byteLength>0&&(this.writeBuffer.consume(this.writeBuffer.byteLength),this.safeDispatchEvent("idle"))}processSendQueue(){if(this.writableNeedsDrain)return this.log.trace("not processing send queue as drain is required"),this.checkWriteBufferLength(),!1;if(this.writeBuffer.byteLength===0)return this.log.trace("not processing send queue as no bytes to send"),!0;if(this.sendingData)return this.log.trace("not processing send queue as already sending data"),!0;this.sendingData=!0,this.log.trace("processing send queue with %d queued bytes",this.writeBuffer.byteLength);try{let e=!0,t=this.writeBuffer.byteLength,n=0;for(;this.writeBuffer.byteLength>0;){let o=Math.min(this.maxMessageSize??this.writeBuffer.byteLength,this.writeBuffer.byteLength);if(o===0){e=!1;break}let s=this.writeBuffer.sublist(0,o),i=new Q(s);this.writeBuffer.consume(s.byteLength);let a=this.sendData(s);if(e=a.canSendMore,n+=a.sentBytes,a.sentBytes!==i.byteLength&&(i.consume(a.sentBytes),this.writeBuffer.prepend(i)),!e)break}return e||(this.log.trace("sent %d/%d bytes, pausing sending because underlying stream is full, %d bytes left in the write buffer",n,t,this.writeBuffer.byteLength),this.writableNeedsDrain=!0,this.checkWriteBufferLength()),this.writeBuffer.byteLength===0&&this.safeDispatchEvent("idle"),e}finally{this.sendingData=!1}}dispatchReadBuffer(){try{if(this.listenerCount("message")===0){this.log.trace("not dispatching pause buffer as there are no listeners for the message event");return}if(this.readBuffer.byteLength===0){this.log.trace("not dispatching pause buffer as there is no data to dispatch");return}if(this.readStatus==="paused"){this.log.trace("not dispatching pause buffer we are paused");return}if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("dropping %d bytes because the readable end is %s",this.readBuffer.byteLength,this.readStatus),this.readBuffer.consume(this.readBuffer.byteLength);return}let e=this.readBuffer.sublist();this.readBuffer.consume(e.byteLength),this.dispatchEvent(new Tu(e))}finally{this.readBuffer.byteLength===0&&this.remoteWriteStatus==="closed"&&(this.log("close readable end after dispatching read buffer and remote writable end is closed"),this.readStatus="closed"),this.checkReadBufferLength()}}checkReadBufferLength(){this.readBuffer.byteLength>this.maxReadBufferLength&&this.abort(new Ya(`Read buffer length of ${this.readBuffer.byteLength} exceeded limit of ${this.maxReadBufferLength}, read status is ${this.readStatus}`))}checkWriteBufferLength(){this.maxWriteBufferLength!=null&&this.writeBuffer.byteLength>this.maxWriteBufferLength&&this.abort(new Ya(`Write buffer length of ${this.writeBuffer.byteLength} exceeded limit of ${this.maxWriteBufferLength}, write status is ${this.writeStatus}`))}onMuxerNeedsDrain(){this.writableNeedsDrain=!0}onMuxerDrain(){this.safeDispatchEvent("drain")}};var Oo=class extends No{remoteAddr;metricPrefix;metrics;constructor(e){super(e),this.metricPrefix=e.metricPrefix??"",this.metrics=e.metrics,this.remoteAddr=e.remoteAddr,this.addEventListener("close",t=>{this.metrics?.increment({[`${this.metricPrefix}end`]:!0}),t.error!=null?t.local?this.metrics?.increment({[`${this.metricPrefix}abort`]:!0}):this.metrics?.increment({[`${this.metricPrefix}reset`]:!0}):t.local?this.metrics?.increment({[`${this.metricPrefix}_local_close`]:!0}):this.metrics?.increment({[`${this.metricPrefix}_remote_close`]:!0})})}async close(e){this.status==="open"&&(this.status="closing",this.writeStatus="closing",this.remoteWriteStatus="closing",this.remoteReadStatus="closing",(this.sendingData||this.writeBuffer.byteLength>0)&&(this.log("waiting for write queue to become idle before closing writable end of stream, %d unsent bytes",this.writeBuffer.byteLength),await Cr(this,"idle",{...e,rejectionEvents:["close"]})),this.writableNeedsDrain&&(this.log("waiting for write queue to drain before closing writable end of stream, %d unsent bytes",this.writeBuffer.byteLength),await Cr(this,"drain",{...e,rejectionEvents:["close"]})),await this.sendClose(e),this.onTransportClosed())}};function Ed(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Mo=class extends ie{streams;protocol;status;log;maConn;streamOptions;earlyStreams;maxEarlyStreams;metrics;constructor(e,t){super(),this.maConn=e,this.protocol=t.protocol,this.streams=[],this.earlyStreams=[],this.status="open",this.log=e.log.newScope(t.name),this.streamOptions=t.streamOptions,this.maxEarlyStreams=t.maxEarlyStreams??10,this.metrics=t.metrics;let n=i=>{try{this.onData(i.data)}catch(a){this.abort(a),this.maConn.abort(a)}};this.maConn.addEventListener("message",n);let o=()=>{this.log("underlying stream drained, signal %d streams to continue writing",this.streams.length),this.streams.forEach(i=>{i.onMuxerDrain()})};this.maConn.addEventListener("drain",o);let s=()=>{this.log("underlying stream closed with status %s and %d streams",this.status,this.streams.length),this.onTransportClosed()};this.maConn.addEventListener("close",s)}send(e){let t=this.maConn.send(e);return t===!1&&(this.log("underlying stream saturated, signal %d streams to pause writing",this.streams.length),this.streams.forEach(n=>{n.onMuxerNeedsDrain()})),t}async close(e){this.status==="closed"||this.status==="closing"||(this.status="closing",await Pe(Promise.all([...this.streams].map(async t=>{await t.close(e)})),e?.signal),this.status="closed")}abort(e){this.status!=="closed"&&(this.status="closing",[...this.streams].forEach(t=>{t.abort(e)}),this.status="closed")}onTransportClosed(e){this.status="closing";try{[...this.streams].forEach(t=>{t.onTransportClosed(e)})}catch(t){this.abort(t)}this.status="closed"}async createStream(e){if(this.status!=="open")throw new Br;let t=this.onCreateStream({...this.streamOptions,...e});return Ed(t)&&(t=await t),this.streams.push(t),this.cleanUpStream(t),t}onRemoteStream(e){if(this.streams.push(e),this.cleanUpStream(e),this.listenerCount("stream")===0){this.earlyStreams.push(e),this.earlyStreams.length>this.maxEarlyStreams&&this.abort(new gd(`Too many early streams were opened - ${this.earlyStreams.length}/${this.maxEarlyStreams}`));return}this.safeDispatchEvent("stream",{detail:e})}cleanUpStream(e){let t=n=>{let o=this.streams.findIndex(s=>s===e);o!==-1&&this.streams.splice(o,1),n.error!=null?n.local?this.metrics?.increment({[`${e.direction}_stream_reset`]:!0}):this.metrics?.increment({[`${e.direction}_stream_abort`]:!0}):this.metrics?.increment({[`${e.direction}_stream_end`]:!0})};e.addEventListener("close",t),this.metrics?.increment({[`${e.direction}_stream`]:!0})}addEventListener(...e){super.addEventListener.apply(this,e),e[0]==="stream"&&this.earlyStreams.length>0&&queueMicrotask(()=>{this.earlyStreams.forEach(t=>{this.safeDispatchEvent("stream",{detail:t})}),this.earlyStreams=[]})}};var Bo=class extends No{id;protocol;constructor(e){super(e),this.id=e.id,this.protocol=e.protocol??""}async close(e){this.writeStatus==="closing"||this.writeStatus==="closed"||(this.writeStatus="closing",(this.sendingData||this.writeBuffer.byteLength>0)&&(this.log("waiting for write queue to become idle before closing writable end of stream, %d unsent bytes",this.writeBuffer.byteLength),await Cr(this,"idle",{...e,rejectionEvents:["close"]})),this.writableNeedsDrain&&(this.log("waiting for write queue to drain before closing writable end of stream, %d unsent bytes, sending %s",this.writeBuffer.byteLength,this.sendingData),await Cr(this,"drain",{...e,rejectionEvents:["close"]}),this.log("write queue drained, closing writable end of stream, %d unsent bytes, sending %s",this.writeBuffer.byteLength,this.sendingData)),await this.sendCloseWrite(e),this.writeStatus="closed",this.log("closed writable end gracefully"),this.remoteWriteStatus==="closed"&&this.onTransportClosed())}async closeRead(e){this.readStatus==="closing"||this.readStatus==="closed"||(this.readBuffer.byteLength>0&&this.readBuffer.consume(this.readBuffer.byteLength),this.readStatus="closing",await this.sendCloseRead(e),this.readStatus="closed",this.log("closed readable end gracefully"))}};function le(r){let e=new globalThis.AbortController;function t(){let s=r.filter(i=>i?.aborted===!0).map(i=>i?.reason).pop();e.abort(s);for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}for(let s of r){if(s?.aborted===!0){t();break}s?.addEventListener!=null&&s.addEventListener("abort",t)}function n(){for(let s of r)s?.removeEventListener!=null&&s.removeEventListener("abort",t)}let o=e.signal;return o.clear=n,o}var Hi=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,s=n*o;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+o*s),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*o}else this.movingAverage=e;this.previousTime=t}};var pT=1.2,mT=2,gT=5e3,yT=6e4,wT=5e3,Gr=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;maxTimeout;constructor(e={}){let t=e.interval??wT;this.success=new Hi(t),this.failure=new Hi(t),this.next=new Hi(t),this.failureMultiplier=e.failureMultiplier??mT,this.timeoutMultiplier=e.timeoutMultiplier??pT,this.minTimeout=e.minTimeout??gT,this.maxTimeout=e.maxTimeout??yT,e.metricName!=null&&(this.metric=e.metrics?.registerMetricGroup(e.metricName))}getTimeoutSignal(e={}){let t=Math.round(this.next.movingAverage*(e.timeoutFactor??this.timeoutMultiplier));t<this.minTimeout&&(t=this.minTimeout),t>this.maxTimeout&&(t=this.maxTimeout);let 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 At=class extends Error{static name="InvalidMultiaddrError";name="InvalidMultiaddrError"},Wn=class extends Error{static name="ValidationError";name="ValidationError"},xd=class extends Error{static name="InvalidParametersError";name="InvalidParametersError"},vd=class extends Error{static name="UnknownProtocolError";name="UnknownProtocolError"};function Mm(r){return e=>R(e,r)}function Bm(r){return e=>_(e,r)}function qi(r){return new DataView(r.buffer).getUint16(r.byteOffset).toString()}function Ms(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,typeof r=="string"?parseInt(r):r),new Uint8Array(e)}function c7(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=_(e[0],"base32"),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=Ms(n);return Oe([t,o],t.length+o.length)}function l7(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=ut.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=Ms(n);return Oe([t,o],t.length+o.length)}function Um(r){let e=r.subarray(0,r.length-2),t=r.subarray(r.length-2),n=R(e,"base32"),o=qi(t);return`${n}:${o}`}var Fm=function(r){r=r.toString().trim();let e=new Uint8Array(4);return r.split(/\./g).forEach((t,n)=>{let o=parseInt(t,10);if(isNaN(o)||o<0||o>255)throw new At("Invalid byte value in IP address");e[n]=o}),e},u7=function(r){let e=0;r=r.toString().trim();let t=r.split(":",8),n;for(n=0;n<t.length;n++){let s=Wr(t[n]),i;s&&(i=Fm(t[n]),t[n]=R(i.subarray(0,2),"base16")),i!=null&&++n<8&&t.splice(n,0,R(i.subarray(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 s=[n,1];for(n=9-t.length;n>0;n--)s.push("0");t.splice.apply(t,s)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){t[n]===""&&(t[n]="0");let s=parseInt(t[n],16);if(isNaN(s)||s<0||s>65535)throw new At("Invalid byte value in IP address");o[e++]=s>>8&255,o[e++]=s&255}return o},d7=function(r){if(r.byteLength!==4)throw new At("IPv4 address was incorrect length");let e=[];for(let t=0;t<r.byteLength;t++)e.push(r[t]);return e.join(".")},f7=function(r){if(r.byteLength!==16)throw new At("IPv6 address was incorrect length");let e=[];for(let n=0;n<r.byteLength;n+=2){let o=r[n],s=r[n+1],i=`${o.toString(16).padStart(2,"0")}${s.toString(16).padStart(2,"0")}`;e.push(i)}let t=e.join(":");try{let n=new URL(`http://[${t}]`);return n.hostname.substring(1,n.hostname.length-1)}catch{throw new At(`Invalid IPv6 address "${t}"`)}};function h7(r){try{let e=new URL(`http://[${r}]`);return e.hostname.substring(1,e.hostname.length-1)}catch{throw new At(`Invalid IPv6 address "${r}"`)}}var Om=Object.values(ps).map(r=>r.decoder),bT=(function(){let r=Om[0].or(Om[1]);return Om.slice(2).forEach(e=>r=r.or(e)),r})();function p7(r){return bT.decode(r)}function m7(r){return e=>r.encoder.encode(e)}function ET(r){if(parseInt(r).toString()!==r)throw new Wn("Value must be an integer")}function xT(r){if(r<0)throw new Wn("Value must be a positive integer, or zero")}function vT(r){return e=>{if(e>r)throw new Wn(`Value must be smaller than or equal to ${r}`)}}function ST(...r){return e=>{for(let t of r)t(e)}}var Bc=ST(ET,xT,vT(65535));var mt=-1,$m=class{protocolsByCode=new Map;protocolsByName=new Map;getProtocol(e){let t;if(typeof e=="string"?t=this.protocolsByName.get(e):t=this.protocolsByCode.get(e),t==null)throw new vd(`Protocol ${e} was unknown`);return t}addProtocol(e){this.protocolsByCode.set(e.code,e),this.protocolsByName.set(e.name,e),e.aliases?.forEach(t=>{this.protocolsByName.set(t,e)})}removeProtocol(e){let t=this.protocolsByCode.get(e);t!=null&&(this.protocolsByCode.delete(t.code),this.protocolsByName.delete(t.name),t.aliases?.forEach(n=>{this.protocolsByName.delete(n)}))}},jn=new $m,UT=[{code:4,name:"ip4",size:32,valueToBytes:Fm,bytesToValue:d7,validate:r=>{if(!Wr(r))throw new Wn(`Invalid IPv4 address "${r}"`)}},{code:6,name:"tcp",size:16,valueToBytes:Ms,bytesToValue:qi,validate:Bc},{code:273,name:"udp",size:16,valueToBytes:Ms,bytesToValue:qi,validate:Bc},{code:33,name:"dccp",size:16,valueToBytes:Ms,bytesToValue:qi,validate:Bc},{code:41,name:"ip6",size:128,valueToBytes:u7,bytesToValue:f7,stringToValue:h7,validate:r=>{if(!fd(r))throw new Wn(`Invalid IPv6 address "${r}"`)}},{code:42,name:"ip6zone",size:mt},{code:43,name:"ipcidr",size:8,bytesToValue:Mm("base10"),valueToBytes:Bm("base10")},{code:53,name:"dns",size:mt},{code:54,name:"dns4",size:mt},{code:55,name:"dns6",size:mt},{code:56,name:"dnsaddr",size:mt},{code:132,name:"sctp",size:16,valueToBytes:Ms,bytesToValue:qi,validate:Bc},{code:301,name:"udt"},{code:302,name:"utp"},{code:400,name:"unix",size:mt,stringToValue:r=>decodeURIComponent(r),valueToString:r=>encodeURIComponent(r)},{code:421,name:"p2p",aliases:["ipfs"],size:mt,bytesToValue:Mm("base58btc"),valueToBytes:r=>r.startsWith("Q")||r.startsWith("1")?Bm("base58btc")(r):G.parse(r).multihash.bytes},{code:444,name:"onion",size:96,bytesToValue:Um,valueToBytes:c7},{code:445,name:"onion3",size:296,bytesToValue:Um,valueToBytes:l7},{code:446,name:"garlic64",size:mt},{code:447,name:"garlic32",size:mt},{code:448,name:"tls"},{code:449,name:"sni",size:mt},{code:454,name:"noise"},{code:460,name:"quic"},{code:461,name:"quic-v1"},{code:465,name:"webtransport"},{code:466,name:"certhash",size:mt,bytesToValue:m7(ec),valueToBytes:p7},{code:480,name:"http"},{code:481,name:"http-path",size:mt,stringToValue:r=>`/${decodeURIComponent(r)}`,valueToString:r=>encodeURIComponent(r.substring(1))},{code:443,name:"https"},{code:477,name:"ws"},{code:478,name:"wss"},{code:479,name:"p2p-websocket-star"},{code:277,name:"p2p-stardust"},{code:275,name:"p2p-webrtc-star"},{code:276,name:"p2p-webrtc-direct"},{code:280,name:"webrtc-direct"},{code:281,name:"webrtc"},{code:290,name:"p2p-circuit"},{code:777,name:"memory",size:mt}];UT.forEach(r=>{jn.addProtocol(r)});function g7(r){let e=[],t=0;for(;t<r.length;){let n=hr(r,t),o=jn.getProtocol(n),s=he(n),i=FT(o,r,t+s),a=0;i>0&&o.size===mt&&(a=he(i));let c=s+a+i,l={code:n,name:o.name,bytes:r.subarray(t,t+c)};if(i>0){let d=t+s+a,u=r.subarray(d,d+i);l.value=o.bytesToValue?.(u)??R(u)}e.push(l),t+=c}return e}function y7(r){let e=0,t=[];for(let n of r){if(n.bytes==null){let o=jn.getProtocol(n.code),s=he(n.code),i,a=0,c=0;n.value!=null&&(i=o.valueToBytes?.(n.value)??_(n.value),a=i.byteLength,o.size===mt&&(c=he(a)));let l=new Uint8Array(s+c+a),d=0;Oi(n.code,l,d),d+=s,i!=null&&(o.size===mt&&(Oi(a,l,d),d+=c),l.set(i,d)),n.bytes=l}t.push(n.bytes),e+=n.bytes.byteLength}return Oe(t,e)}function w7(r){if(r.charAt(0)!=="/")throw new At('String multiaddr must start with "/"');let e=[],t="protocol",n="",o="";for(let s=1;s<r.length;s++){let i=r.charAt(s);i!=="/"&&(t==="protocol"?o+=r.charAt(s):n+=r.charAt(s));let a=s===r.length-1;if(i==="/"||a){let c=jn.getProtocol(o);if(t==="protocol"){if(c.size==null||c.size===0){e.push({code:c.code,name:c.name}),n="",o="",t="protocol";continue}else if(a)throw new At(`Component ${o} was missing value`);t="value"}else if(t==="value"){let l={code:c.code,name:c.name};if(c.size!=null&&c.size!==0){if(n==="")throw new At(`Component ${o} was missing value`);l.value=c.stringToValue?.(n)??n}e.push(l),n="",o="",t="protocol"}}}if(o!==""&&n!=="")throw new At("Incomplete multiaddr");return e}function b7(r){return`/${r.flatMap(e=>{if(e.value==null)return e.name;let t=jn.getProtocol(e.code);if(t==null)throw new At(`Unknown protocol code ${e.code}`);return[e.name,t.valueToString?.(e.value)??e.value]}).join("/")}`}function FT(r,e,t){return r.size==null||r.size===0?0:r.size>0?r.size/8:hr(e,t)}var $T=Symbol.for("nodejs.util.inspect.custom"),jm=Symbol.for("@multiformats/multiaddr");function KT(r){if(r==null&&(r="/"),yn(r))return r.getComponents();if(r instanceof Uint8Array)return g7(r);if(typeof r=="string")return r=r.replace(/\/(\/)+/,"/").replace(/(\/)+$/,""),r===""&&(r="/"),w7(r);if(Array.isArray(r))return r;throw new At("Must be a string, Uint8Array, Component[], or another Multiaddr")}var Td=class r{[jm]=!0;#e;#t;#r;constructor(e="/",t={}){this.#e=KT(e),t.validate!==!1&&VT(this)}get bytes(){return this.#r==null&&(this.#r=y7(this.#e)),this.#r}toString(){return this.#t==null&&(this.#t=b7(this.#e)),this.#t}toJSON(){return this.toString()}getComponents(){return[...this.#e.map(e=>({...e}))]}encapsulate(e){let t=new r(e);return new r([...this.#e,...t.getComponents()],{validate:!1})}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new xd(`Address ${this.toString()} does not contain subaddress: ${t}`);return new r(n.slice(0,o),{validate:!1})}decapsulateCode(e){let t;for(let n=this.#e.length-1;n>-1;n--)if(this.#e[n].code===e){t=n;break}return new r(this.#e.slice(0,t),{validate:!1})}equals(e){return ee(this.bytes,e.bytes)}[$T](){return`Multiaddr(${this.toString()})`}};function VT(r){r.getComponents().forEach(e=>{let t=jn.getProtocol(e.code);e.value!=null&&t.validate?.(e.value)})}function yn(r){return!!r?.[jm]}function q(r){return new Td(r)}var Qm=class{readNext;haveNext;ended;nextResult;error;constructor(){this.ended=!1,this.readNext=fe(),this.haveNext=fe()}[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=fe(),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=fe(),await Pe(this.readNext.promise,t?.signal,t)}};function E7(){return new Qm}function HT(r){return r[Symbol.asyncIterator]!=null}async function qT(r,e,t){try{await Promise.all(r.map(async n=>{for await(let o of n)await e.push(o,{signal:t}),t.throwIfAborted()})),await e.end(void 0,{signal:t})}catch(n){await e.end(n,{signal:t}).catch(()=>{})}}async function*zT(r){let e=new AbortController,t=E7();qT(r,t,e.signal).catch(()=>{});try{yield*t}finally{e.abort()}}function*WT(r){for(let e of r)yield*e}function GT(...r){let e=[];for(let t of r)HT(t)||e.push(t);return e.length===r.length?WT(e):zT(r)}var jt=GT;function Yi(r,...e){if(r==null)throw new Error("Empty pipeline");if(Xm(r)){let n=r;r=()=>n.source}else if(v7(r)||x7(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&Xm(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++)Xm(t[n])&&(t[n]=jT(t[n]));return YT(...t)}var YT=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},x7=r=>r?.[Symbol.asyncIterator]!=null,v7=r=>r?.[Symbol.iterator]!=null,Xm=r=>r==null?!1:r.sink!=null&&r.source!=null,jT=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=vt({objectMode:!0});t.then(()=>{n.end()},i=>{n.end(i)});let o,s=r.source;if(x7(s))o=async function*(){yield*s,n.end()};else if(v7(s))o=function*(){yield*s,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return jt(n,o())}return r.source};var QT=4194304,Cd=class extends Error{static name="UnwrappedError";name="UnwrappedError"},Hc=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Jm=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},eg=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function XT(r){return typeof r?.closeRead=="function"}function ZT(r){return typeof r?.close=="function"}function Zm(r){return XT(r)?r.remoteWriteStatus!=="writable"&&r.readBufferLength===0:ZT(r)?r.status!=="open":!1}function JT(r){return r?.addEventListener!=null&&r?.removeEventListener!=null&&r?.send!=null&&r?.push!=null&&r?.log!=null}function _d(r,e){let t=e?.maxBufferSize??QT,n=new Q,o,s=!1;if(!JT(r))throw new A("Argument should be a Stream or a Multiaddr");let i=d=>{if(n.append(d.data),n.byteLength>t){let u=n.byteLength;n.consume(n.byteLength),o?.reject(new Error(`Read buffer overflow - ${u} > ${t}`))}o?.resolve()};r.addEventListener("message",i);let a=d=>{d.error!=null?o?.reject(d.error):o?.resolve()};r.addEventListener("close",a);let c=()=>{o?.resolve()};r.addEventListener("remoteCloseWrite",c);let l={readBuffer:n,async read(d){if(s===!0)throw new Cd("Stream was unwrapped");if(Zm(r)){if(d?.bytes==null)return null;if(n.byteLength<d.bytes)throw r.log.error("closed after reading %d/%d bytes",n.byteLength,d.bytes),new Os(`Unexpected EOF - stream closed after reading ${n.byteLength}/${d.bytes} bytes`)}let u=d?.bytes??1;for(o=Promise.withResolvers();;){if(n.byteLength>=u){o.resolve();break}if(await Pe(o.promise,d?.signal),Zm(r)){if(n.byteLength===0&&d?.bytes==null)return null;break}o=Promise.withResolvers()}let f=d?.bytes??n.byteLength;if(n.byteLength<f){if(Zm(r))throw r.log.error("closed while reading %d/%d bytes",n.byteLength,f),new Os(`Unexpected EOF - stream closed while reading ${n.byteLength}/${f} bytes`);return l.read(d)}let h=n.sublist(0,f);return n.consume(f),h},async write(d,u){if(s===!0)throw new Cd("Stream was unwrapped");r.send(d)||await Cr(r,"drain",{signal:u?.signal,rejectionEvents:["close"]})},unwrap(){return s||(s=!0,r.removeEventListener("message",i),r.removeEventListener("close",a),r.removeEventListener("remoteCloseWrite",c),n.byteLength>0&&(r.log("stream unwrapped with %d unread bytes",n.byteLength),r.push(n))),r}};return l}function Fo(r,e={}){let t=_d(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=he(e.maxDataLength));let n=e?.lengthDecoder??hr,o=e?.lengthEncoder??Mt;return{async read(i){let a=-1,c=new Q;for(;;){let d=await t.read({...i,bytes:1});if(d==null)break;c.append(d);try{a=n(c)}catch(u){if(u instanceof RangeError)continue;throw u}if(a<0)throw new Hc("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new eg(`Message length length too long - ${c.byteLength} > ${e.maxLengthLength}`);if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new Jm(`Message length too long - ${a} > ${e.maxDataLength}`);let l=await t.read({...i,bytes:a});if(l==null)throw r.log.error("tried to read %d bytes but the stream closed",a),new Os(`Unexpected EOF - tried to read ${a} bytes but the stream closed`);if(l.byteLength!==a)throw r.log.error("read %d/%d bytes before the stream closed",l.byteLength,a),new Os(`Unexpected EOF - read ${l.byteLength}/${a} bytes before the stream closed`);return l},async write(i,a){await t.write(new Q(o(i.byteLength),i),a)},async writeV(i,a){let c=new Q(...i.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap(){return t.unwrap()}}}function Ue(r,e){let t=Fo(r,e),n={read:async(o,s)=>{let i=await t.read(s);return o.decode(i)},write:async(o,s,i)=>{await t.write(s.encode(o),i)},writeV:async(o,s,i)=>{await t.writeV(o.map(a=>s.encode(a)),i)},pb:o=>({read:async s=>n.read(o,s),write:async(s,i)=>n.write(s,o,i),writeV:async(s,i)=>n.writeV(s,o,i),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var eC=1024*1024*4,tC=1024*1024*4,kd=class{buffer;maxBufferSize;lengthDecoder;maxDataLength;encodingLength;constructor(e={}){this.buffer=new Q,this.maxBufferSize=e.maxBufferSize??eC,this.maxDataLength=e.maxDataLength??tC,this.lengthDecoder=e.lengthDecoder??hr,this.encodingLength=e.encodingLength??he}*decode(e){if(this.buffer.append(e),this.buffer.byteLength>this.maxBufferSize)throw new A(`Buffer length limit exceeded - ${this.buffer.byteLength}/${this.maxBufferSize}`);for(;;){let t;try{t=this.lengthDecoder(this.buffer)}catch(s){if(s instanceof RangeError)break;throw s}if(t<0||t>this.maxDataLength)throw new Hc("Invalid message length");let n=this.encodingLength(t),o=n+t;if(this.buffer.byteLength>=o){let s=this.buffer.sublist(n,o);this.buffer.consume(o),s.byteLength>0&&(yield s)}else break}}};var rC=["Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function tg(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(e==="string"||e==="number"||e==="bigint"||e==="symbol")return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(r instanceof Uint8Array)return"Uint8Array";if(r.constructor===Object)return"Object";let t=nC(r);return t||"Object"}function nC(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(rC.includes(e))return e}var y=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}static equals(e,t){return e===t||e.major===t.major&&e.name===t.name}};y.uint=new y(0,"uint",!0);y.negint=new y(1,"negint",!0);y.bytes=new y(2,"bytes",!0);y.string=new y(3,"string",!0);y.array=new y(4,"array",!1);y.map=new y(5,"map",!1);y.tag=new y(6,"tag",!1);y.float=new y(7,"float",!0);y.false=new y(7,"false",!0);y.true=new y(7,"true",!0);y.null=new y(7,"null",!0);y.undefined=new y(7,"undefined",!0);y.break=new y(7,"break",!0);var N=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 qc=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",oC=new TextEncoder;function Pd(r){return qc&&globalThis.Buffer.isBuffer(r)}function Us(r){return r instanceof Uint8Array?Pd(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var sC=24,iC=200,ji=qc?r=>r.length>=sC?globalThis.Buffer.from(r):S7(r):r=>r.length>=iC?oC.encode(r):S7(r),wn=r=>Uint8Array.from(r),I7=qc?(r,e,t)=>Pd(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),T7=qc?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),Us(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},C7=qc?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function Rd(r,e){if(Pd(r)&&Pd(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 S7(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):(o>=55296&&o<=57343&&(o=65533),e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}var A7=4096;function _7(r){let e=r.length;if(e<=A7)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=A7));return t}var aC=256,zc=class{constructor(e=aC){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=C7(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=I7(n,0,this.cursor)}else t=T7(this.chunks,this.cursor);return e&&this.reset(),t}},Ld=class{constructor(e){this.dest=e,this.cursor=0,this.chunks=[e]}reset(){this.cursor=0}push(e){if(this.cursor+e.length>this.dest.length)throw new Error("write out of bounds, destination buffer is too small");this.dest.set(e,this.cursor),this.cursor+=e.length}toBytes(e=!1){let t=this.dest.subarray(0,this.cursor);return e&&this.reset(),t}};var J="CBOR decode error:",bn="CBOR encode error:",Wc=[];Wc[23]=1;Wc[24]=2;Wc[25]=3;Wc[26]=5;Wc[27]=9;function Qn(r,e,t){if(r.length-e<t)throw new Error(`${J} not enough data for type`)}var gt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function mr(r,e,t){Qn(r,e,1);let n=r[e];if(t.strict===!0&&n<gt[0])throw new Error(`${J} integer encoded in more bytes than necessary (strict decode)`);return n}function gr(r,e,t){Qn(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<gt[1])throw new Error(`${J} integer encoded in more bytes than necessary (strict decode)`);return n}function yr(r,e,t){Qn(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<gt[2])throw new Error(`${J} integer encoded in more bytes than necessary (strict decode)`);return n}function wr(r,e,t){Qn(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],s=(BigInt(n)<<BigInt(32))+BigInt(o);if(t.strict===!0&&s<gt[3])throw new Error(`${J} integer encoded in more bytes than necessary (strict decode)`);if(s<=Number.MAX_SAFE_INTEGER)return Number(s);if(t.allowBigInt===!0)return s;throw new Error(`${J} integers outside of the safe integer range are not supported`)}function k7(r,e,t,n){return new N(y.uint,mr(r,e+1,n),2)}function P7(r,e,t,n){return new N(y.uint,gr(r,e+1,n),3)}function R7(r,e,t,n){return new N(y.uint,yr(r,e+1,n),5)}function L7(r,e,t,n){return new N(y.uint,wr(r,e+1,n),9)}function _r(r,e){return Ke(r,0,e.value)}function Ke(r,e,t){if(t<gt[0]){let n=Number(t);r.push([e|n])}else if(t<gt[1]){let n=Number(t);r.push([e|24,n])}else if(t<gt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<gt[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<gt[4]){let o=[e|27,0,0,0,0,0,0,0],s=Number(n&BigInt(4294967295)),i=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=s&255,s=s>>8,o[7]=s&255,s=s>>8,o[6]=s&255,s=s>>8,o[5]=s&255,o[4]=i&255,i=i>>8,o[3]=i&255,i=i>>8,o[2]=i&255,i=i>>8,o[1]=i&255,r.push(o)}else throw new Error(`${J} encountered BigInt larger than allowable range`)}}_r.encodedSize=function(e){return Ke.encodedSize(e.value)};Ke.encodedSize=function(e){return e<gt[0]?1:e<gt[1]?2:e<gt[2]?3:e<gt[3]?5:9};_r.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function D7(r,e,t,n){return new N(y.negint,-1-mr(r,e+1,n),2)}function N7(r,e,t,n){return new N(y.negint,-1-gr(r,e+1,n),3)}function O7(r,e,t,n){return new N(y.negint,-1-yr(r,e+1,n),5)}var rg=BigInt(-1),M7=BigInt(1);function B7(r,e,t,n){let o=wr(r,e+1,n);if(typeof o!="bigint"){let s=-1-o;if(s>=Number.MIN_SAFE_INTEGER)return new N(y.negint,s,9)}if(n.allowBigInt!==!0)throw new Error(`${J} integers outside of the safe integer range are not supported`);return new N(y.negint,rg-BigInt(o),9)}function Dd(r,e){let t=e.value,n=typeof t=="bigint"?t*rg-M7:t*-1-1;Ke(r,e.type.majorEncoded,n)}Dd.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*rg-M7:t*-1-1;return n<gt[0]?1:n<gt[1]?2:n<gt[2]?3:n<gt[3]?5:9};Dd.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function Gc(r,e,t,n){Qn(r,e,t+n);let o=r.slice(e+t,e+t+n);return new N(y.bytes,o,t+n)}function U7(r,e,t,n){return Gc(r,e,1,t)}function F7(r,e,t,n){return Gc(r,e,2,mr(r,e+1,n))}function $7(r,e,t,n){return Gc(r,e,3,gr(r,e+1,n))}function K7(r,e,t,n){return Gc(r,e,5,yr(r,e+1,n))}function V7(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${J} 64-bit integer bytes lengths not supported`);return Gc(r,e,9,o)}function Nd(r){return r.encodedBytes===void 0&&(r.encodedBytes=y.equals(r.type,y.string)?ji(r.value):r.value),r.encodedBytes}function Qi(r,e){let t=Nd(e);Ke(r,e.type.majorEncoded,t.length),r.push(t)}Qi.encodedSize=function(e){let t=Nd(e);return Ke.encodedSize(t.length)+t.length};Qi.compareTokens=function(e,t){return lC(Nd(e),Nd(t))};function lC(r,e){return r.length<e.length?-1:r.length>e.length?1:Rd(r,e)}var H7=new TextDecoder,dC=32;function fC(r,e,t){if(t-e<dC){let o="";for(let s=e;s<t;s++){let i=r[s];if(i&128)return H7.decode(r.subarray(e,t));o+=String.fromCharCode(i)}return o}return H7.decode(r.subarray(e,t))}function Yc(r,e,t,n,o){let s=t+n;Qn(r,e,s);let i=new N(y.string,fC(r,e+t,e+s),s);return o.retainStringBytes===!0&&(i.byteValue=r.slice(e+t,e+s)),i}function q7(r,e,t,n){return Yc(r,e,1,t,n)}function z7(r,e,t,n){return Yc(r,e,2,mr(r,e+1,n),n)}function W7(r,e,t,n){return Yc(r,e,3,gr(r,e+1,n),n)}function G7(r,e,t,n){return Yc(r,e,5,yr(r,e+1,n),n)}function Y7(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${J} 64-bit integer string lengths not supported`);return Yc(r,e,9,o,n)}var j7=Qi;function Xi(r,e,t,n){return new N(y.array,n,t)}function Q7(r,e,t,n){return Xi(r,e,1,t)}function X7(r,e,t,n){return Xi(r,e,2,mr(r,e+1,n))}function Z7(r,e,t,n){return Xi(r,e,3,gr(r,e+1,n))}function J7(r,e,t,n){return Xi(r,e,5,yr(r,e+1,n))}function ey(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${J} 64-bit integer array lengths not supported`);return Xi(r,e,9,o)}function ty(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${J} indefinite length items not allowed`);return Xi(r,e,1,1/0)}function Od(r,e){Ke(r,y.array.majorEncoded,e.value)}Od.compareTokens=_r.compareTokens;Od.encodedSize=function(e){return Ke.encodedSize(e.value)};function Zi(r,e,t,n){return new N(y.map,n,t)}function ry(r,e,t,n){return Zi(r,e,1,t)}function ny(r,e,t,n){return Zi(r,e,2,mr(r,e+1,n))}function oy(r,e,t,n){return Zi(r,e,3,gr(r,e+1,n))}function sy(r,e,t,n){return Zi(r,e,5,yr(r,e+1,n))}function iy(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${J} 64-bit integer map lengths not supported`);return Zi(r,e,9,o)}function ay(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${J} indefinite length items not allowed`);return Zi(r,e,1,1/0)}function Md(r,e){Ke(r,y.map.majorEncoded,e.value)}Md.compareTokens=_r.compareTokens;Md.encodedSize=function(e){return Ke.encodedSize(e.value)};function cy(r,e,t,n){return new N(y.tag,t,1)}function ly(r,e,t,n){return new N(y.tag,mr(r,e+1,n),2)}function uy(r,e,t,n){return new N(y.tag,gr(r,e+1,n),3)}function dy(r,e,t,n){return new N(y.tag,yr(r,e+1,n),5)}function fy(r,e,t,n){return new N(y.tag,wr(r,e+1,n),9)}function Bd(r,e){Ke(r,y.tag.majorEncoded,e.value)}Bd.compareTokens=_r.compareTokens;Bd.encodedSize=function(e){return Ke.encodedSize(e.value)};var ng=20,og=21,sg=22,ig=23;function hy(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${J} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new N(y.null,null,1):new N(y.undefined,void 0,1)}function py(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${J} indefinite length items not allowed`);return new N(y.break,void 0,1)}function ag(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 N(y.float,r,e)}function my(r,e,t,n){return ag(cg(r,e+1),3,n)}function gy(r,e,t,n){return ag(lg(r,e+1),5,n)}function yy(r,e,t,n){return ag(xy(r,e+1),9,n)}function jc(r,e,t){let n=e.value;if(n===!1)r.push([y.float.majorEncoded|ng]);else if(n===!0)r.push([y.float.majorEncoded|og]);else if(n===null)r.push([y.float.majorEncoded|sg]);else if(n===void 0)r.push([y.float.majorEncoded|ig]);else{let o,s=!1;(!t||t.float64!==!0)&&(by(n),o=cg(jr,1),n===o||Number.isNaN(n)?(jr[0]=249,r.push(jr.slice(0,3)),s=!0):(Ey(n),o=lg(jr,1),n===o&&(jr[0]=250,r.push(jr.slice(0,5)),s=!0))),s||(yC(n),o=xy(jr,1),jr[0]=251,r.push(jr.slice(0,9)))}}jc.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){by(n);let o=cg(jr,1);if(n===o||Number.isNaN(n))return 3;if(Ey(n),o=lg(jr,1),n===o)return 5}return 9};var wy=new ArrayBuffer(9),kr=new DataView(wy,1),jr=new Uint8Array(wy,0);function by(r){if(r===1/0)kr.setUint16(0,31744,!1);else if(r===-1/0)kr.setUint16(0,64512,!1);else if(Number.isNaN(r))kr.setUint16(0,32256,!1);else{kr.setFloat32(0,r);let e=kr.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)kr.setUint16(0,31744,!1);else if(t===0)kr.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?kr.setUint16(0,0):o<-14?kr.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):kr.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function cg(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,s;return n===0?s=o*2**-24:n!==31?s=(o+1024)*2**(n-25):s=o===0?1/0:NaN,t&32768?-s:s}function Ey(r){kr.setFloat32(0,r,!1)}function lg(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 yC(r){kr.setFloat64(0,r,!1)}function xy(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)}jc.compareTokens=_r.compareTokens;function xe(r,e,t){throw new Error(`${J} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function Ud(r){return()=>{throw new Error(`${J} ${r}`)}}var V=[];for(let r=0;r<=23;r++)V[r]=xe;V[24]=k7;V[25]=P7;V[26]=R7;V[27]=L7;V[28]=xe;V[29]=xe;V[30]=xe;V[31]=xe;for(let r=32;r<=55;r++)V[r]=xe;V[56]=D7;V[57]=N7;V[58]=O7;V[59]=B7;V[60]=xe;V[61]=xe;V[62]=xe;V[63]=xe;for(let r=64;r<=87;r++)V[r]=U7;V[88]=F7;V[89]=$7;V[90]=K7;V[91]=V7;V[92]=xe;V[93]=xe;V[94]=xe;V[95]=Ud("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)V[r]=q7;V[120]=z7;V[121]=W7;V[122]=G7;V[123]=Y7;V[124]=xe;V[125]=xe;V[126]=xe;V[127]=Ud("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)V[r]=Q7;V[152]=X7;V[153]=Z7;V[154]=J7;V[155]=ey;V[156]=xe;V[157]=xe;V[158]=xe;V[159]=ty;for(let r=160;r<=183;r++)V[r]=ry;V[184]=ny;V[185]=oy;V[186]=sy;V[187]=iy;V[188]=xe;V[189]=xe;V[190]=xe;V[191]=ay;for(let r=192;r<=215;r++)V[r]=cy;V[216]=ly;V[217]=uy;V[218]=dy;V[219]=fy;V[220]=xe;V[221]=xe;V[222]=xe;V[223]=xe;for(let r=224;r<=243;r++)V[r]=Ud("simple values are not supported");V[244]=xe;V[245]=xe;V[246]=xe;V[247]=hy;V[248]=Ud("simple values are not supported");V[249]=my;V[250]=gy;V[251]=yy;V[252]=xe;V[253]=xe;V[254]=xe;V[255]=py;var Qr=[];for(let r=0;r<24;r++)Qr[r]=new N(y.uint,r,1);for(let r=-1;r>=-24;r--)Qr[31-r]=new N(y.negint,r,1);Qr[64]=new N(y.bytes,new Uint8Array(0),1);Qr[96]=new N(y.string,"",1);Qr[128]=new N(y.array,0,1);Qr[160]=new N(y.map,0,1);Qr[244]=new N(y.false,!1,1);Qr[245]=new N(y.true,!0,1);Qr[246]=new N(y.null,null,1);function ug(r){switch(r.type){case y.false:return wn([244]);case y.true:return wn([245]);case y.null:return wn([246]);case y.bytes:return r.value.length?void 0:wn([64]);case y.string:return r.value===""?wn([96]):void 0;case y.array:return r.value===0?wn([128]):void 0;case y.map:return r.value===0?wn([160]):void 0;case y.uint:return r.value<24?wn([Number(r.value)]):void 0;case y.negint:if(r.value>=-24)return wn([31-Number(r.value)])}}var bC={float64:!1,mapSorter:vC,quickEncodeToken:ug},Ty=Object.freeze({float64:!0,mapSorter:SC,quickEncodeToken:ug});function EC(){let r=[];return r[y.uint.major]=_r,r[y.negint.major]=Dd,r[y.bytes.major]=Qi,r[y.string.major]=j7,r[y.array.major]=Od,r[y.map.major]=Md,r[y.tag.major]=Bd,r[y.float.major]=jc,r}var Ji=EC(),Fd=new zc,Xc=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(`${bn} object contains circular references`);return new r(t,e)}},$o={null:new N(y.null,null),undefined:new N(y.undefined,void 0),true:new N(y.true,!0),false:new N(y.false,!1),emptyArray:new N(y.array,0),emptyMap:new N(y.map,0)},En={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new N(y.float,r):r>=0?new N(y.uint,r):new N(y.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new N(y.uint,r):new N(y.negint,r)},Uint8Array(r,e,t,n){return new N(y.bytes,r)},string(r,e,t,n){return new N(y.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 N(y.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new N(y.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[$o.emptyArray,new N(y.break)]:$o.emptyArray;n=Xc.createCheck(n,r);let o=[],s=0;for(let i of r)o[s++]=$d(i,t,n);return t.addBreakTokens?[new N(y.array,r.length),o,new N(y.break)]:[new N(y.array,r.length),o]},Object(r,e,t,n){let o=e!=="Object",s=o?r.keys():Object.keys(r),i=o?r.size:s.length,a;if(i){a=new Array(i),n=Xc.createCheck(n,r);let c=!o&&t.ignoreUndefinedProperties,l=0;for(let d of s){let u=o?r.get(d):r[d];c&&u===void 0||(a[l++]=[$d(d,t,n),$d(u,t,n)])}l<i&&(a.length=l)}return a?.length?(xC(a,t),t.addBreakTokens?[new N(y.map,a.length),a,new N(y.break)]:[new N(y.map,a.length),a]):t.addBreakTokens===!0?[$o.emptyMap,new N(y.break)]:$o.emptyMap}};En.Map=En.Object;En.Buffer=En.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))En[`${r}Array`]=En.DataView;function $d(r,e={},t){let n=tg(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||En[n];if(typeof o=="function"){let i=o(r,n,e,t);if(i!=null)return i}let s=En[n];if(!s)throw new Error(`${bn} unsupported type: ${n}`);return s(r,n,e,t)}function xC(r,e){e.mapSorter&&r.sort(e.mapSorter)}function vC(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,s=Ji[o].compareTokens(t,n);return s===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),s}function SC(r,e){if(r[0]instanceof N&&e[0]instanceof N){let t=r[0],n=e[0];return t._keyBytes||(t._keyBytes=vy(t.value)),n._keyBytes||(n._keyBytes=vy(n.value)),Rd(t._keyBytes,n._keyBytes)}throw new Error("rfc8949MapSorter: complex key types are not supported yet")}function vy(r){return Kd(r,Ji,Ty)}function Qc(r,e,t,n){if(Array.isArray(e))for(let o of e)Qc(r,o,t,n);else t[e.type.major](r,e,n)}var Sy=y.uint.majorEncoded,Ay=y.negint.majorEncoded,AC=y.bytes.majorEncoded,IC=y.string.majorEncoded,Iy=y.array.majorEncoded,TC=y.float.majorEncoded|ng,CC=y.float.majorEncoded|og,_C=y.float.majorEncoded|sg,kC=y.float.majorEncoded|ig,PC=BigInt(-1),RC=BigInt(1);function LC(r){return r.addBreakTokens!==!0}function Cy(r,e,t,n){let o=tg(e),s=t.typeEncoders&&t.typeEncoders[o];if(s){let i=s(e,o,t,n);if(i!=null){Qc(r,i,Ji,t);return}}switch(o){case"null":r.push([_C]);return;case"undefined":r.push([kC]);return;case"boolean":r.push([e?CC:TC]);return;case"number":!Number.isInteger(e)||!Number.isSafeInteger(e)?jc(r,new N(y.float,e),t):e>=0?Ke(r,Sy,e):Ke(r,Ay,e*-1-1);return;case"bigint":e>=BigInt(0)?Ke(r,Sy,e):Ke(r,Ay,e*PC-RC);return;case"string":{let i=ji(e);Ke(r,IC,i.length),r.push(i);return}case"Uint8Array":Ke(r,AC,e.length),r.push(e);return;case"Array":if(!e.length){r.push([Iy]);return}n=Xc.createCheck(n,e),Ke(r,Iy,e.length);for(let i of e)Cy(r,i,t,n);return;case"Object":case"Map":{let i=En.Object(e,o,t,n);Qc(r,i,Ji,t)}return;default:{let i=En[o];if(!i)throw new Error(`${bn} unsupported type: ${o}`);let a=i(e,o,t,n);Qc(r,a,Ji,t)}}}function Kd(r,e,t,n){let o=n instanceof Uint8Array,s=o?new Ld(n):Fd,i=$d(r,t);if(!Array.isArray(i)&&t.quickEncodeToken){let a=t.quickEncodeToken(i);if(a)return o?(s.push(a),s.toBytes()):a;let c=e[i.type.major];if(c.encodedSize){let l=c.encodedSize(i,t);if(o||(s=new zc(l)),c(s,i,t),s.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${i} was wrong`);return o?s.toBytes():Us(s.chunks[0])}}return s.reset(),Qc(s,i,e,t),s.toBytes(!0)}function Ko(r,e){return e=Object.assign({},bC,e),LC(e)?(Fd.reset(),Cy(Fd,r,e,void 0),Fd.toBytes(!0)):Kd(r,Ji,e)}var DC={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},Vd=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=Qr[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}},Zc=Symbol.for("DONE"),Hd=Symbol.for("BREAK");function NC(r,e,t){let n=[];for(let o=0;o<r.value;o++){let s=ea(e,t);if(s===Hd){if(r.value===1/0)break;throw new Error(`${J} got unexpected break to lengthed array`)}if(s===Zc)throw new Error(`${J} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=s}return n}function OC(r,e,t){let n=t.useMaps===!0,o=t.rejectDuplicateMapKeys===!0,s=n?void 0:{},i=n?new Map:void 0;for(let a=0;a<r.value;a++){let c=ea(e,t);if(c===Hd){if(r.value===1/0)break;throw new Error(`${J} got unexpected break to lengthed map`)}if(c===Zc)throw new Error(`${J} found map but not enough entries (got ${a} [no key], expected ${r.value})`);if(!n&&typeof c!="string")throw new Error(`${J} non-string keys not supported (got ${typeof c})`);if(o&&(n&&i.has(c)||!n&&Object.hasOwn(s,c)))throw new Error(`${J} found repeat map key "${c}"`);let l=ea(e,t);if(l===Zc)throw new Error(`${J} found map but not enough entries (got ${a} [no value], expected ${r.value})`);n?i.set(c,l):s[c]=l}return n?i:s}function ea(r,e){if(r.done())return Zc;let t=r.next();if(y.equals(t.type,y.break))return Hd;if(t.type.terminal)return t.value;if(y.equals(t.type,y.array))return NC(t,r,e);if(y.equals(t.type,y.map))return OC(t,r,e);if(y.equals(t.type,y.tag)){if(e.tags&&typeof e.tags[t.value]=="function"){let n=ea(r,e);return e.tags[t.value](n)}throw new Error(`${J} tag not supported (${t.value})`)}throw new Error("unsupported")}function dg(r,e){if(!(r instanceof Uint8Array))throw new Error(`${J} data to decode must be a Uint8Array`);e=Object.assign({},DC,e);let t=Us(r),n=e.tokenizer||new Vd(t,e),o=ea(n,e);if(o===Zc)throw new Error(`${J} did not find any content to decode`);if(o===Hd)throw new Error(`${J} got unexpected break`);return[o,r.subarray(n.pos())]}function br(r,e){let[t,n]=dg(r,e);if(n.length>0)throw new Error(`${J} too many terminals, data makes no sense`);return t}var qd=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},ta=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},zd=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},Jc=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function Wd(r){return r[Symbol.asyncIterator]!=null}function _y(r,e){if(r.byteLength>e)throw new ta("Message length too long")}var Yd=r=>{let e=he(r),t=Ge(e);return Mt(r,t),Yd.bytes=e,t};Yd.bytes=0;function Xn(r,e){e=e??{};let t=e.lengthEncoder??Yd,n=e?.maxDataLength??4194304;function*o(s){_y(s,n);let i=t(s.byteLength);i instanceof Uint8Array?yield i:yield*i,s instanceof Uint8Array?yield s:yield*s}return Wd(r)?(async function*(){for await(let s of r)yield*o(s)})():(function*(){for(let s of r)yield*o(s)})()}Xn.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??Yd,n=e?.maxDataLength??4194304;return _y(r,n),new Q(t(r.byteLength),r)};var $s;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})($s||($s={}));var hg=r=>{let e=hr(r);return hg.bytes=he(e),e};hg.bytes=0;function Ks(r,e){let t=new Q,n=$s.LENGTH,o=-1,s=e?.lengthDecoder??hg,i=e?.maxLengthLength??8,a=e?.maxDataLength??4194304;function*c(){for(;t.byteLength>0;){if(n===$s.LENGTH)try{if(o=s(t),o<0)throw new qd("Invalid message length");if(o>a)throw new ta("Message length too long");let l=s.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=$s.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>i)throw new zd("Message length length too long");break}throw l}if(n===$s.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=$s.LENGTH}}}return Wd(r)?(async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Jc("Unexpected end of input")})():(function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Jc("Unexpected end of input")})()}Ks.fromReader=(r,e)=>{let t=1,n=(async function*(){for(;;)try{let{done:s,value:i}=await r.next(t);if(s===!0)return;i!=null&&(yield i)}catch(s){if(s.code==="ERR_UNDER_READ")return{done:!0,value:null};throw s}finally{t=1}})();return Ks(n,{...e??{},onLength:s=>{t=s}})};function BC(r,e){if(typeof r=="string")return UC(r);if(typeof r=="number")return KC(r,e);throw Error(`Value provided to ms() must be a string or number. value=${JSON.stringify(r)}`)}var jd=BC;function UC(r){if(typeof r!="string"||r.length===0||r.length>100)throw Error(`Value provided to ms.parse() must be a string with length between 1 and 99. value=${JSON.stringify(r)}`);let e=/^(?<value>-?\d*\.?\d+) *(?<unit>milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|months?|mo|years?|yrs?|y)?$/i.exec(r);if(!e?.groups)return NaN;let{value:t,unit:n="ms"}=e.groups,o=parseFloat(t),s=n.toLowerCase();switch(s){case"years":case"year":case"yrs":case"yr":case"y":return o*315576e5;case"months":case"month":case"mo":return o*26298e5;case"weeks":case"week":case"w":return o*6048e5;case"days":case"day":case"d":return o*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return o*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return o*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return o*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return o;default:throw Error(`Unknown unit "${s}" provided to ms.parse(). value=${JSON.stringify(r)}`)}}function FC(r){let e=Math.abs(r);return e>=315576e5?`${Math.round(r/315576e5)}y`:e>=26298e5?`${Math.round(r/26298e5)}mo`:e>=6048e5?`${Math.round(r/6048e5)}w`:e>=864e5?`${Math.round(r/864e5)}d`:e>=36e5?`${Math.round(r/36e5)}h`:e>=6e4?`${Math.round(r/6e4)}m`:e>=1e3?`${Math.round(r/1e3)}s`:`${r}ms`}function $C(r){let e=Math.abs(r);return e>=315576e5?Vs(r,e,315576e5,"year"):e>=26298e5?Vs(r,e,26298e5,"month"):e>=6048e5?Vs(r,e,6048e5,"week"):e>=864e5?Vs(r,e,864e5,"day"):e>=36e5?Vs(r,e,36e5,"hour"):e>=6e4?Vs(r,e,6e4,"minute"):e>=1e3?Vs(r,e,1e3,"second"):`${r} ms`}function KC(r,e){if(typeof r!="number"||!Number.isFinite(r))throw Error("Value provided to ms.format() must be of type number.");return e?.long?$C(r):FC(r)}function Vs(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function pg(r){t.debug=t,t.default=t,t.coerce=c,t.disable=s,t.enable=o,t.enabled=i,t.humanize=jd,t.destroy=l,Object.keys(r).forEach(d=>{t[d]=r[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let u=0;for(let f=0;f<d.length;f++)u=(u<<5)-u+d.charCodeAt(f),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=e;function t(d,u){let f,h=null,p,g;function m(...w){if(!m.enabled)return;let T=m,I=Number(new Date),D=I-(f||I);T.diff=D,T.prev=f,T.curr=I,f=I,w[0]=t.coerce(w[0]),typeof w[0]!="string"&&w.unshift("%O");let F=0;w[0]=w[0].replace(/%([a-zA-Z%])/g,(W,S)=>{if(W==="%%")return"%";F++;let x=t.formatters[S];if(typeof x=="function"){let L=w[F];W=x.call(T,L),w.splice(F,1),F--}return W}),t.formatArgs.call(T,w),u?.onLog!=null&&u.onLog(...w),(T.log||t.log).apply(T,w)}return m.namespace=d,m.useColors=t.useColors(),m.color=t.selectColor(d),m.extend=n,m.destroy=t.destroy,Object.defineProperty(m,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(p!==t.namespaces&&(p=t.namespaces,g=t.enabled(d)),g),set:w=>{h=w}}),typeof t.init=="function"&&t.init(m),m}function n(d,u){let f=t(this.namespace+(typeof u>"u"?":":u)+d);return f.log=this.log,f}function o(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let u,f=(typeof d=="string"?d:"").split(/[\s,]+/),h=f.length;for(u=0;u<h;u++)f[u]&&(d=f[u].replace(/\*/g,".*?"),d[0]==="-"?t.skips.push(new RegExp("^"+d.substr(1)+"$")):t.names.push(new RegExp("^"+d+"$")))}function s(){let d=[...t.names.map(a),...t.skips.map(a).map(u=>"-"+u)].join(",");return t.enable(""),d}function i(d){if(d[d.length-1]==="*")return!0;let u,f;for(u=0,f=t.skips.length;u<f;u++)if(t.skips[u].test(d))return!1;for(u=0,f=t.names.length;u<f;u++)if(t.names[u].test(d))return!0;return!1}function a(d){return d.toString().substring(2,d.toString().length-2).replace(/\.\*\?$/,"*")}function c(d){return d instanceof Error?d.stack??d.message:d}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 Qd=YC(),VC=["#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 HC(){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 qC(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+jd(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 zC=console.debug??console.log??(()=>{});function WC(r){try{r?Qd?.setItem("debug",r):Qd?.removeItem("debug")}catch{}}function GC(){let r;try{r=Qd?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function YC(){try{return localStorage}catch{}}function jC(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var Py=pg({formatArgs:qC,save:WC,load:GC,useColors:HC,setupFormatters:jC,colors:VC,storage:Qd,log:zC});var rr=Py;rr.formatters.b=r=>r==null?"undefined":De.baseEncode(r);rr.formatters.t=r=>r==null?"undefined":ut.baseEncode(r);rr.formatters.m=r=>r==null?"undefined":rt.baseEncode(r);rr.formatters.p=r=>r==null?"undefined":r.toString();rr.formatters.c=r=>r==null?"undefined":r.toString();rr.formatters.k=r=>r==null?"undefined":r.toString();rr.formatters.a=r=>r==null?"undefined":r.toString();function Ry(r,e=""){let t=Ly(r.message),n=Ly(r.stack);return t!=null&&n!=null?n.includes(t)?`${n.split(`
2
+ "use strict";var Helia=(()=>{var iS=Object.create;var xu=Object.defineProperty;var aS=Object.getOwnPropertyDescriptor;var cS=Object.getOwnPropertyNames;var lS=Object.getPrototypeOf,uS=Object.prototype.hasOwnProperty;var an=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),et=(r,e)=>{for(var t in e)xu(r,t,{get:e[t],enumerable:!0})},A6=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of cS(e))!uS.call(r,o)&&o!==t&&xu(r,o,{get:()=>e[o],enumerable:!(n=aS(e,o))||n.enumerable});return r};var Ln=(r,e,t)=>(t=r!=null?iS(lS(r)):{},A6(e||!r||!r.__esModule?xu(t,"default",{value:r,enumerable:!0}):t,r)),dS=r=>A6(xu({},"__esModule",{value:!0}),r);var _6=an((ZN,q0)=>{"use strict";var fS=Object.prototype.hasOwnProperty,Ht="~";function Qa(){}Object.create&&(Qa.prototype=Object.create(null),new Qa().__proto__||(Ht=!1));function hS(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function T6(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var s=new hS(t,n||r,o),i=Ht?Ht+e:e;return r._events[i]?r._events[i].fn?r._events[i]=[r._events[i],s]:r._events[i].push(s):(r._events[i]=s,r._eventsCount++),r}function Lu(r,e){--r._eventsCount===0?r._events=new Qa:delete r._events[e]}function Lt(){this._events=new Qa,this._eventsCount=0}Lt.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)fS.call(t,n)&&e.push(Ht?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Lt.prototype.listeners=function(e){var t=Ht?Ht+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,s=n.length,i=new Array(s);o<s;o++)i[o]=n[o].fn;return i};Lt.prototype.listenerCount=function(e){var t=Ht?Ht+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Lt.prototype.emit=function(e,t,n,o,s,i){var a=Ht?Ht+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,d,u;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,o),!0;case 5:return c.fn.call(c.context,t,n,o,s),!0;case 6:return c.fn.call(c.context,t,n,o,s,i),!0}for(u=1,d=new Array(l-1);u<l;u++)d[u-1]=arguments[u];c.fn.apply(c.context,d)}else{var f=c.length,h;for(u=0;u<f;u++)switch(c[u].once&&this.removeListener(e,c[u].fn,void 0,!0),l){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,t);break;case 3:c[u].fn.call(c[u].context,t,n);break;case 4:c[u].fn.call(c[u].context,t,n,o);break;default:if(!d)for(h=1,d=new Array(l-1);h<l;h++)d[h-1]=arguments[h];c[u].fn.apply(c[u].context,d)}}return!0};Lt.prototype.on=function(e,t,n){return T6(this,e,t,n,!1)};Lt.prototype.once=function(e,t,n){return T6(this,e,t,n,!0)};Lt.prototype.removeListener=function(e,t,n,o){var s=Ht?Ht+e:e;if(!this._events[s])return this;if(!t)return Lu(this,s),this;var i=this._events[s];if(i.fn)i.fn===t&&(!o||i.once)&&(!n||i.context===n)&&Lu(this,s);else{for(var a=0,c=[],l=i.length;a<l;a++)(i[a].fn!==t||o&&!i[a].once||n&&i[a].context!==n)&&c.push(i[a]);c.length?this._events[s]=c.length===1?c[0]:c:Lu(this,s)}return this};Lt.prototype.removeAllListeners=function(e){var t;return e?(t=Ht?Ht+e:e,this._events[t]&&Lu(this,t)):(this._events=new Qa,this._eventsCount=0),this};Lt.prototype.off=Lt.prototype.removeListener;Lt.prototype.addListener=Lt.prototype.on;Lt.prefixed=Ht;Lt.EventEmitter=Lt;typeof q0<"u"&&(q0.exports=Lt)});var X6=an((fM,j6)=>{j6.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(s,i){t[s]=i,e++,e>=r&&(e=0,n=t,t=Object.create(null))}return{has:function(s){return t[s]!==void 0||n[s]!==void 0},remove:function(s){t[s]!==void 0&&(t[s]=void 0),n[s]!==void 0&&(n[s]=void 0)},get:function(s){var i=t[s];if(i!==void 0)return i;if((i=n[s])!==void 0)return o(s,i),i},set:function(s,i){t[s]!==void 0?t[s]=i:o(s,i)},clear:function(){t=Object.create(null),n=Object.create(null)}}}});var i7=an(Mc=>{(function(){var r,e,t,n,o,s,i,a;a=function(c){var l,d,u,f;return l=(c&255<<24)>>>24,d=(c&255<<16)>>>16,u=(c&65280)>>>8,f=c&255,[l,d,u,f].join(".")},i=function(c){var l,d,u,f,h,p;for(l=[],u=f=0;f<=3&&c.length!==0;u=++f){if(u>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}p=e(c),h=p[0],d=p[1],c=c.substring(d),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"),s=t("a"),o=t("A"),e=function(c){var l,d,u,f,h;for(f=0,l=10,d="9",u=0,c.length>1&&c[u]==="0"&&(c[u+1]==="x"||c[u+1]==="X"?(u+=2,l=16):"0"<=c[u+1]&&c[u+1]<="9"&&(u++,l=8,d="7")),h=u;u<c.length;){if("0"<=c[u]&&c[u]<=d)f=f*l+(t(c[u])-n)>>>0;else if(l===16)if("a"<=c[u]&&c[u]<="f")f=f*l+(10+t(c[u])-s)>>>0;else if("A"<=c[u]&&c[u]<="F")f=f*l+(10+t(c[u])-o)>>>0;else break;else break;if(f>4294967295)throw new Error("too large");u++}if(u===h)throw new Error("empty octet");return[f,u]},r=(function(){function c(l,d){var u,f,h,p;if(typeof l!="string")throw new Error("Missing `net' parameter");if(d||(p=l.split("/",2),l=p[0],d=p[1]),d||(d=32),typeof d=="string"&&d.indexOf(".")>-1){try{this.maskLong=i(d)}catch(g){throw u=g,new Error("Invalid mask: "+d)}for(f=h=32;h>=0;f=--h)if(this.maskLong===4294967295<<32-f>>>0){this.bitmask=f;break}}else if(d||d===0)this.bitmask=parseInt(d,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(i(l)&this.maskLong)>>>0}catch(g){throw u=g,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+d);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):(i(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 d,u,f;for(f=i(this.first),u=i(this.last),d=0;f<=u;)l(a(f),f,d),d++,f++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c})(),Mc.ip2long=i,Mc.long2ip=a,Mc.Netmask=r}).call(Mc)});var th=an((QX,m3)=>{var XX=(function(){typeof m3<"u"&&(m3.exports=g);var r=86400,e=3200,t=146097*e/400,n=r*t,o=1e3*n,s=864e13,i=4294967296,a=1e6,c="000000000",l=Math.trunc||function(S){var x=S-S%1;return x==0&&(S<0||S===0&&1/S!=1/0)?-0:x},d=g.prototype,u=(g.fromDate=function(S){return new g(+S)},g.fromInt64BE=D(0,1,2,3,0,4),g.fromInt64LE=D(3,2,1,0,4,0),g.fromString=function(B){var x,L=new g,B=(B+="").replace(/^\s*[+\-]?\d+/,function(v){var v=+v,E=1970+(v-1970)%400;return L.year=v-E,E}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(P,v,E){return v<0&&(E*=-1),x=6e4*(60*+v+ +E),""}).replace(/\.\d+$/,function(P){return L.nano=+(P+c).substr(1,9),""}).split(/\D+/);if(1<B.length?B[1]--:B[1]=0,L.time=x=Date.UTC.apply(Date,B)-(x||0),isNaN(x))throw new TypeError("Invalid Date");return m(L)},g.fromTimeT=function(S){return T(S,0)},d.year=0,d.time=0,d.nano=0,d.addNano=function(S){return this.nano+=+S||0,this},d.getNano=function(){var S=m(this);return(S.time%1e3*a+ +S.nano+1e9)%1e9},d.getTimeT=function(){var x=m(this),S=Math.floor(x.time/1e3),x=x.year;return x&&(S+=x*t*r/e),S},d.getYear=function(){return this.toDate().getUTCFullYear()+this.year},d.toDate=function(){return w(m(this).time)},d.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},d.toString=function(S){var x=this,L=x.toDate(),B={H:function(){return $(L.getUTCHours())},L:function(){return z(L.getUTCMilliseconds(),3)},M:function(){return $(L.getUTCMinutes())},N:function(){return z(x.getNano(),9)},S:function(){return $(L.getUTCSeconds())},Y:function(){var P=x.getYear();return 999999<P?"+"+P:9999<P?"+"+z(P,6):0<=P?z(P,4):-999999<=P?"-"+z(-P,6):P},a:function(){return h[L.getUTCDay()]},b:function(){return f[L.getUTCMonth()]},d:function(){return $(L.getUTCDate())},e:function(){return(function(P){return(9<P?"":" ")+(0|P)})(L.getUTCDate())},m:function(){return $(L.getUTCMonth()+1)}};return(function P(v){return v.replace(/%./g,function(E){var _=E[1],b=p[_],_=B[_];return b?P(b):_?_():E})})(S||u)},d.writeInt64BE=I(0,1,2,3,0,4),d.writeInt64LE=I(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,x,L){var B=this;if(!(B instanceof g))return new g(S,x,L);B.time=+S||0,B.nano=+x||0,B.year=+L||0,m(B)}function m(S){var x,L,B,P=S.year,v=S.time,E=S.nano,b=((E<0||a<=E)&&(E-=(L=Math.floor(E/a))*a,v+=L,L=1),P%e);return(v<-s||s<v||b)&&((x=l(v/o))&&(P+=x*e,v-=x*o),(B=w(v)).setUTCFullYear(b+B.getUTCFullYear()),B=(v=+B)+(x=l((P-=b)/e))*o,x&&-s<=B&&B<=s&&(P-=x*e,v=B),L=1),L&&(S.year=P,S.time=v,S.nano=E),S}function w(S){var x=new Date(0);return x.setTime(S),x}function T(P,B){P=+P||0;var L=l((B=(B|0)*i)/n)+l(P/n),B=B%n+P%n,P=l(B/n);return P&&(L+=P,B-=P*n),new g(1e3*B,0,L*e)}function I(S,x,L,B,P,v){return function(b,_){var O=m(this);b=b||new Array(8),F(b,_|=0);var k=Math.floor(O.time/1e3),O=O.year*(t*r/e),M=l(O/i)+l(k/i),O=O%i+k%i,k=Math.floor(O/i);return k&&(M+=k,O-=k*i),E(b,_+P,M),E(b,_+v,O),b};function E(b,_,M){b[_+S]=M>>24&255,b[_+x]=M>>16&255,b[_+L]=M>>8&255,b[_+B]=255&M}}function D(S,x,L,B,P,v){return function(b,_){F(b,_|=0);var M=E(b,_+P);return T(E(b,_+v),M)};function E(b,_){return 16777216*b[_+S]+(b[_+x]<<16|b[_+L]<<8|b[_+B])}}function F(S,x){if(S=S&&S.length,S==null)throw new TypeError("Invalid Buffer");if(S<x+8)throw new RangeError("Out of range")}function $(S){return(9<S?"":"0")+(0|S)}function z(S,x){return(c+(0|S)).substr(-x)}})()});var Yw=an((gse,Gw)=>{"use strict";function lR(r){return r>=55296&&r<=56319}function uR(r){return r>=56320&&r<=57343}Gw.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var o=t.length,s=0,i,a,c=0;c<o;c+=1){if(i=t.charCodeAt(c),a=t[c],lR(i)&&uR(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),s+=e(a),s===n)return t.slice(0,c+1);if(s>n)return t.slice(0,c-a.length+1)}return t}});var Xw=an((yse,jw)=>{"use strict";function dR(r){return r>=55296&&r<=56319}function fR(r){return r>=56320&&r<=57343}jw.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,o=null,s=null,i=0;i<t;i++)o=e.charCodeAt(i),fR(o)?s!=null&&dR(s)?n+=1:n+=3:o<=127?n+=1:o>=128&&o<=2047?n+=2:o>=2048&&o<=65535&&(n+=3),s=o;return n}});var Zw=an((wse,Qw)=>{"use strict";var hR=Yw(),pR=Xw();Qw.exports=hR.bind(null,pR)});var tb=an((bse,eb)=>{"use strict";var mR=Zw(),gR=/[\/\?<>\\:\*\|"]/g,yR=/[\x00-\x1f\x80-\x9f]/g,wR=/^\.+$/,bR=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,ER=/[\. ]+$/;function Jw(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(gR,e).replace(yR,e).replace(wR,e).replace(bR,e).replace(ER,e);return mR(t,255)}eb.exports=function(r,e){var t=e&&e.replacement||"",n=Jw(r,t);return t===""?n:Jw(n,"")}});var rb=an(Aa=>{"use strict";var vR="[object ArrayBuffer]",ao=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===vR}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 s=0;s<n.length;s++)if(n[s]!==o[s])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 i of t)n+=i.byteLength;let o=new Uint8Array(n),s=0;for(let i of t){let a=this.toUint8Array(i);o.set(a,s),s+=a.length}return e[e.length-1]instanceof Function?this.toView(o,e[e.length-1]):o.buffer}},j3="string",SR=/^[0-9a-f\s]+$/i,AR=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,IR=/^[a-zA-Z0-9-_]+$/,i1=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=ao.toUint8Array(e),n="";for(let s=0;s<t.length;s++)n+=String.fromCharCode(t[s]);return decodeURIComponent(escape(n))}},Or=class{static toString(e,t=!1){let n=ao.toArrayBuffer(e),o=new DataView(n),s="";for(let i=0;i<n.byteLength;i+=2){let a=o.getUint16(i,t);s+=String.fromCharCode(a)}return s}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),o=new DataView(n);for(let s=0;s<e.length;s++)o.setUint16(s*2,e.charCodeAt(s),t);return n}},a1=class r{static isHex(e){return typeof e===j3&&SR.test(e)}static isBase64(e){return typeof e===j3&&AR.test(e)}static isBase64Url(e){return typeof e===j3&&IR.test(e)}static ToString(e,t="utf8"){let n=ao.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 Or.toString(n,!0);case"utf16":case"utf16be":return Or.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 Or.fromString(e,!0);case"utf16":case"utf16be":return Or.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=ao.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 i1.fromString(e);case"utf16":case"utf16be":return Or.fromString(e);case"utf16le":case"usc2":return Or.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 i1.toString(e);case"utf16":case"utf16be":return Or.toString(e);case"utf16le":case"usc2":return Or.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=ao.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=ao.toUint8Array(e),n="",o=t.length;for(let s=0;s<o;s++){let i=t[s];i<16&&(n+="0"),n+=i.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 s=t.slice(o,o+2);n[o/2]=parseInt(s,16)}return n.buffer}static ToUtf16String(e,t=!1){return Or.toString(e,t)}static FromUtf16String(e,t=!1){return Or.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,"")||""}};a1.DEFAULT_UTF8_ENCODING="utf8";function TR(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let o=arguments[n];for(let s in o)t[s]=o[s]}return t}function _R(...r){let e=r.map(o=>o.byteLength).reduce((o,s)=>o+s),t=new Uint8Array(e),n=0;return r.map(o=>new Uint8Array(o)).forEach(o=>{for(let s of o)t[n++]=s}),t.buffer}function CR(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}Aa.BufferSourceConverter=ao;Aa.Convert=a1;Aa.assign=TR;Aa.combine=_R;Aa.isEqual=CR});var wx=an(Rn=>{"use strict";Object.defineProperty(Rn,"__esModule",{value:!0});Rn.parseCookie=gx;Rn.parse=gx;Rn.stringifyCookie=jL;Rn.stringifySetCookie=Fp;Rn.serialize=Fp;Rn.parseSetCookie=XL;Rn.stringifySetCookie=Fp;Rn.serialize=Fp;var px=/^[\u0021-\u003A\u003C\u003E-\u007E]+$/,mx=/^[\u0021-\u003A\u003C-\u007E]*$/,qL=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,WL=/^[\u0020-\u003A\u003D-\u007E]*$/,zL=/^-?\d+$/,GL=Object.prototype.toString,YL=(()=>{let r=function(){};return r.prototype=Object.create(null),r})();function gx(r,e){let t=new YL,n=r.length;if(n<2)return t;let o=e?.decode||yx,s=0;do{let i=q4(r,s,n);if(i===-1)break;let a=H4(r,s,n);if(i>a){s=r.lastIndexOf(";",i-1)+1;continue}let c=Xo(r,s,i);t[c]===void 0&&(t[c]=o(Xo(r,i+1,a))),s=a+1}while(s<n);return t}function jL(r,e){let t=e?.encode||encodeURIComponent,n=[];for(let o of Object.keys(r)){let s=r[o];if(s===void 0)continue;if(!px.test(o))throw new TypeError(`cookie name is invalid: ${o}`);let i=t(s);if(!mx.test(i))throw new TypeError(`cookie val is invalid: ${s}`);n.push(`${o}=${i}`)}return n.join("; ")}function Fp(r,e,t){let n=typeof r=="object"?r:{...t,name:r,value:String(e)},s=(typeof e=="object"?e:t)?.encode||encodeURIComponent;if(!px.test(n.name))throw new TypeError(`argument name is invalid: ${n.name}`);let i=n.value?s(n.value):"";if(!mx.test(i))throw new TypeError(`argument val is invalid: ${n.value}`);let a=n.name+"="+i;if(n.maxAge!==void 0){if(!Number.isInteger(n.maxAge))throw new TypeError(`option maxAge is invalid: ${n.maxAge}`);a+="; Max-Age="+n.maxAge}if(n.domain){if(!qL.test(n.domain))throw new TypeError(`option domain is invalid: ${n.domain}`);a+="; Domain="+n.domain}if(n.path){if(!WL.test(n.path))throw new TypeError(`option path is invalid: ${n.path}`);a+="; Path="+n.path}if(n.expires){if(!QL(n.expires)||!Number.isFinite(n.expires.valueOf()))throw new TypeError(`option expires is invalid: ${n.expires}`);a+="; Expires="+n.expires.toUTCString()}if(n.httpOnly&&(a+="; HttpOnly"),n.secure&&(a+="; Secure"),n.partitioned&&(a+="; Partitioned"),n.priority)switch(typeof n.priority=="string"?n.priority.toLowerCase():void 0){case"low":a+="; Priority=Low";break;case"medium":a+="; Priority=Medium";break;case"high":a+="; Priority=High";break;default:throw new TypeError(`option priority is invalid: ${n.priority}`)}if(n.sameSite)switch(typeof n.sameSite=="string"?n.sameSite.toLowerCase():n.sameSite){case!0:case"strict":a+="; SameSite=Strict";break;case"lax":a+="; SameSite=Lax";break;case"none":a+="; SameSite=None";break;default:throw new TypeError(`option sameSite is invalid: ${n.sameSite}`)}return a}function XL(r,e){let t=e?.decode||yx,n=r.length,o=H4(r,0,n),s=q4(r,0,o),i=s===-1?{name:"",value:t(Xo(r,0,o))}:{name:Xo(r,0,s),value:t(Xo(r,s+1,o))},a=o+1;for(;a<n;){let c=H4(r,a,n),l=q4(r,a,c),d=l===-1?Xo(r,a,c):Xo(r,a,l),u=l===-1?void 0:Xo(r,l+1,c);switch(d.toLowerCase()){case"httponly":i.httpOnly=!0;break;case"secure":i.secure=!0;break;case"partitioned":i.partitioned=!0;break;case"domain":i.domain=u;break;case"path":i.path=u;break;case"max-age":u&&zL.test(u)&&(i.maxAge=Number(u));break;case"expires":if(!u)break;let f=new Date(u);Number.isFinite(f.valueOf())&&(i.expires=f);break;case"priority":if(!u)break;let h=u.toLowerCase();(h==="low"||h==="medium"||h==="high")&&(i.priority=h);break;case"samesite":if(!u)break;let p=u.toLowerCase();(p==="lax"||p==="strict"||p==="none")&&(i.sameSite=p);break}a=c+1}return i}function H4(r,e,t){let n=r.indexOf(";",e);return n===-1?t:n}function q4(r,e,t){let n=r.indexOf("=",e);return n<t?n:-1}function Xo(r,e,t){let n=e,o=t;do{let s=r.charCodeAt(n);if(s!==32&&s!==9)break}while(++n<o);for(;o>n;){let s=r.charCodeAt(o-1);if(s!==32&&s!==9)break;o--}return r.slice(n,o)}function yx(r){if(r.indexOf("%")===-1)return r;try{return decodeURIComponent(r)}catch{return r}}function QL(r){return GL.call(r)==="[object Date]"}});var fN={};et(fN,{DEFAULT_CID_PEER_FILTER_SIZE:()=>Sg,DEFAULT_SESSION_MAX_PROVIDERS:()=>vg,DEFAULT_SESSION_MIN_PROVIDERS:()=>xg,InsufficientProvidersError:()=>rl,InvalidCodecError:()=>Ag,NoRoutersAvailableError:()=>Vo,UnknownCodecError:()=>ol,UnknownHashAlgorithmError:()=>nl,createHelia:()=>dN,heliaDefaults:()=>E6,libp2pDefaults:()=>H0});var I6=Symbol.for("@libp2p/connection");var Dn=Symbol.for("@libp2p/content-routing");var Vt=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},vu=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},Su=class extends Error{static name="InvalidCryptoExchangeError";constructor(e="Invalid crypto exchange"){super(e),this.name="InvalidCryptoExchangeError"}},A=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},Nn=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},za=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}},Ga=class extends Error{static name="UnsupportedOperationError";constructor(e="Unsupported operation"){super(e),this.name="UnsupportedOperationError"}};var is=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},di=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},Br=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},fi=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}};var cn=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},Ya=class extends Error{static name="StreamBufferError";constructor(e="The stream buffer was full"){super(e),this.name="StreamBufferError"}},Le=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},hi=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},ln=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},Au=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},bo=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},pi=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},de=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},as=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},un=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},Ur=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var Eo=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},cs=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},ja=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},Iu=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},mi=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},Fr=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var Tu=class extends Event{data;constructor(e,t){super("message",t),this.data=e}},xo=class extends Event{error;local;constructor(e,t,n){super("close",n),this.error=t,this.local=e}},_u=class extends xo{constructor(e,t){super(!0,e,t)}},Cu=class extends xo{constructor(e,t){super(!1,e,t)}};var ls=Symbol.for("@libp2p/peer-discovery");var ku=Symbol.for("@libp2p/peer-id");function Rt(r){return!!r?.[ku]}var On=Symbol.for("@libp2p/peer-routing");var us="keep-alive";function Pu(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function at(...r){let e=[];for(let t of r)Pu(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 lt(...r){let e=[];for(let t of r)Pu(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 vo=Symbol.for("@libp2p/transport");var Xa;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(Xa||(Xa={}));var ie=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:s})=>s!==t),this.#e.set(e,o))}dispatchEvent(e){let t=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:o})=>!o),this.#e.set(e.type,n)),t}safeDispatchEvent(e,t={}){return this.dispatchEvent(new CustomEvent(e,t))}};var me=Symbol.for("@libp2p/service-capabilities"),ur=Symbol.for("@libp2p/service-dependencies");var H=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var Ru=class extends AggregateError{static name="DNSQueryFailedError";name="DNSQueryFailedError"};var W0=Ln(_6(),1);var z0=class r extends Error{name="TimeoutError";constructor(e,t){super(e,t),Error.captureStackTrace?.(this,r)}},C6=r=>r.reason??new DOMException("This operation was aborted.","AbortError");function qt(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:s={setTimeout,clearTimeout},signal:i}=e,a,c,d=new Promise((u,f)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(i?.aborted){f(C6(i));return}if(i&&(c=()=>{f(C6(i))},i.addEventListener("abort",c,{once:!0})),r.then(u,f),t===Number.POSITIVE_INFINITY)return;let h=new z0;a=s.setTimeout.call(void 0,()=>{if(n){try{u(n())}catch(p){f(p)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?u():o instanceof Error?f(o):(h.message=o??`Promise timed out after ${t} milliseconds`,f(h))},t)}).finally(()=>{d.clear(),c&&i&&i.removeEventListener("abort",c)});return d.clear=()=>{s.clearTimeout.call(void 0,a),a=void 0},d}function G0(r,e,t){let n=0,o=r.length;for(;o>0;){let s=Math.trunc(o/2),i=n+s;t(r[i],e)<=0?(n=++i,o-=s+1):o=s}return n}var Za=class{#e=[];enqueue(e,t){let{priority:n=0,id:o}=t??{},s={priority:n,id:o,run:e};if(this.size===0||this.#e[this.size-1].priority>=n){this.#e.push(s);return}let i=G0(this.#e,s,(a,c)=>c.priority-a.priority);this.#e.splice(i,0,s)}setPriority(e,t){let n=this.#e.findIndex(s=>s.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 ds=class extends W0.default{#e;#t;#r=0;#a;#c=!1;#m=!1;#u;#T=0;#b=0;#d;#f;#l;#i=[];#s=0;#n;#_;#o=0;#y;#h;#L=1n;#w=new Map;timeout;constructor(e){if(super(),e={carryoverIntervalCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:Za,strict:!1,...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})`);if(e.strict&&e.interval===0)throw new TypeError("The `strict` option requires a non-zero `interval`");if(e.strict&&e.intervalCap===Number.POSITIVE_INFINITY)throw new TypeError("The `strict` option requires a finite `intervalCap`");if(this.#e=e.carryoverIntervalCount??e.carryoverConcurrencyCount??!1,this.#t=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#a=e.intervalCap,this.#u=e.interval,this.#l=e.strict,this.#n=new e.queueClass,this.#_=e.queueClass,this.concurrency=e.concurrency,e.timeout!==void 0&&!(Number.isFinite(e.timeout)&&e.timeout>0))throw new TypeError(`Expected \`timeout\` to be a positive finite number, got \`${e.timeout}\` (${typeof e.timeout})`);this.timeout=e.timeout,this.#h=e.autoStart===!1,this.#$()}#E(e){for(;this.#s<this.#i.length;){let n=this.#i[this.#s];if(n!==void 0&&e-n>=this.#u)this.#s++;else break}(this.#s>100&&this.#s>this.#i.length/2||this.#s===this.#i.length)&&(this.#i=this.#i.slice(this.#s),this.#s=0)}#D(e){this.#l?this.#i.push(e):this.#r++}#N(){this.#l?this.#i.length>this.#s&&this.#i.pop():this.#r>0&&this.#r--}#x(){return this.#i.length-this.#s}get#O(){return this.#t?!0:this.#l?this.#x()<this.#a:this.#r<this.#a}get#M(){return this.#o<this.#y}#B(){this.#o--,this.#o===0&&this.emit("pendingZero"),this.#A(),this.emit("next")}#U(){this.#f=void 0,this.#P(),this.#k()}#F(e){if(this.#l){if(this.#E(e),this.#x()>=this.#a){let n=this.#i[this.#s],o=this.#u-(e-n);return this.#v(o),!0}return!1}if(this.#d===void 0){let t=this.#T-e;if(t<0){if(this.#b>0){let n=e-this.#b;if(n<this.#u)return this.#v(this.#u-n),!0}this.#r=this.#e?this.#o:0}else return this.#v(t),!0}return!1}#v(e){this.#f===void 0&&(this.#f=setTimeout(()=>{this.#U()},e))}#S(){this.#d&&(clearInterval(this.#d),this.#d=void 0)}#C(){this.#f&&(clearTimeout(this.#f),this.#f=void 0)}#A(){if(this.#n.size===0){if(this.#S(),this.emit("empty"),this.#o===0){if(this.#C(),this.#l&&this.#s>0){let t=Date.now();this.#E(t)}this.emit("idle")}return!1}let e=!1;if(!this.#h){let t=Date.now(),n=!this.#F(t);if(this.#O&&this.#M){let o=this.#n.dequeue();this.#t||(this.#D(t),this.#g()),this.emit("active"),o(),n&&this.#k(),e=!0}}return e}#k(){this.#t||this.#d!==void 0||this.#l||(this.#d=setInterval(()=>{this.#P()},this.#u),this.#T=Date.now()+this.#u)}#P(){this.#l||(this.#r===0&&this.#o===0&&this.#d&&this.#S(),this.#r=this.#e?this.#o:0),this.#I(),this.#g()}#I(){for(;this.#A(););}get concurrency(){return this.#y}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.#y=e,this.#I()}setPriority(e,t){if(typeof t!="number"||!Number.isFinite(t))throw new TypeError(`Expected \`priority\` to be a finite number, got \`${t}\` (${typeof t})`);this.#n.setPriority(e,t)}async add(e,t={}){return t={timeout:this.timeout,...t,id:t.id??(this.#L++).toString()},new Promise((n,o)=>{let s=Symbol(`task-${t.id}`);this.#n.enqueue(async()=>{this.#o++,this.#w.set(s,{id:t.id,priority:t.priority??0,startTime:Date.now(),timeout:t.timeout});let i;try{try{t.signal?.throwIfAborted()}catch(l){throw this.#K(),this.#w.delete(s),l}this.#b=Date.now();let a=e({signal:t.signal});if(t.timeout&&(a=qt(Promise.resolve(a),{milliseconds:t.timeout,message:`Task timed out after ${t.timeout}ms (queue has ${this.#o} running, ${this.#n.size} waiting)`})),t.signal){let{signal:l}=t;a=Promise.race([a,new Promise((d,u)=>{i=()=>{u(l.reason)},l.addEventListener("abort",i,{once:!0})})])}let c=await a;n(c),this.emit("completed",c)}catch(a){o(a),this.emit("error",a)}finally{i&&t.signal?.removeEventListener("abort",i),this.#w.delete(s),queueMicrotask(()=>{this.#B()})}},t),this.emit("add"),this.#A()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#h?(this.#h=!1,this.#I(),this):this}pause(){this.#h=!0}clear(){this.#n=new this.#_,this.#S(),this.#R(),this.emit("empty"),this.#o===0&&(this.#C(),this.emit("idle")),this.emit("next")}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.#o===0&&this.#n.size===0||await this.#p("idle")}async onPendingZero(){this.#o!==0&&await this.#p("pendingZero")}async onRateLimit(){this.isRateLimited||await this.#p("rateLimit")}async onRateLimitCleared(){this.isRateLimited&&await this.#p("rateLimitCleared")}onError(){return new Promise((e,t)=>{let n=o=>{this.off("error",n),t(o)};this.on("error",n)})}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.#o}get isPaused(){return this.#h}#$(){this.#t||(this.on("add",()=>{this.#n.size>0&&this.#g()}),this.on("next",()=>{this.#g()}))}#g(){this.#t||this.#m||(this.#m=!0,queueMicrotask(()=>{this.#m=!1,this.#R()}))}#K(){this.#t||(this.#N(),this.#g())}#R(){let e=this.#c;if(this.#t||this.#n.size===0){e&&(this.#c=!1,this.emit("rateLimitCleared"));return}let t;if(this.#l){let o=Date.now();this.#E(o),t=this.#x()}else t=this.#r;let n=t>=this.#a;n!==e&&(this.#c=n,this.emit(n?"rateLimit":"rateLimitCleared"))}get isRateLimited(){return this.#c}get isSaturated(){return this.#o===this.#y&&this.#n.size>0||this.isRateLimited&&this.#n.size>0}get runningTasks(){return[...this.#w.values()].map(e=>({...e}))}};function Du(r){let e=[dr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var J0={};et(J0,{base10:()=>ES});var uO=new Uint8Array(0);function k6(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 $r(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 P6(r){return new TextEncoder().encode(r)}function R6(r){return new TextDecoder().decode(r)}function pS(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 s=r.charAt(o),i=s.charCodeAt(0);if(t[i]!==255)throw new TypeError(s+" is ambiguous");t[i]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),d=Math.log(256)/Math.log(a);function u(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,w=0,T=p.length;w!==T&&p[w]===0;)w++,g++;for(var I=(T-w)*d+1>>>0,D=new Uint8Array(I);w!==T;){for(var F=p[w],$=0,z=I-1;(F!==0||$<m)&&z!==-1;z--,$++)F+=256*D[z]>>>0,D[z]=F%a>>>0,F=F/a>>>0;if(F!==0)throw new Error("Non-zero carry");m=$,w++}for(var S=I-m;S!==I&&D[S]===0;)S++;for(var x=c.repeat(g);S<I;++S)x+=r.charAt(D[S]);return x}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,w=0;p[g]===c;)m++,g++;for(var T=(p.length-g)*l+1>>>0,I=new Uint8Array(T);p[g];){var D=t[p.charCodeAt(g)];if(D===255)return;for(var F=0,$=T-1;(D!==0||F<w)&&$!==-1;$--,F++)D+=a*I[$]>>>0,I[$]=D%256>>>0,D=D/256>>>0;if(D!==0)throw new Error("Non-zero carry");w=F,g++}if(p[g]!==" "){for(var z=T-w;z!==T&&I[z]===0;)z++;for(var S=new Uint8Array(m+(T-z)),x=m;z!==T;)S[x++]=I[z++];return S}}}function h(p){var g=f(p);if(g)return g;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:f,decode:h}}var mS=pS,gS=mS,L6=gS;var j0=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")}},X0=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 D6(this,e)}},Q0=class{decoders;constructor(e){this.decoders=e}or(e){return D6(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 D6(r,e){return new Q0({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var Z0=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 j0(e,t,n),this.decoder=new X0(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function gi({name:r,prefix:e,encode:t,decode:n}){return new Z0(r,e,t,n)}function So({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=L6(t,r);return gi({prefix:e,name:r,encode:n,decode:s=>$r(o(s))})}function yS(r,e,t,n){let o=r.length;for(;r[o-1]==="=";)--o;let s=new Uint8Array(o*t/8|0),i=0,a=0,c=0;for(let l=0;l<o;++l){let d=e[r[l]];if(d===void 0)throw new SyntaxError(`Non-${n} character`);a=a<<t|d,i+=t,i>=8&&(i-=8,s[c++]=255&a>>i)}if(i>=t||(255&a<<8-i)!==0)throw new SyntaxError("Unexpected end of data");return s}function wS(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],i+=8;i>t;)i-=t,s+=e[o&a>>i];if(i!==0&&(s+=e[o&a<<t-i]),n)for(;(s.length*t&7)!==0;)s+="=";return s}function bS(r){let e={};for(let t=0;t<r.length;++t)e[r[t]]=t;return e}function Xe({name:r,prefix:e,bitsPerChar:t,alphabet:n}){let o=bS(n);return gi({prefix:e,name:r,encode(s){return wS(s,n,t)},decode(s){return yS(s,o,t,r)}})}var ES=So({prefix:"9",name:"base10",alphabet:"0123456789"});var e2={};et(e2,{base16:()=>xS,base16upper:()=>vS});var xS=Xe({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),vS=Xe({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var t2={};et(t2,{base2:()=>SS});var SS=Xe({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var r2={};et(r2,{base256emoji:()=>CS});var N6=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}"),AS=N6.reduce((r,e,t)=>(r[t]=e,r),[]),IS=N6.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function TS(r){return r.reduce((e,t)=>(e+=AS[t],e),"")}function _S(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=IS[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var CS=gi({prefix:"\u{1F680}",name:"base256emoji",encode:TS,decode:_S});var n2={};et(n2,{base32:()=>ut,base32hex:()=>LS,base32hexpad:()=>NS,base32hexpadupper:()=>OS,base32hexupper:()=>DS,base32pad:()=>PS,base32padupper:()=>RS,base32upper:()=>kS,base32z:()=>MS});var ut=Xe({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),kS=Xe({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),PS=Xe({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),RS=Xe({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),LS=Xe({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),DS=Xe({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),NS=Xe({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),OS=Xe({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),MS=Xe({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var o2={};et(o2,{base36:()=>Ar,base36upper:()=>BS});var Ar=So({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),BS=So({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var s2={};et(s2,{base58btc:()=>De,base58flickr:()=>US});var De=So({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),US=So({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var i2={};et(i2,{base64:()=>rt,base64pad:()=>Ja,base64url:()=>ec,base64urlpad:()=>FS});var rt=Xe({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),Ja=Xe({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),ec=Xe({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),FS=Xe({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var a2={};et(a2,{base8:()=>$S});var $S=Xe({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var c2={};et(c2,{identity:()=>KS});var KS=gi({prefix:"\0",name:"identity",encode:r=>R6(r),decode:r=>P6(r)});var Nu={};et(Nu,{code:()=>l2,decode:()=>zS,encode:()=>WS,name:()=>qS});var VS=new TextEncoder,HS=new TextDecoder,qS="json",l2=512;function WS(r){return VS.encode(JSON.stringify(r))}function zS(r){return JSON.parse(HS.decode(r))}var fs={};et(fs,{code:()=>Mn,decode:()=>jS,encode:()=>YS,name:()=>GS});var GS="raw",Mn=85;function YS(r){return $r(r)}function jS(r){return $r(r)}var f2={};et(f2,{identity:()=>dt});var He={};et(He,{Digest:()=>hs,create:()=>Wt,decode:()=>ke,equals:()=>d2,hasCode:()=>pA});var XS=B6,O6=128,QS=127,ZS=~QS,JS=Math.pow(2,31);function B6(r,e,t){e=e||[],t=t||0;for(var n=t;r>=JS;)e[t++]=r&255|O6,r/=128;for(;r&ZS;)e[t++]=r&255|O6,r>>>=7;return e[t]=r|0,B6.bytes=t-n+1,e}var eA=u2,tA=128,M6=127;function u2(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw u2.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&M6)<<o:(i&M6)*Math.pow(2,o),o+=7}while(i>=tA);return u2.bytes=s-n,t}var rA=Math.pow(2,7),nA=Math.pow(2,14),oA=Math.pow(2,21),sA=Math.pow(2,28),iA=Math.pow(2,35),aA=Math.pow(2,42),cA=Math.pow(2,49),lA=Math.pow(2,56),uA=Math.pow(2,63),dA=function(r){return r<rA?1:r<nA?2:r<oA?3:r<sA?4:r<iA?5:r<aA?6:r<cA?7:r<lA?8:r<uA?9:10},fA={encode:XS,decode:eA,encodingLength:dA},hA=fA,tc=hA;function rc(r,e=0){return[tc.decode(r,e),tc.decode.bytes]}function yi(r,e,t=0){return tc.encode(r,e,t),e}function wi(r){return tc.encodingLength(r)}function Wt(r,e){let t=e.byteLength,n=wi(r),o=n+wi(t),s=new Uint8Array(o+t);return yi(r,s,0),yi(t,s,n),s.set(e,o),new hs(r,t,e,s)}function ke(r){let e=$r(r),[t,n]=rc(e),[o,s]=rc(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new hs(t,o,i,e)}function d2(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&k6(r.bytes,t.bytes)}}var hs=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function pA(r,e){return r.code===e}var U6=0,mA="identity",F6=$r;function gA(r,e){if(e?.truncate!=null&&e.truncate!==r.byteLength){if(e.truncate<0||e.truncate>r.byteLength)throw new Error(`Invalid truncate option, must be less than or equal to ${r.byteLength}`);r=r.subarray(0,e.truncate)}return Wt(U6,F6(r))}var dt={code:U6,name:mA,encode:F6,digest:gA};var p2={};et(p2,{sha256:()=>ze,sha512:()=>Mu});var yA=20;function nc({name:r,code:e,encode:t,minDigestLength:n,maxDigestLength:o}){return new h2(r,e,t,n,o)}var h2=class{name;code;encode;minDigestLength;maxDigestLength;constructor(e,t,n,o,s){this.name=e,this.code=t,this.encode=n,this.minDigestLength=o??yA,this.maxDigestLength=s}digest(e,t){if(t?.truncate!=null){if(t.truncate<this.minDigestLength)throw new Error(`Invalid truncate option, must be greater than or equal to ${this.minDigestLength}`);if(this.maxDigestLength!=null&&t.truncate>this.maxDigestLength)throw new Error(`Invalid truncate option, must be less than or equal to ${this.maxDigestLength}`)}if(e instanceof Uint8Array){let n=this.encode(e);return n instanceof Uint8Array?$6(n,this.code,t?.truncate):n.then(o=>$6(o,this.code,t?.truncate))}else throw Error("Unknown type, must be binary type")}};function $6(r,e,t){if(t!=null&&t!==r.byteLength){if(t>r.byteLength)throw new Error(`Invalid truncate option, must be less than or equal to ${r.byteLength}`);r=r.subarray(0,t)}return Wt(e,r)}function V6(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var ze=nc({name:"sha2-256",code:18,encode:V6("SHA-256")}),Mu=nc({name:"sha2-512",code:19,encode:V6("SHA-512")});function H6(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return bA(t,m2(r),e??De.encoder);default:return EA(t,m2(r),e??ut.encoder)}}var q6=new WeakMap;function m2(r){let e=q6.get(r);if(e==null){let t=new Map;return q6.set(r,t),t}return e}var G=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!==oc)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==xA)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=Wt(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&&d2(e.multihash,n.multihash)}toString(e){return H6(this,e)}toJSON(){return{"/":H6(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:s,bytes:i}=t;return new r(n,o,s,i??W6(n,o,s.bytes))}else if(t[vA]===!0){let{version:n,multihash:o,code:s}=t,i=ke(o);return r.create(n,s,i)}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!==oc)throw new Error(`Version 0 CID must use dag-pb (code: ${oc}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=W6(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,oc,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=$r(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let s=o.subarray(t.multihashSize-t.digestSize),i=new hs(t.multihashCode,t.digestSize,s,o);return[t.version===0?r.createV0(i):r.createV1(t.codec,i),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[u,f]=rc(e.subarray(t));return t+=f,u},o=n(),s=oc;if(o===18?(o=0,t=0):s=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=t,a=n(),c=n(),l=t+c,d=l-i;return{version:o,codec:s,multihashCode:a,digestSize:c,multihashSize:d,size:l}}static parse(e,t){let[n,o]=wA(e,t),s=r.decode(o);if(s.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return m2(s).set(n,e),s}};function wA(r,e){switch(r[0]){case"Q":{let t=e??De;return[De.prefix,t.decode(`${De.prefix}${r}`)]}case De.prefix:{let t=e??De;return[De.prefix,t.decode(r)]}case ut.prefix:{let t=e??ut;return[ut.prefix,t.decode(r)]}case Ar.prefix:{let t=e??Ar;return[Ar.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 bA(r,e,t){let{prefix:n}=t;if(n!==De.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let s=t.encode(r).slice(1);return e.set(n,s),s}else return o}function EA(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let s=t.encode(r);return e.set(n,s),s}else return o}var oc=112,xA=18;function W6(r,e,t){let n=wi(r),o=n+wi(e),s=new Uint8Array(o+t.byteLength);return yi(r,s,0),yi(e,s,n),s.set(t,o),s}var vA=Symbol.for("@ipld/js-cid/CID");var ps={...c2,...t2,...a2,...J0,...e2,...n2,...o2,...s2,...i2,...r2},GO={...p2,...f2};function ae(r=0){return new Uint8Array(r)}function Ge(r=0){return new Uint8Array(r)}function G6(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var z6=G6("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),g2=G6("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=Ge(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),SA={utf8:z6,"utf-8":z6,hex:ps.base16,latin1:g2,ascii:g2,binary:g2,...ps},Bu=SA;function R(r,e="utf8"){let t=Bu[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var y2=60;function Uu(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:dr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:dr[e.type],TTL:e.TTL??e.ttl??y2,data:e.data instanceof Uint8Array?R(e.data):e.data}))}}var AA=4;function w2(r,e={}){let t=new ds({concurrency:e.queryConcurrency??AA});return async(n,o={})=>{let s=o?.logger?.forComponent("dns:dns-json-over-https"),i=new URLSearchParams;i.set("name",n),Du(o.types).forEach(c=>{i.append("type",dr[c])}),o.onProgress?.(new H("dns:query",n)),s?.("GET %s",`${r}?${i}`);let a=await t.add(async()=>{let c=await fetch(`${r}?${i}`,{headers:{accept:"application/dns-json"},signal:o?.signal});if(s?.("GET %s %d",c.url,c.status),c.status!==200)throw new Error(`Unexpected HTTP status: ${c.status} - ${c.statusText}`);let l=Uu(await c.json());return o.onProgress?.(new H("dns:response",l)),l},{signal:o.signal});if(a==null)throw new Error("No DNS response received");return a}}function Y6(){return[w2("https://cloudflare-dns.com/dns-query"),w2("https://dns.google/resolve")]}var Q6=Ln(X6(),1);var b2=class{lru;constructor(e){this.lru=(0,Q6.default)(e)}get(e,t){let n=!0,o=[];for(let s of t){let i=this.getAnswers(e,s);if(i.length===0){n=!1;break}o.push(...i)}if(n)return Uu({answers:o})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,o=this.lru.get(n);if(o!=null){let s=o.filter(i=>i.expires>Date.now()).map(({expires:i,value:a})=>({...a,TTL:Math.round((i-Date.now())/1e3),type:dr[a.type]}));return s.length===0&&this.lru.remove(n),s}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,o=this.lru.get(n)??[];o.push({expires:Date.now()+(t.TTL??y2)*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 Z6(r){return new b2(r)}var IA=1e3,Fu=class{resolvers;cache;logger;constructor(e){this.resolvers={},this.cache=Z6(e.cacheSize??IA),this.logger=e.logger,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["."]=Y6())}async query(e,t={}){let n=Du(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new H("dns:cache",o)),o;let s=`${e.split(".").pop()}.`,i=(this.resolvers[s]??this.resolvers["."]).sort(()=>Math.random()>.5?-1:1),a=[];for(let c of i){if(t.signal?.aborted===!0)break;try{let l=await c(e,{...t,logger:this.logger,types:n});for(let d of l.Answer)this.cache.add(e,d);return l}catch(l){a.push(l),t.onProgress?.(new H("dns:error",l))}}throw new Ru(a,`DNS lookup of ${e} ${n} failed`)}};var dr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(dr||(dr={}));function $u(r={}){return new Fu(r)}function TA(r){return r[Symbol.asyncIterator]!=null}function _A(r){if(TA(r))return(async()=>{for await(let e of r);})();for(let e of r);}var er=_A;var sc=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},ic=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},Ku=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var J6={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new Ku("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 nt=J6;function ee(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 Oe(r,e){e==null&&(e=r.reduce((o,s)=>o+s.length,0));let t=Ge(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}var t5=Symbol.for("@achingbrain/uint8arraylist");function e5(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 bi(r){return!!r?.[t5]}var X=class r{bufs;length;[t5]=!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(bi(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(bi(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=e5(this.bufs,e);return t.buf[t.index]}set(e,t){let n=e5(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(bi(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 Oe(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:Oe(n,o)}sublist(e,t){let{bufs:n,length:o}=this._subList(e,t),s=new r;return s.length=o,s.bufs=[...n],s}_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 s=0;s<this.bufs.length;s++){let i=this.bufs[s],a=o,c=a+i.byteLength;if(o=c,e>=c)continue;let l=e>=a&&e<c,d=t>a&&t<=c;if(l&&d){if(e===a&&t===c){n.push(i);break}let u=e-a;n.push(i.subarray(u,u+(t-e)));break}if(l){if(e===0){n.push(i);continue}n.push(i.subarray(e-a));continue}if(d){if(t===c){n.push(i);break}n.push(i.subarray(0,t-a));break}n.push(i)}return{bufs:n,length:t-e}}indexOf(e,t=0){if(!bi(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 s=256,i=new Int32Array(s);for(let u=0;u<s;u++)i[u]=-1;for(let u=0;u<o;u++)i[n[u]]=u;let a=i,c=this.byteLength-n.byteLength,l=n.byteLength-1,d;for(let u=t;u<=c;u+=d){d=0;for(let f=l;f>=0;f--){let h=this.get(u+f);if(n[f]!==h){d=Math.max(1,f-a[h]);break}}if(d===0)return u}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=Ge(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=ae(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=ae(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=ae(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=Ge(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=ae(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=ae(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=ae(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=ae(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=ae(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(!ee(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,s)=>o+s.byteLength,0)),n.length=t,n}};function C(r,e="utf8"){let t=Bu[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}var kA=parseInt("11111",2),E2=parseInt("10000000",2),PA=parseInt("01111111",2),r5={0:ac,1:ac,2:RA,3:NA,4:OA,5:DA,6:LA,16:ac,22:ac,48:ac};function Ir(r,e={offset:0}){let t=r[e.offset]&kA;if(e.offset++,r5[t]!=null)return r5[t](r,e);throw new Error("No decoder for tag "+t)}function cc(r,e){let t=0;if((r[e.offset]&E2)===E2){let n=r[e.offset]&PA,o="0x";e.offset++;for(let s=0;s<n;s++,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 ac(r,e){cc(r,e);let t=[];for(;!(e.offset>=r.byteLength);){let n=Ir(r,e);if(n===null)break;t.push(n)}return t}function RA(r,e){let t=cc(r,e),n=e.offset,o=e.offset+t,s=[];for(let i=n;i<o;i++)i===n&&r[i]===0||s.push(r[i]);return e.offset+=t,Uint8Array.from(s)}function LA(r,e){let t=cc(r,e),n=e.offset+t,o=r[e.offset];e.offset++;let s=0,i=0;o<40?(s=0,i=o):o<80?(s=1,i=o-40):(s=2,i=o-80);let a=`${s}.${i}`,c=[];for(;e.offset<n;){let l=r[e.offset];if(e.offset++,c.push(l&127),l<128){c.reverse();let d=0;for(let u=0;u<c.length;u++)d+=c[u]<<u*7;a+=`.${d}`,c=[]}}return a}function DA(r,e){return e.offset++,null}function NA(r,e){let t=cc(r,e),n=r[e.offset];e.offset++;let o=r.subarray(e.offset,e.offset+t-1);if(e.offset+=t,n!==0)throw new Error("Unused bits in bit string is unimplemented");return o}function OA(r,e){let t=cc(r,e),n=r.subarray(e.offset,e.offset+t);return e.offset+=t,n}function MA(r){let e=r.toString(16);e.length%2===1&&(e="0"+e);let t=new X;for(let n=0;n<e.length;n+=2)t.append(Uint8Array.from([parseInt(`${e[n]}${e[n+1]}`,16)]));return t}function Vu(r){if(r.byteLength<128)return Uint8Array.from([r.byteLength]);let e=MA(r.byteLength);return new X(Uint8Array.from([e.byteLength|E2]),e)}function zt(r){let e=new X,t=128;return(r.subarray()[0]&t)===t&&e.append(Uint8Array.from([0])),e.append(r),new X(Uint8Array.from([2]),Vu(e),e)}function lc(r){let e=Uint8Array.from([0]),t=new X(e,r);return new X(Uint8Array.from([3]),Vu(t),t)}function n5(r){return new X(Uint8Array.from([4]),Vu(r),r)}function Kr(r,e=48){let t=new X;for(let n of r)t.append(n);return new X(Uint8Array.from([e]),Vu(t),t)}var o5="1.2.840.10045.3.1.7",s5="1.3.132.0.34",i5="1.3.132.0.35";async function a5(r="P-256"){let e=await crypto.subtle.generateKey({name:"ECDSA",namedCurve:r},!0,["sign","verify"]);return{publicKey:await crypto.subtle.exportKey("jwk",e.publicKey),privateKey:await crypto.subtle.exportKey("jwk",e.privateKey)}}async function c5(r,e,t){let n=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["sign"]);t?.signal?.throwIfAborted();let o=await crypto.subtle.sign({name:"ECDSA",hash:{name:"SHA-256"}},n,e.subarray());return t?.signal?.throwIfAborted(),new Uint8Array(o,0,o.byteLength)}async function l5(r,e,t,n){let o=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["verify"]);n?.signal?.throwIfAborted();let s=await crypto.subtle.verify({name:"ECDSA",hash:{name:"SHA-256"}},o,e,t.subarray());return n?.signal?.throwIfAborted(),s}var BA=Uint8Array.from([6,8,42,134,72,206,61,3,1,7]),UA=Uint8Array.from([6,5,43,129,4,0,34]),FA=Uint8Array.from([6,5,43,129,4,0,35]),u5={ext:!0,kty:"EC",crv:"P-256"},d5={ext:!0,kty:"EC",crv:"P-384"},f5={ext:!0,kty:"EC",crv:"P-521"},Ei=32,xi=48,vi=66;function h5(r){let e=Ir(r);return x2(e)}function x2(r){let e=r[1],t=R(e,"base64url"),n=r[2][1][0],o=1,s,i;if(e.byteLength===Ei)return s=R(n.subarray(o,o+Ei),"base64url"),i=R(n.subarray(o+Ei),"base64url"),new gs({...u5,key_ops:["sign"],d:t,x:s,y:i});if(e.byteLength===xi)return s=R(n.subarray(o,o+xi),"base64url"),i=R(n.subarray(o+xi),"base64url"),new gs({...d5,key_ops:["sign"],d:t,x:s,y:i});if(e.byteLength===vi)return s=R(n.subarray(o,o+vi),"base64url"),i=R(n.subarray(o+vi),"base64url"),new gs({...f5,key_ops:["sign"],d:t,x:s,y:i});throw new A(`Private key length was wrong length, got ${e.byteLength}, expected 32, 48 or 66`)}function v2(r){let e=Ir(r);return p5(e)}function p5(r){let e=r[1][1][0],t=1,n,o;if(e.byteLength===Ei*2+1)return n=R(e.subarray(t,t+Ei),"base64url"),o=R(e.subarray(t+Ei),"base64url"),new ms({...u5,key_ops:["verify"],x:n,y:o});if(e.byteLength===xi*2+1)return n=R(e.subarray(t,t+xi),"base64url"),o=R(e.subarray(t+xi),"base64url"),new ms({...d5,key_ops:["verify"],x:n,y:o});if(e.byteLength===vi*2+1)return n=R(e.subarray(t,t+vi),"base64url"),o=R(e.subarray(t+vi),"base64url"),new ms({...f5,key_ops:["verify"],x:n,y:o});throw new A(`coordinates were wrong length, got ${e.byteLength}, expected 65, 97 or 133`)}function m5(r){return Kr([zt(Uint8Array.from([1])),n5(C(r.d??"","base64url")),Kr([y5(r.crv)],160),Kr([lc(new X(Uint8Array.from([4]),C(r.x??"","base64url"),C(r.y??"","base64url")))],161)]).subarray()}function g5(r){return Kr([zt(Uint8Array.from([1])),Kr([y5(r.crv)],160),Kr([lc(new X(Uint8Array.from([4]),C(r.x??"","base64url"),C(r.y??"","base64url")))],161)]).subarray()}function y5(r){if(r==="P-256")return BA;if(r==="P-384")return UA;if(r==="P-521")return FA;throw new A(`Invalid curve ${r}`)}async function w5(r="P-256"){let e=await a5(r);return new gs(e.privateKey)}var ms=class{type="ECDSA";jwk;_raw;constructor(e){this.jwk=e}get raw(){return this._raw==null&&(this._raw=g5(this.jwk)),this._raw}toMultihash(){return dt.digest(ft(this))}toCID(){return G.createV1(114,this.toMultihash())}toString(){return De.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}async verify(e,t,n){return l5(this.jwk,t,e,n)}},gs=class{type="ECDSA";jwk;publicKey;_raw;constructor(e){this.jwk=e,this.publicKey=new ms({crv:e.crv,ext:e.ext,key_ops:["verify"],kty:"EC",x:e.x,y:e.y})}get raw(){return this._raw==null&&(this._raw=m5(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}async sign(e,t){return c5(this.jwk,e,t)}};function ys(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function Dt(r,e=""){if(!Number.isSafeInteger(r)||r<0){let t=e&&`"${e}" `;throw new Error(`${t}expected integer >= 0, got ${r}`)}}function ce(r,e,t=""){let n=ys(r),o=r?.length,s=e!==void 0;if(!n||s&&o!==e){let i=t&&`"${t}" `,a=s?` of length ${e}`:"",c=n?`length=${o}`:`type=${typeof r}`;throw new Error(i+"expected Uint8Array"+a+", got "+c)}return r}function Un(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash must wrapped by utils.createHasher");Dt(r.outputLen),Dt(r.blockLen)}function Si(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 E5(r,e){ce(r,void 0,"digestInto() output");let t=e.outputLen;if(r.length<t)throw new Error('"digestInto() output" expected to be of length >='+t)}function Nt(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function ws(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function Vr(r,e){return r<<32-e|r>>>e}function Hu(r,e){return r<<e|r>>>32-e>>>0}var x5=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",$A=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function Fn(r){if(ce(r),x5)return r.toHex();let e="";for(let t=0;t<r.length;t++)e+=$A[r[t]];return e}var Bn={_0:48,_9:57,A:65,F:70,a:97,f:102};function b5(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 $n(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);if(x5)return Uint8Array.fromHex(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,s=0;o<t;o++,s+=2){let i=b5(r.charCodeAt(s)),a=b5(r.charCodeAt(s+1));if(i===void 0||a===void 0){let c=r[s]+r[s+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+s)}n[o]=i*16+a}return n}var KA=async()=>{};async function v5(r,e,t){let n=Date.now();for(let o=0;o<r;o++){t(o);let s=Date.now()-n;s>=0&&s<e||(await KA(),n+=s)}}function VA(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}function S2(r,e=""){return typeof r=="string"?VA(r):ce(r,void 0,e)}function tr(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];ce(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let s=r[n];t.set(s,o),o+=s.length}return t}function S5(r,e){if(e!==void 0&&{}.toString.call(e)!=="[object Object]")throw new Error("options must be object or undefined");return Object.assign(r,e)}function uc(r,e={}){let t=(o,s)=>r(s).update(o).digest(),n=r(void 0);return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=o=>r(o),Object.assign(t,e),Object.freeze(t)}function dn(r=32){let e=typeof globalThis=="object"?globalThis.crypto:null;if(typeof e?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");return e.getRandomValues(new Uint8Array(r))}var A2=r=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,r])});function qu(r,e,t){return r&e^~r&t}function Wu(r,e,t){return r&e^r&t^e&t}var bs=class{blockLen;outputLen;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(e,t,n,o){this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.buffer=new Uint8Array(e),this.view=ws(this.buffer)}update(e){Si(this),ce(e);let{view:t,buffer:n,blockLen:o}=this,s=e.length;for(let i=0;i<s;){let a=Math.min(o-this.pos,s-i);if(a===o){let c=ws(e);for(;o<=s-i;i+=o)this.process(c,i);continue}n.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Si(this),E5(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:s}=this,{pos:i}=this;t[i++]=128,Nt(this.buffer.subarray(i)),this.padOffset>o-i&&(this.process(n,0),i=0);for(let u=i;u<o;u++)t[u]=0;n.setBigUint64(o-8,BigInt(this.length*8),s),this.process(n,0);let a=ws(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen must be aligned to 32bit");let l=c/4,d=this.get();if(l>d.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<l;u++)a.setUint32(4*u,d[u],s)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||=new this.constructor,e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:s,destroyed:i,pos:a}=this;return e.destroyed=i,e.finished=s,e.length=o,e.pos=a,o%t&&e.buffer.set(n),e}clone(){return this._cloneInto()}},Kn=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var bt=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var zu=BigInt(4294967295),A5=BigInt(32);function HA(r,e=!1){return e?{h:Number(r&zu),l:Number(r>>A5&zu)}:{h:Number(r>>A5&zu)|0,l:Number(r&zu)|0}}function I5(r,e=!1){let t=r.length,n=new Uint32Array(t),o=new Uint32Array(t);for(let s=0;s<t;s++){let{h:i,l:a}=HA(r[s],e);[n[s],o[s]]=[i,a]}return[n,o]}var I2=(r,e,t)=>r>>>t,T2=(r,e,t)=>r<<32-t|e>>>t,Es=(r,e,t)=>r>>>t|e<<32-t,xs=(r,e,t)=>r<<32-t|e>>>t,dc=(r,e,t)=>r<<64-t|e>>>t-32,fc=(r,e,t)=>r>>>t-32|e<<64-t;function fn(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var T5=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),_5=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,C5=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),k5=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,P5=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),R5=(r,e,t,n,o,s)=>e+t+n+o+s+(r/2**32|0)|0;var WA=Uint32Array.from([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(64),_2=class extends bs{constructor(e){super(64,e,8,!1)}get(){let{A:e,B:t,C:n,D:o,E:s,F:i,G:a,H:c}=this;return[e,t,n,o,s,i,a,c]}set(e,t,n,o,s,i,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=a|0,this.H=c|0}process(e,t){for(let u=0;u<16;u++,t+=4)Ao[u]=e.getUint32(t,!1);for(let u=16;u<64;u++){let f=Ao[u-15],h=Ao[u-2],p=Vr(f,7)^Vr(f,18)^f>>>3,g=Vr(h,17)^Vr(h,19)^h>>>10;Ao[u]=g+Ao[u-7]+p+Ao[u-16]|0}let{A:n,B:o,C:s,D:i,E:a,F:c,G:l,H:d}=this;for(let u=0;u<64;u++){let f=Vr(a,6)^Vr(a,11)^Vr(a,25),h=d+f+qu(a,c,l)+WA[u]+Ao[u]|0,g=(Vr(n,2)^Vr(n,13)^Vr(n,22))+Wu(n,o,s)|0;d=l,l=c,c=a,a=i+h|0,i=s,s=o,o=n,n=h+g|0}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,d=d+this.H|0,this.set(n,o,s,i,a,c,l,d)}roundClean(){Nt(Ao)}destroy(){this.set(0,0,0,0,0,0,0,0),Nt(this.buffer)}},C2=class extends _2{A=Kn[0]|0;B=Kn[1]|0;C=Kn[2]|0;D=Kn[3]|0;E=Kn[4]|0;F=Kn[5]|0;G=Kn[6]|0;H=Kn[7]|0;constructor(){super(32)}};var L5=I5(["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))),zA=L5[0],GA=L5[1],Io=new Uint32Array(80),To=new Uint32Array(80),k2=class extends bs{constructor(e){super(128,e,16,!1)}get(){let{Ah:e,Al:t,Bh:n,Bl:o,Ch:s,Cl:i,Dh:a,Dl:c,Eh:l,El:d,Fh:u,Fl:f,Gh:h,Gl:p,Hh:g,Hl:m}=this;return[e,t,n,o,s,i,a,c,l,d,u,f,h,p,g,m]}set(e,t,n,o,s,i,a,c,l,d,u,f,h,p,g,m){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=s|0,this.Cl=i|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=d|0,this.Fh=u|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 I=0;I<16;I++,t+=4)Io[I]=e.getUint32(t),To[I]=e.getUint32(t+=4);for(let I=16;I<80;I++){let D=Io[I-15]|0,F=To[I-15]|0,$=Es(D,F,1)^Es(D,F,8)^I2(D,F,7),z=xs(D,F,1)^xs(D,F,8)^T2(D,F,7),S=Io[I-2]|0,x=To[I-2]|0,L=Es(S,x,19)^dc(S,x,61)^I2(S,x,6),B=xs(S,x,19)^fc(S,x,61)^T2(S,x,6),P=C5(z,B,To[I-7],To[I-16]),v=k5(P,$,L,Io[I-7],Io[I-16]);Io[I]=v|0,To[I]=P|0}let{Ah:n,Al:o,Bh:s,Bl:i,Ch:a,Cl:c,Dh:l,Dl:d,Eh:u,El:f,Fh:h,Fl:p,Gh:g,Gl:m,Hh:w,Hl:T}=this;for(let I=0;I<80;I++){let D=Es(u,f,14)^Es(u,f,18)^dc(u,f,41),F=xs(u,f,14)^xs(u,f,18)^fc(u,f,41),$=u&h^~u&g,z=f&p^~f&m,S=P5(T,F,z,GA[I],To[I]),x=R5(S,w,D,$,zA[I],Io[I]),L=S|0,B=Es(n,o,28)^dc(n,o,34)^dc(n,o,39),P=xs(n,o,28)^fc(n,o,34)^fc(n,o,39),v=n&s^n&a^s&a,E=o&i^o&c^i&c;w=g|0,T=m|0,g=h|0,m=p|0,h=u|0,p=f|0,{h:u,l:f}=fn(l|0,d|0,x|0,L|0),l=a|0,d=c|0,a=s|0,c=i|0,s=n|0,i=o|0;let b=T5(L,P,E);n=_5(b,x,B,v),o=b|0}({h:n,l:o}=fn(this.Ah|0,this.Al|0,n|0,o|0)),{h:s,l:i}=fn(this.Bh|0,this.Bl|0,s|0,i|0),{h:a,l:c}=fn(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:d}=fn(this.Dh|0,this.Dl|0,l|0,d|0),{h:u,l:f}=fn(this.Eh|0,this.El|0,u|0,f|0),{h,l:p}=fn(this.Fh|0,this.Fl|0,h|0,p|0),{h:g,l:m}=fn(this.Gh|0,this.Gl|0,g|0,m|0),{h:w,l:T}=fn(this.Hh|0,this.Hl|0,w|0,T|0),this.set(n,o,s,i,a,c,l,d,u,f,h,p,g,m,w,T)}roundClean(){Nt(Io,To)}destroy(){Nt(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}},P2=class extends k2{Ah=bt[0]|0;Al=bt[1]|0;Bh=bt[2]|0;Bl=bt[3]|0;Ch=bt[4]|0;Cl=bt[5]|0;Dh=bt[6]|0;Dl=bt[7]|0;Eh=bt[8]|0;El=bt[9]|0;Fh=bt[10]|0;Fl=bt[11]|0;Gh=bt[12]|0;Gl=bt[13]|0;Hh=bt[14]|0;Hl=bt[15]|0;constructor(){super(64)}};var Tr=uc(()=>new C2,A2(1));var _o=uc(()=>new P2,A2(3));var L2=BigInt(0),R2=BigInt(1);function Vn(r,e=""){if(typeof r!="boolean"){let t=e&&`"${e}" `;throw new Error(t+"expected boolean, got type="+typeof r)}return r}function D5(r){if(typeof r=="bigint"){if(!Gu(r))throw new Error("positive bigint expected, got "+r)}else Dt(r);return r}function hc(r){let e=D5(r).toString(16);return e.length&1?"0"+e:e}function N5(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return r===""?L2:BigInt("0x"+r)}function Ai(r){return N5(Fn(r))}function hn(r){return N5(Fn(vs(ce(r)).reverse()))}function Yu(r,e){Dt(e),r=D5(r);let t=$n(r.toString(16).padStart(e*2,"0"));if(t.length!==e)throw new Error("number too large");return t}function pc(r,e){return Yu(r,e).reverse()}function vs(r){return Uint8Array.from(r)}var Gu=r=>typeof r=="bigint"&&L2<=r;function YA(r,e,t){return Gu(r)&&Gu(e)&&Gu(t)&&e<=r&&r<t}function Co(r,e,t,n){if(!YA(e,t,n))throw new Error("expected valid "+r+": "+t+" <= n < "+n+", got "+e)}function D2(r){let e;for(e=0;r>L2;r>>=R2,e+=1);return e}var mc=r=>(R2<<BigInt(r))-R2;function O5(r,e,t){if(Dt(r,"hashLen"),Dt(e,"qByteLen"),typeof t!="function")throw new Error("hmacFn must be a function");let n=m=>new Uint8Array(m),o=Uint8Array.of(),s=Uint8Array.of(0),i=Uint8Array.of(1),a=1e3,c=n(r),l=n(r),d=0,u=()=>{c.fill(1),l.fill(0),d=0},f=(...m)=>t(l,tr(c,...m)),h=(m=o)=>{l=f(s,m),c=f(),m.length!==0&&(l=f(i,m),c=f())},p=()=>{if(d++>=a)throw new Error("drbg: tried max amount of iterations");let m=0,w=[];for(;m<e;){c=f();let T=c.slice();w.push(T),m+=c.length}return tr(...w)};return(m,w)=>{u(),h(m);let T;for(;!(T=w(p()));)h();return u(),T}}function pn(r,e={},t={}){if(!r||typeof r!="object")throw new Error("expected valid options object");function n(s,i,a){let c=r[s];if(a&&c===void 0)return;let l=typeof c;if(l!==i||c===null)throw new Error(`param "${s}" is invalid: expected ${i}, got ${l}`)}let o=(s,i)=>Object.entries(s).forEach(([a,c])=>n(a,c,i));o(e,!1),o(t,!0)}function Ii(r){let e=new WeakMap;return(t,...n)=>{let o=e.get(t);if(o!==void 0)return o;let s=r(t,...n);return e.set(t,s),s}}var Gt=BigInt(0),ht=BigInt(1),Ss=BigInt(2),U5=BigInt(3),F5=BigInt(4),$5=BigInt(5),jA=BigInt(7),K5=BigInt(8),XA=BigInt(9),V5=BigInt(16);function qe(r,e){let t=r%e;return t>=Gt?t:e+t}function $e(r,e,t){let n=r;for(;e-- >Gt;)n*=n,n%=t;return n}function M5(r,e){if(r===Gt)throw new Error("invert: expected non-zero number");if(e<=Gt)throw new Error("invert: expected positive modulus, got "+e);let t=qe(r,e),n=e,o=Gt,s=ht,i=ht,a=Gt;for(;t!==Gt;){let l=n/t,d=n%t,u=o-i*l,f=s-a*l;n=t,t=d,o=i,s=a,i=u,a=f}if(n!==ht)throw new Error("invert: does not exist");return qe(o,e)}function O2(r,e,t){if(!r.eql(r.sqr(e),t))throw new Error("Cannot find square root")}function H5(r,e){let t=(r.ORDER+ht)/F5,n=r.pow(e,t);return O2(r,n,e),n}function QA(r,e){let t=(r.ORDER-$5)/K5,n=r.mul(e,Ss),o=r.pow(n,t),s=r.mul(e,o),i=r.mul(r.mul(s,Ss),o),a=r.mul(s,r.sub(i,r.ONE));return O2(r,a,e),a}function ZA(r){let e=Ti(r),t=q5(r),n=t(e,e.neg(e.ONE)),o=t(e,n),s=t(e,e.neg(n)),i=(r+jA)/V5;return(a,c)=>{let l=a.pow(c,i),d=a.mul(l,n),u=a.mul(l,o),f=a.mul(l,s),h=a.eql(a.sqr(d),c),p=a.eql(a.sqr(u),c);l=a.cmov(l,d,h),d=a.cmov(f,u,p);let g=a.eql(a.sqr(d),c),m=a.cmov(l,d,g);return O2(a,m,c),m}}function q5(r){if(r<U5)throw new Error("sqrt is not defined for small field");let e=r-ht,t=0;for(;e%Ss===Gt;)e/=Ss,t++;let n=Ss,o=Ti(r);for(;B5(o,n)===1;)if(n++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(t===1)return H5;let s=o.pow(n,e),i=(e+ht)/Ss;return function(c,l){if(c.is0(l))return l;if(B5(c,l)!==1)throw new Error("Cannot find square root");let d=t,u=c.mul(c.ONE,s),f=c.pow(l,e),h=c.pow(l,i);for(;!c.eql(f,c.ONE);){if(c.is0(f))return c.ZERO;let p=1,g=c.sqr(f);for(;!c.eql(g,c.ONE);)if(p++,g=c.sqr(g),p===d)throw new Error("Cannot find square root");let m=ht<<BigInt(d-p-1),w=c.pow(u,m);d=p,u=c.sqr(w),f=c.mul(f,u),h=c.mul(h,w)}return h}}function JA(r){return r%F5===U5?H5:r%K5===$5?QA:r%V5===XA?ZA(r):q5(r)}var W5=(r,e)=>(qe(r,e)&ht)===ht,eI=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function M2(r){let e={ORDER:"bigint",BYTES:"number",BITS:"number"},t=eI.reduce((n,o)=>(n[o]="function",n),e);return pn(r,t),r}function tI(r,e,t){if(t<Gt)throw new Error("invalid exponent, negatives unsupported");if(t===Gt)return r.ONE;if(t===ht)return e;let n=r.ONE,o=e;for(;t>Gt;)t&ht&&(n=r.mul(n,o)),o=r.sqr(o),t>>=ht;return n}function gc(r,e,t=!1){let n=new Array(e.length).fill(t?r.ZERO:void 0),o=e.reduce((i,a,c)=>r.is0(a)?i:(n[c]=i,r.mul(i,a)),r.ONE),s=r.inv(o);return e.reduceRight((i,a,c)=>r.is0(a)?i:(n[c]=r.mul(i,n[c]),r.mul(i,a)),s),n}function B5(r,e){let t=(r.ORDER-ht)/Ss,n=r.pow(e,t),o=r.eql(n,r.ONE),s=r.eql(n,r.ZERO),i=r.eql(n,r.neg(r.ONE));if(!o&&!s&&!i)throw new Error("invalid Legendre symbol result");return o?1:s?0:-1}function rI(r,e){e!==void 0&&Dt(e);let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}var N2=class{ORDER;BITS;BYTES;isLE;ZERO=Gt;ONE=ht;_lengths;_sqrt;_mod;constructor(e,t={}){if(e<=Gt)throw new Error("invalid field: expected ORDER > 0, got "+e);let n;this.isLE=!1,t!=null&&typeof t=="object"&&(typeof t.BITS=="number"&&(n=t.BITS),typeof t.sqrt=="function"&&(this.sqrt=t.sqrt),typeof t.isLE=="boolean"&&(this.isLE=t.isLE),t.allowedLengths&&(this._lengths=t.allowedLengths?.slice()),typeof t.modFromBytes=="boolean"&&(this._mod=t.modFromBytes));let{nBitLength:o,nByteLength:s}=rI(e,n);if(s>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");this.ORDER=e,this.BITS=o,this.BYTES=s,this._sqrt=void 0,Object.preventExtensions(this)}create(e){return qe(e,this.ORDER)}isValid(e){if(typeof e!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof e);return Gt<=e&&e<this.ORDER}is0(e){return e===Gt}isValidNot0(e){return!this.is0(e)&&this.isValid(e)}isOdd(e){return(e&ht)===ht}neg(e){return qe(-e,this.ORDER)}eql(e,t){return e===t}sqr(e){return qe(e*e,this.ORDER)}add(e,t){return qe(e+t,this.ORDER)}sub(e,t){return qe(e-t,this.ORDER)}mul(e,t){return qe(e*t,this.ORDER)}pow(e,t){return tI(this,e,t)}div(e,t){return qe(e*M5(t,this.ORDER),this.ORDER)}sqrN(e){return e*e}addN(e,t){return e+t}subN(e,t){return e-t}mulN(e,t){return e*t}inv(e){return M5(e,this.ORDER)}sqrt(e){return this._sqrt||(this._sqrt=JA(this.ORDER)),this._sqrt(this,e)}toBytes(e){return this.isLE?pc(e,this.BYTES):Yu(e,this.BYTES)}fromBytes(e,t=!1){ce(e);let{_lengths:n,BYTES:o,isLE:s,ORDER:i,_mod:a}=this;if(n){if(!n.includes(e.length)||e.length>o)throw new Error("Field.fromBytes: expected "+n+" bytes, got "+e.length);let l=new Uint8Array(o);l.set(e,s?0:l.length-e.length),e=l}if(e.length!==o)throw new Error("Field.fromBytes: expected "+o+" bytes, got "+e.length);let c=s?hn(e):Ai(e);if(a&&(c=qe(c,i)),!t&&!this.isValid(c))throw new Error("invalid field element: outside of range 0..ORDER");return c}invertBatch(e){return gc(this,e)}cmov(e,t,n){return n?t:e}};function Ti(r,e={}){return new N2(r,e)}function z5(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=z5(r);return e+Math.ceil(e/2)}function U2(r,e,t=!1){ce(r);let n=r.length,o=z5(e),s=B2(e);if(n<16||n<s||n>1024)throw new Error("expected "+s+"-1024 bytes of input, got "+n);let i=t?hn(r):Ai(r),a=qe(i,e-ht)+ht;return t?pc(a,o):Yu(a,o)}var _i=BigInt(0),As=BigInt(1);function yc(r,e){let t=e.negate();return r?t:e}function Is(r,e){let t=gc(r.Fp,e.map(n=>n.Z));return e.map((n,o)=>r.fromAffine(n.toAffine(t[o])))}function X5(r,e){if(!Number.isSafeInteger(r)||r<=0||r>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+r)}function F2(r,e){X5(r,e);let t=Math.ceil(e/r)+1,n=2**(r-1),o=2**r,s=mc(r),i=BigInt(r);return{windows:t,windowSize:n,mask:s,maxNumber:o,shiftBy:i}}function G5(r,e,t){let{windowSize:n,mask:o,maxNumber:s,shiftBy:i}=t,a=Number(r&o),c=r>>i;a>n&&(a-=s,c+=As);let l=e*n,d=l+Math.abs(a)-1,u=a===0,f=a<0,h=e%2!==0;return{nextN:c,offset:d,isZero:u,isNeg:f,isNegF:h,offsetF:l}}var $2=new WeakMap,Q5=new WeakMap;function K2(r){return Q5.get(r)||1}function Y5(r){if(r!==_i)throw new Error("invalid wNAF")}var Ci=class{BASE;ZERO;Fn;bits;constructor(e,t){this.BASE=e.BASE,this.ZERO=e.ZERO,this.Fn=e.Fn,this.bits=t}_unsafeLadder(e,t,n=this.ZERO){let o=e;for(;t>_i;)t&As&&(n=n.add(o)),o=o.double(),t>>=As;return n}precomputeWindow(e,t){let{windows:n,windowSize:o}=F2(t,this.bits),s=[],i=e,a=i;for(let c=0;c<n;c++){a=i,s.push(a);for(let l=1;l<o;l++)a=a.add(i),s.push(a);i=a.double()}return s}wNAF(e,t,n){if(!this.Fn.isValid(n))throw new Error("invalid scalar");let o=this.ZERO,s=this.BASE,i=F2(e,this.bits);for(let a=0;a<i.windows;a++){let{nextN:c,offset:l,isZero:d,isNeg:u,isNegF:f,offsetF:h}=G5(n,a,i);n=c,d?s=s.add(yc(f,t[h])):o=o.add(yc(u,t[l]))}return Y5(n),{p:o,f:s}}wNAFUnsafe(e,t,n,o=this.ZERO){let s=F2(e,this.bits);for(let i=0;i<s.windows&&n!==_i;i++){let{nextN:a,offset:c,isZero:l,isNeg:d}=G5(n,i,s);if(n=a,!l){let u=t[c];o=o.add(d?u.negate():u)}}return Y5(n),o}getPrecomputes(e,t,n){let o=$2.get(t);return o||(o=this.precomputeWindow(t,e),e!==1&&(typeof n=="function"&&(o=n(o)),$2.set(t,o))),o}cached(e,t,n){let o=K2(e);return this.wNAF(o,this.getPrecomputes(o,e,n),t)}unsafe(e,t,n,o){let s=K2(e);return s===1?this._unsafeLadder(e,t,o):this.wNAFUnsafe(s,this.getPrecomputes(s,e,n),t,o)}createCache(e,t){X5(t,this.bits),Q5.set(e,t),$2.delete(e)}hasCache(e){return K2(e)!==1}};function Z5(r,e,t,n){let o=e,s=r.ZERO,i=r.ZERO;for(;t>_i||n>_i;)t&As&&(s=s.add(o)),n&As&&(i=i.add(o)),o=o.double(),t>>=As,n>>=As;return{p1:s,p2:i}}function j5(r,e,t){if(e){if(e.ORDER!==r)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return M2(e),e}else return Ti(r,{isLE:t})}function ju(r,e,t={},n){if(n===void 0&&(n=r==="edwards"),!e||typeof e!="object")throw new Error(`expected valid ${r} CURVE object`);for(let c of["p","n","h"]){let l=e[c];if(!(typeof l=="bigint"&&l>_i))throw new Error(`CURVE.${c} must be positive bigint`)}let o=j5(e.p,t.Fp,n),s=j5(e.n,t.Fn,n),a=["Gx","Gy","a",r==="weierstrass"?"b":"d"];for(let c of a)if(!o.isValid(e[c]))throw new Error(`CURVE.${c} must be valid field element of CURVE.Fp`);return e=Object.freeze(Object.assign({},e)),{CURVE:e,Fp:o,Fn:s}}function ki(r,e){return function(n){let o=r(n);return{secretKey:o,publicKey:e(o)}}}var ko=BigInt(0),pt=BigInt(1),V2=BigInt(2),nI=BigInt(8);function oI(r,e,t,n){let o=r.sqr(t),s=r.sqr(n),i=r.add(r.mul(e.a,o),s),a=r.add(r.ONE,r.mul(e.d,r.mul(o,s)));return r.eql(i,a)}function J5(r,e={}){let t=ju("edwards",r,e,e.FpFnLE),{Fp:n,Fn:o}=t,s=t.CURVE,{h:i}=s;pn(e,{},{uvRatio:"function"});let a=V2<<BigInt(o.BYTES*8)-pt,c=m=>n.create(m),l=e.uvRatio||((m,w)=>{try{return{isValid:!0,value:n.sqrt(n.div(m,w))}}catch{return{isValid:!1,value:ko}}});if(!oI(n,s,s.Gx,s.Gy))throw new Error("bad curve params: generator point");function d(m,w,T=!1){let I=T?pt:ko;return Co("coordinate "+m,w,I,a),w}function u(m){if(!(m instanceof p))throw new Error("EdwardsPoint expected")}let f=Ii((m,w)=>{let{X:T,Y:I,Z:D}=m,F=m.is0();w==null&&(w=F?nI:n.inv(D));let $=c(T*w),z=c(I*w),S=n.mul(D,w);if(F)return{x:ko,y:pt};if(S!==pt)throw new Error("invZ was invalid");return{x:$,y:z}}),h=Ii(m=>{let{a:w,d:T}=s;if(m.is0())throw new Error("bad point: ZERO");let{X:I,Y:D,Z:F,T:$}=m,z=c(I*I),S=c(D*D),x=c(F*F),L=c(x*x),B=c(z*w),P=c(x*c(B+S)),v=c(L+c(T*c(z*S)));if(P!==v)throw new Error("bad point: equation left != right (1)");let E=c(I*D),b=c(F*$);if(E!==b)throw new Error("bad point: equation left != right (2)");return!0});class p{static BASE=new p(s.Gx,s.Gy,pt,c(s.Gx*s.Gy));static ZERO=new p(ko,pt,pt,ko);static Fp=n;static Fn=o;X;Y;Z;T;constructor(w,T,I,D){this.X=d("x",w),this.Y=d("y",T),this.Z=d("z",I,!0),this.T=d("t",D),Object.freeze(this)}static CURVE(){return s}static fromAffine(w){if(w instanceof p)throw new Error("extended point not allowed");let{x:T,y:I}=w||{};return d("x",T),d("y",I),new p(T,I,pt,c(T*I))}static fromBytes(w,T=!1){let I=n.BYTES,{a:D,d:F}=s;w=vs(ce(w,I,"point")),Vn(T,"zip215");let $=vs(w),z=w[I-1];$[I-1]=z&-129;let S=hn($),x=T?a:n.ORDER;Co("point.y",S,ko,x);let L=c(S*S),B=c(L-pt),P=c(F*L-D),{isValid:v,value:E}=l(B,P);if(!v)throw new Error("bad point: invalid y coordinate");let b=(E&pt)===pt,_=(z&128)!==0;if(!T&&E===ko&&_)throw new Error("bad point: x=0 and x_0=1");return _!==b&&(E=c(-E)),p.fromAffine({x:E,y:S})}static fromHex(w,T=!1){return p.fromBytes($n(w),T)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(w=8,T=!0){return g.createCache(this,w),T||this.multiply(V2),this}assertValidity(){h(this)}equals(w){u(w);let{X:T,Y:I,Z:D}=this,{X:F,Y:$,Z:z}=w,S=c(T*z),x=c(F*D),L=c(I*z),B=c($*D);return S===x&&L===B}is0(){return this.equals(p.ZERO)}negate(){return new p(c(-this.X),this.Y,this.Z,c(-this.T))}double(){let{a:w}=s,{X:T,Y:I,Z:D}=this,F=c(T*T),$=c(I*I),z=c(V2*c(D*D)),S=c(w*F),x=T+I,L=c(c(x*x)-F-$),B=S+$,P=B-z,v=S-$,E=c(L*P),b=c(B*v),_=c(L*v),M=c(P*B);return new p(E,b,M,_)}add(w){u(w);let{a:T,d:I}=s,{X:D,Y:F,Z:$,T:z}=this,{X:S,Y:x,Z:L,T:B}=w,P=c(D*S),v=c(F*x),E=c(z*I*B),b=c($*L),_=c((D+F)*(S+x)-P-v),M=b-E,O=b+E,k=c(v-T*P),U=c(_*M),K=c(O*k),W=c(_*k),we=c(M*O);return new p(U,K,we,W)}subtract(w){return this.add(w.negate())}multiply(w){if(!o.isValidNot0(w))throw new Error("invalid scalar: expected 1 <= sc < curve.n");let{p:T,f:I}=g.cached(this,w,D=>Is(p,D));return Is(p,[T,I])[0]}multiplyUnsafe(w,T=p.ZERO){if(!o.isValid(w))throw new Error("invalid scalar: expected 0 <= sc < curve.n");return w===ko?p.ZERO:this.is0()||w===pt?this:g.unsafe(this,w,I=>Is(p,I),T)}isSmallOrder(){return this.multiplyUnsafe(i).is0()}isTorsionFree(){return g.unsafe(this,s.n).is0()}toAffine(w){return f(this,w)}clearCofactor(){return i===pt?this:this.multiplyUnsafe(i)}toBytes(){let{x:w,y:T}=this.toAffine(),I=n.toBytes(T);return I[I.length-1]|=w&pt?128:0,I}toHex(){return Fn(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}let g=new Ci(p,o.BITS);return p.BASE.precompute(8),p}function e8(r,e,t={}){if(typeof e!="function")throw new Error('"hash" function param is required');pn(t,{},{adjustScalarBytes:"function",randomBytes:"function",domain:"function",prehash:"function",mapToCurve:"function"});let{prehash:n}=t,{BASE:o,Fp:s,Fn:i}=r,a=t.randomBytes||dn,c=t.adjustScalarBytes||(S=>S),l=t.domain||((S,x,L)=>{if(Vn(L,"phflag"),x.length||L)throw new Error("Contexts/pre-hash are not supported");return S});function d(S){return i.create(hn(S))}function u(S){let x=I.secretKey;ce(S,I.secretKey,"secretKey");let L=ce(e(S),2*x,"hashedSecretKey"),B=c(L.slice(0,x)),P=L.slice(x,2*x),v=d(B);return{head:B,prefix:P,scalar:v}}function f(S){let{head:x,prefix:L,scalar:B}=u(S),P=o.multiply(B),v=P.toBytes();return{head:x,prefix:L,scalar:B,point:P,pointBytes:v}}function h(S){return f(S).pointBytes}function p(S=Uint8Array.of(),...x){let L=tr(...x);return d(e(l(L,ce(S,void 0,"context"),!!n)))}function g(S,x,L={}){S=ce(S,void 0,"message"),n&&(S=n(S));let{prefix:B,scalar:P,pointBytes:v}=f(x),E=p(L.context,B,S),b=o.multiply(E).toBytes(),_=p(L.context,b,v,S),M=i.create(E+_*P);if(!i.isValid(M))throw new Error("sign failed: invalid s");let O=tr(b,i.toBytes(M));return ce(O,I.signature,"result")}let m={zip215:!0};function w(S,x,L,B=m){let{context:P,zip215:v}=B,E=I.signature;S=ce(S,E,"signature"),x=ce(x,void 0,"message"),L=ce(L,I.publicKey,"publicKey"),v!==void 0&&Vn(v,"zip215"),n&&(x=n(x));let b=E/2,_=S.subarray(0,b),M=hn(S.subarray(b,E)),O,k,U;try{O=r.fromBytes(L,v),k=r.fromBytes(_,v),U=o.multiplyUnsafe(M)}catch{return!1}if(!v&&O.isSmallOrder())return!1;let K=p(P,k.toBytes(),O.toBytes(),x);return k.add(O.multiplyUnsafe(K)).subtract(U).clearCofactor().is0()}let T=s.BYTES,I={secretKey:T,publicKey:T,signature:2*T,seed:T};function D(S=a(I.seed)){return ce(S,I.seed,"seed")}function F(S){return ys(S)&&S.length===i.BYTES}function $(S,x){try{return!!r.fromBytes(S,x)}catch{return!1}}let z={getExtendedPublicKey:f,randomSecretKey:D,isValidSecretKey:F,isValidPublicKey:$,toMontgomery(S){let{y:x}=r.fromBytes(S),L=I.publicKey,B=L===32;if(!B&&L!==57)throw new Error("only defined for 25519 and 448");let P=B?s.div(pt+x,pt-x):s.div(x-pt,x+pt);return s.toBytes(P)},toMontgomerySecret(S){let x=I.secretKey;ce(S,x);let L=e(S.subarray(0,x));return c(L).subarray(0,x)}};return Object.freeze({keygen:ki(D,h),getPublicKey:h,sign:g,verify:w,utils:z,Point:r,lengths:I})}var wc=BigInt(0),Pi=BigInt(1),Xu=BigInt(2);function sI(r){return pn(r,{adjustScalarBytes:"function",powPminus2:"function"}),Object.freeze({...r})}function t8(r){let e=sI(r),{P:t,type:n,adjustScalarBytes:o,powPminus2:s,randomBytes:i}=e,a=n==="x25519";if(!a&&n!=="x448")throw new Error("invalid type");let c=i||dn,l=a?255:448,d=a?32:56,u=BigInt(a?9:5),f=BigInt(a?121665:39081),h=a?Xu**BigInt(254):Xu**BigInt(447),p=a?BigInt(8)*Xu**BigInt(251)-Pi:BigInt(4)*Xu**BigInt(445)-Pi,g=h+p+Pi,m=E=>qe(E,t),w=T(u);function T(E){return pc(m(E),d)}function I(E){let b=vs(ce(E,d,"uCoordinate"));return a&&(b[31]&=127),m(hn(b))}function D(E){return hn(o(vs(ce(E,d,"scalar"))))}function F(E,b){let _=L(I(b),D(E));if(_===wc)throw new Error("invalid private or public key received");return T(_)}function $(E){return F(E,w)}let z=$,S=F;function x(E,b,_){let M=m(E*(b-_));return b=m(b-M),_=m(_+M),{x_2:b,x_3:_}}function L(E,b){Co("u",E,wc,t),Co("scalar",b,h,g);let _=b,M=E,O=Pi,k=wc,U=E,K=Pi,W=wc;for(let pe=BigInt(l-1);pe>=wc;pe--){let ue=_>>pe&Pi;W^=ue,{x_2:O,x_3:U}=x(W,O,U),{x_2:k,x_3:K}=x(W,k,K),W=ue;let be=O+k,Re=m(be*be),Je=O-k,Ee=m(Je*Je),it=Re-Ee,ui=U+K,Eu=U-K,Wa=m(Eu*be),x6=m(ui*Je),v6=Wa+x6,S6=Wa-x6;U=m(v6*v6),K=m(M*m(S6*S6)),O=m(Re*Ee),k=m(it*(Re+m(f*it)))}({x_2:O,x_3:U}=x(W,O,U)),{x_2:k,x_3:K}=x(W,k,K);let we=s(k);return m(O*we)}let B={secretKey:d,publicKey:d,seed:d},P=(E=c(d))=>(ce(E,B.seed,"seed"),E),v={randomSecretKey:P};return Object.freeze({keygen:ki(P,z),getSharedSecret:S,getPublicKey:z,scalarMult:F,scalarMultBase:$,utils:v,GuBytes:w.slice(),lengths:B})}var iI=BigInt(1),r8=BigInt(2),aI=BigInt(3),cI=BigInt(5),lI=BigInt(8),Qu=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),uI={p:Qu,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:lI,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function o8(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),s=Qu,a=r*r%s*r%s,c=$e(a,r8,s)*a%s,l=$e(c,iI,s)*r%s,d=$e(l,cI,s)*l%s,u=$e(d,e,s)*d%s,f=$e(u,t,s)*u%s,h=$e(f,n,s)*f%s,p=$e(h,o,s)*h%s,g=$e(p,o,s)*h%s,m=$e(g,e,s)*d%s;return{pow_p_5_8:$e(m,r8,s)*r%s,b2:a}}function s8(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}var n8=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function dI(r,e){let t=Qu,n=qe(e*e*e,t),o=qe(n*n*e,t),s=o8(r*o).pow_p_5_8,i=qe(r*n*s,t),a=qe(e*i*i,t),c=i,l=qe(i*n8,t),d=a===r,u=a===qe(-r,t),f=a===qe(-r*n8,t);return d&&(i=c),(u||f)&&(i=l),W5(i,t)&&(i=qe(-i,t)),{isValid:d||u,value:i}}var fI=J5(uI,{uvRatio:dI});function hI(r){return e8(fI,_o,Object.assign({adjustScalarBytes:s8},r))}var bc=hI({});var Ec=(()=>{let r=Qu;return t8({P:r,type:"x25519",powPminus2:e=>{let{pow_p_5_8:t,b2:n}=o8(e);return qe($e(t,aI,r)*n,r)},adjustScalarBytes:s8})})();var Ts=32,fr=64,H2=32;var Ri,i8=(async()=>{try{return await nt.get().subtle.generateKey({name:"Ed25519"},!0,["sign","verify"]),!0}catch{return!1}})();function a8(){let r=bc.utils.randomSecretKey(),e=bc.getPublicKey(r);return{privateKey:wI(r,e),publicKey:e}}async function pI(r,e){let t;r.length===fr?t=r.subarray(0,32):t=r;let n={crv:"Ed25519",kty:"OKP",x:R(r.subarray(32),"base64url"),d:R(t,"base64url"),ext:!0,key_ops:["sign"]},o=await nt.get().subtle.importKey("jwk",n,{name:"Ed25519"},!0,["sign"]),s=await nt.get().subtle.sign({name:"Ed25519"},o,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(s,0,s.byteLength)}function mI(r,e){let t=r.subarray(0,H2);return bc.sign(e instanceof Uint8Array?e:e.subarray(),t)}async function c8(r,e){return Ri==null&&(Ri=await i8),Ri?pI(r,e):mI(r,e)}async function gI(r,e,t){if(r.buffer instanceof ArrayBuffer){let n=await nt.get().subtle.importKey("raw",r.buffer,{name:"Ed25519"},!1,["verify"]);return await nt.get().subtle.verify({name:"Ed25519"},n,e,t instanceof Uint8Array?t:t.subarray())}throw new TypeError("WebCrypto does not support SharedArrayBuffer for Ed25519 keys")}function yI(r,e,t){return bc.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}async function l8(r,e,t){return Ri==null&&(Ri=await i8),Ri?gI(r,e,t):yI(r,e,t)}function wI(r,e){let t=new Uint8Array(fr);for(let n=0;n<H2;n++)t[n]=r[n],t[H2+n]=e[n];return t}function Li(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var xc=class{type="Ed25519";raw;constructor(e){this.raw=Ni(e,Ts)}toMultihash(){return dt.digest(ft(this))}toCID(){return G.createV1(114,this.toMultihash())}toString(){return De.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}verify(e,t,n){n?.signal?.throwIfAborted();let o=l8(this.raw,t,e);return Li(o)?o.then(s=>(n?.signal?.throwIfAborted(),s)):o}},Di=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=Ni(e,fr),this.publicKey=new xc(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}sign(e,t){t?.signal?.throwIfAborted();let n=c8(this.raw,e);return Li(n)?n.then(o=>(t?.signal?.throwIfAborted(),o)):(t?.signal?.throwIfAborted(),n)}};function q2(r){if(r.length>fr){r=Ni(r,fr+Ts);let n=r.subarray(0,fr),o=r.subarray(fr,r.length);return new Di(n,o)}r=Ni(r,fr);let e=r.subarray(0,fr),t=r.subarray(Ts);return new Di(e,t)}function W2(r){return r=Ni(r,Ts),new xc(r)}async function d8(){let{privateKey:r,publicKey:e}=a8();return new Di(r,e)}function Ni(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new A(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var bI=Math.pow(2,7),EI=Math.pow(2,14),xI=Math.pow(2,21),z2=Math.pow(2,28),G2=Math.pow(2,35),Y2=Math.pow(2,42),j2=Math.pow(2,49),Te=128,Ot=127;function he(r){if(r<bI)return 1;if(r<EI)return 2;if(r<xI)return 3;if(r<z2)return 4;if(r<G2)return 5;if(r<Y2)return 6;if(r<j2)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Oi(r,e,t=0){switch(he(r)){case 8:e[t++]=r&255|Te,r/=128;case 7:e[t++]=r&255|Te,r/=128;case 6:e[t++]=r&255|Te,r/=128;case 5:e[t++]=r&255|Te,r/=128;case 4:e[t++]=r&255|Te,r>>>=7;case 3:e[t++]=r&255|Te,r>>>=7;case 2:e[t++]=r&255|Te,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function vI(r,e,t=0){switch(he(r)){case 8:e.set(t++,r&255|Te),r/=128;case 7:e.set(t++,r&255|Te),r/=128;case 6:e.set(t++,r&255|Te),r/=128;case 5:e.set(t++,r&255|Te),r/=128;case 4:e.set(t++,r&255|Te),r>>>=7;case 3:e.set(t++,r&255|Te),r>>>=7;case 2:e.set(t++,r&255|Te),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function X2(r,e){let t=r[e],n=0;if(n+=t&Ot,t<Te||(t=r[e+1],n+=(t&Ot)<<7,t<Te)||(t=r[e+2],n+=(t&Ot)<<14,t<Te)||(t=r[e+3],n+=(t&Ot)<<21,t<Te)||(t=r[e+4],n+=(t&Ot)*z2,t<Te)||(t=r[e+5],n+=(t&Ot)*G2,t<Te)||(t=r[e+6],n+=(t&Ot)*Y2,t<Te)||(t=r[e+7],n+=(t&Ot)*j2,t<Te))return n;throw new RangeError("Could not decode varint")}function SI(r,e){let t=r.get(e),n=0;if(n+=t&Ot,t<Te||(t=r.get(e+1),n+=(t&Ot)<<7,t<Te)||(t=r.get(e+2),n+=(t&Ot)<<14,t<Te)||(t=r.get(e+3),n+=(t&Ot)<<21,t<Te)||(t=r.get(e+4),n+=(t&Ot)*z2,t<Te)||(t=r.get(e+5),n+=(t&Ot)*G2,t<Te)||(t=r.get(e+6),n+=(t&Ot)*Y2,t<Te)||(t=r.get(e+7),n+=(t&Ot)*j2,t<Te))return n;throw new RangeError("Could not decode varint")}function Mt(r,e,t=0){return e==null&&(e=Ge(he(r))),e instanceof Uint8Array?Oi(r,e,t):vI(r,e,t)}function hr(r,e=0){return r instanceof Uint8Array?X2(r,e):SI(r,e)}var Q2=new Float32Array([-0]),Po=new Uint8Array(Q2.buffer);function f8(r,e,t){Q2[0]=r,e[t]=Po[0],e[t+1]=Po[1],e[t+2]=Po[2],e[t+3]=Po[3]}function h8(r,e){return Po[0]=r[e],Po[1]=r[e+1],Po[2]=r[e+2],Po[3]=r[e+3],Q2[0]}var Z2=new Float64Array([-0]),Bt=new Uint8Array(Z2.buffer);function p8(r,e,t){Z2[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 m8(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],Z2[0]}var AI=BigInt(Number.MAX_SAFE_INTEGER),II=BigInt(Number.MIN_SAFE_INTEGER),pr=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 _s;if(e<AI&&e>II)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>g8&&(o=0n,++n>g8&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return _s;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):_s}},_s=new pr(0,0);_s.toBigInt=function(){return 0n};_s.zzEncode=_s.zzDecode=function(){return this};_s.length=function(){return 1};var g8=4294967296n;function y8(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 w8(r,e,t){if(t-e<1)return"";let o,s=[],i=0,a;for(;e<t;)a=r[e++],a<128?s[i++]=a:a>191&&a<224?s[i++]=(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,s[i++]=55296+(a>>10),s[i++]=56320+(a&1023)):s[i++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,i>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,s)),i=0);return o!=null?(i>0&&o.push(String.fromCharCode.apply(String,s.slice(0,i))),o.join("")):String.fromCharCode.apply(String,s.slice(0,i))}function J2(r,e,t){let n=t,o,s;for(let i=0;i<r.length;++i)o=r.charCodeAt(i),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((s=r.charCodeAt(i+1))&64512)===56320?(o=65536+((o&1023)<<10)+(s&1023),++i,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 Hr(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Zu(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var em=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,Hr(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 Hr(this,4);return Zu(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Hr(this,4);return Zu(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Hr(this,4);let e=h8(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Hr(this,4);let e=m8(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 Hr(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return w8(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Hr(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Hr(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 pr(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 Hr(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 Hr(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 Hr(this,8);let e=Zu(this.buf,this.pos+=4),t=Zu(this.buf,this.pos+=4);return new pr(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=X2(this.buf,this.pos);return this.pos+=he(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 tm(r){return new em(r instanceof Uint8Array?r:r.subarray())}function te(r,e,t){let n=tm(r);return e.decode(n,void 0,t)}function rm(r){let e=r??8192,t=e>>>1,n,o=e;return function(i){if(i<1||i>t)return Ge(i);o+i>e&&(n=Ge(e),o=0);let a=n.subarray(o,o+=i);return(o&7)!==0&&(o=(o|7)+1),a}}var Cs=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function nm(){}var sm=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},TI=rm();function _I(r){return globalThis.Buffer!=null?Ge(r):TI(r)}var Sc=class{len;head;tail;states;constructor(){this.len=0,this.head=new Cs(nm,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new Cs(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new im((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(Ju,10,pr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=pr.fromBigInt(e);return this._push(Ju,t.length(),t)}uint64Number(e){return this._push(Oi,he(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=pr.fromBigInt(e).zzEncode();return this._push(Ju,t.length(),t)}sint64Number(e){let t=pr.fromNumber(e).zzEncode();return this._push(Ju,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(om,1,e?1:0)}fixed32(e){return this._push(vc,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=pr.fromBigInt(e);return this._push(vc,4,t.lo)._push(vc,4,t.hi)}fixed64Number(e){let t=pr.fromNumber(e);return this._push(vc,4,t.lo)._push(vc,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(f8,4,e)}double(e){return this._push(p8,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(om,1,0):this.uint32(t)._push(kI,t,e)}string(e){let t=y8(e);return t!==0?this.uint32(t)._push(J2,t,e):this._push(om,1,0)}fork(){return this.states=new sm(this),this.head=this.tail=new Cs(nm,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 Cs(nm,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=_I(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function om(r,e,t){e[t]=r&255}function CI(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var im=class extends Cs{next;constructor(e,t){super(CI,e,t),this.next=void 0}};function Ju(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 vc(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 kI(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(Sc.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(PI,e,r),this},Sc.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(RI,e,r),this});function PI(r,e,t){e.set(r,t)}function RI(r,e,t){r.length<40?J2(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(C(r),t)}function am(){return new Sc}function re(r,e){let t=am();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Mi;(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"})(Mi||(Mi={}));function ed(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function We(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(s,i){let a=e(s);i.int32(a)},n=function(s){let i=s.int32();return e(i)};return ed("enum",Mi.VARINT,t,n)}function ne(r,e){return ed("message",Mi.LENGTH_DELIMITED,r,e)}var Ne=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},Ac=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var Be;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1",r.ECDSA="ECDSA"})(Be||(Be={}));var cm;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1",r[r.ECDSA=3]="ECDSA"})(cm||(cm={}));(function(r){r.codec=()=>We(cm)})(Be||(Be={}));var mn;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Be.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.Type=Be.codec().decode(t);break}case 2:{s.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(mn||(mn={}));var Ic;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Be.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.Type=Be.codec().decode(t);break}case 2:{s.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ic||(Ic={}));function Yt(r){if(isNaN(r)||r<=0)throw new A("random bytes length must be a Number bigger than 0");return dn(r)}var _c={};et(_c,{MAX_RSA_KEY_SIZE:()=>lm,generateRSAKeyPair:()=>wm,jwkToJWKKeyPair:()=>S8,jwkToPkcs1:()=>OI,jwkToPkix:()=>hm,jwkToRSAPrivateKey:()=>ym,pkcs1MessageToJwk:()=>dm,pkcs1MessageToRSAPrivateKey:()=>td,pkcs1ToJwk:()=>NI,pkcs1ToRSAPrivateKey:()=>pm,pkixMessageToJwk:()=>fm,pkixMessageToRSAPublicKey:()=>gm,pkixToJwk:()=>MI,pkixToRSAPublicKey:()=>mm});var Bi=class{type="RSA";jwk;_raw;_multihash;constructor(e,t){this.jwk=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=_c.jwkToPkix(this.jwk)),this._raw}toMultihash(){return this._multihash}toCID(){return G.createV1(114,this._multihash)}toString(){return De.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}verify(e,t,n){return v8(this.jwk,t,e,n)}},Tc=class{type="RSA";jwk;_raw;publicKey;constructor(e,t){this.jwk=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=_c.jwkToPkcs1(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}sign(e,t){return x8(this.jwk,e,t)}};var lm=8192,um=18,LI=1062,DI=Uint8Array.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);function NI(r){let e=Ir(r);return dm(e)}function dm(r){return{n:R(r[1],"base64url"),e:R(r[2],"base64url"),d:R(r[3],"base64url"),p:R(r[4],"base64url"),q:R(r[5],"base64url"),dp:R(r[6],"base64url"),dq:R(r[7],"base64url"),qi:R(r[8],"base64url"),kty:"RSA"}}function OI(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 A("JWK was missing components");return Kr([zt(Uint8Array.from([0])),zt(C(r.n,"base64url")),zt(C(r.e,"base64url")),zt(C(r.d,"base64url")),zt(C(r.p,"base64url")),zt(C(r.q,"base64url")),zt(C(r.dp,"base64url")),zt(C(r.dq,"base64url")),zt(C(r.qi,"base64url"))]).subarray()}function MI(r){let e=Ir(r,{offset:0});return fm(e)}function fm(r){let e=Ir(r[1],{offset:0});return{kty:"RSA",n:R(e[0],"base64url"),e:R(e[1],"base64url")}}function hm(r){if(r.n==null||r.e==null)throw new A("JWK was missing components");return Kr([DI,lc(Kr([zt(C(r.n,"base64url")),zt(C(r.e,"base64url"))]))]).subarray()}function pm(r){let e=Ir(r);return td(e)}function td(r){let e=dm(r);return ym(e)}function mm(r,e){if(r.byteLength>=LI)throw new Nn("Key size is too large");let t=Ir(r,{offset:0});return gm(t,r,e)}function gm(r,e,t){let n=fm(r);if(t==null){let o=Tr(mn.encode({Type:Be.RSA,Data:e}));t=Wt(um,o)}return new Bi(n,t)}function ym(r){if(I8(r)>lm)throw new A("Key size is too large");let e=S8(r),t=Tr(mn.encode({Type:Be.RSA,Data:hm(e.publicKey)})),n=Wt(um,t);return new Tc(e.privateKey,new Bi(e.publicKey,n))}async function wm(r){if(r>lm)throw new A("Key size is too large");let e=await A8(r),t=Tr(mn.encode({Type:Be.RSA,Data:hm(e.publicKey)})),n=Wt(um,t);return new Tc(e.privateKey,new Bi(e.publicKey,n))}function S8(r){if(r==null)throw new A("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}async function A8(r,e){let t=await nt.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]);e?.signal?.throwIfAborted();let n=await BI(t,e);return{privateKey:n[0],publicKey:n[1]}}async function x8(r,e,t){let n=await nt.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]);t?.signal?.throwIfAborted();let o=await nt.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},n,e instanceof Uint8Array?e:e.subarray());return t?.signal?.throwIfAborted(),new Uint8Array(o,0,o.byteLength)}async function v8(r,e,t,n){let o=await nt.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);n?.signal?.throwIfAborted();let s=await nt.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},o,e,t instanceof Uint8Array?t:t.subarray());return n?.signal?.throwIfAborted(),s}async function BI(r,e){if(r.privateKey==null||r.publicKey==null)throw new A("Private and public key are required");let t=await Promise.all([nt.get().subtle.exportKey("jwk",r.privateKey),nt.get().subtle.exportKey("jwk",r.publicKey)]);return e?.signal?.throwIfAborted(),t}function I8(r){if(r.kty!=="RSA")throw new A("invalid key type");if(r.n==null)throw new A("invalid key modulus");return C(r.n,"base64url").length*8}var rd=class{oHash;iHash;blockLen;outputLen;finished=!1;destroyed=!1;constructor(e,t){if(Un(e),ce(t,void 0,"key"),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 n=this.blockLen,o=new Uint8Array(n);o.set(t.length>n?e.create().update(t).digest():t);for(let s=0;s<o.length;s++)o[s]^=54;this.iHash.update(o),this.oHash=e.create();for(let s=0;s<o.length;s++)o[s]^=106;this.oHash.update(o),Nt(o)}update(e){return Si(this),this.iHash.update(e),this}digestInto(e){Si(this),ce(e,this.outputLen,"output"),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||=Object.create(Object.getPrototypeOf(this),{});let{oHash:t,iHash:n,finished:o,destroyed:s,blockLen:i,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=s,e.blockLen=i,e.outputLen=a,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},Ro=(r,e,t)=>new rd(r,e).update(t).digest();Ro.create=(r,e)=>new rd(r,e);var T8=(r,e)=>(r+(r>=0?e:-e)/_8)/e;function UI(r,e,t){let[[n,o],[s,i]]=e,a=T8(i*r,t),c=T8(-o*r,t),l=r-a*n-c*s,d=-a*o-c*i,u=l<qn,f=d<qn;u&&(l=-l),f&&(d=-d);let h=mc(Math.ceil(D2(t)/2))+Ui;if(l<qn||l>=h||d<qn||d>=h)throw new Error("splitScalar (endomorphism): failed, k="+r);return{k1neg:u,k1:l,k2neg:f,k2:d}}function Em(r){if(!["compact","recovered","der"].includes(r))throw new Error('Signature format must be "compact", "recovered", or "der"');return r}function bm(r,e){let t={};for(let n of Object.keys(e))t[n]=r[n]===void 0?e[n]:r[n];return Vn(t.lowS,"lowS"),Vn(t.prehash,"prehash"),t.format!==void 0&&Em(t.format),t}var xm=class extends Error{constructor(e=""){super(e)}},Lo={Err:xm,_tlv:{encode:(r,e)=>{let{Err:t}=Lo;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=hc(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let s=n>127?hc(o.length/2|128):"";return hc(r)+s+o+e},decode(r,e){let{Err:t}=Lo,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++],s=!!(o&128),i=0;if(!s)i=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 d of l)i=i<<8|d;if(n+=c,i<128)throw new t("tlv.decode(long): not minimal encoding")}let a=e.subarray(n,n+i);if(a.length!==i)throw new t("tlv.decode: wrong value length");return{v:a,l:e.subarray(n+i)}}},_int:{encode(r){let{Err:e}=Lo;if(r<qn)throw new e("integer: negative integers are not allowed");let t=hc(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}=Lo;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 Ai(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Lo,o=ce(r,void 0,"signature"),{v:s,l:i}=n.decode(48,o);if(i.length)throw new e("invalid signature: left bytes after parsing");let{v:a,l:c}=n.decode(2,s),{v:l,l:d}=n.decode(2,c);if(d.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}=Lo,n=e.encode(2,t.encode(r.r)),o=e.encode(2,t.encode(r.s)),s=n+o;return e.encode(48,s)}},qn=BigInt(0),Ui=BigInt(1),_8=BigInt(2),nd=BigInt(3),FI=BigInt(4);function C8(r,e={}){let t=ju("weierstrass",r,e),{Fp:n,Fn:o}=t,s=t.CURVE,{h:i,n:a}=s;pn(e,{},{allowInfinityPoint:"boolean",clearCofactor:"function",isTorsionFree:"function",fromBytes:"function",toBytes:"function",endo:"object"});let{endo:c}=e;if(c&&(!n.is0(s.a)||typeof c.beta!="bigint"||!Array.isArray(c.basises)))throw new Error('invalid endo: expected "beta": bigint and "basises": array');let l=P8(n,o);function d(){if(!n.isOdd)throw new Error("compression is not supported: Field does not have .isOdd()")}function u(P,v,E){let{x:b,y:_}=v.toAffine(),M=n.toBytes(b);if(Vn(E,"isCompressed"),E){d();let O=!n.isOdd(_);return tr(k8(O),M)}else return tr(Uint8Array.of(4),M,n.toBytes(_))}function f(P){ce(P,void 0,"Point");let{publicKey:v,publicKeyUncompressed:E}=l,b=P.length,_=P[0],M=P.subarray(1);if(b===v&&(_===2||_===3)){let O=n.fromBytes(M);if(!n.isValid(O))throw new Error("bad point: is not on curve, wrong x");let k=g(O),U;try{U=n.sqrt(k)}catch(we){let pe=we instanceof Error?": "+we.message:"";throw new Error("bad point: is not on curve, sqrt error"+pe)}d();let K=n.isOdd(U);return(_&1)===1!==K&&(U=n.neg(U)),{x:O,y:U}}else if(b===E&&_===4){let O=n.BYTES,k=n.fromBytes(M.subarray(0,O)),U=n.fromBytes(M.subarray(O,O*2));if(!m(k,U))throw new Error("bad point: is not on curve");return{x:k,y:U}}else throw new Error(`bad point: got length ${b}, expected compressed=${v} or uncompressed=${E}`)}let h=e.toBytes||u,p=e.fromBytes||f;function g(P){let v=n.sqr(P),E=n.mul(v,P);return n.add(n.add(E,n.mul(P,s.a)),s.b)}function m(P,v){let E=n.sqr(v),b=g(P);return n.eql(E,b)}if(!m(s.Gx,s.Gy))throw new Error("bad curve params: generator point");let w=n.mul(n.pow(s.a,nd),FI),T=n.mul(n.sqr(s.b),BigInt(27));if(n.is0(n.add(w,T)))throw new Error("bad curve params: a or b");function I(P,v,E=!1){if(!n.isValid(v)||E&&n.is0(v))throw new Error(`bad point coordinate ${P}`);return v}function D(P){if(!(P instanceof x))throw new Error("Weierstrass Point expected")}function F(P){if(!c||!c.basises)throw new Error("no endo");return UI(P,c.basises,o.ORDER)}let $=Ii((P,v)=>{let{X:E,Y:b,Z:_}=P;if(n.eql(_,n.ONE))return{x:E,y:b};let M=P.is0();v==null&&(v=M?n.ONE:n.inv(_));let O=n.mul(E,v),k=n.mul(b,v),U=n.mul(_,v);if(M)return{x:n.ZERO,y:n.ZERO};if(!n.eql(U,n.ONE))throw new Error("invZ was invalid");return{x:O,y:k}}),z=Ii(P=>{if(P.is0()){if(e.allowInfinityPoint&&!n.is0(P.Y))return;throw new Error("bad point: ZERO")}let{x:v,y:E}=P.toAffine();if(!n.isValid(v)||!n.isValid(E))throw new Error("bad point: x or y not field elements");if(!m(v,E))throw new Error("bad point: equation left != right");if(!P.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});function S(P,v,E,b,_){return E=new x(n.mul(E.X,P),E.Y,E.Z),v=yc(b,v),E=yc(_,E),v.add(E)}class x{static BASE=new x(s.Gx,s.Gy,n.ONE);static ZERO=new x(n.ZERO,n.ONE,n.ZERO);static Fp=n;static Fn=o;X;Y;Z;constructor(v,E,b){this.X=I("x",v),this.Y=I("y",E,!0),this.Z=I("z",b),Object.freeze(this)}static CURVE(){return s}static fromAffine(v){let{x:E,y:b}=v||{};if(!v||!n.isValid(E)||!n.isValid(b))throw new Error("invalid affine point");if(v instanceof x)throw new Error("projective point not allowed");return n.is0(E)&&n.is0(b)?x.ZERO:new x(E,b,n.ONE)}static fromBytes(v){let E=x.fromAffine(p(ce(v,void 0,"point")));return E.assertValidity(),E}static fromHex(v){return x.fromBytes($n(v))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(v=8,E=!0){return B.createCache(this,v),E||this.multiply(nd),this}assertValidity(){z(this)}hasEvenY(){let{y:v}=this.toAffine();if(!n.isOdd)throw new Error("Field doesn't support isOdd");return!n.isOdd(v)}equals(v){D(v);let{X:E,Y:b,Z:_}=this,{X:M,Y:O,Z:k}=v,U=n.eql(n.mul(E,k),n.mul(M,_)),K=n.eql(n.mul(b,k),n.mul(O,_));return U&&K}negate(){return new x(this.X,n.neg(this.Y),this.Z)}double(){let{a:v,b:E}=s,b=n.mul(E,nd),{X:_,Y:M,Z:O}=this,k=n.ZERO,U=n.ZERO,K=n.ZERO,W=n.mul(_,_),we=n.mul(M,M),pe=n.mul(O,O),ue=n.mul(_,M);return ue=n.add(ue,ue),K=n.mul(_,O),K=n.add(K,K),k=n.mul(v,K),U=n.mul(b,pe),U=n.add(k,U),k=n.sub(we,U),U=n.add(we,U),U=n.mul(k,U),k=n.mul(ue,k),K=n.mul(b,K),pe=n.mul(v,pe),ue=n.sub(W,pe),ue=n.mul(v,ue),ue=n.add(ue,K),K=n.add(W,W),W=n.add(K,W),W=n.add(W,pe),W=n.mul(W,ue),U=n.add(U,W),pe=n.mul(M,O),pe=n.add(pe,pe),W=n.mul(pe,ue),k=n.sub(k,W),K=n.mul(pe,we),K=n.add(K,K),K=n.add(K,K),new x(k,U,K)}add(v){D(v);let{X:E,Y:b,Z:_}=this,{X:M,Y:O,Z:k}=v,U=n.ZERO,K=n.ZERO,W=n.ZERO,we=s.a,pe=n.mul(s.b,nd),ue=n.mul(E,M),be=n.mul(b,O),Re=n.mul(_,k),Je=n.add(E,b),Ee=n.add(M,O);Je=n.mul(Je,Ee),Ee=n.add(ue,be),Je=n.sub(Je,Ee),Ee=n.add(E,_);let it=n.add(M,k);return Ee=n.mul(Ee,it),it=n.add(ue,Re),Ee=n.sub(Ee,it),it=n.add(b,_),U=n.add(O,k),it=n.mul(it,U),U=n.add(be,Re),it=n.sub(it,U),W=n.mul(we,Ee),U=n.mul(pe,Re),W=n.add(U,W),U=n.sub(be,W),W=n.add(be,W),K=n.mul(U,W),be=n.add(ue,ue),be=n.add(be,ue),Re=n.mul(we,Re),Ee=n.mul(pe,Ee),be=n.add(be,Re),Re=n.sub(ue,Re),Re=n.mul(we,Re),Ee=n.add(Ee,Re),ue=n.mul(be,Ee),K=n.add(K,ue),ue=n.mul(it,Ee),U=n.mul(Je,U),U=n.sub(U,ue),ue=n.mul(Je,be),W=n.mul(it,W),W=n.add(W,ue),new x(U,K,W)}subtract(v){return this.add(v.negate())}is0(){return this.equals(x.ZERO)}multiply(v){let{endo:E}=e;if(!o.isValidNot0(v))throw new Error("invalid scalar: out of range");let b,_,M=O=>B.cached(this,O,k=>Is(x,k));if(E){let{k1neg:O,k1:k,k2neg:U,k2:K}=F(v),{p:W,f:we}=M(k),{p:pe,f:ue}=M(K);_=we.add(ue),b=S(E.beta,W,pe,O,U)}else{let{p:O,f:k}=M(v);b=O,_=k}return Is(x,[b,_])[0]}multiplyUnsafe(v){let{endo:E}=e,b=this;if(!o.isValid(v))throw new Error("invalid scalar: out of range");if(v===qn||b.is0())return x.ZERO;if(v===Ui)return b;if(B.hasCache(this))return this.multiply(v);if(E){let{k1neg:_,k1:M,k2neg:O,k2:k}=F(v),{p1:U,p2:K}=Z5(x,b,M,k);return S(E.beta,U,K,_,O)}else return B.unsafe(b,v)}toAffine(v){return $(this,v)}isTorsionFree(){let{isTorsionFree:v}=e;return i===Ui?!0:v?v(x,this):B.unsafe(this,a).is0()}clearCofactor(){let{clearCofactor:v}=e;return i===Ui?this:v?v(x,this):this.multiplyUnsafe(i)}isSmallOrder(){return this.multiplyUnsafe(i).is0()}toBytes(v=!0){return Vn(v,"isCompressed"),this.assertValidity(),h(x,this,v)}toHex(v=!0){return Fn(this.toBytes(v))}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}let L=o.BITS,B=new Ci(x,e.endo?Math.ceil(L/2):L);return x.BASE.precompute(8),x}function k8(r){return Uint8Array.of(r?2:3)}function P8(r,e){return{secretKey:e.BYTES,publicKey:1+r.BYTES,publicKeyUncompressed:1+2*r.BYTES,publicKeyHasPrefix:!0,signature:2*e.BYTES}}function $I(r,e={}){let{Fn:t}=r,n=e.randomBytes||dn,o=Object.assign(P8(r.Fp,t),{seed:B2(t.ORDER)});function s(h){try{let p=t.fromBytes(h);return t.isValidNot0(p)}catch{return!1}}function i(h,p){let{publicKey:g,publicKeyUncompressed:m}=o;try{let w=h.length;return p===!0&&w!==g||p===!1&&w!==m?!1:!!r.fromBytes(h)}catch{return!1}}function a(h=n(o.seed)){return U2(ce(h,o.seed,"seed"),t.ORDER)}function c(h,p=!0){return r.BASE.multiply(t.fromBytes(h)).toBytes(p)}function l(h){let{secretKey:p,publicKey:g,publicKeyUncompressed:m}=o;if(!ys(h)||"_lengths"in t&&t._lengths||p===g)return;let w=ce(h,void 0,"key").length;return w===g||w===m}function d(h,p,g=!0){if(l(h)===!0)throw new Error("first arg must be private key");if(l(p)===!1)throw new Error("second arg must be public key");let m=t.fromBytes(h);return r.fromBytes(p).multiply(m).toBytes(g)}let u={isValidSecretKey:s,isValidPublicKey:i,randomSecretKey:a},f=ki(a,c);return Object.freeze({getPublicKey:c,getSharedSecret:d,keygen:f,Point:r,utils:u,lengths:o})}function R8(r,e,t={}){Un(e),pn(t,{},{hmac:"function",lowS:"boolean",randomBytes:"function",bits2int:"function",bits2int_modN:"function"}),t=Object.assign({},t);let n=t.randomBytes||dn,o=t.hmac||((E,b)=>Ro(e,E,b)),{Fp:s,Fn:i}=r,{ORDER:a,BITS:c}=i,{keygen:l,getPublicKey:d,getSharedSecret:u,utils:f,lengths:h}=$I(r,t),p={prehash:!0,lowS:typeof t.lowS=="boolean"?t.lowS:!0,format:"compact",extraEntropy:!1},g=a*_8<s.ORDER;function m(E){let b=a>>Ui;return E>b}function w(E,b){if(!i.isValidNot0(b))throw new Error(`invalid signature ${E}: out of range 1..Point.Fn.ORDER`);return b}function T(){if(g)throw new Error('"recovered" sig type is not supported for cofactor >2 curves')}function I(E,b){Em(b);let _=h.signature,M=b==="compact"?_:b==="recovered"?_+1:void 0;return ce(E,M)}class D{r;s;recovery;constructor(b,_,M){if(this.r=w("r",b),this.s=w("s",_),M!=null){if(T(),![0,1,2,3].includes(M))throw new Error("invalid recovery id");this.recovery=M}Object.freeze(this)}static fromBytes(b,_=p.format){I(b,_);let M;if(_==="der"){let{r:K,s:W}=Lo.toSig(ce(b));return new D(K,W)}_==="recovered"&&(M=b[0],_="compact",b=b.subarray(1));let O=h.signature/2,k=b.subarray(0,O),U=b.subarray(O,O*2);return new D(i.fromBytes(k),i.fromBytes(U),M)}static fromHex(b,_){return this.fromBytes($n(b),_)}assertRecovery(){let{recovery:b}=this;if(b==null)throw new Error("invalid recovery id: must be present");return b}addRecoveryBit(b){return new D(this.r,this.s,b)}recoverPublicKey(b){let{r:_,s:M}=this,O=this.assertRecovery(),k=O===2||O===3?_+a:_;if(!s.isValid(k))throw new Error("invalid recovery id: sig.r+curve.n != R.x");let U=s.toBytes(k),K=r.fromBytes(tr(k8((O&1)===0),U)),W=i.inv(k),we=$(ce(b,void 0,"msgHash")),pe=i.create(-we*W),ue=i.create(M*W),be=r.BASE.multiplyUnsafe(pe).add(K.multiplyUnsafe(ue));if(be.is0())throw new Error("invalid recovery: point at infinify");return be.assertValidity(),be}hasHighS(){return m(this.s)}toBytes(b=p.format){if(Em(b),b==="der")return $n(Lo.hexFromSig(this));let{r:_,s:M}=this,O=i.toBytes(_),k=i.toBytes(M);return b==="recovered"?(T(),tr(Uint8Array.of(this.assertRecovery()),O,k)):tr(O,k)}toHex(b){return Fn(this.toBytes(b))}}let F=t.bits2int||function(b){if(b.length>8192)throw new Error("input is too large");let _=Ai(b),M=b.length*8-c;return M>0?_>>BigInt(M):_},$=t.bits2int_modN||function(b){return i.create(F(b))},z=mc(c);function S(E){return Co("num < 2^"+c,E,qn,z),i.toBytes(E)}function x(E,b){return ce(E,void 0,"message"),b?ce(e(E),void 0,"prehashed message"):E}function L(E,b,_){let{lowS:M,prehash:O,extraEntropy:k}=bm(_,p);E=x(E,O);let U=$(E),K=i.fromBytes(b);if(!i.isValidNot0(K))throw new Error("invalid private key");let W=[S(K),S(U)];if(k!=null&&k!==!1){let be=k===!0?n(h.secretKey):k;W.push(ce(be,void 0,"extraEntropy"))}let we=tr(...W),pe=U;function ue(be){let Re=F(be);if(!i.isValidNot0(Re))return;let Je=i.inv(Re),Ee=r.BASE.multiply(Re).toAffine(),it=i.create(Ee.x);if(it===qn)return;let ui=i.create(Je*i.create(pe+it*K));if(ui===qn)return;let Eu=(Ee.x===it?0:2)|Number(Ee.y&Ui),Wa=ui;return M&&m(ui)&&(Wa=i.neg(ui),Eu^=1),new D(it,Wa,g?void 0:Eu)}return{seed:we,k2sig:ue}}function B(E,b,_={}){let{seed:M,k2sig:O}=L(E,b,_);return O5(e.outputLen,i.BYTES,o)(M,O).toBytes(_.format)}function P(E,b,_,M={}){let{lowS:O,prehash:k,format:U}=bm(M,p);if(_=ce(_,void 0,"publicKey"),b=x(b,k),!ys(E)){let K=E instanceof D?", use sig.toBytes()":"";throw new Error("verify expects Uint8Array signature"+K)}I(E,U);try{let K=D.fromBytes(E,U),W=r.fromBytes(_);if(O&&K.hasHighS())return!1;let{r:we,s:pe}=K,ue=$(b),be=i.inv(pe),Re=i.create(ue*be),Je=i.create(we*be),Ee=r.BASE.multiplyUnsafe(Re).add(W.multiplyUnsafe(Je));return Ee.is0()?!1:i.create(Ee.x)===we}catch{return!1}}function v(E,b,_={}){let{prehash:M}=bm(_,p);return b=x(b,M),D.fromBytes(E,"recovered").recoverPublicKey(b).toBytes()}return Object.freeze({keygen:l,getPublicKey:d,getSharedSecret:u,utils:f,lengths:h,Point:r,sign:B,verify:P,recoverPublicKey:v,Signature:D,hash:e})}var Sm={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt(1),a:BigInt(0),b:BigInt(7),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")},KI={beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),basises:[[BigInt("0x3086d221a7d46bcde86c90e49284eb15"),-BigInt("0xe4437ed6010e88286f547fa90abfe4c3")],[BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),BigInt("0x3086d221a7d46bcde86c90e49284eb15")]]};var L8=BigInt(2);function VI(r){let e=Sm.p,t=BigInt(3),n=BigInt(6),o=BigInt(11),s=BigInt(22),i=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%e,d=l*l*r%e,u=$e(d,t,e)*d%e,f=$e(u,t,e)*d%e,h=$e(f,L8,e)*l%e,p=$e(h,o,e)*h%e,g=$e(p,s,e)*p%e,m=$e(g,a,e)*g%e,w=$e(m,c,e)*m%e,T=$e(w,a,e)*g%e,I=$e(T,t,e)*d%e,D=$e(I,i,e)*p%e,F=$e(D,n,e)*l%e,$=$e(F,L8,e);if(!vm.eql(vm.sqr($),r))throw new Error("Cannot find square root");return $}var vm=Ti(Sm.p,{sqrt:VI}),HI=C8(Sm,{Fp:vm,endo:KI}),qr=R8(HI,Tr);var D8=32;function N8(r,e,t){let n=ze.digest(e instanceof Uint8Array?e:e.subarray());if(Li(n))return n.then(({digest:o})=>(t?.signal?.throwIfAborted(),qr.sign(o,r,{prehash:!1,format:"der"}))).catch(o=>{throw o.name==="AbortError"?o:new sc(String(o))});try{return qr.sign(n.digest,r,{prehash:!1,format:"der"})}catch(o){throw new sc(String(o))}}function O8(r,e,t,n){let o=ze.digest(t instanceof Uint8Array?t:t.subarray());if(Li(o))return o.then(({digest:s})=>(n?.signal?.throwIfAborted(),qr.verify(e,s,r,{prehash:!1,format:"der"}))).catch(s=>{throw s.name==="AbortError"?s:new ic(String(s))});try{return n?.signal?.throwIfAborted(),qr.verify(e,o.digest,r,{prehash:!1,format:"der"})}catch(s){throw new ic(String(s))}}var Cc=class{type="secp256k1";raw;_key;constructor(e){this._key=U8(e),this.raw=M8(this._key)}toMultihash(){return dt.digest(ft(this))}toCID(){return G.createV1(114,this.toMultihash())}toString(){return De.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}verify(e,t,n){return O8(this._key,t,e,n)}},kc=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=B8(e),this.publicKey=new Cc(t??F8(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ee(this.raw,e.raw)}sign(e,t){return N8(this.raw,e,t)}};function Am(r){return new kc(r)}function Im(r){return new Cc(r)}async function $8(){let r=qI();return new kc(r)}function M8(r){return qr.Point.fromBytes(r).toBytes()}function B8(r){try{return qr.getPublicKey(r,!0),r}catch(e){throw new za(String(e))}}function U8(r){try{return qr.Point.fromBytes(r),r}catch(e){throw new Nn(String(e))}}function F8(r){try{return qr.getPublicKey(r,!0)}catch(e){throw new za(String(e))}}function qI(){return qr.utils.randomSecretKey()}async function od(r,e){if(r==="Ed25519")return d8();if(r==="secp256k1")return $8();if(r==="RSA")return wm(WI(e));if(r==="ECDSA")return w5(zI(e));throw new Fr}function tt(r,e){let{Type:t,Data:n}=mn.decode(r),o=n??new Uint8Array;switch(t){case Be.RSA:return mm(o,e);case Be.Ed25519:return W2(o);case Be.secp256k1:return Im(o);case Be.ECDSA:return v2(o);default:throw new Fr}}function sd(r){let{Type:e,Data:t}=mn.decode(r.digest),n=t??new Uint8Array;switch(e){case Be.Ed25519:return W2(n);case Be.secp256k1:return Im(n);case Be.ECDSA:return v2(n);default:throw new Fr}}function ft(r){return mn.encode({Type:Be[r.type],Data:r.raw})}function K8(r){let e=Ic.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Be.RSA:return pm(t);case Be.Ed25519:return q2(t);case Be.secp256k1:return Am(t);case Be.ECDSA:return h5(t);default:throw new Fr}}function V8(r){if(r.byteLength===fr)return q2(r);if(r.byteLength===D8)return Am(r);let e=Ir(r),t=e[2]?.[0];if(t===o5||t===s5||t===i5)return x2(e);if(e.length>8)return td(e);throw new A("Could not extract private key from raw bytes")}function ks(r){return Ic.encode({Type:Be[r.type],Data:r.raw})}function WI(r){return r==null?2048:parseInt(r,10)}function zI(r){if(r==="P-256"||r==null)return"P-256";if(r==="P-384")return"P-384";if(r==="P-521")return"P-521";throw new A("Unsupported curve, should be P-256, P-384 or P-521")}var Pc=Uint32Array.from([1732584193,4023233417,2562383102,271733878,3285377520]),Do=new Uint32Array(80),Tm=class extends bs{A=Pc[0]|0;B=Pc[1]|0;C=Pc[2]|0;D=Pc[3]|0;E=Pc[4]|0;constructor(){super(64,20,8,!1)}get(){let{A:e,B:t,C:n,D:o,E:s}=this;return[e,t,n,o,s]}set(e,t,n,o,s){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=s|0}process(e,t){for(let c=0;c<16;c++,t+=4)Do[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)Do[c]=Hu(Do[c-3]^Do[c-8]^Do[c-14]^Do[c-16],1);let{A:n,B:o,C:s,D:i,E:a}=this;for(let c=0;c<80;c++){let l,d;c<20?(l=qu(o,s,i),d=1518500249):c<40?(l=o^s^i,d=1859775393):c<60?(l=Wu(o,s,i),d=2400959708):(l=o^s^i,d=3395469782);let u=Hu(n,5)+l+a+d+Do[c]|0;a=i,i=s,s=Hu(o,30),o=n,n=u}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,this.set(n,o,s,i,a)}roundClean(){Nt(Do)}destroy(){this.set(0,0,0,0,0),Nt(this.buffer)}},H8=uc(()=>new Tm);function q8(r,e,t,n){Un(r);let o=S5({dkLen:32,asyncTick:10},n),{c:s,dkLen:i,asyncTick:a}=o;if(Dt(s,"c"),Dt(i,"dkLen"),Dt(a,"asyncTick"),s<1)throw new Error("iterations (c) must be >= 1");let c=S2(e,"password"),l=S2(t,"salt"),d=new Uint8Array(i),u=Ro.create(r,c),f=u._cloneInto().update(l);return{c:s,dkLen:i,asyncTick:a,DK:d,PRF:u,PRFSalt:f}}function W8(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),Nt(o),t}function z8(r,e,t,n){let{c:o,dkLen:s,DK:i,PRF:a,PRFSalt:c}=q8(r,e,t,n),l,d=new Uint8Array(4),u=ws(d),f=new Uint8Array(a.outputLen);for(let h=1,p=0;p<s;h++,p+=a.outputLen){let g=i.subarray(p,p+a.outputLen);u.setInt32(0,h,!1),(l=c._cloneInto(l)).update(d).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 w=0;w<g.length;w++)g[w]^=f[w]}}return W8(a,c,i,l,f)}async function id(r,e,t,n){let{c:o,dkLen:s,asyncTick:i,DK:a,PRF:c,PRFSalt:l}=q8(r,e,t,n),d,u=new Uint8Array(4),f=ws(u),h=new Uint8Array(c.outputLen);for(let p=1,g=0;g<s;p++,g+=c.outputLen){let m=a.subarray(g,g+c.outputLen);f.setInt32(0,p,!1),(d=l._cloneInto(d)).update(u).digestInto(h),m.set(h.subarray(0,m.length)),await v5(o-1,i,()=>{c._cloneInto(d).update(h).digestInto(h);for(let w=0;w<m.length;w++)m[w]^=h[w]})}return W8(c,l,a,d,h)}var G8={sha1:H8,"sha2-256":Tr,"sha2-512":_o};function Rc(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(G8).join(" / ");throw new A(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let s=G8[o],i=z8(s,r,e,{c:t,dkLen:n});return rt.encode(i).substring(1)}var _m={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},Y8={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},j8=new globalThis.TextEncoder;function GI(r,e){let t=_m[e],n=Y8[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function YI(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=_m[e],o=Y8[e],s=r;for(;s.length>0;){let i=j8.encodeInto(s,t);s=s.slice(i.read);for(let a=0;a<i.written;a++)o^=BigInt(t[a]),o=BigInt.asUintN(e,o*n)}return o}function Cm(r,{size:e=32,utf8Buffer:t}={}){if(!_m[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 YI(r,e,t);r=j8.encode(r)}return GI(r,e)}var Lc={hash:r=>Number(Cm(r,{size:32})),hashV:(r,e)=>jI(Lc.hash(r,e))};function jI(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),C(e,"base16")}var km=64,Wr=class{fp;h;seed;constructor(e,t,n,o=2){if(o>km)throw new TypeError("Invalid Fingerprint Size");let s=t.hashV(e,n),i=ae(o);for(let a=0;a<i.length;a++)i[a]=s[a];i.length===0&&(i[0]=7),this.fp=i,this.h=t,this.seed=n}hash(){return this.h.hash(this.fp,this.seed)}equals(e){return e?.fp instanceof Uint8Array?ee(this.fp,e.fp):!1}};function Ps(r,e){return Math.floor(Math.random()*(e-r))+r}var Rs=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof Wr))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof Wr))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 Wr))throw new TypeError("Invalid Fingerprint");let t=Ps(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof Wr))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var XI=500,Dc=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??Lc,this.seed=e.seed??Ps(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=C(e));let t=new Wr(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 Rs(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new Rs(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let s=[n,o],i=s[Ps(0,s.length-1)];this.buckets[i]==null&&(this.buckets[i]=new Rs(this.bucketSize));for(let a=0;a<XI;a++){let c=this.buckets[i].swap(t);if(c!=null&&(i=(i^c.hash())%this.filterSize,this.buckets[i]==null&&(this.buckets[i]=new Rs(this.bucketSize)),this.buckets[i].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=C(e));let t=new Wr(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 s=(n^t.hash())%this.filterSize;return this.buckets[s]?.has(t)??!1}remove(e){typeof e=="string"&&(e=C(e));let t=new Wr(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 s=(n^t.hash())%this.filterSize,i=this.buckets[s]?.remove(t)??!1;return i&&this.count--,i}get reliable(){return Math.floor(100*(this.count/this.filterSize))<=90}},QI={1:.5,2:.84,4:.95,8:.98};function ZI(r=.001){return r>.002?2:r>1e-5?4:8}function X8(r,e=.001){let t=ZI(e),n=QI[t],o=Math.round(r/n),s=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),km);return{filterSize:o,bucketSize:t,fingerprintSize:s}}var ad=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??Lc,this.seed=e.seed??Ps(0,Math.pow(2,10)),this.filterSeries=[new Dc({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=C(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 Dc({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=C(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=C(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 Et(r,e=.001,t){return new ad({...X8(r,e),...t??{}})}function oe(r){let e=r.getComponents(),t={},n=0;if(e[n]?.name==="ip6zone"&&(t.zone=`${e[n].value}`,n++),e[n].name==="ip4"||e[n].name==="ip6"||e[n].name==="dns"||e[n].name==="dns4"||e[n].name==="dns6"?(t.type=e[n].name,t.host=e[n].value,n++):e[n].name==="dnsaddr"&&(t.type=e[n].name,t.host=`_dnsaddr.${e[n].value}`,n++),(e[n]?.name==="tcp"||e[n]?.name==="udp")&&(t.protocol=e[n].name==="tcp"?"tcp":"udp",t.port=parseInt(`${e[n].value}`),n++),e[n]?.name==="ipcidr"&&(t.type==="ip4"?t.cidr=parseInt(`${e[n].value}`):t.type==="ip6"&&(t.cidr=`${e[n].value}`),n++),t.type==null||t.host==null)throw new A(`Multiaddr ${r} was not an IPv4, IPv6, DNS, DNS4, DNS6 or DNSADDR address`);return e[n]?.name==="tls"&&e[n+1]?.name==="sni"&&(t.sni=e[n+1].value,n+=2),t}var cd=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 s=0,i=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*o)-1;for(;;){let d=this.readAtomically(()=>{let u=this.readChar();if(u===void 0)return;let f=Number.parseInt(u,e);if(!Number.isNaN(f))return f});if(d===void 0)break;if(s*=e,s+=d,s>l||(i+=1,t!==void 0&&i>t))return}if(i!==0)return!n&&c&&i>1?void 0:s})}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 i=this.readSeparator(":",n,()=>this.readIPv4Addr());if(i!==void 0)return t[o]=i[0],t[o+1]=i[1],t[o+2]=i[2],t[o+3]=i[3],[o+4,!0]}let s=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(s===void 0)return[o,!1];t[o]=s>>8,t[o+1]=s&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 s=new Uint8Array(14),i=16-(n+2),[a]=e(s.subarray(0,i));return t.set(s.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var Q8=45,JI=15,Fi=new cd;function ld(r){if(!(r.length>JI))return Fi.new(r).parseWith(()=>Fi.readIPv4Addr())}function ud(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>Q8))return Fi.new(r).parseWith(()=>Fi.readIPv6Addr())}function $i(r,e=!1){if(r.includes("%")&&(r=r.split("%")[0]),r.length>Q8)return;let t=Fi.new(r).parseWith(()=>Fi.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 Z8(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 J8(r,e,t,n){let o=0;for(let s of r)if(!(o<t)){if(o>n)break;if(s!==e[o])return!1;o++}return!0}function Pm(r){switch(r.length){case Ls:return r.join(".");case Ds:{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 e7(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 t7(r){let e="0x";for(let t of r)e+=(t>>4).toString(16)+(t&15).toString(16);return e}var Ls=4,Ds=16,M$=parseInt("0xFFFF",16),eT=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function Nc(r,e){e.length===Ds&&r.length===Ls&&Z8(e,0,11)&&(e=e.slice(12)),e.length===Ls&&r.length===Ds&&J8(r,eT,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 r7(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 Rm(r){let[e,t]=r.split("/");if(!e||!t)throw new Error("Failed to parse given CIDR: "+r);let n=Ls,o=ld(e);if(o==null&&(n=Ds,o=ud(e),o==null))throw new Error("Failed to parse given CIDR: "+r);let s=parseInt(t,10);if(Number.isNaN(s)||String(s).length!==t.length||s<0||s>n*8)throw new Error("Failed to parse given CIDR: "+r);let i=Lm(s,8*n);return{network:Nc(o,i),mask:i}}function Lm(r,e){if(e!==8*Ls&&e!==8*Ds)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 Ns=class{constructor(e,t){if(t==null)({network:this.network,mask:this.mask}=Rm(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 s=$i(t);if(s==null)throw new Error("Failed to parse mask");this.mask=s}else this.mask=Lm(o,8*n.length);this.network=Nc(n,this.mask)}}contains(e){return r7({network:this.network,mask:this.mask},e)}toString(){let e=e7(this.mask),t=e!==-1?String(e):t7(this.mask);return Pm(this.network)+"/"+t}};function n7(r,e){return new Ns(r).contains(e)}function dd(r){try{let e=oe(r);switch(e.type){case"ip6":return n7("2000::/3",e.host);default:return!1}}catch{return!1}}function o7(r){try{let e=oe(r);switch(e.type){case"ip4":return e.host.startsWith("169.254.");case"ip6":return e.host.toLowerCase().startsWith("fe80");default:return!1}}catch{return!1}}function s7(r){return/^127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(r)||/^::1$/.test(r)}function Oc(r){try{let e=oe(r);switch(e.type){case"ip4":case"ip6":return s7(e.host);default:return!1}}catch{return!1}}function xt(r){try{return oe(r),!0}catch{return!1}}function zr(r){return!!ld(r)}function fd(r){return!!ud(r)}var a7=Ln(i7(),1),tT=["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"],rT=tT.map(r=>new a7.Netmask(r));function Dm(r){for(let e of rT)if(e.contains(r))return!0;return!1}function nT(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function oT(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 Dm(o)}function sT(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function iT(r){let e=r.split(":"),t=e[e.length-1];return Dm(t)}function aT(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 Ki(r){if(zr(r))return Dm(r);if(nT(r))return oT(r);if(sT(r))return iT(r);if(fd(r))return aT(r)}function Qe(r){try{let e=oe(r);switch(e.type){case"ip4":case"ip6":return Ki(e.host)??!1;default:return e.host==="localhost"}}catch{return!1}}function fe(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var hd=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}},Vi=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new hd(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 hd(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 Nm=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function vt(r={}){return cT(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 cT(r,e){e=e??{};let t=e.onEnd,n=new Vi,o,s,i,a=fe(),c=async()=>{try{return n.isEmpty()?i?{done:!0}:await new Promise((m,w)=>{s=T=>{s=null,n.push(T);try{m(r(n))}catch(I){w(I)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=fe()})}},l=m=>s!=null?s(m):(n.push(m),o),d=m=>(n=new Vi,s!=null?s({error:m}):(n.push({error:m}),o)),u=m=>{if(i)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=>i?o:(i=!0,m!=null?d(m):l({done:!0})),h=()=>(n=new Vi,f(),{done:!0}),p=m=>(f(m),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:h,throw:p,push:u,end:f,get readableLength(){return n.size},onEmpty:async m=>{let w=m?.signal;if(w?.throwIfAborted(),n.isEmpty())return;let T,I;w!=null&&(T=new Promise((D,F)=>{I=()=>{F(new Nm)},w.addEventListener("abort",I)}));try{await Promise.race([a.promise,T])}finally{I!=null&&w!=null&&w?.removeEventListener("abort",I)}}},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:u,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 lT=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 uT(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:d}=lT(r),u=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(g){n(),i(g);return}c.push(p),t.count===c.length&&(n(),s(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)a.includes(h)||d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&s(c)});if(o.cancel=n,typeof t.timeout=="number"){let s=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function _r(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=uT(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}function Wn(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 pd=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}},md=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}},Os=class extends Error{static name="UnexpectedEOFError";name="UnexpectedEOFError"},gd=class extends Error{static name="MaxEarlyStreamsError";name="MaxEarlyStreamsError"},yd=class extends Error{static name="StreamClosedError";name="StreamClosedError"};function dT(r){return r.reason}async function Pe(r,e,t){if(e==null)return r;let n=t?.translateError??dT;if(e.aborted)return r.catch(()=>{}),Promise.reject(n(e));let o;try{return await Promise.race([r,new Promise((s,i)=>{o=()=>{i(n(e))},e.addEventListener("abort",o)})])}finally{o!=null&&e.removeEventListener("abort",o)}}var wd=class{deferred;signal;constructor(e){this.signal=e,this.deferred=fe(),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 fT(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var bd=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=fT(),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 wd(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 Pe(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 St=class extends ie{concurrency;maxSize;queue;pending;sort;paused;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,this.paused=!1,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=[],this.emitEmpty=Wn(this.emitEmpty.bind(this),1),this.emitIdle=Wn(this.emitIdle.bind(this),1)}emitEmpty(){this.size===0&&this.safeDispatchEvent("empty")}emitIdle(){this.running===0&&this.safeDispatchEvent("idle")}pause(){this.paused=!0}resume(){this.paused&&(this.paused=!1,this.tryToStartAnother())}tryToStartAnother(){if(this.paused)return!1;if(this.size===0)return this.emitEmpty(),this.running===0&&this.emitIdle(),!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 md;let n=new bd(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 s=0;s<this.queue.length;s++)if(this.queue[s]===n){this.queue.splice(s,1);break}}throw 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 _r(this,"empty",e)}async onSizeLessThan(e,t){this.size<e||await _r(this,"next",{...t,filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await _r(this,"idle",e)}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=vt({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail)},s=c=>{n(c.detail.error)},i=()=>{n()},a=()=>{n(new Vt("Queue aborted"))};this.addEventListener("completed",o),this.addEventListener("failure",s),this.addEventListener("idle",i),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("failure",s),this.removeEventListener("idle",i),e?.signal?.removeEventListener("abort",a),n()}}};var hT=Math.pow(2,20)*4,No=class extends ie{status;timeline;inactivityTimeout;maxReadBufferLength;maxWriteBufferLength;log;direction;maxMessageSize;readStatus;writeStatus;remoteReadStatus;remoteWriteStatus;writableNeedsDrain;readBuffer;writeBuffer;sendingData;onDrainPromise;constructor(e){super(),this.status="open",this.log=e.log,this.direction=e.direction??"outbound",this.inactivityTimeout=e.inactivityTimeout??12e4,this.maxReadBufferLength=e.maxReadBufferLength??hT,this.maxWriteBufferLength=e.maxWriteBufferLength,this.maxMessageSize=e.maxMessageSize,this.readBuffer=new X,this.writeBuffer=new X,this.readStatus="readable",this.remoteReadStatus="readable",this.writeStatus="writable",this.remoteWriteStatus="writable",this.sendingData=!1,this.writableNeedsDrain=!1,this.timeline={open:Date.now()},this.processSendQueue=this.processSendQueue.bind(this);let t=()=>{this.writableNeedsDrain&&(this.log.trace("drain event received, continue sending data"),this.writableNeedsDrain=!1,this.processSendQueue()),this.onDrainPromise?.resolve()};this.addEventListener("drain",t);let n=o=>{this.onDrainPromise?.reject(o.error??new yd)};this.addEventListener("close",n)}get readBufferLength(){return this.readBuffer.byteLength}get writeBufferLength(){return this.writeBuffer.byteLength}async onDrain(e){return this.writableNeedsDrain!==!0?Promise.resolve():(this.onDrainPromise==null&&(this.onDrainPromise=Promise.withResolvers()),Pe(this.onDrainPromise.promise,e?.signal))}async*[Symbol.asyncIterator](){if(this.readStatus!=="readable"&&this.readStatus!=="paused")return;let e=vt(),t=s=>{e.push(s.data)};this.addEventListener("message",t);let n=s=>{e.end(s.error)};this.addEventListener("close",n);let o=()=>{e.end()};this.addEventListener("remoteCloseWrite",o);try{yield*e}finally{this.removeEventListener("message",t),this.removeEventListener("close",n),this.removeEventListener("remoteCloseWrite",o)}}isReadable(){return this.status==="open"}send(e){if(this.writeStatus==="closed"||this.writeStatus==="closing")throw new cn(`Cannot write to a stream that is ${this.writeStatus}`);return this.log.trace("append %d bytes to write buffer",e.byteLength),this.writeBuffer.append(e),this.processSendQueue()}abort(e){if(!(this.status==="aborted"||this.status==="reset"||this.status==="closed")){this.log.error("abort with error - %e",e),this.status="aborted",this.readBuffer.byteLength>0&&this.readBuffer.consume(this.readBuffer.byteLength),this.writeBuffer.byteLength>0&&(this.writeBuffer.consume(this.writeBuffer.byteLength),this.safeDispatchEvent("idle")),this.writeStatus="closed",this.remoteWriteStatus="closed",this.readStatus="closed",this.remoteReadStatus="closed",this.timeline.close=Date.now();try{this.sendReset(e)}catch(t){this.log("failed to send reset to remote - %e",t)}this.dispatchEvent(new _u(e))}}pause(){if(this.readStatus==="closed"||this.readStatus==="closing")throw new cn("Cannot pause a stream that is closing/closed");this.readStatus!=="paused"&&(this.readStatus="paused",this.sendPause())}resume(){if(this.readStatus==="closed"||this.readStatus==="closing")throw new cn("Cannot resume a stream that is closing/closed");this.readStatus!=="readable"&&(this.readStatus="readable",this.dispatchReadBuffer(),this.sendResume())}push(e){if(this.readStatus==="closed"||this.readStatus==="closing")throw new cn(`Cannot push data onto a stream that is ${this.readStatus}`);if(e.byteLength!==0){if(this.readBuffer.append(e),this.readStatus==="paused"||this.listenerCount("message")===0){this.checkReadBufferLength();return}setTimeout(()=>{this.dispatchReadBuffer()},0)}}unshift(e){if(this.readStatus==="closed"||this.readStatus==="closing")throw new cn(`Cannot push data onto a stream that is ${this.readStatus}`);if(e.byteLength!==0){if(this.readBuffer.prepend(e),this.readStatus==="paused"||this.listenerCount("message")===0){this.checkReadBufferLength();return}setTimeout(()=>{this.dispatchReadBuffer()},0)}}onData(e){if(e.byteLength!==0){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("ignoring data - read status %s",this.readStatus);return}this.readBuffer.append(e),this.dispatchReadBuffer()}}addEventListener(...e){super.addEventListener.apply(this,e),e[0]==="message"&&this.readBuffer.byteLength>0&&queueMicrotask(()=>{this.dispatchReadBuffer()})}onRemoteReset(){this.log("remote reset"),this.status="reset",this.writeStatus="closed",this.remoteWriteStatus="closed",this.remoteReadStatus="closed",this.timeline.close=Date.now(),this.readBuffer.byteLength===0&&(this.readStatus="closed");let e=new fi;this.dispatchEvent(new Cu(e))}onTransportClosed(e){this.log("transport closed"),this.readStatus==="readable"&&this.readBuffer.byteLength===0&&(this.log("close readable end after transport closed and read buffer is empty"),this.readStatus="closed"),this.remoteReadStatus!=="closed"&&(this.remoteReadStatus="closed"),this.remoteWriteStatus!=="closed"&&(this.remoteWriteStatus="closed"),this.writeStatus!=="closed"&&(this.writeStatus="closed"),e!=null?this.abort(e):(this.status==="open"||this.status==="closing")&&(this.timeline.close=Date.now(),this.status="closed",this.writeStatus="closed",this.remoteWriteStatus="closed",this.remoteReadStatus="closed",this.dispatchEvent(new xo))}onRemoteCloseWrite(){this.remoteWriteStatus!=="closed"&&(this.log.trace("on remote close write"),this.remoteWriteStatus="closed",this.safeDispatchEvent("remoteCloseWrite"),this.writeStatus==="closed"&&this.onTransportClosed())}onRemoteCloseRead(){this.log.trace("on remote close read"),this.remoteReadStatus="closed",this.writeBuffer.byteLength>0&&(this.writeBuffer.consume(this.writeBuffer.byteLength),this.safeDispatchEvent("idle"))}processSendQueue(){if(this.writableNeedsDrain)return this.log.trace("not processing send queue as drain is required"),this.checkWriteBufferLength(),!1;if(this.writeBuffer.byteLength===0)return this.log.trace("not processing send queue as no bytes to send"),!0;if(this.sendingData)return this.log.trace("not processing send queue as already sending data"),!0;this.sendingData=!0,this.log.trace("processing send queue with %d queued bytes",this.writeBuffer.byteLength);try{let e=!0,t=this.writeBuffer.byteLength,n=0;for(;this.writeBuffer.byteLength>0;){let o=Math.min(this.maxMessageSize??this.writeBuffer.byteLength,this.writeBuffer.byteLength);if(o===0){e=!1;break}let s=this.writeBuffer.sublist(0,o),i=new X(s);this.writeBuffer.consume(s.byteLength);let a=this.sendData(s);if(e=a.canSendMore,n+=a.sentBytes,a.sentBytes!==i.byteLength&&(i.consume(a.sentBytes),this.writeBuffer.prepend(i)),!e)break}return e||(this.log.trace("sent %d/%d bytes, pausing sending because underlying stream is full, %d bytes left in the write buffer",n,t,this.writeBuffer.byteLength),this.writableNeedsDrain=!0,this.checkWriteBufferLength()),this.writeBuffer.byteLength===0&&this.safeDispatchEvent("idle"),e}finally{this.sendingData=!1}}dispatchReadBuffer(){try{if(this.listenerCount("message")===0){this.log.trace("not dispatching pause buffer as there are no listeners for the message event");return}if(this.readBuffer.byteLength===0){this.log.trace("not dispatching pause buffer as there is no data to dispatch");return}if(this.readStatus==="paused"){this.log.trace("not dispatching pause buffer we are paused");return}if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("dropping %d bytes because the readable end is %s",this.readBuffer.byteLength,this.readStatus),this.readBuffer.consume(this.readBuffer.byteLength);return}let e=this.readBuffer.sublist();this.readBuffer.consume(e.byteLength),this.dispatchEvent(new Tu(e))}finally{this.readBuffer.byteLength===0&&this.remoteWriteStatus==="closed"&&(this.log("close readable end after dispatching read buffer and remote writable end is closed"),this.readStatus="closed"),this.checkReadBufferLength()}}checkReadBufferLength(){this.readBuffer.byteLength>this.maxReadBufferLength&&this.abort(new Ya(`Read buffer length of ${this.readBuffer.byteLength} exceeded limit of ${this.maxReadBufferLength}, read status is ${this.readStatus}`))}checkWriteBufferLength(){this.maxWriteBufferLength!=null&&this.writeBuffer.byteLength>this.maxWriteBufferLength&&this.abort(new Ya(`Write buffer length of ${this.writeBuffer.byteLength} exceeded limit of ${this.maxWriteBufferLength}, write status is ${this.writeStatus}`))}onMuxerNeedsDrain(){this.writableNeedsDrain=!0}onMuxerDrain(){this.safeDispatchEvent("drain")}};var Oo=class extends No{remoteAddr;metricPrefix;metrics;constructor(e){super(e),this.metricPrefix=e.metricPrefix??"",this.metrics=e.metrics,this.remoteAddr=e.remoteAddr,this.addEventListener("close",t=>{this.metrics?.increment({[`${this.metricPrefix}end`]:!0}),t.error!=null?t.local?this.metrics?.increment({[`${this.metricPrefix}abort`]:!0}):this.metrics?.increment({[`${this.metricPrefix}reset`]:!0}):t.local?this.metrics?.increment({[`${this.metricPrefix}_local_close`]:!0}):this.metrics?.increment({[`${this.metricPrefix}_remote_close`]:!0})})}async close(e){this.status==="open"&&(this.status="closing",this.writeStatus="closing",this.remoteWriteStatus="closing",this.remoteReadStatus="closing",(this.sendingData||this.writeBuffer.byteLength>0)&&(this.log("waiting for write queue to become idle before closing writable end of stream, %d unsent bytes",this.writeBuffer.byteLength),await _r(this,"idle",{...e,rejectionEvents:["close"]})),this.writableNeedsDrain&&(this.log("waiting for write queue to drain before closing writable end of stream, %d unsent bytes",this.writeBuffer.byteLength),await _r(this,"drain",{...e,rejectionEvents:["close"]})),await this.sendClose(e),this.onTransportClosed())}};function Ed(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Mo=class extends ie{streams;protocol;status;log;maConn;streamOptions;earlyStreams;maxEarlyStreams;metrics;constructor(e,t){super(),this.maConn=e,this.protocol=t.protocol,this.streams=[],this.earlyStreams=[],this.status="open",this.log=e.log.newScope(t.name),this.streamOptions=t.streamOptions,this.maxEarlyStreams=t.maxEarlyStreams??10,this.metrics=t.metrics;let n=i=>{try{this.onData(i.data)}catch(a){this.abort(a),this.maConn.abort(a)}};this.maConn.addEventListener("message",n);let o=()=>{this.log("underlying stream drained, signal %d streams to continue writing",this.streams.length),this.streams.forEach(i=>{i.onMuxerDrain()})};this.maConn.addEventListener("drain",o);let s=()=>{this.log("underlying stream closed with status %s and %d streams",this.status,this.streams.length),this.onTransportClosed()};this.maConn.addEventListener("close",s)}send(e){let t=this.maConn.send(e);return t===!1&&(this.log("underlying stream saturated, signal %d streams to pause writing",this.streams.length),this.streams.forEach(n=>{n.onMuxerNeedsDrain()})),t}async close(e){this.status==="closed"||this.status==="closing"||(this.status="closing",await Pe(Promise.all([...this.streams].map(async t=>{await t.close(e)})),e?.signal),this.status="closed")}abort(e){this.status!=="closed"&&(this.status="closing",[...this.streams].forEach(t=>{t.abort(e)}),this.status="closed")}onTransportClosed(e){this.status="closing";try{[...this.streams].forEach(t=>{t.onTransportClosed(e)})}catch(t){this.abort(t)}this.status="closed"}async createStream(e){if(this.status!=="open")throw new Br;let t=this.onCreateStream({...this.streamOptions,...e});return Ed(t)&&(t=await t),this.streams.push(t),this.cleanUpStream(t),t}onRemoteStream(e){if(this.streams.push(e),this.cleanUpStream(e),this.listenerCount("stream")===0){this.earlyStreams.push(e),this.earlyStreams.length>this.maxEarlyStreams&&this.abort(new gd(`Too many early streams were opened - ${this.earlyStreams.length}/${this.maxEarlyStreams}`));return}this.safeDispatchEvent("stream",{detail:e})}cleanUpStream(e){let t=n=>{let o=this.streams.findIndex(s=>s===e);o!==-1&&this.streams.splice(o,1),n.error!=null?n.local?this.metrics?.increment({[`${e.direction}_stream_reset`]:!0}):this.metrics?.increment({[`${e.direction}_stream_abort`]:!0}):this.metrics?.increment({[`${e.direction}_stream_end`]:!0})};e.addEventListener("close",t),this.metrics?.increment({[`${e.direction}_stream`]:!0})}addEventListener(...e){super.addEventListener.apply(this,e),e[0]==="stream"&&this.earlyStreams.length>0&&queueMicrotask(()=>{this.earlyStreams.forEach(t=>{this.safeDispatchEvent("stream",{detail:t})}),this.earlyStreams=[]})}};var Bo=class extends No{id;protocol;constructor(e){super(e),this.id=e.id,this.protocol=e.protocol??""}async close(e){this.writeStatus==="closing"||this.writeStatus==="closed"||(this.writeStatus="closing",(this.sendingData||this.writeBuffer.byteLength>0)&&(this.log("waiting for write queue to become idle before closing writable end of stream, %d unsent bytes",this.writeBuffer.byteLength),await _r(this,"idle",{...e,rejectionEvents:["close"]})),this.writableNeedsDrain&&(this.log("waiting for write queue to drain before closing writable end of stream, %d unsent bytes, sending %s",this.writeBuffer.byteLength,this.sendingData),await _r(this,"drain",{...e,rejectionEvents:["close"]}),this.log("write queue drained, closing writable end of stream, %d unsent bytes, sending %s",this.writeBuffer.byteLength,this.sendingData)),await this.sendCloseWrite(e),this.writeStatus="closed",this.log("closed writable end gracefully"),this.remoteWriteStatus==="closed"&&this.onTransportClosed())}async closeRead(e){this.readStatus==="closing"||this.readStatus==="closed"||(this.readBuffer.byteLength>0&&this.readBuffer.consume(this.readBuffer.byteLength),this.readStatus="closing",await this.sendCloseRead(e),this.readStatus="closed",this.log("closed readable end gracefully"))}};function le(r){let e=new globalThis.AbortController;function t(){let s=r.filter(i=>i?.aborted===!0).map(i=>i?.reason).pop();e.abort(s);for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}for(let s of r){if(s?.aborted===!0){t();break}s?.addEventListener!=null&&s.addEventListener("abort",t)}function n(){for(let s of r)s?.removeEventListener!=null&&s.removeEventListener("abort",t)}let o=e.signal;return o.clear=n,o}var Hi=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,s=n*o;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+o*s),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*o}else this.movingAverage=e;this.previousTime=t}};var pT=1.2,mT=2,gT=5e3,yT=6e4,wT=5e3,Gr=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;maxTimeout;constructor(e={}){let t=e.interval??wT;this.success=new Hi(t),this.failure=new Hi(t),this.next=new Hi(t),this.failureMultiplier=e.failureMultiplier??mT,this.timeoutMultiplier=e.timeoutMultiplier??pT,this.minTimeout=e.minTimeout??gT,this.maxTimeout=e.maxTimeout??yT,e.metricName!=null&&(this.metric=e.metrics?.registerMetricGroup(e.metricName))}getTimeoutSignal(e={}){let t=Math.round(this.next.movingAverage*(e.timeoutFactor??this.timeoutMultiplier));t<this.minTimeout&&(t=this.minTimeout),t>this.maxTimeout&&(t=this.maxTimeout);let n=AbortSignal.timeout(t),o=le([e.signal,n]);return o.start=Date.now(),o.timeout=t,o}cleanUp(e){e.clear();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 At=class extends Error{static name="InvalidMultiaddrError";name="InvalidMultiaddrError"},zn=class extends Error{static name="ValidationError";name="ValidationError"},xd=class extends Error{static name="InvalidParametersError";name="InvalidParametersError"},vd=class extends Error{static name="UnknownProtocolError";name="UnknownProtocolError"};function Mm(r){return e=>R(e,r)}function Bm(r){return e=>C(e,r)}function qi(r){return new DataView(r.buffer).getUint16(r.byteOffset).toString()}function Ms(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,typeof r=="string"?parseInt(r):r),new Uint8Array(e)}function c7(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=C(e[0],"base32"),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=Ms(n);return Oe([t,o],t.length+o.length)}function l7(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=ut.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=Ms(n);return Oe([t,o],t.length+o.length)}function Um(r){let e=r.subarray(0,r.length-2),t=r.subarray(r.length-2),n=R(e,"base32"),o=qi(t);return`${n}:${o}`}var Fm=function(r){r=r.toString().trim();let e=new Uint8Array(4);return r.split(/\./g).forEach((t,n)=>{let o=parseInt(t,10);if(isNaN(o)||o<0||o>255)throw new At("Invalid byte value in IP address");e[n]=o}),e},u7=function(r){let e=0;r=r.toString().trim();let t=r.split(":",8),n;for(n=0;n<t.length;n++){let s=zr(t[n]),i;s&&(i=Fm(t[n]),t[n]=R(i.subarray(0,2),"base16")),i!=null&&++n<8&&t.splice(n,0,R(i.subarray(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 s=[n,1];for(n=9-t.length;n>0;n--)s.push("0");t.splice.apply(t,s)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){t[n]===""&&(t[n]="0");let s=parseInt(t[n],16);if(isNaN(s)||s<0||s>65535)throw new At("Invalid byte value in IP address");o[e++]=s>>8&255,o[e++]=s&255}return o},d7=function(r){if(r.byteLength!==4)throw new At("IPv4 address was incorrect length");let e=[];for(let t=0;t<r.byteLength;t++)e.push(r[t]);return e.join(".")},f7=function(r){if(r.byteLength!==16)throw new At("IPv6 address was incorrect length");let e=[];for(let n=0;n<r.byteLength;n+=2){let o=r[n],s=r[n+1],i=`${o.toString(16).padStart(2,"0")}${s.toString(16).padStart(2,"0")}`;e.push(i)}let t=e.join(":");try{let n=new URL(`http://[${t}]`);return n.hostname.substring(1,n.hostname.length-1)}catch{throw new At(`Invalid IPv6 address "${t}"`)}};function h7(r){try{let e=new URL(`http://[${r}]`);return e.hostname.substring(1,e.hostname.length-1)}catch{throw new At(`Invalid IPv6 address "${r}"`)}}var Om=Object.values(ps).map(r=>r.decoder),bT=(function(){let r=Om[0].or(Om[1]);return Om.slice(2).forEach(e=>r=r.or(e)),r})();function p7(r){return bT.decode(r)}function m7(r){return e=>r.encoder.encode(e)}function ET(r){if(parseInt(r).toString()!==r)throw new zn("Value must be an integer")}function xT(r){if(r<0)throw new zn("Value must be a positive integer, or zero")}function vT(r){return e=>{if(e>r)throw new zn(`Value must be smaller than or equal to ${r}`)}}function ST(...r){return e=>{for(let t of r)t(e)}}var Bc=ST(ET,xT,vT(65535));var mt=-1,$m=class{protocolsByCode=new Map;protocolsByName=new Map;getProtocol(e){let t;if(typeof e=="string"?t=this.protocolsByName.get(e):t=this.protocolsByCode.get(e),t==null)throw new vd(`Protocol ${e} was unknown`);return t}addProtocol(e){this.protocolsByCode.set(e.code,e),this.protocolsByName.set(e.name,e),e.aliases?.forEach(t=>{this.protocolsByName.set(t,e)})}removeProtocol(e){let t=this.protocolsByCode.get(e);t!=null&&(this.protocolsByCode.delete(t.code),this.protocolsByName.delete(t.name),t.aliases?.forEach(n=>{this.protocolsByName.delete(n)}))}},jn=new $m,UT=[{code:4,name:"ip4",size:32,valueToBytes:Fm,bytesToValue:d7,validate:r=>{if(!zr(r))throw new zn(`Invalid IPv4 address "${r}"`)}},{code:6,name:"tcp",size:16,valueToBytes:Ms,bytesToValue:qi,validate:Bc},{code:273,name:"udp",size:16,valueToBytes:Ms,bytesToValue:qi,validate:Bc},{code:33,name:"dccp",size:16,valueToBytes:Ms,bytesToValue:qi,validate:Bc},{code:41,name:"ip6",size:128,valueToBytes:u7,bytesToValue:f7,stringToValue:h7,validate:r=>{if(!fd(r))throw new zn(`Invalid IPv6 address "${r}"`)}},{code:42,name:"ip6zone",size:mt},{code:43,name:"ipcidr",size:8,bytesToValue:Mm("base10"),valueToBytes:Bm("base10")},{code:53,name:"dns",size:mt},{code:54,name:"dns4",size:mt},{code:55,name:"dns6",size:mt},{code:56,name:"dnsaddr",size:mt},{code:132,name:"sctp",size:16,valueToBytes:Ms,bytesToValue:qi,validate:Bc},{code:301,name:"udt"},{code:302,name:"utp"},{code:400,name:"unix",size:mt,stringToValue:r=>decodeURIComponent(r),valueToString:r=>encodeURIComponent(r)},{code:421,name:"p2p",aliases:["ipfs"],size:mt,bytesToValue:Mm("base58btc"),valueToBytes:r=>r.startsWith("Q")||r.startsWith("1")?Bm("base58btc")(r):G.parse(r).multihash.bytes},{code:444,name:"onion",size:96,bytesToValue:Um,valueToBytes:c7},{code:445,name:"onion3",size:296,bytesToValue:Um,valueToBytes:l7},{code:446,name:"garlic64",size:mt},{code:447,name:"garlic32",size:mt},{code:448,name:"tls"},{code:449,name:"sni",size:mt},{code:454,name:"noise"},{code:460,name:"quic"},{code:461,name:"quic-v1"},{code:465,name:"webtransport"},{code:466,name:"certhash",size:mt,bytesToValue:m7(ec),valueToBytes:p7},{code:480,name:"http"},{code:481,name:"http-path",size:mt,stringToValue:r=>`/${decodeURIComponent(r)}`,valueToString:r=>encodeURIComponent(r.substring(1))},{code:443,name:"https"},{code:477,name:"ws"},{code:478,name:"wss"},{code:479,name:"p2p-websocket-star"},{code:277,name:"p2p-stardust"},{code:275,name:"p2p-webrtc-star"},{code:276,name:"p2p-webrtc-direct"},{code:280,name:"webrtc-direct"},{code:281,name:"webrtc"},{code:290,name:"p2p-circuit"},{code:777,name:"memory",size:mt}];UT.forEach(r=>{jn.addProtocol(r)});function g7(r){let e=[],t=0;for(;t<r.length;){let n=hr(r,t),o=jn.getProtocol(n),s=he(n),i=FT(o,r,t+s),a=0;i>0&&o.size===mt&&(a=he(i));let c=s+a+i,l={code:n,name:o.name,bytes:r.subarray(t,t+c)};if(i>0){let d=t+s+a,u=r.subarray(d,d+i);l.value=o.bytesToValue?.(u)??R(u)}e.push(l),t+=c}return e}function y7(r){let e=0,t=[];for(let n of r){if(n.bytes==null){let o=jn.getProtocol(n.code),s=he(n.code),i,a=0,c=0;n.value!=null&&(i=o.valueToBytes?.(n.value)??C(n.value),a=i.byteLength,o.size===mt&&(c=he(a)));let l=new Uint8Array(s+c+a),d=0;Oi(n.code,l,d),d+=s,i!=null&&(o.size===mt&&(Oi(a,l,d),d+=c),l.set(i,d)),n.bytes=l}t.push(n.bytes),e+=n.bytes.byteLength}return Oe(t,e)}function w7(r){if(r.charAt(0)!=="/")throw new At('String multiaddr must start with "/"');let e=[],t="protocol",n="",o="";for(let s=1;s<r.length;s++){let i=r.charAt(s);i!=="/"&&(t==="protocol"?o+=r.charAt(s):n+=r.charAt(s));let a=s===r.length-1;if(i==="/"||a){let c=jn.getProtocol(o);if(t==="protocol"){if(c.size==null||c.size===0){e.push({code:c.code,name:c.name}),n="",o="",t="protocol";continue}else if(a)throw new At(`Component ${o} was missing value`);t="value"}else if(t==="value"){let l={code:c.code,name:c.name};if(c.size!=null&&c.size!==0){if(n==="")throw new At(`Component ${o} was missing value`);l.value=c.stringToValue?.(n)??n}e.push(l),n="",o="",t="protocol"}}}if(o!==""&&n!=="")throw new At("Incomplete multiaddr");return e}function b7(r){return`/${r.flatMap(e=>{if(e.value==null)return e.name;let t=jn.getProtocol(e.code);if(t==null)throw new At(`Unknown protocol code ${e.code}`);return[e.name,t.valueToString?.(e.value)??e.value]}).join("/")}`}function FT(r,e,t){return r.size==null||r.size===0?0:r.size>0?r.size/8:hr(e,t)}var $T=Symbol.for("nodejs.util.inspect.custom"),jm=Symbol.for("@multiformats/multiaddr");function KT(r){if(r==null&&(r="/"),yn(r))return r.getComponents();if(r instanceof Uint8Array)return g7(r);if(typeof r=="string")return r=r.replace(/\/(\/)+/,"/").replace(/(\/)+$/,""),r===""&&(r="/"),w7(r);if(Array.isArray(r))return r;throw new At("Must be a string, Uint8Array, Component[], or another Multiaddr")}var Td=class r{[jm]=!0;#e;#t;#r;constructor(e="/",t={}){this.#e=KT(e),t.validate!==!1&&VT(this)}get bytes(){return this.#r==null&&(this.#r=y7(this.#e)),this.#r}toString(){return this.#t==null&&(this.#t=b7(this.#e)),this.#t}toJSON(){return this.toString()}getComponents(){return[...this.#e.map(e=>({...e}))]}encapsulate(e){let t=new r(e);return new r([...this.#e,...t.getComponents()],{validate:!1})}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new xd(`Address ${this.toString()} does not contain subaddress: ${t}`);return new r(n.slice(0,o),{validate:!1})}decapsulateCode(e){let t;for(let n=this.#e.length-1;n>-1;n--)if(this.#e[n].code===e){t=n;break}return new r(this.#e.slice(0,t),{validate:!1})}equals(e){return ee(this.bytes,e.bytes)}[$T](){return`Multiaddr(${this.toString()})`}};function VT(r){r.getComponents().forEach(e=>{let t=jn.getProtocol(e.code);e.value!=null&&t.validate?.(e.value)})}function yn(r){return!!r?.[jm]}function q(r){return new Td(r)}var Xm=class{readNext;haveNext;ended;nextResult;error;constructor(){this.ended=!1,this.readNext=fe(),this.haveNext=fe()}[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=fe(),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=fe(),await Pe(this.readNext.promise,t?.signal,t)}};function E7(){return new Xm}function HT(r){return r[Symbol.asyncIterator]!=null}async function qT(r,e,t){try{await Promise.all(r.map(async n=>{for await(let o of n)await e.push(o,{signal:t}),t.throwIfAborted()})),await e.end(void 0,{signal:t})}catch(n){await e.end(n,{signal:t}).catch(()=>{})}}async function*WT(r){let e=new AbortController,t=E7();qT(r,t,e.signal).catch(()=>{});try{yield*t}finally{e.abort()}}function*zT(r){for(let e of r)yield*e}function GT(...r){let e=[];for(let t of r)HT(t)||e.push(t);return e.length===r.length?zT(e):WT(r)}var jt=GT;function Yi(r,...e){if(r==null)throw new Error("Empty pipeline");if(Qm(r)){let n=r;r=()=>n.source}else if(v7(r)||x7(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&Qm(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++)Qm(t[n])&&(t[n]=jT(t[n]));return YT(...t)}var YT=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},x7=r=>r?.[Symbol.asyncIterator]!=null,v7=r=>r?.[Symbol.iterator]!=null,Qm=r=>r==null?!1:r.sink!=null&&r.source!=null,jT=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=vt({objectMode:!0});t.then(()=>{n.end()},i=>{n.end(i)});let o,s=r.source;if(x7(s))o=async function*(){yield*s,n.end()};else if(v7(s))o=function*(){yield*s,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return jt(n,o())}return r.source};var XT=4194304,_d=class extends Error{static name="UnwrappedError";name="UnwrappedError"},Hc=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Jm=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},eg=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function QT(r){return typeof r?.closeRead=="function"}function ZT(r){return typeof r?.close=="function"}function Zm(r){return QT(r)?r.remoteWriteStatus!=="writable"&&r.readBufferLength===0:ZT(r)?r.status!=="open":!1}function JT(r){return r?.addEventListener!=null&&r?.removeEventListener!=null&&r?.send!=null&&r?.push!=null&&r?.log!=null}function Cd(r,e){let t=e?.maxBufferSize??XT,n=new X,o,s=!1;if(!JT(r))throw new A("Argument should be a Stream or a Multiaddr");let i=d=>{if(n.append(d.data),n.byteLength>t){let u=n.byteLength;n.consume(n.byteLength),o?.reject(new Error(`Read buffer overflow - ${u} > ${t}`))}o?.resolve()};r.addEventListener("message",i);let a=d=>{d.error!=null?o?.reject(d.error):o?.resolve()};r.addEventListener("close",a);let c=()=>{o?.resolve()};r.addEventListener("remoteCloseWrite",c);let l={readBuffer:n,async read(d){if(s===!0)throw new _d("Stream was unwrapped");if(Zm(r)){if(n.byteLength===0&&d?.bytes==null)return null;if(d?.bytes!=null&&n.byteLength<d.bytes)throw r.log.error("closed after reading %d/%d bytes",n.byteLength,d.bytes),new Os(`Unexpected EOF - stream closed after reading ${n.byteLength}/${d.bytes} bytes`)}let u=d?.bytes??1;for(o=Promise.withResolvers();;){if(n.byteLength>=u){o.resolve();break}if(await Pe(o.promise,d?.signal),Zm(r)){if(n.byteLength===0&&d?.bytes==null)return null;break}o=Promise.withResolvers()}let f=d?.bytes??n.byteLength;if(n.byteLength<f){if(Zm(r))throw r.log.error("closed while reading %d/%d bytes",n.byteLength,f),new Os(`Unexpected EOF - stream closed while reading ${n.byteLength}/${f} bytes`);return l.read(d)}let h=n.sublist(0,f);return n.consume(f),h},async write(d,u){if(s===!0)throw new _d("Stream was unwrapped");r.send(d)||await _r(r,"drain",{signal:u?.signal,rejectionEvents:["close"]})},unwrap(){return s||(s=!0,r.removeEventListener("message",i),r.removeEventListener("close",a),r.removeEventListener("remoteCloseWrite",c),n.byteLength>0&&(r.log("stream unwrapped with %d unread bytes",n.byteLength),r.push(n))),r}};return l}function Fo(r,e={}){let t=Cd(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=he(e.maxDataLength));let n=e?.lengthDecoder??hr,o=e?.lengthEncoder??Mt;return{async read(i){let a=-1,c=new X;for(;;){let d=await t.read({...i,bytes:1});if(d==null)break;c.append(d);try{a=n(c)}catch(u){if(u instanceof RangeError)continue;throw u}if(a<0)throw new Hc("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new eg(`Message length length too long - ${c.byteLength} > ${e.maxLengthLength}`);if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new Jm(`Message length too long - ${a} > ${e.maxDataLength}`);let l=await t.read({...i,bytes:a});if(l==null)throw r.log.error("tried to read %d bytes but the stream closed",a),new Os(`Unexpected EOF - tried to read ${a} bytes but the stream closed`);if(l.byteLength!==a)throw r.log.error("read %d/%d bytes before the stream closed",l.byteLength,a),new Os(`Unexpected EOF - read ${l.byteLength}/${a} bytes before the stream closed`);return l},async write(i,a){await t.write(new X(o(i.byteLength),i),a)},async writeV(i,a){let c=new X(...i.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap(){return t.unwrap()}}}function Ue(r,e){let t=Fo(r,e),n={read:async(o,s)=>{let i=await t.read(s);return o.decode(i)},write:async(o,s,i)=>{await t.write(s.encode(o),i)},writeV:async(o,s,i)=>{await t.writeV(o.map(a=>s.encode(a)),i)},pb:o=>({read:async s=>n.read(o,s),write:async(s,i)=>n.write(s,o,i),writeV:async(s,i)=>n.writeV(s,o,i),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var e_=1024*1024*4,t_=1024*1024*4,kd=class{buffer;maxBufferSize;lengthDecoder;maxDataLength;encodingLength;constructor(e={}){this.buffer=new X,this.maxBufferSize=e.maxBufferSize??e_,this.maxDataLength=e.maxDataLength??t_,this.lengthDecoder=e.lengthDecoder??hr,this.encodingLength=e.encodingLength??he}*decode(e){if(this.buffer.append(e),this.buffer.byteLength>this.maxBufferSize)throw new A(`Buffer length limit exceeded - ${this.buffer.byteLength}/${this.maxBufferSize}`);for(;;){let t;try{t=this.lengthDecoder(this.buffer)}catch(s){if(s instanceof RangeError)break;throw s}if(t<0||t>this.maxDataLength)throw new Hc("Invalid message length");let n=this.encodingLength(t),o=n+t;if(this.buffer.byteLength>=o){let s=this.buffer.sublist(n,o);this.buffer.consume(o),s.byteLength>0&&(yield s)}else break}}};var r_=["Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function tg(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(e==="string"||e==="number"||e==="bigint"||e==="symbol")return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(r instanceof Uint8Array)return"Uint8Array";if(r.constructor===Object)return"Object";let t=n_(r);return t||"Object"}function n_(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(r_.includes(e))return e}var y=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}static equals(e,t){return e===t||e.major===t.major&&e.name===t.name}};y.uint=new y(0,"uint",!0);y.negint=new y(1,"negint",!0);y.bytes=new y(2,"bytes",!0);y.string=new y(3,"string",!0);y.array=new y(4,"array",!1);y.map=new y(5,"map",!1);y.tag=new y(6,"tag",!1);y.float=new y(7,"float",!0);y.false=new y(7,"false",!0);y.true=new y(7,"true",!0);y.null=new y(7,"null",!0);y.undefined=new y(7,"undefined",!0);y.break=new y(7,"break",!0);var N=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 qc=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",o_=new TextEncoder;function Pd(r){return qc&&globalThis.Buffer.isBuffer(r)}function Us(r){return r instanceof Uint8Array?Pd(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var s_=24,i_=200,ji=qc?r=>r.length>=s_?globalThis.Buffer.from(r):S7(r):r=>r.length>=i_?o_.encode(r):S7(r),wn=r=>Uint8Array.from(r),I7=qc?(r,e,t)=>Pd(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),T7=qc?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),Us(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},_7=qc?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function Rd(r,e){if(Pd(r)&&Pd(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 S7(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):(o>=55296&&o<=57343&&(o=65533),e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}var A7=4096;function C7(r){let e=r.length;if(e<=A7)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=A7));return t}var a_=256,Wc=class{constructor(e=a_){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=_7(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=I7(n,0,this.cursor)}else t=T7(this.chunks,this.cursor);return e&&this.reset(),t}},Ld=class{constructor(e){this.dest=e,this.cursor=0,this.chunks=[e]}reset(){this.cursor=0}push(e){if(this.cursor+e.length>this.dest.length)throw new Error("write out of bounds, destination buffer is too small");this.dest.set(e,this.cursor),this.cursor+=e.length}toBytes(e=!1){let t=this.dest.subarray(0,this.cursor);return e&&this.reset(),t}};var J="CBOR decode error:",bn="CBOR encode error:",zc=[];zc[23]=1;zc[24]=2;zc[25]=3;zc[26]=5;zc[27]=9;function Xn(r,e,t){if(r.length-e<t)throw new Error(`${J} not enough data for type`)}var gt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function mr(r,e,t){Xn(r,e,1);let n=r[e];if(t.strict===!0&&n<gt[0])throw new Error(`${J} integer encoded in more bytes than necessary (strict decode)`);return n}function gr(r,e,t){Xn(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<gt[1])throw new Error(`${J} integer encoded in more bytes than necessary (strict decode)`);return n}function yr(r,e,t){Xn(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<gt[2])throw new Error(`${J} integer encoded in more bytes than necessary (strict decode)`);return n}function wr(r,e,t){Xn(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],s=(BigInt(n)<<BigInt(32))+BigInt(o);if(t.strict===!0&&s<gt[3])throw new Error(`${J} integer encoded in more bytes than necessary (strict decode)`);if(s<=Number.MAX_SAFE_INTEGER)return Number(s);if(t.allowBigInt===!0)return s;throw new Error(`${J} integers outside of the safe integer range are not supported`)}function k7(r,e,t,n){return new N(y.uint,mr(r,e+1,n),2)}function P7(r,e,t,n){return new N(y.uint,gr(r,e+1,n),3)}function R7(r,e,t,n){return new N(y.uint,yr(r,e+1,n),5)}function L7(r,e,t,n){return new N(y.uint,wr(r,e+1,n),9)}function Cr(r,e){return Ke(r,0,e.value)}function Ke(r,e,t){if(t<gt[0]){let n=Number(t);r.push([e|n])}else if(t<gt[1]){let n=Number(t);r.push([e|24,n])}else if(t<gt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<gt[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<gt[4]){let o=[e|27,0,0,0,0,0,0,0],s=Number(n&BigInt(4294967295)),i=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=s&255,s=s>>8,o[7]=s&255,s=s>>8,o[6]=s&255,s=s>>8,o[5]=s&255,o[4]=i&255,i=i>>8,o[3]=i&255,i=i>>8,o[2]=i&255,i=i>>8,o[1]=i&255,r.push(o)}else throw new Error(`${J} encountered BigInt larger than allowable range`)}}Cr.encodedSize=function(e){return Ke.encodedSize(e.value)};Ke.encodedSize=function(e){return e<gt[0]?1:e<gt[1]?2:e<gt[2]?3:e<gt[3]?5:9};Cr.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function D7(r,e,t,n){return new N(y.negint,-1-mr(r,e+1,n),2)}function N7(r,e,t,n){return new N(y.negint,-1-gr(r,e+1,n),3)}function O7(r,e,t,n){return new N(y.negint,-1-yr(r,e+1,n),5)}var rg=BigInt(-1),M7=BigInt(1);function B7(r,e,t,n){let o=wr(r,e+1,n);if(typeof o!="bigint"){let s=-1-o;if(s>=Number.MIN_SAFE_INTEGER)return new N(y.negint,s,9)}if(n.allowBigInt!==!0)throw new Error(`${J} integers outside of the safe integer range are not supported`);return new N(y.negint,rg-BigInt(o),9)}function Dd(r,e){let t=e.value,n=typeof t=="bigint"?t*rg-M7:t*-1-1;Ke(r,e.type.majorEncoded,n)}Dd.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*rg-M7:t*-1-1;return n<gt[0]?1:n<gt[1]?2:n<gt[2]?3:n<gt[3]?5:9};Dd.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function Gc(r,e,t,n){Xn(r,e,t+n);let o=r.slice(e+t,e+t+n);return new N(y.bytes,o,t+n)}function U7(r,e,t,n){return Gc(r,e,1,t)}function F7(r,e,t,n){return Gc(r,e,2,mr(r,e+1,n))}function $7(r,e,t,n){return Gc(r,e,3,gr(r,e+1,n))}function K7(r,e,t,n){return Gc(r,e,5,yr(r,e+1,n))}function V7(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${J} 64-bit integer bytes lengths not supported`);return Gc(r,e,9,o)}function Nd(r){return r.encodedBytes===void 0&&(r.encodedBytes=y.equals(r.type,y.string)?ji(r.value):r.value),r.encodedBytes}function Xi(r,e){let t=Nd(e);Ke(r,e.type.majorEncoded,t.length),r.push(t)}Xi.encodedSize=function(e){let t=Nd(e);return Ke.encodedSize(t.length)+t.length};Xi.compareTokens=function(e,t){return l_(Nd(e),Nd(t))};function l_(r,e){return r.length<e.length?-1:r.length>e.length?1:Rd(r,e)}var H7=new TextDecoder,d_=32;function f_(r,e,t){if(t-e<d_){let o="";for(let s=e;s<t;s++){let i=r[s];if(i&128)return H7.decode(r.subarray(e,t));o+=String.fromCharCode(i)}return o}return H7.decode(r.subarray(e,t))}function Yc(r,e,t,n,o){let s=t+n;Xn(r,e,s);let i=new N(y.string,f_(r,e+t,e+s),s);return o.retainStringBytes===!0&&(i.byteValue=r.slice(e+t,e+s)),i}function q7(r,e,t,n){return Yc(r,e,1,t,n)}function W7(r,e,t,n){return Yc(r,e,2,mr(r,e+1,n),n)}function z7(r,e,t,n){return Yc(r,e,3,gr(r,e+1,n),n)}function G7(r,e,t,n){return Yc(r,e,5,yr(r,e+1,n),n)}function Y7(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${J} 64-bit integer string lengths not supported`);return Yc(r,e,9,o,n)}var j7=Xi;function Qi(r,e,t,n){return new N(y.array,n,t)}function X7(r,e,t,n){return Qi(r,e,1,t)}function Q7(r,e,t,n){return Qi(r,e,2,mr(r,e+1,n))}function Z7(r,e,t,n){return Qi(r,e,3,gr(r,e+1,n))}function J7(r,e,t,n){return Qi(r,e,5,yr(r,e+1,n))}function ey(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${J} 64-bit integer array lengths not supported`);return Qi(r,e,9,o)}function ty(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${J} indefinite length items not allowed`);return Qi(r,e,1,1/0)}function Od(r,e){Ke(r,y.array.majorEncoded,e.value)}Od.compareTokens=Cr.compareTokens;Od.encodedSize=function(e){return Ke.encodedSize(e.value)};function Zi(r,e,t,n){return new N(y.map,n,t)}function ry(r,e,t,n){return Zi(r,e,1,t)}function ny(r,e,t,n){return Zi(r,e,2,mr(r,e+1,n))}function oy(r,e,t,n){return Zi(r,e,3,gr(r,e+1,n))}function sy(r,e,t,n){return Zi(r,e,5,yr(r,e+1,n))}function iy(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${J} 64-bit integer map lengths not supported`);return Zi(r,e,9,o)}function ay(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${J} indefinite length items not allowed`);return Zi(r,e,1,1/0)}function Md(r,e){Ke(r,y.map.majorEncoded,e.value)}Md.compareTokens=Cr.compareTokens;Md.encodedSize=function(e){return Ke.encodedSize(e.value)};function cy(r,e,t,n){return new N(y.tag,t,1)}function ly(r,e,t,n){return new N(y.tag,mr(r,e+1,n),2)}function uy(r,e,t,n){return new N(y.tag,gr(r,e+1,n),3)}function dy(r,e,t,n){return new N(y.tag,yr(r,e+1,n),5)}function fy(r,e,t,n){return new N(y.tag,wr(r,e+1,n),9)}function Bd(r,e){Ke(r,y.tag.majorEncoded,e.value)}Bd.compareTokens=Cr.compareTokens;Bd.encodedSize=function(e){return Ke.encodedSize(e.value)};var ng=20,og=21,sg=22,ig=23;function hy(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${J} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new N(y.null,null,1):new N(y.undefined,void 0,1)}function py(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${J} indefinite length items not allowed`);return new N(y.break,void 0,1)}function ag(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 N(y.float,r,e)}function my(r,e,t,n){return ag(cg(r,e+1),3,n)}function gy(r,e,t,n){return ag(lg(r,e+1),5,n)}function yy(r,e,t,n){return ag(xy(r,e+1),9,n)}function jc(r,e,t){let n=e.value;if(n===!1)r.push([y.float.majorEncoded|ng]);else if(n===!0)r.push([y.float.majorEncoded|og]);else if(n===null)r.push([y.float.majorEncoded|sg]);else if(n===void 0)r.push([y.float.majorEncoded|ig]);else{let o,s=!1;(!t||t.float64!==!0)&&(by(n),o=cg(jr,1),n===o||Number.isNaN(n)?(jr[0]=249,r.push(jr.slice(0,3)),s=!0):(Ey(n),o=lg(jr,1),n===o&&(jr[0]=250,r.push(jr.slice(0,5)),s=!0))),s||(y_(n),o=xy(jr,1),jr[0]=251,r.push(jr.slice(0,9)))}}jc.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){by(n);let o=cg(jr,1);if(n===o||Number.isNaN(n))return 3;if(Ey(n),o=lg(jr,1),n===o)return 5}return 9};var wy=new ArrayBuffer(9),kr=new DataView(wy,1),jr=new Uint8Array(wy,0);function by(r){if(r===1/0)kr.setUint16(0,31744,!1);else if(r===-1/0)kr.setUint16(0,64512,!1);else if(Number.isNaN(r))kr.setUint16(0,32256,!1);else{kr.setFloat32(0,r);let e=kr.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)kr.setUint16(0,31744,!1);else if(t===0)kr.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?kr.setUint16(0,0):o<-14?kr.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):kr.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function cg(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,s;return n===0?s=o*2**-24:n!==31?s=(o+1024)*2**(n-25):s=o===0?1/0:NaN,t&32768?-s:s}function Ey(r){kr.setFloat32(0,r,!1)}function lg(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 y_(r){kr.setFloat64(0,r,!1)}function xy(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)}jc.compareTokens=Cr.compareTokens;function xe(r,e,t){throw new Error(`${J} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function Ud(r){return()=>{throw new Error(`${J} ${r}`)}}var V=[];for(let r=0;r<=23;r++)V[r]=xe;V[24]=k7;V[25]=P7;V[26]=R7;V[27]=L7;V[28]=xe;V[29]=xe;V[30]=xe;V[31]=xe;for(let r=32;r<=55;r++)V[r]=xe;V[56]=D7;V[57]=N7;V[58]=O7;V[59]=B7;V[60]=xe;V[61]=xe;V[62]=xe;V[63]=xe;for(let r=64;r<=87;r++)V[r]=U7;V[88]=F7;V[89]=$7;V[90]=K7;V[91]=V7;V[92]=xe;V[93]=xe;V[94]=xe;V[95]=Ud("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)V[r]=q7;V[120]=W7;V[121]=z7;V[122]=G7;V[123]=Y7;V[124]=xe;V[125]=xe;V[126]=xe;V[127]=Ud("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)V[r]=X7;V[152]=Q7;V[153]=Z7;V[154]=J7;V[155]=ey;V[156]=xe;V[157]=xe;V[158]=xe;V[159]=ty;for(let r=160;r<=183;r++)V[r]=ry;V[184]=ny;V[185]=oy;V[186]=sy;V[187]=iy;V[188]=xe;V[189]=xe;V[190]=xe;V[191]=ay;for(let r=192;r<=215;r++)V[r]=cy;V[216]=ly;V[217]=uy;V[218]=dy;V[219]=fy;V[220]=xe;V[221]=xe;V[222]=xe;V[223]=xe;for(let r=224;r<=243;r++)V[r]=Ud("simple values are not supported");V[244]=xe;V[245]=xe;V[246]=xe;V[247]=hy;V[248]=Ud("simple values are not supported");V[249]=my;V[250]=gy;V[251]=yy;V[252]=xe;V[253]=xe;V[254]=xe;V[255]=py;var Xr=[];for(let r=0;r<24;r++)Xr[r]=new N(y.uint,r,1);for(let r=-1;r>=-24;r--)Xr[31-r]=new N(y.negint,r,1);Xr[64]=new N(y.bytes,new Uint8Array(0),1);Xr[96]=new N(y.string,"",1);Xr[128]=new N(y.array,0,1);Xr[160]=new N(y.map,0,1);Xr[244]=new N(y.false,!1,1);Xr[245]=new N(y.true,!0,1);Xr[246]=new N(y.null,null,1);function ug(r){switch(r.type){case y.false:return wn([244]);case y.true:return wn([245]);case y.null:return wn([246]);case y.bytes:return r.value.length?void 0:wn([64]);case y.string:return r.value===""?wn([96]):void 0;case y.array:return r.value===0?wn([128]):void 0;case y.map:return r.value===0?wn([160]):void 0;case y.uint:return r.value<24?wn([Number(r.value)]):void 0;case y.negint:if(r.value>=-24)return wn([31-Number(r.value)])}}var b_={float64:!1,mapSorter:v_,quickEncodeToken:ug},Ty=Object.freeze({float64:!0,mapSorter:S_,quickEncodeToken:ug});function E_(){let r=[];return r[y.uint.major]=Cr,r[y.negint.major]=Dd,r[y.bytes.major]=Xi,r[y.string.major]=j7,r[y.array.major]=Od,r[y.map.major]=Md,r[y.tag.major]=Bd,r[y.float.major]=jc,r}var Ji=E_(),Fd=new Wc,Qc=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(`${bn} object contains circular references`);return new r(t,e)}},$o={null:new N(y.null,null),undefined:new N(y.undefined,void 0),true:new N(y.true,!0),false:new N(y.false,!1),emptyArray:new N(y.array,0),emptyMap:new N(y.map,0)},En={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new N(y.float,r):r>=0?new N(y.uint,r):new N(y.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new N(y.uint,r):new N(y.negint,r)},Uint8Array(r,e,t,n){return new N(y.bytes,r)},string(r,e,t,n){return new N(y.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 N(y.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new N(y.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[$o.emptyArray,new N(y.break)]:$o.emptyArray;n=Qc.createCheck(n,r);let o=[],s=0;for(let i of r)o[s++]=$d(i,t,n);return t.addBreakTokens?[new N(y.array,r.length),o,new N(y.break)]:[new N(y.array,r.length),o]},Object(r,e,t,n){let o=e!=="Object",s=o?r.keys():Object.keys(r),i=o?r.size:s.length,a;if(i){a=new Array(i),n=Qc.createCheck(n,r);let c=!o&&t.ignoreUndefinedProperties,l=0;for(let d of s){let u=o?r.get(d):r[d];c&&u===void 0||(a[l++]=[$d(d,t,n),$d(u,t,n)])}l<i&&(a.length=l)}return a?.length?(x_(a,t),t.addBreakTokens?[new N(y.map,a.length),a,new N(y.break)]:[new N(y.map,a.length),a]):t.addBreakTokens===!0?[$o.emptyMap,new N(y.break)]:$o.emptyMap}};En.Map=En.Object;En.Buffer=En.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))En[`${r}Array`]=En.DataView;function $d(r,e={},t){let n=tg(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||En[n];if(typeof o=="function"){let i=o(r,n,e,t);if(i!=null)return i}let s=En[n];if(!s)throw new Error(`${bn} unsupported type: ${n}`);return s(r,n,e,t)}function x_(r,e){e.mapSorter&&r.sort(e.mapSorter)}function v_(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,s=Ji[o].compareTokens(t,n);return s===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),s}function S_(r,e){if(r[0]instanceof N&&e[0]instanceof N){let t=r[0],n=e[0];return t._keyBytes||(t._keyBytes=vy(t.value)),n._keyBytes||(n._keyBytes=vy(n.value)),Rd(t._keyBytes,n._keyBytes)}throw new Error("rfc8949MapSorter: complex key types are not supported yet")}function vy(r){return Kd(r,Ji,Ty)}function Xc(r,e,t,n){if(Array.isArray(e))for(let o of e)Xc(r,o,t,n);else t[e.type.major](r,e,n)}var Sy=y.uint.majorEncoded,Ay=y.negint.majorEncoded,A_=y.bytes.majorEncoded,I_=y.string.majorEncoded,Iy=y.array.majorEncoded,T_=y.float.majorEncoded|ng,__=y.float.majorEncoded|og,C_=y.float.majorEncoded|sg,k_=y.float.majorEncoded|ig,P_=BigInt(-1),R_=BigInt(1);function L_(r){return r.addBreakTokens!==!0}function _y(r,e,t,n){let o=tg(e),s=t.typeEncoders&&t.typeEncoders[o];if(s){let i=s(e,o,t,n);if(i!=null){Xc(r,i,Ji,t);return}}switch(o){case"null":r.push([C_]);return;case"undefined":r.push([k_]);return;case"boolean":r.push([e?__:T_]);return;case"number":!Number.isInteger(e)||!Number.isSafeInteger(e)?jc(r,new N(y.float,e),t):e>=0?Ke(r,Sy,e):Ke(r,Ay,e*-1-1);return;case"bigint":e>=BigInt(0)?Ke(r,Sy,e):Ke(r,Ay,e*P_-R_);return;case"string":{let i=ji(e);Ke(r,I_,i.length),r.push(i);return}case"Uint8Array":Ke(r,A_,e.length),r.push(e);return;case"Array":if(!e.length){r.push([Iy]);return}n=Qc.createCheck(n,e),Ke(r,Iy,e.length);for(let i of e)_y(r,i,t,n);return;case"Object":case"Map":{let i=En.Object(e,o,t,n);Xc(r,i,Ji,t)}return;default:{let i=En[o];if(!i)throw new Error(`${bn} unsupported type: ${o}`);let a=i(e,o,t,n);Xc(r,a,Ji,t)}}}function Kd(r,e,t,n){let o=n instanceof Uint8Array,s=o?new Ld(n):Fd,i=$d(r,t);if(!Array.isArray(i)&&t.quickEncodeToken){let a=t.quickEncodeToken(i);if(a)return o?(s.push(a),s.toBytes()):a;let c=e[i.type.major];if(c.encodedSize){let l=c.encodedSize(i,t);if(o||(s=new Wc(l)),c(s,i,t),s.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${i} was wrong`);return o?s.toBytes():Us(s.chunks[0])}}return s.reset(),Xc(s,i,e,t),s.toBytes(!0)}function Ko(r,e){return e=Object.assign({},b_,e),L_(e)?(Fd.reset(),_y(Fd,r,e,void 0),Fd.toBytes(!0)):Kd(r,Ji,e)}var D_={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},Vd=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=Xr[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}},Zc=Symbol.for("DONE"),Hd=Symbol.for("BREAK");function N_(r,e,t){let n=[];for(let o=0;o<r.value;o++){let s=ea(e,t);if(s===Hd){if(r.value===1/0)break;throw new Error(`${J} got unexpected break to lengthed array`)}if(s===Zc)throw new Error(`${J} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=s}return n}function O_(r,e,t){let n=t.useMaps===!0,o=t.rejectDuplicateMapKeys===!0,s=n?void 0:{},i=n?new Map:void 0;for(let a=0;a<r.value;a++){let c=ea(e,t);if(c===Hd){if(r.value===1/0)break;throw new Error(`${J} got unexpected break to lengthed map`)}if(c===Zc)throw new Error(`${J} found map but not enough entries (got ${a} [no key], expected ${r.value})`);if(!n&&typeof c!="string")throw new Error(`${J} non-string keys not supported (got ${typeof c})`);if(o&&(n&&i.has(c)||!n&&Object.hasOwn(s,c)))throw new Error(`${J} found repeat map key "${c}"`);let l=ea(e,t);if(l===Zc)throw new Error(`${J} found map but not enough entries (got ${a} [no value], expected ${r.value})`);n?i.set(c,l):s[c]=l}return n?i:s}function ea(r,e){if(r.done())return Zc;let t=r.next();if(y.equals(t.type,y.break))return Hd;if(t.type.terminal)return t.value;if(y.equals(t.type,y.array))return N_(t,r,e);if(y.equals(t.type,y.map))return O_(t,r,e);if(y.equals(t.type,y.tag)){if(e.tags&&typeof e.tags[t.value]=="function"){let n=ea(r,e);return e.tags[t.value](n)}throw new Error(`${J} tag not supported (${t.value})`)}throw new Error("unsupported")}function dg(r,e){if(!(r instanceof Uint8Array))throw new Error(`${J} data to decode must be a Uint8Array`);e=Object.assign({},D_,e);let t=Us(r),n=e.tokenizer||new Vd(t,e),o=ea(n,e);if(o===Zc)throw new Error(`${J} did not find any content to decode`);if(o===Hd)throw new Error(`${J} got unexpected break`);return[o,r.subarray(n.pos())]}function br(r,e){let[t,n]=dg(r,e);if(n.length>0)throw new Error(`${J} too many terminals, data makes no sense`);return t}var qd=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},ta=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Wd=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},Jc=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function zd(r){return r[Symbol.asyncIterator]!=null}function Cy(r,e){if(r.byteLength>e)throw new ta("Message length too long")}var Yd=r=>{let e=he(r),t=Ge(e);return Mt(r,t),Yd.bytes=e,t};Yd.bytes=0;function Qn(r,e){e=e??{};let t=e.lengthEncoder??Yd,n=e?.maxDataLength??4194304;function*o(s){Cy(s,n);let i=t(s.byteLength);i instanceof Uint8Array?yield i:yield*i,s instanceof Uint8Array?yield s:yield*s}return zd(r)?(async function*(){for await(let s of r)yield*o(s)})():(function*(){for(let s of r)yield*o(s)})()}Qn.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??Yd,n=e?.maxDataLength??4194304;return Cy(r,n),new X(t(r.byteLength),r)};var $s;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})($s||($s={}));var hg=r=>{let e=hr(r);return hg.bytes=he(e),e};hg.bytes=0;function Ks(r,e){let t=new X,n=$s.LENGTH,o=-1,s=e?.lengthDecoder??hg,i=e?.maxLengthLength??8,a=e?.maxDataLength??4194304;function*c(){for(;t.byteLength>0;){if(n===$s.LENGTH)try{if(o=s(t),o<0)throw new qd("Invalid message length");if(o>a)throw new ta("Message length too long");let l=s.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=$s.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>i)throw new Wd("Message length length too long");break}throw l}if(n===$s.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=$s.LENGTH}}}return zd(r)?(async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Jc("Unexpected end of input")})():(function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Jc("Unexpected end of input")})()}Ks.fromReader=(r,e)=>{let t=1,n=(async function*(){for(;;)try{let{done:s,value:i}=await r.next(t);if(s===!0)return;i!=null&&(yield i)}catch(s){if(s.code==="ERR_UNDER_READ")return{done:!0,value:null};throw s}finally{t=1}})();return Ks(n,{...e??{},onLength:s=>{t=s}})};function B_(r,e){if(typeof r=="string")return U_(r);if(typeof r=="number")return K_(r,e);throw Error(`Value provided to ms() must be a string or number. value=${JSON.stringify(r)}`)}var jd=B_;function U_(r){if(typeof r!="string"||r.length===0||r.length>100)throw Error(`Value provided to ms.parse() must be a string with length between 1 and 99. value=${JSON.stringify(r)}`);let e=/^(?<value>-?\d*\.?\d+) *(?<unit>milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|months?|mo|years?|yrs?|y)?$/i.exec(r);if(!e?.groups)return NaN;let{value:t,unit:n="ms"}=e.groups,o=parseFloat(t),s=n.toLowerCase();switch(s){case"years":case"year":case"yrs":case"yr":case"y":return o*315576e5;case"months":case"month":case"mo":return o*26298e5;case"weeks":case"week":case"w":return o*6048e5;case"days":case"day":case"d":return o*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return o*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return o*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return o*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return o;default:throw Error(`Unknown unit "${s}" provided to ms.parse(). value=${JSON.stringify(r)}`)}}function F_(r){let e=Math.abs(r);return e>=315576e5?`${Math.round(r/315576e5)}y`:e>=26298e5?`${Math.round(r/26298e5)}mo`:e>=6048e5?`${Math.round(r/6048e5)}w`:e>=864e5?`${Math.round(r/864e5)}d`:e>=36e5?`${Math.round(r/36e5)}h`:e>=6e4?`${Math.round(r/6e4)}m`:e>=1e3?`${Math.round(r/1e3)}s`:`${r}ms`}function $_(r){let e=Math.abs(r);return e>=315576e5?Vs(r,e,315576e5,"year"):e>=26298e5?Vs(r,e,26298e5,"month"):e>=6048e5?Vs(r,e,6048e5,"week"):e>=864e5?Vs(r,e,864e5,"day"):e>=36e5?Vs(r,e,36e5,"hour"):e>=6e4?Vs(r,e,6e4,"minute"):e>=1e3?Vs(r,e,1e3,"second"):`${r} ms`}function K_(r,e){if(typeof r!="number"||!Number.isFinite(r))throw Error("Value provided to ms.format() must be of type number.");return e?.long?$_(r):F_(r)}function Vs(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function pg(r){t.debug=t,t.default=t,t.coerce=c,t.disable=s,t.enable=o,t.enabled=i,t.humanize=jd,t.destroy=l,Object.keys(r).forEach(d=>{t[d]=r[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let u=0;for(let f=0;f<d.length;f++)u=(u<<5)-u+d.charCodeAt(f),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=e;function t(d,u){let f,h=null,p,g;function m(...w){if(!m.enabled)return;let T=m,I=Number(new Date),D=I-(f||I);T.diff=D,T.prev=f,T.curr=I,f=I,w[0]=t.coerce(w[0]),typeof w[0]!="string"&&w.unshift("%O");let F=0;w[0]=w[0].replace(/%([a-zA-Z%])/g,(z,S)=>{if(z==="%%")return"%";F++;let x=t.formatters[S];if(typeof x=="function"){let L=w[F];z=x.call(T,L),w.splice(F,1),F--}return z}),t.formatArgs.call(T,w),u?.onLog!=null&&u.onLog(...w),(T.log||t.log).apply(T,w)}return m.namespace=d,m.useColors=t.useColors(),m.color=t.selectColor(d),m.extend=n,m.destroy=t.destroy,Object.defineProperty(m,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(p!==t.namespaces&&(p=t.namespaces,g=t.enabled(d)),g),set:w=>{h=w}}),typeof t.init=="function"&&t.init(m),m}function n(d,u){let f=t(this.namespace+(typeof u>"u"?":":u)+d);return f.log=this.log,f}function o(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let u,f=(typeof d=="string"?d:"").split(/[\s,]+/),h=f.length;for(u=0;u<h;u++)f[u]&&(d=f[u].replace(/\*/g,".*?"),d[0]==="-"?t.skips.push(new RegExp("^"+d.substr(1)+"$")):t.names.push(new RegExp("^"+d+"$")))}function s(){let d=[...t.names.map(a),...t.skips.map(a).map(u=>"-"+u)].join(",");return t.enable(""),d}function i(d){if(d[d.length-1]==="*")return!0;let u,f;for(u=0,f=t.skips.length;u<f;u++)if(t.skips[u].test(d))return!1;for(u=0,f=t.names.length;u<f;u++)if(t.names[u].test(d))return!0;return!1}function a(d){return d.toString().substring(2,d.toString().length-2).replace(/\.\*\?$/,"*")}function c(d){return d instanceof Error?d.stack??d.message:d}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 Xd=Y_(),V_=["#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 H_(){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 q_(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+jd(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 W_=console.debug??console.log??(()=>{});function z_(r){try{r?Xd?.setItem("debug",r):Xd?.removeItem("debug")}catch{}}function G_(){let r;try{r=Xd?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function Y_(){try{return localStorage}catch{}}function j_(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var Py=pg({formatArgs:q_,save:z_,load:G_,useColors:H_,setupFormatters:j_,colors:V_,storage:Xd,log:W_});var rr=Py;rr.formatters.b=r=>r==null?"undefined":De.baseEncode(r);rr.formatters.t=r=>r==null?"undefined":ut.baseEncode(r);rr.formatters.m=r=>r==null?"undefined":rt.baseEncode(r);rr.formatters.p=r=>r==null?"undefined":r.toString();rr.formatters.c=r=>r==null?"undefined":r.toString();rr.formatters.k=r=>r==null?"undefined":r.toString();rr.formatters.a=r=>r==null?"undefined":r.toString();function Ry(r,e=""){let t=Ly(r.message),n=Ly(r.stack);return t!=null&&n!=null?n.includes(t)?`${n.split(`
4
4
  `).join(`
5
5
  ${e}`)}`:`${t}
6
6
  ${e}${n.split(`
7
7
  `).join(`
8
8
  ${e}`)}`:n!=null?`${n.split(`
9
9
  `).join(`
10
- ${e}`)}`:t!=null?`${t}`:`${r.toString()}`}function QC(r){return r instanceof AggregateError||r?.name==="AggregateError"&&Array.isArray(r.errors)}function Dy(r,e=""){if(QC(r)){let t=Ry(r,e);return r.errors.length>0?(e=`${e} `,t+=`
10
+ ${e}`)}`:t!=null?`${t}`:`${r.toString()}`}function X_(r){return r instanceof AggregateError||r?.name==="AggregateError"&&Array.isArray(r.errors)}function Dy(r,e=""){if(X_(r)){let t=Ry(r,e);return r.errors.length>0?(e=`${e} `,t+=`
11
11
  ${e}${r.errors.map(n=>`${Dy(n,`${e}`)}`).join(`
12
12
  ${e}`)}`):t+=`
13
- ${e}[Error list was empty]`,t.trim()}return Ry(r,e)}rr.formatters.e=r=>r==null?"undefined":Dy(r);function XC(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 ra(r){return{forComponent(e){return Pr(e,r)}}}function Pr(r,e){let t=XC(`${r}:trace`);return rr.enabled(`${r}:trace`)&&rr.names.map(n=>n.toString()).find(n=>n.includes(":trace"))!=null&&(t=rr(`${r}:trace`,e)),Object.assign(rr(r,e),{error:rr(`${r}:error`,e),trace:t,newScope:n=>Pr(`${r}:${n}`,e)})}function Ly(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}var Ny=Symbol.for("sindresorhus/unlimited-timeout#brand");function Oy(r,e,...t){if(typeof r!="function")throw new TypeError("Expected callback to be a function");e??=0,e=Number(e);let n=!1,o={[Ny]:!0,id:void 0,cleared:!1,ref(){return n=!1,o.id?.ref?.(),o},unref(){return n=!0,o.id?.unref?.(),o}};if(e===Number.POSITIVE_INFINITY||e>Number.MAX_SAFE_INTEGER)return o;(!Number.isFinite(e)||e<0)&&(e=0);let s=performance.now()+e,i=a=>{o.cleared||(a<=2147483647?(o.id=globalThis.setTimeout(()=>{o.cleared||r(...t)},a),n&&o.id?.unref?.()):(o.id=globalThis.setTimeout(()=>{let c=performance.now(),l=Math.max(0,s-c);i(l)},2147483647),n&&o.id?.unref?.()))};return i(e),o}function My(r){!r||typeof r!="object"||!r[Ny]||(r.cleared=!0,r.id!==void 0&&(globalThis.clearTimeout(r.id),r.id=void 0))}var ZC=new WeakMap;function JC({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(o.reason);let s,i,a,c=r??clearTimeout,l=()=>{c(s),a(o.reason)},d=()=>{o&&o.removeEventListener("abort",l)},u=new Promise((f,h)=>{i=()=>{d(),f(n)},a=h,s=(e??setTimeout)(i,t)});return o&&o.addEventListener("abort",l,{once:!0}),ZC.set(u,()=>{c(s),s=null,i()}),u}}var e_=JC({setTimeout:Oy,clearTimeout:My}),By=e_;var It=class extends St{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};var Xd=class extends St{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};var na=class{memoryStorage;points;duration;blockDuration;keyPrefix;constructor(e={}){this.points=e.points??4,this.duration=e.duration??1,this.blockDuration=e.blockDuration??0,this.keyPrefix=e.keyPrefix??"rlflx",this.memoryStorage=new mg}consume(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,t,s);if(i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i.consumedPoints>this.points)throw this.blockDuration>0&&i.consumedPoints<=this.points+t&&(i=this.memoryStorage.set(o,i.consumedPoints,this.blockDuration)),new pd("Rate limit exceeded",i);return i}penalty(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,t,s);return i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i}reward(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,-t,s);return i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i}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)}},mg=class{storage;constructor(){this.storage=new Map}incrby(e,t,n){let o=this.storage.get(e);if(o!=null){let s=o.expiresAt!=null?o.expiresAt.getTime()-new Date().getTime():-1;return o.expiresAt==null||s>0?(o.value+=t,{remainingPoints:0,msBeforeNext:s,consumedPoints:o.value,isFirstInDuration:!1}):this.set(e,t,n)}return this.set(e,t,n)}set(e,t,n){let o=n*1e3,s=this.storage.get(e);s!=null&&clearTimeout(s.timeoutId);let i={value:t,expiresAt:o>0?new Date(Date.now()+o):void 0};return this.storage.set(e,i),o>0&&(i.timeoutId=setTimeout(()=>{this.storage.delete(e)},o),i.timeoutId.unref!=null&&i.timeoutId.unref()),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:i.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}};function oa(r,e,t){let n,o,s=!1;function i(){let l={signal:o.signal};if(t?.timeout!=null){let d=le([o.signal,AbortSignal.timeout(t.timeout)]);l.signal=d}s=!0,Promise.resolve().then(async()=>{await r(l)}).catch(()=>{}).finally(()=>{s=!1,!o.signal.aborted&&(n=setTimeout(i,e))})}let a=zn(i,t?.debounce??100),c=!1;return{setInterval:l=>{e!==l&&(e=l,n!=null&&(clearTimeout(n),n=setTimeout(i,e)))},setTimeout:l=>{t??={},t.timeout=l},run:()=>{s||(clearTimeout(n),a())},start:()=>{c||(c=!0,o=new AbortController,o.signal,t?.runImmediately===!0?queueMicrotask(()=>{i()}):n=setTimeout(i,e))},stop:()=>{clearTimeout(n),o?.abort(),c=!1}}}var gg=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 ot(r){let{name:e,metrics:t}=r,n;return t!=null?n=new gg({name:e,metrics:t}):n=new Map,n}var Zn="/",Uy=new TextEncoder().encode(Zn),Zd=Uy[0],Fe=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=_(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]!==Zd)throw new Error("Invalid key")}toString(e="utf8"){return R(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=Uy),this._buf[0]!==Zd){let e=new Uint8Array(this._buf.byteLength+1);e.fill(Zd,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===Zd;)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 s=t[o],i=n[o];if(s<i)return!0;if(s>i)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 t_(this.baseNamespace())}name(){return r_(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(),...n_(e.map(t=>t.namespaces()))])}};function t_(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function r_(r){let e=r.split(":");return e[e.length-1]}function n_(r){return[].concat(...r)}function o_(r){return r[Symbol.asyncIterator]!=null}function s_(r){if(o_(r))return(async()=>{let n=new Uint8Array(0);for await(let o of r)n=Oe([n,o],n.length+o.length);return n})();let e=[],t=0;for(let n of r)e.push(n),t+=n.byteLength;return Oe(e,t)}var Jd=s_;function ef({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*i_(r,e){if(e!=null&&typeof e=="object")if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t],s=G.asCID(n);s!=null?yield[o.join("/"),s]:typeof n=="object"&&(yield*yg(n,o))}else{let t=G.asCID(e);t!=null?yield[r.join("/"),t]:yield*yg(e,r)}}function*yg(r,e){if(r==null||r instanceof Uint8Array)return;let t=G.asCID(r);t!=null&&(yield[e.join("/"),t]);for(let[n,o]of Object.entries(r)){let s=[...e,n];yield*i_(s,o)}}function*a_(r,e){if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t];yield o.join("/"),typeof n=="object"&&G.asCID(n)==null&&(yield*wg(n,o))}else yield*wg(e,r)}function*wg(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"&&G.asCID(n)==null&&(yield*a_(o,n))}}function c_(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(i=>`[${JSON.stringify(i)}]`).join("")}`);let s=G.asCID(t);if(s!=null)return{value:s,remaining:e.slice(n+1).join("/")}}return{value:t}}var bg=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:ef(),bytes:ef(),value:ef(),asBlock:ef()})}links(){return yg(this.value,[])}tree(){return wg(this.value,[])}get(e="/"){return c_(this.value,e.split("/").filter(Boolean))}};function Fy({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 bg({cid:e,bytes:r,value:o})}var tf=class extends Error{static name="AlreadyPinnedError";name="AlreadyPinnedError"},el=class extends Error{static name="BlockPinnedError";name="BlockPinnedError"},rf=class extends Error{static name="InvalidDatastoreVersionError";name="InvalidDatastoreVersionError"},Hs=class extends Error{static name="InvalidConfigurationError";name="InvalidConfigurationError"},nf=class extends AggregateError{static name="GetFailedError";name="GetFailedError"},of=class extends AggregateError{static name="LoadBlockFailedError";name="LoadBlockFailedError"},tl=class extends Error{static name="BlockNotFoundWhileOfflineError";name="BlockNotFoundWhileOfflineError"};var Vy="/pin/",$y="/pinned-block/",Eg=Ar,Ky=1;function sf(r){return r.version===0&&(r=r.toV1()),new Fe(`${Vy}${r.toString(Eg)}`)}var af=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=sf(e);if(await this.datastore.has(n))throw new tf("Already pinned");let o=Math.round(t.depth??1/0);if(o<0)throw new A("Depth must be greater than or equal to 0");let s=new St({concurrency:Ky});for await(let a of this.#e(e,s,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>ee(l,e.bytes))!=null?!1:(c.pinCount++,c.pinnedBy.push(e.bytes),!0),t),yield a;let i={depth:o,metadata:t.metadata??{}};await this.datastore.put(n,Ko(i),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=await this.getCodec(e.code),s=await Jd(this.blockstore.get(e,n)),i=Fy({bytes:s,cid:e,codec:o});yield e;for(let[,a]of i.links())yield*await t.add(async()=>this.#e(a,t,{...n,depth:n.depth-1}))}async#t(e,t,n){let o=new Fe(`${$y}${Eg.encode(e.multihash.bytes)}`),s={pinCount:0,pinnedBy:[]};try{s=br(await this.datastore.get(o,n))}catch(a){if(a.name!=="NotFoundError")throw a}if(t(s)){if(s.pinCount===0&&await this.datastore.has(o)){await this.datastore.delete(o);return}await this.datastore.put(o,Ko(s),n),n.onProgress?.(new H("helia:pin:add",e))}}async*rm(e,t={}){let n=sf(e),o=await this.datastore.get(n,t),s=br(o);await this.datastore.delete(n,t);let i=new St({concurrency:Ky});for await(let a of this.#e(e,i,{...t,depth:s.depth}))await this.#t(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>ee(l,e.bytes)),!0),{...t,depth:s.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:Vy+(e.cid!=null?`${e.cid.toString(Ar)}`:"")},e)){let o=G.parse(t.toString().substring(5),Ar),s=br(n);yield{cid:o,...s}}}async isPinned(e,t={}){let n=new Fe(`${$y}${Eg.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=sf(e),o=await this.datastore.get(n,t);return br(o)}async setMetadata(e,t,n){let o=sf(e),s=await this.datastore.get(o,n),i=br(s);i.metadata=t??{},await this.datastore.put(o,Ko(i),n)}};var xg=1,vg=5,Sg=100;var rl=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},Vo=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}},nl=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},ol=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}},Ag=class extends Error{static name="InvalidCodecError";constructor(e="Invalid codec"){super(e),this.name="InvalidCodecError"}};var l_=5,cf=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??l_,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 at(...this.routers)}async stop(){await lt(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new Vo("No content routers available");let n=new It({concurrency:this.providerLookupConcurrency}),o=0,s=[],i=this,a=0;this.log("findProviders for %c start using routers %s",e,this.routers.map(l=>l.toString()).join(", "));let c=qs(this.routers,"findProviders").map(async function*(l){let d=0;try{for await(let u of l.findProviders(e,t))d++,yield u}catch(u){s.push(u)}finally{i.log("router %s found %d providers for %c",l,d,e),a++,a===c.length&&n.size===0&&n.emitIdle()}});for await(let l of jt(n.toGenerator(),...c))if(l!=null){if(l.multiaddrs.length===0){if(n.find(l.id)!=null)continue;n.add(async()=>{try{let d=await this.findPeer(l.id,t);return d.multiaddrs.length===0?null:{...d,protocols:l.protocols,routing:l.routing}}catch(d){return this.log.error("could not load multiaddrs for peer %p - %e",l.id,d),null}},{peerId:l.id,signal:t.signal}).catch(d=>{this.log.error("could not load multiaddrs for peer %p - %e",l.id,d)});continue}o++,yield l}this.log("findProviders finished, found %d providers for %c",o,e)}async provide(e,t={}){if(this.routers.length===0)throw new Vo("No content routers available");await Promise.all(qs(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){await Promise.all(qs(this.routers,"cancelReprovide").map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){await Promise.all(qs(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){let n=[],o;try{o=await Promise.any(qs(this.routers,"get").map(async s=>{try{return await s.get(e,t)}catch(i){this.log("router %s failed with %e",s,i),n.push(i)}}))}catch{}if(o==null)throw new nf(n,`Failed to get value key ${R(e,"base58btc")}`);return o}async findPeer(e,t){if(this.routers.length===0)throw new Vo("No peer routers available");let n=this,o=jt(...qs(this.routers,"findPeer").map(s=>(async function*(){try{yield await s.findPeer(e,t)}catch(i){n.log.error(i)}})()));for await(let s of o)if(s!=null)return s;throw new Le("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Vo("No peer routers available");for await(let n of jt(...qs(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function qs(r,e){return r.filter(t=>t[e]!=null)}var Er=class extends Error{static name="AbortError";name="AbortError";constructor(e="The operation was aborted",...t){super(e,...t)}};async function Qt(r,e,t,n){let o=new Er(n?.errorMessage);n?.errorCode!=null&&(o.code=n.errorCode);let s=n?.errorEvent??"error";return t?.aborted===!0?Promise.reject(o):new Promise((i,a)=>{function c(){Tg(t,"abort",u),Tg(r,e,l),Tg(r,s,d)}let l=f=>{try{if(n?.filter?.(f)===!1)return}catch(h){c(),a(h);return}c(),i(f)},d=f=>{if(c(),f instanceof Error){a(f);return}a(f.detail??n?.error??new Error(`The "${n?.errorEvent}" event was emitted but the event had no '.detail' field. Pass an 'error' option to race-event to change this message.`))},u=()=>{c(),a(o)};Ig(t,"abort",u),Ig(r,e,l),Ig(r,s,d)})}function Ig(r,e,t){r!=null&&(Hy(r)?r.addEventListener(e,t):r.addListener(e,t))}function Tg(r,e,t){r!=null&&(Hy(r)?r.removeEventListener(e,t):r.removeListener(e,t))}function Hy(r){return typeof r.addEventListener=="function"&&typeof r.removeEventListener=="function"}var lf=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var uf=class{deferred;signal;constructor(e){this.signal=e,this.deferred=Promise.withResolvers(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new Er)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function u_(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var df=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=u_(),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 Er),this.cleanup())}async join(e={}){let t=new uf(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 Pe(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)})}};function Cg(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 sl=class extends ie{concurrency;maxSize;queue;pending;sort;autoStart;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,this.autoStart=e.autoStart??!0,this.sort=e.sort,this.queue=[],this.emitEmpty=Cg(this.emitEmpty.bind(this),1),this.emitIdle=Cg(this.emitIdle.bind(this),1)}[Symbol.asyncIterator](){return this.toGenerator()}emitEmpty(){this.size===0&&this.safeDispatchEvent("empty")}emitIdle(){this.running===0&&this.safeDispatchEvent("idle")}tryToStartAnother(){if(this.size===0)return this.emitEmpty(),this.running===0&&this.emitIdle(),!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.safeDispatchEvent("next"),this.autoStart&&this.tryToStartAnother()}),!0)}return!1}enqueue(e){this.queue.push(e),this.sort!=null&&this.queue.sort(this.sort)}start(){this.autoStart===!1&&(this.autoStart=!0,this.tryToStartAnother())}pause(){this.autoStart=!1}async add(e,t){if(t?.signal?.throwIfAborted(),this.size===this.maxSize)throw new lf;let n=new df(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.autoStart&&this.tryToStartAnother(),n.join(t).then(o=>(this.safeDispatchEvent("success",{detail:{job:n,result:o}}),o)).catch(o=>{if(n.status==="queued"){for(let s=0;s<this.queue.length;s++)if(this.queue[s]===n){this.queue.splice(s,1);break}}throw 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 Er)}),this.clear()}async onEmpty(e){this.size!==0&&await Qt(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await Qt(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await Qt(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=vt({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail.result)},s=c=>{n(c.detail.error)},i=()=>{n()},a=()=>{n(new Er("Queue aborted"))};this.addEventListener("success",o),this.addEventListener("failure",s),this.addEventListener("idle",i),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("success",o),this.removeEventListener("failure",s),this.removeEventListener("idle",i),e?.signal?.removeEventListener("abort",a),n()}}};var ff="lock:worker:request-read",hf="lock:worker:abort-read-request",pf="lock:worker:release-read",mf="lock:master:grant-read",gf="lock:master:error-read",yf="lock:worker:request-write",wf="lock:worker:abort-write-request",bf="lock:worker:release-write",Ef="lock:master:grant-write",xf="lock:master:error-write",vf="lock:worker:finalize",Sf="mortice",qy={singleProcess:!1};var _g=(r,e,t,n,o,s,i,a,c)=>l=>{if(l.data==null)return;let d={type:l.data.type,name:l.data.name,identifier:l.data.identifier};d.type===o&&r.safeDispatchEvent(t,{detail:{name:d.name,identifier:d.identifier,handler:async()=>{e.postMessage({type:c,name:d.name,identifier:d.identifier}),await new Promise(u=>{let f=h=>{if(h?.data==null)return;let p={type:h.data.type,name:h.data.name,identifier:h.data.identifier};p.type===a&&p.identifier===d.identifier&&(e.removeEventListener("message",f),u())};e.addEventListener("message",f)})},onError:u=>{e.postMessage({type:i,name:d.name,identifier:d.identifier,error:{message:u.message,name:u.name,stack:u.stack}})}}}),d.type===s&&r.safeDispatchEvent(n,{detail:{name:d.name,identifier:d.identifier}}),d.type===vf&&r.safeDispatchEvent("finalizeRequest",{detail:{name:d.name}})};var zy=(r=10)=>Math.random().toString().substring(2,r+2);var Af=class{name;channel;constructor(e){this.name=e,this.channel=new BroadcastChannel(Sf)}readLock(e){return this.sendRequest(ff,hf,mf,gf,pf,e)}writeLock(e){return this.sendRequest(yf,wf,Ef,xf,bf,e)}finalize(){this.channel.postMessage({type:vf,name:this.name}),this.channel.close()}async sendRequest(e,t,n,o,s,i){i?.signal?.throwIfAborted();let a=zy();return this.channel.postMessage({type:e,identifier:a,name:this.name}),new Promise((c,l)=>{let d=()=>{this.channel.postMessage({type:t,identifier:a,name:this.name})};i?.signal?.addEventListener("abort",d,{once:!0});let u=f=>{if(f.data?.identifier===a&&(f.data?.type===n&&(this.channel.removeEventListener("message",u),i?.signal?.removeEventListener("abort",d),c(()=>{this.channel.postMessage({type:s,identifier:a,name:this.name})})),f.data.type===o)){this.channel.removeEventListener("message",u),i?.signal?.removeEventListener("abort",d);let h=new Error;f.data.error!=null&&(h.message=f.data.error.message,h.name=f.data.error.name,h.stack=f.data.error.stack),l(h)}};this.channel.addEventListener("message",u)})}};var Wy=r=>{if(r=Object.assign({},qy,r),!!globalThis.document||r.singleProcess){let t=new BroadcastChannel(Sf),n=new ie;return t.addEventListener("message",_g(n,t,"requestReadLock","abortReadLockRequest",ff,hf,gf,pf,mf)),t.addEventListener("message",_g(n,t,"requestWriteLock","abortWriteLockRequest",yf,wf,xf,bf,Ef)),n}return new Af(r.name)};var zs=new Map,il;function Gy(r){return typeof r?.readLock=="function"&&typeof r?.writeLock=="function"}function d_(r){if(il==null&&(il=Wy(r),!Gy(il))){let e=il;e.addEventListener("requestReadLock",t=>{let n=t.detail.name,o=t.detail.identifier,s=zs.get(n);if(s==null)return;let i=new AbortController,a=c=>{c.detail.name!==n||c.detail.identifier!==o||i.abort()};e.addEventListener("abortReadLockRequest",a),s.readLock({signal:i.signal}).then(async c=>{await t.detail.handler().finally(()=>{c()})}).catch(c=>{t.detail.onError(c)}).finally(()=>{e.removeEventListener("abortReadLockRequest",a)})}),e.addEventListener("requestWriteLock",t=>{let n=t.detail.name,o=t.detail.identifier,s=zs.get(n);if(s==null)return;let i=new AbortController,a=c=>{c.detail.name!==n||c.detail.identifier!==o||i.abort()};e.addEventListener("abortWriteLockRequest",a),s.writeLock({signal:i.signal}).then(async c=>{await t.detail.handler().finally(()=>{c()})}).catch(c=>{t.detail.onError(c)}).finally(()=>{e.removeEventListener("abortWriteLockRequest",a)})}),e.addEventListener("finalizeRequest",t=>{let n=t.detail.name,o=zs.get(n);o?.finalize()})}return il}async function kg(r,e){let t,n,o=new Promise((i,a)=>{t=i,n=a}),s=()=>{n(new Er)};return e?.signal?.addEventListener("abort",s,{once:!0}),r.add(async()=>{await new Promise(i=>{t(()=>{e?.signal?.removeEventListener("abort",s),i()})})},{signal:e?.signal}).catch(i=>{n(i)}),o}var Yy=(r,e)=>{let t=zs.get(r);if(t!=null)return t;let n=d_(e);if(Gy(n))return t=n,zs.set(r,t),t;let o=new sl({concurrency:1}),s;return t={async readLock(i){if(s!=null)return kg(s,i);s=new sl({concurrency:e.concurrency,autoStart:!1});let a=s,c=kg(s,i);return o.add(async()=>{a.start(),await a.onIdle().then(()=>{s===a&&(s=null)})}),c},async writeLock(i){return s=null,kg(o,i)},finalize:()=>{zs.delete(r)},queue:o},zs.set(r,t),e.autoFinalize===!0&&o.addEventListener("idle",()=>{t.finalize()},{once:!0}),t};var f_={name:"lock",concurrency:1/0,singleProcess:!1,autoFinalize:!1};function al(r){let e=Object.assign({},f_,r);return Yy(e.name,e)}var If=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=al({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await at(this.child),this.started=!0}async stop(){await lt(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{yield*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 el("Block was pinned - please unpin and try again");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 s of e){if(await o.pins.isPinned(s))throw new el("Block was pinned - please unpin and try again");yield s}})(),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 Pg=new Fe("/version"),jy=1;async function Qy(r){if(!await r.has(Pg)){await r.put(Pg,_(`${jy}`));return}let e=await r.get(Pg),t=R(e);if(parseInt(t,10)!==jy)throw new rf("Invalid datastore version, a datastore migration may be required")}var Dg={};Je(Dg,{code:()=>Lg,decode:()=>v_,decodeOptions:()=>b_,encode:()=>x_,encodeOptions:()=>y_,name:()=>E_,toByteView:()=>Zy});var Xy=42;function Zy(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function h_(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=G.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new N(y.tag,Xy),new N(y.bytes,t)]}function p_(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function m_(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}function g_(r){for(let e of r.keys())if(typeof e!="string"||e.length===0)throw new Error("Non-string Map keys are not supported by the IPLD Data Model and cannot be encoded");return null}var Rg={float64:!0,typeEncoders:{Map:g_,Object:h_,undefined:p_,number:m_}},y_={...Rg,typeEncoders:{...Rg.typeEncoders}};function w_(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return G.decode(r.subarray(1))}var Tf={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Tf.tags[Xy]=w_;var b_={...Tf,tags:Tf.tags.slice()},E_="dag-cbor",Lg=113,x_=r=>Ko(r,Rg),v_=r=>br(Zy(r),Tf);var $g={};Je($g,{code:()=>Fg,decode:()=>e9,encode:()=>Jy,format:()=>D_,name:()=>L_,parse:()=>O_,stringify:()=>D_});var Ng=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(y.equals(t.type,y.array)&&(t.elements++,t.elements!==1&&e.push([44])),y.equals(t.type,y.map)&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[y.uint.major](e,t){this.prefix(e);let n=String(t.value),o=[];for(let s=0;s<n.length;s++)o[s]=n.charCodeAt(s);e.push(o)}[y.negint.major](e,t){this[y.uint.major](e,t)}[y.bytes.major](e,t){throw new Error(`${bn} unsupported type: Uint8Array`)}[y.string.major](e,t){this.prefix(e);let n=ji(JSON.stringify(t.value));e.push(n.length>32?Us(n):n)}[y.array.major](e,t){this.prefix(e),this.inRecursive.push({type:y.array,elements:0}),e.push([91])}[y.map.major](e,t){this.prefix(e),this.inRecursive.push({type:y.map,elements:0}),e.push([123])}[y.tag.major](e,t){}[y.float.major](e,t){if(t.type.name==="break"){let i=this.inRecursive.pop();if(i){if(y.equals(i.type,y.array))e.push([93]);else if(y.equals(i.type,y.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(`${bn} 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=[],s=!1;for(let i=0;i<n.length;i++)o[i]=n.charCodeAt(i),!s&&(o[i]===46||o[i]===101||o[i]===69)&&(s=!0);s||(o.push(46),o.push(48)),e.push(o)}};function S_(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${bn} complex map keys are not supported`);let t=r[0],n=e[0];if(t.type!==y.string||n.type!==y.string)throw new Error(`${bn} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${bn} unexpected duplicate map keys, this is not supported`)}var A_={addBreakTokens:!0,mapSorter:S_};function Og(r,e){return e=Object.assign({},A_,e),Kd(r,new Ng,e)}var sa=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 N(y.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 s=String.fromCharCode.apply(null,this.data.subarray(e,this._pos)),i=parseFloat(s);return n?new N(y.float,i,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(i)?new N(i>=0?y.uint:y.negint,i,this._pos-e):new N(i>=0?y.uint:y.negint,BigInt(s),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 s=this._pos,i=0;s<this.data.length&&i<65536;s++,i++){let a=this.data[s];if(a===92||a<32||a>=128)break;if(a===34){let c=String.fromCharCode.apply(null,this.data.subarray(this._pos,s));return this._pos=s+1,new N(y.string,c,i)}}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 s=0;for(let i=0;i<4;i++){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}`);s=s*16+a,this._pos++}return s},o=()=>{let s=this.ch(),i=null,a=s>239?4:s>223?3:s>191?2:1;if(this._pos+a>this.data.length)throw new Error(`${J} unexpected unicode sequence at position ${this._pos}`);let c,l,d,u;switch(a){case 1:s<128&&(i=s);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(u=(s&31)<<6|c&63,u>127&&(i=u));break;case 3:c=this.data[this._pos+1],l=this.data[this._pos+2],(c&192)===128&&(l&192)===128&&(u=(s&15)<<12|(c&63)<<6|l&63,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:c=this.data[this._pos+1],l=this.data[this._pos+2],d=this.data[this._pos+3],(c&192)===128&&(l&192)===128&&(d&192)===128&&(u=(s&15)<<18|(c&63)<<12|(l&63)<<6|d&63,u>65535&&u<1114112&&(i=u))}i===null?(i=65533,a=1):i>65535&&(i-=65536,t.push(i>>>10&1023|55296),i=56320|i&1023),t.push(i),this._pos+=a};for(;!this.done();){let s=this.ch(),i;switch(s){case 92:if(this._pos++,this.done())throw new Error(`${J} unexpected string termination at position ${this._pos}`);switch(i=this.ch(),this._pos++,i){case 34:case 39:case 92:case 47:t.push(i);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 N(y.string,_7(t),this._pos-e);default:if(s<32)throw new Error(`${J} invalid control character at position ${this._pos}`);s<128?(t.push(s),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 N(y.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new N(y.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new N(y.null,null,4);case 102:return this.expect([102,97,108,115,101]),new N(y.false,!1,5);case 116:return this.expect([116,114,117,101]),new N(y.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 N(y.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 N(y.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 N(y.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 N(y.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 Mg(r,e){return e=Object.assign({tokenizer:new sa(r,e)},e),br(r,e)}function T_(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function C_(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=G.asCID(r);if(!e)return null;let t=e.toString();return[new N(y.map,1/0,1),new N(y.string,"/",1),new N(y.string,t,t.length),new N(y.break,void 0,1)]}function Cf(r){let e=rt.encode(r).slice(1);return[new N(y.map,1/0,1),new N(y.string,"/",1),new N(y.map,1/0,1),new N(y.string,"bytes",5),new N(y.string,e,e.length),new N(y.break,void 0,1),new N(y.break,void 0,1)]}function Xr(r){return Cf(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function __(r){return Cf(new Uint8Array(r))}function k_(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function P_(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 R_={typeEncoders:{Object:C_,Buffer:Cf,Uint8Array:Cf,Int8Array:Xr,Uint16Array:Xr,Int16Array:Xr,Uint32Array:Xr,Int32Array:Xr,Float32Array:Xr,Float64Array:Xr,Uint8ClampedArray:Xr,BigInt64Array:Xr,BigUint64Array:Xr,DataView:Xr,ArrayBuffer:__,undefined:k_,number:P_}},Bg=class extends sa{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(y.equals(e.type,y.map)){let t=this._next();if(y.equals(t.type,y.string)&&t.value==="/"){let n=this._next();if(y.equals(n.type,y.string)){let o=this._next();if(!y.equals(o.type,y.break))throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new N(y.tag,42,0)}if(y.equals(n.type,y.map)){let o=this._next();if(y.equals(o.type,y.string)&&o.value==="bytes"){let s=this._next();if(y.equals(s.type,y.string)){for(let a=0;a<2;a++){let c=this._next();if(!y.equals(c.type,y.break))throw new Error("Invalid encoded Bytes form")}let i=rt.decode(`m${s.value}`);return new N(y.bytes,i,s.value.length)}this.tokenBuffer.push(s)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},Ug={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Ug.tags[42]=G.parse;var L_="dag-json",Fg=297,Jy=r=>Og(r,R_),e9=r=>{let e=T_(r),t=Object.assign(Ug,{tokenizer:new Bg(e,Ug)});return Mg(e,t)},D_=r=>N_.decode(Jy(r));var N_=new TextDecoder,O_=r=>e9(M_.encode(r)),M_=new TextEncoder;var Wg={};Je(Wg,{code:()=>zg,createLink:()=>u9,createNode:()=>l9,decode:()=>j_,encode:()=>Y_,name:()=>G_,prepare:()=>Hg,validate:()=>qg});var B_=new TextDecoder;function Kg(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 _f(r,e){let t;[t,e]=Kg(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 t9(r,e){let t;return[t,e]=Kg(r,e),[t&7,t>>3,e]}function U_(r){let e={},t=r.length,n=0;for(;n<t;){let o,s;if([o,s,n]=t9(r,n),s===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]=_f(r,n)}else if(s===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 i;[i,n]=_f(r,n),e.Name=B_.decode(i)}else if(s===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]=Kg(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${s}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function r9(r){let e=r.length,t=0,n,o=!1,s;for(;t<e;){let a,c;if([a,c,t]=t9(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(s)throw new Error("protobuf: (PBNode) duplicate Data section");[s,t]=_f(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]=_f(r,t),n.push(U_(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 i={};return s&&(i.Data=s),i.Links=n||[],i}var o9=new TextEncoder,n9=2**32,F_=2**31;function $_(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=cl(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=o9.encode(r.Name);t-=n.length,e.set(n,t),t=cl(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=cl(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function s9(r){let e=V_(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=cl(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let o=r.Links.length-1;o>=0;o--){let s=$_(r.Links[o],t.subarray(0,n));n-=s,n=cl(t,n,s)-1,t[n]=18}return t}function K_(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+ia(t)}if(typeof r.Name=="string"){let t=o9.encode(r.Name).length;e+=1+t+ia(t)}return typeof r.Tsize=="number"&&(e+=1+ia(r.Tsize)),e}function V_(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+ia(t)}if(r.Links)for(let t of r.Links){let n=K_(t);e+=1+n+ia(n)}return e}function cl(r,e,t){e-=ia(t);let n=e;for(;t>=F_;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function ia(r){return r%2===0&&r++,Math.floor((H_(r)+6)/7)}function H_(r){let e=0;return r>=n9&&(r=Math.floor(r/n9),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+q_[r]}var q_=[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 z_=["Data","Links"],W_=["Hash","Name","Tsize"],Vg=new TextEncoder;function a9(r,e){if(r===e)return 0;let t=r.Name?Vg.encode(r.Name):[],n=e.Name?Vg.encode(e.Name):[],o=t.length,s=n.length;for(let i=0,a=Math.min(o,s);i<a;++i)if(t[i]!==n[i]){o=t[i],s=n[i];break}return o<s?-1:s<o?1:0}function i9(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function c9(r){if(typeof r.asCID=="object"){let t=G.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=G.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=G.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=G.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 Hg(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=Vg.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(c9),e.Links.sort(a9);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function qg(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!i9(r,z_))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(!i9(t,W_))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&&a9(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function l9(r,e=[]){return Hg({Data:r,Links:e})}function u9(r,e,t){return c9({Hash:t,Name:r,Tsize:e})}function d9(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var G_="dag-pb",zg=112;function Y_(r){qg(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),s9(e)}function j_(r){let e=d9(r),t=r9(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let s={};try{s.Hash=G.decode(o.Hash)}catch{}if(!s.Hash)throw new Error("Invalid Hash field found in link, expected CID");return o.Name!==void 0&&(s.Name=o.Name),o.Tsize!==void 0&&(s.Tsize=o.Tsize),s})),n}function aa(r){return r?.then!=null}function f9(r=[],e){let t={[zg]:Wg,[Mn]:fs,[Lg]:Dg,[Fg]:$g,[l2]:Nu};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let s=e(n);aa(s)?o=await s:o=s,t[o.code]=o}if(o!=null)return o;throw new ol(`Could not load codec for ${n}`)}}function h9(r=[],e){let t={[We.code]:We,[Mu.code]:Mu,[dt.code]:dt};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let s=e(n);aa(s)?o=await s:o=s,t[o.code]=o}if(o!=null)return o;throw new nl(`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 Rr=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,bytes:o}of e)await this.put(n,o,t),yield n}get(e,t){throw new Error(".get is not implemented")}async*getMany(e,t){for await(let n of e)yield{cid:n,bytes: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 kf=0,ca=class extends Error{static name="IdentityHashDigestTooLongError";name="IdentityHashDigestTooLongError"},Pf=class extends Jn{child;maxDigestLength;constructor(e,t){super(),this.child=e,this.maxDigestLength=t?.maxDigestLength}put(e,t,n){if(e.multihash.code===kf){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new ca(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);return n?.signal?.throwIfAborted(),e}return this.child==null?(n?.signal?.throwIfAborted(),e):this.child.put(e,t,n)}async*get(e,t){if(e.multihash.code===kf){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new ca(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);t?.signal?.throwIfAborted(),yield e.multihash.digest;return}if(this.child==null)throw t?.signal?.throwIfAborted(),new Rr;yield*this.child.get(e,t)}has(e,t){if(e.multihash.code===kf){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new ca(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);return t?.signal?.throwIfAborted(),!0}return this.child==null?(t?.signal?.throwIfAborted(),!1):this.child.has(e,t)}delete(e,t){if(e.code===kf){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new ca(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);t?.signal?.throwIfAborted();return}if(this.child!=null)return this.child.delete(e,t)}async*getAll(e){this.child!=null&&(yield*this.child.getAll(e)),e?.signal?.throwIfAborted()}};function Q_(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 la=Q_;function X_(r){return r[Symbol.asyncIterator]!=null}function Z_(r,e){let t=0;if(X_(r))return(async function*(){for await(let c of r)await e(c,t++)&&(yield c)})();let n=la(r),{value:o,done:s}=n.next();if(s===!0)return(function*(){})();let i=e(o,t++);if(typeof i.then=="function")return(async function*(){await i&&(yield o);for(let c of n)await e(c,t++)&&(yield c)})();let a=e;return(function*(){i===!0&&(yield o);for(let c of n)a(c,t++)&&(yield c)})()}var Zr=Z_;function J_(r){return r[Symbol.asyncIterator]!=null}function p9(r){return r?.then!=null}function ek(r,e){let t=0;if(J_(r))return(async function*(){for await(let c of r){let l=e(c,t++);p9(l)&&await l,yield c}})();let n=la(r),{value:o,done:s}=n.next();if(s===!0)return(function*(){})();let i=e(o,t++);if(typeof i?.then=="function")return(async function*(){await i,yield o;for(let c of n){let l=e(c,t++);p9(l)&&await l,yield c}})();let a=e;return(function*(){yield o;for(let c of n)a(c,t++),yield c})()}var Gg=ek;var tk=128,ua=class{child;getHasher;log;logger;blockBrokers;constructor(e,t={}){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.blockBrokers=e.blockBrokers,this.child=new Pf(e.blockstore,{maxDigestLength:t.maxIdentityHashDigestLength??tk}),this.getHasher=e.getHasher}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new H("blocks:put:duplicate",e)),e):(n.onProgress?.(new H("blocks:put:providers:notify",e)),await Promise.all(this.blockBrokers.map(async o=>o.announce?.(e,n))),n.onProgress?.(new H("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=Zr(e,async({cid:s})=>{let i=await this.child.has(s,t);return i&&t.onProgress?.(new H("blocks:put-many:duplicate",s)),!i}),o=Gg(n,async({cid:s})=>{t.onProgress?.(new H("blocks:put-many:providers:notify",s)),await Promise.all(this.blockBrokers.map(async i=>i.announce?.(s,t)))});t.onProgress?.(new H("blocks:put-many:blockstore:put-many")),yield*this.child.putMany(o,t)}async*get(e,t={}){let n=await this.child.has(e,t),o=t.offline===!0;if(!n){if(o)throw new tl("The block was present in the blockstore and the node is running offline so cannot fetch it");let s=await this.getHasher(e.multihash.code);t?.signal?.throwIfAborted(),t.onProgress?.(new H("blocks:get:providers:get",e));let i=await m9(e,this.blockBrokers,s,{...t,log:this.log});t.onProgress?.(new H("blocks:get:blockstore:put",e)),await this.child.put(e,i,t),t.onProgress?.(new H("blocks:get:providers:notify",e)),await Promise.all(this.blockBrokers.map(async a=>a.announce?.(e,t))),yield i;return}t.onProgress?.(new H("blocks:get:blockstore:get",e)),yield*this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new H("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(Gg(e,async n=>{let o=await this.child.has(n,t),s=t.offline===!0;if(!o){if(s)throw new tl("The block was present in the blockstore and the node is running offline so cannot fetch it");let i=await this.getHasher(n.multihash.code);t?.signal?.throwIfAborted(),t.onProgress?.(new H("blocks:get-many:providers:get",n));let a=await m9(n,this.blockBrokers,i,{...t,log:this.log});t.onProgress?.(new H("blocks:get-many:blockstore:put",n)),await this.child.put(n,a,t),t.onProgress?.(new H("blocks:get-many:providers:notify",n)),await Promise.all(this.blockBrokers.map(async c=>c.announce?.(n,t)))}}))}async delete(e,t={}){t.onProgress?.(new H("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new H("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 H("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}};async function m9(r,e,t,n){let o=nk(r,t),s=new AbortController,i=le([s.signal,n.signal]);s.signal;let a=[];for(let c of e)rk(c)&&a.push(c);if(a.length===0)throw new Hs(`No block brokers capable of retrieving blocks are configured, the CID ${r} cannot be fetched from the network`);try{return await Promise.any(a.map(async c=>{try{let l=!1,d=await c.retrieve(r,{...n,signal:i,validateFn:async u=>{await o(u),n.signal?.throwIfAborted(),l=!0}});return l||(await o(d),n.signal?.throwIfAborted()),d}catch(l){throw n.log.error("could not retrieve verified block for %c from %s - %e",r,c.name,l),l}}))}catch(c){throw new of(c.errors,`Failed to load block for ${r}`)}finally{s.abort(),i.clear()}}function rk(r){return typeof r.retrieve=="function"}var nk=(r,e)=>{if(e==null)throw new A(`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,{truncate:r.multihash.digest.byteLength});if(aa(o)?n=await o:n=o,!ee(n.digest,r.multihash.digest))throw new bo("Hash of downloaded block did not match multihash from passed CID")}};var Rf=class extends ua{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 addPeer(e,t){await Promise.all(this.blockBrokers.map(n=>n.addPeer(e,t)))}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{yield*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()}}};var Lf=class extends ua{started;constructor(e,t={}){super(e,t),this.started=!1}isStarted(){return this.started}async start(){await at(this.child,...this.blockBrokers),this.started=!0}async stop(){await lt(this.child,...this.blockBrokers),this.started=!1}unwrap(){return this.child}createSession(e,t){if(this.blockBrokers.length===0)throw new Hs("No block brokers configured");let n=this.blockBrokers.map(o=>o.createSession?.(t)).filter(o=>o!=null);if(n.length===0)throw new Hs(`No configured block brokers support sessions - tried ${this.blockBrokers.map(o=>o.name).join(", ")}`);return new Rf({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}};var Ws=class extends ie{initialPeerSearchComplete;requests;logName;log;logger;minProviders;maxProviders;providers;evictionFilter;initialProviders;cidPeerFilterSize;constructor(e,t){super(),this.logName=t.name,this.logger=e.logger,this.log=e.logger.forComponent(this.logName),this.requests=new Map,this.minProviders=t.minProviders??1,this.maxProviders=t.maxProviders??5,this.cidPeerFilterSize=t.cidPeerFilterSize??100,this.providers=[],this.evictionFilter=Et(this.maxProviders),this.initialProviders=[...t.providers??[]]}async retrieve(e,t={}){let n=rt.encode(e.multihash.bytes),o=this.requests.get(n);if(o!=null)return this.log("join existing request for %c",e),o.observers++,o.promise;let s=fe(),i={promise:s.promise,observers:1,queryFilter:Et(this.cidPeerFilterSize)};this.requests.set(n,i);let a=!1;this.initialPeerSearchComplete==null&&(a=!0,this.log=this.logger.forComponent(`${this.logName}:${e}`),this.initialPeerSearchComplete=this.findProviders(e,this.minProviders,t));let c=!1,l=new St({concurrency:this.maxProviders});l.addEventListener("failure",f=>{this.log.error("error querying provider %s, evicting from session - %e",f.detail.job.options.provider,f.detail.error),this.evict(f.detail.job.options.provider)}),l.addEventListener("success",f=>{c=!0,s.resolve(f.detail.result)}),l.addEventListener("idle",()=>{if(c){this.log.trace("session idle, found block");return}if(t.signal?.aborted===!0){this.log.trace("session idle, signal aborted");return}Promise.resolve().then(async()=>{this.log("no session peers had block for for %c, finding new providers",e);for(let f=0;f<this.minProviders&&this.providers.length!==0;f++){let h=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(h)}await this.findProviders(e,this.minProviders,t),this.log("found new providers re-retrieving %c",e),this.requests.delete(n),s.resolve(await this.retrieve(e,t))}).catch(f=>{this.log.error("could not find new providers for %c - %e",e,f),s.reject(f)})});let d=f=>{let h=this.toFilterKey(f.detail);i.queryFilter.has(h)||(i.queryFilter.add(h),this.emitFoundProviderProgressEvent(e,f.detail,t),l.add(async()=>this.queryProvider(e,f.detail,t),{provider:f.detail}).catch(p=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c - %e",e,p)}))};if(this.addEventListener("provider",d),a)try{await Pe(this.initialPeerSearchComplete,t.signal),a&&this.log("found initial session peers for %c",e)}catch(f){throw a&&this.log("failed to find initial session peers for %c - %e",e,f),this.requests.delete(n),i.observers>1&&s.reject(f),f}Promise.all([...this.providers].filter(f=>{let h=this.toFilterKey(f),p=i.queryFilter.has(h);return p||i.queryFilter.add(this.toFilterKey(f)),!p}).map(async f=>l.add(async()=>this.queryProvider(e,f,t),{provider:f}))).catch(f=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c - %e",e,f)});let u=()=>{s.reject(new Vt(t.signal?.reason??"Session aborted")),l.abort()};t.signal?.addEventListener("abort",u);try{return await Pe(s.promise,t.signal)}finally{this.removeEventListener("provider",d),t.signal?.removeEventListener("abort",u),l.clear(),this.requests.delete(n)}}evict(e){this.evictionFilter.add(this.toFilterKey(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.toFilterKey(e))}hasProvider(e){return!!(this.providers.find(t=>this.equals(t,e))!=null||this.isEvicted(e))}async addPeer(e,t){let n=await this.convertToProvider(e,"manually-added",t);n==null||this.hasProvider(n)||(this.providers.push(n),this.safeDispatchEvent("provider",{detail:n}))}async findProviders(e,t,n){let o=fe(),s=0;return Promise.resolve().then(async()=>{if(this.log("finding %d-%d new provider(s) for %c - %d initial providers",t,this.maxProviders,e,this.initialProviders.length),this.initialProviders.length>0)for(;s<t&&this.initialProviders.length>0;){let i=this.initialProviders.pop();if(i==null)break;let a=await this.convertToProvider(i,"manual",n);if(n.signal?.aborted===!0)break;if(a!=null&&!this.hasProvider(a)&&(this.log("found %d/%d new providers",s,this.maxProviders),this.providers.push(a),this.safeDispatchEvent("provider",{detail:a}),s++,s===t&&(this.log("session is ready with %d peer(s), only initial peers present",t),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",s);break}}if(s<this.maxProviders)for await(let i of this.findNewProviders(e,n)){if(s===this.maxProviders||n.signal?.aborted===!0)break;if(!this.hasProvider(i)&&(this.log("found %d/%d new providers",s,this.maxProviders),this.providers.push(i),this.safeDispatchEvent("provider",{detail:i}),s++,s===t&&(this.log("session is ready with %d peer(s), new peers present",t),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",s);break}}if(this.log("found %d/%d new session peers",s,this.maxProviders),s<t)throw new rl(`Found ${s} of ${t} ${this.name} providers for ${e}`)}).catch(i=>{this.log.error("error searching routing for potential session peers for %c - %e",e,i),o.reject(i)}),o.promise}};var Df=class{libp2p;blockstore;datastore;events;pins;logger;routing;getCodec;getHasher;dns;metrics;log;constructor(e){this.logger=e.logger??e.libp2p.logger,this.log=this.logger.forComponent("helia"),this.getHasher=h9(e.hashers,e.loadHasher),this.getCodec=f9(e.codecs,e.loadCodec),this.dns=e.dns??$u(),this.metrics=e.metrics,this.libp2p=e.libp2p,this.events=new ie;let t={blockstore:e.blockstore,datastore:e.datastore,logger:this.logger,libp2p:this.libp2p,blockBrokers:[],getHasher:this.getHasher,getCodec:this.getCodec,dns:this.dns,metrics:this.metrics,...e.components??{}};this.routing=t.routing=new cf(t,{routers:(e.routers??[]).flatMap(o=>{typeof o=="function"&&(o=o(t));let s=[o],i=ok(o);i!=null&&s.push(i);let a=sk(o);return a!=null&&s.push(a),s}),providerLookupConcurrency:e.providerLookupConcurrency}),t.blockBrokers=e.blockBrokers.map(o=>o(t));let n=new Lf(t,e);this.pins=new af(e.datastore,n,this.getCodec),this.blockstore=new If(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore}async start(){await Qy(this.datastore),await at(this.blockstore,this.datastore,this.routing,this.libp2p),this.events.dispatchEvent(new CustomEvent("start",{detail:this}))}async stop(){await lt(this.blockstore,this.datastore,this.routing,this.libp2p),this.events.dispatchEvent(new CustomEvent("stop",{detail:this}))}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,o=this.blockstore.unwrap();this.log("gc start"),await er(o.deleteMany((async function*(){for await(let{cid:s}of o.getAll())try{if(await n.pins.isPinned(s,e))continue;yield s,e.onProgress?.(new H("helia:gc:deleted",s))}catch(i){n.log.error("error during gc - %e",i),e.onProgress?.(new H("helia:gc:error",i))}})()))}finally{t()}this.log("gc finished")}};function ok(r){return r?.[Dn]}function sk(r){return r?.[On]}function ik(r){return r[Symbol.asyncIterator]!=null}function ak(r,e){let t=0;if(ik(r))return(async function*(){for await(let c of r)yield e(c,t++)})();let n=la(r),{value:o,done:s}=n.next();if(s===!0)return(function*(){})();let i=e(o,t++);if(typeof i.then=="function")return(async function*(){yield await i;for(let c of n)yield e(c,t++)})();let a=e;return(function*(){yield i;for(let c of n)yield a(c,t++)})()}var Lr=ak;function ck(r){return r[Symbol.asyncIterator]!=null}function lk(r,e){return ck(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=lk;var ll="/ipfs/bitswap/1.2.0";var tt;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(tt||(tt={}));var Yg;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(Yg||(Yg={}));(function(r){r.codec=()=>ze(Yg)})(tt||(tt={}));var da;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={cid:ae(0),priority:0},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.cid=t.bytes();break}case 2:{s.priority=t.int32();break}case 3:{s.cancel=t.bool();break}case 4:{s.wantType=tt.codec().decode(t);break}case 5:{s.sendDontHave=t.bool();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(da||(da={}));var Nf;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let s of t.entries)n.uint32(10),da.codec().encode(s,n);t.full!=null&&(n.uint32(16),n.bool(t.full)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={entries:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.entries!=null&&s.entries.length===o.limits.entries)throw new Ne('Decode error - map field "entries" had too many elements');s.entries.push(da.codec().decode(t,t.uint32(),{limits:o.limits?.entries$}));break}case 2:{s.full=t.bool();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Nf||(Nf={}));var fa;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={prefix:ae(0),data:ae(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.prefix=t.bytes();break}case 2:{s.data=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(fa||(fa={}));var Dr;(function(r){r.HaveBlock="HaveBlock",r.DoNotHaveBlock="DoNotHaveBlock"})(Dr||(Dr={}));var Of;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DoNotHaveBlock=1]="DoNotHaveBlock"})(Of||(Of={}));(function(r){r.codec=()=>ze(Of)})(Dr||(Dr={}));var ha;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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&&Of[t.type]!==0&&(n.uint32(16),Dr.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={cid:ae(0),type:Dr.HaveBlock},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.cid=t.bytes();break}case 2:{s.type=Dr.codec().decode(t);break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(ha||(ha={}));var Gs;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),Nf.codec().encode(t.wantlist,n)),t.blocks!=null)for(let s of t.blocks)n.uint32(26),fa.codec().encode(s,n);if(t.blockPresences!=null)for(let s of t.blockPresences)n.uint32(34),ha.codec().encode(s,n);t.pendingBytes!=null&&t.pendingBytes!==0&&(n.uint32(40),n.int32(t.pendingBytes)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={blocks:[],blockPresences:[],pendingBytes:0},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.wantlist=Nf.codec().decode(t,t.uint32(),{limits:o.limits?.wantlist});break}case 3:{if(o.limits?.blocks!=null&&s.blocks.length===o.limits.blocks)throw new Ne('Decode error - map field "blocks" had too many elements');s.blocks.push(fa.codec().decode(t,t.uint32(),{limits:o.limits?.blocks$}));break}case 4:{if(o.limits?.blockPresences!=null&&s.blockPresences.length===o.limits.blockPresences)throw new Ne('Decode error - map field "blockPresences" had too many elements');s.blockPresences.push(ha.codec().decode(t,t.uint32(),{limits:o.limits?.blockPresences$}));break}case 5:{s.pendingBytes=t.int32();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Gs||(Gs={}));function g9(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 Mf=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var uk=4193648,dk=uk+16;function*y9(r,e){let t=[...r.wantlist.values()],n=[...r.blockPresences.values()],o=[...r.blocks.values()],s=0,i=0,a=0,c=!1;for(;;){let l={wantlist:{full:r.full??!1,entries:[]},blockPresences:[],blocks:[],pendingBytes:0},d=Gs.encode(l).byteLength,{added:u,hasMore:f,newSize:h}=jg(o,l.blocks,a,e,d,fk);a+=u,d=h;let p=f;({added:u,hasMore:f,newSize:h}=jg(n,l.blockPresences,i,e,d,hk)),i+=u,d=h;let g=f;if({added:u,hasMore:f,newSize:h}=jg(t,l.wantlist.entries,s,e,d,pk),s+=u,d=h,c=!p&&!g&&!f,c||(l.wantlist.full=!1),yield Gs.encode(l),c)break}}function jg(r,e,t,n,o,s){let i=0,a=!1;for(let c=t;c<r.length;c++){let l=r[c],d=s(l);if(d>dk)throw new Mf("Cannot send block as after encoding it is over the max message size");let u=o+d;if(u>n){a=!0;break}e.push(l),i++,o=u}return{hasMore:a,added:i,newSize:o}}function fk(r){return Qg(3,fa.encode(r))}function hk(r){return Qg(4,ha.encode(r))}function pk(r){return Qg(1,da.encode(r))}function Qg(r,e){let t=he(r),n=he(e.byteLength);return t+n+e.byteLength}var Bf=class extends ie{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??[ll],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 It({concurrency:t.messageSendConcurrency??50,metrics:e.metrics,metricName:"helia_bitswap_message_send_queue"})}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,t){this.running&&Promise.resolve().then(async()=>{this.log("incoming new bitswap %s stream from %p",e.protocol,t.remotePeer);let n=()=>{e.status==="open"?e.abort(new un(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`)):this.log("stream aborted with status %s",e.status)},o=AbortSignal.timeout(this.messageReceiveTimeout);o.addEventListener("abort",n),await e.close({signal:o});let s=vt();e.addEventListener("message",i=>{s.push(i.data)}),e.addEventListener("remoteCloseWrite",()=>{s.end()}),e.addEventListener("close",i=>{i.error!=null&&s.end(i.error)});for await(let i of Ks(s,{maxDataLength:this.maxIncomingMessageSize}))try{let a=Gs.decode(i);this.log("incoming new bitswap %s message from %p on stream",e.protocol,t.remotePeer,e.id),this.safeDispatchEvent("bitswap:message",{detail:{peer:t.remotePeer,message:a}}),o.removeEventListener("abort",n),o=AbortSignal.timeout(this.messageReceiveTimeout),o.addEventListener("abort",n)}catch(a){this.log.error("error reading incoming bitswap message from %p on stream - %e",t.remotePeer,e.id,a),e.abort(a);break}}).catch(n=>{this.log.error("error handling incoming stream from %p - %e",t.remotePeer,n),e.abort(n)})}async*findProviders(e,t){t?.onProgress?.(new H("bitswap:find-providers",e));for await(let n of this.routing.findProviders(e,t)){if(!await this.libp2p.isDialable(n.multiaddrs,{runOnLimitedConnection:this.runOnLimitedConnections})){this.log("skipping peer %p as they are not dialable - %a",n.id,n.multiaddrs);continue}t?.onProgress?.(new H("bitswap:found-provider",{type:"bitswap",cid:e,provider:n,routing:n.routing})),yield n}}async findAndConnect(e,t){t?.providers!=null&&await Promise.all(t.providers.map(async n=>this.connectTo(n).catch(o=>{this.log.error("could not connect to supplied provider - %e",o)}))),await er(Lr(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(s=>e.equals(s.options.peerId)&&s.status==="queued");if(o!=null){o.options.message=g9(o.options.message,t),await o.join({signal:n?.signal});return}await this.sendQueue.add(async s=>{let i=s?.message;if(i==null)throw new A("No message to send");this.log("sendMessage to %p",e),s?.onProgress?.(new H("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,ll,s);await a.closeRead();try{for(let c of y9(i,this.maxOutgoingMessageSize))a.send(Xn.single(c))||await a.onDrain(s);await a.close(s)}catch(c){s?.onProgress?.(new H("bitswap:network:send-wantlist:error",{peer:e,error:c})),this.log.error("error sending message to %p - %e",e,c),a.abort(c)}this._updateSentStats(i.blocks)},{peerId:e,signal:n?.signal,message:t})}async connectTo(e,t){if(!this.running)throw new Ur("Network isn't running");t?.onProgress?.(new H("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),Qt(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(ll))return!0;throw new pi(`${e} did not support ${ll}`)}})]);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)}};var w9=Symbol.for("nodejs.util.inspect.custom"),Sk=114,ul=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()})`}[ku]=!0;toString(){return this.string==null&&(this.string=De.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return G.createV1(Sk,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return ee(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return ee(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[w9](){return`PeerId(${this.toString()})`}},dl=class extends ul{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},fl=class extends ul{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},hl=class extends ul{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},Ak=2336,pl=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=dt.digest(_(this.url))}[w9](){return`PeerId(${this.url})`}[ku]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return G.createV1(Ak,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=R(e)),e.toString()===this.toString())}};var Ik=114,b9=2336;function Me(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=ke(De.decode(`z${r}`));else{if(r.startsWith("k51qzi5uqu5")||r.startsWith("kzwfwjn5ji4")||r.startsWith("k2k4r8")||r.startsWith("bafz"))return Jr(G.parse(r));if(e==null)throw new A('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=ke(e.decode(r))}return Xe(t)}function xn(r){if(r.type==="Ed25519")return new fl({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new hl({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new dl({multihash:r.toCID().multihash,publicKey:r});throw new Fr}function E9(r){return xn(r.publicKey)}function Xe(r){if(Ck(r))return new dl({multihash:r});if(Tk(r))try{let e=sd(r);if(e.type==="Ed25519")return new fl({multihash:r,publicKey:e});if(e.type==="secp256k1")return new hl({multihash:r,publicKey:e})}catch{let t=R(r.digest);return new pl(new URL(t))}throw new bo("Supplied PeerID Multihash is invalid")}function Jr(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==Ik&&r.code!==b9)throw new Au("Supplied PeerID CID is invalid");if(r.code===b9){let e=R(r.multihash.digest);return new pl(new URL(e))}return Xe(r.multihash)}function Tk(r){return r.code===dt.code}function Ck(r){return r.code===We.code}function Ys(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 Uf(r){let e=ke(De.decode(`z${r}`));return Xe(e)}var Ut=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 Ys(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 Ys(this.map.values(),e=>e.key)}values(){return Ys(this.map.values(),e=>e.value)}get size(){return this.map.size}};var xr=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 Ys(this.set.entries(),e=>{let t=Uf(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=Uf(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return Ys(this.set.values(),e=>Uf(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 Xg(){return new xr}var Ff=class{filter;constructor(e,t){this.filter=Et(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 Zg(r,e=.001){return new Ff(r,e)}var Jg=class extends Ut{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 eo(r){let{name:e,metrics:t}=r,n;return t!=null?n=new Jg({name:e,metrics:t}):n=new Ut,n}var to=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=rt.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=rt.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=rt.encode(e.multihash.bytes);this.blocks.set(n,t)}};function _k(r){let e=new Uint8Array(r.reduce((n,o)=>n+he(o),0)),t=0;for(let n of r)e=Mt(n,e,t),t+=he(n);return e}var x9=_k;function e3(r){return x9([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var $f=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 to,n=new Set;for(let[o,s]of this.wants.entries())try{let i=await Jd(this.blockstore.get(s.cid,e));s.wantType===tt.WantHave?i.byteLength<this.maxSizeReplaceHasWithBlock?(this.log("sending have and block for %c",s.cid),n.add(o),t.addBlock(s.cid,{data:i,prefix:e3(s.cid)})):(this.log("sending have for %c",s.cid),t.addBlockPresence(s.cid,{cid:s.cid.bytes,type:Dr.HaveBlock})):(this.log("sending block for %c",s.cid),n.add(o),t.addBlock(s.cid,{data:i,prefix:e3(s.cid)}))}catch(i){if(i.name!=="NotFoundError")throw i;if(this.log("do not have block for %c",s.cid),!s.sendDontHave||s.sentDoNotHave===!0)continue;s.sentDoNotHave=!0,t.addBlockPresence(s.cid,{cid:s.cid.bytes,type:Dr.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,s)=>o+s.data.byteLength,0));for(let o of n)this.wants.delete(o)}}};var Kf=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=eo({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 - %e",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 $f({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,s)=>o+s.data.byteLength,0)??0),t.wantlist!=null){t.wantlist.full===!0&&n.wants.clear();for(let o of t.wantlist.entries){let s=G.decode(o.cid),i=R(s.multihash.bytes,"base64");o.cancel===!0?(this.log("peer %p cancelled want of block for %c",e,s),n.wants.delete(i)):(o.wantType===tt.WantHave?this.log("peer %p wanted block presence for %c",e,s):this.log("peer %p wanted block for %c",e,s),n.wants.set(i,{cid:s,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=R(e.multihash.bytes,"base64"),o=[];for(let s of this.ledgerMap.values())s.wants.has(n)&&o.push(s);await Promise.all(o.map(async s=>s.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};var t3=class extends Ws{name="bitswap-session";wantList;network;libp2p;constructor(e,t){super(e,{...t,name:"helia:bitswap:session"}),this.wantList=e.wantList,this.network=e.network,this.libp2p=e.libp2p}async queryProvider(e,t,n){this.log("sending WANT-BLOCK for %c to %p",e,t);let o=await this.wantList.wantSessionBlock(e,t.peerId,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{peerId:n.id,routing:n.routing}}toFilterKey(e){return e.peerId.toMultihash().bytes}equals(e,t){return e.peerId.equals(t.peerId)}async convertToProvider(e,t,n){if(Rt(e))return{peerId:e,routing:t};if(await this.libp2p.isDialable(e)!==!1)try{return{peerId:(await this.libp2p.dial(e,n)).remotePeer,routing:t}}catch{}}emitFoundProviderProgressEvent(e,t,n){n?.onProgress?.(new H("bitswap:found-provider",{type:"bitswap",cid:e,provider:{id:t.peerId,multiaddrs:[],routing:t.routing},routing:t.routing}))}};function v9(r,e){return new t3(r,e)}var Vf=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)}};function kk(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=hr(r);e.push(t),r=r.slice(he(t))}return e}var S9=kk;var Hf=class extends ie{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),this.peers=eo({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=ot({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 - %e",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 - %e",n.detail,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}async addEntry(e,t){let n=R(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 Qt(this,"block",t?.signal,{filter:a=>ee(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await Qt(this,"presence",t?.signal,{filter:i=>ee(e.multihash.digest,i.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",e)})},this.sendMessagesDelay)}async sendMessages(){this.sendingMessages=fe(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o=new to;for(let[s,i]of this.wants.entries())t.has(s)||i.cancel||(n.add(s),o.addWantlistEntry(i.cid,{cid:i.cid.bytes,priority:i.priority,wantType:i.wantType,cancel:i.cancel,sendDontHave:i.sendDontHave}));if(o.wantlist.size!==0)try{await this.network.sendMessage(e,o);for(let s of n)t.add(s)}catch(s){this.log.error("error sending full wantlist to new peer - %e",s)}})).catch(e=>{this.log.error("error sending messages - %e",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=R(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let o=new to;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:tt.WantHave,priority:1}),await this.network.sendMessage(t,o),(await Qt(this,"presence",n.signal,{filter:i=>t.equals(i.detail.sender)&&ee(e.multihash.digest,i.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 to;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:tt.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await Qt(this,"presence",n.signal,{filter:i=>t.equals(i.detail.sender)&&ee(e.multihash.digest,i.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=R(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 s=S9(o.prefix),i=s[0],a=s[1],c=s[2],l=s[3],d=c===We.code?We:await this.hashLoader?.getHasher(c);if(d==null){this.log.error("unknown hash algorithm",c);continue}let u=d.digest(o.data,{truncate:l});u.then!=null&&(u=await u);let f=G.create(i===0?0:1,a,u);this.log("received block from %p for %c",e,f),this.safeDispatchEvent("block",{detail:{sender:e,cid:f,block:o.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:f,has:!0,block:o.data}});let h=R(f.multihash.bytes,"base64"),p=this.wants.get(h);p!=null&&(p.cancel=!0,n=!0)}for(let{cid:o,type:s}of t.blockPresences){let i=G.decode(o);this.log("received %s from %p for %c",s,e,i),this.safeDispatchEvent("presence",{detail:{sender:e,cid:i,has:s===Dr.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new to(!0);for(let[o,s]of this.wants.entries())s.cancel||(t.add(o),n.addWantlistEntry(s.cid,{cid:s.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",e,o)}}peerDisconnected(e){this.peers.delete(e)}start(){}stop(){this.peers.clear(),clearTimeout(this.sendMessagesTimeout)}};var qf=class{log;logger;stats;network;blockstore;peerWantLists;wantList;libp2p;constructor(e,t={}){this.logger=e.logger,this.log=e.logger.forComponent("helia:bitswap"),this.blockstore=e.blockstore,this.libp2p=e.libp2p,this.stats=new Vf(e),this.network=new Bf(e,t),this.peerWantLists=new Kf({...e,network:this.network},t),this.wantList=new Hf({...e,network:this.network},t)}createSession(e={}){return v9({wantList:this.wantList,network:this.network,logger:this.logger,libp2p:this.libp2p},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(s=>{n.signal.aborted||this.log.error("error during finding and connect for cid %c - %e",e,s)});try{let s=await this.wantList.wantBlock(e,{...t,signal:o});return t.onProgress?.(new H("bitswap:block",{cid:e,sender:s.sender})),s.block}finally{n.abort(),o.clear()}}async notify(e,t={}){await Promise.all([this.peerWantLists.receivedBlock(e,t),this.wantList.receivedBlock(e,t)])}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 A9=(r,e={})=>new qf(r,e);var r3=class{name="bitswap";bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=A9(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){await this.bitswap.notify(e,t)}async retrieve(e,t={}){return this.bitswap.want(e,t)}createSession(e){let t=this.bitswap.createSession(e);return{name:"bitswap-session",addPeer:async(n,o)=>{await t.addPeer(n,o)},announce:async(n,o)=>{await this.bitswap.notify(n,o)},retrieve:async(n,o)=>t.retrieve(n,o)}}};function n3(r={}){return e=>new r3(e,r)}var Pk=[6,53,56,54,55];function I9(r){return _9("sni",r)?.value}function T9(r){let e=_9("tcp",r)?.value;return e==null?"":`:${e}`}function _9(r,e){return e.find(t=>t.name===r)}function C9(r){return r.some(({code:e})=>e===448)}function en(r,e){let t=k9[r.name];if(t==null)throw new Error(`Can't interpret protocol ${r.name}`);let n=t(r,e);return r.code===41?`[${n}]`:n}var k9={ip4:(r,e)=>r.value,ip6:(r,e)=>e.length===0?r.value:`[${r.value}]`,tcp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`tcp://${en(t,e)}:${r.value}`},udp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`udp://${en(t,e)}:${r.value}`},dnsaddr:(r,e)=>r.value,dns4:(r,e)=>r.value,dns6:(r,e)=>r.value,dns:(r,e)=>r.value,ipfs:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${en(t,e)}`},p2p:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${en(t,e)}`},http:(r,e)=>{let t=C9(e),n=I9(e),o=T9(e);if(t&&n!=null)return`https://${n}${o}`;let s=t?"https://":"http://",i=e.pop();if(i==null)throw new Error("Unexpected end of multiaddr");let a=en(i,e);return a=a?.replace("tcp://",""),`${s}${a}`},"http-path":(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=en(t,e),o=decodeURIComponent(r.value??"");return`${n}${o}`},tls:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return en(t,e)},sni:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return en(t,e)},https:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=en(t,e);return n=n?.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=C9(e),n=I9(e),o=T9(e);if(t&&n!=null)return`wss://${n}${o}`;let s=t?"wss://":"ws://",i=e.pop();if(i==null)throw new Error("Unexpected end of multiaddr");let a=en(i,e);return a=a?.replace("tcp://",""),`${s}${a}`},wss:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=en(t,e);return n=n?.replace("tcp://",""),`wss://${n}`}};function qo(r,e){let n=q(r).getComponents(),o=n.pop();if(o==null)throw new Error("Unexpected end of multiaddr");let s=k9[o.name];if(s==null)throw new Error(`No interpreter found for ${o.name}`);let i=s(o,n)??"";return e?.assumeHttp!==!1&&Pk.includes(o.code)&&(i=i.replace(/^.*:\/\//,""),o.value==="443"?i=`https://${i}`:i=`http://${i}`),(i.startsWith("http://")||i.startsWith("https://")||i.startsWith("ws://")||i.startsWith("wss://"))&&(i=new URL(i).toString(),i.endsWith("/")&&(i=i.substring(0,i.length-1))),i}var Ce=r=>({match:e=>{let t=e[0];return t==null||t.code!==r||t.value!=null?!1:e.slice(1)}}),se=(r,e)=>({match:t=>{let n=t[0];return n?.code!==r||n.value==null||e!=null&&n.value!==e?!1:t.slice(1)}}),P9=r=>({match:e=>r.match(e)===!1?e:!1}),ge=r=>({match:e=>{let t=r.match(e);return t===!1?e:t}}),Ft=(...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}}),ve=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e}});function _e(...r){function e(o){if(o==null)return!1;let s=o.getComponents();for(let i of r){let a=i.match(s);if(a===!1)return!1;s=a}return s}function t(o){return e(o)!==!1}function n(o){let s=e(o);return s===!1?!1:s.length===0}return{matchers:r,matches:t,exactMatch:n}}var Rk=se(421),R9=_e(Rk),Wf=se(54),Gf=se(55),Yf=se(56),s3=se(53),dQ=_e(Wf,ge(se(421))),fQ=_e(Gf,ge(se(421))),hQ=_e(Yf,ge(se(421))),jf=_e(Ft(s3,Yf,Wf,Gf),ge(se(421))),L9=ve(se(4),ge(se(43))),D9=ve(ge(se(42)),se(41),ge(se(43))),i3=Ft(L9,D9),js=Ft(i3,s3,Wf,Gf,Yf),N9=_e(Ft(i3,ve(Ft(s3,Yf,Wf,Gf),ge(se(421))))),a3=_e(L9),c3=_e(D9),O9=_e(i3),l3=ve(js,se(6)),ml=ve(js,se(273)),Qs=_e(ve(l3,ge(se(421)))),pQ=_e(ml),u3=ve(ml,Ce(460),ge(se(421))),Qf=ve(ml,Ce(461),ge(se(421))),Lk=Ft(u3,Qf),mQ=_e(u3),M9=_e(Qf),o3=Ft(js,l3,ml,u3,Qf),B9=Ft(ve(o3,Ce(477),ge(se(421)))),ro=_e(B9),U9=Ft(ve(o3,Ce(478),ge(se(421))),ve(o3,Ce(448),ge(se(449)),Ce(477),ge(se(421)))),Xs=_e(U9),F9=ve(ml,Ce(280),ge(se(466)),ge(se(466)),ge(se(421))),gl=_e(F9),$9=ve(Qf,Ce(465),ge(se(466)),ge(se(466)),ge(se(421))),d3=_e($9),zf=Ft(B9,U9,ve(l3,ge(se(421))),ve(Lk,ge(se(421))),ve(js,ge(se(421))),F9,$9,se(421)),pa=_e(zf),Dk=ve(ge(zf),Ce(290),P9(Ce(281)),ge(se(421))),yt=_e(Dk),Nk=Ft(ve(zf,Ce(290),Ce(281),ge(se(421))),ve(zf,Ce(281),ge(se(421))),ve(Ce(281),ge(se(421)))),yl=_e(Nk),Ok=Ft(ve(js,se(6),Ce(480),ge(se(421))),ve(js,Ce(480),ge(se(421)))),K9=_e(Ok),Mk=ve(js,Ft(ve(se(6,"443"),Ce(480)),ve(se(6),Ce(443)),ve(se(6),Ce(448),Ce(480)),ve(Ce(448),Ce(480)),Ce(448),Ce(443)),ge(se(421))),V9=_e(Mk),Bk=Ft(ve(se(777),ge(se(421)))),gQ=_e(Bk),Uk=Ft(ve(se(400),ge(se(421)))),yQ=_e(Uk);function f3(r,e,t){return r.filter(n=>{if(V9.matches(n)||e&&K9.matches(n))return t||jf.matches(n)?!0:Qe(n)===!1;if(!e&&t){let{host:o}=oe(n);if(o==="127.0.0.1"||o==="localhost"||o.endsWith(".localhost"))return!0}return!1})}async function*Xf(r,e,t,n,o,s={}){for await(let i of e.findProviders(r,s)){let a=f3(i.multiaddrs,n,o);if(a.length===0)continue;let c=new URL(qo(a[0]));yield new ma(c,{logger:t,transformRequestInit:s.transformRequestInit,routing:i.routing})}}async function H9(r,e,t){let{signal:n,log:o}=t??{},s=r.headers.get("content-length");if(s!=null){let c=parseInt(s,10);if(c>e)throw o?.error("content-length header (%d) is greater than the limit (%d)",c,e),r.body!=null&&await r.body.cancel().catch(l=>{o?.error("error cancelling response body after content-length check - %e",l)}),new Error(`Content-Length header (${c}) is greater than the limit (${e}).`)}let i=r.body?.getReader();if(i==null)throw new Error("Response body is not readable");let a=new Q;try{for(;;){if(n?.aborted===!0)throw new Error("Response body read was aborted.");let{done:c,value:l}=await i.read();if(c)break;if(a.append(l),a.byteLength>e)throw new Error(`Response body is greater than the limit (${e}), received ${a.byteLength} bytes.`)}}finally{i.cancel().catch(c=>{o?.error("error cancelling reader - %e",c)}).finally(()=>{i.releaseLock()})}return a.subarray()}var ma=class{url;#e=0;#t=0;#r=0;#a=0;#c=new Map;log;transformRequestInit;routing;constructor(e,{logger:t,transformRequestInit:n,routing:o}){this.url=e instanceof URL?e:new URL(e),this.transformRequestInit=n,this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.host}`),this.routing=o}#m(e){let t=e.multihash.bytes;return rt.encode(t)}async getRawBlock(e,{signal:t,maxSize:n=q9}={}){let o=new URL(this.url.toString());if(o.pathname=`/ipfs/${e.toString()}`,o.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 s=this.#m(e),i=new AbortController,a=()=>{i.abort()};t?.addEventListener("abort",a);try{let c=this.#c.get(s);if(c==null){this.#e++;let l={signal:i.signal,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"},d=this.transformRequestInit!=null?await this.transformRequestInit(l):l,u=new Headers(d.headers);this.log(`sending request
13
+ ${e}[Error list was empty]`,t.trim()}return Ry(r,e)}rr.formatters.e=r=>r==null?"undefined":Dy(r);function Q_(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 ra(r){return{forComponent(e){return Pr(e,r)}}}function Pr(r,e){let t=Q_(`${r}:trace`);return rr.enabled(`${r}:trace`)&&rr.names.map(n=>n.toString()).find(n=>n.includes(":trace"))!=null&&(t=rr(`${r}:trace`,e)),Object.assign(rr(r,e),{error:rr(`${r}:error`,e),trace:t,newScope:n=>Pr(`${r}:${n}`,e)})}function Ly(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}var Ny=Symbol.for("sindresorhus/unlimited-timeout#brand");function Oy(r,e,...t){if(typeof r!="function")throw new TypeError("Expected callback to be a function");e??=0,e=Number(e);let n=!1,o={[Ny]:!0,id:void 0,cleared:!1,ref(){return n=!1,o.id?.ref?.(),o},unref(){return n=!0,o.id?.unref?.(),o}};if(e===Number.POSITIVE_INFINITY||e>Number.MAX_SAFE_INTEGER)return o;(!Number.isFinite(e)||e<0)&&(e=0);let s=performance.now()+e,i=a=>{o.cleared||(a<=2147483647?(o.id=globalThis.setTimeout(()=>{o.cleared||r(...t)},a),n&&o.id?.unref?.()):(o.id=globalThis.setTimeout(()=>{let c=performance.now(),l=Math.max(0,s-c);i(l)},2147483647),n&&o.id?.unref?.()))};return i(e),o}function My(r){!r||typeof r!="object"||!r[Ny]||(r.cleared=!0,r.id!==void 0&&(globalThis.clearTimeout(r.id),r.id=void 0))}var Z_=new WeakMap;function J_({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(o.reason);let s,i,a,c=r??clearTimeout,l=()=>{c(s),a(o.reason)},d=()=>{o&&o.removeEventListener("abort",l)},u=new Promise((f,h)=>{i=()=>{d(),f(n)},a=h,s=(e??setTimeout)(i,t)});return o&&o.addEventListener("abort",l,{once:!0}),Z_.set(u,()=>{c(s),s=null,i()}),u}}var eC=J_({setTimeout:Oy,clearTimeout:My}),By=eC;var It=class extends St{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};var Qd=class extends St{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};var na=class{memoryStorage;points;duration;blockDuration;keyPrefix;constructor(e={}){this.points=e.points??4,this.duration=e.duration??1,this.blockDuration=e.blockDuration??0,this.keyPrefix=e.keyPrefix??"rlflx",this.memoryStorage=new mg}consume(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,t,s);if(i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i.consumedPoints>this.points)throw this.blockDuration>0&&i.consumedPoints<=this.points+t&&(i=this.memoryStorage.set(o,i.consumedPoints,this.blockDuration)),new pd("Rate limit exceeded",i);return i}penalty(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,t,s);return i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i}reward(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,-t,s);return i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i}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)}},mg=class{storage;constructor(){this.storage=new Map}incrby(e,t,n){let o=this.storage.get(e);if(o!=null){let s=o.expiresAt!=null?o.expiresAt.getTime()-new Date().getTime():-1;return o.expiresAt==null||s>0?(o.value+=t,{remainingPoints:0,msBeforeNext:s,consumedPoints:o.value,isFirstInDuration:!1}):this.set(e,t,n)}return this.set(e,t,n)}set(e,t,n){let o=n*1e3,s=this.storage.get(e);s!=null&&clearTimeout(s.timeoutId);let i={value:t,expiresAt:o>0?new Date(Date.now()+o):void 0};return this.storage.set(e,i),o>0&&(i.timeoutId=setTimeout(()=>{this.storage.delete(e)},o),i.timeoutId.unref!=null&&i.timeoutId.unref()),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:i.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}};function oa(r,e,t){let n,o,s=!1;function i(){let l={signal:o.signal};if(t?.timeout!=null){let d=le([o.signal,AbortSignal.timeout(t.timeout)]);l.signal=d}s=!0,Promise.resolve().then(async()=>{await r(l)}).catch(()=>{}).finally(()=>{s=!1,!o.signal.aborted&&(n=setTimeout(i,e))})}let a=Wn(i,t?.debounce??100),c=!1;return{setInterval:l=>{e!==l&&(e=l,n!=null&&(clearTimeout(n),n=setTimeout(i,e)))},setTimeout:l=>{t??={},t.timeout=l},run:()=>{s||(clearTimeout(n),a())},start:()=>{c||(c=!0,o=new AbortController,o.signal,t?.runImmediately===!0?queueMicrotask(()=>{i()}):n=setTimeout(i,e))},stop:()=>{clearTimeout(n),o?.abort(),c=!1}}}var gg=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 ot(r){let{name:e,metrics:t}=r,n;return t!=null?n=new gg({name:e,metrics:t}):n=new Map,n}var Zn="/",Uy=new TextEncoder().encode(Zn),Zd=Uy[0],Fe=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=C(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]!==Zd)throw new Error("Invalid key")}toString(e="utf8"){return R(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=Uy),this._buf[0]!==Zd){let e=new Uint8Array(this._buf.byteLength+1);e.fill(Zd,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===Zd;)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 s=t[o],i=n[o];if(s<i)return!0;if(s>i)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 tC(this.baseNamespace())}name(){return rC(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(),...nC(e.map(t=>t.namespaces()))])}};function tC(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function rC(r){let e=r.split(":");return e[e.length-1]}function nC(r){return[].concat(...r)}function oC(r){return r[Symbol.asyncIterator]!=null}function sC(r){if(oC(r))return(async()=>{let n=new Uint8Array(0);for await(let o of r)n=Oe([n,o],n.length+o.length);return n})();let e=[],t=0;for(let n of r)e.push(n),t+=n.byteLength;return Oe(e,t)}var Jd=sC;function ef({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*iC(r,e){if(e!=null&&typeof e=="object")if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t],s=G.asCID(n);s!=null?yield[o.join("/"),s]:typeof n=="object"&&(yield*yg(n,o))}else{let t=G.asCID(e);t!=null?yield[r.join("/"),t]:yield*yg(e,r)}}function*yg(r,e){if(r==null||r instanceof Uint8Array)return;let t=G.asCID(r);t!=null&&(yield[e.join("/"),t]);for(let[n,o]of Object.entries(r)){let s=[...e,n];yield*iC(s,o)}}function*aC(r,e){if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t];yield o.join("/"),typeof n=="object"&&G.asCID(n)==null&&(yield*wg(n,o))}else yield*wg(e,r)}function*wg(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"&&G.asCID(n)==null&&(yield*aC(o,n))}}function cC(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(i=>`[${JSON.stringify(i)}]`).join("")}`);let s=G.asCID(t);if(s!=null)return{value:s,remaining:e.slice(n+1).join("/")}}return{value:t}}var bg=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:ef(),bytes:ef(),value:ef(),asBlock:ef()})}links(){return yg(this.value,[])}tree(){return wg(this.value,[])}get(e="/"){return cC(this.value,e.split("/").filter(Boolean))}};function Fy({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 bg({cid:e,bytes:r,value:o})}var tf=class extends Error{static name="AlreadyPinnedError";name="AlreadyPinnedError"},el=class extends Error{static name="BlockPinnedError";name="BlockPinnedError"},rf=class extends Error{static name="InvalidDatastoreVersionError";name="InvalidDatastoreVersionError"},Hs=class extends Error{static name="InvalidConfigurationError";name="InvalidConfigurationError"},nf=class extends AggregateError{static name="GetFailedError";name="GetFailedError"},of=class extends AggregateError{static name="LoadBlockFailedError";name="LoadBlockFailedError"},tl=class extends Error{static name="BlockNotFoundWhileOfflineError";name="BlockNotFoundWhileOfflineError"};var Vy="/pin/",$y="/pinned-block/",Eg=Ar,Ky=1;function sf(r){return r.version===0&&(r=r.toV1()),new Fe(`${Vy}${r.toString(Eg)}`)}var af=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=sf(e);if(await this.datastore.has(n))throw new tf("Already pinned");let o=Math.round(t.depth??1/0);if(o<0)throw new A("Depth must be greater than or equal to 0");let s=new St({concurrency:Ky});for await(let a of this.#e(e,s,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>ee(l,e.bytes))!=null?!1:(c.pinCount++,c.pinnedBy.push(e.bytes),!0),t),yield a;let i={depth:o,metadata:t.metadata??{}};await this.datastore.put(n,Ko(i),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=await this.getCodec(e.code),s=await Jd(this.blockstore.get(e,n)),i=Fy({bytes:s,cid:e,codec:o});yield e;for(let[,a]of i.links())yield*await t.add(async()=>this.#e(a,t,{...n,depth:n.depth-1}))}async#t(e,t,n){let o=new Fe(`${$y}${Eg.encode(e.multihash.bytes)}`),s={pinCount:0,pinnedBy:[]};try{s=br(await this.datastore.get(o,n))}catch(a){if(a.name!=="NotFoundError")throw a}if(t(s)){if(s.pinCount===0&&await this.datastore.has(o)){await this.datastore.delete(o);return}await this.datastore.put(o,Ko(s),n),n.onProgress?.(new H("helia:pin:add",e))}}async*rm(e,t={}){let n=sf(e),o=await this.datastore.get(n,t),s=br(o);await this.datastore.delete(n,t);let i=new St({concurrency:Ky});for await(let a of this.#e(e,i,{...t,depth:s.depth}))await this.#t(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>ee(l,e.bytes)),!0),{...t,depth:s.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:Vy+(e.cid!=null?`${e.cid.toString(Ar)}`:"")},e)){let o=G.parse(t.toString().substring(5),Ar),s=br(n);yield{cid:o,...s}}}async isPinned(e,t={}){let n=new Fe(`${$y}${Eg.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=sf(e),o=await this.datastore.get(n,t);return br(o)}async setMetadata(e,t,n){let o=sf(e),s=await this.datastore.get(o,n),i=br(s);i.metadata=t??{},await this.datastore.put(o,Ko(i),n)}};var xg=1,vg=5,Sg=100;var rl=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},Vo=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}},nl=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},ol=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}},Ag=class extends Error{static name="InvalidCodecError";constructor(e="Invalid codec"){super(e),this.name="InvalidCodecError"}};var lC=5,cf=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??lC,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 at(...this.routers)}async stop(){await lt(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new Vo("No content routers available");let n=new It({concurrency:this.providerLookupConcurrency}),o=0,s=[],i=this,a=0;this.log("findProviders for %c start using routers %s",e,this.routers.map(l=>l.toString()).join(", "));let c=qs(this.routers,"findProviders").map(async function*(l){let d=0;try{for await(let u of l.findProviders(e,t))d++,yield u}catch(u){s.push(u)}finally{i.log("router %s found %d providers for %c",l,d,e),a++,a===c.length&&n.size===0&&n.emitIdle()}});for await(let l of jt(n.toGenerator(),...c))if(l!=null){if(l.multiaddrs.length===0){if(n.find(l.id)!=null)continue;n.add(async()=>{try{let d=await this.findPeer(l.id,t);return d.multiaddrs.length===0?null:{...d,protocols:l.protocols,routing:l.routing}}catch(d){return this.log.error("could not load multiaddrs for peer %p - %e",l.id,d),null}},{peerId:l.id,signal:t.signal}).catch(d=>{this.log.error("could not load multiaddrs for peer %p - %e",l.id,d)});continue}o++,yield l}this.log("findProviders finished, found %d providers for %c",o,e)}async provide(e,t={}){if(this.routers.length===0)throw new Vo("No content routers available");await Promise.all(qs(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){await Promise.all(qs(this.routers,"cancelReprovide").map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){await Promise.all(qs(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){let n=[],o;try{o=await Promise.any(qs(this.routers,"get").map(async s=>{try{return await s.get(e,t)}catch(i){this.log("router %s failed with %e",s,i),n.push(i)}}))}catch{}if(o==null)throw new nf(n,`Failed to get value key ${R(e,"base58btc")}`);return o}async findPeer(e,t){if(this.routers.length===0)throw new Vo("No peer routers available");let n=this,o=jt(...qs(this.routers,"findPeer").map(s=>(async function*(){try{yield await s.findPeer(e,t)}catch(i){n.log.error(i)}})()));for await(let s of o)if(s!=null)return s;throw new Le("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Vo("No peer routers available");for await(let n of jt(...qs(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function qs(r,e){return r.filter(t=>t[e]!=null)}var Er=class extends Error{static name="AbortError";name="AbortError";constructor(e="The operation was aborted",...t){super(e,...t)}};async function Xt(r,e,t,n){let o=new Er(n?.errorMessage);n?.errorCode!=null&&(o.code=n.errorCode);let s=n?.errorEvent??"error";return t?.aborted===!0?Promise.reject(o):new Promise((i,a)=>{function c(){Tg(t,"abort",u),Tg(r,e,l),Tg(r,s,d)}let l=f=>{try{if(n?.filter?.(f)===!1)return}catch(h){c(),a(h);return}c(),i(f)},d=f=>{if(c(),f instanceof Error){a(f);return}a(f.detail??n?.error??new Error(`The "${n?.errorEvent}" event was emitted but the event had no '.detail' field. Pass an 'error' option to race-event to change this message.`))},u=()=>{c(),a(o)};Ig(t,"abort",u),Ig(r,e,l),Ig(r,s,d)})}function Ig(r,e,t){r!=null&&(Hy(r)?r.addEventListener(e,t):r.addListener(e,t))}function Tg(r,e,t){r!=null&&(Hy(r)?r.removeEventListener(e,t):r.removeListener(e,t))}function Hy(r){return typeof r.addEventListener=="function"&&typeof r.removeEventListener=="function"}var lf=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var uf=class{deferred;signal;constructor(e){this.signal=e,this.deferred=Promise.withResolvers(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new Er)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function uC(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var df=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=uC(),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 Er),this.cleanup())}async join(e={}){let t=new uf(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 Pe(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)})}};function _g(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 sl=class extends ie{concurrency;maxSize;queue;pending;sort;autoStart;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,this.autoStart=e.autoStart??!0,this.sort=e.sort,this.queue=[],this.emitEmpty=_g(this.emitEmpty.bind(this),1),this.emitIdle=_g(this.emitIdle.bind(this),1)}[Symbol.asyncIterator](){return this.toGenerator()}emitEmpty(){this.size===0&&this.safeDispatchEvent("empty")}emitIdle(){this.running===0&&this.safeDispatchEvent("idle")}tryToStartAnother(){if(this.size===0)return this.emitEmpty(),this.running===0&&this.emitIdle(),!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.safeDispatchEvent("next"),this.autoStart&&this.tryToStartAnother()}),!0)}return!1}enqueue(e){this.queue.push(e),this.sort!=null&&this.queue.sort(this.sort)}start(){this.autoStart===!1&&(this.autoStart=!0,this.tryToStartAnother())}pause(){this.autoStart=!1}async add(e,t){if(t?.signal?.throwIfAborted(),this.size===this.maxSize)throw new lf;let n=new df(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.autoStart&&this.tryToStartAnother(),n.join(t).then(o=>(this.safeDispatchEvent("success",{detail:{job:n,result:o}}),o)).catch(o=>{if(n.status==="queued"){for(let s=0;s<this.queue.length;s++)if(this.queue[s]===n){this.queue.splice(s,1);break}}throw 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 Er)}),this.clear()}async onEmpty(e){this.size!==0&&await Xt(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await Xt(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await Xt(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=vt({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail.result)},s=c=>{n(c.detail.error)},i=()=>{n()},a=()=>{n(new Er("Queue aborted"))};this.addEventListener("success",o),this.addEventListener("failure",s),this.addEventListener("idle",i),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("success",o),this.removeEventListener("failure",s),this.removeEventListener("idle",i),e?.signal?.removeEventListener("abort",a),n()}}};var ff="lock:worker:request-read",hf="lock:worker:abort-read-request",pf="lock:worker:release-read",mf="lock:master:grant-read",gf="lock:master:error-read",yf="lock:worker:request-write",wf="lock:worker:abort-write-request",bf="lock:worker:release-write",Ef="lock:master:grant-write",xf="lock:master:error-write",vf="lock:worker:finalize",Sf="mortice",qy={singleProcess:!1};var Cg=(r,e,t,n,o,s,i,a,c)=>l=>{if(l.data==null)return;let d={type:l.data.type,name:l.data.name,identifier:l.data.identifier};d.type===o&&r.safeDispatchEvent(t,{detail:{name:d.name,identifier:d.identifier,handler:async()=>{e.postMessage({type:c,name:d.name,identifier:d.identifier}),await new Promise(u=>{let f=h=>{if(h?.data==null)return;let p={type:h.data.type,name:h.data.name,identifier:h.data.identifier};p.type===a&&p.identifier===d.identifier&&(e.removeEventListener("message",f),u())};e.addEventListener("message",f)})},onError:u=>{e.postMessage({type:i,name:d.name,identifier:d.identifier,error:{message:u.message,name:u.name,stack:u.stack}})}}}),d.type===s&&r.safeDispatchEvent(n,{detail:{name:d.name,identifier:d.identifier}}),d.type===vf&&r.safeDispatchEvent("finalizeRequest",{detail:{name:d.name}})};var Wy=(r=10)=>Math.random().toString().substring(2,r+2);var Af=class{name;channel;constructor(e){this.name=e,this.channel=new BroadcastChannel(Sf)}readLock(e){return this.sendRequest(ff,hf,mf,gf,pf,e)}writeLock(e){return this.sendRequest(yf,wf,Ef,xf,bf,e)}finalize(){this.channel.postMessage({type:vf,name:this.name}),this.channel.close()}async sendRequest(e,t,n,o,s,i){i?.signal?.throwIfAborted();let a=Wy();return this.channel.postMessage({type:e,identifier:a,name:this.name}),new Promise((c,l)=>{let d=()=>{this.channel.postMessage({type:t,identifier:a,name:this.name})};i?.signal?.addEventListener("abort",d,{once:!0});let u=f=>{if(f.data?.identifier===a&&(f.data?.type===n&&(this.channel.removeEventListener("message",u),i?.signal?.removeEventListener("abort",d),c(()=>{this.channel.postMessage({type:s,identifier:a,name:this.name})})),f.data.type===o)){this.channel.removeEventListener("message",u),i?.signal?.removeEventListener("abort",d);let h=new Error;f.data.error!=null&&(h.message=f.data.error.message,h.name=f.data.error.name,h.stack=f.data.error.stack),l(h)}};this.channel.addEventListener("message",u)})}};var zy=r=>{if(r=Object.assign({},qy,r),!!globalThis.document||r.singleProcess){let t=new BroadcastChannel(Sf),n=new ie;return t.addEventListener("message",Cg(n,t,"requestReadLock","abortReadLockRequest",ff,hf,gf,pf,mf)),t.addEventListener("message",Cg(n,t,"requestWriteLock","abortWriteLockRequest",yf,wf,xf,bf,Ef)),n}return new Af(r.name)};var Ws=new Map,il;function Gy(r){return typeof r?.readLock=="function"&&typeof r?.writeLock=="function"}function dC(r){if(il==null&&(il=zy(r),!Gy(il))){let e=il;e.addEventListener("requestReadLock",t=>{let n=t.detail.name,o=t.detail.identifier,s=Ws.get(n);if(s==null)return;let i=new AbortController,a=c=>{c.detail.name!==n||c.detail.identifier!==o||i.abort()};e.addEventListener("abortReadLockRequest",a),s.readLock({signal:i.signal}).then(async c=>{await t.detail.handler().finally(()=>{c()})}).catch(c=>{t.detail.onError(c)}).finally(()=>{e.removeEventListener("abortReadLockRequest",a)})}),e.addEventListener("requestWriteLock",t=>{let n=t.detail.name,o=t.detail.identifier,s=Ws.get(n);if(s==null)return;let i=new AbortController,a=c=>{c.detail.name!==n||c.detail.identifier!==o||i.abort()};e.addEventListener("abortWriteLockRequest",a),s.writeLock({signal:i.signal}).then(async c=>{await t.detail.handler().finally(()=>{c()})}).catch(c=>{t.detail.onError(c)}).finally(()=>{e.removeEventListener("abortWriteLockRequest",a)})}),e.addEventListener("finalizeRequest",t=>{let n=t.detail.name,o=Ws.get(n);o?.finalize()})}return il}async function kg(r,e){let t,n,o=new Promise((i,a)=>{t=i,n=a}),s=()=>{n(new Er)};return e?.signal?.addEventListener("abort",s,{once:!0}),r.add(async()=>{await new Promise(i=>{t(()=>{e?.signal?.removeEventListener("abort",s),i()})})},{signal:e?.signal}).catch(i=>{n(i)}),o}var Yy=(r,e)=>{let t=Ws.get(r);if(t!=null)return t;let n=dC(e);if(Gy(n))return t=n,Ws.set(r,t),t;let o=new sl({concurrency:1}),s;return t={async readLock(i){if(s!=null)return kg(s,i);s=new sl({concurrency:e.concurrency,autoStart:!1});let a=s,c=kg(s,i);return o.add(async()=>{a.start(),await a.onIdle().then(()=>{s===a&&(s=null)})}),c},async writeLock(i){return s=null,kg(o,i)},finalize:()=>{Ws.delete(r)},queue:o},Ws.set(r,t),e.autoFinalize===!0&&o.addEventListener("idle",()=>{t.finalize()},{once:!0}),t};var fC={name:"lock",concurrency:1/0,singleProcess:!1,autoFinalize:!1};function al(r){let e=Object.assign({},fC,r);return Yy(e.name,e)}var If=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=al({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await at(this.child),this.started=!0}async stop(){await lt(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{yield*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 el("Block was pinned - please unpin and try again");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 s of e){if(await o.pins.isPinned(s))throw new el("Block was pinned - please unpin and try again");yield s}})(),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 Pg=new Fe("/version"),jy=1;async function Xy(r){if(!await r.has(Pg)){await r.put(Pg,C(`${jy}`));return}let e=await r.get(Pg),t=R(e);if(parseInt(t,10)!==jy)throw new rf("Invalid datastore version, a datastore migration may be required")}var Dg={};et(Dg,{code:()=>Lg,decode:()=>vC,decodeOptions:()=>bC,encode:()=>xC,encodeOptions:()=>yC,name:()=>EC,toByteView:()=>Zy});var Qy=42;function Zy(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function hC(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=G.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new N(y.tag,Qy),new N(y.bytes,t)]}function pC(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function mC(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}function gC(r){for(let e of r.keys())if(typeof e!="string"||e.length===0)throw new Error("Non-string Map keys are not supported by the IPLD Data Model and cannot be encoded");return null}var Rg={float64:!0,typeEncoders:{Map:gC,Object:hC,undefined:pC,number:mC}},yC={...Rg,typeEncoders:{...Rg.typeEncoders}};function wC(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return G.decode(r.subarray(1))}var Tf={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Tf.tags[Qy]=wC;var bC={...Tf,tags:Tf.tags.slice()},EC="dag-cbor",Lg=113,xC=r=>Ko(r,Rg),vC=r=>br(Zy(r),Tf);var $g={};et($g,{code:()=>Fg,decode:()=>e9,encode:()=>Jy,format:()=>DC,name:()=>LC,parse:()=>OC,stringify:()=>DC});var Ng=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(y.equals(t.type,y.array)&&(t.elements++,t.elements!==1&&e.push([44])),y.equals(t.type,y.map)&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[y.uint.major](e,t){this.prefix(e);let n=String(t.value),o=[];for(let s=0;s<n.length;s++)o[s]=n.charCodeAt(s);e.push(o)}[y.negint.major](e,t){this[y.uint.major](e,t)}[y.bytes.major](e,t){throw new Error(`${bn} unsupported type: Uint8Array`)}[y.string.major](e,t){this.prefix(e);let n=ji(JSON.stringify(t.value));e.push(n.length>32?Us(n):n)}[y.array.major](e,t){this.prefix(e),this.inRecursive.push({type:y.array,elements:0}),e.push([91])}[y.map.major](e,t){this.prefix(e),this.inRecursive.push({type:y.map,elements:0}),e.push([123])}[y.tag.major](e,t){}[y.float.major](e,t){if(t.type.name==="break"){let i=this.inRecursive.pop();if(i){if(y.equals(i.type,y.array))e.push([93]);else if(y.equals(i.type,y.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(`${bn} 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=[],s=!1;for(let i=0;i<n.length;i++)o[i]=n.charCodeAt(i),!s&&(o[i]===46||o[i]===101||o[i]===69)&&(s=!0);s||(o.push(46),o.push(48)),e.push(o)}};function SC(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${bn} complex map keys are not supported`);let t=r[0],n=e[0];if(t.type!==y.string||n.type!==y.string)throw new Error(`${bn} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${bn} unexpected duplicate map keys, this is not supported`)}var AC={addBreakTokens:!0,mapSorter:SC};function Og(r,e){return e=Object.assign({},AC,e),Kd(r,new Ng,e)}var sa=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 N(y.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 s=String.fromCharCode.apply(null,this.data.subarray(e,this._pos)),i=parseFloat(s);return n?new N(y.float,i,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(i)?new N(i>=0?y.uint:y.negint,i,this._pos-e):new N(i>=0?y.uint:y.negint,BigInt(s),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 s=this._pos,i=0;s<this.data.length&&i<65536;s++,i++){let a=this.data[s];if(a===92||a<32||a>=128)break;if(a===34){let c=String.fromCharCode.apply(null,this.data.subarray(this._pos,s));return this._pos=s+1,new N(y.string,c,i)}}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 s=0;for(let i=0;i<4;i++){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}`);s=s*16+a,this._pos++}return s},o=()=>{let s=this.ch(),i=null,a=s>239?4:s>223?3:s>191?2:1;if(this._pos+a>this.data.length)throw new Error(`${J} unexpected unicode sequence at position ${this._pos}`);let c,l,d,u;switch(a){case 1:s<128&&(i=s);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(u=(s&31)<<6|c&63,u>127&&(i=u));break;case 3:c=this.data[this._pos+1],l=this.data[this._pos+2],(c&192)===128&&(l&192)===128&&(u=(s&15)<<12|(c&63)<<6|l&63,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:c=this.data[this._pos+1],l=this.data[this._pos+2],d=this.data[this._pos+3],(c&192)===128&&(l&192)===128&&(d&192)===128&&(u=(s&15)<<18|(c&63)<<12|(l&63)<<6|d&63,u>65535&&u<1114112&&(i=u))}i===null?(i=65533,a=1):i>65535&&(i-=65536,t.push(i>>>10&1023|55296),i=56320|i&1023),t.push(i),this._pos+=a};for(;!this.done();){let s=this.ch(),i;switch(s){case 92:if(this._pos++,this.done())throw new Error(`${J} unexpected string termination at position ${this._pos}`);switch(i=this.ch(),this._pos++,i){case 34:case 39:case 92:case 47:t.push(i);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 N(y.string,C7(t),this._pos-e);default:if(s<32)throw new Error(`${J} invalid control character at position ${this._pos}`);s<128?(t.push(s),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 N(y.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new N(y.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new N(y.null,null,4);case 102:return this.expect([102,97,108,115,101]),new N(y.false,!1,5);case 116:return this.expect([116,114,117,101]),new N(y.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 N(y.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 N(y.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 N(y.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 N(y.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 Mg(r,e){return e=Object.assign({tokenizer:new sa(r,e)},e),br(r,e)}function TC(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function _C(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=G.asCID(r);if(!e)return null;let t=e.toString();return[new N(y.map,1/0,1),new N(y.string,"/",1),new N(y.string,t,t.length),new N(y.break,void 0,1)]}function _f(r){let e=rt.encode(r).slice(1);return[new N(y.map,1/0,1),new N(y.string,"/",1),new N(y.map,1/0,1),new N(y.string,"bytes",5),new N(y.string,e,e.length),new N(y.break,void 0,1),new N(y.break,void 0,1)]}function Qr(r){return _f(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function CC(r){return _f(new Uint8Array(r))}function kC(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function PC(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 RC={typeEncoders:{Object:_C,Buffer:_f,Uint8Array:_f,Int8Array:Qr,Uint16Array:Qr,Int16Array:Qr,Uint32Array:Qr,Int32Array:Qr,Float32Array:Qr,Float64Array:Qr,Uint8ClampedArray:Qr,BigInt64Array:Qr,BigUint64Array:Qr,DataView:Qr,ArrayBuffer:CC,undefined:kC,number:PC}},Bg=class extends sa{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(y.equals(e.type,y.map)){let t=this._next();if(y.equals(t.type,y.string)&&t.value==="/"){let n=this._next();if(y.equals(n.type,y.string)){let o=this._next();if(!y.equals(o.type,y.break))throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new N(y.tag,42,0)}if(y.equals(n.type,y.map)){let o=this._next();if(y.equals(o.type,y.string)&&o.value==="bytes"){let s=this._next();if(y.equals(s.type,y.string)){for(let a=0;a<2;a++){let c=this._next();if(!y.equals(c.type,y.break))throw new Error("Invalid encoded Bytes form")}let i=rt.decode(`m${s.value}`);return new N(y.bytes,i,s.value.length)}this.tokenBuffer.push(s)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},Ug={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Ug.tags[42]=G.parse;var LC="dag-json",Fg=297,Jy=r=>Og(r,RC),e9=r=>{let e=TC(r),t=Object.assign(Ug,{tokenizer:new Bg(e,Ug)});return Mg(e,t)},DC=r=>NC.decode(Jy(r));var NC=new TextDecoder,OC=r=>e9(MC.encode(r)),MC=new TextEncoder;var zg={};et(zg,{code:()=>Wg,createLink:()=>u9,createNode:()=>l9,decode:()=>jC,encode:()=>YC,name:()=>GC,prepare:()=>Hg,validate:()=>qg});var BC=new TextDecoder;function Kg(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 Cf(r,e){let t;[t,e]=Kg(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 t9(r,e){let t;return[t,e]=Kg(r,e),[t&7,t>>3,e]}function UC(r){let e={},t=r.length,n=0;for(;n<t;){let o,s;if([o,s,n]=t9(r,n),s===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]=Cf(r,n)}else if(s===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 i;[i,n]=Cf(r,n),e.Name=BC.decode(i)}else if(s===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]=Kg(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${s}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function r9(r){let e=r.length,t=0,n,o=!1,s;for(;t<e;){let a,c;if([a,c,t]=t9(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(s)throw new Error("protobuf: (PBNode) duplicate Data section");[s,t]=Cf(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]=Cf(r,t),n.push(UC(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 i={};return s&&(i.Data=s),i.Links=n||[],i}var o9=new TextEncoder,n9=2**32,FC=2**31;function $C(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=cl(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=o9.encode(r.Name);t-=n.length,e.set(n,t),t=cl(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=cl(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function s9(r){let e=VC(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=cl(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let o=r.Links.length-1;o>=0;o--){let s=$C(r.Links[o],t.subarray(0,n));n-=s,n=cl(t,n,s)-1,t[n]=18}return t}function KC(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+ia(t)}if(typeof r.Name=="string"){let t=o9.encode(r.Name).length;e+=1+t+ia(t)}return typeof r.Tsize=="number"&&(e+=1+ia(r.Tsize)),e}function VC(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+ia(t)}if(r.Links)for(let t of r.Links){let n=KC(t);e+=1+n+ia(n)}return e}function cl(r,e,t){e-=ia(t);let n=e;for(;t>=FC;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function ia(r){return r%2===0&&r++,Math.floor((HC(r)+6)/7)}function HC(r){let e=0;return r>=n9&&(r=Math.floor(r/n9),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+qC[r]}var qC=[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 WC=["Data","Links"],zC=["Hash","Name","Tsize"],Vg=new TextEncoder;function a9(r,e){if(r===e)return 0;let t=r.Name?Vg.encode(r.Name):[],n=e.Name?Vg.encode(e.Name):[],o=t.length,s=n.length;for(let i=0,a=Math.min(o,s);i<a;++i)if(t[i]!==n[i]){o=t[i],s=n[i];break}return o<s?-1:s<o?1:0}function i9(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function c9(r){if(typeof r.asCID=="object"){let t=G.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=G.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=G.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=G.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 Hg(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=Vg.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(c9),e.Links.sort(a9);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function qg(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!i9(r,WC))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(!i9(t,zC))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&&a9(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function l9(r,e=[]){return Hg({Data:r,Links:e})}function u9(r,e,t){return c9({Hash:t,Name:r,Tsize:e})}function d9(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var GC="dag-pb",Wg=112;function YC(r){qg(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),s9(e)}function jC(r){let e=d9(r),t=r9(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let s={};try{s.Hash=G.decode(o.Hash)}catch{}if(!s.Hash)throw new Error("Invalid Hash field found in link, expected CID");return o.Name!==void 0&&(s.Name=o.Name),o.Tsize!==void 0&&(s.Tsize=o.Tsize),s})),n}function aa(r){return r?.then!=null}function f9(r=[],e){let t={[Wg]:zg,[Mn]:fs,[Lg]:Dg,[Fg]:$g,[l2]:Nu};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let s=e(n);aa(s)?o=await s:o=s,t[o.code]=o}if(o!=null)return o;throw new ol(`Could not load codec for ${n}`)}}function h9(r=[],e){let t={[ze.code]:ze,[Mu.code]:Mu,[dt.code]:dt};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let s=e(n);aa(s)?o=await s:o=s,t[o.code]=o}if(o!=null)return o;throw new nl(`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 Rr=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,bytes:o}of e)await this.put(n,o,t),yield n}get(e,t){throw new Error(".get is not implemented")}async*getMany(e,t){for await(let n of e)yield{cid:n,bytes: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 kf=0,ca=class extends Error{static name="IdentityHashDigestTooLongError";name="IdentityHashDigestTooLongError"},Pf=class extends Jn{child;maxDigestLength;constructor(e,t){super(),this.child=e,this.maxDigestLength=t?.maxDigestLength}put(e,t,n){if(e.multihash.code===kf){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new ca(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);return n?.signal?.throwIfAborted(),e}return this.child==null?(n?.signal?.throwIfAborted(),e):this.child.put(e,t,n)}async*get(e,t){if(e.multihash.code===kf){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new ca(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);t?.signal?.throwIfAborted(),yield e.multihash.digest;return}if(this.child==null)throw t?.signal?.throwIfAborted(),new Rr;yield*this.child.get(e,t)}has(e,t){if(e.multihash.code===kf){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new ca(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);return t?.signal?.throwIfAborted(),!0}return this.child==null?(t?.signal?.throwIfAborted(),!1):this.child.has(e,t)}delete(e,t){if(e.code===kf){if(this.maxDigestLength!=null&&e.multihash.digest.byteLength>this.maxDigestLength)throw new ca(`Identity digest too long - ${e.multihash.digest.byteLength} > this.maxDigestLength`);t?.signal?.throwIfAborted();return}if(this.child!=null)return this.child.delete(e,t)}async*getAll(e){this.child!=null&&(yield*this.child.getAll(e)),e?.signal?.throwIfAborted()}};function XC(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 la=XC;function QC(r){return r[Symbol.asyncIterator]!=null}function ZC(r,e){let t=0;if(QC(r))return(async function*(){for await(let c of r)await e(c,t++)&&(yield c)})();let n=la(r),{value:o,done:s}=n.next();if(s===!0)return(function*(){})();let i=e(o,t++);if(typeof i.then=="function")return(async function*(){await i&&(yield o);for(let c of n)await e(c,t++)&&(yield c)})();let a=e;return(function*(){i===!0&&(yield o);for(let c of n)a(c,t++)&&(yield c)})()}var Zr=ZC;function JC(r){return r[Symbol.asyncIterator]!=null}function p9(r){return r?.then!=null}function ek(r,e){let t=0;if(JC(r))return(async function*(){for await(let c of r){let l=e(c,t++);p9(l)&&await l,yield c}})();let n=la(r),{value:o,done:s}=n.next();if(s===!0)return(function*(){})();let i=e(o,t++);if(typeof i?.then=="function")return(async function*(){await i,yield o;for(let c of n){let l=e(c,t++);p9(l)&&await l,yield c}})();let a=e;return(function*(){yield o;for(let c of n)a(c,t++),yield c})()}var Gg=ek;var tk=128,ua=class{child;getHasher;log;logger;blockBrokers;constructor(e,t={}){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.blockBrokers=e.blockBrokers,this.child=new Pf(e.blockstore,{maxDigestLength:t.maxIdentityHashDigestLength??tk}),this.getHasher=e.getHasher}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new H("blocks:put:duplicate",e)),e):(n.onProgress?.(new H("blocks:put:providers:notify",e)),await Promise.all(this.blockBrokers.map(async o=>o.announce?.(e,n))),n.onProgress?.(new H("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=Zr(e,async({cid:s})=>{let i=await this.child.has(s,t);return i&&t.onProgress?.(new H("blocks:put-many:duplicate",s)),!i}),o=Gg(n,async({cid:s})=>{t.onProgress?.(new H("blocks:put-many:providers:notify",s)),await Promise.all(this.blockBrokers.map(async i=>i.announce?.(s,t)))});t.onProgress?.(new H("blocks:put-many:blockstore:put-many")),yield*this.child.putMany(o,t)}async*get(e,t={}){let n=await this.child.has(e,t),o=t.offline===!0;if(!n){if(o)throw new tl("The block was present in the blockstore and the node is running offline so cannot fetch it");let s=await this.getHasher(e.multihash.code);t?.signal?.throwIfAborted(),t.onProgress?.(new H("blocks:get:providers:get",e));let i=await m9(e,this.blockBrokers,s,{...t,log:this.log});t.onProgress?.(new H("blocks:get:blockstore:put",e)),await this.child.put(e,i,t),t.onProgress?.(new H("blocks:get:providers:notify",e)),await Promise.all(this.blockBrokers.map(async a=>a.announce?.(e,t))),yield i;return}t.onProgress?.(new H("blocks:get:blockstore:get",e)),yield*this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new H("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(Gg(e,async n=>{let o=await this.child.has(n,t),s=t.offline===!0;if(!o){if(s)throw new tl("The block was present in the blockstore and the node is running offline so cannot fetch it");let i=await this.getHasher(n.multihash.code);t?.signal?.throwIfAborted(),t.onProgress?.(new H("blocks:get-many:providers:get",n));let a=await m9(n,this.blockBrokers,i,{...t,log:this.log});t.onProgress?.(new H("blocks:get-many:blockstore:put",n)),await this.child.put(n,a,t),t.onProgress?.(new H("blocks:get-many:providers:notify",n)),await Promise.all(this.blockBrokers.map(async c=>c.announce?.(n,t)))}}))}async delete(e,t={}){t.onProgress?.(new H("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new H("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 H("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}};async function m9(r,e,t,n){let o=nk(r,t),s=new AbortController,i=le([s.signal,n.signal]);s.signal;let a=[];for(let c of e)rk(c)&&a.push(c);if(a.length===0)throw new Hs(`No block brokers capable of retrieving blocks are configured, the CID ${r} cannot be fetched from the network`);try{return await Promise.any(a.map(async c=>{try{let l=!1,d=await c.retrieve(r,{...n,signal:i,validateFn:async u=>{await o(u),n.signal?.throwIfAborted(),l=!0}});return l||(await o(d),n.signal?.throwIfAborted()),d}catch(l){throw n.log.error("could not retrieve verified block for %c from %s - %e",r,c.name,l),l}}))}catch(c){throw new of(c.errors,`Failed to load block for ${r}`)}finally{s.abort(),i.clear()}}function rk(r){return typeof r.retrieve=="function"}var nk=(r,e)=>{if(e==null)throw new A(`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,{truncate:r.multihash.digest.byteLength});if(aa(o)?n=await o:n=o,!ee(n.digest,r.multihash.digest))throw new bo("Hash of downloaded block did not match multihash from passed CID")}};var Rf=class extends ua{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 addPeer(e,t){await Promise.all(this.blockBrokers.map(n=>n.addPeer(e,t)))}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{yield*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()}}};var Lf=class extends ua{started;constructor(e,t={}){super(e,t),this.started=!1}isStarted(){return this.started}async start(){await at(this.child,...this.blockBrokers),this.started=!0}async stop(){await lt(this.child,...this.blockBrokers),this.started=!1}unwrap(){return this.child}createSession(e,t){if(this.blockBrokers.length===0)throw new Hs("No block brokers configured");let n=this.blockBrokers.map(o=>o.createSession?.(t)).filter(o=>o!=null);if(n.length===0)throw new Hs(`No configured block brokers support sessions - tried ${this.blockBrokers.map(o=>o.name).join(", ")}`);return new Rf({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}};var zs=class extends ie{initialPeerSearchComplete;requests;logName;log;logger;minProviders;maxProviders;providers;evictionFilter;initialProviders;cidPeerFilterSize;constructor(e,t){super(),this.logName=t.name,this.logger=e.logger,this.log=e.logger.forComponent(this.logName),this.requests=new Map,this.minProviders=t.minProviders??1,this.maxProviders=t.maxProviders??5,this.cidPeerFilterSize=t.cidPeerFilterSize??100,this.providers=[],this.evictionFilter=Et(this.maxProviders),this.initialProviders=[...t.providers??[]]}async retrieve(e,t={}){let n=rt.encode(e.multihash.bytes),o=this.requests.get(n);if(o!=null)return this.log("join existing request for %c",e),o.observers++,o.promise;let s=fe(),i={promise:s.promise,observers:1,queryFilter:Et(this.cidPeerFilterSize)};this.requests.set(n,i);let a=!1;this.initialPeerSearchComplete==null&&(a=!0,this.log=this.logger.forComponent(`${this.logName}:${e}`),this.initialPeerSearchComplete=this.findProviders(e,this.minProviders,t));let c=!1,l=new St({concurrency:this.maxProviders});l.addEventListener("failure",f=>{this.log.error("error querying provider %s, evicting from session - %e",f.detail.job.options.provider,f.detail.error),this.evict(f.detail.job.options.provider)}),l.addEventListener("success",f=>{c=!0,s.resolve(f.detail.result)}),l.addEventListener("idle",()=>{if(c){this.log.trace("session idle, found block");return}if(t.signal?.aborted===!0){this.log.trace("session idle, signal aborted");return}Promise.resolve().then(async()=>{this.log("no session peers had block for for %c, finding new providers",e);for(let f=0;f<this.minProviders&&this.providers.length!==0;f++){let h=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(h)}await this.findProviders(e,this.minProviders,t),this.log("found new providers re-retrieving %c",e),this.requests.delete(n),s.resolve(await this.retrieve(e,t))}).catch(f=>{this.log.error("could not find new providers for %c - %e",e,f),s.reject(f)})});let d=f=>{let h=this.toFilterKey(f.detail);i.queryFilter.has(h)||(i.queryFilter.add(h),this.emitFoundProviderProgressEvent(e,f.detail,t),l.add(async()=>this.queryProvider(e,f.detail,t),{provider:f.detail}).catch(p=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c - %e",e,p)}))};if(this.addEventListener("provider",d),a)try{await Pe(this.initialPeerSearchComplete,t.signal),a&&this.log("found initial session peers for %c",e)}catch(f){throw a&&this.log("failed to find initial session peers for %c - %e",e,f),this.requests.delete(n),i.observers>1&&s.reject(f),f}Promise.all([...this.providers].filter(f=>{let h=this.toFilterKey(f),p=i.queryFilter.has(h);return p||i.queryFilter.add(this.toFilterKey(f)),!p}).map(async f=>l.add(async()=>this.queryProvider(e,f,t),{provider:f}))).catch(f=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c - %e",e,f)});let u=()=>{s.reject(new Vt(t.signal?.reason??"Session aborted")),l.abort()};t.signal?.addEventListener("abort",u);try{return await Pe(s.promise,t.signal)}finally{this.removeEventListener("provider",d),t.signal?.removeEventListener("abort",u),l.clear(),this.requests.delete(n)}}evict(e){this.evictionFilter.add(this.toFilterKey(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.toFilterKey(e))}hasProvider(e){return!!(this.providers.find(t=>this.equals(t,e))!=null||this.isEvicted(e))}async addPeer(e,t){let n=await this.convertToProvider(e,"manually-added",t);n==null||this.hasProvider(n)||(this.providers.push(n),this.safeDispatchEvent("provider",{detail:n}))}async findProviders(e,t,n){let o=fe(),s=0;return Promise.resolve().then(async()=>{if(this.log("finding %d-%d new provider(s) for %c - %d initial providers",t,this.maxProviders,e,this.initialProviders.length),this.initialProviders.length>0)for(;s<t&&this.initialProviders.length>0;){let i=this.initialProviders.pop();if(i==null)break;let a=await this.convertToProvider(i,"manual",n);if(n.signal?.aborted===!0)break;if(a!=null&&!this.hasProvider(a)&&(this.log("found %d/%d new providers",s,this.maxProviders),this.providers.push(a),this.safeDispatchEvent("provider",{detail:a}),s++,s===t&&(this.log("session is ready with %d peer(s), only initial peers present",t),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",s);break}}if(s<this.maxProviders)for await(let i of this.findNewProviders(e,n)){if(s===this.maxProviders||n.signal?.aborted===!0)break;if(!this.hasProvider(i)&&(this.log("found %d/%d new providers",s,this.maxProviders),this.providers.push(i),this.safeDispatchEvent("provider",{detail:i}),s++,s===t&&(this.log("session is ready with %d peer(s), new peers present",t),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",s);break}}if(this.log("found %d/%d new session peers",s,this.maxProviders),s<t)throw new rl(`Found ${s} of ${t} ${this.name} providers for ${e}`)}).catch(i=>{this.log.error("error searching routing for potential session peers for %c - %e",e,i),o.reject(i)}),o.promise}};var Df=class{libp2p;blockstore;datastore;events;pins;logger;routing;getCodec;getHasher;dns;metrics;log;constructor(e){this.logger=e.logger??e.libp2p.logger,this.log=this.logger.forComponent("helia"),this.getHasher=h9(e.hashers,e.loadHasher),this.getCodec=f9(e.codecs,e.loadCodec),this.dns=e.dns??$u(),this.metrics=e.metrics,this.libp2p=e.libp2p,this.events=new ie;let t={blockstore:e.blockstore,datastore:e.datastore,logger:this.logger,libp2p:this.libp2p,blockBrokers:[],getHasher:this.getHasher,getCodec:this.getCodec,dns:this.dns,metrics:this.metrics,...e.components??{}};this.routing=t.routing=new cf(t,{routers:(e.routers??[]).flatMap(o=>{typeof o=="function"&&(o=o(t));let s=[o],i=ok(o);i!=null&&s.push(i);let a=sk(o);return a!=null&&s.push(a),s}),providerLookupConcurrency:e.providerLookupConcurrency}),t.blockBrokers=e.blockBrokers.map(o=>o(t));let n=new Lf(t,e);this.pins=new af(e.datastore,n,this.getCodec),this.blockstore=new If(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore}async start(){await Xy(this.datastore),await at(this.blockstore,this.datastore,this.routing,this.libp2p),this.events.dispatchEvent(new CustomEvent("start",{detail:this}))}async stop(){await lt(this.blockstore,this.datastore,this.routing,this.libp2p),this.events.dispatchEvent(new CustomEvent("stop",{detail:this}))}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,o=this.blockstore.unwrap();this.log("gc start"),await er(o.deleteMany((async function*(){for await(let{cid:s}of o.getAll())try{if(await n.pins.isPinned(s,e))continue;yield s,e.onProgress?.(new H("helia:gc:deleted",s))}catch(i){n.log.error("error during gc - %e",i),e.onProgress?.(new H("helia:gc:error",i))}})()))}finally{t()}this.log("gc finished")}};function ok(r){return r?.[Dn]}function sk(r){return r?.[On]}function ik(r){return r[Symbol.asyncIterator]!=null}function ak(r,e){let t=0;if(ik(r))return(async function*(){for await(let c of r)yield e(c,t++)})();let n=la(r),{value:o,done:s}=n.next();if(s===!0)return(function*(){})();let i=e(o,t++);if(typeof i.then=="function")return(async function*(){yield await i;for(let c of n)yield e(c,t++)})();let a=e;return(function*(){yield i;for(let c of n)yield a(c,t++)})()}var Lr=ak;function ck(r){return r[Symbol.asyncIterator]!=null}function lk(r,e){return ck(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=lk;var ll="/ipfs/bitswap/1.2.0";var Ye;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(Ye||(Ye={}));var Yg;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(Yg||(Yg={}));(function(r){r.codec=()=>We(Yg)})(Ye||(Ye={}));var da;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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),Ye.codec().encode(t.wantType,n)),t.sendDontHave!=null&&(n.uint32(40),n.bool(t.sendDontHave)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={cid:ae(0),priority:0},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.cid=t.bytes();break}case 2:{s.priority=t.int32();break}case 3:{s.cancel=t.bool();break}case 4:{s.wantType=Ye.codec().decode(t);break}case 5:{s.sendDontHave=t.bool();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(da||(da={}));var Nf;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let s of t.entries)n.uint32(10),da.codec().encode(s,n);t.full!=null&&(n.uint32(16),n.bool(t.full)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={entries:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.entries!=null&&s.entries.length===o.limits.entries)throw new Ne('Decode error - map field "entries" had too many elements');s.entries.push(da.codec().decode(t,t.uint32(),{limits:o.limits?.entries$}));break}case 2:{s.full=t.bool();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Nf||(Nf={}));var fa;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={prefix:ae(0),data:ae(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.prefix=t.bytes();break}case 2:{s.data=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(fa||(fa={}));var Dr;(function(r){r.HaveBlock="HaveBlock",r.DoNotHaveBlock="DoNotHaveBlock"})(Dr||(Dr={}));var Of;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DoNotHaveBlock=1]="DoNotHaveBlock"})(Of||(Of={}));(function(r){r.codec=()=>We(Of)})(Dr||(Dr={}));var ha;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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&&Of[t.type]!==0&&(n.uint32(16),Dr.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={cid:ae(0),type:Dr.HaveBlock},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.cid=t.bytes();break}case 2:{s.type=Dr.codec().decode(t);break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(ha||(ha={}));var Gs;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),Nf.codec().encode(t.wantlist,n)),t.blocks!=null)for(let s of t.blocks)n.uint32(26),fa.codec().encode(s,n);if(t.blockPresences!=null)for(let s of t.blockPresences)n.uint32(34),ha.codec().encode(s,n);t.pendingBytes!=null&&t.pendingBytes!==0&&(n.uint32(40),n.int32(t.pendingBytes)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={blocks:[],blockPresences:[],pendingBytes:0},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.wantlist=Nf.codec().decode(t,t.uint32(),{limits:o.limits?.wantlist});break}case 3:{if(o.limits?.blocks!=null&&s.blocks.length===o.limits.blocks)throw new Ne('Decode error - map field "blocks" had too many elements');s.blocks.push(fa.codec().decode(t,t.uint32(),{limits:o.limits?.blocks$}));break}case 4:{if(o.limits?.blockPresences!=null&&s.blockPresences.length===o.limits.blockPresences)throw new Ne('Decode error - map field "blockPresences" had too many elements');s.blockPresences.push(ha.codec().decode(t,t.uint32(),{limits:o.limits?.blockPresences$}));break}case 5:{s.pendingBytes=t.int32();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Gs||(Gs={}));function g9(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 Mf=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var uk=4193648,dk=uk+16;function*y9(r,e){let t=[...r.wantlist.values()],n=[...r.blockPresences.values()],o=[...r.blocks.values()],s=0,i=0,a=0,c=!1;for(;;){let l={wantlist:{full:r.full??!1,entries:[]},blockPresences:[],blocks:[],pendingBytes:0},d=Gs.encode(l).byteLength,{added:u,hasMore:f,newSize:h}=jg(o,l.blocks,a,e,d,fk);a+=u,d=h;let p=f;({added:u,hasMore:f,newSize:h}=jg(n,l.blockPresences,i,e,d,hk)),i+=u,d=h;let g=f;if({added:u,hasMore:f,newSize:h}=jg(t,l.wantlist.entries,s,e,d,pk),s+=u,d=h,c=!p&&!g&&!f,c||(l.wantlist.full=!1),yield Gs.encode(l),c)break}}function jg(r,e,t,n,o,s){let i=0,a=!1;for(let c=t;c<r.length;c++){let l=r[c],d=s(l);if(d>dk)throw new Mf("Cannot send block as after encoding it is over the max message size");let u=o+d;if(u>n){a=!0;break}e.push(l),i++,o=u}return{hasMore:a,added:i,newSize:o}}function fk(r){return Xg(3,fa.encode(r))}function hk(r){return Xg(4,ha.encode(r))}function pk(r){return Xg(1,da.encode(r))}function Xg(r,e){let t=he(r),n=he(e.byteLength);return t+n+e.byteLength}var Bf=class extends ie{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??[ll],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 It({concurrency:t.messageSendConcurrency??50,metrics:e.metrics,metricName:"helia_bitswap_message_send_queue"})}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,t){this.running&&Promise.resolve().then(async()=>{this.log("incoming new bitswap %s stream from %p",e.protocol,t.remotePeer);let n=()=>{e.status==="open"?e.abort(new un(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`)):this.log("stream aborted with status %s",e.status)},o=AbortSignal.timeout(this.messageReceiveTimeout);o.addEventListener("abort",n),await e.close({signal:o});let s=vt();e.addEventListener("message",i=>{s.push(i.data)}),e.addEventListener("remoteCloseWrite",()=>{s.end()}),e.addEventListener("close",i=>{i.error!=null&&s.end(i.error)});for await(let i of Ks(s,{maxDataLength:this.maxIncomingMessageSize}))try{let a=Gs.decode(i);this.log("incoming new bitswap %s message from %p on stream",e.protocol,t.remotePeer,e.id),this.safeDispatchEvent("bitswap:message",{detail:{peer:t.remotePeer,message:a}}),o.removeEventListener("abort",n),o=AbortSignal.timeout(this.messageReceiveTimeout),o.addEventListener("abort",n)}catch(a){this.log.error("error reading incoming bitswap message from %p on stream - %e",t.remotePeer,e.id,a),e.abort(a);break}}).catch(n=>{this.log.error("error handling incoming stream from %p - %e",t.remotePeer,n),e.abort(n)})}async*findProviders(e,t){t?.onProgress?.(new H("bitswap:find-providers",e));for await(let n of this.routing.findProviders(e,t)){if(!await this.libp2p.isDialable(n.multiaddrs,{runOnLimitedConnection:this.runOnLimitedConnections})){this.log("skipping peer %p as they are not dialable - %a",n.id,n.multiaddrs);continue}t?.onProgress?.(new H("bitswap:found-provider",{type:"bitswap",cid:e,provider:n,routing:n.routing})),yield n}}async findAndConnect(e,t){t?.providers!=null&&await Promise.all(t.providers.map(async n=>this.connectTo(n).catch(o=>{this.log.error("could not connect to supplied provider - %e",o)}))),await er(Lr(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(s=>e.equals(s.options.peerId)&&s.status==="queued");if(o!=null){o.options.message=g9(o.options.message,t),await o.join({signal:n?.signal});return}await this.sendQueue.add(async s=>{let i=s?.message;if(i==null)throw new A("No message to send");this.log("sendMessage to %p",e),s?.onProgress?.(new H("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,ll,s);await a.closeRead();try{for(let c of y9(i,this.maxOutgoingMessageSize))a.send(Qn.single(c))||await a.onDrain(s);await a.close(s)}catch(c){s?.onProgress?.(new H("bitswap:network:send-wantlist:error",{peer:e,error:c})),this.log.error("error sending message to %p - %e",e,c),a.abort(c)}this._updateSentStats(i.blocks)},{peerId:e,signal:n?.signal,message:t})}async connectTo(e,t){if(!this.running)throw new Ur("Network isn't running");t?.onProgress?.(new H("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),Xt(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(ll))return!0;throw new pi(`${e} did not support ${ll}`)}})]);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)}};var w9=Symbol.for("nodejs.util.inspect.custom"),Sk=114,ul=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()})`}[ku]=!0;toString(){return this.string==null&&(this.string=De.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return G.createV1(Sk,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return ee(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return ee(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[w9](){return`PeerId(${this.toString()})`}},dl=class extends ul{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},fl=class extends ul{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},hl=class extends ul{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},Ak=2336,pl=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=dt.digest(C(this.url))}[w9](){return`PeerId(${this.url})`}[ku]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return G.createV1(Ak,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=R(e)),e.toString()===this.toString())}};var Ik=114,b9=2336;function Me(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=ke(De.decode(`z${r}`));else{if(r.startsWith("k51qzi5uqu5")||r.startsWith("kzwfwjn5ji4")||r.startsWith("k2k4r8")||r.startsWith("bafz"))return Jr(G.parse(r));if(e==null)throw new A('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=ke(e.decode(r))}return Ze(t)}function xn(r){if(r.type==="Ed25519")return new fl({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new hl({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new dl({multihash:r.toCID().multihash,publicKey:r});throw new Fr}function E9(r){return xn(r.publicKey)}function Ze(r){if(_k(r))return new dl({multihash:r});if(Tk(r))try{let e=sd(r);if(e.type==="Ed25519")return new fl({multihash:r,publicKey:e});if(e.type==="secp256k1")return new hl({multihash:r,publicKey:e})}catch{let t=R(r.digest);return new pl(new URL(t))}throw new bo("Supplied PeerID Multihash is invalid")}function Jr(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==Ik&&r.code!==b9)throw new Au("Supplied PeerID CID is invalid");if(r.code===b9){let e=R(r.multihash.digest);return new pl(new URL(e))}return Ze(r.multihash)}function Tk(r){return r.code===dt.code}function _k(r){return r.code===ze.code}function Ys(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 Uf(r){let e=ke(De.decode(`z${r}`));return Ze(e)}var Ut=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 Ys(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 Ys(this.map.values(),e=>e.key)}values(){return Ys(this.map.values(),e=>e.value)}get size(){return this.map.size}};var xr=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 Ys(this.set.entries(),e=>{let t=Uf(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=Uf(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return Ys(this.set.values(),e=>Uf(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 Qg(){return new xr}var Ff=class{filter;constructor(e,t){this.filter=Et(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 Zg(r,e=.001){return new Ff(r,e)}var Jg=class extends Ut{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 eo(r){let{name:e,metrics:t}=r,n;return t!=null?n=new Jg({name:e,metrics:t}):n=new Ut,n}var to=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=rt.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=rt.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=rt.encode(e.multihash.bytes);this.blocks.set(n,t)}};function Ck(r){let e=new Uint8Array(r.reduce((n,o)=>n+he(o),0)),t=0;for(let n of r)e=Mt(n,e,t),t+=he(n);return e}var x9=Ck;function e3(r){return x9([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var $f=class{peerId;blockstore;network;wants;exchangeCount;bytesSent;bytesReceived;lastExchange;maxSizeReplaceHasWithBlock;log;doNotResendBlockWindow;maxWantListSize;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,this.doNotResendBlockWindow=t.doNotResendBlockWindow??5e3,this.maxWantListSize=t.maxWantListSize??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)}removeExpiredWants(){this.wants.forEach((e,t)=>{e.expires!=null&&e.expires<Date.now()&&this.wants.delete(t)})}addWants(e){if(e==null)return;e.full===!0&&this.wants.forEach((n,o)=>{n.status==="want"&&this.wants.delete(o)});for(let n of e.entries){let o=G.decode(n.cid),s=R(o.multihash.bytes,"base64");if(n.cancel===!0)this.log("peer %p cancelled want of block for %c",this.peerId,o),this.wants.delete(s);else{n.wantType===Ye.WantHave?this.log("peer %p wanted block presence for %c",this.peerId,o):this.log("peer %p wanted block for %c",this.peerId,o);let i=this.wants.get(s);if(i!=null){let a=i.status==="sent"||i.status==="sending",c=i.wantType===Ye.WantHave&&(n.wantType==null||n.wantType===Ye.WantBlock);a&&c&&(i.status="want"),i.priority=n.priority,i.wantType=n.wantType??Ye.WantBlock,i.sendDontHave=n.sendDontHave??!1;continue}this.wants.set(s,{cid:o,priority:n.priority,wantType:n.wantType??Ye.WantBlock,sendDontHave:n.sendDontHave??!1,status:"want",created:Date.now()})}}let t=[...this.wants.entries()].filter(([n,o])=>o.status==="want");t.length>this.maxWantListSize&&this.truncateWants(t)}truncateWants(e){e=e.sort((n,o)=>n[1].created<o[1].created?-1:o[1].created<n[1].created?1:0).sort((n,o)=>n[1].haveBlock===!1?-1:o[1].haveBlock===!1?1:0).sort((n,o)=>n[1].priority<o[1].priority?-1:o[1].priority<n[1].priority?1:0);let t=e.length-this.maxWantListSize;for(let n=0;n<t;n++)this.wants.delete(e[n][0])}getWants(){return[...this.wants.values()]}hasWant(e){let t=R(e.multihash.bytes,"base64");return this.wants.has(t)}async sendBlocksToPeer(e){let t=new to,n=new Set;this.removeExpiredWants();let o=[...this.wants.entries()].filter(([s,i])=>i.status==="want");o.forEach(([s,i])=>{i.status="sending"});for(let[s,i]of o)try{let a=await Jd(this.blockstore.get(i.cid,e));if(i.status!=="sending")continue;i.wantType===Ye.WantHave?a.byteLength<this.maxSizeReplaceHasWithBlock?(this.log("sending have and block for %c",i.cid),n.add(s),t.addBlock(i.cid,{data:a,prefix:e3(i.cid)})):(this.log("sending have for %c",i.cid),t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Dr.HaveBlock})):(this.log("sending block for %c",i.cid),n.add(s),t.addBlock(i.cid,{data:a,prefix:e3(i.cid)})),i.status="sent",i.expires=Date.now()+this.doNotResendBlockWindow}catch(a){if(a.name!=="NotFoundError")throw a;if(i.status="want",i.haveBlock=!1,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:Dr.DoNotHaveBlock})}(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((s,i)=>s+i.data.byteLength,0)))}};var Kf=class{blockstore;network;ledgerMap;maxSizeReplaceHasWithBlock;doNotResendBlockWindow;maxWantListSize;log;logger;constructor(e,t={}){this.blockstore=e.blockstore,this.network=e.network,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock,this.doNotResendBlockWindow=t.doNotResendBlockWindow,this.maxWantListSize=t.maxWantListSize,this.log=e.logger.forComponent("helia:bitswap:peer-want-lists"),this.logger=e.logger,this.ledgerMap=eo({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 - %e",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.removeExpiredWants(),t.getWants()}peers(){return Array.from(this.ledgerMap.values()).map(e=>e.peerId)}async receiveMessage(e,t){let n=this.ledgerMap.get(e);n==null&&(n=new $f({peerId:e,blockstore:this.blockstore,network:this.network,logger:this.logger},{maxSizeReplaceHasWithBlock:this.maxSizeReplaceHasWithBlock,doNotResendBlockWindow:this.doNotResendBlockWindow,maxWantListSize:this.maxWantListSize}),this.ledgerMap.set(e,n)),n.receivedBytes(t.blocks?.reduce((o,s)=>o+s.data.byteLength,0)??0),n.removeExpiredWants(),n.addWants(t.wantlist),this.log("send blocks to peer"),await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=[];for(let o of this.ledgerMap.values())o.hasWant(e)&&n.push(o);await Promise.all(n.map(async o=>o.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};var t3=class extends zs{name="bitswap-session";wantList;network;libp2p;constructor(e,t){super(e,{...t,name:"helia:bitswap:session"}),this.wantList=e.wantList,this.network=e.network,this.libp2p=e.libp2p}async queryProvider(e,t,n){this.log("sending WANT-BLOCK for %c to %p",e,t);let o=await this.wantList.wantSessionBlock(e,t.peerId,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{peerId:n.id,routing:n.routing}}toFilterKey(e){return e.peerId.toMultihash().bytes}equals(e,t){return e.peerId.equals(t.peerId)}async convertToProvider(e,t,n){if(Rt(e))return{peerId:e,routing:t};if(await this.libp2p.isDialable(e)!==!1)try{return{peerId:(await this.libp2p.dial(e,n)).remotePeer,routing:t}}catch{}}emitFoundProviderProgressEvent(e,t,n){n?.onProgress?.(new H("bitswap:found-provider",{type:"bitswap",cid:e,provider:{id:t.peerId,multiaddrs:[],routing:t.routing},routing:t.routing}))}};function v9(r,e){return new t3(r,e)}var Vf=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)}};function kk(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=hr(r);e.push(t),r=r.slice(he(t))}return e}var S9=kk;var Hf=class extends ie{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),this.peers=eo({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=ot({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 - %e",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 - %e",n.detail,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}async addEntry(e,t){let n=R(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,priority:t.priority??1,wantType:t.wantType??Ye.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,o)),o.wantType===Ye.WantHave&&t.wantType===Ye.WantBlock&&(o.wantType=Ye.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===Ye.WantBlock?(await Xt(this,"block",t?.signal,{filter:a=>ee(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await Xt(this,"presence",t?.signal,{filter:i=>ee(e.multihash.digest,i.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",e)})},this.sendMessagesDelay)}async sendMessages(){this.sendingMessages=fe(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o=new to;for(let[s,i]of this.wants.entries())t.has(s)||i.cancel||(n.add(s),o.addWantlistEntry(i.cid,{cid:i.cid.bytes,priority:i.priority,wantType:i.wantType,cancel:i.cancel,sendDontHave:i.sendDontHave}));if(o.wantlist.size!==0)try{await this.network.sendMessage(e,o);for(let s of n)t.add(s)}catch(s){this.log.error("error sending full wantlist to new peer - %e",s)}})).catch(e=>{this.log.error("error sending messages - %e",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=R(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let o=new to;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:Ye.WantHave,priority:1}),await this.network.sendMessage(t,o),(await Xt(this,"presence",n.signal,{filter:i=>t.equals(i.detail.sender)&&ee(e.multihash.digest,i.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:Ye.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new to;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:Ye.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await Xt(this,"presence",n.signal,{filter:i=>t.equals(i.detail.sender)&&ee(e.multihash.digest,i.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=R(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 s=S9(o.prefix),i=s[0],a=s[1],c=s[2],l=s[3],d=c===ze.code?ze:await this.hashLoader?.getHasher(c);if(d==null){this.log.error("unknown hash algorithm",c);continue}let u=d.digest(o.data,{truncate:l});u.then!=null&&(u=await u);let f=G.create(i===0?0:1,a,u);this.log("received block from %p for %c",e,f),this.safeDispatchEvent("block",{detail:{sender:e,cid:f,block:o.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:f,has:!0,block:o.data}});let h=R(f.multihash.bytes,"base64"),p=this.wants.get(h);p!=null&&(p.cancel=!0,n=!0)}for(let{cid:o,type:s}of t.blockPresences){let i=G.decode(o);this.log("received %s from %p for %c",s,e,i),this.safeDispatchEvent("presence",{detail:{sender:e,cid:i,has:s===Dr.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new to(!0);for(let[o,s]of this.wants.entries())s.cancel||(t.add(o),n.addWantlistEntry(s.cid,{cid:s.cid.bytes,priority:1,wantType:Ye.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",e,o)}}peerDisconnected(e){this.peers.delete(e)}start(){}stop(){this.peers.clear(),clearTimeout(this.sendMessagesTimeout)}};var qf=class{log;logger;stats;network;blockstore;peerWantLists;wantList;libp2p;constructor(e,t={}){this.logger=e.logger,this.log=e.logger.forComponent("helia:bitswap"),this.blockstore=e.blockstore,this.libp2p=e.libp2p,this.stats=new Vf(e),this.network=new Bf(e,t),this.peerWantLists=new Kf({...e,network:this.network},t),this.wantList=new Hf({...e,network:this.network},t)}createSession(e={}){return v9({wantList:this.wantList,network:this.network,logger:this.logger,libp2p:this.libp2p},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(s=>{n.signal.aborted||this.log.error("error during finding and connect for cid %c - %e",e,s)});try{let s=await this.wantList.wantBlock(e,{...t,signal:o});return t.onProgress?.(new H("bitswap:block",{cid:e,sender:s.sender})),s.block}finally{n.abort(),o.clear()}}async notify(e,t={}){await Promise.all([this.peerWantLists.receivedBlock(e,t),this.wantList.receivedBlock(e,t)])}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 A9=(r,e={})=>new qf(r,e);var r3=class{name="bitswap";bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=A9(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){await this.bitswap.notify(e,t)}async retrieve(e,t={}){return this.bitswap.want(e,t)}createSession(e){let t=this.bitswap.createSession(e);return{name:"bitswap-session",addPeer:async(n,o)=>{await t.addPeer(n,o)},announce:async(n,o)=>{await this.bitswap.notify(n,o)},retrieve:async(n,o)=>t.retrieve(n,o)}}};function n3(r={}){return e=>new r3(e,r)}var Pk=[6,53,56,54,55];function I9(r){return C9("sni",r)?.value}function T9(r){let e=C9("tcp",r)?.value;return e==null?"":`:${e}`}function C9(r,e){return e.find(t=>t.name===r)}function _9(r){return r.some(({code:e})=>e===448)}function en(r,e){let t=k9[r.name];if(t==null)throw new Error(`Can't interpret protocol ${r.name}`);let n=t(r,e);return r.code===41?`[${n}]`:n}var k9={ip4:(r,e)=>r.value,ip6:(r,e)=>e.length===0?r.value:`[${r.value}]`,tcp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`tcp://${en(t,e)}:${r.value}`},udp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`udp://${en(t,e)}:${r.value}`},dnsaddr:(r,e)=>r.value,dns4:(r,e)=>r.value,dns6:(r,e)=>r.value,dns:(r,e)=>r.value,ipfs:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${en(t,e)}`},p2p:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${en(t,e)}`},http:(r,e)=>{let t=_9(e),n=I9(e),o=T9(e);if(t&&n!=null)return`https://${n}${o}`;let s=t?"https://":"http://",i=e.pop();if(i==null)throw new Error("Unexpected end of multiaddr");let a=en(i,e);return a=a?.replace("tcp://",""),`${s}${a}`},"http-path":(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=en(t,e),o=decodeURIComponent(r.value??"");return`${n}${o}`},tls:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return en(t,e)},sni:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return en(t,e)},https:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=en(t,e);return n=n?.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=_9(e),n=I9(e),o=T9(e);if(t&&n!=null)return`wss://${n}${o}`;let s=t?"wss://":"ws://",i=e.pop();if(i==null)throw new Error("Unexpected end of multiaddr");let a=en(i,e);return a=a?.replace("tcp://",""),`${s}${a}`},wss:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=en(t,e);return n=n?.replace("tcp://",""),`wss://${n}`}};function qo(r,e){let n=q(r).getComponents(),o=n.pop();if(o==null)throw new Error("Unexpected end of multiaddr");let s=k9[o.name];if(s==null)throw new Error(`No interpreter found for ${o.name}`);let i=s(o,n)??"";return e?.assumeHttp!==!1&&Pk.includes(o.code)&&(i=i.replace(/^.*:\/\//,""),o.value==="443"?i=`https://${i}`:i=`http://${i}`),(i.startsWith("http://")||i.startsWith("https://")||i.startsWith("ws://")||i.startsWith("wss://"))&&(i=new URL(i).toString(),i.endsWith("/")&&(i=i.substring(0,i.length-1))),i}var _e=r=>({match:e=>{let t=e[0];return t==null||t.code!==r||t.value!=null?!1:e.slice(1)}}),se=(r,e)=>({match:t=>{let n=t[0];return n?.code!==r||n.value==null||e!=null&&n.value!==e?!1:t.slice(1)}}),P9=r=>({match:e=>r.match(e)===!1?e:!1}),ge=r=>({match:e=>{let t=r.match(e);return t===!1?e:t}}),Ft=(...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}}),ve=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e}});function Ce(...r){function e(o){if(o==null)return!1;let s=o.getComponents();for(let i of r){let a=i.match(s);if(a===!1)return!1;s=a}return s}function t(o){return e(o)!==!1}function n(o){let s=e(o);return s===!1?!1:s.length===0}return{matchers:r,matches:t,exactMatch:n}}var Rk=se(421),R9=Ce(Rk),zf=se(54),Gf=se(55),Yf=se(56),s3=se(53),pX=Ce(zf,ge(se(421))),mX=Ce(Gf,ge(se(421))),gX=Ce(Yf,ge(se(421))),jf=Ce(Ft(s3,Yf,zf,Gf),ge(se(421))),L9=ve(se(4),ge(se(43))),D9=ve(ge(se(42)),se(41),ge(se(43))),i3=Ft(L9,D9),js=Ft(i3,s3,zf,Gf,Yf),N9=Ce(Ft(i3,ve(Ft(s3,Yf,zf,Gf),ge(se(421))))),a3=Ce(L9),c3=Ce(D9),O9=Ce(i3),l3=ve(js,se(6)),ml=ve(js,se(273)),Xs=Ce(ve(l3,ge(se(421)))),yX=Ce(ml),u3=ve(ml,_e(460),ge(se(421))),Xf=ve(ml,_e(461),ge(se(421))),Lk=Ft(u3,Xf),wX=Ce(u3),M9=Ce(Xf),o3=Ft(js,l3,ml,u3,Xf),B9=Ft(ve(o3,_e(477),ge(se(421)))),ro=Ce(B9),U9=Ft(ve(o3,_e(478),ge(se(421))),ve(o3,_e(448),ge(se(449)),_e(477),ge(se(421)))),Qs=Ce(U9),F9=ve(ml,_e(280),ge(se(466)),ge(se(466)),ge(se(421))),gl=Ce(F9),$9=ve(Xf,_e(465),ge(se(466)),ge(se(466)),ge(se(421))),d3=Ce($9),Wf=Ft(B9,U9,ve(l3,ge(se(421))),ve(Lk,ge(se(421))),ve(js,ge(se(421))),F9,$9,se(421)),pa=Ce(Wf),Dk=ve(ge(Wf),_e(290),P9(_e(281)),ge(se(421))),yt=Ce(Dk),Nk=Ft(ve(Wf,_e(290),_e(281),ge(se(421))),ve(Wf,_e(281),ge(se(421))),ve(_e(281),ge(se(421)))),yl=Ce(Nk),Ok=Ft(ve(js,se(6),_e(480),ge(se(421))),ve(js,_e(480),ge(se(421)))),K9=Ce(Ok),Mk=ve(js,Ft(ve(se(6,"443"),_e(480)),ve(se(6),_e(443)),ve(se(6),_e(448),_e(480)),ve(_e(448),_e(480)),_e(448),_e(443)),ge(se(421))),V9=Ce(Mk),Bk=Ft(ve(se(777),ge(se(421)))),bX=Ce(Bk),Uk=Ft(ve(se(400),ge(se(421)))),EX=Ce(Uk);function f3(r,e,t){return r.filter(n=>{if(V9.matches(n)||e&&K9.matches(n))return t||jf.matches(n)?!0:Qe(n)===!1;if(!e&&t){let{host:o}=oe(n);if(o==="127.0.0.1"||o==="localhost"||o.endsWith(".localhost"))return!0}return!1})}async function*Qf(r,e,t,n,o,s={}){for await(let i of e.findProviders(r,s)){let a=f3(i.multiaddrs,n,o);if(a.length===0)continue;let c=new URL(qo(a[0]));yield new ma(c,{logger:t,transformRequestInit:s.transformRequestInit,routing:i.routing})}}async function H9(r,e,t){let{signal:n,log:o}=t??{},s=r.headers.get("content-length");if(s!=null){let c=parseInt(s,10);if(c>e)throw o?.error("content-length header (%d) is greater than the limit (%d)",c,e),r.body!=null&&await r.body.cancel().catch(l=>{o?.error("error cancelling response body after content-length check - %e",l)}),new Error(`Content-Length header (${c}) is greater than the limit (${e}).`)}let i=r.body?.getReader();if(i==null)throw new Error("Response body is not readable");let a=new X;try{for(;;){if(n?.aborted===!0)throw new Error("Response body read was aborted.");let{done:c,value:l}=await i.read();if(c)break;if(a.append(l),a.byteLength>e)throw new Error(`Response body is greater than the limit (${e}), received ${a.byteLength} bytes.`)}}finally{i.cancel().catch(c=>{o?.error("error cancelling reader - %e",c)}).finally(()=>{i.releaseLock()})}return a.subarray()}var ma=class{url;#e=0;#t=0;#r=0;#a=0;#c=new Map;log;transformRequestInit;routing;constructor(e,{logger:t,transformRequestInit:n,routing:o}){this.url=e instanceof URL?e:new URL(e),this.transformRequestInit=n,this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.host}`),this.routing=o}#m(e){let t=e.multihash.bytes;return rt.encode(t)}async getRawBlock(e,{signal:t,maxSize:n=q9}={}){let o=new URL(this.url.toString());if(o.pathname=`/ipfs/${e.toString()}`,o.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 s=this.#m(e),i=new AbortController,a=()=>{i.abort()};t?.addEventListener("abort",a);try{let c=this.#c.get(s);if(c==null){this.#e++;let l={signal:i.signal,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"},d=this.transformRequestInit!=null?await this.transformRequestInit(l):l,u=new Headers(d.headers);this.log(`sending request
14
14
  %s %s HTTP/1.1
15
15
  %s
16
16
  `,d.method??"GET",o,[...u.entries()].map(([f,h])=>`${f}: ${h}`).join(`
@@ -18,7 +18,7 @@ ${e}[Error list was empty]`,t.trim()}return Ry(r,e)}rr.formatters.e=r=>r==null?"
18
18
  HTTP/1.1 %d %s
19
19
  %s
20
20
  `,f.status,f.statusText,[...f.headers.entries()].map(([p,g])=>`${p}: ${g}`).join(`
21
- `)),!f.ok)throw this.#t++,new Error(`Unable to fetch raw block for CID ${e} from gateway ${this.url}, received ${f.status} ${f.statusText}`);let h=await H9(f,n,{signal:i.signal,log:this.log});return this.#a++,h}),this.#c.set(s,c)}return await c}catch(c){throw t?.aborted===!0?new Error(`Fetching raw block for CID ${e} from gateway ${this.url} was aborted`):(this.#t++,new Error(`Unable to fetch raw block for CID ${e} - ${c.message}`))}finally{t?.removeEventListener("abort",a),this.#c.delete(s)}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#a/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}getStats(){return{attempts:this.#e,errors:this.#t,invalidBlocks:this.#r,successes:this.#a,pendingResponses:this.#c.size}}toString(){return`TrustlessGateway(${this.url})`}};var h3=class extends Ws{name="trustless-gateway-session";routing;allowInsecure;allowLocal;transformRequestInit;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??Zf,this.allowLocal=t.allowLocal??Jf,this.transformRequestInit=t.transformRequestInit}async queryProvider(e,t,n){this.log("fetching BLOCK for %c from %s",e,t.url);let o=await t.getRawBlock(e,n);return this.log.trace("got block for %c from %s",e,t.url),await n.validateFn?.(o),o}async*findNewProviders(e,t={}){yield*Xf(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})}toFilterKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}async convertToProvider(e,t,n){if(Rt(e))return;let o=f3(Array.isArray(e)?e:[e],this.allowInsecure,this.allowLocal);if(o.length===0)return;let s=qo(o[0]);return new ma(s,{logger:this.logger,transformRequestInit:this.transformRequestInit,routing:t})}emitFoundProviderProgressEvent(e,t,n){n?.onProgress?.(new H("trustless-gateway:found-provider",{type:"trustless-gateway",cid:e,url:t.url.toJSON(),routing:t.routing}))}};function z9(r,e){return new h3(r,e)}var eh=class{name="trustless-gateway";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??Zf,this.allowLocal=t.allowLocal??Jf,this.transformRequestInit=t.transformRequestInit}async retrieve(e,t={}){let n=[];for await(let o of Xf(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 s=await o.getRawBlock(e,t);this.log.trace("got block for %c from %s",e,o.url);try{await t.validateFn?.(s)}catch(i){this.log.error("failed to validate block for %c from %s - %e",e,o.url,i);continue}return s}catch(s){if(this.log.error("failed to get block for %c from %s - %e",e,o.url,s),s instanceof Error?n.push(s):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 z9({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure,transformRequestInit:this.transformRequestInit})}};var Zf=!1,Jf=!1,q9=2097152;function p3(r={}){return e=>new eh(e,r)}async function*wl(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 qk=Ln(th(),1);var tn=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},rh=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},ga=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},nh=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},oh=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},sh=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},bl=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var or;(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=()=>ze(t)})(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.value!=null&&(s.uint32(10),s.bytes(o.value)),o.signatureV1!=null&&(s.uint32(18),s.bytes(o.signatureV1)),o.validityType!=null&&(s.uint32(24),r.ValidityType.codec().encode(o.validityType,s)),o.validity!=null&&(s.uint32(34),s.bytes(o.validity)),o.sequence!=null&&(s.uint32(40),s.uint64(o.sequence)),o.ttl!=null&&(s.uint32(48),s.uint64(o.ttl)),o.pubKey!=null&&(s.uint32(58),s.bytes(o.pubKey)),o.signatureV2!=null&&(s.uint32(66),s.bytes(o.signatureV2)),o.data!=null&&(s.uint32(74),s.bytes(o.data)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={},c=s==null?o.len:o.pos+s;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=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(or||(or={}));var Fk=Pr("ipns:utils"),W9=_("/ipns/");var $k=0,Kk=18;function G9(r){let e;if(r.pubKey!=null)try{e=et(r.pubKey)}catch(t){throw Fk.error(t),t}if(e!=null)return e}function Y9(r){let e=_("ipns-signature:");return Oe([e,r])}function El(r){return"signatureV1"in r?or.encode({value:_(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:_(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):or.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function vn(r){let e=or.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 tn("Missing data or signatureV2");let t=j9(e.data),n=Vk(t.Value),o=R(t.Validity);if(e.value!=null&&e.signatureV1!=null)return Hk(e),{value:n,validityType:or.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:or.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 xl(r){return Oe([W9,r.bytes])}function ya(r){let e=ke(r.slice(W9.length));if(!ih(e,$k)&&!ih(e,Kk))throw new bo("Multihash in IPNS key was not identity or sha2-256");return e}function j9(r){let e=br(r);if(e.ValidityType===0)e.ValidityType=or.ValidityType.EOL;else throw new ga("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 Vk(r){let e=R(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${G.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${G.parse(e).toV1().toString()}`}catch{}throw new oh("Value must be a valid content path starting with /")}function Hk(r){if(r.data==null)throw new sh("Record data is missing");let e=j9(r.data);if(!ee(e.Value,r.value??new Uint8Array(0)))throw new tn('Field "value" did not match between protobuf and CBOR');if(!ee(e.Validity,r.validity??new Uint8Array(0)))throw new tn('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new tn('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new tn('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new tn('Field "ttl" did not match between protobuf and CBOR')}function ih(r,e){return r.code===e}var fX=Pr("ipns"),hX=300*1e9,zk="/ipns/",pX=zk.length;var Q9=Ln(th(),1);var ah=Pr("ipns:validator"),Wk=1024*10;async function Gk(r,e){let t=vn(e),n;try{let o=Y9(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw ah.error("record signature verification failed"),new tn("Record signature verification failed");if(t.validityType===or.ValidityType.EOL){if(Q9.default.fromString(t.validity).toDate().getTime()<Date.now())throw ah.error("record has expired"),new rh("record has expired")}else if(t.validityType!=null)throw ah.error("the validity type is unsupported"),new ga("The validity type is unsupported");ah("ipns record for %s is valid",t.value)}async function ch(r,e){if(e.byteLength>Wk)throw new nh("The record is too large");let t=ya(r),n;ih(t,0)&&(n=sd(t));let o=vn(e),s=G9(o)??n;if(s==null)throw new bl("Could not extract public key from IPNS record or routing key");let i=xl(s.toMultihash());if(!ee(i,r))throw new bl("Embedded public key did not match routing key");await Gk(s,e)}var lh=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MESSAGE_LENGTH"};async function*wa(r,e={}){let t=/\r?\n/,n=new TextDecoder("utf8"),o="";for await(let s of r){if(typeof s=="string"&&(s=new TextEncoder().encode(s)),bi(s)&&(s=s.subarray()),o+=n.decode(s,{stream:!0}),o.length>(e?.maxMessageLength??o.length))throw new lh("Incoming message too long");let i=o.split(t);o=i.pop()??"";for(let a=0;a<i.length;a++)yield JSON.parse(i[a])}o+=n.decode(),o!==""&&(yield JSON.parse(o))}var Zs=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},Nr=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function Yk(r){return r[Symbol.asyncIterator]!=null}function jk(r){if(Yk(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var X9=jk;var Z9=_("/ipns/");function J9(r){return ee(r.subarray(0,Z9.byteLength),Z9)}var uh=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){try{yield*Lr(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[],routing:"delegated-http-routing-v1"}))}catch(n){if(n instanceof Le)return;throw n}}async provide(){}async cancelReprovide(){}async put(e,t,n){if(!J9(e))return;let o=ya(e),s=G.createV1(114,o),i=vn(t);await this.client.putIPNS(s,i,n)}async get(e,t){if(!J9(e))throw new Le("Not found");let n=ya(e),o=G.createV1(114,n);try{let s=await this.client.getIPNS(o,t);return El(s)}catch(s){throw s.name==="BadResponseError"?new Le("Not found"):s}}toString(){return`DelegatedRoutingV1HttpApiClientContentRouting(${this.client.url})`}},dh=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await X9(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new Le("Not found")}async*getClosestPeers(e,t={}){let n;try{n=G.decode(e)}catch{try{n=Xe(He.decode(e))}catch{n=G.createV1(Mn,dt.digest(e))}}for await(let o of this.client.getClosestPeers(n,t))yield{id:o.ID,multiaddrs:o.Addrs??[]}}toString(){return`DelegatedRoutingV1HttpApiClientPeerRouting(${this.client.url})`}};var fh={concurrentRequests:4,timeout:3e4,cacheTTL:300*1e3,cacheName:"delegated-routing-v1-cache"},hh=class{url;started;httpQueue;shutDownController;timeout;contentRouting;peerRouting;filterAddrs;filterProtocols;inFlightRequests;cacheName;cache;cacheTTL;log;constructor(e,t){this.log=e.logger.forComponent("delegated-routing-v1-http-api-client"),this.started=!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.httpQueue=new ds({concurrency:t.concurrentRequests??fh.concurrentRequests}),this.inFlightRequests=new Map,this.url=t.url instanceof URL?t.url:new URL(t.url),this.timeout=t.timeout??fh.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new uh(this),this.peerRouting=new dh(this),this.cacheName=t.cacheName??fh.cacheName,this.cacheTTL=t.cacheTTL??fh.cacheTTL}get[Dn](){return this.contentRouting}get[On](){return this.peerRouting}isStarted(){return this.started}async start(){this.started||(this.started=!0,this.cacheTTL>0&&(this.cache=await globalThis.caches?.open(this.cacheName),this.cache!=null&&this.log("cache enabled with ttl %d",this.cacheTTL)))}async stop(){this.httpQueue.clear(),this.shutDownController.abort(),await globalThis.caches?.delete(this.cacheName),this.started=!1}async*getProviders(e,t={}){this.log("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let s=fe(),i=fe(),a=0;this.httpQueue.add(async()=>(s.resolve(),i.promise));try{await s.promise;let c=new URL(`${this.url}routing/v1/providers/${e}`);this.#t(c,t.filterAddrs,t.filterProtocols);let l={headers:{accept:"application/x-ndjson, application/json;q=0.8"},signal:o},d=await this.#r(c.toString(),l);if(!d.ok){if(d.status===404)return;throw d.status===422?new Zs("Request does not conform to schema or semantic constraints"):new Nr(`Unexpected status code: ${d.status}`)}let u=d.headers.get("Content-Type");if(u==null)throw new Nr("No Content-Type header received");if(d.body==null){if(u!=="application/x-ndjson")throw new Nr("Routing response had no body");return}if(u.startsWith("application/json")){let h=(await d.json()).Providers??[];for(let p of h){let g=this.#e(p);g!=null&&(a++,yield g)}}else if(u.includes("application/x-ndjson"))for await(let f of wa(wl(d.body))){let h=this.#e(f);h!=null&&(a++,yield h)}else throw new Nr(`Unsupported Content-Type: ${u}`)}finally{o.clear(),i.resolve(),this.log("getProviders finished found %d providers for %c",a,e)}}async*getPeers(e,t={}){this.log("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let s=fe(),i=fe();this.httpQueue.add(async()=>(s.resolve(),i.promise));try{await s.promise;let a=new URL(`${this.url}routing/v1/peers/${e.toCID().toString()}`);this.#t(a,t.filterAddrs,t.filterProtocols);let c={headers:{Accept:"application/x-ndjson"},signal:o},l=await this.#r(a.toString(),c);if(l.status===404)return;if(l.status===422)throw new Zs("Request does not conform to schema or semantic constraints");if(l.body==null)throw new Nr("Routing response had no body");if(l.headers.get("Content-Type")?.startsWith("application/json")){let f=(await l.json()).Peers??[];for(let h of f){let p=this.#e(h);p!=null&&(yield p)}}else for await(let u of wa(wl(l.body))){let f=this.#e(u);f!=null&&(yield f)}}catch(a){this.log.error("getPeers errored - %e",a)}finally{o.clear(),i.resolve(),this.log("getPeers finished: %c",e)}}async*getClosestPeers(e,t={}){let n;if(Rt(e))n=e.toCID().toString();else if(G.asCID(e)===e||e instanceof G)n=e.toV1().toString();else throw new A("Key must be CID or PeerId");this.log("getClosestPeers starts: %s",n);let o=AbortSignal.timeout(this.timeout),s=le([this.shutDownController.signal,o,t.signal]);let i=fe(),a=fe();this.httpQueue.add(async()=>(i.resolve(),a.promise));try{await i.promise;let c=new URL(`${this.url}routing/v1/dht/closest/peers/${n}`);this.#t(c,t.filterAddrs,t.filterProtocols);let l={headers:{Accept:"application/x-ndjson"},signal:s},d=await this.#r(c.toString(),l);if(d.status===404)return;if(d.status===422)throw new Zs("Request does not conform to schema or semantic constraints");if(d.body==null)throw new Nr("Routing response had no body");if(d.headers.get("Content-Type")?.startsWith("application/json")){let h=(await d.json()).Peers??[];for(let p of h){let g=this.#e(p);g!=null&&(yield g)}}else for await(let f of wa(wl(d.body))){let h=this.#e(f);h!=null&&(yield h)}}catch(c){this.log.error("getClosestPeers errored - %e",c)}finally{s.clear(),a.resolve(),this.log("getClosestPeers finished: %s",n)}}async getIPNS(e,t={}){this.log("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let s=fe(),i=fe();this.httpQueue.add(async()=>(s.resolve(),i.promise));let a=`${this.url}routing/v1/ipns/${e}`;try{await s.promise;let c={headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o},l=await this.#r(a,c);if(this.log("getIPNS GET %s %d",a,l.status),l.status===404)throw new Le("No matching records found");if(l.status===422)throw new Zs("Request does not conform to schema or semantic constraints");if(!l.ok)throw new Nr(`Unexpected status code: ${l.status}`);let d=l.headers.get("Content-Type");if(d==null||!d.includes("application/vnd.ipfs.ipns-record"))throw new Le("No matching records found");if(l.body==null)throw new Nr("GET ipns response had no body");let u=await l.arrayBuffer(),f=new Uint8Array(u,0,u.byteLength);return t.validate!==!1&&await ch(xl(e.multihash),f),vn(f)}catch(c){throw this.log.error("getIPNS GET %s error - %e",a,c),c}finally{o.clear(),i.resolve(),this.log("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){this.log("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),s=le([this.shutDownController.signal,o,n.signal]);let i=fe(),a=fe();this.httpQueue.add(async()=>(i.resolve(),a.promise));let c=`${this.url}routing/v1/ipns/${e}`;try{await i.promise;let l=El(t),d={method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:s},u=await this.#r(c,d);if(this.log("putIPNS PUT %s %d",c,u.status),u.status!==200)throw new Nr("PUT ipns response had status other than 200")}catch(l){throw this.log.error("putIPNS PUT %s error - %e",c,l.stack),l}finally{s.clear(),a.resolve(),this.log("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map(q)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:Me(e.ID),Addrs:n,Protocols:t}}catch(t){this.log.error("could not conform record to peer schema - %e",t)}}#t(e,t,n){if(t!=null||this.filterAddrs!=null){let o=t?.join(",")??this.filterAddrs?.join(",")??"";o!==""&&e.searchParams.set("filter-addrs",o)}if(n!=null||this.filterProtocols!=null){let o=n?.join(",")??this.filterProtocols?.join(",")??"";o!==""&&e.searchParams.set("filter-protocols",o)}}async#r(e,t){let n=t.method??"GET",o=`${n}-${e}`;if(n==="GET"){let c=await this.cache?.match(e);if(c!=null){if(parseInt(c.headers.get("x-cache-expires")??"0",10)>Date.now())return this.log("returning cached response for %s",o),this.logResponse(c),c;this.log("evicting cached response for %s",o),await this.cache?.delete(e)}else this.cache!=null&&this.log("cache miss for %s",o)}let s=this.inFlightRequests.get(o);if(s!=null){let c=await s;return this.log("deduplicating outgoing request for %s",o),c.clone()}this.log("outgoing request:"),this.logRequest(e,t);let i=fetch(e,t).then(async c=>{if(this.log("incoming response:"),this.logResponse(c),this.cache!=null&&c.ok&&n==="GET"){let l=Date.now()+this.cacheTTL,d=new Headers(c.headers);d.set("x-cache-expires",l.toString());let u=new Response(c.clone().body,{status:c.status,statusText:c.statusText,headers:d});await this.cache.put(e,u)}return c}).finally(()=>{this.inFlightRequests.delete(o)});return this.inFlightRequests.set(o,i),await i}toString(){return`DefaultDelegatedRoutingV1HttpApiClient(${this.url})`}logRequest(e,t){let n=new Headers(t.headers);this.log("%s %s HTTP/1.1",t.method??"GET",e);for(let[o,s]of n.entries())this.log("%s: %s",o,s)}logResponse(e){this.log("HTTP/1.1 %d %s",e.status,e.statusText);for(let[t,n]of e.headers.entries())this.log("%s: %s",t,n)}};function ew(r){return e=>new hh(e,r)}function g3(r){return{url:"https://delegated-ipfs.dev",filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss","tls"]}}var tw="[a-fA-F\\d:]",zo=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${tw})|(?<=${tw})(?=\\s|$))`:"",rn="(?: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}",ph=`
21
+ `)),!f.ok)throw this.#t++,new Error(`Unable to fetch raw block for CID ${e} from gateway ${this.url}, received ${f.status} ${f.statusText}`);let h=await H9(f,n,{signal:i.signal,log:this.log});return this.#a++,h}),this.#c.set(s,c)}return await c}catch(c){throw t?.aborted===!0?new Error(`Fetching raw block for CID ${e} from gateway ${this.url} was aborted`):(this.#t++,new Error(`Unable to fetch raw block for CID ${e} - ${c.message}`))}finally{t?.removeEventListener("abort",a),this.#c.delete(s)}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#a/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}getStats(){return{attempts:this.#e,errors:this.#t,invalidBlocks:this.#r,successes:this.#a,pendingResponses:this.#c.size}}toString(){return`TrustlessGateway(${this.url})`}};var h3=class extends zs{name="trustless-gateway-session";routing;allowInsecure;allowLocal;transformRequestInit;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??Zf,this.allowLocal=t.allowLocal??Jf,this.transformRequestInit=t.transformRequestInit}async queryProvider(e,t,n){this.log("fetching BLOCK for %c from %s",e,t.url);let o=await t.getRawBlock(e,n);return this.log.trace("got block for %c from %s",e,t.url),await n.validateFn?.(o),o}async*findNewProviders(e,t={}){yield*Qf(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})}toFilterKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}async convertToProvider(e,t,n){if(Rt(e))return;let o=f3(Array.isArray(e)?e:[e],this.allowInsecure,this.allowLocal);if(o.length===0)return;let s=qo(o[0]);return new ma(s,{logger:this.logger,transformRequestInit:this.transformRequestInit,routing:t})}emitFoundProviderProgressEvent(e,t,n){n?.onProgress?.(new H("trustless-gateway:found-provider",{type:"trustless-gateway",cid:e,url:t.url.toJSON(),routing:t.routing}))}};function W9(r,e){return new h3(r,e)}var eh=class{name="trustless-gateway";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??Zf,this.allowLocal=t.allowLocal??Jf,this.transformRequestInit=t.transformRequestInit}async retrieve(e,t={}){let n=[];for await(let o of Qf(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 s=await o.getRawBlock(e,t);this.log.trace("got block for %c from %s",e,o.url);try{await t.validateFn?.(s)}catch(i){this.log.error("failed to validate block for %c from %s - %e",e,o.url,i);continue}return s}catch(s){if(this.log.error("failed to get block for %c from %s - %e",e,o.url,s),s instanceof Error?n.push(s):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 W9({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure,transformRequestInit:this.transformRequestInit})}};var Zf=!1,Jf=!1,q9=2097152;function p3(r={}){return e=>new eh(e,r)}async function*wl(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 qk=Ln(th(),1);var tn=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},rh=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},ga=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},nh=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},oh=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},sh=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},bl=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var or;(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=()=>We(t)})(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.value!=null&&(s.uint32(10),s.bytes(o.value)),o.signatureV1!=null&&(s.uint32(18),s.bytes(o.signatureV1)),o.validityType!=null&&(s.uint32(24),r.ValidityType.codec().encode(o.validityType,s)),o.validity!=null&&(s.uint32(34),s.bytes(o.validity)),o.sequence!=null&&(s.uint32(40),s.uint64(o.sequence)),o.ttl!=null&&(s.uint32(48),s.uint64(o.ttl)),o.pubKey!=null&&(s.uint32(58),s.bytes(o.pubKey)),o.signatureV2!=null&&(s.uint32(66),s.bytes(o.signatureV2)),o.data!=null&&(s.uint32(74),s.bytes(o.data)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={},c=s==null?o.len:o.pos+s;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=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(or||(or={}));var Fk=Pr("ipns:utils"),z9=C("/ipns/");var $k=0,Kk=18;function G9(r){let e;if(r.pubKey!=null)try{e=tt(r.pubKey)}catch(t){throw Fk.error(t),t}if(e!=null)return e}function Y9(r){let e=C("ipns-signature:");return Oe([e,r])}function El(r){return"signatureV1"in r?or.encode({value:C(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:C(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):or.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function vn(r){let e=or.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 tn("Missing data or signatureV2");let t=j9(e.data),n=Vk(t.Value),o=R(t.Validity);if(e.value!=null&&e.signatureV1!=null)return Hk(e),{value:n,validityType:or.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:or.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 xl(r){return Oe([z9,r.bytes])}function ya(r){let e=ke(r.slice(z9.length));if(!ih(e,$k)&&!ih(e,Kk))throw new bo("Multihash in IPNS key was not identity or sha2-256");return e}function j9(r){let e=br(r);if(e.ValidityType===0)e.ValidityType=or.ValidityType.EOL;else throw new ga("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 Vk(r){let e=R(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${G.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${G.parse(e).toV1().toString()}`}catch{}throw new oh("Value must be a valid content path starting with /")}function Hk(r){if(r.data==null)throw new sh("Record data is missing");let e=j9(r.data);if(!ee(e.Value,r.value??new Uint8Array(0)))throw new tn('Field "value" did not match between protobuf and CBOR');if(!ee(e.Validity,r.validity??new Uint8Array(0)))throw new tn('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new tn('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new tn('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new tn('Field "ttl" did not match between protobuf and CBOR')}function ih(r,e){return r.code===e}var mQ=Pr("ipns"),gQ=300*1e9,Wk="/ipns/",yQ=Wk.length;var X9=Ln(th(),1);var ah=Pr("ipns:validator"),zk=1024*10;async function Gk(r,e){let t=vn(e),n;try{let o=Y9(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw ah.error("record signature verification failed"),new tn("Record signature verification failed");if(t.validityType===or.ValidityType.EOL){if(X9.default.fromString(t.validity).toDate().getTime()<Date.now())throw ah.error("record has expired"),new rh("record has expired")}else if(t.validityType!=null)throw ah.error("the validity type is unsupported"),new ga("The validity type is unsupported");ah("ipns record for %s is valid",t.value)}async function ch(r,e){if(e.byteLength>zk)throw new nh("The record is too large");let t=ya(r),n;ih(t,0)&&(n=sd(t));let o=vn(e),s=G9(o)??n;if(s==null)throw new bl("Could not extract public key from IPNS record or routing key");let i=xl(s.toMultihash());if(!ee(i,r))throw new bl("Embedded public key did not match routing key");await Gk(s,e)}var lh=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MESSAGE_LENGTH"};async function*wa(r,e={}){let t=/\r?\n/,n=new TextDecoder("utf8"),o="";for await(let s of r){if(typeof s=="string"&&(s=new TextEncoder().encode(s)),bi(s)&&(s=s.subarray()),o+=n.decode(s,{stream:!0}),o.length>(e?.maxMessageLength??o.length))throw new lh("Incoming message too long");let i=o.split(t);o=i.pop()??"";for(let a=0;a<i.length;a++)yield JSON.parse(i[a])}o+=n.decode(),o!==""&&(yield JSON.parse(o))}var Zs=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},Nr=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function Yk(r){return r[Symbol.asyncIterator]!=null}function jk(r){if(Yk(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var Q9=jk;var Z9=C("/ipns/");function J9(r){return ee(r.subarray(0,Z9.byteLength),Z9)}var uh=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){try{yield*Lr(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[],routing:"delegated-http-routing-v1"}))}catch(n){if(n instanceof Le)return;throw n}}async provide(){}async cancelReprovide(){}async put(e,t,n){if(!J9(e))return;let o=ya(e),s=G.createV1(114,o),i=vn(t);await this.client.putIPNS(s,i,n)}async get(e,t){if(!J9(e))throw new Le("Not found");let n=ya(e),o=G.createV1(114,n);try{let s=await this.client.getIPNS(o,t);return El(s)}catch(s){throw s.name==="BadResponseError"?new Le("Not found"):s}}toString(){return`DelegatedRoutingV1HttpApiClientContentRouting(${this.client.url})`}},dh=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await Q9(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new Le("Not found")}async*getClosestPeers(e,t={}){let n;try{n=G.decode(e)}catch{try{n=Ze(He.decode(e))}catch{n=G.createV1(Mn,dt.digest(e))}}for await(let o of this.client.getClosestPeers(n,t))yield{id:o.ID,multiaddrs:o.Addrs??[]}}toString(){return`DelegatedRoutingV1HttpApiClientPeerRouting(${this.client.url})`}};var fh={concurrentRequests:4,timeout:3e4,cacheTTL:300*1e3,cacheName:"delegated-routing-v1-cache"},hh=class{url;started;httpQueue;shutDownController;timeout;contentRouting;peerRouting;filterAddrs;filterProtocols;inFlightRequests;cacheName;cache;cacheTTL;log;constructor(e,t){this.log=e.logger.forComponent("delegated-routing-v1-http-api-client"),this.started=!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.httpQueue=new ds({concurrency:t.concurrentRequests??fh.concurrentRequests}),this.inFlightRequests=new Map,this.url=t.url instanceof URL?t.url:new URL(t.url),this.timeout=t.timeout??fh.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new uh(this),this.peerRouting=new dh(this),this.cacheName=t.cacheName??fh.cacheName,this.cacheTTL=t.cacheTTL??fh.cacheTTL}get[Dn](){return this.contentRouting}get[On](){return this.peerRouting}isStarted(){return this.started}async start(){this.started||(this.started=!0,this.cacheTTL>0&&(this.cache=await globalThis.caches?.open(this.cacheName),this.cache!=null&&this.log("cache enabled with ttl %d",this.cacheTTL)))}async stop(){this.httpQueue.clear(),this.shutDownController.abort(),await globalThis.caches?.delete(this.cacheName),this.started=!1}async*getProviders(e,t={}){this.log("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let s=fe(),i=fe(),a=0;this.httpQueue.add(async()=>(s.resolve(),i.promise));try{await s.promise;let c=new URL(`${this.url}routing/v1/providers/${e}`);this.#t(c,t.filterAddrs,t.filterProtocols);let l={headers:{accept:"application/x-ndjson, application/json;q=0.8"},signal:o},d=await this.#r(c.toString(),l);if(!d.ok){if(d.status===404)return;throw d.status===422?new Zs("Request does not conform to schema or semantic constraints"):new Nr(`Unexpected status code: ${d.status}`)}let u=d.headers.get("Content-Type");if(u==null)throw new Nr("No Content-Type header received");if(d.body==null){if(u!=="application/x-ndjson")throw new Nr("Routing response had no body");return}if(u.startsWith("application/json")){let h=(await d.json()).Providers??[];for(let p of h){let g=this.#e(p);g!=null&&(a++,yield g)}}else if(u.includes("application/x-ndjson"))for await(let f of wa(wl(d.body))){let h=this.#e(f);h!=null&&(a++,yield h)}else throw new Nr(`Unsupported Content-Type: ${u}`)}finally{o.clear(),i.resolve(),this.log("getProviders finished found %d providers for %c",a,e)}}async*getPeers(e,t={}){this.log("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let s=fe(),i=fe();this.httpQueue.add(async()=>(s.resolve(),i.promise));try{await s.promise;let a=new URL(`${this.url}routing/v1/peers/${e.toCID().toString()}`);this.#t(a,t.filterAddrs,t.filterProtocols);let c={headers:{Accept:"application/x-ndjson"},signal:o},l=await this.#r(a.toString(),c);if(l.status===404)return;if(l.status===422)throw new Zs("Request does not conform to schema or semantic constraints");if(l.body==null)throw new Nr("Routing response had no body");if(l.headers.get("Content-Type")?.startsWith("application/json")){let f=(await l.json()).Peers??[];for(let h of f){let p=this.#e(h);p!=null&&(yield p)}}else for await(let u of wa(wl(l.body))){let f=this.#e(u);f!=null&&(yield f)}}catch(a){this.log.error("getPeers errored - %e",a)}finally{o.clear(),i.resolve(),this.log("getPeers finished: %c",e)}}async*getClosestPeers(e,t={}){let n;if(Rt(e))n=e.toCID().toString();else if(G.asCID(e)===e||e instanceof G)n=e.toV1().toString();else throw new A("Key must be CID or PeerId");this.log("getClosestPeers starts: %s",n);let o=AbortSignal.timeout(this.timeout),s=le([this.shutDownController.signal,o,t.signal]);let i=fe(),a=fe();this.httpQueue.add(async()=>(i.resolve(),a.promise));try{await i.promise;let c=new URL(`${this.url}routing/v1/dht/closest/peers/${n}`);this.#t(c,t.filterAddrs,t.filterProtocols);let l={headers:{Accept:"application/x-ndjson"},signal:s},d=await this.#r(c.toString(),l);if(d.status===404)return;if(d.status===422)throw new Zs("Request does not conform to schema or semantic constraints");if(d.body==null)throw new Nr("Routing response had no body");if(d.headers.get("Content-Type")?.startsWith("application/json")){let h=(await d.json()).Peers??[];for(let p of h){let g=this.#e(p);g!=null&&(yield g)}}else for await(let f of wa(wl(d.body))){let h=this.#e(f);h!=null&&(yield h)}}catch(c){this.log.error("getClosestPeers errored - %e",c)}finally{s.clear(),a.resolve(),this.log("getClosestPeers finished: %s",n)}}async getIPNS(e,t={}){this.log("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let s=fe(),i=fe();this.httpQueue.add(async()=>(s.resolve(),i.promise));let a=`${this.url}routing/v1/ipns/${e}`;try{await s.promise;let c={headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o},l=await this.#r(a,c);if(this.log("getIPNS GET %s %d",a,l.status),l.status===404)throw new Le("No matching records found");if(l.status===422)throw new Zs("Request does not conform to schema or semantic constraints");if(!l.ok)throw new Nr(`Unexpected status code: ${l.status}`);let d=l.headers.get("Content-Type");if(d==null||!d.includes("application/vnd.ipfs.ipns-record"))throw new Le("No matching records found");if(l.body==null)throw new Nr("GET ipns response had no body");let u=await l.arrayBuffer(),f=new Uint8Array(u,0,u.byteLength);return t.validate!==!1&&await ch(xl(e.multihash),f),vn(f)}catch(c){throw this.log.error("getIPNS GET %s error - %e",a,c),c}finally{o.clear(),i.resolve(),this.log("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){this.log("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),s=le([this.shutDownController.signal,o,n.signal]);let i=fe(),a=fe();this.httpQueue.add(async()=>(i.resolve(),a.promise));let c=`${this.url}routing/v1/ipns/${e}`;try{await i.promise;let l=El(t),d={method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:s},u=await this.#r(c,d);if(this.log("putIPNS PUT %s %d",c,u.status),u.status!==200)throw new Nr("PUT ipns response had status other than 200")}catch(l){throw this.log.error("putIPNS PUT %s error - %e",c,l.stack),l}finally{s.clear(),a.resolve(),this.log("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map(q)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:Me(e.ID),Addrs:n,Protocols:t}}catch(t){this.log.error("could not conform record to peer schema - %e",t)}}#t(e,t,n){if(t!=null||this.filterAddrs!=null){let o=t?.join(",")??this.filterAddrs?.join(",")??"";o!==""&&e.searchParams.set("filter-addrs",o)}if(n!=null||this.filterProtocols!=null){let o=n?.join(",")??this.filterProtocols?.join(",")??"";o!==""&&e.searchParams.set("filter-protocols",o)}}async#r(e,t){let n=t.method??"GET",o=`${n}-${e}`;if(n==="GET"){let c=await this.cache?.match(e);if(c!=null){if(parseInt(c.headers.get("x-cache-expires")??"0",10)>Date.now())return this.log("returning cached response for %s",o),this.logResponse(c),c;this.log("evicting cached response for %s",o),await this.cache?.delete(e)}else this.cache!=null&&this.log("cache miss for %s",o)}let s=this.inFlightRequests.get(o);if(s!=null){let c=await s;return this.log("deduplicating outgoing request for %s",o),c.clone()}this.log("outgoing request:"),this.logRequest(e,t);let i=fetch(e,t).then(async c=>{if(this.log("incoming response:"),this.logResponse(c),this.cache!=null&&c.ok&&n==="GET"){let l=Date.now()+this.cacheTTL,d=new Headers(c.headers);d.set("x-cache-expires",l.toString());let u=new Response(c.clone().body,{status:c.status,statusText:c.statusText,headers:d});await this.cache.put(e,u)}return c}).finally(()=>{this.inFlightRequests.delete(o)});return this.inFlightRequests.set(o,i),await i}toString(){return`DefaultDelegatedRoutingV1HttpApiClient(${this.url})`}logRequest(e,t){let n=new Headers(t.headers);this.log("%s %s HTTP/1.1",t.method??"GET",e);for(let[o,s]of n.entries())this.log("%s: %s",o,s)}logResponse(e){this.log("HTTP/1.1 %d %s",e.status,e.statusText);for(let[t,n]of e.headers.entries())this.log("%s: %s",t,n)}};function ew(r){return e=>new hh(e,r)}function g3(r){return{url:"https://delegated-ipfs.dev",filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss","tls"]}}var tw="[a-fA-F\\d:]",Wo=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${tw})|(?<=${tw})(?=\\s|$))`:"",rn="(?: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}",ph=`
22
22
  (?:
23
23
  (?:${st}:){7}(?:${st}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
24
24
  (?:${st}:){6}(?:${rn}|:${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
@@ -29,40 +29,40 @@ HTTP/1.1 %d %s
29
29
  (?:${st}:){1}(?:(?::${st}){0,4}:${rn}|(?::${st}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
30
30
  (?::(?:(?::${st}){0,5}:${rn}|(?::${st}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
31
31
  )(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
32
- `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),Qk=new RegExp(`(?:^${rn}$)|(?:^${ph}$)`),Xk=new RegExp(`^${rn}$`),Zk=new RegExp(`^${ph}$`),y3=r=>r&&r.exact?Qk:new RegExp(`(?:${zo(r)}${rn}${zo(r)})|(?:${zo(r)}${ph}${zo(r)})`,"g");y3.v4=r=>r&&r.exact?Xk:new RegExp(`${zo(r)}${rn}${zo(r)}`,"g");y3.v6=r=>r&&r.exact?Zk:new RegExp(`${zo(r)}${ph}${zo(r)}`,"g");var w3=y3;function b3(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function rw(){return!1}var{toString:Jk}=Object.prototype;function E3(r){return Jk.call(r)==="[object RegExp]"}var nw={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function x3(r,e={}){if(!E3(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(nw).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?nw[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function v3(r,e,{timeout:t}={}){try{return b3(()=>x3(r).test(e),{timeout:t})()}catch(n){if(rw(n))return!1;throw n}}var eP=15,tP=45,ow={timeout:400};function S3(r){return r.length>tP?!1:v3(w3.v6({exact:!0}),r,ow)}function sw(r){return r.length>eP?!1:v3(w3.v4({exact:!0}),r,ow)}var iw={http:"80",https:"443",ws:"80",wss:"443"},rP=["http","https","ws","wss"];function mh(r,e){e=e??{};let t=e.defaultDnsType??"dns",{scheme:n,hostname:o,port:s,path:i}=nP(r),a=[oP(o,t),sP(s,n),iP(n)];i!=null&&a.push(aP(i));let c="/"+a.filter(l=>!!l).reduce((l,d)=>l.concat(d),[]).join("/");return q(c)}function nP(r){let[e]=r.split(":");rP.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o,pathname:s,search:i}=new URL(r);if(o==null||o===""){let c=cP(e);c!=null&&(o=c),c==null&&t==="http:"&&(o="80")}let a;return s!=null&&s!==""&&s!=="/"&&(s.startsWith("/")&&(s=s.substring(1)),a=s),i!=null&&i!==""&&(a=a??"",a+=i),{scheme:e,hostname:n,port:o,path:a}}function oP(r,e){if(!(r==null||r==="")){if(sw(r))return["ip4",r];if(S3(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(S3(t))return["ip6",t]}return[e,r]}}function sP(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function iP(r){if(r.match(/^tcp$|^udp$/)==null)return r==="https"?["/tls/http"]:r==="wss"?["/tls/ws"]:[r]}function aP(r){if(!(r==null||r===""))return["http-path",encodeURIComponent(r)]}function cP(r){if(!(r==null||r===""||iw[r]==null))return iw[r]}var lP=["https://trustless-gateway.link","https://4everland.io"],uP=2336;function dP(r){return r=r.toString(),{id:Jr(G.createV1(uP,dt.digest(_(r)))),multiaddrs:[mh(r)]}}function fP(r){return new URL(R(r.id.toMultihash().digest))}var A3=class{gateways;shuffle;constructor(e={}){this.gateways=(e.gateways??lP).map(t=>dP(t)),this.shuffle=e.shuffle??!0}async*findProviders(e,t){yield*(this.shuffle?this.gateways.toSorted(()=>Math.random()>.5?1:-1):this.gateways).map(n=>({...n,protocols:["transport-ipfs-gateway-http"],routing:"http-gateway-routing"}))}toString(){return`HTTPGatewayRouter([${this.gateways.map(e=>fP(e)).join(", ")}])`}};function I3(r={}){return new A3(r)}var T3=class{libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async cancelReprovide(e,t){await this.libp2p.contentRouting.cancelReprovide(e,t)}async*findProviders(e,t){yield*this.libp2p.contentRouting.findProviders(e,t)}async put(e,t,n){await this.libp2p.contentRouting.put(e,t,n)}async get(e,t){return this.libp2p.contentRouting.get(e,t)}async findPeer(e,t){return this.libp2p.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t){yield*this.libp2p.peerRouting.getClosestPeers(e,t)}toString(){return"Libp2pRouter()"}};function C3(r){return new T3(r)}function hP(r){return r[Symbol.asyncIterator]!=null}function pP(r){if(hP(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 no=pP;function mP(r){return typeof r?.then=="function"}var vl=class extends Jn{data;constructor(){super(),this.data=new Map}put(e,t,n){n?.signal?.throwIfAborted();let o;if(t instanceof Uint8Array)o=[t];else{let s=no(t);if(mP(s))return s.then(i=>this._put(e,i,n));o=s}return this._put(e,o,n)}_put(e,t,n){return n?.signal?.throwIfAborted(),this.data.set(ut.encode(e.multihash.bytes),t),e}*get(e,t){t?.signal?.throwIfAborted();let n=this.data.get(ut.encode(e.multihash.bytes));if(n==null)throw new Rr;yield*n}has(e,t){return t?.signal?.throwIfAborted(),this.data.has(ut.encode(e.multihash.bytes))}async delete(e,t){t?.signal?.throwIfAborted(),this.data.delete(ut.encode(e.multihash.bytes))}*getAll(e){e?.signal?.throwIfAborted();for(let[t,n]of this.data.entries())yield{cid:G.createV1(Mn,ke(ut.decode(t))),bytes:(async function*(){yield*n})()},e?.signal?.throwIfAborted()}};var rJ=Pr("blockstore:core:tiered");var aw="SHARDING";function yP(r){return r[Symbol.asyncIterator]!=null}function wP(r,e){return yP(r)?(async function*(){yield*(await no(r)).sort(e)})():(function*(){yield*no(r).sort(e)})()}var gh=wP;var oo=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 er(this.putMany(e,n)),e=[],await er(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=Zr(n,s=>s.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>Zr(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>gh(o,s),n)),e.offset!=null){let o=0,s=e.offset;n=Zr(n,()=>o++>=s)}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=Zr(n,s=>s.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>Zr(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>gh(o,s),n)),e.offset!=null){let o=e.offset,s=0;n=Zr(n,()=>s++>=o)}return e.limit!=null&&(n=Ho(n,e.limit)),n}};var Js=class extends oo{data;constructor(){super(),this.data=new Map}put(e,t,n){return n?.signal?.throwIfAborted(),this.data.set(e.toString(),t),e}get(e,t){t?.signal?.throwIfAborted();let n=this.data.get(e.toString());if(n==null)throw new Rr;return n}has(e,t){return t?.signal?.throwIfAborted(),this.data.has(e.toString())}delete(e,t){t?.signal?.throwIfAborted(),this.data.delete(e.toString())}*_all(e,t){t?.signal?.throwIfAborted();for(let[n,o]of this.data.entries())yield{key:new Fe(n),value:o},t?.signal?.throwIfAborted()}*_allKeys(e,t){t?.signal?.throwIfAborted();for(let n of this.data.keys())yield new Fe(n),t?.signal?.throwIfAborted()}};var NJ=new Fe(aw);var YJ=Pr("datastore:core:tiered");async function lw(r){if(r.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new A("Private network is enforced, but no protector was provided");return r}var Sl;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={publicKey:ae(0),payloadType:ae(0),payload:ae(0),signature:ae(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.publicKey=t.bytes();break}case 2:{s.payloadType=t.bytes();break}case 3:{s.payload=t.bytes();break}case 5:{s.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Sl||(Sl={}));var yh=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var vr=class r{static createFromProtobuf=e=>{let t=Sl.decode(e),n=et(t.publicKey);return new r({publicKey:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t,n)=>{if(t==null)throw new Error("Missing private key");let o=e.domain,s=e.codec,i=e.marshal(),a=uw(o,s,i),c=await t.sign(a.subarray(),n);return new r({publicKey:t.publicKey,payloadType:s,payload:i,signature:c})};static openAndCertify=async(e,t,n)=>{let o=r.createFromProtobuf(e);if(!await o.validate(t,n))throw new yh("Envelope signature is not valid for the given domain");return o};publicKey;payloadType;payload;signature;marshaled;constructor(e){let{publicKey:t,payloadType:n,payload:o,signature:s}=e;this.publicKey=t,this.payloadType=n,this.payload=o,this.signature=s}marshal(){return this.marshaled==null&&(this.marshaled=Sl.encode({publicKey:ft(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return e==null?!1:ee(this.marshal(),e.marshal())}async validate(e,t){let n=uw(e,this.payloadType,this.payload);return this.publicKey.verify(n.subarray(),this.signature,t)}},uw=(r,e,t)=>{let n=_(r),o=Mt(n.byteLength),s=Mt(e.length),i=Mt(t.length);return new Q(o,n,s,e,i,t)};var dw="libp2p-peer-record",fw=Uint8Array.from([3,1]);var Al;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=ne((s,i,a={})=>{a.lengthDelimited!==!1&&i.fork(),s.multiaddr!=null&&s.multiaddr.byteLength>0&&(i.uint32(10),i.bytes(s.multiaddr)),a.lengthDelimited!==!1&&i.ldelim()},(s,i,a={})=>{let c={multiaddr:ae(0)},l=i==null?s.len:s.pos+i;for(;s.pos<l;){let d=s.uint32();switch(d>>>3){case 1:{c.multiaddr=s.bytes();break}default:{s.skipType(d&7);break}}}return c})),o),n.encode=s=>re(s,n.codec()),n.decode=(s,i)=>te(s,n.codec(),i)})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=ne((n,o,s={})=>{if(s.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 i of n.addresses)o.uint32(26),r.AddressInfo.codec().encode(i,o);s.lengthDelimited!==!1&&o.ldelim()},(n,o,s={})=>{let i={peerId:ae(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:{i.peerId=n.bytes();break}case 2:{i.seq=n.uint64();break}case 3:{if(s.limits?.addresses!=null&&i.addresses.length===s.limits.addresses)throw new Ne('Decode error - map field "addresses" had too many elements');i.addresses.push(r.AddressInfo.codec().decode(n,n.uint32(),{limits:s.limits?.addresses$}));break}default:{n.skipType(c&7);break}}}return i})),t),r.encode=n=>re(n,r.codec()),r.decode=(n,o)=>te(n,r.codec(),o)})(Al||(Al={}));function hw(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 Xt=class r{static createFromProtobuf=e=>{let t=Al.decode(e),n=Xe(ke(t.peerId)),o=(t.addresses??[]).map(i=>q(i.multiaddr)),s=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:s})};static DOMAIN=dw;static CODEC=fw;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=Al.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||!hw(this.multiaddrs,e.multiaddrs))}};var so;(function(r){let e;(function(o){let s;o.codec=()=>(s==null&&(s=ne((i,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),i.key!=null&&i.key!==""&&(a.uint32(10),a.string(i.key)),i.value!=null&&i.value.byteLength>0&&(a.uint32(18),a.bytes(i.value)),c.lengthDelimited!==!1&&a.ldelim()},(i,a,c={})=>{let l={key:"",value:ae(0)},d=a==null?i.len:i.pos+a;for(;i.pos<d;){let u=i.uint32();switch(u>>>3){case 1:{l.key=i.string();break}case 2:{l.value=i.bytes();break}default:{i.skipType(u&7);break}}}return l})),s),o.encode=i=>re(i,o.codec()),o.decode=(i,a)=>te(i,o.codec(),a)})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let s;o.codec=()=>(s==null&&(s=ne((i,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),i.key!=null&&i.key!==""&&(a.uint32(10),a.string(i.key)),i.value!=null&&(a.uint32(18),bh.codec().encode(i.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(i,a,c={})=>{let l={key:""},d=a==null?i.len:i.pos+a;for(;i.pos<d;){let u=i.uint32();switch(u>>>3){case 1:{l.key=i.string();break}case 2:{l.value=bh.codec().decode(i,i.uint32(),{limits:c.limits?.value});break}default:{i.skipType(u&7);break}}}return l})),s),o.encode=i=>re(i,o.codec()),o.decode=(i,a)=>te(i,o.codec(),a)})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{if(i.lengthDelimited!==!1&&s.fork(),o.addresses!=null)for(let a of o.addresses)s.uint32(10),wh.codec().encode(a,s);if(o.protocols!=null)for(let a of o.protocols)s.uint32(18),s.string(a);if(o.publicKey!=null&&(s.uint32(34),s.bytes(o.publicKey)),o.peerRecordEnvelope!=null&&(s.uint32(42),s.bytes(o.peerRecordEnvelope)),o.metadata!=null&&o.metadata.size!==0)for(let[a,c]of o.metadata.entries())s.uint32(50),r.Peer$metadataEntry.codec().encode({key:a,value:c},s);if(o.tags!=null&&o.tags.size!==0)for(let[a,c]of o.tags.entries())s.uint32(58),r.Peer$tagsEntry.codec().encode({key:a,value:c},s);o.updated!=null&&(s.uint32(64),s.uint64Number(o.updated)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={addresses:[],protocols:[],metadata:new Map,tags:new Map},c=s==null?o.len:o.pos+s;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{if(i.limits?.addresses!=null&&a.addresses.length===i.limits.addresses)throw new Ne('Decode error - map field "addresses" had too many elements');a.addresses.push(wh.codec().decode(o,o.uint32(),{limits:i.limits?.addresses$}));break}case 2:{if(i.limits?.protocols!=null&&a.protocols.length===i.limits.protocols)throw new Ne('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(i.limits?.metadata!=null&&a.metadata.size===i.limits.metadata)throw new Ac('Decode error - map field "metadata" had too many elements');let d=r.Peer$metadataEntry.codec().decode(o,o.uint32());a.metadata.set(d.key,d.value);break}case 7:{if(i.limits?.tags!=null&&a.tags.size===i.limits.tags)throw new Ac('Decode error - map field "tags" had too many elements');let d=r.Peer$tagsEntry.codec().decode(o,o.uint32(),{limits:{value:i.limits?.tags$value}});a.tags.set(d.key,d.value);break}case 8:{a.updated=o.uint64Number();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(so||(so={}));var wh;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={multiaddr:ae(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.multiaddr=t.bytes();break}case 2:{s.isCertified=t.bool();break}case 3:{s.observed=t.uint64Number();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(wh||(wh={}));var bh;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={value:0},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.value=t.uint32();break}case 2:{s.expiry=t.uint64();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(bh||(bh={}));function bP(r,e){if(r.publicKey!=null||e.publicKey==null)return r;let t;r.type==="RSA"&&(t=r.toMultihash());let n=et(e.publicKey,t);return xn(n)}function pw(r,e,t){let n=so.decode(e);return ba(r,n,t)}function ba(r,e,t){let n=new Map,o=BigInt(Date.now());for(let[s,i]of e.tags.entries())i.expiry!=null&&i.expiry<o||n.set(s,i);return{...e,id:bP(r,e),addresses:e.addresses.filter(({observed:s})=>s!=null&&s>Date.now()-t).map(({multiaddr:s,isCertified:i})=>({multiaddr:q(s),isCertified:i??!1})),metadata:e.metadata,peerRecordEnvelope:e.peerRecordEnvelope??void 0,tags:n}}function mw(r,e){return EP(r.addresses,e.addresses)&&xP(r.protocols,e.protocols)&&vP(r.publicKey,e.publicKey)&&SP(r.peerRecordEnvelope,e.peerRecordEnvelope)&&AP(r.metadata,e.metadata)&&IP(r.tags,e.tags)}function EP(r,e){return yw(r,e,(t,n)=>!(t.isCertified!==n.isCertified||!ee(t.multiaddr,n.multiaddr)))}function xP(r,e){return yw(r,e,(t,n)=>t===n)}function vP(r,e){return gw(r,e)}function SP(r,e){return gw(r,e)}function AP(r,e){return ww(r,e,(t,n)=>ee(t,n))}function IP(r,e){return ww(r,e,(t,n)=>t.value===n.value&&t.expiry===n.expiry)}function gw(r,e){return r==null&&e==null?!0:r!=null&&e!=null?ee(r,e):!1}function yw(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 ww(r,e,t){if(r.size!==e.size)return!1;for(let[n,o]of r.entries()){let s=e.get(n);if(s==null||!t(o,s))return!1}return!0}var _3="/peers/";function Il(r){if(!Rt(r)||r.type==null)throw new A("Invalid PeerId");let e=r.toCID().toString();return new Fe(`${_3}${e}`)}async function bw(r,e,t,n,o){let s=new Map;for(let i of t){if(i==null)continue;if(i.multiaddr instanceof Uint8Array&&(i.multiaddr=q(i.multiaddr)),!yn(i.multiaddr))throw new A("Multiaddr was invalid");if(!await e(r,i.multiaddr,o))continue;let a=i.isCertified??!1,c=i.multiaddr.toString(),l=s.get(c);l!=null?i.isCertified=l.isCertified||a:s.set(c,{multiaddr:i.multiaddr,isCertified:a})}return[...s.values()].sort((i,a)=>i.multiaddr.toString().localeCompare(a.multiaddr.toString())).map(({isCertified:i,multiaddr:a})=>{let c=a.getComponents().find(l=>l.code===421)?.value;return r.equals(c)&&(a=a.decapsulate(q(`/p2p/${r}`))),{isCertified:i,multiaddr:a.bytes}})}async function xh(r,e,t,n){if(e==null)throw new A("Invalid PeerData");if(e.publicKey!=null&&r.publicKey!=null&&!e.publicKey.equals(r.publicKey))throw new A("publicKey bytes do not match peer id publicKey bytes");let o=n.existingPeer?.peer;if(o!=null&&!r.equals(o.id))throw new A("peer id did not match existing peer id");let s=o?.addresses??[],i=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)&&(s=[],e.multiaddrs!=null&&s.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&s.push(...e.addresses)),e.protocols!=null&&(i=new Set(e.protocols)),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=Eh(f,{validate:Ew})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=Eh(f,{validate:xw,map:vw})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&s.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&s.push(...e.addresses),e.protocols!=null&&(i=new Set([...i,...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=Eh([...a.entries()],{validate:Ew})}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=Eh([...h.entries()],{validate:xw,map:vw})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let d;o?.id.publicKey!=null?d=ft(o.id.publicKey):e.publicKey!=null?d=ft(e.publicKey):r.publicKey!=null&&(d=ft(r.publicKey));let u={addresses:await bw(r,n.addressFilter??(async()=>!0),s,n.existingPeer?.peerPB.addresses,n),protocols:[...i.values()].sort((f,h)=>f.localeCompare(h)),metadata:a,tags:c,publicKey:d,peerRecordEnvelope:l};return u.addresses.forEach(f=>{f.observed=n.existingPeer?.peerPB.addresses?.find(h=>ee(h.multiaddr,h.multiaddr))?.observed??Date.now()}),r.type!=="RSA"&&delete u.publicKey,u}function Eh(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(([s],[i])=>s.localeCompare(i)))o!=null&&t.set(n,e.map?.(n,o)??o);return t}function Ew(r,e){if(typeof r!="string")throw new A("Metadata key must be a string");if(!(e instanceof Uint8Array))throw new A("Metadata value must be a Uint8Array")}function xw(r,e){if(typeof r!="string")throw new A("Tag name must be a string");if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new A("Tag value must be an integer");if(e.value<0||e.value>100)throw new A("Tag value must be between 0-100")}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new A("Tag ttl must be an integer");if(e.ttl<0)throw new A("Tag ttl must be between greater than 0")}}function vw(r,e){let t;e.expiry!=null&&(t=e.expiry),e.ttl!=null&&(t=BigInt(Date.now()+Number(e.ttl)));let n={value:e.value??0};return t!=null&&(n.expiry=t),n}function Sw(r){let e=r.toString().split("/")[2],t=G.parse(e,ut);return Jr(t)}function k3(r,e,t){let n=Sw(r);return pw(n,e,t)}function TP(r,e){return{prefix:_3,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(k3(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(k3(n.key,n.value,e),k3(o.key,o.value,e)))}}var vh=class{peerId;datastore;locks;addressFilter;log;maxAddressAge;maxPeerAge;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.locks=eo({name:"libp2p_peer_store_locks",metrics:e.metrics}),this.maxAddressAge=t.maxAddressAge??36e5,this.maxPeerAge=t.maxPeerAge??216e5}getLock(e){let t=this.locks.get(e);return t==null&&(t={refs:0,lock:al({name:e.toString(),singleProcess:!0})},this.locks.set(e,t)),t.refs++,t}maybeRemoveLock(e,t){t.refs--,t.refs===0&&(t.lock.finalize(),this.locks.delete(e))}async getReadLock(e,t){let n=this.getLock(e);try{let o=await n.lock.readLock(t);return()=>{o(),this.maybeRemoveLock(e,n)}}catch(o){throw this.maybeRemoveLock(e,n),o}}async getWriteLock(e,t){let n=this.getLock(e);try{let o=await n.lock.writeLock(t);return()=>{o(),this.maybeRemoveLock(e,n)}}catch(o){throw this.maybeRemoveLock(e,n),o}}async has(e,t){try{return await this.load(e,t),!0}catch(n){if(n.name!=="NotFoundError")throw n}return!1}async delete(e,t){this.peerId.equals(e)||await this.datastore.delete(Il(e),t)}async load(e,t){let n=Il(e),o=await this.datastore.get(n,t),s=so.decode(o);if(this.#r(e,s))throw await this.datastore.delete(n,t),new Le;return ba(e,s,this.peerId.equals(e)?1/0:this.maxAddressAge)}async save(e,t,n){let o=await this.#e(e,n),s=await xh(e,t,"patch",{...n,addressFilter:this.addressFilter});return this.#t(e,s,o)}async patch(e,t,n){let o=await this.#e(e,n),s=await xh(e,t,"patch",{...n,addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,o)}async merge(e,t,n){let o=await this.#e(e,n),s=await xh(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,o)}async*all(e){for await(let{key:t,value:n}of this.datastore.query(TP(e??{},this.maxAddressAge),e)){let o=Sw(t);if(o.equals(this.peerId))continue;let s=so.decode(n);if(this.#r(o,s)){await this.datastore.delete(t,e);continue}yield ba(o,s,this.peerId.equals(o)?1/0:this.maxAddressAge)}}async#e(e,t){try{let n=Il(e),o=await this.datastore.get(n,t),s=so.decode(o);if(this.#r(e,s))throw await this.datastore.delete(n,t),new Le;return{peerPB:s,peer:ba(e,s,this.maxAddressAge)}}catch(n){n.name!=="NotFoundError"&&this.log.error("invalid peer data found in peer store - %e",n)}}async#t(e,t,n,o){t.updated=Date.now();let s=so.encode(t);return await this.datastore.put(Il(e),s,o),{peer:ba(e,t,this.maxAddressAge),previous:n?.peer,updated:n==null||!mw(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,s=t.addresses.filter(i=>i.observed!=null&&i.observed>o);return n&&s.length===0}};var P3=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 vh(e,t)}[Symbol.toStringTag]="@libp2p/peer-store";async forEach(e,t){for await(let n of this.store.all(t))e(n)}async all(e){return no(this.store.all(e))}async delete(e,t){let n=await this.store.getReadLock(e,t);try{await this.store.delete(e,t)}finally{n()}}async has(e,t){let n=await this.store.getReadLock(e,t);try{return await this.store.has(e,t)}finally{this.log.trace("has release read lock"),n?.()}}async get(e,t){let n=await this.store.getReadLock(e,t);try{return await this.store.load(e,t)}finally{n?.()}}async getInfo(e,t){let n=await this.get(e,t);return{id:n.id,multiaddrs:n.addresses.map(({multiaddr:o})=>o)}}async save(e,t,n){let o=await this.store.getWriteLock(e,n);try{let s=await this.store.save(e,t,n);return this.#e(e,s),s.peer}finally{o?.()}}async patch(e,t,n){let o=await this.store.getWriteLock(e,n);try{let s=await this.store.patch(e,t,n);return this.#e(e,s),s.peer}finally{o?.()}}async merge(e,t,n){let o=await this.store.getWriteLock(e,n);try{let s=await this.store.merge(e,t,n);return this.#e(e,s),s.peer}finally{o?.()}}async consumePeerRecord(e,t,n){let o=Rt(t)?t:Rt(t?.expectedPeer)?t.expectedPeer:void 0,s=Rt(t)||t===void 0?n:t,i=await vr.openAndCertify(e,Xt.DOMAIN,s),a=Jr(i.publicKey.toCID());if(o?.equals(a)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",o,a),!1;let c=Xt.createFromProtobuf(i.payload),l;try{l=await this.get(a,s)}catch(d){if(d.name!=="NotFoundError")throw d}if(l?.peerRecordEnvelope!=null){let d=vr.createFromProtobuf(l.peerRecordEnvelope),u=Xt.createFromProtobuf(d.payload);if(u.seqNumber>=c.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",u.seqNumber,c.seqNumber),!1}return await this.patch(c.peerId,{peerRecordEnvelope:e,addresses:c.multiaddrs.map(d=>({isCertified:!0,multiaddr:d}))},s),!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 Aw(r,e={}){return new P3(r,e)}var Iw=864e13;var Sh=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:dns-mappings"),this.mappings=ot({name:"libp2p_address_manager_dns_mappings",metrics:e.metrics})}has(e){let t=oe(e),n=t.host;(t.type==="ip4"||t.type==="ip6")&&t.sni!=null&&(n=t.sni);for(let o of this.mappings.values())if(o.domain===n)return!0;return!1}add(e,t){t.forEach(n=>{this.log("add DNS mapping %s to %s",n,e);let o=Ki(n)===!0;this.mappings.set(n,{domain:e,verified:o,expires:o?Iw-Date.now():0,lastVerified:o?Iw-Date.now():void 0})})}remove(e){let t=oe(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;let n=!1;for(let[o,s]of this.mappings.entries())s.domain===t.sni&&(this.log("removing %s to %s DNS mapping %e",o,s.domain),this.mappings.delete(o),n=n||s.verified);return n}getAll(e){let t=[];for(let n=0;n<e.length;n++){let o=e[n].multiaddr;if(!xt(o))continue;let s=oe(o);for(let[i,a]of this.mappings.entries()){if(s.host!==i)continue;let c=this.maybeAddSNIComponent(o,a.domain);c!=null&&(e.splice(n,1),n--,t.push({multiaddr:c,verified:a.verified,type:"dns-mapping",expires:a.expires,lastVerified:a.lastVerified}))}}return t}maybeAddSNIComponent(e,t){let n=e.getComponents();for(let o=0;o<n.length;o++)if(n[o].code===448&&n[o+1]?.code!==449)return n.splice(o+1,0,{name:"sni",code:449,value:t}),q(n)}confirm(e,t){let n=oe(e),o=n.host;(n.type==="ip4"||n.type==="ip6")&&n.sni!=null&&(o=n.sni);let s=!1;for(let[i,a]of this.mappings.entries())a.domain===o&&(this.log("marking %s to %s DNS mapping as verified",i,a.domain),s=a.verified,a.verified=!0,a.expires=Date.now()+t,a.lastVerified=Date.now());return s}unconfirm(e,t){let n=oe(e);if(n.type!=="ip4"&&n.type!=="ip6")return!1;let o=n.sni??n.host,s=!1;for(let[i,a]of this.mappings.entries())a.domain===o&&(this.log("removing verification of %s to %s DNS mapping",i,a.domain),s=s||a.verified,a.verified=!1,a.expires=Date.now()+t);return s}};var Ah=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:ip-mappings"),this.mappings=ot({name:"libp2p_address_manager_ip_mappings",metrics:e.metrics})}has(e){let t=oe(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;for(let n of this.mappings.values())for(let o of n)if(o.externalIp===t.host)return!0;return!1}add(e,t,n,o=t,s="tcp"){let i=`${e}-${t}-${s}`,a=this.mappings.get(i)??[],c={internalIp:e,internalPort:t,externalIp:n,externalPort:o,externalFamily:Wr(n)?4:6,protocol:s,verified:!1,expires:0};a.push(c),this.mappings.set(i,a)}remove(e){let t=oe(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;let n=!1;for(let[o,s]of this.mappings.entries()){for(let i=0;i<s.length;i++){let a=s[i];a.externalIp===t.host&&a.externalPort===t.port&&a.protocol===t.protocol&&(this.log("removing %s:%s to %s:%s %s IP mapping",a.externalIp,a.externalPort,t.host,t.port,t.protocol),n=n||a.verified,s.splice(i,1),i--)}s.length===0&&this.mappings.delete(o)}return n}getAll(e){let t=[];for(let{multiaddr:n}of e){if(!xt(n))continue;let o=oe(n);if(o.type!=="ip4"&&o.type!=="ip6")continue;let s;if(o.protocol==="tcp"?s=`${o.host}-${o.port}-tcp`:o.protocol==="udp"&&(s=`${o.host}-${o.port}-udp`),s==null)continue;let i=this.mappings.get(s);if(i!=null)for(let a of i)t.push({multiaddr:this.maybeOverrideIp(n,a.externalIp,a.externalFamily,a.protocol,a.externalPort),verified:a.verified,type:"ip-mapping",expires:a.expires,lastVerified:a.lastVerified})}return t}maybeOverrideIp(e,t,n,o,s){let i=e.getComponents(),a=i.findIndex(l=>l.code===4||l.code===41),c=i.findIndex(l=>l.name===o);return a>-1&&c>-1?(i[a].value=t,i[a].code=n===4?4:41,i[c].value=`${s}`,q(i)):e}confirm(e,t){if(!xt(e))return!1;let n=oe(e),o=!1;for(let s of this.mappings.values())for(let i of s)i.externalIp===n.host&&(this.log("marking %s to %s IP mapping as verified",i.internalIp,i.externalIp),o=i.verified,i.verified=!0,i.expires=Date.now()+t,i.lastVerified=Date.now());return o}unconfirm(e,t){if(!xt(e))return!1;let n=oe(e),o=!1;for(let s of this.mappings.values())for(let i=0;i<s.length;i++){let a=s[i];a.externalIp===n.host&&a.externalPort===n.port&&a.protocol===n.protocol&&(this.log("removing verification of %s:%s to %s:%s %s IP mapping",a.externalIp,a.externalPort,n.host,n.port,n.protocol),o=o||a.verified,a.verified=!1,a.expires=Date.now()+t)}return o}};var CP={maxObservedAddresses:10},Ih=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=ot({name:"libp2p_address_manager_observed_addresses",metrics:e.metrics}),this.maxObservedAddresses=t.maxObservedAddresses??CP.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&&(Qe(e)||o7(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:q(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()},s=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),s}};var _P={maxObservedAddresses:10},Th=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=ot({name:"libp2p_address_manager_transport_addresses",metrics:e.metrics}),this.maxObservedAddresses=t.maxObservedAddresses??_P.maxObservedAddresses}get(e,t){if(Qe(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:!xt(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},s=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.addresses.set(n,o),s}unconfirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0},s=o.verified;return o.verified=!1,o.expires=Date.now()+t,this.addresses.set(n,o),s}toKey(e){if(!xt(e))return e.toString();let t=oe(e);return`${t.host}-${t.port}-${t.protocol}`}};var Tw=6e4,Cw={maxObservedAddresses:10,addressVerificationTTL:Tw*10,addressVerificationRetry:Tw*5},kP=r=>r;function R3(r,e){let t=r.getComponents().findLast(n=>n.code===421)?.value;return t!=null&&Me(t).equals(e)&&(r=r.decapsulate(q(`/p2p/${e.toString()}`))),r}var Ch=class{log;components;listen;announce;appendAnnounce;announceFilter;observed;dnsMappings;ipMappings;transportAddresses;observedAddressFilter;addressVerificationTTL;addressVerificationRetry;constructor(e,t={}){let{listen:n=[],announce:o=[],appendAnnounce:s=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(i=>i.toString()),this.announce=new Set(o.map(i=>i.toString())),this.appendAnnounce=new Set(s.map(i=>i.toString())),this.observed=new Ih(e,t),this.dnsMappings=new Sh(e,t),this.ipMappings=new Ah(e,t),this.transportAddresses=new Th(e,t),this.announceFilter=t.announceFilter??kP,this.observedAddressFilter=Et(1024),this.addressVerificationTTL=t.addressVerificationTTL??Cw.addressVerificationTTL,this.addressVerificationRetry=t.addressVerificationRetry??Cw.addressVerificationRetry,this._updatePeerStoreAddresses=zn(this._updatePeerStoreAddresses.bind(this),1e3),e.events.addEventListener("transport:listening",()=>{this._updatePeerStoreAddresses()}),e.events.addEventListener("transport:close",()=>{this._updatePeerStoreAddresses()})}[Symbol.toStringTag]="@libp2p/address-manager";_updatePeerStoreAddresses(){let e=this.getAddresses().map(t=>t.getComponents().findLast(n=>n.code===421)?.value===this.components.peerId.toString()?t.decapsulate(`/p2p/${this.components.peerId.toString()}`):t);this.components.peerStore.patch(this.components.peerId,{multiaddrs:e}).catch(t=>{this.log.error("error updating addresses - %e",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>q(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>q(e))}getAppendAnnounceAddrs(){return Array.from(this.appendAnnounce).map(e=>q(e))}getObservedAddrs(){return this.observed.getAll().map(e=>e.multiaddr)}addObservedAddr(e){let t=oe(e),n;switch(t.type){case"ip4":{n=`${t.host}:${t.port}`;break}case"ip6":{n=`[${t.host}]:${t.port}`;break}default:return}this.observedAddressFilter.has(n)||(this.observedAddressFilter.add(n),e=R3(e,this.components.peerId),!this.ipMappings.has(e)&&(this.dnsMappings.has(e)||this.observed.add(e)))}confirmObservedAddr(e,t){e=R3(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=R3(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=q(n);return o.getComponents().pop()?.value===this.components.peerId.toString()?o:o.encapsulate(`/p2p/${this.components.peerId.toString()}`)}))}getAddressesWithMetadata(){let e=this.getAnnounceAddrs();if(e.length>0)return this.components.transportManager.getListeners().forEach(o=>{o.updateAnnounceAddrs(e)}),e.map(o=>({multiaddr:o,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()}));let t=[];t=t.concat(this.components.transportManager.getAddrs().map(o=>this.transportAddresses.get(o,this.addressVerificationTTL)));let n=this.getAppendAnnounceAddrs();return n.length>0&&(this.components.transportManager.getListeners().forEach(o=>{o.updateAnnounceAddrs(n)}),t=t.concat(n.map(o=>({multiaddr:o,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()})))),t=t.concat(this.observed.getAll()),t=t.concat(this.ipMappings.getAll(t)),t=t.concat(this.dnsMappings.getAll(t)),t}addDNSMapping(e,t){this.dnsMappings.add(e,t)}removeDNSMapping(e){this.dnsMappings.remove(q(`/dns/${e}`))&&this._updatePeerStoreAddresses()}addPublicAddressMapping(e,t,n,o=t,s="tcp"){this.ipMappings.add(e,t,n,o,s),this.observed.removePrefixed(`/ip${Wr(n)?4:6}/${n}/${s}/${o}`)}removePublicAddressMapping(e,t,n,o=t,s="tcp"){this.ipMappings.remove(q(`/ip${Wr(n)?4:6}/${n}/${s}/${o}`))&&this._updatePeerStoreAddresses()}maybeUpgradeToIPMapping(e){if(this.ipMappings.has(e)||!xt(e))return!1;let t=oe(e);if(t.type!=="ip4"||Ki(t.host)===!0)return!1;let n=this.components.transportManager.getListeners(),o=[s=>ro.exactMatch(s)||Xs.exactMatch(s),s=>Qs.exactMatch(s),s=>M9.exactMatch(s)];for(let s of o){if(!s(e))continue;let i=n.filter(l=>l.getAddrs().filter(d=>oe(d).type==="ip4"&&s(d)).length>0);if(i.length!==1)continue;let a=i[0].getAddrs().filter(l=>!Oc(l)).pop();if(a==null)continue;let c=oe(a);return c.port==null?!1:(this.observed.remove(e),this.ipMappings.add(c.host,c.port,t.host,t.port,t.protocol),!0)}return!1}};var _w;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(_w||(_w={}));var _h=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},kh=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},Ea=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"}},Ph=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},Rh=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},Lh=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},Cl=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},Dh=class extends Error{constructor(e="No transport was configured to listen on this address"){super(e),this.name="UnsupportedListenAddressError"}},Nh=class extends Error{constructor(e="Configured listen addresses could not be listened on"){super(e),this.name="UnsupportedListenAddressesError"}},Oh=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},Mh=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},Bh=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},Wo=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},ei=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},Uh=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}},Fh=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}};var L3=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=ra())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>Pu(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")}},PP=["metrics","connectionProtector","dns"],RP=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function kw(r={}){let e=new L3(r);return new Proxy(e,{get(n,o,s){if(typeof o=="string"&&!RP.includes(o)){let i=e.components[o];if(i==null&&!PP.includes(o))throw new _h(`${o} not set`);return i}return Reflect.get(n,o,s)},set(n,o,s){return typeof o=="string"?e.components[o]=s:Reflect.set(n,o,s),!0}})}function Pw(r){let e={};for(let t of Object.values(r.components))for(let n of LP(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of DP(t))if(e[n]!==!0)throw new kh(`Service "${NP(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function LP(r){return Array.isArray(r?.[me])?r[me]:[]}function DP(r){return Array.isArray(r?.[ur])?r[ur]:[]}function NP(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}function Rw(r={}){return r.denyDialMultiaddr==null&&(r.denyDialMultiaddr=e=>ro.matches(e)?!0:Qe(e)),r}var OP=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 MP(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:d}=OP(r),u=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(g){n(),i(g);return}c.push(p),t.count===c.length&&(n(),s(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)a.includes(h)||d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&s(c)});if(o.cancel=n,typeof t.timeout=="number"){let s=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function _l(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=MP(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}function $h(r){if(Rt(r))return{peerId:r,multiaddrs:[]};let e=Array.isArray(r)?r:[r],t;if(e.length>0){let n=e[0].getComponents().findLast(o=>o.code===421)?.value;t=n==null?void 0:Me(n),e.forEach(o=>{if(!yn(o))throw new ln("Invalid multiaddr");let s=o.getComponents().findLast(i=>i.code===421)?.value;if(s==null){if(t!=null)throw new A("Multiaddrs must all have the same peer id or have no peer id")}else{let i=Me(s);if(t?.equals(i)!==!0)throw new A("Multiaddrs must all have the same peer id or have no peer id")}})}return e=e.filter(n=>!R9.exactMatch(n)),{peerId:t,multiaddrs:e}}var BP=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function Lw(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??BP;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}function kl(r){let e=oe(r),t=e.cidr;if(e.type!=="ip4"&&e.type!=="ip6")throw new A(`Multiaddr ${r} was not an IPv4 or IPv6 address`);if(t==null)switch(e.type){case"ip4":{t=32;break}case"ip6":{t=128;break}default:throw new A(`Multiaddr ${r} was not an IPv4 or IPv6 address`)}return new Ns(e.host,t)}function D3(r){return!yt.exactMatch(r)}function Kh(r,e,t){if(r==null||e==null)return;let n=e.sort((s,i)=>s.direct?-1:i.direct?1:0).find(s=>s.limits==null);if(n==null||n.direct||t==null)return n;if(!t.some(s=>D3(s)))return n}var Vh=class{connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.allow=(t.allow??[]).map(n=>kl(n)),this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager:connection-pruner"),this.maybePruneConnections=this.maybePruneConnections.bind(this)}start(){this.events.addEventListener("connection:open",this.maybePruneConnections)}stop(){this.events.removeEventListener("connection:open",this.maybePruneConnections)}maybePruneConnections(){this._maybePruneConnections().catch(e=>{this.log.error("error while pruning connections - %e",e)})}async _maybePruneConnections(){let e=this.connectionManager.getConnections(),t=e.length,n=this.connectionManager.getMaxConnections();if(this.log("checking max connections limit %d/%d",t,n),t<=n)return;let o=new Ut;for(let c of e){let l=c.remotePeer;if(!o.has(l)){o.set(l,0);try{let d=await this.peerStore.get(l);o.set(l,[...d.tags.values()].reduce((u,f)=>u+f.value,0))}catch(d){d.name!=="NotFoundError"&&this.log.error("error loading peer tags - %e",d)}}}let s=this.sortConnections(e,o),i=Math.max(t-n,0),a=[];for(let c of s)if(this.log("too many connections open - closing a connection to %p",c.remotePeer),this.allow.some(d=>{if(xt(c.remoteAddr)){let u=oe(c.remoteAddr);return d.contains(u.host)}return!0})||a.push(c),a.length===i)break;await Promise.all(a.map(async c=>{await Lw(c,{signal:AbortSignal.timeout(1e3)})})),this.events.safeDispatchEvent("connection:prune",{detail:a})}sortConnections(e,t){return e.sort((n,o)=>{let s=n.timeline.open,i=o.timeline.open;return s<i?1:s>i?-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 s=t.get(n.remotePeer)??0,i=t.get(o.remotePeer)??0;return s>i?1:s<i?-1:0})}};var Dw="last-dial-failure",Nw="last-dial-success";var Ow=100,Hh=50;function UP(r,e){let t=Qs.exactMatch(r.multiaddr),n=Qs.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=Xs.exactMatch(r.multiaddr),s=Xs.exactMatch(e.multiaddr);if(o&&!s)return-1;if(!o&&s)return 1;let i=ro.exactMatch(r.multiaddr),a=ro.exactMatch(e.multiaddr);if(i&&!a)return-1;if(!i&&a)return 1;let c=yl.exactMatch(r.multiaddr),l=yl.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let d=gl.exactMatch(r.multiaddr),u=gl.exactMatch(e.multiaddr);if(d&&!u)return-1;if(!d&&u)return 1;let f=d3.exactMatch(r.multiaddr),h=d3.exactMatch(e.multiaddr);return f&&!h?-1:!f&&h?1:0}function FP(r,e){let t=Oc(r.multiaddr),n=Oc(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function $P(r,e){let t=Qe(r.multiaddr),n=Qe(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function KP(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function VP(r,e){let t=yt.exactMatch(r.multiaddr),n=yt.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Mw(r){return r.sort(UP).sort(KP).sort(VP).sort($P).sort(FP)}var N3=class{dns;canResolve(e){return e.getComponents().some(({name:t})=>t==="dnsaddr")}async resolve(e,t){let n=e.getComponents().find(c=>c.name==="dnsaddr")?.value;if(n==null)return[e];let s=await this.getDNS(t).query(`_dnsaddr.${n}`,{signal:t?.signal,types:[dr.TXT]}),i=e.getComponents().find(c=>c.name==="p2p")?.value,a=[];for(let c of s.Answer){let l=c.data.replace(/["']/g,"").trim().split("=")[1];l!=null&&(i!=null&&!l.includes(i)||a.push(q(l)))}return a}getDNS(e){return e.dns!=null?e.dns:(this.dns==null&&(this.dns=$u()),this.dns)}},Pl=new N3;async function O3(r,e,t){let n=t.depth??0;if(n>(t.maxRecursiveDepth??32))throw new Fh("Max recursive depth reached");let o=!1,s=[];for(let i of Object.values(e))if(i.canResolve(r)){o=!0;let a=await i.resolve(r,t);for(let c of a)s.push(...await O3(c,e,{...t,depth:n+1}))}return o===!1&&s.push(r),s}var Rl={maxParallelDials:Hh,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:1e4,resolvers:{dnsaddr:Pl}},qh=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;resolvers;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??Rl.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??Rl.maxDialQueueLength,this.dialTimeout=t.dialTimeout??Rl.dialTimeout,this.connections=t.connections??new Ut,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.resolvers=t.resolvers??Rl.resolvers,this.shutDownController=new AbortController,this.shutDownController.signal,this.queue=new Xd({concurrency:t.maxParallelDials??Rl.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("failure",n=>{n.detail?.error.name!==Vt.name&&this.log.error("error in dial queue - %e",n.detail.error)})}start(){this.shutDownController=new AbortController,this.shutDownController.signal}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=$h(e);if(n!=null&&t.force!==!0){let i=Kh(n,this.connections.get(n),o);if(i!=null)return this.log("already connected to %a",i.remoteAddr),t.onProgress?.(new H("dial-queue:already-connected")),i}let s=this.queue.queue.find(i=>{if(n?.equals(i.options.peerId)===!0)return!0;let a=i.options.multiaddrs;if(a==null)return!1;for(let c of o)if(a.has(c.toString()))return!0;return!1});if(s!=null){this.log("joining existing dial target for %p",n);for(let i of o)s.options.multiaddrs.add(i.toString());return t.onProgress?.(new H("dial-queue:already-in-dial-queue")),s.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new Eo("Dial queue is full");return this.log("creating dial target for %p",n,o.map(i=>i.toString())),t.onProgress?.(new H("dial-queue:add-to-dial-queue")),this.queue.add(async i=>{i.onProgress?.(new H("dial-queue:start-dial"));let a=le([this.shutDownController.signal,i.signal]);try{return await this.dialPeer(i,a)}finally{a.clear()}},{peerId:n,priority:t.priority??F3,multiaddrs:new Set(o.map(i=>i.toString())),signal:t.signal??AbortSignal.timeout(this.dialTimeout),onProgress:t.onProgress})}async dialPeer(e,t){let n=e.peerId,o=e.multiaddrs,s=new Set,i=e.multiaddrs.size===0,a=0,c=0,l=[];for(this.log("starting dial to %p",n);i||o.size>0;){c++,i=!1;let d=[],u=new Set(e.multiaddrs);o.clear(),this.log("calculating addrs to dial %p from %s",n,[...u]);let f=await this.calculateMultiaddrs(n,u,{...e,signal:t});for(let h of f){if(s.has(h.multiaddr.toString())){this.log.trace("skipping previously failed multiaddr %a while dialing %p",h.multiaddr,n);continue}d.push(h)}this.log("%s dial to %p with %s",c===1?"starting":"continuing",n,d.map(h=>h.multiaddr.toString())),e?.onProgress?.(new H("dial-queue:calculated-addresses",d));for(let h of d){if(a===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",a,e.peerId),new Eo("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:{[Nw]:_(Date.now().toString())}})}catch(g){this.log.error("could not update last dial failure key for %p - %e",n,g)}return p}catch(p){if(this.log.error("dial failed to %a - %e",h.multiaddr,p),s.add(h.multiaddr.toString()),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[Dw]:_(Date.now().toString())}})}catch(g){this.log.error("could not update last dial failure key for %p - %e",n,g)}if(t.aborted)throw new un(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(u=>({multiaddr:q(u),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new Eo("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new Cl("The dial request is blocked by gater.allowDialPeer");if(o.length===0){this.log("loading multiaddrs for %p",e);try{let u=await this.components.peerStore.get(e);o.push(...u.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:f})=>f.toString()))}catch(u){if(u.name!=="NotFoundError")throw u}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let u=await this.components.peerRouting.findPeer(e,n);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:f})=>f.toString())),o.push(...u.multiaddrs.map(f=>({multiaddr:f,isCertified:!1})))}catch(u){u.name==="NoPeerRoutersError"?this.log("no peer routers configured",e):this.log.error("looking up multiaddrs for %p in the peer routing failed - %e",e,u)}}}let s=(await Promise.all(o.map(async u=>{let f=await O3(u.multiaddr,this.resolvers,{dns:this.components.dns,log:this.log,...n});return f.length===1&&f[0].equals(u.multiaddr)?u:f.map(h=>({multiaddr:h,isCertified:!1}))}))).flat();if(e!=null){let u=`/p2p/${e.toString()}`;s=s.map(f=>f.multiaddr.getComponents().pop()?.name!=="p2p"?{multiaddr:f.multiaddr.encapsulate(u),isCertified:f.isCertified}:f)}let i=s.filter(u=>{if(this.components.transportManager.dialTransportForMultiaddr(u.multiaddr)==null)return!1;let f=u.multiaddr.getComponents().findLast(h=>h.code===421)?.value;return e!=null&&f!=null?e.equals(f):!0}),a=new Map;for(let u of i){let f=u.multiaddr.toString(),h=a.get(f);if(h!=null){h.isCertified=h.isCertified||u.isCertified||!1;continue}a.set(f,u)}let c=[...a.values()];if(c.length===0)throw new Oh("The dial request has no valid addresses");let l=[];for(let u of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(u.multiaddr)||l.push(u);let d=this.addressSorter==null?Mw(l):l.sort(this.addressSorter);if(d.length===0)throw new Cl("The connection gater denied all addresses in the dial request");return this.log.trace("addresses for %p before filtering",e??"unknown peer",s.map(({multiaddr:u})=>u.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",d.map(({multiaddr:u})=>u.toString())),d}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=>!yt.matches(o.multiaddr))!=null:!0}catch{}return!1}};var HP=Object.prototype.toString,qP=r=>HP.call(r)==="[object Error]",zP=new Set(["network error","Failed to fetch","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Network request failed","fetch failed","terminated"," A network error occurred.","Network connection lost"]);function $3(r){if(!(r&&qP(r)&&r.name==="TypeError"&&typeof r.message=="string"))return!1;let{message:t,stack:n}=r;return t==="Load failed"?n===void 0||"__sentry_captured__"in r:t.startsWith("error sending request for url")?!0:zP.has(t)}function WP(r){if(typeof r=="number"){if(r<0)throw new TypeError("Expected `retries` to be a non-negative number.");if(Number.isNaN(r))throw new TypeError("Expected `retries` to be a valid number or Infinity, got NaN.")}else if(r!==void 0)throw new TypeError("Expected `retries` to be a number or Infinity.")}function zh(r,e,{min:t=0,allowInfinity:n=!1}={}){if(e!==void 0){if(typeof e!="number"||Number.isNaN(e))throw new TypeError(`Expected \`${r}\` to be a number${n?" or Infinity":""}.`);if(!n&&!Number.isFinite(e))throw new TypeError(`Expected \`${r}\` to be a finite number.`);if(e<t)throw new TypeError(`Expected \`${r}\` to be \u2265 ${t}.`)}}var K3=class extends Error{constructor(e){super(),e instanceof Error?(this.originalError=e,{message:e}=e):(this.originalError=new Error(e),this.originalError.stack=this.stack),this.name="AbortError",this.message=e}};function GP(r,e){let t=Math.max(1,r+1),n=e.randomize?Math.random()+1:1,o=Math.round(n*e.minTimeout*e.factor**(t-1));return o=Math.min(o,e.maxTimeout),o}function Bw(r,e){return Number.isFinite(e)?e-(performance.now()-r):e}async function YP({error:r,attemptNumber:e,retriesConsumed:t,startTime:n,options:o}){let s=r instanceof Error?r:new TypeError(`Non-error was thrown: "${r}". You should only throw errors.`);if(s instanceof K3)throw s.originalError;let i=Number.isFinite(o.retries)?Math.max(0,o.retries-t):o.retries,a=o.maxRetryTime??Number.POSITIVE_INFINITY,c=Object.freeze({error:s,attemptNumber:e,retriesLeft:i,retriesConsumed:t});if(await o.onFailedAttempt(c),Bw(n,a)<=0)throw s;let l=await o.shouldConsumeRetry(c),d=Bw(n,a);if(d<=0||i<=0)throw s;if(s instanceof TypeError&&!$3(s)){if(l)throw s;return o.signal?.throwIfAborted(),!1}if(!await o.shouldRetry(c))throw s;if(!l)return o.signal?.throwIfAborted(),!1;let u=GP(t,o),f=Math.min(u,d);return o.signal?.throwIfAborted(),f>0&&await new Promise((h,p)=>{let g=()=>{clearTimeout(m),o.signal?.removeEventListener("abort",g),p(o.signal.reason)},m=setTimeout(()=>{o.signal?.removeEventListener("abort",g),h()},f);o.unref&&m.unref?.(),o.signal?.addEventListener("abort",g,{once:!0})}),o.signal?.throwIfAborted(),!0}async function V3(r,e={}){if(e={...e},WP(e.retries),Object.hasOwn(e,"forever"))throw new Error("The `forever` option is no longer supported. For many use-cases, you can set `retries: Infinity` instead.");e.retries??=10,e.factor??=2,e.minTimeout??=1e3,e.maxTimeout??=Number.POSITIVE_INFINITY,e.maxRetryTime??=Number.POSITIVE_INFINITY,e.randomize??=!1,e.onFailedAttempt??=()=>{},e.shouldRetry??=()=>!0,e.shouldConsumeRetry??=()=>!0,zh("factor",e.factor,{min:0,allowInfinity:!1}),zh("minTimeout",e.minTimeout,{min:0,allowInfinity:!1}),zh("maxTimeout",e.maxTimeout,{min:0,allowInfinity:!0}),zh("maxRetryTime",e.maxRetryTime,{min:0,allowInfinity:!0}),e.factor>0||(e.factor=1),e.signal?.throwIfAborted();let t=0,n=0,o=performance.now();for(;!Number.isFinite(e.retries)||n<=e.retries;){t++;try{e.signal?.throwIfAborted();let s=await r(t);return e.signal?.throwIfAborted(),s}catch(s){await YP({error:s,attemptNumber:t,retriesConsumed:n,startTime:o,options:e})&&n++}}throw new Error("Retry attempts exhausted without throwing an error.")}var Wh=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 It({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);Uw(t)&&(this.queue.has(e)||this.queue.add(async n=>{await V3(async o=>{if(this.started)try{await this.connectionManager.openConnection(e,{signal:n?.signal})}catch(s){throw this.log("reconnecting to %p attempt %d of %d failed - %e",e,o,this.retries,s),s}},{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(s=>{s.startsWith(us)&&(o[s]=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=>Uw(t)]});await Promise.all(e.map(async t=>{await this.connectionManager.openConnection(t.id).catch(n=>{this.log.error("could not open connection to keepalive peer - %e",n)})}))}).catch(e=>{this.log.error("error reconnect to peers after start - %e",e)})}stop(){this.started=!1,this.queue.abort()}};function Uw(r){for(let e of r.tags.keys())if(e.startsWith(us))return!0;return!1}var F3=50,H3={maxConnections:Ow,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},Gh=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??H3.maxConnections,this.maxConnections<1)throw new A("Connection Manager maxConnections must be greater than 0");this.connections=new Ut,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=>kl(q(n))),this.deny=(t.deny??[]).map(n=>kl(q(n))),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??H3.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new na({points:t.inboundConnectionThreshold??H3.inboundConnectionThreshold,duration:1}),this.connectionPruner=new Vh({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{allow:t.allow?.map(n=>q(n))}),this.dialQueue=new qh(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??Hh,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??1e4,resolvers:t.resolvers??{dnsaddr:Pl},connections:this.connections}),this.reconnectQueue=new Wh({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 s=`${o.direction} ${o.protocol??"unnegotiated"}`;e[s]=(e[s]??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 s={};for(let i of o.streams){let a=`${i.direction} ${i.protocol??"unnegotiated"}`;s[a]=(s[a]??0)+1}for(let[i,a]of Object.entries(s))e[i]=e[i]??[],e[i].push(a)}let t={};for(let[n,o]of Object.entries(e)){o=o.sort((i,a)=>i-a);let s=Math.floor(o.length*.9);t[n]=o[s]}return t}}),this.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),await at(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 lt(this.reconnectQueue,this.dialQueue,this.connectionPruner);let e=[];for(let t of this.connections.values())for(let n of t)e.push(Promise.all([_l(n,"close",{signal:AbortSignal.timeout(500)}),n.close({signal:AbortSignal.timeout(500)})]).catch(o=>{n.abort(o)}));this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}getMaxConnections(){return this.maxConnections}setMaxConnections(e){if(this.maxConnections<1)throw new A("Connection Manager maxConnections must be greater than 0");let t=!1;e<this.maxConnections&&(t=!0),this.maxConnections=e,t&&this.connectionPruner.maybePruneConnections()}onConnect(e){this._onConnect(e).catch(t=>{this.log.error("could not connect - %e",t)})}async _onConnect(e){let{detail:t}=e;if(!this.started){await t.close();return}if(t.status!=="open")return;let n=t.remotePeer,o=!this.connections.has(n),s=this.connections.get(n)??[];s.push(t),this.connections.set(n,s),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,s=(this.connections.get(n)??[]).filter(i=>i.id!==t.id);this.connections.set(n,s),s.length===0&&(this.log.trace("peer %p disconnected, removing connection map entry",n),this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:n}))}getConnections(e){if(e!=null)return this.connections.get(e)??[];let t=[];for(let n of this.connections.values())t=t.concat(n);return t}getConnectionsMap(){return this.connections}async openConnection(e,t={}){if(!this.started)throw new Ur("Not started");this.outboundPendingConnections++;try{t.signal?.throwIfAborted();let{peerId:n,multiaddrs:o}=$h(e);if(this.peerId.equals(n))throw new hi("Can not dial self");if(n!=null&&t.force!==!0){this.log("dial %p",n);let c=Kh(n,this.getConnections(n),o);if(c!=null)return this.log("had an existing connection to %p as %a",n,c.remoteAddr),t.onProgress?.(new H("dial-queue:already-connected")),c}let s=await this.dialQueue.dial(e,{...t,priority:t.priority??F3});if(s.status!=="open")throw new is("Remote closed connection during opening");let i=this.connections.get(s.remotePeer);i==null&&(i=[],this.connections.set(s.remotePeer,i));let a=!1;for(let c of i)if(c.id===s.id&&(a=!0),t.force!==!0&&c.id!==s.id&&c.remoteAddr.equals(s.remoteAddr))return s.abort(new ln("Duplicate multiaddr connection")),c;return a||i.push(s),s}finally{this.outboundPendingConnections--}}async openStream(e,t,n={}){return(await this.openConnection(e,n)).newStream(t,n)}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await Promise.all([_l(o,"close",t),o.close(t)])}catch(s){o.abort(s)}}))}acceptIncomingConnection(e){if(this.deny.some(o=>{if(xt(e.remoteAddr)){let s=oe(e.remoteAddr);return o.contains(s.host)}return!1}))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>{if(xt(e.remoteAddr)){let s=oe(e.remoteAddr);return o.contains(s.host)}return!0}))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(xt(e.remoteAddr)){let o=oe(e.remoteAddr);try{this.inboundConnectionRateLimiter.consume(o.host,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o.host),!1}}return this.getConnections().length<this.maxConnections?(this.incomingPendingConnections++,!0):(this.log("connection from %a refused - maxConnections exceeded",e.remoteAddr),!1)}afterUpgradeInbound(){this.incomingPendingConnections--}getDialQueue(){let e={queued:"queued",running:"active",errored:"error",complete:"success"};return this.dialQueue.queue.queue.map(t=>({id:t.id,status:e[t.status],peerId:t.options.peerId,multiaddrs:[...t.options.multiaddrs].map(n=>q(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var XP=1e4,ZP="1.0.0",JP="ping",eR="ipfs",Fw=32,tR=!0,Yh=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??eR}/${JP}/${ZP}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??XP,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??tR,this.timeout=new Gr({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[me]=["@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}),s=_d(o);t=Date.now(),await Promise.all([s.write(Yt(Fw),{signal:n}),s.read({bytes:Fw,signal:n})]),e.rtt=Date.now()-t,await o.close({signal:n})}catch(n){if(n.name!=="UnsupportedProtocolError")throw n;e.rtt=(Date.now()-t)/2}}).catch(t=>{this.log.error("error during heartbeat - %e",t),this.abortConnectionOnPingFailure?(this.log.error("aborting connection due to ping failure"),e.abort(t)):this.log("connection ping failed, but not aborting due to abortConnectionOnPingFailure flag")})})},this.pingIntervalMs)}stop(){this.abortController?.abort(),this.heartbeatInterval!=null&&clearInterval(this.heartbeatInterval)}};var jh=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:R(n,"base36")})})??this.put,this.get=e.metrics?.traceFunction("libp2p.contentRouting.get",this.get.bind(this),{optionsIndex:1,getAttributesFromArgs:([n])=>({key:R(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 Ea("No content routers available");let n=this,o=new xr;for await(let s of jt(...n.routers.filter(i=>i.findProviders instanceof Function).map(i=>i.findProviders(e,t))))s!=null&&(s.multiaddrs.length>0&&await this.components.peerStore.merge(s.id,{multiaddrs:s.multiaddrs},t),!o.has(s.id)&&(o.add(s.id),yield s))}async provide(e,t={}){if(this.routers.length===0)throw new Ea("No content routers available");await Promise.all(this.routers.filter(n=>n.provide instanceof Function).map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){if(this.routers.length===0)throw new Ea("No content routers available");await Promise.all(this.routers.filter(n=>n.cancelReprovide instanceof Function).map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new Ur;await Promise.all(this.routers.filter(o=>o.put instanceof Function).map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new Ur;return Promise.any(this.routers.filter(n=>n.get instanceof Function).map(async n=>n.get(e,t)))}};var Qh=globalThis.CustomEvent??Event;async function*io(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered??!1,o=new EventTarget,s=[],i=fe(),a=fe(),c=!1,l,d=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let p of r){if(s.length===t&&(i=fe(),await i.promise),d)break;let g={done:!1};s.push(g),p().then(m=>{g.done=!0,g.ok=!0,g.value=m,o.dispatchEvent(new Qh("task-complete"))},m=>{g.done=!0,g.err=m,o.dispatchEvent(new Qh("task-complete"))})}c=!0,o.dispatchEvent(new Qh("task-complete"))}catch(p){l=p,o.dispatchEvent(new Qh("task-complete"))}});function u(){return n?s[0]?.done:!!s.find(p=>p.done)}function*f(){for(;s.length>0&&s[0].done;){let p=s[0];if(s.shift(),p.ok)yield p.value;else throw d=!0,i.resolve(),p.err;i.resolve()}}function*h(){for(;u();)for(let p=0;p<s.length;p++)if(s[p].done){let g=s[p];if(s.splice(p,1),p--,g.ok)yield g.value;else throw d=!0,i.resolve(),g.err;i.resolve()}}for(;;){if(u()||(a=fe(),await a.promise),l!=null||(n?yield*f():yield*h(),l!=null))throw l;if(c&&s.length===0)break}}var Xh=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:R(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 Ph("Should not try to find self");let n=this,o=jt(...this.routers.filter(s=>s.findPeer instanceof Function).map(s=>(async function*(){try{yield await s.findPeer(e,t)}catch(i){n.log.error("router failed to find peer - %e",i)}})()));for await(let s of o)if(s!=null)return s.multiaddrs.length>0&&await this.peerStore.merge(s.id,{multiaddrs:s.multiaddrs},t),s;throw new Le}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Tl("No peer routers available");let n=this,o=Et(1024);for await(let s of io((async function*(){let i=jt(...n.routers.filter(a=>a.getClosestPeers instanceof Function).map(a=>a.getClosestPeers(e,t)));for await(let a of i)yield async()=>{if(a.multiaddrs.length===0)try{a=await n.findPeer(a.id,{...t,useCache:!1})}catch(c){n.log.error("could not find peer multiaddrs - %e",c);return}return a}})()))s!=null&&(s.multiaddrs.length>0&&await this.peerStore.merge(s.id,{multiaddrs:s.multiaddrs},t),!o.has(s.id.toMultihash().bytes)&&(o.add(s.id.toMultihash().bytes),yield s))}};var Zh=class extends ie{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=fe(),yield(await _l(this,"walk:peer",{signal:t,rejectionEvents:["walk:error"]})).detail}catch(n){throw n.detail!=null?n.detail:n}finally{t.clear(),this.walkers--,this.walkers===0&&(this.walkController?.abort(),this.walkController=void 0)}}startWalk(){this.walking=!0,this.walkController=new AbortController,this.walkController.signal;let e=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=Yt(32),s=Date.now();for await(let i 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",i.id,Date.now()-s,this.walkers),n++,this.safeDispatchEvent("walk:peer",{detail:i}),this.walkers===1&&this.needNext!=null&&(this.log("wait for need next"),await Pe(this.needNext.promise,e)),s=Date.now();this.log("walk iteration for %b and %d walkers finished, found %d peers",o,this.walkers,n)}catch(o){this.log.error("random walk errored - %e",o),this.safeDispatchEvent("walk:error",{detail:o})}this.log("no walkers left, ended walk")}).catch(o=>{this.log.error("random walk errored - %e",o)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var q3=32,z3=64,Jh=class{log;topologies;handlers;components;middleware;constructor(e){this.components=e,this.log=e.logger.forComponent("libp2p:registrar"),this.middleware=new Map,this.topologies=new Map,e.metrics?.registerMetricGroup("libp2p_registrar_topologies",{calculate:()=>{let t={};for(let[n,o]of this.topologies)t[n]=o.size;return t}}),this.handlers=ot({name:"libp2p_registrar_protocol_handlers",metrics:e.metrics}),this._onDisconnect=this._onDisconnect.bind(this),this._onPeerUpdate=this._onPeerUpdate.bind(this),this._onPeerIdentify=this._onPeerIdentify.bind(this),this.components.events.addEventListener("peer:disconnect",this._onDisconnect),this.components.events.addEventListener("peer:update",this._onPeerUpdate),this.components.events.addEventListener("peer:identify",this._onPeerIdentify)}[Symbol.toStringTag]="@libp2p/registrar";getProtocols(){return Array.from(new Set([...this.handlers.keys()])).sort()}getHandler(e){let t=this.handlers.get(e);if(t==null)throw new Rh(`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 Lh(`Handler already registered for protocol ${e}`);this.handlers.set(e,{handler:t,options:{maxInboundStreams:q3,maxOutboundStreams:z3,...n}}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]},n)}async unhandle(e,t){(Array.isArray(e)?e:[e]).forEach(o=>{this.handlers.delete(o)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()},t)}async register(e,t){if(t==null)throw new A("invalid topology");let n=`${(Math.random()*1e9).toString(36)}${Date.now()}`,o=this.topologies.get(e);return o==null&&(o=new Map,this.topologies.set(e,o)),o.set(n,t),n}unregister(e){for(let[t,n]of this.topologies.entries())n.has(e)&&(n.delete(e),n.size===0&&this.topologies.delete(t))}use(e,t){this.middleware.set(e,t)}unuse(e){this.middleware.delete(e)}getMiddleware(e){return this.middleware.get(e)??[]}async _onDisconnect(e){let t=e.detail,n={signal:AbortSignal.timeout(5e3)};try{let o=await this.components.peerStore.get(t,n);for(let s of o.protocols){let i=this.topologies.get(s);i!=null&&await Promise.all([...i.values()].map(async a=>{a.filter?.has(t)!==!1&&(a.filter?.remove(t),await a.onDisconnect?.(t))}))}}catch(o){if(o.name==="NotFoundError")return;this.log.error("could not inform topologies of disconnecting peer %p - %e",t,o)}}async _onPeerUpdate(e){let{peer:t,previous:n}=e.detail,o=(n?.protocols??[]).filter(s=>!t.protocols.includes(s));try{for(let s of o){let i=this.topologies.get(s);i!=null&&await Promise.all([...i.values()].map(async a=>{a.filter?.has(t.id)!==!1&&(a.filter?.remove(t.id),await a.onDisconnect?.(t.id))}))}}catch(s){this.log.error("could not inform topologies of updated peer %p - %e",t.id,s)}}async _onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;try{for(let s of t){let i=this.topologies.get(s);i!=null&&await Promise.all([...i.values()].map(async a=>{n.limits!=null&&a.notifyOnLimitedConnection!==!0||a.filter?.has(o)!==!0&&(a.filter?.add(o),await a.onConnect?.(o,n))}))}}catch(s){this.log.error("could not inform topologies of updated peer after identify %p - %e",o,s)}}};var e1=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=ot({name:"libp2p_transport_manager_transports",metrics:this.components.metrics}),this.listeners=ot({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??Qa.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new A("Transport must have a valid tag");if(this.transports.has(t))throw new A(`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 Uh(`No transport available for address ${String(e)}`);return t?.onProgress?.(new H("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 Ur("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(s=>{t.errors.set(s.toString(),new Dh)});let n=[];for(let[s,i]of this.transports.entries()){let a=i.listenFilter(e);for(let c of a){this.log("creating listener for %s on %a",s,c);let l=i.createListener({upgrader:this.components.upgrader}),d=this.listeners.get(s)??[];d==null&&(d=[],this.listeners.set(s,d)),d.push(l),l.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:l})}),l.addEventListener("close",()=>{let u=d.findIndex(f=>f===l);d.splice(u,1),this.components.events.safeDispatchEvent("transport:close",{detail:l})}),a3.matches(c)?t.ipv4.attempts++:c3.matches(c)&&t.ipv6.attempts++,n.push(l.listen(c).then(()=>{t.errors.delete(c.toString()),a3.matches(c)&&t.ipv4.success++,c3.matches(c)&&t.ipv6.success++},u=>{throw this.log.error("transport %s could not listen on address %a - %e",s,c,u),t.errors.set(c.toString(),u),u}))}}let o=await Promise.allSettled(n);if(!(o.length>0&&o.every(s=>s.status==="fulfilled"))){if(this.ipv6Unsupported(t)){this.log("all IPv4 addresses succeed but all IPv6 failed");return}if(this.faultTolerance===Qa.NO_FATAL){this.log("failed to listen on any address but fault tolerance allows this");return}throw new Nh(`Some configured addresses failed to be listened on, you may need to remove one or more listen addresses from your configuration or set \`transportManager.faultTolerance\` to NO_FATAL:
32
+ `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),Xk=new RegExp(`(?:^${rn}$)|(?:^${ph}$)`),Qk=new RegExp(`^${rn}$`),Zk=new RegExp(`^${ph}$`),y3=r=>r&&r.exact?Xk:new RegExp(`(?:${Wo(r)}${rn}${Wo(r)})|(?:${Wo(r)}${ph}${Wo(r)})`,"g");y3.v4=r=>r&&r.exact?Qk:new RegExp(`${Wo(r)}${rn}${Wo(r)}`,"g");y3.v6=r=>r&&r.exact?Zk:new RegExp(`${Wo(r)}${ph}${Wo(r)}`,"g");var w3=y3;function b3(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function rw(){return!1}var{toString:Jk}=Object.prototype;function E3(r){return Jk.call(r)==="[object RegExp]"}var nw={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function x3(r,e={}){if(!E3(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(nw).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?nw[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function v3(r,e,{timeout:t}={}){try{return b3(()=>x3(r).test(e),{timeout:t})()}catch(n){if(rw(n))return!1;throw n}}var eP=15,tP=45,ow={timeout:400};function S3(r){return r.length>tP?!1:v3(w3.v6({exact:!0}),r,ow)}function sw(r){return r.length>eP?!1:v3(w3.v4({exact:!0}),r,ow)}var iw={http:"80",https:"443",ws:"80",wss:"443"},rP=["http","https","ws","wss"];function mh(r,e){e=e??{};let t=e.defaultDnsType??"dns",{scheme:n,hostname:o,port:s,path:i}=nP(r),a=[oP(o,t),sP(s,n),iP(n)];i!=null&&a.push(aP(i));let c="/"+a.filter(l=>!!l).reduce((l,d)=>l.concat(d),[]).join("/");return q(c)}function nP(r){let[e]=r.split(":");rP.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o,pathname:s,search:i}=new URL(r);if(o==null||o===""){let c=cP(e);c!=null&&(o=c),c==null&&t==="http:"&&(o="80")}let a;return s!=null&&s!==""&&s!=="/"&&(s.startsWith("/")&&(s=s.substring(1)),a=s),i!=null&&i!==""&&(a=a??"",a+=i),{scheme:e,hostname:n,port:o,path:a}}function oP(r,e){if(!(r==null||r==="")){if(sw(r))return["ip4",r];if(S3(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(S3(t))return["ip6",t]}return[e,r]}}function sP(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function iP(r){if(r.match(/^tcp$|^udp$/)==null)return r==="https"?["/tls/http"]:r==="wss"?["/tls/ws"]:[r]}function aP(r){if(!(r==null||r===""))return["http-path",encodeURIComponent(r)]}function cP(r){if(!(r==null||r===""||iw[r]==null))return iw[r]}var lP=["https://trustless-gateway.link","https://4everland.io"],uP=2336;function dP(r){return r=r.toString(),{id:Jr(G.createV1(uP,dt.digest(C(r)))),multiaddrs:[mh(r)]}}function fP(r){return new URL(R(r.id.toMultihash().digest))}var A3=class{gateways;shuffle;constructor(e={}){this.gateways=(e.gateways??lP).map(t=>dP(t)),this.shuffle=e.shuffle??!0}async*findProviders(e,t){yield*(this.shuffle?this.gateways.toSorted(()=>Math.random()>.5?1:-1):this.gateways).map(n=>({...n,protocols:["transport-ipfs-gateway-http"],routing:"http-gateway-routing"}))}toString(){return`HTTPGatewayRouter([${this.gateways.map(e=>fP(e)).join(", ")}])`}};function I3(r={}){return new A3(r)}var T3=class{libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async cancelReprovide(e,t){await this.libp2p.contentRouting.cancelReprovide(e,t)}async*findProviders(e,t){yield*this.libp2p.contentRouting.findProviders(e,t)}async put(e,t,n){await this.libp2p.contentRouting.put(e,t,n)}async get(e,t){return this.libp2p.contentRouting.get(e,t)}async findPeer(e,t){return this.libp2p.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t){yield*this.libp2p.peerRouting.getClosestPeers(e,t)}toString(){return"Libp2pRouter()"}};function _3(r){return new T3(r)}function hP(r){return r[Symbol.asyncIterator]!=null}function pP(r){if(hP(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 no=pP;function mP(r){return typeof r?.then=="function"}var vl=class extends Jn{data;constructor(){super(),this.data=new Map}put(e,t,n){n?.signal?.throwIfAborted();let o;if(t instanceof Uint8Array)o=[t];else{let s=no(t);if(mP(s))return s.then(i=>this._put(e,i,n));o=s}return this._put(e,o,n)}_put(e,t,n){return n?.signal?.throwIfAborted(),this.data.set(ut.encode(e.multihash.bytes),t),e}*get(e,t){t?.signal?.throwIfAborted();let n=this.data.get(ut.encode(e.multihash.bytes));if(n==null)throw new Rr;yield*n}has(e,t){return t?.signal?.throwIfAborted(),this.data.has(ut.encode(e.multihash.bytes))}async delete(e,t){t?.signal?.throwIfAborted(),this.data.delete(ut.encode(e.multihash.bytes))}*getAll(e){e?.signal?.throwIfAborted();for(let[t,n]of this.data.entries())yield{cid:G.createV1(Mn,ke(ut.decode(t))),bytes:(async function*(){yield*n})()},e?.signal?.throwIfAborted()}};var sJ=Pr("blockstore:core:tiered");var aw="SHARDING";function yP(r){return r[Symbol.asyncIterator]!=null}function wP(r,e){return yP(r)?(async function*(){yield*(await no(r)).sort(e)})():(function*(){yield*no(r).sort(e)})()}var gh=wP;var oo=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 er(this.putMany(e,n)),e=[],await er(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=Zr(n,s=>s.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>Zr(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>gh(o,s),n)),e.offset!=null){let o=0,s=e.offset;n=Zr(n,()=>o++>=s)}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=Zr(n,s=>s.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>Zr(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>gh(o,s),n)),e.offset!=null){let o=e.offset,s=0;n=Zr(n,()=>s++>=o)}return e.limit!=null&&(n=Ho(n,e.limit)),n}};var Js=class extends oo{data;constructor(){super(),this.data=new Map}put(e,t,n){return n?.signal?.throwIfAborted(),this.data.set(e.toString(),t),e}get(e,t){t?.signal?.throwIfAborted();let n=this.data.get(e.toString());if(n==null)throw new Rr;return n}has(e,t){return t?.signal?.throwIfAborted(),this.data.has(e.toString())}delete(e,t){t?.signal?.throwIfAborted(),this.data.delete(e.toString())}*_all(e,t){t?.signal?.throwIfAborted();for(let[n,o]of this.data.entries())yield{key:new Fe(n),value:o},t?.signal?.throwIfAborted()}*_allKeys(e,t){t?.signal?.throwIfAborted();for(let n of this.data.keys())yield new Fe(n),t?.signal?.throwIfAborted()}};var BJ=new Fe(aw);var QJ=Pr("datastore:core:tiered");async function lw(r){if(r.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new A("Private network is enforced, but no protector was provided");return r}var Sl;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={publicKey:ae(0),payloadType:ae(0),payload:ae(0),signature:ae(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.publicKey=t.bytes();break}case 2:{s.payloadType=t.bytes();break}case 3:{s.payload=t.bytes();break}case 5:{s.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Sl||(Sl={}));var yh=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var vr=class r{static createFromProtobuf=e=>{let t=Sl.decode(e),n=tt(t.publicKey);return new r({publicKey:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t,n)=>{if(t==null)throw new Error("Missing private key");let o=e.domain,s=e.codec,i=e.marshal(),a=uw(o,s,i),c=await t.sign(a.subarray(),n);return new r({publicKey:t.publicKey,payloadType:s,payload:i,signature:c})};static openAndCertify=async(e,t,n)=>{let o=r.createFromProtobuf(e);if(!await o.validate(t,n))throw new yh("Envelope signature is not valid for the given domain");return o};publicKey;payloadType;payload;signature;marshaled;constructor(e){let{publicKey:t,payloadType:n,payload:o,signature:s}=e;this.publicKey=t,this.payloadType=n,this.payload=o,this.signature=s}marshal(){return this.marshaled==null&&(this.marshaled=Sl.encode({publicKey:ft(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return e==null?!1:ee(this.marshal(),e.marshal())}async validate(e,t){let n=uw(e,this.payloadType,this.payload);return this.publicKey.verify(n.subarray(),this.signature,t)}},uw=(r,e,t)=>{let n=C(r),o=Mt(n.byteLength),s=Mt(e.length),i=Mt(t.length);return new X(o,n,s,e,i,t)};var dw="libp2p-peer-record",fw=Uint8Array.from([3,1]);var Al;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=ne((s,i,a={})=>{a.lengthDelimited!==!1&&i.fork(),s.multiaddr!=null&&s.multiaddr.byteLength>0&&(i.uint32(10),i.bytes(s.multiaddr)),a.lengthDelimited!==!1&&i.ldelim()},(s,i,a={})=>{let c={multiaddr:ae(0)},l=i==null?s.len:s.pos+i;for(;s.pos<l;){let d=s.uint32();switch(d>>>3){case 1:{c.multiaddr=s.bytes();break}default:{s.skipType(d&7);break}}}return c})),o),n.encode=s=>re(s,n.codec()),n.decode=(s,i)=>te(s,n.codec(),i)})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=ne((n,o,s={})=>{if(s.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 i of n.addresses)o.uint32(26),r.AddressInfo.codec().encode(i,o);s.lengthDelimited!==!1&&o.ldelim()},(n,o,s={})=>{let i={peerId:ae(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:{i.peerId=n.bytes();break}case 2:{i.seq=n.uint64();break}case 3:{if(s.limits?.addresses!=null&&i.addresses.length===s.limits.addresses)throw new Ne('Decode error - map field "addresses" had too many elements');i.addresses.push(r.AddressInfo.codec().decode(n,n.uint32(),{limits:s.limits?.addresses$}));break}default:{n.skipType(c&7);break}}}return i})),t),r.encode=n=>re(n,r.codec()),r.decode=(n,o)=>te(n,r.codec(),o)})(Al||(Al={}));function hw(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 Qt=class r{static createFromProtobuf=e=>{let t=Al.decode(e),n=Ze(ke(t.peerId)),o=(t.addresses??[]).map(i=>q(i.multiaddr)),s=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:s})};static DOMAIN=dw;static CODEC=fw;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=Al.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||!hw(this.multiaddrs,e.multiaddrs))}};var so;(function(r){let e;(function(o){let s;o.codec=()=>(s==null&&(s=ne((i,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),i.key!=null&&i.key!==""&&(a.uint32(10),a.string(i.key)),i.value!=null&&i.value.byteLength>0&&(a.uint32(18),a.bytes(i.value)),c.lengthDelimited!==!1&&a.ldelim()},(i,a,c={})=>{let l={key:"",value:ae(0)},d=a==null?i.len:i.pos+a;for(;i.pos<d;){let u=i.uint32();switch(u>>>3){case 1:{l.key=i.string();break}case 2:{l.value=i.bytes();break}default:{i.skipType(u&7);break}}}return l})),s),o.encode=i=>re(i,o.codec()),o.decode=(i,a)=>te(i,o.codec(),a)})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let s;o.codec=()=>(s==null&&(s=ne((i,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),i.key!=null&&i.key!==""&&(a.uint32(10),a.string(i.key)),i.value!=null&&(a.uint32(18),bh.codec().encode(i.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(i,a,c={})=>{let l={key:""},d=a==null?i.len:i.pos+a;for(;i.pos<d;){let u=i.uint32();switch(u>>>3){case 1:{l.key=i.string();break}case 2:{l.value=bh.codec().decode(i,i.uint32(),{limits:c.limits?.value});break}default:{i.skipType(u&7);break}}}return l})),s),o.encode=i=>re(i,o.codec()),o.decode=(i,a)=>te(i,o.codec(),a)})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{if(i.lengthDelimited!==!1&&s.fork(),o.addresses!=null)for(let a of o.addresses)s.uint32(10),wh.codec().encode(a,s);if(o.protocols!=null)for(let a of o.protocols)s.uint32(18),s.string(a);if(o.publicKey!=null&&(s.uint32(34),s.bytes(o.publicKey)),o.peerRecordEnvelope!=null&&(s.uint32(42),s.bytes(o.peerRecordEnvelope)),o.metadata!=null&&o.metadata.size!==0)for(let[a,c]of o.metadata.entries())s.uint32(50),r.Peer$metadataEntry.codec().encode({key:a,value:c},s);if(o.tags!=null&&o.tags.size!==0)for(let[a,c]of o.tags.entries())s.uint32(58),r.Peer$tagsEntry.codec().encode({key:a,value:c},s);o.updated!=null&&(s.uint32(64),s.uint64Number(o.updated)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={addresses:[],protocols:[],metadata:new Map,tags:new Map},c=s==null?o.len:o.pos+s;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{if(i.limits?.addresses!=null&&a.addresses.length===i.limits.addresses)throw new Ne('Decode error - map field "addresses" had too many elements');a.addresses.push(wh.codec().decode(o,o.uint32(),{limits:i.limits?.addresses$}));break}case 2:{if(i.limits?.protocols!=null&&a.protocols.length===i.limits.protocols)throw new Ne('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(i.limits?.metadata!=null&&a.metadata.size===i.limits.metadata)throw new Ac('Decode error - map field "metadata" had too many elements');let d=r.Peer$metadataEntry.codec().decode(o,o.uint32());a.metadata.set(d.key,d.value);break}case 7:{if(i.limits?.tags!=null&&a.tags.size===i.limits.tags)throw new Ac('Decode error - map field "tags" had too many elements');let d=r.Peer$tagsEntry.codec().decode(o,o.uint32(),{limits:{value:i.limits?.tags$value}});a.tags.set(d.key,d.value);break}case 8:{a.updated=o.uint64Number();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(so||(so={}));var wh;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={multiaddr:ae(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.multiaddr=t.bytes();break}case 2:{s.isCertified=t.bool();break}case 3:{s.observed=t.uint64Number();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(wh||(wh={}));var bh;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={value:0},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.value=t.uint32();break}case 2:{s.expiry=t.uint64();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(bh||(bh={}));function bP(r,e){if(r.publicKey!=null||e.publicKey==null)return r;let t;r.type==="RSA"&&(t=r.toMultihash());let n=tt(e.publicKey,t);return xn(n)}function pw(r,e,t){let n=so.decode(e);return ba(r,n,t)}function ba(r,e,t){let n=new Map,o=BigInt(Date.now());for(let[s,i]of e.tags.entries())i.expiry!=null&&i.expiry<o||n.set(s,i);return{...e,id:bP(r,e),addresses:e.addresses.filter(({observed:s})=>s!=null&&s>Date.now()-t).map(({multiaddr:s,isCertified:i})=>({multiaddr:q(s),isCertified:i??!1})),metadata:e.metadata,peerRecordEnvelope:e.peerRecordEnvelope??void 0,tags:n}}function mw(r,e){return EP(r.addresses,e.addresses)&&xP(r.protocols,e.protocols)&&vP(r.publicKey,e.publicKey)&&SP(r.peerRecordEnvelope,e.peerRecordEnvelope)&&AP(r.metadata,e.metadata)&&IP(r.tags,e.tags)}function EP(r,e){return yw(r,e,(t,n)=>!(t.isCertified!==n.isCertified||!ee(t.multiaddr,n.multiaddr)))}function xP(r,e){return yw(r,e,(t,n)=>t===n)}function vP(r,e){return gw(r,e)}function SP(r,e){return gw(r,e)}function AP(r,e){return ww(r,e,(t,n)=>ee(t,n))}function IP(r,e){return ww(r,e,(t,n)=>t.value===n.value&&t.expiry===n.expiry)}function gw(r,e){return r==null&&e==null?!0:r!=null&&e!=null?ee(r,e):!1}function yw(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 ww(r,e,t){if(r.size!==e.size)return!1;for(let[n,o]of r.entries()){let s=e.get(n);if(s==null||!t(o,s))return!1}return!0}var C3="/peers/";function Il(r){if(!Rt(r)||r.type==null)throw new A("Invalid PeerId");let e=r.toCID().toString();return new Fe(`${C3}${e}`)}async function bw(r,e,t,n,o){let s=new Map;for(let i of t){if(i==null)continue;if(i.multiaddr instanceof Uint8Array&&(i.multiaddr=q(i.multiaddr)),!yn(i.multiaddr))throw new A("Multiaddr was invalid");if(!await e(r,i.multiaddr,o))continue;let a=i.isCertified??!1,c=i.multiaddr.toString(),l=s.get(c);l!=null?i.isCertified=l.isCertified||a:s.set(c,{multiaddr:i.multiaddr,isCertified:a})}return[...s.values()].sort((i,a)=>i.multiaddr.toString().localeCompare(a.multiaddr.toString())).map(({isCertified:i,multiaddr:a})=>{let c=a.getComponents().find(l=>l.code===421)?.value;return r.equals(c)&&(a=a.decapsulate(q(`/p2p/${r}`))),{isCertified:i,multiaddr:a.bytes}})}async function xh(r,e,t,n){if(e==null)throw new A("Invalid PeerData");if(e.publicKey!=null&&r.publicKey!=null&&!e.publicKey.equals(r.publicKey))throw new A("publicKey bytes do not match peer id publicKey bytes");let o=n.existingPeer?.peer;if(o!=null&&!r.equals(o.id))throw new A("peer id did not match existing peer id");let s=o?.addresses??[],i=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)&&(s=[],e.multiaddrs!=null&&s.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&s.push(...e.addresses)),e.protocols!=null&&(i=new Set(e.protocols)),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=Eh(f,{validate:Ew})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=Eh(f,{validate:xw,map:vw})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&s.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&s.push(...e.addresses),e.protocols!=null&&(i=new Set([...i,...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=Eh([...a.entries()],{validate:Ew})}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=Eh([...h.entries()],{validate:xw,map:vw})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let d;o?.id.publicKey!=null?d=ft(o.id.publicKey):e.publicKey!=null?d=ft(e.publicKey):r.publicKey!=null&&(d=ft(r.publicKey));let u={addresses:await bw(r,n.addressFilter??(async()=>!0),s,n.existingPeer?.peerPB.addresses,n),protocols:[...i.values()].sort((f,h)=>f.localeCompare(h)),metadata:a,tags:c,publicKey:d,peerRecordEnvelope:l};return u.addresses.forEach(f=>{f.observed=n.existingPeer?.peerPB.addresses?.find(h=>ee(h.multiaddr,h.multiaddr))?.observed??Date.now()}),r.type!=="RSA"&&delete u.publicKey,u}function Eh(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(([s],[i])=>s.localeCompare(i)))o!=null&&t.set(n,e.map?.(n,o)??o);return t}function Ew(r,e){if(typeof r!="string")throw new A("Metadata key must be a string");if(!(e instanceof Uint8Array))throw new A("Metadata value must be a Uint8Array")}function xw(r,e){if(typeof r!="string")throw new A("Tag name must be a string");if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new A("Tag value must be an integer");if(e.value<0||e.value>100)throw new A("Tag value must be between 0-100")}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new A("Tag ttl must be an integer");if(e.ttl<0)throw new A("Tag ttl must be between greater than 0")}}function vw(r,e){let t;e.expiry!=null&&(t=e.expiry),e.ttl!=null&&(t=BigInt(Date.now()+Number(e.ttl)));let n={value:e.value??0};return t!=null&&(n.expiry=t),n}function Sw(r){let e=r.toString().split("/")[2],t=G.parse(e,ut);return Jr(t)}function k3(r,e,t){let n=Sw(r);return pw(n,e,t)}function TP(r,e){return{prefix:C3,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(k3(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(k3(n.key,n.value,e),k3(o.key,o.value,e)))}}var vh=class{peerId;datastore;locks;addressFilter;log;maxAddressAge;maxPeerAge;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.locks=eo({name:"libp2p_peer_store_locks",metrics:e.metrics}),this.maxAddressAge=t.maxAddressAge??36e5,this.maxPeerAge=t.maxPeerAge??216e5}getLock(e){let t=this.locks.get(e);return t==null&&(t={refs:0,lock:al({name:e.toString(),singleProcess:!0})},this.locks.set(e,t)),t.refs++,t}maybeRemoveLock(e,t){t.refs--,t.refs===0&&(t.lock.finalize(),this.locks.delete(e))}async getReadLock(e,t){let n=this.getLock(e);try{let o=await n.lock.readLock(t);return()=>{o(),this.maybeRemoveLock(e,n)}}catch(o){throw this.maybeRemoveLock(e,n),o}}async getWriteLock(e,t){let n=this.getLock(e);try{let o=await n.lock.writeLock(t);return()=>{o(),this.maybeRemoveLock(e,n)}}catch(o){throw this.maybeRemoveLock(e,n),o}}async has(e,t){try{return await this.load(e,t),!0}catch(n){if(n.name!=="NotFoundError")throw n}return!1}async delete(e,t){this.peerId.equals(e)||await this.datastore.delete(Il(e),t)}async load(e,t){let n=Il(e),o=await this.datastore.get(n,t),s=so.decode(o);if(this.#r(e,s))throw await this.datastore.delete(n,t),new Le;return ba(e,s,this.peerId.equals(e)?1/0:this.maxAddressAge)}async save(e,t,n){let o=await this.#e(e,n),s=await xh(e,t,"patch",{...n,addressFilter:this.addressFilter});return this.#t(e,s,o)}async patch(e,t,n){let o=await this.#e(e,n),s=await xh(e,t,"patch",{...n,addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,o)}async merge(e,t,n){let o=await this.#e(e,n),s=await xh(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,o)}async*all(e){for await(let{key:t,value:n}of this.datastore.query(TP(e??{},this.maxAddressAge),e)){let o=Sw(t);if(o.equals(this.peerId))continue;let s=so.decode(n);if(this.#r(o,s)){await this.datastore.delete(t,e);continue}yield ba(o,s,this.peerId.equals(o)?1/0:this.maxAddressAge)}}async#e(e,t){try{let n=Il(e),o=await this.datastore.get(n,t),s=so.decode(o);if(this.#r(e,s))throw await this.datastore.delete(n,t),new Le;return{peerPB:s,peer:ba(e,s,this.maxAddressAge)}}catch(n){n.name!=="NotFoundError"&&this.log.error("invalid peer data found in peer store - %e",n)}}async#t(e,t,n,o){t.updated=Date.now();let s=so.encode(t);return await this.datastore.put(Il(e),s,o),{peer:ba(e,t,this.maxAddressAge),previous:n?.peer,updated:n==null||!mw(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,s=t.addresses.filter(i=>i.observed!=null&&i.observed>o);return n&&s.length===0}};var P3=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 vh(e,t)}[Symbol.toStringTag]="@libp2p/peer-store";async forEach(e,t){for await(let n of this.store.all(t))e(n)}async all(e){return no(this.store.all(e))}async delete(e,t){let n=await this.store.getReadLock(e,t);try{await this.store.delete(e,t)}finally{n()}}async has(e,t){let n=await this.store.getReadLock(e,t);try{return await this.store.has(e,t)}finally{this.log.trace("has release read lock"),n?.()}}async get(e,t){let n=await this.store.getReadLock(e,t);try{return await this.store.load(e,t)}finally{n?.()}}async getInfo(e,t){let n=await this.get(e,t);return{id:n.id,multiaddrs:n.addresses.map(({multiaddr:o})=>o)}}async save(e,t,n){let o=await this.store.getWriteLock(e,n);try{let s=await this.store.save(e,t,n);return this.#e(e,s),s.peer}finally{o?.()}}async patch(e,t,n){let o=await this.store.getWriteLock(e,n);try{let s=await this.store.patch(e,t,n);return this.#e(e,s),s.peer}finally{o?.()}}async merge(e,t,n){let o=await this.store.getWriteLock(e,n);try{let s=await this.store.merge(e,t,n);return this.#e(e,s),s.peer}finally{o?.()}}async consumePeerRecord(e,t,n){let o=Rt(t)?t:Rt(t?.expectedPeer)?t.expectedPeer:void 0,s=Rt(t)||t===void 0?n:t,i=await vr.openAndCertify(e,Qt.DOMAIN,s),a=Jr(i.publicKey.toCID());if(o?.equals(a)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",o,a),!1;let c=Qt.createFromProtobuf(i.payload),l;try{l=await this.get(a,s)}catch(d){if(d.name!=="NotFoundError")throw d}if(l?.peerRecordEnvelope!=null){let d=vr.createFromProtobuf(l.peerRecordEnvelope),u=Qt.createFromProtobuf(d.payload);if(u.seqNumber>=c.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",u.seqNumber,c.seqNumber),!1}return await this.patch(c.peerId,{peerRecordEnvelope:e,addresses:c.multiaddrs.map(d=>({isCertified:!0,multiaddr:d}))},s),!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 Aw(r,e={}){return new P3(r,e)}var Iw=864e13;var Sh=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:dns-mappings"),this.mappings=ot({name:"libp2p_address_manager_dns_mappings",metrics:e.metrics})}has(e){let t=oe(e),n=t.host;(t.type==="ip4"||t.type==="ip6")&&t.sni!=null&&(n=t.sni);for(let o of this.mappings.values())if(o.domain===n)return!0;return!1}add(e,t){t.forEach(n=>{this.log("add DNS mapping %s to %s",n,e);let o=Ki(n)===!0;this.mappings.set(n,{domain:e,verified:o,expires:o?Iw-Date.now():0,lastVerified:o?Iw-Date.now():void 0})})}remove(e){let t=oe(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;let n=!1;for(let[o,s]of this.mappings.entries())s.domain===t.sni&&(this.log("removing %s to %s DNS mapping %e",o,s.domain),this.mappings.delete(o),n=n||s.verified);return n}getAll(e){let t=[];for(let n=0;n<e.length;n++){let o=e[n].multiaddr;if(!xt(o))continue;let s=oe(o);for(let[i,a]of this.mappings.entries()){if(s.host!==i)continue;let c=this.maybeAddSNIComponent(o,a.domain);c!=null&&(e.splice(n,1),n--,t.push({multiaddr:c,verified:a.verified,type:"dns-mapping",expires:a.expires,lastVerified:a.lastVerified}))}}return t}maybeAddSNIComponent(e,t){let n=e.getComponents();for(let o=0;o<n.length;o++)if(n[o].code===448&&n[o+1]?.code!==449)return n.splice(o+1,0,{name:"sni",code:449,value:t}),q(n)}confirm(e,t){let n=oe(e),o=n.host;(n.type==="ip4"||n.type==="ip6")&&n.sni!=null&&(o=n.sni);let s=!1;for(let[i,a]of this.mappings.entries())a.domain===o&&(this.log("marking %s to %s DNS mapping as verified",i,a.domain),s=a.verified,a.verified=!0,a.expires=Date.now()+t,a.lastVerified=Date.now());return s}unconfirm(e,t){let n=oe(e);if(n.type!=="ip4"&&n.type!=="ip6")return!1;let o=n.sni??n.host,s=!1;for(let[i,a]of this.mappings.entries())a.domain===o&&(this.log("removing verification of %s to %s DNS mapping",i,a.domain),s=s||a.verified,a.verified=!1,a.expires=Date.now()+t);return s}};var Ah=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:ip-mappings"),this.mappings=ot({name:"libp2p_address_manager_ip_mappings",metrics:e.metrics})}has(e){let t=oe(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;for(let n of this.mappings.values())for(let o of n)if(o.externalIp===t.host)return!0;return!1}add(e,t,n,o=t,s="tcp"){let i=`${e}-${t}-${s}`,a=this.mappings.get(i)??[],c={internalIp:e,internalPort:t,externalIp:n,externalPort:o,externalFamily:zr(n)?4:6,protocol:s,verified:!1,expires:0};a.push(c),this.mappings.set(i,a)}remove(e){let t=oe(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;let n=!1;for(let[o,s]of this.mappings.entries()){for(let i=0;i<s.length;i++){let a=s[i];a.externalIp===t.host&&a.externalPort===t.port&&a.protocol===t.protocol&&(this.log("removing %s:%s to %s:%s %s IP mapping",a.externalIp,a.externalPort,t.host,t.port,t.protocol),n=n||a.verified,s.splice(i,1),i--)}s.length===0&&this.mappings.delete(o)}return n}getAll(e){let t=[];for(let{multiaddr:n}of e){if(!xt(n))continue;let o=oe(n);if(o.type!=="ip4"&&o.type!=="ip6")continue;let s;if(o.protocol==="tcp"?s=`${o.host}-${o.port}-tcp`:o.protocol==="udp"&&(s=`${o.host}-${o.port}-udp`),s==null)continue;let i=this.mappings.get(s);if(i!=null)for(let a of i)t.push({multiaddr:this.maybeOverrideIp(n,a.externalIp,a.externalFamily,a.protocol,a.externalPort),verified:a.verified,type:"ip-mapping",expires:a.expires,lastVerified:a.lastVerified})}return t}maybeOverrideIp(e,t,n,o,s){let i=e.getComponents(),a=i.findIndex(l=>l.code===4||l.code===41),c=i.findIndex(l=>l.name===o);return a>-1&&c>-1?(i[a].value=t,i[a].code=n===4?4:41,i[c].value=`${s}`,q(i)):e}confirm(e,t){if(!xt(e))return!1;let n=oe(e),o=!1;for(let s of this.mappings.values())for(let i of s)i.externalIp===n.host&&(this.log("marking %s to %s IP mapping as verified",i.internalIp,i.externalIp),o=i.verified,i.verified=!0,i.expires=Date.now()+t,i.lastVerified=Date.now());return o}unconfirm(e,t){if(!xt(e))return!1;let n=oe(e),o=!1;for(let s of this.mappings.values())for(let i=0;i<s.length;i++){let a=s[i];a.externalIp===n.host&&a.externalPort===n.port&&a.protocol===n.protocol&&(this.log("removing verification of %s:%s to %s:%s %s IP mapping",a.externalIp,a.externalPort,n.host,n.port,n.protocol),o=o||a.verified,a.verified=!1,a.expires=Date.now()+t)}return o}};var _P={maxObservedAddresses:10},Ih=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=ot({name:"libp2p_address_manager_observed_addresses",metrics:e.metrics}),this.maxObservedAddresses=t.maxObservedAddresses??_P.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&&(Qe(e)||o7(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:q(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()},s=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),s}};var CP={maxObservedAddresses:10},Th=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=ot({name:"libp2p_address_manager_transport_addresses",metrics:e.metrics}),this.maxObservedAddresses=t.maxObservedAddresses??CP.maxObservedAddresses}get(e,t){if(Qe(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:!xt(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},s=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.addresses.set(n,o),s}unconfirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0},s=o.verified;return o.verified=!1,o.expires=Date.now()+t,this.addresses.set(n,o),s}toKey(e){if(!xt(e))return e.toString();let t=oe(e);return`${t.host}-${t.port}-${t.protocol}`}};var Tw=6e4,_w={maxObservedAddresses:10,addressVerificationTTL:Tw*10,addressVerificationRetry:Tw*5},kP=r=>r;function R3(r,e){let t=r.getComponents().findLast(n=>n.code===421)?.value;return t!=null&&Me(t).equals(e)&&(r=r.decapsulate(q(`/p2p/${e.toString()}`))),r}var _h=class{log;components;listen;announce;appendAnnounce;announceFilter;observed;dnsMappings;ipMappings;transportAddresses;observedAddressFilter;addressVerificationTTL;addressVerificationRetry;constructor(e,t={}){let{listen:n=[],announce:o=[],appendAnnounce:s=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(i=>i.toString()),this.announce=new Set(o.map(i=>i.toString())),this.appendAnnounce=new Set(s.map(i=>i.toString())),this.observed=new Ih(e,t),this.dnsMappings=new Sh(e,t),this.ipMappings=new Ah(e,t),this.transportAddresses=new Th(e,t),this.announceFilter=t.announceFilter??kP,this.observedAddressFilter=Et(1024),this.addressVerificationTTL=t.addressVerificationTTL??_w.addressVerificationTTL,this.addressVerificationRetry=t.addressVerificationRetry??_w.addressVerificationRetry,this._updatePeerStoreAddresses=Wn(this._updatePeerStoreAddresses.bind(this),1e3),e.events.addEventListener("transport:listening",()=>{this._updatePeerStoreAddresses()}),e.events.addEventListener("transport:close",()=>{this._updatePeerStoreAddresses()})}[Symbol.toStringTag]="@libp2p/address-manager";_updatePeerStoreAddresses(){let e=this.getAddresses().map(t=>t.getComponents().findLast(n=>n.code===421)?.value===this.components.peerId.toString()?t.decapsulate(`/p2p/${this.components.peerId.toString()}`):t);this.components.peerStore.patch(this.components.peerId,{multiaddrs:e}).catch(t=>{this.log.error("error updating addresses - %e",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>q(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>q(e))}getAppendAnnounceAddrs(){return Array.from(this.appendAnnounce).map(e=>q(e))}getObservedAddrs(){return this.observed.getAll().map(e=>e.multiaddr)}addObservedAddr(e){let t=oe(e),n;switch(t.type){case"ip4":{n=`${t.host}:${t.port}`;break}case"ip6":{n=`[${t.host}]:${t.port}`;break}default:return}this.observedAddressFilter.has(n)||(this.observedAddressFilter.add(n),e=R3(e,this.components.peerId),!this.ipMappings.has(e)&&(this.dnsMappings.has(e)||this.observed.add(e)))}confirmObservedAddr(e,t){e=R3(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=R3(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=q(n);return o.getComponents().pop()?.value===this.components.peerId.toString()?o:o.encapsulate(`/p2p/${this.components.peerId.toString()}`)}))}getAddressesWithMetadata(){let e=this.getAnnounceAddrs();if(e.length>0)return this.components.transportManager.getListeners().forEach(o=>{o.updateAnnounceAddrs(e)}),e.map(o=>({multiaddr:o,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()}));let t=[];t=t.concat(this.components.transportManager.getAddrs().map(o=>this.transportAddresses.get(o,this.addressVerificationTTL)));let n=this.getAppendAnnounceAddrs();return n.length>0&&(this.components.transportManager.getListeners().forEach(o=>{o.updateAnnounceAddrs(n)}),t=t.concat(n.map(o=>({multiaddr:o,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()})))),t=t.concat(this.observed.getAll()),t=t.concat(this.ipMappings.getAll(t)),t=t.concat(this.dnsMappings.getAll(t)),t}addDNSMapping(e,t){this.dnsMappings.add(e,t)}removeDNSMapping(e){this.dnsMappings.remove(q(`/dns/${e}`))&&this._updatePeerStoreAddresses()}addPublicAddressMapping(e,t,n,o=t,s="tcp"){this.ipMappings.add(e,t,n,o,s),this.observed.removePrefixed(`/ip${zr(n)?4:6}/${n}/${s}/${o}`)}removePublicAddressMapping(e,t,n,o=t,s="tcp"){this.ipMappings.remove(q(`/ip${zr(n)?4:6}/${n}/${s}/${o}`))&&this._updatePeerStoreAddresses()}maybeUpgradeToIPMapping(e){if(this.ipMappings.has(e)||!xt(e))return!1;let t=oe(e);if(t.type!=="ip4"||Ki(t.host)===!0)return!1;let n=this.components.transportManager.getListeners(),o=[s=>ro.exactMatch(s)||Qs.exactMatch(s),s=>Xs.exactMatch(s),s=>M9.exactMatch(s)];for(let s of o){if(!s(e))continue;let i=n.filter(l=>l.getAddrs().filter(d=>oe(d).type==="ip4"&&s(d)).length>0);if(i.length!==1)continue;let a=i[0].getAddrs().filter(l=>!Oc(l)).pop();if(a==null)continue;let c=oe(a);return c.port==null?!1:(this.observed.remove(e),this.ipMappings.add(c.host,c.port,t.host,t.port,t.protocol),!0)}return!1}};var Cw;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(Cw||(Cw={}));var Ch=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},kh=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},Ea=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"}},Ph=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},Rh=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},Lh=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},_l=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},Dh=class extends Error{constructor(e="No transport was configured to listen on this address"){super(e),this.name="UnsupportedListenAddressError"}},Nh=class extends Error{constructor(e="Configured listen addresses could not be listened on"){super(e),this.name="UnsupportedListenAddressesError"}},Oh=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},Mh=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},Bh=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},zo=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},ei=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},Uh=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}},Fh=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}};var L3=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=ra())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>Pu(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")}},PP=["metrics","connectionProtector","dns"],RP=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function kw(r={}){let e=new L3(r);return new Proxy(e,{get(n,o,s){if(typeof o=="string"&&!RP.includes(o)){let i=e.components[o];if(i==null&&!PP.includes(o))throw new Ch(`${o} not set`);return i}return Reflect.get(n,o,s)},set(n,o,s){return typeof o=="string"?e.components[o]=s:Reflect.set(n,o,s),!0}})}function Pw(r){let e={};for(let t of Object.values(r.components))for(let n of LP(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of DP(t))if(e[n]!==!0)throw new kh(`Service "${NP(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function LP(r){return Array.isArray(r?.[me])?r[me]:[]}function DP(r){return Array.isArray(r?.[ur])?r[ur]:[]}function NP(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}function Rw(r={}){return r.denyDialMultiaddr==null&&(r.denyDialMultiaddr=e=>ro.matches(e)?!0:Qe(e)),r}var OP=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 MP(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:d}=OP(r),u=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(g){n(),i(g);return}c.push(p),t.count===c.length&&(n(),s(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)a.includes(h)||d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&s(c)});if(o.cancel=n,typeof t.timeout=="number"){let s=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function Cl(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=MP(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}function $h(r){if(Rt(r))return{peerId:r,multiaddrs:[]};let e=Array.isArray(r)?r:[r],t;if(e.length>0){let n=e[0].getComponents().findLast(o=>o.code===421)?.value;t=n==null?void 0:Me(n),e.forEach(o=>{if(!yn(o))throw new ln("Invalid multiaddr");let s=o.getComponents().findLast(i=>i.code===421)?.value;if(s==null){if(t!=null)throw new A("Multiaddrs must all have the same peer id or have no peer id")}else{let i=Me(s);if(t?.equals(i)!==!0)throw new A("Multiaddrs must all have the same peer id or have no peer id")}})}return e=e.filter(n=>!R9.exactMatch(n)),{peerId:t,multiaddrs:e}}var BP=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function Lw(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??BP;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}function kl(r){let e=oe(r),t=e.cidr;if(e.type!=="ip4"&&e.type!=="ip6")throw new A(`Multiaddr ${r} was not an IPv4 or IPv6 address`);if(t==null)switch(e.type){case"ip4":{t=32;break}case"ip6":{t=128;break}default:throw new A(`Multiaddr ${r} was not an IPv4 or IPv6 address`)}return new Ns(e.host,t)}function D3(r){return!yt.exactMatch(r)}function Kh(r,e,t){if(r==null||e==null)return;let n=e.sort((s,i)=>s.direct?-1:i.direct?1:0).find(s=>s.limits==null);if(n==null||n.direct||t==null)return n;if(!t.some(s=>D3(s)))return n}var Vh=class{connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.allow=(t.allow??[]).map(n=>kl(n)),this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager:connection-pruner"),this.maybePruneConnections=this.maybePruneConnections.bind(this)}start(){this.events.addEventListener("connection:open",this.maybePruneConnections)}stop(){this.events.removeEventListener("connection:open",this.maybePruneConnections)}maybePruneConnections(){this._maybePruneConnections().catch(e=>{this.log.error("error while pruning connections - %e",e)})}async _maybePruneConnections(){let e=this.connectionManager.getConnections(),t=e.length,n=this.connectionManager.getMaxConnections();if(this.log("checking max connections limit %d/%d",t,n),t<=n)return;let o=new Ut;for(let c of e){let l=c.remotePeer;if(!o.has(l)){o.set(l,0);try{let d=await this.peerStore.get(l);o.set(l,[...d.tags.values()].reduce((u,f)=>u+f.value,0))}catch(d){d.name!=="NotFoundError"&&this.log.error("error loading peer tags - %e",d)}}}let s=this.sortConnections(e,o),i=Math.max(t-n,0),a=[];for(let c of s)if(this.log("too many connections open - closing a connection to %p",c.remotePeer),this.allow.some(d=>{if(xt(c.remoteAddr)){let u=oe(c.remoteAddr);return d.contains(u.host)}return!0})||a.push(c),a.length===i)break;await Promise.all(a.map(async c=>{await Lw(c,{signal:AbortSignal.timeout(1e3)})})),this.events.safeDispatchEvent("connection:prune",{detail:a})}sortConnections(e,t){return e.sort((n,o)=>{let s=n.timeline.open,i=o.timeline.open;return s<i?1:s>i?-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 s=t.get(n.remotePeer)??0,i=t.get(o.remotePeer)??0;return s>i?1:s<i?-1:0})}};var Dw="last-dial-failure",Nw="last-dial-success";var Ow=100,Hh=50;function UP(r,e){let t=Xs.exactMatch(r.multiaddr),n=Xs.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=Qs.exactMatch(r.multiaddr),s=Qs.exactMatch(e.multiaddr);if(o&&!s)return-1;if(!o&&s)return 1;let i=ro.exactMatch(r.multiaddr),a=ro.exactMatch(e.multiaddr);if(i&&!a)return-1;if(!i&&a)return 1;let c=yl.exactMatch(r.multiaddr),l=yl.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let d=gl.exactMatch(r.multiaddr),u=gl.exactMatch(e.multiaddr);if(d&&!u)return-1;if(!d&&u)return 1;let f=d3.exactMatch(r.multiaddr),h=d3.exactMatch(e.multiaddr);return f&&!h?-1:!f&&h?1:0}function FP(r,e){let t=Oc(r.multiaddr),n=Oc(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function $P(r,e){let t=Qe(r.multiaddr),n=Qe(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function KP(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function VP(r,e){let t=yt.exactMatch(r.multiaddr),n=yt.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Mw(r){return r.sort(UP).sort(KP).sort(VP).sort($P).sort(FP)}var N3=class{dns;canResolve(e){return e.getComponents().some(({name:t})=>t==="dnsaddr")}async resolve(e,t){let n=e.getComponents().find(c=>c.name==="dnsaddr")?.value;if(n==null)return[e];let s=await this.getDNS(t).query(`_dnsaddr.${n}`,{signal:t?.signal,types:[dr.TXT]}),i=e.getComponents().find(c=>c.name==="p2p")?.value,a=[];for(let c of s.Answer){let l=c.data.replace(/["']/g,"").trim().split("=")[1];l!=null&&(i!=null&&!l.includes(i)||a.push(q(l)))}return a}getDNS(e){return e.dns!=null?e.dns:(this.dns==null&&(this.dns=$u()),this.dns)}},Pl=new N3;async function O3(r,e,t){let n=t.depth??0;if(n>(t.maxRecursiveDepth??32))throw new Fh("Max recursive depth reached");let o=!1,s=[];for(let i of Object.values(e))if(i.canResolve(r)){o=!0;let a=await i.resolve(r,t);for(let c of a)s.push(...await O3(c,e,{...t,depth:n+1}))}return o===!1&&s.push(r),s}var Rl={maxParallelDials:Hh,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:1e4,resolvers:{dnsaddr:Pl}},qh=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;resolvers;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??Rl.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??Rl.maxDialQueueLength,this.dialTimeout=t.dialTimeout??Rl.dialTimeout,this.connections=t.connections??new Ut,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.resolvers=t.resolvers??Rl.resolvers,this.shutDownController=new AbortController,this.shutDownController.signal,this.queue=new Qd({concurrency:t.maxParallelDials??Rl.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("failure",n=>{n.detail?.error.name!==Vt.name&&this.log.error("error in dial queue - %e",n.detail.error)})}start(){this.shutDownController=new AbortController,this.shutDownController.signal}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=$h(e);if(n!=null&&t.force!==!0){let i=Kh(n,this.connections.get(n),o);if(i!=null)return this.log("already connected to %a",i.remoteAddr),t.onProgress?.(new H("dial-queue:already-connected")),i}let s=this.queue.queue.find(i=>{if(n?.equals(i.options.peerId)===!0)return!0;let a=i.options.multiaddrs;if(a==null)return!1;for(let c of o)if(a.has(c.toString()))return!0;return!1});if(s!=null){this.log("joining existing dial target for %p",n);for(let i of o)s.options.multiaddrs.add(i.toString());return t.onProgress?.(new H("dial-queue:already-in-dial-queue")),s.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new Eo("Dial queue is full");return this.log("creating dial target for %p",n,o.map(i=>i.toString())),t.onProgress?.(new H("dial-queue:add-to-dial-queue")),this.queue.add(async i=>{i.onProgress?.(new H("dial-queue:start-dial"));let a=le([this.shutDownController.signal,i.signal]);try{return await this.dialPeer(i,a)}finally{a.clear()}},{peerId:n,priority:t.priority??F3,multiaddrs:new Set(o.map(i=>i.toString())),signal:t.signal??AbortSignal.timeout(this.dialTimeout),onProgress:t.onProgress})}async dialPeer(e,t){let n=e.peerId,o=e.multiaddrs,s=new Set,i=e.multiaddrs.size===0,a=0,c=0,l=[];for(this.log("starting dial to %p",n);i||o.size>0;){c++,i=!1;let d=[],u=new Set(e.multiaddrs);o.clear(),this.log("calculating addrs to dial %p from %s",n,[...u]);let f=await this.calculateMultiaddrs(n,u,{...e,signal:t});for(let h of f){if(s.has(h.multiaddr.toString())){this.log.trace("skipping previously failed multiaddr %a while dialing %p",h.multiaddr,n);continue}d.push(h)}this.log("%s dial to %p with %s",c===1?"starting":"continuing",n,d.map(h=>h.multiaddr.toString())),e?.onProgress?.(new H("dial-queue:calculated-addresses",d));for(let h of d){if(a===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",a,e.peerId),new Eo("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:{[Nw]:C(Date.now().toString())}})}catch(g){this.log.error("could not update last dial failure key for %p - %e",n,g)}return p}catch(p){if(this.log.error("dial failed to %a - %e",h.multiaddr,p),s.add(h.multiaddr.toString()),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[Dw]:C(Date.now().toString())}})}catch(g){this.log.error("could not update last dial failure key for %p - %e",n,g)}if(t.aborted)throw new un(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(u=>({multiaddr:q(u),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new Eo("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new _l("The dial request is blocked by gater.allowDialPeer");if(o.length===0){this.log("loading multiaddrs for %p",e);try{let u=await this.components.peerStore.get(e);o.push(...u.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:f})=>f.toString()))}catch(u){if(u.name!=="NotFoundError")throw u}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let u=await this.components.peerRouting.findPeer(e,n);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:f})=>f.toString())),o.push(...u.multiaddrs.map(f=>({multiaddr:f,isCertified:!1})))}catch(u){u.name==="NoPeerRoutersError"?this.log("no peer routers configured",e):this.log.error("looking up multiaddrs for %p in the peer routing failed - %e",e,u)}}}let s=(await Promise.all(o.map(async u=>{let f=await O3(u.multiaddr,this.resolvers,{dns:this.components.dns,log:this.log,...n});return f.length===1&&f[0].equals(u.multiaddr)?u:f.map(h=>({multiaddr:h,isCertified:!1}))}))).flat();if(e!=null){let u=`/p2p/${e.toString()}`;s=s.map(f=>f.multiaddr.getComponents().pop()?.name!=="p2p"?{multiaddr:f.multiaddr.encapsulate(u),isCertified:f.isCertified}:f)}let i=s.filter(u=>{if(this.components.transportManager.dialTransportForMultiaddr(u.multiaddr)==null)return!1;let f=u.multiaddr.getComponents().findLast(h=>h.code===421)?.value;return e!=null&&f!=null?e.equals(f):!0}),a=new Map;for(let u of i){let f=u.multiaddr.toString(),h=a.get(f);if(h!=null){h.isCertified=h.isCertified||u.isCertified||!1;continue}a.set(f,u)}let c=[...a.values()];if(c.length===0)throw new Oh("The dial request has no valid addresses");let l=[];for(let u of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(u.multiaddr)||l.push(u);let d=this.addressSorter==null?Mw(l):l.sort(this.addressSorter);if(d.length===0)throw new _l("The connection gater denied all addresses in the dial request");return this.log.trace("addresses for %p before filtering",e??"unknown peer",s.map(({multiaddr:u})=>u.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",d.map(({multiaddr:u})=>u.toString())),d}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=>!yt.matches(o.multiaddr))!=null:!0}catch{}return!1}};var HP=Object.prototype.toString,qP=r=>HP.call(r)==="[object Error]",WP=new Set(["network error","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Network request failed","fetch failed","terminated"," A network error occurred.","Network connection lost"]);function $3(r){if(!(r&&qP(r)&&r.name==="TypeError"&&typeof r.message=="string"))return!1;let{message:t,stack:n}=r;return t==="Load failed"?n===void 0||"__sentry_captured__"in r:t.startsWith("error sending request for url")||t==="Failed to fetch"||t.startsWith("Failed to fetch (")&&t.endsWith(")")?!0:WP.has(t)}function zP(r){if(typeof r=="number"){if(r<0)throw new TypeError("Expected `retries` to be a non-negative number.");if(Number.isNaN(r))throw new TypeError("Expected `retries` to be a valid number or Infinity, got NaN.")}else if(r!==void 0)throw new TypeError("Expected `retries` to be a number or Infinity.")}function Wh(r,e,{min:t=0,allowInfinity:n=!1}={}){if(e!==void 0){if(typeof e!="number"||Number.isNaN(e))throw new TypeError(`Expected \`${r}\` to be a number${n?" or Infinity":""}.`);if(!n&&!Number.isFinite(e))throw new TypeError(`Expected \`${r}\` to be a finite number.`);if(e<t)throw new TypeError(`Expected \`${r}\` to be \u2265 ${t}.`)}}var K3=class extends Error{constructor(e){super(),e instanceof Error?(this.originalError=e,{message:e}=e):(this.originalError=new Error(e),this.originalError.stack=this.stack),this.name="AbortError",this.message=e}};function GP(r,e){let t=Math.max(1,r+1),n=e.randomize?Math.random()+1:1,o=Math.round(n*e.minTimeout*e.factor**(t-1));return o=Math.min(o,e.maxTimeout),o}function Bw(r,e){return Number.isFinite(e)?e-(performance.now()-r):e}async function YP({error:r,attemptNumber:e,retriesConsumed:t,startTime:n,options:o}){let s=r instanceof Error?r:new TypeError(`Non-error was thrown: "${r}". You should only throw errors.`);if(s instanceof K3)throw s.originalError;let i=Number.isFinite(o.retries)?Math.max(0,o.retries-t):o.retries,a=o.maxRetryTime??Number.POSITIVE_INFINITY,c=Object.freeze({error:s,attemptNumber:e,retriesLeft:i,retriesConsumed:t});if(await o.onFailedAttempt(c),Bw(n,a)<=0)throw s;let l=await o.shouldConsumeRetry(c),d=Bw(n,a);if(d<=0||i<=0)throw s;if(s instanceof TypeError&&!$3(s)){if(l)throw s;return o.signal?.throwIfAborted(),!1}if(!await o.shouldRetry(c))throw s;if(!l)return o.signal?.throwIfAborted(),!1;let u=GP(t,o),f=Math.min(u,d);return o.signal?.throwIfAborted(),f>0&&await new Promise((h,p)=>{let g=()=>{clearTimeout(m),o.signal?.removeEventListener("abort",g),p(o.signal.reason)},m=setTimeout(()=>{o.signal?.removeEventListener("abort",g),h()},f);o.unref&&m.unref?.(),o.signal?.addEventListener("abort",g,{once:!0})}),o.signal?.throwIfAborted(),!0}async function V3(r,e={}){if(e={...e},zP(e.retries),Object.hasOwn(e,"forever"))throw new Error("The `forever` option is no longer supported. For many use-cases, you can set `retries: Infinity` instead.");e.retries??=10,e.factor??=2,e.minTimeout??=1e3,e.maxTimeout??=Number.POSITIVE_INFINITY,e.maxRetryTime??=Number.POSITIVE_INFINITY,e.randomize??=!1,e.onFailedAttempt??=()=>{},e.shouldRetry??=()=>!0,e.shouldConsumeRetry??=()=>!0,Wh("factor",e.factor,{min:0,allowInfinity:!1}),Wh("minTimeout",e.minTimeout,{min:0,allowInfinity:!1}),Wh("maxTimeout",e.maxTimeout,{min:0,allowInfinity:!0}),Wh("maxRetryTime",e.maxRetryTime,{min:0,allowInfinity:!0}),e.factor>0||(e.factor=1),e.signal?.throwIfAborted();let t=0,n=0,o=performance.now();for(;!Number.isFinite(e.retries)||n<=e.retries;){t++;try{e.signal?.throwIfAborted();let s=await r(t);return e.signal?.throwIfAborted(),s}catch(s){await YP({error:s,attemptNumber:t,retriesConsumed:n,startTime:o,options:e})&&n++}}throw new Error("Retry attempts exhausted without throwing an error.")}var zh=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 It({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);Uw(t)&&(this.queue.has(e)||this.queue.add(async n=>{await V3(async o=>{if(this.started)try{await this.connectionManager.openConnection(e,{signal:n?.signal})}catch(s){throw this.log("reconnecting to %p attempt %d of %d failed - %e",e,o,this.retries,s),s}},{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(s=>{s.startsWith(us)&&(o[s]=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=>Uw(t)]});await Promise.all(e.map(async t=>{await this.connectionManager.openConnection(t.id).catch(n=>{this.log.error("could not open connection to keepalive peer - %e",n)})}))}).catch(e=>{this.log.error("error reconnect to peers after start - %e",e)})}stop(){this.started=!1,this.queue.abort()}};function Uw(r){for(let e of r.tags.keys())if(e.startsWith(us))return!0;return!1}var F3=50,H3={maxConnections:Ow,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},Gh=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??H3.maxConnections,this.maxConnections<1)throw new A("Connection Manager maxConnections must be greater than 0");this.connections=new Ut,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=>kl(q(n))),this.deny=(t.deny??[]).map(n=>kl(q(n))),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??H3.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new na({points:t.inboundConnectionThreshold??H3.inboundConnectionThreshold,duration:1}),this.connectionPruner=new Vh({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{allow:t.allow?.map(n=>q(n))}),this.dialQueue=new qh(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??Hh,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??1e4,resolvers:t.resolvers??{dnsaddr:Pl},connections:this.connections}),this.reconnectQueue=new zh({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 s=`${o.direction} ${o.protocol??"unnegotiated"}`;e[s]=(e[s]??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 s={};for(let i of o.streams){let a=`${i.direction} ${i.protocol??"unnegotiated"}`;s[a]=(s[a]??0)+1}for(let[i,a]of Object.entries(s))e[i]=e[i]??[],e[i].push(a)}let t={};for(let[n,o]of Object.entries(e)){o=o.sort((i,a)=>i-a);let s=Math.floor(o.length*.9);t[n]=o[s]}return t}}),this.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),await at(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 lt(this.reconnectQueue,this.dialQueue,this.connectionPruner);let e=[];for(let t of this.connections.values())for(let n of t)e.push(Promise.all([Cl(n,"close",{signal:AbortSignal.timeout(500)}),n.close({signal:AbortSignal.timeout(500)})]).catch(o=>{n.abort(o)}));this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}getMaxConnections(){return this.maxConnections}setMaxConnections(e){if(e<1)throw new A("Connection Manager maxConnections must be greater than 0");let t=!1;e<this.maxConnections&&(t=!0),this.maxConnections=e,t&&this.connectionPruner.maybePruneConnections()}onConnect(e){this._onConnect(e).catch(t=>{this.log.error("could not connect - %e",t)})}async _onConnect(e){let{detail:t}=e;if(!this.started){await t.close();return}if(t.status!=="open")return;let n=t.remotePeer,o=!this.connections.has(n),s=this.connections.get(n)??[];s.push(t),this.connections.set(n,s),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,s=(this.connections.get(n)??[]).filter(i=>i.id!==t.id);this.connections.set(n,s),s.length===0&&(this.log.trace("peer %p disconnected, removing connection map entry",n),this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:n}))}getConnections(e){if(e!=null)return this.connections.get(e)??[];let t=[];for(let n of this.connections.values())t=t.concat(n);return t}getConnectionsMap(){return this.connections}async openConnection(e,t={}){if(!this.started)throw new Ur("Not started");this.outboundPendingConnections++;try{t.signal?.throwIfAborted();let{peerId:n,multiaddrs:o}=$h(e);if(this.peerId.equals(n))throw new hi("Can not dial self");if(n!=null&&t.force!==!0){this.log("dial %p",n);let c=Kh(n,this.getConnections(n),o);if(c!=null)return this.log("had an existing connection to %p as %a",n,c.remoteAddr),t.onProgress?.(new H("dial-queue:already-connected")),c}let s=await this.dialQueue.dial(e,{...t,priority:t.priority??F3});if(s.status!=="open")throw new is("Remote closed connection during opening");let i=this.connections.get(s.remotePeer);i==null&&(i=[],this.connections.set(s.remotePeer,i));let a=!1;for(let c of i)if(c.id===s.id&&(a=!0),t.force!==!0&&c.id!==s.id&&c.remoteAddr.equals(s.remoteAddr))return s.abort(new ln("Duplicate multiaddr connection")),c;return a||i.push(s),s}finally{this.outboundPendingConnections--}}async openStream(e,t,n={}){return(await this.openConnection(e,n)).newStream(t,n)}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await Promise.all([Cl(o,"close",t),o.close(t)])}catch(s){o.abort(s)}}))}acceptIncomingConnection(e){if(this.deny.some(o=>{if(xt(e.remoteAddr)){let s=oe(e.remoteAddr);return o.contains(s.host)}return!1}))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>{if(xt(e.remoteAddr)){let s=oe(e.remoteAddr);return o.contains(s.host)}return!0}))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(xt(e.remoteAddr)){let o=oe(e.remoteAddr);try{this.inboundConnectionRateLimiter.consume(o.host,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o.host),!1}}return this.getConnections().length<this.maxConnections?(this.incomingPendingConnections++,!0):(this.log("connection from %a refused - maxConnections exceeded",e.remoteAddr),!1)}afterUpgradeInbound(){this.incomingPendingConnections--}getDialQueue(){let e={queued:"queued",running:"active",errored:"error",complete:"success"};return this.dialQueue.queue.queue.map(t=>({id:t.id,status:e[t.status],peerId:t.options.peerId,multiaddrs:[...t.options.multiaddrs].map(n=>q(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var QP=1e4,ZP="1.0.0",JP="ping",eR="ipfs",Fw=32,tR=!0,Yh=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??eR}/${JP}/${ZP}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??QP,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??tR,this.timeout=new Gr({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[me]=["@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(),n=this.timeout.getTimeoutSignal({signal:this.abortController?.signal});try{let o=await e.newStream(this.protocol,{signal:n,runOnLimitedConnection:!0}),s=Cd(o);t=Date.now(),await Promise.all([s.write(Yt(Fw),{signal:n}),s.read({bytes:Fw,signal:n})]),e.rtt=Date.now()-t,await o.close({signal:n})}catch(o){if(o.name!=="UnsupportedProtocolError")throw o;e.rtt=(Date.now()-t)/2}finally{this.timeout.cleanUp(n)}}).catch(t=>{this.log.error("error during heartbeat - %e",t),this.abortConnectionOnPingFailure?(this.log.error("aborting connection due to ping failure"),e.abort(t)):this.log("connection ping failed, but not aborting due to abortConnectionOnPingFailure flag")})})},this.pingIntervalMs)}stop(){this.abortController?.abort(),this.heartbeatInterval!=null&&clearInterval(this.heartbeatInterval)}};var jh=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:R(n,"base36")})})??this.put,this.get=e.metrics?.traceFunction("libp2p.contentRouting.get",this.get.bind(this),{optionsIndex:1,getAttributesFromArgs:([n])=>({key:R(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 Ea("No content routers available");let n=this,o=new xr;for await(let s of jt(...n.routers.filter(i=>i.findProviders instanceof Function).map(i=>i.findProviders(e,t))))s!=null&&(s.multiaddrs.length>0&&await this.components.peerStore.merge(s.id,{multiaddrs:s.multiaddrs},t),!o.has(s.id)&&(o.add(s.id),yield s))}async provide(e,t={}){if(this.routers.length===0)throw new Ea("No content routers available");await Promise.all(this.routers.filter(n=>n.provide instanceof Function).map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){if(this.routers.length===0)throw new Ea("No content routers available");await Promise.all(this.routers.filter(n=>n.cancelReprovide instanceof Function).map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new Ur;await Promise.all(this.routers.filter(o=>o.put instanceof Function).map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new Ur;return Promise.any(this.routers.filter(n=>n.get instanceof Function).map(async n=>n.get(e,t)))}};var Xh=globalThis.CustomEvent??Event;async function*io(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered??!1,o=new EventTarget,s=[],i=fe(),a=fe(),c=!1,l,d=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let p of r){if(s.length===t&&(i=fe(),await i.promise),d)break;let g={done:!1};s.push(g),p().then(m=>{g.done=!0,g.ok=!0,g.value=m,o.dispatchEvent(new Xh("task-complete"))},m=>{g.done=!0,g.err=m,o.dispatchEvent(new Xh("task-complete"))})}c=!0,o.dispatchEvent(new Xh("task-complete"))}catch(p){l=p,o.dispatchEvent(new Xh("task-complete"))}});function u(){return n?s[0]?.done:!!s.find(p=>p.done)}function*f(){for(;s.length>0&&s[0].done;){let p=s[0];if(s.shift(),p.ok)yield p.value;else throw d=!0,i.resolve(),p.err;i.resolve()}}function*h(){for(;u();)for(let p=0;p<s.length;p++)if(s[p].done){let g=s[p];if(s.splice(p,1),p--,g.ok)yield g.value;else throw d=!0,i.resolve(),g.err;i.resolve()}}for(;;){if(u()||(a=fe(),await a.promise),l!=null||(n?yield*f():yield*h(),l!=null))throw l;if(c&&s.length===0)break}}var Qh=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:R(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 Ph("Should not try to find self");let n=this,o=jt(...this.routers.filter(s=>s.findPeer instanceof Function).map(s=>(async function*(){try{yield await s.findPeer(e,t)}catch(i){n.log.error("router failed to find peer - %e",i)}})()));for await(let s of o)if(s!=null)return s.multiaddrs.length>0&&await this.peerStore.merge(s.id,{multiaddrs:s.multiaddrs},t),s;throw new Le}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Tl("No peer routers available");let n=this,o=Et(1024);for await(let s of io((async function*(){let i=jt(...n.routers.filter(a=>a.getClosestPeers instanceof Function).map(a=>a.getClosestPeers(e,t)));for await(let a of i)yield async()=>{if(a.multiaddrs.length===0)try{a=await n.findPeer(a.id,{...t,useCache:!1})}catch(c){n.log.error("could not find peer multiaddrs - %e",c);return}return a}})()))s!=null&&(s.multiaddrs.length>0&&await this.peerStore.merge(s.id,{multiaddrs:s.multiaddrs},t),!o.has(s.id.toMultihash().bytes)&&(o.add(s.id.toMultihash().bytes),yield s))}};var Zh=class extends ie{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=fe(),yield(await Cl(this,"walk:peer",{signal:t,rejectionEvents:["walk:error"]})).detail}catch(n){throw n.detail!=null?n.detail:n}finally{t.clear(),this.walkers--,this.walkers===0&&(this.walkController?.abort(),this.walkController=void 0)}}startWalk(){this.walking=!0,this.walkController=new AbortController,this.walkController.signal;let e=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=Yt(32),s=Date.now();for await(let i 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",i.id,Date.now()-s,this.walkers),n++,this.safeDispatchEvent("walk:peer",{detail:i}),this.walkers===1&&this.needNext!=null&&(this.log("wait for need next"),await Pe(this.needNext.promise,e)),s=Date.now();this.log("walk iteration for %b and %d walkers finished, found %d peers",o,this.walkers,n)}catch(o){this.log.error("random walk errored - %e",o),this.safeDispatchEvent("walk:error",{detail:o})}this.log("no walkers left, ended walk")}).catch(o=>{this.log.error("random walk errored - %e",o)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var q3=32,W3=64,Jh=class{log;topologies;handlers;components;middleware;constructor(e){this.components=e,this.log=e.logger.forComponent("libp2p:registrar"),this.middleware=new Map,this.topologies=new Map,e.metrics?.registerMetricGroup("libp2p_registrar_topologies",{calculate:()=>{let t={};for(let[n,o]of this.topologies)t[n]=o.size;return t}}),this.handlers=ot({name:"libp2p_registrar_protocol_handlers",metrics:e.metrics}),this._onDisconnect=this._onDisconnect.bind(this),this._onPeerUpdate=this._onPeerUpdate.bind(this),this._onPeerIdentify=this._onPeerIdentify.bind(this),this.components.events.addEventListener("peer:disconnect",this._onDisconnect),this.components.events.addEventListener("peer:update",this._onPeerUpdate),this.components.events.addEventListener("peer:identify",this._onPeerIdentify)}[Symbol.toStringTag]="@libp2p/registrar";getProtocols(){return Array.from(new Set([...this.handlers.keys()])).sort()}getHandler(e){let t=this.handlers.get(e);if(t==null)throw new Rh(`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 Lh(`Handler already registered for protocol ${e}`);this.handlers.set(e,{handler:t,options:{maxInboundStreams:q3,maxOutboundStreams:W3,...n}}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]},n)}async unhandle(e,t){(Array.isArray(e)?e:[e]).forEach(o=>{this.handlers.delete(o)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()},t)}async register(e,t){if(t==null)throw new A("invalid topology");let n=`${(Math.random()*1e9).toString(36)}${Date.now()}`,o=this.topologies.get(e);return o==null&&(o=new Map,this.topologies.set(e,o)),o.set(n,t),n}unregister(e){for(let[t,n]of this.topologies.entries())n.has(e)&&(n.delete(e),n.size===0&&this.topologies.delete(t))}use(e,t){this.middleware.set(e,t)}unuse(e){this.middleware.delete(e)}getMiddleware(e){return this.middleware.get(e)??[]}async _onDisconnect(e){let t=e.detail,n={signal:AbortSignal.timeout(5e3)};try{let o=await this.components.peerStore.get(t,n);for(let s of o.protocols){let i=this.topologies.get(s);i!=null&&await Promise.all([...i.values()].map(async a=>{a.filter?.has(t)!==!1&&(a.filter?.remove(t),await a.onDisconnect?.(t))}))}}catch(o){if(o.name==="NotFoundError")return;this.log.error("could not inform topologies of disconnecting peer %p - %e",t,o)}}async _onPeerUpdate(e){let{peer:t,previous:n}=e.detail,o=(n?.protocols??[]).filter(s=>!t.protocols.includes(s));try{for(let s of o){let i=this.topologies.get(s);i!=null&&await Promise.all([...i.values()].map(async a=>{a.filter?.has(t.id)!==!1&&(a.filter?.remove(t.id),await a.onDisconnect?.(t.id))}))}}catch(s){this.log.error("could not inform topologies of updated peer %p - %e",t.id,s)}}async _onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;try{for(let s of t){let i=this.topologies.get(s);i!=null&&await Promise.all([...i.values()].map(async a=>{n.limits!=null&&a.notifyOnLimitedConnection!==!0||a.filter?.has(o)!==!0&&(a.filter?.add(o),await a.onConnect?.(o,n))}))}}catch(s){this.log.error("could not inform topologies of updated peer after identify %p - %e",o,s)}}};var e1=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=ot({name:"libp2p_transport_manager_transports",metrics:this.components.metrics}),this.listeners=ot({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??Xa.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new A("Transport must have a valid tag");if(this.transports.has(t))throw new A(`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 Uh(`No transport available for address ${String(e)}`);return t?.onProgress?.(new H("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 Ur("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(s=>{t.errors.set(s.toString(),new Dh)});let n=[];for(let[s,i]of this.transports.entries()){let a=i.listenFilter(e);for(let c of a){this.log("creating listener for %s on %a",s,c);let l=i.createListener({upgrader:this.components.upgrader}),d=this.listeners.get(s)??[];d==null&&(d=[],this.listeners.set(s,d)),d.push(l),l.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:l})}),l.addEventListener("close",()=>{let u=d.findIndex(f=>f===l);d.splice(u,1),this.components.events.safeDispatchEvent("transport:close",{detail:l})}),a3.matches(c)?t.ipv4.attempts++:c3.matches(c)&&t.ipv6.attempts++,n.push(l.listen(c).then(()=>{t.errors.delete(c.toString()),a3.matches(c)&&t.ipv4.success++,c3.matches(c)&&t.ipv6.success++},u=>{throw this.log.error("transport %s could not listen on address %a - %e",s,c,u),t.errors.set(c.toString(),u),u}))}}let o=await Promise.allSettled(n);if(!(o.length>0&&o.every(s=>s.status==="fulfilled"))){if(this.ipv6Unsupported(t)){this.log("all IPv4 addresses succeed but all IPv6 failed");return}if(this.faultTolerance===Xa.NO_FATAL){this.log("failed to listen on any address but fault tolerance allows this");return}throw new Nh(`Some configured addresses failed to be listened on, you may need to remove one or more listen addresses from your configuration or set \`transportManager.faultTolerance\` to NO_FATAL:
33
33
  ${[...t.errors.entries()].map(([s,i])=>`
34
34
  ${s}: ${`${rR(i)}`.split(`
35
35
  `).join(`
36
36
  `)}
37
- `).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)}};function rR(r){return r.stack!=null&&r.stack.trim()!==""?r.stack:r.message!=null?r.message:r.toString()}var Sn="/multistream/1.0.0";var nR=_(`
38
- `);async function Ll(r,e){let n=(await r.read(e)).subarray();if(n.byteLength===0||n[n.length-1]!==nR[0])throw new de("Missing newline");return R(n).trimEnd()}async function xa(r,e,t={}){if(e=Array.isArray(e)?[...e]:[e],e.length===0)throw new Error("At least one protocol must be specified");let n=r.log.newScope("mss:select"),o=Fo(r,{...t,maxDataLength:1024});for(let s=0;s<e.length;s++){let i=e[s],a;if(s===0){n.trace('write ["%s", "%s"]',Sn,i);let c=_(`${Sn}
39
- `),l=_(`${i}
40
- `);if(await o.writeV([c,l],t),n.trace("reading multistream-select header"),a=await Ll(o,t),n.trace('read "%s"',a),a!==Sn){n.error("did not read multistream-select header from response");break}}else n.trace('write "%s"',i),await o.write(_(`${i}
41
- `),t);if(n.trace("reading protocol response"),a=await Ll(o,t),n.trace('read "%s"',a),a===i)return n.trace('selected "%s" after negotiation',a),o.unwrap(),i}throw new pi(`Protocol selection failed - could not negotiate ${e}`)}async function va(r,e,t={}){e=Array.isArray(e)?e:[e];let n=r.log.newScope("mss:handle"),o=Fo(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){n.trace("reading incoming string");let s=await Ll(o,t);if(n.trace('read "%s"',s),s===Sn){n.trace('respond with "%s" for "%s"',Sn,s),await o.write(_(`${Sn}
42
- `),t),n.trace('responded with "%s" for "%s"',Sn,s);continue}if(e.includes(s))return n.trace('respond with "%s" for "%s"',s,s),await o.write(_(`${s}
43
- `),t),n.trace('responded with "%s" for "%s"',s,s),o.unwrap(),s;if(s==="ls"){let i=new Q(...e.map(a=>Xn.single(_(`${a}
44
- `))),_(`
45
- `));n.trace('respond with "%s" for %s',e,s),await o.write(i,t),n.trace('responded with "%s" for %s',e,s);continue}n.trace('respond with "na" for "%s"',s),await o.write(_(`na
46
- `),t),n('responded with "na" for "%s"',s)}}var G3=class extends ie{id;remoteAddr;remotePeer;direction;timeline;direct;multiplexer;encryption;limits;log;maConn;muxer;components;outboundStreamProtocolNegotiationTimeout;inboundStreamProtocolNegotiationTimeout;closeTimeout;constructor(e,t){super(),this.components=e,this.id=t.id,this.remoteAddr=t.maConn.remoteAddr,this.remotePeer=t.remotePeer,this.direction=t.direction??"outbound",this.timeline=t.maConn.timeline,this.encryption=t.cryptoProtocol,this.limits=t.limits,this.maConn=t.maConn,this.log=t.maConn.log,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.closeTimeout=t.closeTimeout??1e3,this.direct=D3(t.maConn.remoteAddr),this.onIncomingStream=this.onIncomingStream.bind(this),this.remoteAddr.getComponents().find(n=>n.code===421)==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),t.muxer!=null&&(this.multiplexer=t.muxer.protocol,this.muxer=t.muxer,this.muxer.addEventListener("stream",this.onIncomingStream)),this.maConn.addEventListener("close",n=>{this.dispatchEvent(new xo(n.local,n.error))})}[Symbol.toStringTag]="Connection";[I6]=!0;get streams(){return this.muxer?.streams??[]}get status(){return this.maConn.status}newStream=async(e,t={})=>{if(this.muxer==null)throw new Wo("Connection is not multiplexed");if(this.muxer.status!=="open")throw new is(`The connection muxer is "${this.muxer.status}" and not "open"`);if(this.maConn.status!=="open")throw new is(`The connection is "${this.status}" and not "open"`);if(this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new ja("Cannot open protocol stream on limited connection");Array.isArray(e)||(e=[e]),this.log.trace("starting new stream for protocols %s",e);let n=await this.muxer.createStream({...t,protocol:e.length===1?e[0]:void 0});this.log.trace("started new stream %s for protocols %s",n.id,e);try{if(t.signal==null){n.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",e);let a=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);t={...t,signal:a}}n.protocol===""?(n.log.trace("selecting protocol from protocols %s",e),n.protocol=await xa(n,e,t),n.log("negotiated protocol %s",n.protocol)):n.log("pre-negotiated protocol %s",n.protocol);let o=iR(n.protocol,this.components.registrar,t),s=Vw(n.protocol,"outbound",this);if(s>o){let a=new mi(`Too many outbound protocol streams for protocol "${n.protocol}" - ${s}/${o}`);throw n.abort(a),a}await this.components.peerStore.merge(this.remotePeer,{protocols:[n.protocol]}),this.components.metrics?.trackProtocolStream(n);let i=this.components.registrar.getMiddleware(n.protocol);return await this.runMiddlewareChain(n,this,i)}catch(o){throw n.status==="open"?n.abort(o):this.log.error("could not create new outbound stream on connection %s %a for protocols %s - %e",this.direction==="inbound"?"from":"to",this.remoteAddr,e,o),o}};async onIncomingStream(e){let t=e.detail,n=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);t.log("start protocol negotiation, timing out after %dms",this.inboundStreamProtocolNegotiationTimeout);try{if(t.protocol===""){let l=this.components.registrar.getProtocols();t.log.trace("selecting protocol from protocols %s",l),t.protocol=await va(t,l,{signal:n}),t.log("negotiated protocol %s",t.protocol)}else t.log("pre-negotiated protocol %s",t.protocol);let o=sR(t.protocol,this.components.registrar);if(Vw(t.protocol,"inbound",this)>o)throw new Iu(`Too many inbound protocol streams for protocol "${t.protocol}" - limit ${o}`);await this.components.peerStore.merge(this.remotePeer,{protocols:[t.protocol]},{signal:n}),this.components.metrics?.trackProtocolStream(t);let{handler:i,options:a}=this.components.registrar.getHandler(t.protocol);if(this.limits!=null&&a.runOnLimitedConnection!==!0)throw new ja("Cannot open protocol stream on limited connection");let c=this.components.registrar.getMiddleware(t.protocol);c.push(async(l,d,u)=>{await i(l,d),u(l,d)}),await this.runMiddlewareChain(t,this,c)}catch(o){t.abort(o)}}async runMiddlewareChain(e,t,n){for(let o=0;o<n.length;o++){let s=n[o];e.log.trace("running middleware",o,s),await new Promise((i,a)=>{try{let c=s(e,t,(l,d)=>{e=l,t=d,i()});c instanceof Promise&&c.catch(a)}catch(c){a(c)}}),e.log.trace("ran middleware",o,s)}return e}async close(e={}){if(this.log("closing connection to %a",this.remoteAddr),e.signal==null){let t=AbortSignal.timeout(this.closeTimeout);e={...e,signal:t}}await this.muxer?.close(e),await this.maConn.close(e)}abort(e){this.muxer?.abort(e),this.maConn.abort(e)}};function Hw(r,e){return new G3(r,e)}function sR(r,e){try{let{options:t}=e.getHandler(r);if(t.maxInboundStreams!=null)return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return q3}function iR(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??z3}function Vw(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var t1=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;inboundStreamProtocolNegotiationTimeout;outboundStreamProtocolNegotiationTimeout;events;metrics;connectionCloseTimeout;constructor(e,t){this.components=e,this.connectionEncrypters=ot({name:"libp2p_upgrader_connection_encrypters",metrics:this.components.metrics}),t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=ot({name:"libp2p_upgrader_stream_multiplexers",metrics:this.components.metrics}),t.streamMuxers.forEach(n=>{this.streamMuxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,this.connectionCloseTimeout=t.connectionCloseTimeout??1e3,this.events=e.events,this.metrics={dials:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_total"),errors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dial_errors_total"),inboundErrors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_inbound_errors_total"),outboundErrors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_outbound_errors_total")}}[Symbol.toStringTag]="@libp2p/upgrader";async shouldBlockConnection(e,...t){let n=this.components.connectionGater[e];if(n==null)return;if(await n.apply(this.components.connectionGater,t)===!0)throw new Mh(`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=this.components.connectionManager.acceptIncomingConnection(e),!n)throw new Bh("Connection denied");await Pe(this.shouldBlockConnection("denyInboundConnection",e),o),await this._performUpgrade(e,"inbound",{...t,signal:o})}catch(s){throw this.metrics.errors?.increment({inbound:!0}),this.metrics.inboundErrors?.increment({[s.name??"Error"]:!0}),s}finally{o.clear(),n&&this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){try{this.metrics.dials?.increment({outbound:!0});let n=e.remoteAddr.getComponents().findLast(i=>i.code===421)?.value,o;n!=null&&(o=Me(n),await Pe(this.shouldBlockConnection("denyOutboundConnection",o,e),t.signal));let s="outbound";return t.initiator===!1&&(s="inbound"),await this._performUpgrade(e,s,t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),this.metrics.outboundErrors?.increment({[n.name??"Error"]:!0}),n}}async _performUpgrade(e,t,n){let o=e,s,i,a,c,l=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`;if(e.log=e.log.newScope(`${t}:${l}`),this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t),n?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(e.log("protecting the %s connection",t),o=await u.protect(o,n))}try{if(aR(n)){if(n.remotePeer==null)throw new ln(`${t} connection that skipped encryption must have a peer id`);c="native",s=n.remotePeer}else{let u=e.remoteAddr.getComponents().findLast(h=>h.code===421)?.value,f;u!=null&&(f=Me(u)),n?.onProgress?.(new H(`upgrader:encrypt-${t}-connection`)),{connection:o,remotePeer:s,protocol:c,streamMuxer:i}=await(t==="inbound"?this._encryptInbound(o,{...n,remotePeer:f}):this._encryptOutbound(o,{...n,remotePeer:f}))}if(s.equals(this.components.peerId)){let u=new hi("Can not dial self");throw e.abort(u),u}await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",s,e),n?.muxerFactory!=null?i=n.muxerFactory:i==null&&this.streamMuxers.size>0&&(n?.onProgress?.(new H(`upgrader:multiplex-${t}-connection`)),i=await(t==="inbound"?this._multiplexInbound(o,this.streamMuxers,n):this._multiplexOutbound(o,this.streamMuxers,n)))}catch(u){throw e.log.error("failed to upgrade %s connection %s %a - %e",t,t==="inbound"?"from":"to",e.remoteAddr,u),u}i!=null&&(e.log("create muxer %s",i.protocol),a=i.createStreamMuxer(o)),await this.shouldBlockConnection(t==="inbound"?"denyInboundUpgradedConnection":"denyOutboundUpgradedConnection",s,e);let d=this._createConnection({id:l,cryptoProtocol:c,direction:t,maConn:e,stream:o,muxer:a,remotePeer:s,limits:n?.limits,closeTimeout:this.connectionCloseTimeout});return d.log("successfully upgraded connection"),d}_createConnection(e){let t=Hw(this.components,{...e,outboundStreamProtocolNegotiationTimeout:this.outboundStreamProtocolNegotiationTimeout,inboundStreamProtocolNegotiationTimeout:this.inboundStreamProtocolNegotiationTimeout});return t.addEventListener("close",()=>{this.events.safeDispatchEvent("connection:close",{detail:t})}),this.events.safeDispatchEvent("connection:open",{detail:t}),t}async _encryptInbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{let o=await va(e,n,t),s=this.connectionEncrypters.get(o);if(s==null)throw new ei(`no crypto module found for ${o}`);return e.log("encrypting inbound connection using %s",o),{...await s.secureInbound(e,t),protocol:o}}catch(o){throw new ei(o.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{e.log.trace("selecting encrypter from %s",n);let o=await xa(e,n,t),s=this.connectionEncrypters.get(o);if(s==null)throw new ei(`no crypto module found for ${o}`);return e.log("encrypting outbound connection using %s",o),{...await s.secureOutbound(e,t),protocol:o}}catch(o){throw new ei(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 s=await xa(e,o,n),i=t.get(s);if(i==null)throw new Wo(`No muxer configured for protocol "${s}"`);return e.log("selected %s as muxer protocol",s),i}catch(s){throw e.log.error("error multiplexing outbound connection - %e",s),new Wo(String(s))}}async _multiplexInbound(e,t,n){let o=Array.from(t.keys());e.log("inbound handling muxers %s",o);try{e.log.trace("selecting stream muxer from %s",o);let s=await va(e,o,n),i=t.get(s);if(i==null)throw new Wo(`No muxer configured for protocol "${s}"`);return e.log("selected %s as muxer protocol",s),i}catch(s){throw e.log.error("error multiplexing inbound connection - %e",s),s}}getConnectionEncrypters(){return this.connectionEncrypters}getStreamMuxers(){return this.streamMuxers}};function aR(r){return r.skipEncryption===!0}var r1="3.1.3",n1="js-libp2p";function o1(r,e){return`${r??n1}/${e??r1} browser/${globalThis.navigator.userAgent}`}var Dl=class extends ie{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new ie,n=t.dispatchEvent.bind(t);t.dispatchEvent=l=>{let d=n(l),u=this.dispatchEvent(new CustomEvent(l.type,{detail:l.detail}));return d||u},this.peerId=e.peerId,this.logger=e.logger??ra(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=e.nodeInfo?.name??n1,s=e.nodeInfo?.version??r1,i=this.components=kw({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:{name:o,version:s,userAgent:e.nodeInfo?.userAgent??o1(o,s)},logger:this.logger,events:t,datastore:e.datastore??new Js,connectionGater:Rw(e.connectionGater),dns:e.dns});e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),this.peerStore=this.configureComponent("peerStore",Aw(i,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),i.events.addEventListener("peer:update",l=>{if(l.detail.previous==null){let d={id:l.detail.peer.id,multiaddrs:l.detail.peer.addresses.map(u=>u.multiaddr)};i.events.safeDispatchEvent("peer:discovery",{detail:d})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(i)),this.components.upgrader=new t1(this.components,{connectionEncrypters:(e.connectionEncrypters??[]).map((l,d)=>this.configureComponent(`connection-encryption-${d}`,l(this.components))),streamMuxers:(e.streamMuxers??[]).map((l,d)=>this.configureComponent(`stream-muxers-${d}`,l(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout,inboundStreamProtocolNegotiationTimeout:e.connectionManager?.inboundStreamProtocolNegotiationTimeout,outboundStreamProtocolNegotiationTimeout:e.connectionManager?.outboundStreamProtocolNegotiationTimeout,connectionCloseTimeout:e.connectionManager?.connectionCloseTimeout}),this.configureComponent("transportManager",new e1(this.components,e.transportManager)),this.configureComponent("connectionManager",new Gh(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new Yh(this.components,e.connectionMonitor)),this.configureComponent("registrar",new Jh(this.components)),this.configureComponent("addressManager",new Ch(this.components,e.addresses));let a=(e.peerRouters??[]).map((l,d)=>this.configureComponent(`peer-router-${d}`,l(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new Xh(this.components,{routers:a}));let c=(e.contentRouters??[]).map((l,d)=>this.configureComponent(`content-router-${d}`,l(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new jh(this.components,{routers:c})),this.configureComponent("randomWalk",new Zh(this.components)),(e.peerDiscovery??[]).forEach((l,d)=>{this.configureComponent(`peer-discovery-${d}`,l(this.components)).addEventListener("peer",f=>{this.#e(f)})}),e.transports?.forEach((l,d)=>{this.components.transportManager.add(this.configureComponent(`transport-${d}`,l(this.components)))}),e.services!=null)for(let l of Object.keys(e.services)){let d=e.services[l],u=d(this.components);if(u==null){this.log.error("service factory %s returned null or undefined instance",l);continue}this.services[l]=u,this.configureComponent(l,u),u[Dn]!=null&&(this.log("registering service %s for content routing",l),c.push(u[Dn])),u[On]!=null&&(this.log("registering service %s for peer routing",l),a.push(u[On])),u[ls]!=null&&(this.log("registering service %s for peer discovery",l),u[ls].addEventListener?.("peer",f=>{this.#e(f)}))}Pw(i)}configureComponent(e,t){return t==null&&this.log.error("component %s was null or undefined",e),this.components[e]=t,t}async start(){if(this.status==="stopped"){this.status="starting",this.log("libp2p is starting");try{await this.components.beforeStart?.(),await this.components.start(),await this.components.afterStart?.(),this.status="started",this.safeDispatchEvent("start",{detail:this}),this.log("libp2p has started with peer id %p",this.peerId)}catch(e){throw this.log.error("an error occurred starting libp2p - %e",e),this.status="started",await this.stop(),e}}}async stop(){this.status==="started"&&(this.log("libp2p is stopping"),this.status="stopping",await this.components.beforeStop?.(),await this.components.stop(),await this.components.afterStop?.(),this.status="stopped",this.safeDispatchEvent("stop",{detail:this}),this.log("libp2p has stopped"))}getConnections(e){return this.components.connectionManager.getConnections(e)}getDialQueue(){return this.components.connectionManager.getDialQueue()}getPeers(){let e=new xr;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 A("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new A("no protocols were provided to open a stream");return this.components.connectionManager.openStream(e,t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){yn(e)&&(e=Me(e.getComponents().findLast(n=>n.code===421)?.value??"")),await this.components.connectionManager.closeConnections(e,t)}async getPublicKey(e,t={}){if(this.log("getPublicKey %p",e),e.publicKey!=null)return e.publicKey;try{let i=await this.peerStore.get(e,t);if(i.id.publicKey!=null)return i.id.publicKey}catch(i){if(i.name!=="NotFoundError")throw i}let n=Oe([_("/pk/"),e.toMultihash().bytes]),o=await this.contentRouting.get(n,t),s=et(o);return await this.peerStore.patch(e,{publicKey:s},t),s}async handle(e,t,n){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async o=>{await this.components.registrar.handle(o,t,n)}))}async unhandle(e,t){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async n=>{await this.components.registrar.unhandle(n,t)}))}async register(e,t,n){return this.components.registrar.register(e,t,n)}unregister(e){this.components.registrar.unregister(e)}use(e,t){this.components.registrar.use(e,Array.isArray(t)?t:[t])}unuse(e){this.components.registrar.unuse(e)}async isDialable(e,t={}){return this.components.connectionManager.isDialable(e,t)}#e(e){let{detail:t}=e;if(t.id.toString()===this.peerId.toString()){this.log.error("peer discovery mechanism discovered self");return}this.components.peerStore.merge(t.id,{multiaddrs:t.multiaddrs}).catch(n=>{this.log.error("could not update multiaddrs of discovered peer - %e",n)})}};async function zw(r={}){r.privateKey??=await od("Ed25519");let e=new Dl({...await lw(r),peerId:E9(r.privateKey)});return r.start!==!1&&await e.start(),e}var cR=["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"];function Ww(r){return r==null?!1:r instanceof Dl?!0:cR.every(e=>typeof r[e]=="function")}var zb=Ln(tb(),1);var Y3={keyLength:64,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"};var Sa={};Je(Sa,{create:()=>xR,derivedEmptyPasswordKey:()=>s1});var s1={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function xR(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,o=r?.digest??"SHA-256",s=r?.saltLength??16,i=r?.iterations??32767,a=nt.get();t*=8;async function c(u,f){let h=a.getRandomValues(new Uint8Array(s)),p=a.getRandomValues(new Uint8Array(n)),g={name:e,iv:p};typeof f=="string"&&(f=_(f));let m;if(f.length===0){m=await a.subtle.importKey("jwk",s1,{name:"AES-GCM"},!0,["encrypt"]);try{let T={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},I=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(T,I,{name:e,length:t},!0,["encrypt"])}catch{m=await a.subtle.importKey("jwk",s1,{name:"AES-GCM"},!0,["encrypt"])}}else{let T={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},I=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(T,I,{name:e,length:t},!0,["encrypt"])}let w=await a.subtle.encrypt(g,m,u);return Oe([h,g.iv,new Uint8Array(w)])}async function l(u,f){let h=u.subarray(0,s),p=u.subarray(s,s+n),g=u.subarray(s+n),m={name:e,iv:p};typeof f=="string"&&(f=_(f));let w;if(f.length===0)try{let I={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},D=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);w=await a.subtle.deriveKey(I,D,{name:e,length:t},!0,["decrypt"])}catch{w=await a.subtle.importKey("jwk",s1,{name:"AES-GCM"},!0,["decrypt"])}else{let I={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},D=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);w=await a.subtle.deriveKey(I,D,{name:e,length:t},!0,["decrypt"])}let T=await a.subtle.decrypt(m,w,g);return new Uint8Array(T)}return{encrypt:c,decrypt:l}}var ye=Ln(rb());function ti(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 Go(r,e,t=-1){let n=t,o=r,s=0,i=Math.pow(2,e);for(let a=1;a<8;a++){if(r<i){let c;if(n<0)c=new ArrayBuffer(a),s=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),s=n}let l=new Uint8Array(c);for(let d=a-1;d>=0;d--){let u=Math.pow(2,d*e);l[s-d-1]=Math.floor(o/u),o-=l[s-d-1]*u}return c}i*=Math.pow(2,e)}return new ArrayBuffer(0)}function c1(...r){let e=0,t=0;for(let s of r)e+=s.length;let n=new ArrayBuffer(e),o=new Uint8Array(n);for(let s of r)o.set(s,t),t+=s.length;return o}function Q3(){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=ti(t,8),o=new ArrayBuffer(this.valueHex.byteLength),s=new Uint8Array(o);for(let a=0;a<this.valueHex.byteLength;a++)s[a]=r[a];return s[0]&=127,ti(s,8)-n}function nb(r){let e=r<0?r*-1:r,t=128;for(let n=1;n<8;n++){if(e<=t){if(r<0){let i=t-e,a=Go(i,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=Go(e,8,n),s=new Uint8Array(o);if(s[0]&128){let i=o.slice(0),a=new Uint8Array(i);o=new ArrayBuffer(o.byteLength+1),s=new Uint8Array(o);for(let c=0;c<i.byteLength;c++)s[c+1]=a[c];s[0]=0}return o}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function ob(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 sr(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,o=new Array(n);for(let i=0;i<n;i++)o[i]="0";return o.join("").concat(t)}var Sse=Math.log(2);function l1(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function X3(r){let e=0,t=0;for(let o=0;o<r.length;o++){let s=r[o];e+=s.byteLength}let n=new Uint8Array(e);for(let o=0;o<r.length;o++){let s=r[o];n.set(new Uint8Array(s),t),t+=s.byteLength}return n.buffer}function ho(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 Ml=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return X3(this.items)}},Nl=[new Uint8Array([1])],sb="0123456789";var Ia="",Tn=new ArrayBuffer(0),Z3=new Uint8Array(0),Bl="EndOfContent",ab="OCTET STRING",cb="BIT STRING";function po(r){var e;return e=class extends r{get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}constructor(...n){var o;super(...n);let s=n[0]||{};this.isHexOnly=(o=s.isHexOnly)!==null&&o!==void 0?o:!1,this.valueHexView=s.valueHex?ye.BufferSourceConverter.toUint8Array(s.valueHex):Z3}fromBER(n,o,s){let i=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!ho(this,i,o,s))return-1;let a=o+s;return this.valueHexView=i.subarray(o,a),this.valueHexView.length?(this.blockLength=s,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",Tn)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:ye.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var co=class{static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}constructor({blockLength:e=0,error:t=Ia,warnings:n=[],valueBeforeDecode:o=Z3}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=ye.BufferSourceConverter.toUint8Array(o)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:ye.Convert.ToHex(this.valueBeforeDecodeView)}}};co.NAME="baseBlock";var $t=class extends co{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'")}};$t.NAME="valueBlock";var u1=class extends po(co){constructor({idBlock:e={}}={}){var t,n,o,s;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?ye.BufferSourceConverter.toUint8Array(e.valueHex):Z3,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(o=e.tagNumber)!==null&&o!==void 0?o:-1,this.isConstructed=(s=e.isConstructed)!==null&&s!==void 0?s:!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",Tn}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let o=new Uint8Array(1);if(!e){let s=this.tagNumber;s&=31,t|=s,o[0]=t}return o.buffer}if(!this.isHexOnly){let o=Go(this.tagNumber,7),s=new Uint8Array(o),i=o.byteLength,a=new Uint8Array(i+1);if(a[0]=t|31,!e){for(let c=0;c<i-1;c++)a[c+1]=s[c]|128;a[i]=s[i-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let o=this.valueHexView;for(let s=0;s<o.length-1;s++)n[s+1]=o[s]|128;n[this.valueHexView.byteLength]=o[o.length-1]}return n.buffer}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!ho(this,o,t,n))return-1;let s=o.subarray(t,t+n);if(s.length===0)return this.error="Zero buffer length",-1;switch(s[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=(s[0]&32)===32,this.isHexOnly=!1;let a=s[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,l=this.valueHexView=new Uint8Array(255),d=255;for(;s[c]&128;){if(l[c-1]=s[c]&127,c++,c>=s.length)return this.error="End of input reached before message was fully decoded",-1;if(c===d){d+=255;let f=new Uint8Array(d);for(let h=0;h<l.length;h++)f[h]=l[h];l=this.valueHexView=new Uint8Array(d)}}this.blockLength=c+1,l[c-1]=s[c]&127;let u=new Uint8Array(c);for(let f=0;f<c;f++)u[f]=l[f];l=this.valueHexView=new Uint8Array(c),l.set(u),this.blockLength<=9?this.tagNumber=ti(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}}};u1.NAME="identificationBlock";var d1=class extends co{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(!ho(this,o,t,n))return-1;let s=o.subarray(t,t+n);if(s.length===0)return this.error="Zero buffer length",-1;if(s[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=s[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(s[0]&128),this.longFormUsed===!1)return this.length=s[0],this.blockLength=1,t+this.blockLength;let i=s[0]&127;if(i>8)return this.error="Too big integer",-1;if(i+1>s.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=o.subarray(a,a+i);return c[i-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=ti(c,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=i+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=Go(this.length,8);if(o.byteLength>127)return this.error="Too big length",Tn;if(t=new ArrayBuffer(o.byteLength+1),e)return t;let s=new Uint8Array(o);n=new Uint8Array(t),n[0]=o.byteLength|128;for(let i=0;i<o.byteLength;i++)n[i+1]=s[i];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}}};d1.NAME="lengthBlock";var X={},Tt=class extends co{constructor({name:e=Ia,optional:t=!1,primitiveSchema:n,...o}={},s){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new u1(o),this.lenBlock=new d1(o),this.valueBlock=s?new s(o):new $t(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 Ml;t||lb(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 s=this.valueBlock.toBER(e);this.lenBlock.length=s.byteLength;let i=this.lenBlock.toBER(e);n.write(i),n.write(s)}return t?Tn: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(){let e=this.constructor.NAME,t=ye.Convert.ToHex(this.valueBlock.valueBeforeDecodeView);return`${e} : ${t}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return ob(t,n)}};Tt.NAME="BaseBlock";function lb(r){var e;if(r instanceof X.Constructed)for(let t of r.valueBlock.value)lb(t)&&(r.lenBlock.isIndefiniteForm=!0);return!!(!((e=r.lenBlock)===null||e===void 0)&&e.isIndefiniteForm)}var f1=class extends Tt{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor({value:e=Ia,...t}={},n){super(t,n),e&&this.fromString(e)}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.fromBuffer(this.valueBlock.valueHexView),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){return`${this.constructor.NAME} : '${this.valueBlock.value}'`}};f1.NAME="BaseStringBlock";var h1=class extends po($t){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};h1.NAME="PrimitiveValueBlock";var ub,p1=class extends Tt{constructor(e={}){super(e,h1),this.idBlock.isConstructed=!1}};ub=p1;X.Primitive=ub;p1.NAME="PRIMITIVE";function PR(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 Y1(r,e=0,t=r.length){let n=e,o=new Tt({},$t),s=new co;if(!ho(s,r,e,t))return o.error=s.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=Tt;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=X.EndOfContent;break;case 1:c=X.Boolean;break;case 2:c=X.Integer;break;case 3:c=X.BitString;break;case 4:c=X.OctetString;break;case 5:c=X.Null;break;case 6:c=X.ObjectIdentifier;break;case 10:c=X.Enumerated;break;case 12:c=X.Utf8String;break;case 13:c=X.RelativeObjectIdentifier;break;case 14:c=X.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=X.Sequence;break;case 17:c=X.Set;break;case 18:c=X.NumericString;break;case 19:c=X.PrintableString;break;case 20:c=X.TeletexString;break;case 21:c=X.VideotexString;break;case 22:c=X.IA5String;break;case 23:c=X.UTCTime;break;case 24:c=X.GeneralizedTime;break;case 25:c=X.GraphicString;break;case 26:c=X.VisibleString;break;case 27:c=X.GeneralString;break;case 28:c=X.UniversalString;break;case 29:c=X.CharacterString;break;case 30:c=X.BmpString;break;case 31:c=X.DATE;break;case 32:c=X.TimeOfDay;break;case 33:c=X.DateTime;break;case 34:c=X.Duration;break;default:{let l=o.idBlock.isConstructed?new X.Constructed:new X.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?X.Constructed:X.Primitive}return o=PR(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 j1(r){if(!r.byteLength){let e=new Tt({},$t);return e.error="Input buffer has zero length",{offset:-1,result:e}}return Y1(ye.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function RR(r,e){return r?1:e}var An=class extends $t{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(!ho(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 s=t;for(;RR(this.isIndefiniteForm,n)>0;){let i=Y1(o,s,n);if(i.offset===-1)return this.error=i.result.error,this.warnings.concat(i.result.warnings),-1;if(s=i.offset,this.blockLength+=i.result.blockLength,n-=i.result.blockLength,this.value.push(i.result),this.isIndefiniteForm&&i.result.constructor.NAME===Bl)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===Bl?this.value.pop():this.warnings.push("No EndOfContent block encoded")),s}toBER(e,t){let n=t||new Ml;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?Tn:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};An.NAME="ConstructedValueBlock";var db,Yo=class extends Tt{constructor(e={}){super(e,An),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(`
37
+ `).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)}};function rR(r){return r.stack!=null&&r.stack.trim()!==""?r.stack:r.message!=null?r.message:r.toString()}var Sn="/multistream/1.0.0";var nR=C(`
38
+ `);async function Ll(r,e){let n=(await r.read(e)).subarray();if(n.byteLength===0||n[n.length-1]!==nR[0])throw new de("Missing newline");return R(n).trimEnd()}async function xa(r,e,t={}){if(e=Array.isArray(e)?[...e]:[e],e.length===0)throw new Error("At least one protocol must be specified");let n=r.log.newScope("mss:select"),o=Fo(r,{...t,maxDataLength:1024});for(let s=0;s<e.length;s++){let i=e[s],a;if(s===0){n.trace('write ["%s", "%s"]',Sn,i);let c=C(`${Sn}
39
+ `),l=C(`${i}
40
+ `);if(await o.writeV([c,l],t),n.trace("reading multistream-select header"),a=await Ll(o,t),n.trace('read "%s"',a),a!==Sn){n.error("did not read multistream-select header from response");break}}else n.trace('write "%s"',i),await o.write(C(`${i}
41
+ `),t);if(n.trace("reading protocol response"),a=await Ll(o,t),n.trace('read "%s"',a),a===i)return n.trace('selected "%s" after negotiation',a),o.unwrap(),i}throw new pi(`Protocol selection failed - could not negotiate ${e}`)}async function va(r,e,t={}){e=Array.isArray(e)?e:[e];let n=r.log.newScope("mss:handle"),o=Fo(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){n.trace("reading incoming string");let s=await Ll(o,t);if(n.trace('read "%s"',s),s===Sn){n.trace('respond with "%s" for "%s"',Sn,s),await o.write(C(`${Sn}
42
+ `),t),n.trace('responded with "%s" for "%s"',Sn,s);continue}if(e.includes(s))return n.trace('respond with "%s" for "%s"',s,s),await o.write(C(`${s}
43
+ `),t),n.trace('responded with "%s" for "%s"',s,s),o.unwrap(),s;if(s==="ls"){let i=new X(...e.map(a=>Qn.single(C(`${a}
44
+ `))),C(`
45
+ `));n.trace('respond with "%s" for %s',e,s),await o.write(i,t),n.trace('responded with "%s" for %s',e,s);continue}n.trace('respond with "na" for "%s"',s),await o.write(C(`na
46
+ `),t),n('responded with "na" for "%s"',s)}}var G3=class extends ie{id;remoteAddr;remotePeer;direction;timeline;direct;multiplexer;encryption;limits;log;maConn;muxer;components;outboundStreamProtocolNegotiationTimeout;inboundStreamProtocolNegotiationTimeout;closeTimeout;constructor(e,t){super(),this.components=e,this.id=t.id,this.remoteAddr=t.maConn.remoteAddr,this.remotePeer=t.remotePeer,this.direction=t.direction??"outbound",this.timeline=t.maConn.timeline,this.encryption=t.cryptoProtocol,this.limits=t.limits,this.maConn=t.maConn,this.log=t.maConn.log,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.closeTimeout=t.closeTimeout??1e3,this.direct=D3(t.maConn.remoteAddr),this.onIncomingStream=this.onIncomingStream.bind(this),this.remoteAddr.getComponents().find(n=>n.code===421)==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),t.muxer!=null&&(this.multiplexer=t.muxer.protocol,this.muxer=t.muxer,this.muxer.addEventListener("stream",this.onIncomingStream)),this.maConn.addEventListener("close",n=>{this.dispatchEvent(new xo(n.local,n.error))})}[Symbol.toStringTag]="Connection";[I6]=!0;get streams(){return this.muxer?.streams??[]}get status(){return this.maConn.status}newStream=async(e,t={})=>{if(this.muxer==null)throw new zo("Connection is not multiplexed");if(this.muxer.status!=="open")throw new is(`The connection muxer is "${this.muxer.status}" and not "open"`);if(this.maConn.status!=="open")throw new is(`The connection is "${this.status}" and not "open"`);if(this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new ja("Cannot open protocol stream on limited connection");Array.isArray(e)||(e=[e]),this.log.trace("starting new stream for protocols %s",e);let n=await this.muxer.createStream({...t,protocol:e.length===1?e[0]:void 0});this.log.trace("started new stream %s for protocols %s",n.id,e);try{if(t.signal==null){n.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",e);let a=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);t={...t,signal:a}}n.protocol===""?(n.log.trace("selecting protocol from protocols %s",e),n.protocol=await xa(n,e,t),n.log("negotiated protocol %s",n.protocol)):n.log("pre-negotiated protocol %s",n.protocol);let o=iR(n.protocol,this.components.registrar,t),s=Vw(n.protocol,"outbound",this);if(s>o){let a=new mi(`Too many outbound protocol streams for protocol "${n.protocol}" - ${s}/${o}`);throw n.abort(a),a}await this.components.peerStore.merge(this.remotePeer,{protocols:[n.protocol]}),this.components.metrics?.trackProtocolStream(n);let i=this.components.registrar.getMiddleware(n.protocol);return await this.runMiddlewareChain(n,this,i)}catch(o){throw n.status==="open"?n.abort(o):this.log.error("could not create new outbound stream on connection %s %a for protocols %s - %e",this.direction==="inbound"?"from":"to",this.remoteAddr,e,o),o}};async onIncomingStream(e){let t=e.detail,n=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);t.log("start protocol negotiation, timing out after %dms",this.inboundStreamProtocolNegotiationTimeout);try{if(t.protocol===""){let l=this.components.registrar.getProtocols();t.log.trace("selecting protocol from protocols %s",l),t.protocol=await va(t,l,{signal:n}),t.log("negotiated protocol %s",t.protocol)}else t.log("pre-negotiated protocol %s",t.protocol);let o=sR(t.protocol,this.components.registrar);if(Vw(t.protocol,"inbound",this)>o)throw new Iu(`Too many inbound protocol streams for protocol "${t.protocol}" - limit ${o}`);await this.components.peerStore.merge(this.remotePeer,{protocols:[t.protocol]},{signal:n}),this.components.metrics?.trackProtocolStream(t);let{handler:i,options:a}=this.components.registrar.getHandler(t.protocol);if(this.limits!=null&&a.runOnLimitedConnection!==!0)throw new ja("Cannot open protocol stream on limited connection");let c=this.components.registrar.getMiddleware(t.protocol);c.push(async(l,d,u)=>{await i(l,d),u(l,d)}),await this.runMiddlewareChain(t,this,c)}catch(o){t.abort(o)}}async runMiddlewareChain(e,t,n){for(let o=0;o<n.length;o++){let s=n[o];e.log.trace("running middleware",o,s),await new Promise((i,a)=>{try{let c=s(e,t,(l,d)=>{e=l,t=d,i()});c instanceof Promise&&c.catch(a)}catch(c){a(c)}}),e.log.trace("ran middleware",o,s)}return e}async close(e={}){if(this.log("closing connection to %a",this.remoteAddr),e.signal==null){let t=AbortSignal.timeout(this.closeTimeout);e={...e,signal:t}}await this.muxer?.close(e),await this.maConn.close(e)}abort(e){this.muxer?.abort(e),this.maConn.abort(e)}};function Hw(r,e){return new G3(r,e)}function sR(r,e){try{let{options:t}=e.getHandler(r);if(t.maxInboundStreams!=null)return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return q3}function iR(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??W3}function Vw(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var t1=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;inboundStreamProtocolNegotiationTimeout;outboundStreamProtocolNegotiationTimeout;events;metrics;connectionCloseTimeout;constructor(e,t){this.components=e,this.connectionEncrypters=ot({name:"libp2p_upgrader_connection_encrypters",metrics:this.components.metrics}),t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=ot({name:"libp2p_upgrader_stream_multiplexers",metrics:this.components.metrics}),t.streamMuxers.forEach(n=>{this.streamMuxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,this.connectionCloseTimeout=t.connectionCloseTimeout??1e3,this.events=e.events,this.metrics={dials:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_total"),errors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dial_errors_total"),inboundErrors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_inbound_errors_total"),outboundErrors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_outbound_errors_total")}}[Symbol.toStringTag]="@libp2p/upgrader";async shouldBlockConnection(e,...t){let n=this.components.connectionGater[e];if(n==null)return;if(await n.apply(this.components.connectionGater,t)===!0)throw new Mh(`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=this.components.connectionManager.acceptIncomingConnection(e),!n)throw new Bh("Connection denied");await Pe(this.shouldBlockConnection("denyInboundConnection",e),o),await this._performUpgrade(e,"inbound",{...t,signal:o})}catch(s){throw this.metrics.errors?.increment({inbound:!0}),this.metrics.inboundErrors?.increment({[s.name??"Error"]:!0}),s}finally{o.clear(),n&&this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){try{this.metrics.dials?.increment({outbound:!0});let n=e.remoteAddr.getComponents().findLast(i=>i.code===421)?.value,o;n!=null&&(o=Me(n),await Pe(this.shouldBlockConnection("denyOutboundConnection",o,e),t.signal));let s="outbound";return t.initiator===!1&&(s="inbound"),await this._performUpgrade(e,s,t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),this.metrics.outboundErrors?.increment({[n.name??"Error"]:!0}),n}}async _performUpgrade(e,t,n){let o=e,s,i,a,c,l=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`;if(e.log=e.log.newScope(`${t}:${l}`),this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t),n?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(e.log("protecting the %s connection",t),o=await u.protect(o,n))}try{if(aR(n)){if(n.remotePeer==null)throw new ln(`${t} connection that skipped encryption must have a peer id`);c="native",s=n.remotePeer}else{let u=e.remoteAddr.getComponents().findLast(h=>h.code===421)?.value,f;u!=null&&(f=Me(u)),n?.onProgress?.(new H(`upgrader:encrypt-${t}-connection`)),{connection:o,remotePeer:s,protocol:c,streamMuxer:i}=await(t==="inbound"?this._encryptInbound(o,{...n,remotePeer:f}):this._encryptOutbound(o,{...n,remotePeer:f}))}if(s.equals(this.components.peerId)){let u=new hi("Can not dial self");throw e.abort(u),u}await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",s,e),n?.muxerFactory!=null?i=n.muxerFactory:i==null&&this.streamMuxers.size>0&&(n?.onProgress?.(new H(`upgrader:multiplex-${t}-connection`)),i=await(t==="inbound"?this._multiplexInbound(o,this.streamMuxers,n):this._multiplexOutbound(o,this.streamMuxers,n)))}catch(u){throw e.log.error("failed to upgrade %s connection %s %a - %e",t,t==="inbound"?"from":"to",e.remoteAddr,u),u}i!=null&&(e.log("create muxer %s",i.protocol),a=i.createStreamMuxer(o)),await this.shouldBlockConnection(t==="inbound"?"denyInboundUpgradedConnection":"denyOutboundUpgradedConnection",s,e);let d=this._createConnection({id:l,cryptoProtocol:c,direction:t,maConn:e,stream:o,muxer:a,remotePeer:s,limits:n?.limits,closeTimeout:this.connectionCloseTimeout});return d.log("successfully upgraded connection"),d}_createConnection(e){let t=Hw(this.components,{...e,outboundStreamProtocolNegotiationTimeout:this.outboundStreamProtocolNegotiationTimeout,inboundStreamProtocolNegotiationTimeout:this.inboundStreamProtocolNegotiationTimeout});return t.addEventListener("close",()=>{this.events.safeDispatchEvent("connection:close",{detail:t})}),this.events.safeDispatchEvent("connection:open",{detail:t}),t}async _encryptInbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{let o=await va(e,n,t),s=this.connectionEncrypters.get(o);if(s==null)throw new ei(`no crypto module found for ${o}`);return e.log("encrypting inbound connection using %s",o),{...await s.secureInbound(e,t),protocol:o}}catch(o){throw new ei(o.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{e.log.trace("selecting encrypter from %s",n);let o=await xa(e,n,t),s=this.connectionEncrypters.get(o);if(s==null)throw new ei(`no crypto module found for ${o}`);return e.log("encrypting outbound connection using %s",o),{...await s.secureOutbound(e,t),protocol:o}}catch(o){throw new ei(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 s=await xa(e,o,n),i=t.get(s);if(i==null)throw new zo(`No muxer configured for protocol "${s}"`);return e.log("selected %s as muxer protocol",s),i}catch(s){throw e.log.error("error multiplexing outbound connection - %e",s),new zo(String(s))}}async _multiplexInbound(e,t,n){let o=Array.from(t.keys());e.log("inbound handling muxers %s",o);try{e.log.trace("selecting stream muxer from %s",o);let s=await va(e,o,n),i=t.get(s);if(i==null)throw new zo(`No muxer configured for protocol "${s}"`);return e.log("selected %s as muxer protocol",s),i}catch(s){throw e.log.error("error multiplexing inbound connection - %e",s),s}}getConnectionEncrypters(){return this.connectionEncrypters}getStreamMuxers(){return this.streamMuxers}};function aR(r){return r.skipEncryption===!0}var r1="3.1.5",n1="js-libp2p";function o1(r,e){return`${r??n1}/${e??r1} browser/${globalThis.navigator.userAgent}`}var Dl=class extends ie{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new ie,n=t.dispatchEvent.bind(t);t.dispatchEvent=l=>{let d=n(l),u=this.dispatchEvent(new CustomEvent(l.type,{detail:l.detail}));return d||u},this.peerId=e.peerId,this.logger=e.logger??ra(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=e.nodeInfo?.name??n1,s=e.nodeInfo?.version??r1,i=this.components=kw({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:{name:o,version:s,userAgent:e.nodeInfo?.userAgent??o1(o,s)},logger:this.logger,events:t,datastore:e.datastore??new Js,connectionGater:Rw(e.connectionGater),dns:e.dns});e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),this.peerStore=this.configureComponent("peerStore",Aw(i,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),i.events.addEventListener("peer:update",l=>{if(l.detail.previous==null){let d={id:l.detail.peer.id,multiaddrs:l.detail.peer.addresses.map(u=>u.multiaddr)};i.events.safeDispatchEvent("peer:discovery",{detail:d})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(i)),this.components.upgrader=new t1(this.components,{connectionEncrypters:(e.connectionEncrypters??[]).map((l,d)=>this.configureComponent(`connection-encryption-${d}`,l(this.components))),streamMuxers:(e.streamMuxers??[]).map((l,d)=>this.configureComponent(`stream-muxers-${d}`,l(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout,inboundStreamProtocolNegotiationTimeout:e.connectionManager?.inboundStreamProtocolNegotiationTimeout,outboundStreamProtocolNegotiationTimeout:e.connectionManager?.outboundStreamProtocolNegotiationTimeout,connectionCloseTimeout:e.connectionManager?.connectionCloseTimeout}),this.configureComponent("transportManager",new e1(this.components,e.transportManager)),this.configureComponent("connectionManager",new Gh(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new Yh(this.components,e.connectionMonitor)),this.configureComponent("registrar",new Jh(this.components)),this.configureComponent("addressManager",new _h(this.components,e.addresses));let a=(e.peerRouters??[]).map((l,d)=>this.configureComponent(`peer-router-${d}`,l(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new Qh(this.components,{routers:a}));let c=(e.contentRouters??[]).map((l,d)=>this.configureComponent(`content-router-${d}`,l(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new jh(this.components,{routers:c})),this.configureComponent("randomWalk",new Zh(this.components)),(e.peerDiscovery??[]).forEach((l,d)=>{this.configureComponent(`peer-discovery-${d}`,l(this.components)).addEventListener("peer",f=>{this.#e(f)})}),e.transports?.forEach((l,d)=>{this.components.transportManager.add(this.configureComponent(`transport-${d}`,l(this.components)))}),e.services!=null)for(let l of Object.keys(e.services)){let d=e.services[l],u=d(this.components);if(u==null){this.log.error("service factory %s returned null or undefined instance",l);continue}this.services[l]=u,this.configureComponent(l,u),u[Dn]!=null&&(this.log("registering service %s for content routing",l),c.push(u[Dn])),u[On]!=null&&(this.log("registering service %s for peer routing",l),a.push(u[On])),u[ls]!=null&&(this.log("registering service %s for peer discovery",l),u[ls].addEventListener?.("peer",f=>{this.#e(f)}))}Pw(i)}configureComponent(e,t){return t==null&&this.log.error("component %s was null or undefined",e),this.components[e]=t,t}async start(){if(this.status==="stopped"){this.status="starting",this.log("libp2p is starting");try{await this.components.beforeStart?.(),await this.components.start(),await this.components.afterStart?.(),this.status="started",this.safeDispatchEvent("start",{detail:this}),this.log("libp2p has started with peer id %p",this.peerId)}catch(e){throw this.log.error("an error occurred starting libp2p - %e",e),this.status="started",await this.stop(),e}}}async stop(){this.status==="started"&&(this.log("libp2p is stopping"),this.status="stopping",await this.components.beforeStop?.(),await this.components.stop(),await this.components.afterStop?.(),this.status="stopped",this.safeDispatchEvent("stop",{detail:this}),this.log("libp2p has stopped"))}getConnections(e){return this.components.connectionManager.getConnections(e)}getDialQueue(){return this.components.connectionManager.getDialQueue()}getPeers(){let e=new xr;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 A("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new A("no protocols were provided to open a stream");return this.components.connectionManager.openStream(e,t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){yn(e)&&(e=Me(e.getComponents().findLast(n=>n.code===421)?.value??"")),await this.components.connectionManager.closeConnections(e,t)}async getPublicKey(e,t={}){if(this.log("getPublicKey %p",e),e.publicKey!=null)return e.publicKey;try{let i=await this.peerStore.get(e,t);if(i.id.publicKey!=null)return i.id.publicKey}catch(i){if(i.name!=="NotFoundError")throw i}let n=Oe([C("/pk/"),e.toMultihash().bytes]),o=await this.contentRouting.get(n,t),s=tt(o);return await this.peerStore.patch(e,{publicKey:s},t),s}async handle(e,t,n){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async o=>{await this.components.registrar.handle(o,t,n)}))}async unhandle(e,t){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async n=>{await this.components.registrar.unhandle(n,t)}))}async register(e,t,n){return this.components.registrar.register(e,t,n)}unregister(e){this.components.registrar.unregister(e)}use(e,t){this.components.registrar.use(e,Array.isArray(t)?t:[t])}unuse(e){this.components.registrar.unuse(e)}async isDialable(e,t={}){return this.components.connectionManager.isDialable(e,t)}#e(e){let{detail:t}=e;if(t.id.toString()===this.peerId.toString()){this.log.error("peer discovery mechanism discovered self");return}this.components.peerStore.merge(t.id,{multiaddrs:t.multiaddrs}).catch(n=>{this.log.error("could not update multiaddrs of discovered peer - %e",n)})}};async function Ww(r={}){r.privateKey??=await od("Ed25519");let e=new Dl({...await lw(r),peerId:E9(r.privateKey)});return r.start!==!1&&await e.start(),e}var cR=["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"];function zw(r){return r==null?!1:r instanceof Dl?!0:cR.every(e=>typeof r[e]=="function")}var Wb=Ln(tb(),1);var Y3={keyLength:64,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"};var Sa={};et(Sa,{create:()=>xR,derivedEmptyPasswordKey:()=>s1});var s1={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function xR(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,o=r?.digest??"SHA-256",s=r?.saltLength??16,i=r?.iterations??32767,a=nt.get();t*=8;async function c(u,f){let h=a.getRandomValues(new Uint8Array(s)),p=a.getRandomValues(new Uint8Array(n)),g={name:e,iv:p};typeof f=="string"&&(f=C(f));let m;if(f.length===0){m=await a.subtle.importKey("jwk",s1,{name:"AES-GCM"},!0,["encrypt"]);try{let T={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},I=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(T,I,{name:e,length:t},!0,["encrypt"])}catch{m=await a.subtle.importKey("jwk",s1,{name:"AES-GCM"},!0,["encrypt"])}}else{let T={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},I=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(T,I,{name:e,length:t},!0,["encrypt"])}let w=await a.subtle.encrypt(g,m,u);return Oe([h,g.iv,new Uint8Array(w)])}async function l(u,f){let h=u.subarray(0,s),p=u.subarray(s,s+n),g=u.subarray(s+n),m={name:e,iv:p};typeof f=="string"&&(f=C(f));let w;if(f.length===0)try{let I={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},D=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);w=await a.subtle.deriveKey(I,D,{name:e,length:t},!0,["decrypt"])}catch{w=await a.subtle.importKey("jwk",s1,{name:"AES-GCM"},!0,["decrypt"])}else{let I={name:"PBKDF2",salt:h,iterations:i,hash:{name:o}},D=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);w=await a.subtle.deriveKey(I,D,{name:e,length:t},!0,["decrypt"])}let T=await a.subtle.decrypt(m,w,g);return new Uint8Array(T)}return{encrypt:c,decrypt:l}}var ye=Ln(rb());function ti(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 Go(r,e,t=-1){let n=t,o=r,s=0,i=Math.pow(2,e);for(let a=1;a<8;a++){if(r<i){let c;if(n<0)c=new ArrayBuffer(a),s=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),s=n}let l=new Uint8Array(c);for(let d=a-1;d>=0;d--){let u=Math.pow(2,d*e);l[s-d-1]=Math.floor(o/u),o-=l[s-d-1]*u}return c}i*=Math.pow(2,e)}return new ArrayBuffer(0)}function c1(...r){let e=0,t=0;for(let s of r)e+=s.length;let n=new ArrayBuffer(e),o=new Uint8Array(n);for(let s of r)o.set(s,t),t+=s.length;return o}function X3(){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=ti(t,8),o=new ArrayBuffer(this.valueHex.byteLength),s=new Uint8Array(o);for(let a=0;a<this.valueHex.byteLength;a++)s[a]=r[a];return s[0]&=127,ti(s,8)-n}function nb(r){let e=r<0?r*-1:r,t=128;for(let n=1;n<8;n++){if(e<=t){if(r<0){let i=t-e,a=Go(i,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=Go(e,8,n),s=new Uint8Array(o);if(s[0]&128){let i=o.slice(0),a=new Uint8Array(i);o=new ArrayBuffer(o.byteLength+1),s=new Uint8Array(o);for(let c=0;c<i.byteLength;c++)s[c+1]=a[c];s[0]=0}return o}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function ob(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 sr(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,o=new Array(n);for(let i=0;i<n;i++)o[i]="0";return o.join("").concat(t)}var Tse=Math.log(2);function l1(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function Q3(r){let e=0,t=0;for(let o=0;o<r.length;o++){let s=r[o];e+=s.byteLength}let n=new Uint8Array(e);for(let o=0;o<r.length;o++){let s=r[o];n.set(new Uint8Array(s),t),t+=s.byteLength}return n.buffer}function ho(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 Ml=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return Q3(this.items)}},Nl=[new Uint8Array([1])],sb="0123456789";var Ia="",Tn=new ArrayBuffer(0),Z3=new Uint8Array(0),Bl="EndOfContent",ab="OCTET STRING",cb="BIT STRING";function po(r){var e;return e=class extends r{get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}constructor(...n){var o;super(...n);let s=n[0]||{};this.isHexOnly=(o=s.isHexOnly)!==null&&o!==void 0?o:!1,this.valueHexView=s.valueHex?ye.BufferSourceConverter.toUint8Array(s.valueHex):Z3}fromBER(n,o,s){let i=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!ho(this,i,o,s))return-1;let a=o+s;return this.valueHexView=i.subarray(o,a),this.valueHexView.length?(this.blockLength=s,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",Tn)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:ye.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var co=class{static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}constructor({blockLength:e=0,error:t=Ia,warnings:n=[],valueBeforeDecode:o=Z3}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=ye.BufferSourceConverter.toUint8Array(o)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:ye.Convert.ToHex(this.valueBeforeDecodeView)}}};co.NAME="baseBlock";var $t=class extends co{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'")}};$t.NAME="valueBlock";var u1=class extends po(co){constructor({idBlock:e={}}={}){var t,n,o,s;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?ye.BufferSourceConverter.toUint8Array(e.valueHex):Z3,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(o=e.tagNumber)!==null&&o!==void 0?o:-1,this.isConstructed=(s=e.isConstructed)!==null&&s!==void 0?s:!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",Tn}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let o=new Uint8Array(1);if(!e){let s=this.tagNumber;s&=31,t|=s,o[0]=t}return o.buffer}if(!this.isHexOnly){let o=Go(this.tagNumber,7),s=new Uint8Array(o),i=o.byteLength,a=new Uint8Array(i+1);if(a[0]=t|31,!e){for(let c=0;c<i-1;c++)a[c+1]=s[c]|128;a[i]=s[i-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let o=this.valueHexView;for(let s=0;s<o.length-1;s++)n[s+1]=o[s]|128;n[this.valueHexView.byteLength]=o[o.length-1]}return n.buffer}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!ho(this,o,t,n))return-1;let s=o.subarray(t,t+n);if(s.length===0)return this.error="Zero buffer length",-1;switch(s[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=(s[0]&32)===32,this.isHexOnly=!1;let a=s[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,l=this.valueHexView=new Uint8Array(255),d=255;for(;s[c]&128;){if(l[c-1]=s[c]&127,c++,c>=s.length)return this.error="End of input reached before message was fully decoded",-1;if(c===d){d+=255;let f=new Uint8Array(d);for(let h=0;h<l.length;h++)f[h]=l[h];l=this.valueHexView=new Uint8Array(d)}}this.blockLength=c+1,l[c-1]=s[c]&127;let u=new Uint8Array(c);for(let f=0;f<c;f++)u[f]=l[f];l=this.valueHexView=new Uint8Array(c),l.set(u),this.blockLength<=9?this.tagNumber=ti(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}}};u1.NAME="identificationBlock";var d1=class extends co{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(!ho(this,o,t,n))return-1;let s=o.subarray(t,t+n);if(s.length===0)return this.error="Zero buffer length",-1;if(s[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=s[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(s[0]&128),this.longFormUsed===!1)return this.length=s[0],this.blockLength=1,t+this.blockLength;let i=s[0]&127;if(i>8)return this.error="Too big integer",-1;if(i+1>s.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=o.subarray(a,a+i);return c[i-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=ti(c,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=i+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=Go(this.length,8);if(o.byteLength>127)return this.error="Too big length",Tn;if(t=new ArrayBuffer(o.byteLength+1),e)return t;let s=new Uint8Array(o);n=new Uint8Array(t),n[0]=o.byteLength|128;for(let i=0;i<o.byteLength;i++)n[i+1]=s[i];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}}};d1.NAME="lengthBlock";var Q={},Tt=class extends co{constructor({name:e=Ia,optional:t=!1,primitiveSchema:n,...o}={},s){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new u1(o),this.lenBlock=new d1(o),this.valueBlock=s?new s(o):new $t(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 Ml;t||lb(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 s=this.valueBlock.toBER(e);this.lenBlock.length=s.byteLength;let i=this.lenBlock.toBER(e);n.write(i),n.write(s)}return t?Tn: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(){let e=this.constructor.NAME,t=ye.Convert.ToHex(this.valueBlock.valueBeforeDecodeView);return`${e} : ${t}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return ob(t,n)}};Tt.NAME="BaseBlock";function lb(r){var e;if(r instanceof Q.Constructed)for(let t of r.valueBlock.value)lb(t)&&(r.lenBlock.isIndefiniteForm=!0);return!!(!((e=r.lenBlock)===null||e===void 0)&&e.isIndefiniteForm)}var f1=class extends Tt{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor({value:e=Ia,...t}={},n){super(t,n),e&&this.fromString(e)}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.fromBuffer(this.valueBlock.valueHexView),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){return`${this.constructor.NAME} : '${this.valueBlock.value}'`}};f1.NAME="BaseStringBlock";var h1=class extends po($t){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};h1.NAME="PrimitiveValueBlock";var ub,p1=class extends Tt{constructor(e={}){super(e,h1),this.idBlock.isConstructed=!1}};ub=p1;Q.Primitive=ub;p1.NAME="PRIMITIVE";function PR(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 Y1(r,e=0,t=r.length){let n=e,o=new Tt({},$t),s=new co;if(!ho(s,r,e,t))return o.error=s.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=Tt;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=Q.EndOfContent;break;case 1:c=Q.Boolean;break;case 2:c=Q.Integer;break;case 3:c=Q.BitString;break;case 4:c=Q.OctetString;break;case 5:c=Q.Null;break;case 6:c=Q.ObjectIdentifier;break;case 10:c=Q.Enumerated;break;case 12:c=Q.Utf8String;break;case 13:c=Q.RelativeObjectIdentifier;break;case 14:c=Q.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=Q.Sequence;break;case 17:c=Q.Set;break;case 18:c=Q.NumericString;break;case 19:c=Q.PrintableString;break;case 20:c=Q.TeletexString;break;case 21:c=Q.VideotexString;break;case 22:c=Q.IA5String;break;case 23:c=Q.UTCTime;break;case 24:c=Q.GeneralizedTime;break;case 25:c=Q.GraphicString;break;case 26:c=Q.VisibleString;break;case 27:c=Q.GeneralString;break;case 28:c=Q.UniversalString;break;case 29:c=Q.CharacterString;break;case 30:c=Q.BmpString;break;case 31:c=Q.DATE;break;case 32:c=Q.TimeOfDay;break;case 33:c=Q.DateTime;break;case 34:c=Q.Duration;break;default:{let l=o.idBlock.isConstructed?new Q.Constructed:new Q.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?Q.Constructed:Q.Primitive}return o=PR(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 j1(r){if(!r.byteLength){let e=new Tt({},$t);return e.error="Input buffer has zero length",{offset:-1,result:e}}return Y1(ye.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function RR(r,e){return r?1:e}var An=class extends $t{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(!ho(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 s=t;for(;RR(this.isIndefiniteForm,n)>0;){let i=Y1(o,s,n);if(i.offset===-1)return this.error=i.result.error,this.warnings.concat(i.result.warnings),-1;if(s=i.offset,this.blockLength+=i.result.blockLength,n-=i.result.blockLength,this.value.push(i.result),this.isIndefiniteForm&&i.result.constructor.NAME===Bl)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===Bl?this.value.pop():this.warnings.push("No EndOfContent block encoded")),s}toBER(e,t){let n=t||new Ml;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?Tn:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};An.NAME="ConstructedValueBlock";var db,Yo=class extends Tt{constructor(e={}){super(e,An),this.idBlock.isConstructed=!0}fromBER(e,t,n){this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm;let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){let e=[];for(let n of this.valueBlock.value)e.push(n.toString("ascii").split(`
47
47
  `).map(o=>` ${o}`).join(`
48
48
  `));let t=this.idBlock.tagClass===3?`[${this.idBlock.tagNumber}]`:this.constructor.NAME;return e.length?`${t} :
49
49
  ${e.join(`
50
- `)}`:`${t} :`}};db=Yo;X.Constructed=db;Yo.NAME="CONSTRUCTED";var m1=class extends $t{fromBER(e,t,n){return t}toBER(e){return Tn}};m1.override="EndOfContentValueBlock";var fb,g1=class extends Tt{constructor(e={}){super(e,m1),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};fb=g1;X.EndOfContent=fb;g1.NAME=Bl;var hb,ri=class extends Tt{constructor(e={}){super(e,$t),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}`}};hb=ri;X.Null=hb;ri.NAME="NULL";var y1=class extends po($t){get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=ye.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);return ho(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,Q3.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};y1.NAME="BooleanValueBlock";var pb,w1=class extends Tt{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor(e={}){super(e,y1),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};pb=w1;X.Boolean=pb;w1.NAME="BOOLEAN";var b1=class extends po(An){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=An.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let s=0;s<this.value.length;s++){let i=this.value[s].constructor.NAME;if(i===Bl){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(i!==ab)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?An.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};b1.NAME="OctetStringValueBlock";var J3,lo=class extends Tt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,s;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((s=n.value)===null||s===void 0)&&s.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},b1),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 s=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(t,t+n);try{if(s.byteLength){let i=Y1(s,0,s.byteLength);i.offset!==-1&&i.offset===n&&(this.valueBlock.value=[i.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return Yo.prototype.onAsciiEncoding.call(this);let e=this.constructor.NAME,t=ye.Convert.ToHex(this.valueBlock.valueHexView);return`${e} : ${t}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let t of this.valueBlock.value)t instanceof J3&&e.push(t.valueBlock.valueHexView);return ye.BufferSourceConverter.concat(e)}};J3=lo;X.OctetString=J3;lo.NAME=ab;var E1=class extends po(An){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=An.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===Bl){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==cb)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 s=ye.BufferSourceConverter.toUint8Array(e);if(!ho(this,s,t,n))return-1;let i=s.subarray(t,t+n);if(this.unusedBits=i[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let a=i.subarray(1);try{if(a.byteLength){let c=Y1(a,0,a.byteLength);c.offset!==-1&&c.offset===n-1&&(this.value=[c.result])}}catch{}}return this.valueHexView=i.subarray(1),this.blockLength=i.length,t+n}toBER(e,t){if(this.isConstructed)return An.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength){let o=new Uint8Array(1);return o[0]=0,o.buffer}let n=new Uint8Array(this.valueHexView.length+1);return n[0]=this.unusedBits,n.set(this.valueHexView,1),n.buffer}toJSON(){return{...super.toJSON(),unusedBits:this.unusedBits,isConstructed:this.isConstructed}}};E1.NAME="BitStringValueBlock";var mb,x1=class extends Tt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,s;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((s=n.value)===null||s===void 0)&&s.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},E1),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 Yo.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let i of t)e.push(i.toString(2).padStart(8,"0"));let n=e.join(""),o=this.constructor.NAME,s=n.substring(0,n.length-this.valueBlock.unusedBits);return`${o} : ${s}`}}};mb=x1;X.BitString=mb;x1.NAME=cb;var gb;function LR(r,e){let t=new Uint8Array([0]),n=new Uint8Array(r),o=new Uint8Array(e),s=n.slice(0),i=s.length-1,a=o.slice(0),c=a.length-1,l=0,d=c<i?i:c,u=0;for(let f=d;f>=0;f--,u++){switch(!0){case u<a.length:l=s[i-u]+a[c-u]+t[0];break;default:l=s[i-u]+t[0]}switch(t[0]=l/10,!0){case u>=s.length:s=c1(new Uint8Array([l%10]),s);break;default:s[i-u]=l%10}}return t[0]>0&&(s=c1(t,s)),s}function ib(r){if(r>=Nl.length)for(let e=Nl.length;e<=r;e++){let t=new Uint8Array([0]),n=Nl[e-1].slice(0);for(let o=n.length-1;o>=0;o--){let s=new Uint8Array([(n[o]<<1)+t[0]]);t[0]=s[0]/10,n[o]=s[0]%10}t[0]>0&&(n=c1(t,n)),Nl.push(n)}return Nl[r]}function DR(r,e){let t=0,n=new Uint8Array(r),o=new Uint8Array(e),s=n.slice(0),i=s.length-1,a=o.slice(0),c=a.length-1,l,d=0;for(let u=c;u>=0;u--,d++)switch(l=s[i-d]-a[c-d]-t,!0){case l<0:t=1,s[i-d]=l+10;break;default:t=0,s[i-d]=l}if(t>0)for(let u=i-c+1;u>=0;u--,d++)if(l=s[i-d]-t,l<0)t=1,s[i-d]=l+10;else{t=0,s[i-d]=l;break}return s.slice()}var Ul=class extends po($t){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=Q3.call(this)))}constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(nb(e))}get valueDec(){return this._valueDec}fromDER(e,t,n,o=0){let s=this.fromBER(e,t,n);if(s===-1)return s;let i=this.valueHexView;return i[0]===0&&(i[1]&128)!==0?this.valueHexView=i.subarray(1):o!==0&&i.length<o&&(o-i.length>1&&(o=i.length+1),this.valueHexView=i.subarray(o-i.length)),s}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,s=this.valueHexView,i="",a=!1;for(let c=s.byteLength-1;c>=0;c--){o=s[c];for(let l=0;l<8;l++){if((o&1)===1)switch(n){case e:t=DR(ib(n),t),i="-";break;default:t=LR(t,ib(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(i+=sb.charAt(t[c]));return a===!1&&(i+=sb.charAt(0)),i}};gb=Ul;Ul.NAME="IntegerValueBlock";Object.defineProperty(gb.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var Ol,uo=class extends Tt{constructor(e={}){super(e,Ul),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return l1(),BigInt(this.valueBlock.toString())}static fromBigInt(e){l1();let t=BigInt(e),n=new Ml,o=t.toString(16).replace(/^-/,""),s=new Uint8Array(ye.Convert.FromHex(o));if(t<0){let a=new Uint8Array(s.length+(s[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${ye.Convert.ToHex(a)}`)+t,d=ye.BufferSourceConverter.toUint8Array(ye.Convert.FromHex(l.toString(16)));d[0]|=128,n.write(d)}else s[0]&128&&n.write(new Uint8Array([0])),n.write(s);return new Ol({valueHex:n.final()})}convertToDER(){let e=new Ol({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new Ol({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};Ol=uo;X.Integer=Ol;uo.NAME="INTEGER";var yb,v1=class extends uo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};yb=v1;X.Enumerated=yb;v1.NAME="ENUMERATED";var Fl=class extends po($t){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(!ho(this,o,t,n))return-1;let s=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=s[a]&127,this.blockLength++,(s[a]&128)!==0);a++);let i=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)i[a]=this.valueHexView[a];return this.valueHexView=i,(s[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=ti(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){l1();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,s=new Uint8Array(this.blockLength);for(let i=0;i<this.blockLength-1;i++)s[i]=o[i]|128;return s[this.blockLength-1]=o[this.blockLength-1],s.buffer}let t=Go(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Tn;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),s=t.byteLength-1;for(let i=0;i<s;i++)n[i]=o[i]|128;n[s]=o[s]}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}}};Fl.NAME="sidBlock";var S1=class extends $t{constructor({value:e=Ia,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new Fl;if(o=s.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=s.error,o;this.value.length===0&&(s.isFirstSid=!0),this.blockLength+=s.blockLength,n-=s.blockLength,this.value.push(s)}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,Tn;t.push(o)}return X3(t)}fromString(e){this.value=[];let t=0,n=0,o="",s=!1;do if(n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1,s){let i=this.value[0],a=0;switch(i.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;i.valueDec=c+a,s=!1}else{let i=new Fl;if(o>Number.MAX_SAFE_INTEGER){l1();let a=BigInt(o);i.valueBigInt=a}else if(i.valueDec=parseInt(o,10),isNaN(i.valueDec))return;this.value.length||(i.isFirstSid=!0,s=!0),this.value.push(i)}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}};S1.NAME="ObjectIdentifierValueBlock";var wb,In=class extends Tt{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,S1),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};wb=In;X.ObjectIdentifier=wb;In.NAME="OBJECT IDENTIFIER";var $l=class extends po(co){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(!ho(this,o,t,n))return-1;let s=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=s[a]&127,this.blockLength++,(s[a]&128)!==0);a++);let i=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)i[a]=this.valueHexView[a];return this.valueHexView=i,(s[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=ti(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,s=new Uint8Array(this.blockLength);for(let i=0;i<this.blockLength-1;i++)s[i]=o[i]|128;return s[this.blockLength-1]=o[this.blockLength-1],s.buffer}let t=Go(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Tn;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),s=t.byteLength-1;for(let i=0;i<s;i++)n[i]=o[i]|128;n[s]=o[s]}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}}};$l.NAME="relativeSidBlock";var A1=class extends $t{constructor({value:e=Ia,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new $l;if(o=s.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=s.error,o;this.blockLength+=s.blockLength,n-=s.blockLength,this.value.push(s)}return o}toBER(e,t){let n=[];for(let o=0;o<this.value.length;o++){let s=this.value[o].toBER(e);if(s.byteLength===0)return this.error=this.value[o].error,Tn;n.push(s)}return X3(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 s=new $l;if(s.valueDec=parseInt(o,10),isNaN(s.valueDec))return!0;this.value.push(s)}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}};A1.NAME="RelativeObjectIdentifierValueBlock";var bb,I1=class extends Tt{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,A1),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};bb=I1;X.RelativeObjectIdentifier=bb;I1.NAME="RelativeObjectIdentifier";var Eb,ir=class extends Yo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};Eb=ir;X.Sequence=Eb;ir.NAME="SEQUENCE";var xb,T1=class extends Yo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};xb=T1;X.Set=xb;T1.NAME="SET";var C1=class extends po($t){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=Ia}toJSON(){return{...super.toJSON(),value:this.value}}};C1.NAME="StringValueBlock";var _1=class extends C1{};_1.NAME="SimpleStringValueBlock";var Zt=class extends f1{constructor({...e}={}){super(e,_1)}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 k1=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}};k1.NAME="Utf8StringValueBlock";var vb,fo=class extends k1{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};vb=fo;X.Utf8String=vb;fo.NAME="UTF8String";var P1=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))}};P1.NAME="BmpStringValueBlock";var Sb,R1=class extends P1{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};Sb=R1;X.BmpString=Sb;R1.NAME="BMPString";var L1=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 s=Go(e.charCodeAt(o),8),i=new Uint8Array(s);if(i.length>4)continue;let a=4-i.length;for(let c=i.length-1;c>=0;c--)n[o*4+c+a]=i[c]}this.valueBlock.value=e}};L1.NAME="UniversalStringValueBlock";var Ab,D1=class extends L1{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};Ab=D1;X.UniversalString=Ab;D1.NAME="UniversalString";var Ib,N1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};Ib=N1;X.NumericString=Ib;N1.NAME="NumericString";var Tb,O1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};Tb=O1;X.PrintableString=Tb;O1.NAME="PrintableString";var Cb,M1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};Cb=M1;X.TeletexString=Cb;M1.NAME="TeletexString";var _b,B1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};_b=B1;X.VideotexString=_b;B1.NAME="VideotexString";var kb,U1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};kb=U1;X.IA5String=kb;U1.NAME="IA5String";var Pb,F1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};Pb=F1;X.GraphicString=Pb;F1.NAME="GraphicString";var Rb,Kl=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};Rb=Kl;X.VisibleString=Rb;Kl.NAME="VisibleString";var Lb,$1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};Lb=$1;X.GeneralString=Lb;$1.NAME="GeneralString";var Db,K1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};Db=K1;X.CharacterString=Db;K1.NAME="CharacterString";var Nb,Vl=class extends Kl{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]=sr(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=sr(this.month,2),t[2]=sr(this.day,2),t[3]=sr(this.hour,2),t[4]=sr(this.minute,2),t[5]=sr(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}}};Nb=Vl;X.UTCTime=Nb;Vl.NAME="UTCTime";var Ob,V1=class extends Vl{constructor(e={}){var t;super(e),(t=this.millisecond)!==null&&t!==void 0||(this.millisecond=0),this.idBlock.tagClass=1,this.idBlock.tagNumber=24}fromDate(e){super.fromDate(e),this.millisecond=e.getUTCMilliseconds()}toDate(){let e=Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond);return new Date(e)}fromString(e){let t=!1,n="",o="",s=0,i,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),t=!0;else{let u=new Number(e[e.length-1]);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");n=e}if(t){if(n.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(n.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let u=1,f=n.indexOf("+"),h="";if(f===-1&&(f=n.indexOf("-"),u=-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=u*p,h.length===4){if(p=parseInt(h.substring(2,4),10),isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");c=u*p}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let u=new Number(`0${n.substring(l)}`);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");s=u.valueOf(),o=n.substring(0,l)}else o=n;switch(!0){case o.length===8:if(i=/(\d{4})(\d{2})(\d{2})/ig,l!==-1)throw new Error("Wrong input string for conversion");break;case o.length===10:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*s;this.minute=Math.floor(u),u=60*(u-this.minute),this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===12:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*s;this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===14:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=1e3*s;this.millisecond=Math.floor(u)}break;default:throw new Error("Wrong input string for conversion")}let d=i.exec(o);if(d===null)throw new Error("Wrong input string for conversion");for(let u=1;u<d.length;u++)switch(u){case 1:this.year=parseInt(d[u],10);break;case 2:this.month=parseInt(d[u],10);break;case 3:this.day=parseInt(d[u],10);break;case 4:this.hour=parseInt(d[u],10)+a;break;case 5:this.minute=parseInt(d[u],10)+c;break;case 6:this.second=parseInt(d[u],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let u=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=u.getUTCFullYear(),this.month=u.getUTCMonth(),this.day=u.getUTCDay(),this.hour=u.getUTCHours(),this.minute=u.getUTCMinutes(),this.second=u.getUTCSeconds(),this.millisecond=u.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(sr(this.year,4)),t.push(sr(this.month,2)),t.push(sr(this.day,2)),t.push(sr(this.hour,2)),t.push(sr(this.minute,2)),t.push(sr(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(sr(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};Ob=V1;X.GeneralizedTime=Ob;V1.NAME="GeneralizedTime";var Mb,H1=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};Mb=H1;X.DATE=Mb;H1.NAME="DATE";var Bb,q1=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};Bb=q1;X.TimeOfDay=Bb;q1.NAME="TimeOfDay";var Ub,z1=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};Ub=z1;X.DateTime=Ub;z1.NAME="DateTime";var Fb,W1=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};Fb=W1;X.Duration=Fb;W1.NAME="Duration";var $b,G1=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};$b=G1;X.TIME=$b;G1.NAME="TIME";async function Q1(r,e){let n=await Sa.create().encrypt(r,e);return rt.encode(n)}async function e4(r,e,t){if(r.type==="RSA")return BR(r,e,t);if(r.type==="Ed25519")return NR(r,e,t);if(r.type==="secp256k1")return OR(r,e,t);if(r.type==="ECDSA")return MR(r,e,t);throw new Fr}async function NR(r,e,t="libp2p-key"){if(t==="libp2p-key")return Q1(ks(r),e);throw new A(`export format '${t}' is not supported`)}async function OR(r,e,t="libp2p-key"){if(t==="libp2p-key")return Q1(ks(r),e);throw new A("Export format is not supported")}async function MR(r,e,t="libp2p-key"){if(t==="libp2p-key")return Q1(ks(r),e);throw new A(`export format '${t}' is not supported`)}async function BR(r,e,t="pkcs-8"){if(t==="pkcs-8")return UR(r,e);if(t==="libp2p-key")return Q1(ks(r),e);throw new A("Export format is not supported")}async function UR(r,e){let t=nt.get(),o=new ir({value:[new uo({value:0}),new ir({value:[new In({value:"1.2.840.113549.1.1.1"}),new ri]}),new lo({valueHex:r.raw})]}).toBER(),s=new Uint8Array(o,0,o.byteLength),i=Yt(16),a=await id(Co,e,i,{c:1e4,dkLen:32}),c=Yt(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),d=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,s),u=new ir({value:[new lo({valueHex:i}),new uo({value:1e4}),new uo({value:32}),new ir({value:[new In({value:"1.2.840.113549.2.11"}),new ri]})]}),f=new ir({value:[new In({value:"1.2.840.113549.1.5.13"}),new ir({value:[new ir({value:[new In({value:"1.2.840.113549.1.5.12"}),u]}),new ir({value:[new In({value:"2.16.840.1.101.3.4.1.42"}),new lo({valueHex:c})]})]})]}),p=new ir({value:[f,new lo({valueHex:d})]}).toBER(),g=new Uint8Array(p,0,p.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...R(g,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
51
- `)}async function t4(r,e){try{let t=await FR(r,e);return K8(t)}catch{}if(!r.includes("BEGIN"))throw new A("Encrypted key was not a libp2p-key or a PEM file");return $R(r,e)}async function FR(r,e){let t=rt.decode(r);return Sa.create().decrypt(t,e)}async function $R(r,e){let t=nt.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let s=_(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:i}=j1(s),{iv:a,salt:c,iterations:l,keySize:d,cipherText:u}=KR(i),f=await id(Co,e,c,{c:l,dkLen:d}),h=await t.subtle.importKey("raw",f,"AES-CBC",!1,["decrypt"]),p=Hl(await t.subtle.decrypt({name:"AES-CBC",iv:a},h,u)),{result:g}=j1(p);n=qb(g)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let s=_(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:i}=j1(s);n=qb(i)}else throw new A("Could not parse private key from PEM data");let o=V8(n);if(o.type!=="RSA")throw new A("Could not parse RSA private key from PEM data");return o}function KR(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new A("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 A("Only pkcs5PBKDF2 key derivation functions are supported");let s=n.valueBlock.value[1],i=Hl(s.valueBlock.value[0].getValue()),a=1e4,c=32;if(s.valueBlock.value.length===3)a=Number(s.valueBlock.value[1].toBigInt()),c=Number(s.valueBlock.value[2].toBigInt());else if(s.valueBlock.value.length===2)throw new A("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],d=l.valueBlock.value[0].toString();if(d!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(d!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new A("Only AES-CBC encryption schemes are supported")}}}}let u=Hl(l.valueBlock.value[1].getValue());return{cipherText:Hl(r.valueBlock.value[1].getValue()),salt:i,iterations:a,keySize:c,iv:u}}function qb(r){return Hl(r.valueBlock.value[2].getValue())}function Hl(r){return new Uint8Array(r,0,r.byteLength)}var VR="/pkcs8/",r4="/info/",ql=new WeakMap,ni={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3};function Ta(r){return r==null||typeof r!="string"?!1:r===(0,zb.default)(r.trim())&&r.length>0}async function Ct(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function oi(r){return new Fe(VR+r)}function Ca(r){return new Fe(r4+r)}async function HR(r){let e=ks(r),t=await We.digest(e);return De.encode(t.bytes).substring(1)}var X1=class{components;init;log;self;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init={...t,dek:{...Y3,...t.dek}},this.self=t.selfKey??"self",this.init.pass!=null&&this.init.pass?.length<20)throw new Error("pass must be least 20 characters");if(this.init.dek?.keyLength!=null&&this.init.dek.keyLength<ni.minKeyLength)throw new Error(`dek.keyLength must be least ${ni.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<ni.minSaltLength)throw new Error(`dek.saltLength must be least ${ni.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<ni.minIterationCount)throw new Error(`dek.iterationCount must be least ${ni.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?Rc(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";ql.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[me]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},this.options),t=Math.ceil(ni.minSaltLength/3)*3;return e.dek!=null&&(e.dek.salt=R(Yt(t),"base64")),e}static get options(){return{dek:{...Y3}}}async findKeyByName(e){if(!Ta(e))throw await Ct(),new A(`Invalid key name '${e}'`);let t=Ca(e);try{let n=await this.components.datastore.get(t);return JSON.parse(R(n))}catch(n){throw await Ct(),this.log.error("could not read key from datastore - %e",n),new Le(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:r4};for await(let n of this.components.datastore.query(t)){let o=JSON.parse(R(n.value));if(o.id===e)return o}throw new A(`Key with id '${e}' does not exist.`)}catch(t){throw await Ct(),t}}async importKey(e,t){if(!Ta(e))throw await Ct(),new A(`Invalid key name '${e}'`);if(t==null)throw await Ct(),new A("Key is required");let n=oi(e);if(await this.components.datastore.has(n))throw await Ct(),new A(`Key '${e}' already exists`);let s,i;try{s=await HR(t);let l=ql.get(this);if(l==null)throw new A("dek missing");let d=l.dek;i=await e4(t,d,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await Ct(),l}let a={name:e,id:s},c=this.components.datastore.batch();return c.put(n,_(i)),c.put(Ca(e),_(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!Ta(e))throw await Ct(),new A(`Invalid key name '${e}'`);let t=oi(e);try{let n=await this.components.datastore.get(t),o=R(n),s=ql.get(this);if(s==null)throw new A("dek missing");let i=s.dek;return await t4(o,i)}catch(n){throw await Ct(),n}}async removeKey(e){if(!Ta(e)||e===this.self)throw await Ct(),new A(`Invalid key name '${e}'`);let t=oi(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(Ca(e)),await o.commit(),n}async listKeys(){let e={prefix:r4},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(R(n.value)));return t}async renameKey(e,t){if(!Ta(e)||e===this.self)throw await Ct(),new A(`Invalid old key name '${e}'`);if(!Ta(t)||t===this.self)throw await Ct(),new A(`Invalid new key name '${t}'`);let n=oi(e),o=oi(t),s=Ca(e),i=Ca(t);if(await this.components.datastore.has(o))throw await Ct(),new A(`Key '${t}' already exists`);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(s),d=JSON.parse(R(l));d.name=t;let u=this.components.datastore.batch();return u.put(o,c),u.put(i,_(JSON.stringify(d))),u.delete(n),u.delete(s),await u.commit(),d}catch(c){throw await Ct(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await Ct(),new A(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await Ct(),new A(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await Ct(),new A(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=ql.get(this);if(n==null)throw new A("dek missing");let o=n.dek;this.init.pass=t;let s=t!=null&&this.init.dek?.salt!=null?Rc(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";ql.set(this,{dek:s});let i=await this.listKeys();for(let a of i){let c=await this.components.datastore.get(oi(a.name)),l=R(c),d=await t4(l,o),u=s.toString(),f=await e4(d,u,d.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),p={name:a.name,id:a.id};h.put(oi(a.name),_(f)),h.put(Ca(a.name),_(JSON.stringify(p))),await h.commit()}this.log("keychain reconstructed")}};function Z1(r={}){return e=>new X1(e,r)}async function n4(r,e={}){let t=e.selfKey??"self",n=Z1(e)({datastore:r,logger:ra()}),o;return await r.has(new Fe(`/pkcs8/${t}`))?o=await n.exportKey(t):(o=await od(e.keyType??"Ed25519"),await n.importKey(t,o)),o}var _a=!!globalThis.process?.env?.DUMP_SESSION_KEYS,o4=16;function qR(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function J1(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function ep(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function wt(r,e,t=""){let n=qR(r),o=r?.length,s=e!==void 0;if(!n||s&&o!==e){let i=t&&`"${t}" `,a=s?` of length ${e}`:"",c=n?`length=${o}`:`type=${typeof r}`;throw new Error(i+"expected Uint8Array"+a+", got "+c)}return r}function s4(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 Wb(r,e){wt(r,void 0,"output");let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}function mo(r){return new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4))}function go(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function zR(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}var WR=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Gb(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function Yb(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 i4=(r,e)=>{function t(n,...o){if(wt(n,void 0,"key"),!WR)throw new Error("Non little-endian hardware is not yet supported");if(r.nonceLength!==void 0){let d=o[0];wt(d,r.varSizeNonce?void 0:r.nonceLength,"nonce")}let s=r.tagLength;s&&o[1]!==void 0&&wt(o[1],void 0,"AAD");let i=e(n,...o),a=(d,u)=>{if(u!==void 0){if(d!==2)throw new Error("cipher output not supported");wt(u,void 0,"output")}},c=!1;return{encrypt(d,u){if(c)throw new Error("cannot encrypt() twice with same key + nonce");return c=!0,wt(d),a(i.encrypt.length,u),i.encrypt(d,u)},decrypt(d,u){if(wt(d),s&&d.length<s)throw new Error('"ciphertext" expected length bigger than tagLength='+s);return a(i.decrypt.length,u),i.decrypt(d,u)}}}return Object.assign(t,r),t};function a4(r,e,t=!0){if(e===void 0)return new Uint8Array(r);if(e.length!==r)throw new Error('"output" expected Uint8Array of length '+r+", got: "+e.length);if(t&&!GR(e))throw new Error("invalid output, must be aligned");return e}function jb(r,e,t){J1(t);let n=new Uint8Array(16),o=zR(n);return o.setBigUint64(0,BigInt(e),t),o.setBigUint64(8,BigInt(r),t),n}function GR(r){return r.byteOffset%4===0}function ka(r){return Uint8Array.from(r)}var Xb=r=>Uint8Array.from(r.split(""),e=>e.charCodeAt(0)),YR=Xb("expand 16-byte k"),jR=Xb("expand 32-byte k"),QR=mo(YR),XR=mo(jR);function Z(r,e){return r<<e|r>>>32-e}function c4(r){return r.byteOffset%4===0}var tp=64,ZR=16,Zb=2**32-1,Qb=Uint32Array.of();function JR(r,e,t,n,o,s,i,a){let c=o.length,l=new Uint8Array(tp),d=mo(l),u=c4(o)&&c4(s),f=u?mo(o):Qb,h=u?mo(s):Qb;for(let p=0;p<c;i++){if(r(e,t,n,d,i,a),i>=Zb)throw new Error("arx: counter overflow");let g=Math.min(tp,c-p);if(u&&g===tp){let m=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let w=0,T;w<ZR;w++)T=m+w,h[T]=f[T]^d[w];p+=tp;continue}for(let m=0,w;m<g;m++)w=p+m,s[w]=o[w]^l[m];p+=g}}function l4(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:s,rounds:i}=Gb({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return ep(o),ep(i),J1(s),J1(t),(a,c,l,d,u=0)=>{wt(a,void 0,"key"),wt(c,void 0,"nonce"),wt(l,void 0,"data");let f=l.length;if(d===void 0&&(d=new Uint8Array(f)),wt(d,void 0,"output"),ep(u),u<0||u>=Zb)throw new Error("arx: counter overflow");if(d.length<f)throw new Error(`arx: output (${d.length}) is shorter than data (${f})`);let h=[],p=a.length,g,m;if(p===32)h.push(g=ka(a)),m=XR;else if(p===16&&t)g=new Uint8Array(32),g.set(a),g.set(a,16),m=QR,h.push(g);else throw wt(a,32,"arx key"),new Error("invalid key size");c4(c)||h.push(c=ka(c));let w=mo(g);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(m,w,mo(c.subarray(0,16)),w),c=c.subarray(16)}let T=16-o;if(T!==c.length)throw new Error(`arx: nonce must be ${T} or 16 bytes`);if(T!==12){let D=new Uint8Array(12);D.set(c,s?0:12-c.length),c=D,h.push(c)}let I=mo(c);return JR(r,m,w,I,l,d,u,i),go(...h),d}}function _t(r,e){return r[e++]&255|(r[e++]&255)<<8}var u4=class{blockLen=16;outputLen=16;buffer=new Uint8Array(16);r=new Uint16Array(10);h=new Uint16Array(10);pad=new Uint16Array(8);pos=0;finished=!1;constructor(e){e=ka(wt(e,32,"key"));let t=_t(e,0),n=_t(e,2),o=_t(e,4),s=_t(e,6),i=_t(e,8),a=_t(e,10),c=_t(e,12),l=_t(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|s<<9)&8191,this.r[4]=(s>>>4|i<<12)&255,this.r[5]=i>>>1&8190,this.r[6]=(i>>>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 d=0;d<8;d++)this.pad[d]=_t(e,16+2*d)}process(e,t,n=!1){let o=n?0:2048,{h:s,r:i}=this,a=i[0],c=i[1],l=i[2],d=i[3],u=i[4],f=i[5],h=i[6],p=i[7],g=i[8],m=i[9],w=_t(e,t+0),T=_t(e,t+2),I=_t(e,t+4),D=_t(e,t+6),F=_t(e,t+8),$=_t(e,t+10),W=_t(e,t+12),S=_t(e,t+14),x=s[0]+(w&8191),L=s[1]+((w>>>13|T<<3)&8191),B=s[2]+((T>>>10|I<<6)&8191),P=s[3]+((I>>>7|D<<9)&8191),v=s[4]+((D>>>4|F<<12)&8191),E=s[5]+(F>>>1&8191),b=s[6]+((F>>>14|$<<2)&8191),C=s[7]+(($>>>11|W<<5)&8191),M=s[8]+((W>>>8|S<<8)&8191),O=s[9]+(S>>>5|o),k=0,U=k+x*a+L*(5*m)+B*(5*g)+P*(5*p)+v*(5*h);k=U>>>13,U&=8191,U+=E*(5*f)+b*(5*u)+C*(5*d)+M*(5*l)+O*(5*c),k+=U>>>13,U&=8191;let K=k+x*c+L*a+B*(5*m)+P*(5*g)+v*(5*p);k=K>>>13,K&=8191,K+=E*(5*h)+b*(5*f)+C*(5*u)+M*(5*d)+O*(5*l),k+=K>>>13,K&=8191;let z=k+x*l+L*c+B*a+P*(5*m)+v*(5*g);k=z>>>13,z&=8191,z+=E*(5*p)+b*(5*h)+C*(5*f)+M*(5*u)+O*(5*d),k+=z>>>13,z&=8191;let we=k+x*d+L*l+B*c+P*a+v*(5*m);k=we>>>13,we&=8191,we+=E*(5*g)+b*(5*p)+C*(5*h)+M*(5*f)+O*(5*u),k+=we>>>13,we&=8191;let pe=k+x*u+L*d+B*l+P*c+v*a;k=pe>>>13,pe&=8191,pe+=E*(5*m)+b*(5*g)+C*(5*p)+M*(5*h)+O*(5*f),k+=pe>>>13,pe&=8191;let ue=k+x*f+L*u+B*d+P*l+v*c;k=ue>>>13,ue&=8191,ue+=E*a+b*(5*m)+C*(5*g)+M*(5*p)+O*(5*h),k+=ue>>>13,ue&=8191;let be=k+x*h+L*f+B*u+P*d+v*l;k=be>>>13,be&=8191,be+=E*c+b*a+C*(5*m)+M*(5*g)+O*(5*p),k+=be>>>13,be&=8191;let Re=k+x*p+L*h+B*f+P*u+v*d;k=Re>>>13,Re&=8191,Re+=E*l+b*c+C*a+M*(5*m)+O*(5*g),k+=Re>>>13,Re&=8191;let Ze=k+x*g+L*p+B*h+P*f+v*u;k=Ze>>>13,Ze&=8191,Ze+=E*d+b*l+C*c+M*a+O*(5*m),k+=Ze>>>13,Ze&=8191;let Ee=k+x*m+L*g+B*p+P*h+v*f;k=Ee>>>13,Ee&=8191,Ee+=E*u+b*d+C*l+M*c+O*a,k+=Ee>>>13,Ee&=8191,k=(k<<2)+k|0,k=k+U|0,U=k&8191,k=k>>>13,K+=k,s[0]=U,s[1]=K,s[2]=z,s[3]=we,s[4]=pe,s[5]=ue,s[6]=be,s[7]=Re,s[8]=Ze,s[9]=Ee}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 s=(o^1)-1;for(let a=0;a<10;a++)n[a]&=s;s=~s;for(let a=0;a<10;a++)e[a]=e[a]&s|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 i=e[0]+t[0];e[0]=i&65535;for(let a=1;a<8;a++)i=(e[a]+t[a]|0)+(i>>>16)|0,e[a]=i&65535;go(n)}update(e){s4(this),wt(e),e=ka(e);let{buffer:t,blockLen:n}=this,o=e.length;for(let s=0;s<o;){let i=Math.min(n-this.pos,o-s);if(i===n){for(;n<=o-s;s+=n)this.process(e,s);continue}t.set(e.subarray(s,s+i),this.pos),this.pos+=i,s+=i,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){go(this.h,this.r,this.buffer,this.pad)}digestInto(e){s4(this),Wb(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 s=0;for(let i=0;i<8;i++)e[s++]=n[i]>>>0,e[s++]=n[i]>>>8;return e}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}};function eL(r){let e=(n,o)=>r(o).update(n).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var Jb=eL(r=>new u4(r));function rE(r,e,t,n,o,s=20){let i=r[0],a=r[1],c=r[2],l=r[3],d=e[0],u=e[1],f=e[2],h=e[3],p=e[4],g=e[5],m=e[6],w=e[7],T=o,I=t[0],D=t[1],F=t[2],$=i,W=a,S=c,x=l,L=d,B=u,P=f,v=h,E=p,b=g,C=m,M=w,O=T,k=I,U=D,K=F;for(let we=0;we<s;we+=2)$=$+L|0,O=Z(O^$,16),E=E+O|0,L=Z(L^E,12),$=$+L|0,O=Z(O^$,8),E=E+O|0,L=Z(L^E,7),W=W+B|0,k=Z(k^W,16),b=b+k|0,B=Z(B^b,12),W=W+B|0,k=Z(k^W,8),b=b+k|0,B=Z(B^b,7),S=S+P|0,U=Z(U^S,16),C=C+U|0,P=Z(P^C,12),S=S+P|0,U=Z(U^S,8),C=C+U|0,P=Z(P^C,7),x=x+v|0,K=Z(K^x,16),M=M+K|0,v=Z(v^M,12),x=x+v|0,K=Z(K^x,8),M=M+K|0,v=Z(v^M,7),$=$+B|0,K=Z(K^$,16),C=C+K|0,B=Z(B^C,12),$=$+B|0,K=Z(K^$,8),C=C+K|0,B=Z(B^C,7),W=W+P|0,O=Z(O^W,16),M=M+O|0,P=Z(P^M,12),W=W+P|0,O=Z(O^W,8),M=M+O|0,P=Z(P^M,7),S=S+v|0,k=Z(k^S,16),E=E+k|0,v=Z(v^E,12),S=S+v|0,k=Z(k^S,8),E=E+k|0,v=Z(v^E,7),x=x+L|0,U=Z(U^x,16),b=b+U|0,L=Z(L^b,12),x=x+L|0,U=Z(U^x,8),b=b+U|0,L=Z(L^b,7);let z=0;n[z++]=i+$|0,n[z++]=a+W|0,n[z++]=c+S|0,n[z++]=l+x|0,n[z++]=d+L|0,n[z++]=u+B|0,n[z++]=f+P|0,n[z++]=h+v|0,n[z++]=p+E|0,n[z++]=g+b|0,n[z++]=m+C|0,n[z++]=w+M|0,n[z++]=T+O|0,n[z++]=I+k|0,n[z++]=D+U|0,n[z++]=F+K|0}function tL(r,e,t,n){let o=r[0],s=r[1],i=r[2],a=r[3],c=e[0],l=e[1],d=e[2],u=e[3],f=e[4],h=e[5],p=e[6],g=e[7],m=t[0],w=t[1],T=t[2],I=t[3];for(let F=0;F<20;F+=2)o=o+c|0,m=Z(m^o,16),f=f+m|0,c=Z(c^f,12),o=o+c|0,m=Z(m^o,8),f=f+m|0,c=Z(c^f,7),s=s+l|0,w=Z(w^s,16),h=h+w|0,l=Z(l^h,12),s=s+l|0,w=Z(w^s,8),h=h+w|0,l=Z(l^h,7),i=i+d|0,T=Z(T^i,16),p=p+T|0,d=Z(d^p,12),i=i+d|0,T=Z(T^i,8),p=p+T|0,d=Z(d^p,7),a=a+u|0,I=Z(I^a,16),g=g+I|0,u=Z(u^g,12),a=a+u|0,I=Z(I^a,8),g=g+I|0,u=Z(u^g,7),o=o+l|0,I=Z(I^o,16),p=p+I|0,l=Z(l^p,12),o=o+l|0,I=Z(I^o,8),p=p+I|0,l=Z(l^p,7),s=s+d|0,m=Z(m^s,16),g=g+m|0,d=Z(d^g,12),s=s+d|0,m=Z(m^s,8),g=g+m|0,d=Z(d^g,7),i=i+u|0,w=Z(w^i,16),f=f+w|0,u=Z(u^f,12),i=i+u|0,w=Z(w^i,8),f=f+w|0,u=Z(u^f,7),a=a+c|0,T=Z(T^a,16),h=h+T|0,c=Z(c^h,12),a=a+c|0,T=Z(T^a,8),h=h+T|0,c=Z(c^h,7);let D=0;n[D++]=o,n[D++]=s,n[D++]=i,n[D++]=a,n[D++]=m,n[D++]=w,n[D++]=T,n[D++]=I}var rL=l4(rE,{counterRight:!1,counterLength:4,allowShortKeys:!1}),nL=l4(rE,{counterRight:!1,counterLength:8,extendNonceFn:tL,allowShortKeys:!1});var oL=new Uint8Array(16),eE=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(oL.subarray(t))},sL=new Uint8Array(32);function tE(r,e,t,n,o){o!==void 0&&wt(o,void 0,"AAD");let s=r(e,t,sL),i=jb(n.length,o?o.length:0,!0),a=Jb.create(s);o&&eE(a,o),eE(a,n),a.update(i);let c=a.digest();return go(s,i),c}var nE=r=>(e,t,n)=>({encrypt(s,i){let a=s.length;i=a4(a+16,i,!1),i.set(s);let c=i.subarray(0,-16);r(e,t,c,c,1);let l=tE(r,e,t,c,n);return i.set(l,a),go(l),i},decrypt(s,i){i=a4(s.length-16,i,!1);let a=s.subarray(0,-16),c=s.subarray(-16),l=tE(r,e,t,a,n);if(!Yb(c,l))throw new Error("invalid tag");return i.set(s.subarray(0,-16)),r(e,t,i,i,1),go(l),i}}),d4=i4({blockSize:64,nonceLength:12,tagLength:16},nE(rL)),Cie=i4({blockSize:64,nonceLength:24,tagLength:16},nE(nL));function sE(r,e,t){return Un(r),t===void 0&&(t=new Uint8Array(r.outputLen)),Ro(r,t,e)}var f4=Uint8Array.of(0),oE=Uint8Array.of();function iE(r,e,t,n=32){Un(r),Dt(n,"length");let o=r.outputLen;if(n>255*o)throw new Error("Length must be <= 255*HashLen");let s=Math.ceil(n/o);t===void 0?t=oE:ce(t,void 0,"info");let i=new Uint8Array(s*o),a=Ro.create(r,e),c=a._cloneInto(),l=new Uint8Array(a.outputLen);for(let d=0;d<s;d++)f4[0]=d+1,c.update(d===0?oE:l).update(t).update(f4).digestInto(l),i.set(l,o*d),a._cloneInto(c);return a.destroy(),c.destroy(),Nt(l,f4),i.slice(0,n)}var h4={hashSHA256(r){return Tr(r.subarray())},getHKDF(r,e){let t=sE(Tr,e,r),o=iE(Tr,t,void 0,96),s=o.subarray(0,32),i=o.subarray(32,64),a=o.subarray(64,96);return[s,i,a]},generateX25519KeyPair(){let r=Ec.utils.randomSecretKey();return{publicKey:Ec.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:Ec.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return Ec.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return d4(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return d4(n,e,t).decrypt(r.subarray(),o)}};var aE=h4;function cE(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 Pa=r=>{let e=Ge(2);return e[0]=r>>8,e[1]=r,e};Pa.bytes=2;var Ra=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)};Ra.bytes=2;function lE(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 p4(r,e){!e.enabled||!_a||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${R(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${R(r.privateKey,"hex")}`)):e("Missing local static keys."))}function m4(r,e){!e.enabled||!_a||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${R(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${R(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function uE(r,e){!e.enabled||!_a||e(r?`REMOTE_STATIC_PUBLIC_KEY ${R(r.subarray(),"hex")}`:"Missing remote static public key.")}function g4(r,e){!e.enabled||!_a||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${R(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function y4(r,e,t){!t.enabled||!_a||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&R(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&R(e.k,"hex")}`))}function nn(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=Ge(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var La=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var iL=0,aL=4294967295,cL="Cipherstate has reached maximum n, a new handshake must be performed",rp=class{n;bytes;view;constructor(e=iL){this.n=e,this.bytes=ae(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>aL)throw new Error(cL)}};var si=ae(0),Da=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new rp(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}},w4=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=_(t,"utf-8");this.h=lL(e,n),this.ck=this.h,this.cs=new Da(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new Da(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new Q(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,si);return[new Da(this.crypto,e),new Da(this.crypto,t)]}},b4=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:o,initiator:s,s:i,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new w4(t,n),this.ss.mixHash(o),this.initiator=s,this.s=i,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()}},zl=class extends b4{writeMessageA(e){return new Q(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new Q(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new Q(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new La(`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 La(`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 La(`handshake stage 2 validation fail: ${t.message}`)}}};function lL(r,e){if(e.length<=32){let t=ae(32);return t.set(e),t}else return r.hash(e)}var np;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let s of t.webtransportCerthashes)n.uint32(10),n.bytes(s);if(t.streamMuxers!=null)for(let s of t.streamMuxers)n.uint32(18),n.string(s);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={webtransportCerthashes:[],streamMuxers:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.webtransportCerthashes!=null&&s.webtransportCerthashes.length===o.limits.webtransportCerthashes)throw new Ne('Decode error - map field "webtransportCerthashes" had too many elements');s.webtransportCerthashes.push(t.bytes());break}case 2:{if(o.limits?.streamMuxers!=null&&s.streamMuxers.length===o.limits.streamMuxers)throw new Ne('Decode error - map field "streamMuxers" had too many elements');s.streamMuxers.push(t.string());break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(np||(np={}));var Wl;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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),np.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={identityKey:ae(0),identitySig:ae(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.identityKey=t.bytes();break}case 2:{s.identitySig=t.bytes();break}case 4:{s.extensions=np.codec().decode(t,t.uint32(),{limits:o.limits?.extensions});break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Wl||(Wl={}));async function x4(r,e,t){let n=await r.sign(fE(e));return Wl.encode({identityKey:ft(r.publicKey),identitySig:n,extensions:t})}async function v4(r,e,t){try{let n=Wl.decode(r),o=et(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 s=fE(e);if(!await o.verify(s,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new vu(n.message)}}function fE(r){let e=_("noise-libp2p-static-key:");return r instanceof Uint8Array?Oe([e,r],e.length+r.length):(r.prepend(e),r)}var E4=class extends No{stream;handshake;metrics;decoder;constructor(e,t,n){super({log:e.log,inactivityTimeout:e.inactivityTimeout,maxReadBufferLength:e.maxReadBufferLength,direction:e.direction}),this.stream=e,this.handshake=t,this.metrics=n,this.decoder=new kd({lengthDecoder:Ra,maxBufferSize:16*1024*1024,encodingLength:()=>2});let o=c=>{try{for(let l of this.decoder.decode(c.data))this.onData(this.decrypt(l))}catch(l){this.abort(l)}};this.stream.addEventListener("message",o);let s=c=>{c.error!=null?c.local===!0?this.abort(c.error):this.onRemoteReset():this.onTransportClosed()};this.stream.addEventListener("close",s);let i=()=>{this.safeDispatchEvent("drain")};this.stream.addEventListener("drain",i);let a=()=>{this.onRemoteCloseWrite()};this.stream.addEventListener("remoteCloseWrite",a)}encrypt(e){let t=new Q;for(let n=0;n<e.byteLength;n+=65519){let o=n+65519;o>e.byteLength&&(o=e.byteLength);let s;e instanceof Uint8Array?s=this.handshake.encrypt(e.subarray(n,o)):s=this.handshake.encrypt(e.sublist(n,o)),this.metrics?.encryptedPackets.increment(),t.append(Pa(s.byteLength)),t.append(s)}return t}decrypt(e){let t=new Q;for(let n=0;n<e.byteLength;n+=65535){let o=n+65535;if(o>e.byteLength&&(o=e.byteLength),o-o4<n)throw new Error("Invalid chunk");let s;e instanceof Uint8Array?s=e.subarray(n,o):s=e.sublist(n,o);let i=e.subarray(n,o-o4);try{let a=this.handshake.decrypt(s,i);this.metrics?.decryptedPackets.increment(),t.append(a)}catch(a){throw this.metrics?.decryptErrors.increment(),a}}return t}close(e){return this.stream.close(e)}sendPause(){this.stream.pause()}sendResume(){this.stream.resume()}sendReset(e){this.stream.abort(e)}sendData(e){return{sentBytes:e.byteLength,canSendMore:this.stream.send(this.encrypt(e))}}};function S4(r,e,t){return new E4(r,e,t)}async function hE(r,e){let{log:t,connection:n,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,d=await x4(s,a.publicKey,l),u=new zl({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:i,s:a});p4(u.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(u.writeMessageA(si),e),t.trace("Stage 0 - Initiator finished sending first message."),m4(u.e,t),t.trace("Stage 1 - Initiator waiting to receive first message from responder...");let f=u.readMessageB(await n.read(e));t.trace("Stage 1 - Initiator received the message."),g4(u.re,t),uE(u.rs,t),t.trace("Initiator going to check remote's signature...");let h=await v4(f,u.rs,c);t.trace("All good with the signature!"),t.trace("Stage 2 - Initiator sending third handshake message."),await n.write(u.writeMessageC(d),e),t.trace("Stage 2 - Initiator sent message with signed payload.");let[p,g]=u.ss.split();return y4(p,g,t),{payload:h,encrypt:m=>p.encryptWithAd(si,m),decrypt:(m,w)=>g.decryptWithAd(si,m,w)}}async function pE(r,e){let{log:t,connection:n,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,d=await x4(s,a.publicKey,l),u=new zl({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:i,s:a});p4(u.s,t),t.trace("Stage 0 - Responder waiting to receive first message."),u.readMessageA(await n.read(e)),t.trace("Stage 0 - Responder received first message."),g4(u.re,t),t.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await n.write(u.writeMessageB(d),e),t.trace("Stage 1 - Responder sent the second handshake message with signed payload."),m4(u.e,t),t.trace("Stage 2 - Responder waiting for third handshake message...");let f=u.readMessageC(await n.read(e));t.trace("Stage 2 - Responder received the message, finished handshake.");let h=await v4(f,u.rs,c),[p,g]=u.ss.split();return y4(p,g,t),{payload:h,encrypt:m=>g.encryptWithAd(si,m),decrypt:(m,w)=>p.decryptWithAd(si,m,w)}}var op=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;log;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:s,prologueBytes:i}=t,{metrics:a}=e;this.components=e,this.log=e.logger.forComponent("libp2p:noise");let c=s??aE;this.crypto=cE(c),this.extensions={webtransportCerthashes:[],...o},this.metrics=a?lE(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=i??ae(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[me]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=e.log?.newScope("noise")??this.log,o=Fo(e,{lengthEncoder:Pa,lengthDecoder:Ra,maxDataLength:65535}),s=await this.performHandshakeInitiator(o,this.components.privateKey,n,t?.remotePeer?.publicKey,t),i=et(s.payload.identityKey);return{connection:S4(o.unwrap(),s,this.metrics),remoteExtensions:s.payload.extensions,remotePeer:xn(i),streamMuxer:t?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(s.payload.extensions?.streamMuxers)}}getStreamMuxer(e){if(e==null||e.length===0)return;let t=this.components.upgrader.getStreamMuxers();if(t!=null)for(let n of e){let o=t.get(n);if(o!=null)return o}if(e.length)throw new Su("Early muxer negotiation was requested but the initiator and responder had no common muxers")}async secureInbound(e,t){let n=e.log?.newScope("noise")??this.log,o=Fo(e,{lengthEncoder:Pa,lengthDecoder:Ra,maxDataLength:65535}),s=await this.performHandshakeResponder(o,this.components.privateKey,n,t?.remotePeer?.publicKey,t),i=et(s.payload.identityKey);return{connection:S4(o.unwrap(),s,this.metrics),remoteExtensions:s.payload.extensions,remotePeer:xn(i),streamMuxer:t?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(s.payload.extensions?.streamMuxers)}}async performHandshakeInitiator(e,t,n,o,s){let i,a=s?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{i=await hE({connection:e,privateKey:t,remoteIdentityKey:o,log:n.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},s),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return i}async performHandshakeResponder(e,t,n,o,s){let i,a=s?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{i=await pE({connection:e,privateKey:t,remoteIdentityKey:o,log:n.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},s),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return i}};function sp(r={}){return e=>new op(e,r)}var Ye;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(Ye||(Ye={}));var Se;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(Se||(Se={}));var Gae=Object.values(Se).filter(r=>typeof r!="string"),mE=0,ct;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(ct||(ct={}));var Cn=12;var yo=class extends Error{static name="ProtocolError";reason;constructor(e,t){super(e),this.name="ProtocolError",this.reason=t}};function gE(r){return r?.reason!==null}var Sr=class extends yo{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e,ct.ProtocolError),this.name="InvalidFrameError"}},Na=class extends yo{static name="UnRequestedPingError";constructor(e="Un-requested ping error"){super(e,ct.ProtocolError),this.name="UnRequestedPingError"}},Oa=class extends yo{static name="NotMatchingPingError";constructor(e="Not matching ping error"){super(e,ct.ProtocolError),this.name="NotMatchingPingError"}};var ip=class extends yo{static name="StreamAlreadyExistsError";constructor(e="Stream already exists"){super(e,ct.ProtocolError),this.name="StreamAlreadyExistsError"}},ap=class extends yo{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e,ct.ProtocolError),this.name="DecodeInvalidVersionError"}},cp=class extends yo{static name="BothClientsError";constructor(e="Both clients"){super(e,ct.ProtocolError),this.name="BothClientsError"}},Ma=class extends yo{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e,ct.ProtocolError),this.name="ReceiveWindowExceededError"}};var Zae=new Set([Sr.name,Na.name,Oa.name,ip.name,ap.name,cp.name,Ma.name]),Yl=256*1024,lp=16*1024*1024;var jl={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,maxMessageSize:64*1024,maxEarlyStreams:10,streamOptions:{initialStreamWindowSize:Yl,maxStreamWindowSize:lp,inactivityTimeout:12e4,maxReadBufferLength:4194304,maxWriteBufferLength:1/0}};function yE(r){if(r.keepAliveInterval!=null&&r.keepAliveInterval<=0)throw new A("keep-alive interval must be positive");if(r.maxInboundStreams!=null&&r.maxInboundStreams<0)throw new A("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams!=null&&r.maxOutboundStreams<0)throw new A("max outbound streams must be larger or equal 0");if(r.maxMessageSize!=null&&r.maxMessageSize<1024)throw new A("MaxMessageSize must be greater than a kilobyte");if(r.streamOptions?.initialStreamWindowSize!=null&&r.streamOptions?.initialStreamWindowSize<Yl)throw new A("InitialStreamWindowSize must be larger or equal 256 kB");if(r.streamOptions?.maxStreamWindowSize!=null&&r.streamOptions?.initialStreamWindowSize!=null&&r.streamOptions?.maxStreamWindowSize<r.streamOptions?.initialStreamWindowSize)throw new A("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.streamOptions?.maxStreamWindowSize!=null&&r.streamOptions?.maxStreamWindowSize>2**32-1)throw new A("MaxStreamWindowSize must be less than equal MAX_UINT32")}function bE(r){return r.header.type===Ye.Data&&r.data!==null}var wE=2**24;function uL(r){if(r[0]!==mE)throw new Sr("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*wE+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*wE+(r[9]<<16)+(r[10]<<8)+r[11]}}var up=class{buffer;constructor(){this.buffer=new Q}*emitFrames(e){for(this.buffer.append(e);;){let t=this.readFrame();if(t===void 0)break;yield t}}readFrame(){let e=Cn;if(this.buffer.byteLength<Cn)return;let t=uL(this.buffer.subarray(0,Cn));if(t.type===Ye.Data){if(e+=t.length,this.buffer.byteLength<e)return;let n=this.buffer.sublist(Cn,e);return this.buffer.consume(e),{header:t,data:n}}return this.buffer.consume(e),{header:t}}};function A4(r){let e=new Uint8Array(Cn);return e[1]=r.type,e[2]=r.flag>>>8,e[3]=r.flag,e[4]=r.streamID>>>24,e[5]=r.streamID>>>16,e[6]=r.streamID>>>8,e[7]=r.streamID,e[8]=r.length>>>24,e[9]=r.length>>>16,e[10]=r.length>>>8,e[11]=r.length,e}var Jt;(function(r){r[r.Init=0]="Init",r[r.SYNSent=1]="SYNSent",r[r.SYNReceived=2]="SYNReceived",r[r.Established=3]="Established",r[r.Finished=4]="Finished",r[r.Paused=5]="Paused"})(Jt||(Jt={}));var dp=class extends Bo{streamId;state;sendWindowCapacity;recvWindow;recvWindowCapacity;maxStreamWindowSize;epochStart;getRTT;sendFrame;constructor(e){let t=e.initialStreamWindowSize??Yl;super({...e,maxMessageSize:t-Cn}),this.streamId=e.streamId,this.state=e.state,this.sendWindowCapacity=t,this.recvWindow=t,this.recvWindowCapacity=this.recvWindow,this.maxStreamWindowSize=e.maxStreamWindowSize??lp,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame;let n=()=>{this.state=Jt.Finished};this.addEventListener("close",n)}sendData(e){let t=e.byteLength,n=0,o=!0;for(this.log?.trace("send window capacity is %d bytes",this.sendWindowCapacity);e.byteLength>0;){if(this.sendWindowCapacity===0){o=!1,this.log?.trace("sent %d/%d bytes, exhausted send window, waiting for window update",n,t);break}let s=Math.min(this.sendWindowCapacity,e.byteLength),i=this.getSendFlags(),a=e.sublist(0,s);e.consume(s);let c=this.sendFrame({type:Ye.Data,flag:i,streamID:this.streamId,length:s},a);if(this.sendWindowCapacity-=s,n+=s,!c){o=c,this.log.trace("sent %d/%d bytes, wait for muxer to have more send capacity",n,t);break}}return{sentBytes:n,canSendMore:o}}sendReset(){this.sendFrame({type:Ye.WindowUpdate,flag:Se.RST,streamID:this.streamId,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|Se.FIN;this.sendFrame({type:Ye.WindowUpdate,flag:e,streamID:this.streamId,length:0})}async sendCloseRead(e){e?.signal?.throwIfAborted()}sendPause(){this.state=Jt.Paused}sendResume(){this.state=Jt.Established,this.sendWindowUpdate()}handleWindowUpdate(e){this.processFlags(e.header.flag),this.sendWindowCapacity+=e.header.length,this.maxMessageSize=this.sendWindowCapacity-Cn,this.maxMessageSize<0&&(this.maxMessageSize=0),this.maxMessageSize!==0&&this.writeBuffer.byteLength>0&&(this.log?.trace("window update of %d bytes allows more data to be sent, have %d bytes queued, sending data %s",e.header.length,this.writeBuffer.byteLength,this.sendingData),this.safeDispatchEvent("drain"))}handleData(e){if(!bE(e))throw new Sr("Frame was not data frame");if(this.processFlags(e.header.flag),this.recvWindowCapacity<e.header.length)throw new Ma("Receive window exceeded");this.recvWindowCapacity-=e.header.length,this.onData(e.data),this.sendWindowUpdate()}processFlags(e){(e&Se.ACK)===Se.ACK&&this.state===Jt.SYNSent&&(this.state=Jt.Established),(e&Se.FIN)===Se.FIN&&this.onRemoteCloseWrite(),(e&Se.RST)===Se.RST&&this.onRemoteReset()}getSendFlags(){switch(this.state){case Jt.Init:return this.state=Jt.SYNSent,Se.SYN;case Jt.SYNReceived:return this.state=Jt.Established,Se.ACK;default:return 0}}sendWindowUpdate(){if(this.state===Jt.Paused){this.epochStart=Date.now();return}let e=this.getSendFlags(),t=Date.now(),n=this.getRTT();if(e===0&&n>-1&&t-this.epochStart<=n*4&&(this.recvWindow=Math.min(this.recvWindow*2,this.maxStreamWindowSize)),this.recvWindowCapacity>=this.recvWindow&&e===0)return;let o=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:Ye.WindowUpdate,flag:e,streamID:this.streamId,length:o})}};function EE(r){return{type:Ye[r.type],flags:[(r.flag&Se.SYN)===Se.SYN?"SYN":void 0,(r.flag&Se.ACK)===Se.ACK?"ACK":void 0,(r.flag&Se.FIN)===Se.FIN?"FIN":void 0,(r.flag&Se.RST)===Se.RST?"RST":void 0].filter(Boolean),streamID:r.streamID,length:r.length}}var xE="/yamux/1.0.0",fp=class{protocol=xE;_init;constructor(e={}){this._init=e}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[me]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new I4(e,{...this._init})}},I4=class extends Mo{nextStreamID;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;decoder;keepAlive;enableKeepAlive;keepAliveInterval;maxInboundStreams;maxOutboundStreams;constructor(e,t={}){super(e,{...t,protocol:xE,name:"yamux"}),this.client=e.direction==="outbound",yE(t),this.enableKeepAlive=t.enableKeepAlive??jl.enableKeepAlive,this.keepAliveInterval=t.keepAliveInterval??jl.keepAliveInterval,this.maxInboundStreams=t.maxInboundStreams??jl.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??jl.maxOutboundStreams,this.decoder=new up,this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log.trace("muxer created"),this.enableKeepAlive&&(this.log.trace("muxer keepalive enabled interval=%s",this.keepAliveInterval),this.keepAlive=oa(async n=>{try{await this.ping(n)}catch(o){this.log.error("ping error: %s",o)}},this.keepAliveInterval,{runImmediately:!0}),this.keepAlive.start())}onData(e){for(let t of this.decoder.emitFrames(e))this.handleFrame(t)}onCreateStream(){if(this.remoteGoAway!==void 0)throw new Br("Muxer closed remotely");if(this.localGoAway!==void 0)throw new Br("Muxer closed locally");let e=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.maxOutboundStreams)throw new mi("max outbound streams exceeded");this.log.trace("new outgoing stream id=%s",e);let t=this._newStream(e,Jt.Init,"outbound");return this.numOutboundStreams++,queueMicrotask(()=>{t.sendWindowUpdate()}),t}async ping(e){if(this.remoteGoAway!==void 0)throw new Br("Muxer closed remotely");if(this.localGoAway!==void 0)throw new Br("Muxer closed locally");if(this.activePing!=null)return Pe(this.activePing.promise,e?.signal);this.activePing=Object.assign(Promise.withResolvers(),{id:this.nextPingID++,start:Date.now()}),this.sendPing(this.activePing.id);try{this.rtt=await Pe(this.activePing.promise,e?.signal)}finally{this.activePing=void 0}return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.status==="open")try{let t=e?.reason??ct.NormalTermination;this.log.trace("muxer close reason=%s",ct[t]),await super.close(e),this.sendGoAway(t)}finally{this.keepAlive?.stop()}}abort(e){if(this.status==="open")try{super.abort(e);let t=ct.InternalError;gE(e)&&(t=e.reason),this.log.error("muxer abort reason=%s error=%s",t,e),this.sendGoAway(t)}finally{this.keepAlive?.stop()}}onTransportClosed(){try{super.onTransportClosed()}finally{this.keepAlive?.stop()}}_newStream(e,t,n){if(this.streams.find(s=>s.streamId===e)!=null)throw new A("Stream already exists with that id");let o=new dp({...this.streamOptions,id:`${e}`,streamId:e,state:t,direction:n,sendFrame:this.sendFrame.bind(this),log:this.log.newScope(`${n}:${e}`),getRTT:this.getRTT.bind(this)});return o.addEventListener("close",()=>{this.closeStream(e)},{once:!0}),o}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--}handleFrame(e){let{streamID:t,type:n,length:o}=e.header;if(this.log.trace("received frame %o",EE(e.header)),t===0)switch(n){case Ye.Ping:{this.handlePing(e.header);return}case Ye.GoAway:{this.handleGoAway(o);return}default:throw new Sr("Invalid frame type")}else switch(e.header.type){case Ye.Data:case Ye.WindowUpdate:{this.handleStreamMessage(e);return}default:throw new Sr("Invalid frame type")}}handlePing(e){if(e.flag===Se.SYN)this.log.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,Se.ACK);else if(e.flag===Se.ACK)this.log.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new Sr("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new Na("ping not requested");if(this.activePing.id!==e)throw new Oa("ping doesn't match our id");this.activePing.resolve(Date.now()-this.activePing.start)}handleGoAway(e){this.log.trace("received GoAway reason=%s",ct[e]??"unknown"),this.remoteGoAway=e,e===ct.NormalTermination?this.onTransportClosed():this.abort(new Error("Remote sent GoAway"))}handleStreamMessage(e){let{streamID:t,flag:n,type:o}=e.header;(n&Se.SYN)===Se.SYN&&this.incomingStream(t);let s=this.streams.find(i=>i.streamId===t);if(s===void 0){this.log.trace("frame for missing stream id=%s",t);return}switch(o){case Ye.WindowUpdate:{s.handleWindowUpdate(e);return}case Ye.Data:{s.handleData(e);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new A("Both endpoints are clients");if(this.streams.find(n=>n.streamId===e))return;if(this.log.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:Ye.WindowUpdate,flag:Se.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.maxInboundStreams){this.log("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:Ye.WindowUpdate,flag:Se.RST,streamID:e,length:0});return}let t=this._newStream(e,Jt.SYNReceived,"inbound");this.numInboundStreams++,this.onRemoteStream(t)}sendFrame(e,t){let n;if(e.type===Ye.Data){if(t==null)throw new Sr("Invalid frame");n=new Q(A4(e),t)}else n=A4(e);return this.log.trace("sending frame %o",EE(e)),this.send(n)}sendPing(e,t=Se.SYN){t===Se.SYN?this.log.trace("sending ping request pingId=%s",e):this.log.trace("sending ping response pingId=%s",e),this.sendFrame({type:Ye.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=ct.NormalTermination){this.log("sending GoAway reason=%s",ct[e]),this.localGoAway=e,this.sendFrame({type:Ye.GoAway,flag:0,streamID:0,length:e})}};function vE(r={}){return()=>new fp(r)}var SE="libp2p",AE="autonat",IE="1.0.0";var Ve;(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=()=>ze(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=()=>ze(o)})(n=r.ResponseStatus||(r.ResponseStatus={}));let s;(function(l){let d;l.codec=()=>(d==null&&(d=ne((u,f,h={})=>{if(h.lengthDelimited!==!1&&f.fork(),u.id!=null&&(f.uint32(10),f.bytes(u.id)),u.addrs!=null)for(let p of u.addrs)f.uint32(18),f.bytes(p);h.lengthDelimited!==!1&&f.ldelim()},(u,f,h={})=>{let p={addrs:[]},g=f==null?u.len:u.pos+f;for(;u.pos<g;){let m=u.uint32();switch(m>>>3){case 1:{p.id=u.bytes();break}case 2:{if(h.limits?.addrs!=null&&p.addrs.length===h.limits.addrs)throw new Ne('Decode error - map field "addrs" had too many elements');p.addrs.push(u.bytes());break}default:{u.skipType(m&7);break}}}return p})),d),l.encode=u=>re(u,l.codec()),l.decode=(u,f)=>te(u,l.codec(),f)})(s=r.PeerInfo||(r.PeerInfo={}));let i;(function(l){let d;l.codec=()=>(d==null&&(d=ne((u,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),u.peer!=null&&(f.uint32(10),r.PeerInfo.codec().encode(u.peer,f)),h.lengthDelimited!==!1&&f.ldelim()},(u,f,h={})=>{let p={},g=f==null?u.len:u.pos+f;for(;u.pos<g;){let m=u.uint32();switch(m>>>3){case 1:{p.peer=r.PeerInfo.codec().decode(u,u.uint32(),{limits:h.limits?.peer});break}default:{u.skipType(m&7);break}}}return p})),d),l.encode=u=>re(u,l.codec()),l.decode=(u,f)=>te(u,l.codec(),f)})(i=r.Dial||(r.Dial={}));let a;(function(l){let d;l.codec=()=>(d==null&&(d=ne((u,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),u.status!=null&&(f.uint32(8),r.ResponseStatus.codec().encode(u.status,f)),u.statusText!=null&&(f.uint32(18),f.string(u.statusText)),u.addr!=null&&(f.uint32(26),f.bytes(u.addr)),h.lengthDelimited!==!1&&f.ldelim()},(u,f,h={})=>{let p={},g=f==null?u.len:u.pos+f;for(;u.pos<g;){let m=u.uint32();switch(m>>>3){case 1:{p.status=r.ResponseStatus.codec().decode(u);break}case 2:{p.statusText=u.string();break}case 3:{p.addr=u.bytes();break}default:{u.skipType(m&7);break}}}return p})),d),l.encode=u=>re(u,l.codec()),l.decode=(u,f)=>te(u,l.codec(),f)})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=ne((l,d,u={})=>{u.lengthDelimited!==!1&&d.fork(),l.type!=null&&(d.uint32(8),r.MessageType.codec().encode(l.type,d)),l.dial!=null&&(d.uint32(18),r.Dial.codec().encode(l.dial,d)),l.dialResponse!=null&&(d.uint32(26),r.DialResponse.codec().encode(l.dialResponse,d)),u.lengthDelimited!==!1&&d.ldelim()},(l,d,u={})=>{let f={},h=d==null?l.len:l.pos+d;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:u.limits?.dial});break}case 3:{f.dialResponse=r.DialResponse.codec().decode(l,l.uint32(),{limits:u.limits?.dialResponse});break}default:{l.skipType(p&7);break}}}return f})),c),r.encode=l=>re(l,r.codec()),r.decode=(l,d)=>te(l,r.codec(),d)})(Ve||(Ve={}));var gL=4,yL=8,hp=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??SE}/${AE}/${IE}`,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=ot({name:"libp2p_autonat_dial_results",metrics:e.metrics}),this.findPeers=oa(this.findRandomPeers.bind(this),6e4),this.addressFilter=Et(1024)}[Symbol.toStringTag]="@libp2p/autonat";[me]=["@libp2p/autonat"];get[ur](){return["@libp2p/identify"]}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,(e,t)=>{this.handleIncomingAutonatStream(e,t).catch(n=>{this.log.error("error handling incoming autonat stream - %e",n)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.topologyId=await this.components.registrar.register(this.protocol,{onConnect:(e,t)=>{this.verifyExternalAddresses(t).catch(n=>{this.log.error("could not verify addresses - %e",n)})}}),this.findPeers.start(),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),this.topologyId!=null&&await this.components.registrar.unhandle(this.topologyId),this.dialResults.clear(),this.findPeers.stop(),this.started=!1}allAddressesAreVerified(){return this.components.addressManager.getAddressesWithMetadata().every(e=>e.expires>Date.now()?!0:e.verified)}async findRandomPeers(e){if(this.allAddressesAreVerified())return;let t=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,t){let n=AbortSignal.timeout(this.timeout);try{let o=Ue(e,{maxDataLength:this.maxMessageSize}).pb(Ve),s=await o.read({signal:n}),i=await this.handleAutonatMessage(s,t,{signal:n});await o.write(i,{signal:n}),await e.close({signal:n})}catch(o){this.log.error("error handling incoming autonat stream - %e",o),e.abort(o)}}async handleAutonatMessage(e,t,n){let o=this.components.addressManager.getAddresses().map(u=>oe(u).host),s=e.dial;if(s==null)return this.log.error("dial was missing from message"),{type:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}};let i,a=s.peer;if(a?.id==null)return this.log.error("peerId missing from message"),{type:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let u=ke(a.id);i=Xe(u)}catch(u){return this.log.error("invalid PeerId - %e",u),{type:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}}}if(this.log("incoming request from %p",i),!t.remotePeer.equals(i))return this.log("target peer %p did not equal sending peer %p",i,t.remotePeer),{type:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(u=>q(u)).filter(u=>{try{let f=oe(u);return Qe(u)?!1:f.host!==oe(t.remoteAddr).host?(this.log.trace("not dialing %a - target host did not match remote host %a",u,t.remoteAddr),!1):o.includes(f.host)?!1:this.components.transportManager.dialTransportForMultiaddr(u)==null?(this.log.trace("not dialing %a - transport unsupported",u),!1):!0}catch{return!1}}).map(u=>(u.getComponents().find(f=>f.code===421)?.value==null&&(u=u.encapsulate(`/p2p/${i.toString()}`)),u));if(c.length===0)return this.log("refused to dial all multiaddrs for %p from message",i),{type:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}};this.log("dial multiaddrs %s for peer %p",c.map(u=>u.toString()).join(", "),i);let l="",d=c[0];for(let u of c){let f;d=u;try{if(f=await this.components.connectionManager.openConnection(u,n),!f.remoteAddr.equals(u))throw this.log.error("tried to dial %a but dialed %a",u,f.remoteAddr),new Error("Unexpected remote address");return this.log("successfully dialed %p via %a",i,u),{type:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.ResponseStatus.OK,addr:f.remoteAddr.decapsulateCode(421).bytes}}}catch(h){this.log.error("could not dial %p - %e",i,h),l=h.message}finally{f!=null&&await f.close()}}return{type:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:d.bytes}}}getFirstUnverifiedMultiaddr(e,t){let n=this.components.addressManager.getAddressesWithMetadata().sort((o,s)=>o.type==="observed"&&s.type!=="observed"?1:s.type==="observed"&&o.type!=="observed"?-1:0).filter(o=>!(!(o.expires<Date.now())||oe(o.multiaddr).type==="ip6"&&(!t||!dd(o.multiaddr))||Qe(o.multiaddr)));for(let o of n){let s=o.multiaddr.toString(),i=this.dialResults.get(s);if(i!=null){if(i.networkSegments.includes(e)){this.log.trace("%a already has a network segment result from %s",i.multiaddr,e);continue}if(i.queue.size>10){this.log.trace("%a already has enough peers queued",i.multiaddr);continue}}if(i==null){let a=o.expires<Date.now();if(a&&this.addressFilter.remove?.(s),this.addressFilter.has(s))continue;this.addressFilter.add(s),this.log.trace("creating dial result %s %s",a?"to revalidate":"for",s),i={multiaddr:o.multiaddr,success:0,failure:0,networkSegments:[],verifyingPeers:Xg(),queue:new It({concurrency:3,maxSize:50}),type:o.type,lastVerified:o.lastVerified},this.dialResults.set(s,i)}return i}}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:i})=>oe(i).type==="ip6"),o=this.getNetworkSegment(e.remoteAddr),s=this.getFirstUnverifiedMultiaddr(o,n);if(s==null){this.log.trace("no unverified public addresses found for peer %p to verify, not requesting verification",e.remotePeer);return}if(!this.hasConnectionCapacity()){s.lastVerified!=null?(this.log("automatically re-verifying %a because we are too close to the connection limit",s.multiaddr),this.confirmAddress(s)):this.log("skipping verifying %a because we are too close to the connection limit",s.multiaddr);return}s.queue.add(async i=>{await this.askPeerToVerify(e,o,i)},{peerId:e.remotePeer,multiaddr:s.multiaddr}).catch(i=>{s?.result==null&&this.log.error("error from %p verifying address %a - %e",e.remotePeer,s?.multiaddr,i)})}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 s=AbortSignal.timeout(this.timeout);this.log.trace("asking %a to verify multiaddr %s",e.remoteAddr,n.multiaddr);let i=await e.newStream(this.protocol,{signal:s});try{let a=Ue(i).pb(Ve),[,c]=await Promise.all([a.write({type:Ve.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:[n.multiaddr.bytes]}}},{signal:s}),a.read({signal:s})]);if(c.type!==Ve.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!==Ve.ResponseStatus.OK&&l!==Ve.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===Ve.ResponseStatus.OK){if(o.success++,o.type!=="observed"){this.confirmAddress(o);return}}else l===Ve.ResponseStatus.E_DIAL_ERROR&&o.failure++;this.log("%a success %d failure %d",o.multiaddr,o.success,o.failure),o.success===gL&&this.confirmAddress(o),o.failure===yL&&this.unconfirmAddress(o)}finally{try{await i.close({signal:s})}catch(a){i.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=oe(e);switch(t.type){case"ip4":return t.host.split(".")[0].padStart(3,"0");case"ip6":return t.host.split(":")[0].padStart(4,"0");default:throw new A(`Remote address ${e} was not an IPv4 or Ipv6 address`)}}};function TE(r={}){return e=>new hp(e,r)}var wL="bootstrap",bL=50,EL=1e3,T4=class extends ie{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??EL,this.list=t.list.map(n=>q(n)).filter(n=>pa.matches(n)?n.getComponents().findLast(s=>s.code===421)?.value==null?(this.log.error("invalid bootstrap multiaddr without peer id"),!1):!0:(this.log.error("invalid multiaddr %a",n),!1)).map(n=>({id:Me(n.getComponents().findLast(o=>o.code===421)?.value??""),multiaddrs:[n]})),this._init=t}[ls]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[me]=["@libp2p/peer-discovery"];isStarted(){return!!this.timer}start(){this.isStarted()||(this.log("Starting bootstrap node discovery, discovering peers after %s ms",this.timeout),this.timer=setTimeout(()=>{this._discoverBootstrapPeers().catch(e=>{this.log.error("failed to discover bootstrap peers - %e",e)})},this.timeout))}async _discoverBootstrapPeers(){if(this.timer!=null)for(let e of this.list){if(await this.components.peerStore.merge(e.id,{tags:{[this._init.tagName??wL]:{value:this._init.tagValue??bL,ttl:this._init.tagTTL}},multiaddrs:e.multiaddrs}),this.timer==null)return;this.safeDispatchEvent("peer",{detail:e}),this.components.connectionManager.openConnection(e.id).catch(t=>{this.log.error("could not dial bootstrap peer %p - %e",e.id,t)})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function CE(r){return e=>new T4(e,r)}var C4=1e3,_E=60*C4;var Zce=120*_E,kE=1,pp=5e3,PE=100;var Ql=`${us}-circuit-relay`,Jce=2*_E,ele=BigInt(1<<17),ii="/libp2p/circuit/relay/0.2.0/hop",_4="/libp2p/circuit/relay/0.2.0/stop",tle=30*C4,rle=30*C4,k4=300,RE=4096,LE=.001;var jo;(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=()=>ze(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.peer!=null&&(s.uint32(18),Ba.codec().encode(o.peer,s)),o.reservation!=null&&(s.uint32(26),mp.codec().encode(o.reservation,s)),o.limit!=null&&(s.uint32(34),Ua.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(40),kt.codec().encode(o.status,s)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={},c=s==null?o.len:o.pos+s;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=Ba.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.reservation=mp.codec().decode(o,o.uint32(),{limits:i.limits?.reservation});break}case 4:{a.limit=Ua.codec().decode(o,o.uint32(),{limits:i.limits?.limit});break}case 5:{a.status=kt.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(jo||(jo={}));var _n;(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=()=>ze(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.peer!=null&&(s.uint32(18),Ba.codec().encode(o.peer,s)),o.limit!=null&&(s.uint32(26),Ua.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(32),kt.codec().encode(o.status,s)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={},c=s==null?o.len:o.pos+s;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=Ba.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.limit=Ua.codec().decode(o,o.uint32(),{limits:i.limits?.limit});break}case 4:{a.status=kt.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(_n||(_n={}));var Ba;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s of t.addrs)n.uint32(18),n.bytes(s);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={id:ae(0),addrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.id=t.bytes();break}case 2:{if(o.limits?.addrs!=null&&s.addrs.length===o.limits.addrs)throw new Ne('Decode error - map field "addrs" had too many elements');s.addrs.push(t.bytes());break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ba||(Ba={}));var mp;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s of t.addrs)n.uint32(18),n.bytes(s);t.voucher!=null&&(n.uint32(26),yp.codec().encode(t.voucher,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={expire:0n,addrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.expire=t.uint64();break}case 2:{if(o.limits?.addrs!=null&&s.addrs.length===o.limits.addrs)throw new Ne('Decode error - map field "addrs" had too many elements');s.addrs.push(t.bytes());break}case 3:{s.voucher=yp.codec().decode(t,t.uint32(),{limits:o.limits?.voucher});break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(mp||(mp={}));var Ua;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.duration=t.uint32();break}case 2:{s.data=t.uint64();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ua||(Ua={}));var kt;(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"})(kt||(kt={}));var P4;(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"})(P4||(P4={}));(function(r){r.codec=()=>ze(P4)})(kt||(kt={}));var gp;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={relay:ae(0),peer:ae(0),expiration:0n},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.relay=t.bytes();break}case 2:{s.peer=t.bytes();break}case 3:{s.expiration=t.uint64();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(gp||(gp={}));var yp;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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),gp.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 s={publicKey:ae(0),payloadType:ae(0),signature:ae(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.publicKey=t.bytes();break}case 2:{s.payloadType=t.bytes();break}case 3:{s.payload=gp.codec().decode(t,t.uint32(),{limits:o.limits?.payload});break}case 5:{s.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(yp||(yp={}));var Xl=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},wp=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},bp=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function R4(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var Zl=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}},Ep=_e(ve(pa.matchers[0],Ce(290))),xp=_e(Ce(290));var vp=class extends ie{components;started;running;topologyId;log;discoveryController;filter;queue;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.components=e,this.started=!1,this.running=!1,this.filter=t.filter,this.discoveryController=new AbortController,this.discoveryController.signal,this.dialPeer=this.dialPeer.bind(this),this.onPeer=this.onPeer.bind(this)}isStarted(){return this.started}async start(){this.topologyId=await this.components.registrar.register(ii,{filter:this.filter,onConnect:e=>{this.log.trace("discovered relay %p queue (length: %d, active %d)",e,this.queue?.size,this.queue?.running),this.safeDispatchEvent("relay:discover",{detail:e})}}),this.started=!0}stop(){this.topologyId!=null&&this.components.registrar.unregister(this.topologyId),this.running&&this.stopDiscovery(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,this.discoveryController.signal,this.components.events.addEventListener("peer:discovery",this.onPeer),Promise.resolve().then(async()=>{this.log("searching peer store for relays");let e=await this.components.peerStore.all({filters:[n=>n.protocols.includes(ii)],orders:[()=>Math.random()<.5?1:-1,(n,o)=>{let s=DE(n),i=DE(o);return s>i?-1:i>s?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 It({concurrency:5});this.log("start random walk");for await(let n of this.components.randomWalk.walk({signal:this.discoveryController.signal})){if(this.log.trace("found random peer %p",n.id),t.has(n.id)){this.log.trace("random peer %p was already in queue",n.id);continue}if(this.components.connectionManager.getConnections(n.id)?.length>0){this.log.trace("random peer %p was already connected",n.id);continue}if(!await this.components.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable",n.id,n.multiaddrs.map(o=>o.toString()));continue}t.queued>10&&(this.log.trace("wait for space in queue for %p",n.id),await t.onSizeLessThan(10,{signal:this.discoveryController.signal})),this.log("adding random peer %p to dial queue (length: %d, active %d)",n.id,t.size,t.running),t.add(this.dialPeer,{peerId:n.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to random peer %p - %e",n.id,o)})}this.log("stop random walk"),await t.onIdle()}).catch(e=>{this.discoveryController.signal.aborted||this.log.error("failed when finding relays on the network - %e",e)}))}stopDiscovery(){this.log("stop discovery"),this.running=!1,this.discoveryController?.abort(),this.queue?.clear(),this.components.events.removeEventListener("peer:discovery",this.onPeer)}onPeer(e){this.log.trace("maybe dialing discovered peer %p",e.detail.id),this.maybeDialPeer(e).catch(t=>{this.log.trace("error dialing discovered peer %p - %e",e.detail.id,t)})}async maybeDialPeer(e){if(this.queue==null)return;let t=e.detail.id,n=e.detail.multiaddrs;if(this.queue.has(t)){this.log.trace("random peer %p was already in queue",t);return}if(this.components.connectionManager.getConnections(t)?.length>0){this.log.trace("random peer %p was already connected",t);return}if(!await this.components.connectionManager.isDialable(n)){this.log.trace("random peer %p was not dialable",t);return}this.queue?.add(this.dialPeer,{peerId:e.detail.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to discovered peer %p - %e",e.detail.id,o)})}async dialPeer({peerId:e,signal:t}){let n=le([AbortSignal.timeout(5e3),t]);try{await this.components.connectionManager.openConnection(e,{signal:n})}finally{n.clear()}}};function DE(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(R(e)).getTime()}var L4=class extends ie{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??pp,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(xp.exactMatch(e))this.log("searching for circuit relay servers"),this.reservationId=this.reservationStore.reserveRelay();else if(Ep.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 s=await this.reservationStore.addRelay(o.remotePeer,"configured");this.addedRelay(s)}}else throw new cs(`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=>q(t).encapsulate("/p2p-circuit")),this.listeningAddrs.forEach(t=>{this.addressManager.confirmObservedAddr(t,{type:"transport"})}),queueMicrotask(()=>{this.safeDispatchEvent("listening")})}};function NE(r){return new L4(r)}var OE="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var ME=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=OE[t[r]&63];return e};var xL=60*1e3*10,vL=60*1e3*5,SL=30*1e3,Sp=class extends ie{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 Ut,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??PE,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??pp,this.started=!1,this.relayFilter=Et(100),this.reserveQueue=new It({concurrency:t?.reservationConcurrency??kE,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("connection:close",n=>{[...this.reservations.values()].find(s=>s.connection===n.detail.id)!=null&&this.#t(n.detail.remotePeer).catch(s=>{this.log("could not remove relay %p - %e",n.detail,s)})})}isStarted(){return this.started}start(){this.started=!0}afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(Ql)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[Ql]:void 0}})})),this.log("redialing %d old relays",e.length),await Promise.all(e.map(async t=>this.addRelay(t.id,"discovered"))),this.#r()}).catch(e=>{this.log.error("failed to clean up and redial old relays during afterStart - %e",e)})}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}reserveRelay(){let e=ME();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 cs("Cannot use self as relay");if(this.reserveQueue.size>this.maxReservationQueueLength)throw new bp("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 cs("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 s=this.reservations.get(e);if(s!=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(s.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),g=!0),g&&R4(s.reservation.expire)>xL)return this.log("already have relay reservation with %p but we are still connected and it does not expire soon",e),{relay:e,details:s};await this.#t(e)}if(t==="discovered"&&this.pendingReservations.length===0)throw new Xl("Not making reservation on discovered relay because we do not need any more relays");let i=AbortSignal.timeout(this.reservationCompletionTimeout);let a=await this.connectionManager.openConnection(e,{signal:i});if(yt.matches(a.remoteAddr))throw new wp("not creating reservation over relayed connection");let c=await this.#e(a,{signal:i}),l=R4(c.expire);this.log("created reservation on relay peer %p, expiry date is %s",e,new Date(Date.now()+l).toString());let d=Math.min(Math.max(l-vL,SL),Math.pow(2,31)-1),u=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)})},d),f;if(t==="discovered"){let p=this.pendingReservations.pop();if(p==null)throw new Xl("Made reservation on relay but did not need any more discovered relays");f={timeout:u,reservation:c,type:t,connection:a.id,id:p}}else f={timeout:u,reservation:c,type:t,connection:a.id};this.reservations.set(e,f),await this.peerStore.merge(e,{tags:{[Ql]:{value:1,ttl:l}}}),this.#r();let h={relay:e,details:f};return this.safeDispatchEvent("relay:created-reservation",{detail:h}),h}catch(s){throw t==="discovered"&&s.name==="HadEnoughRelaysError"||this.log.error("could not reserve slot on %p after %dms - %e",e,Date.now()-o,s),(s.name==="DialError"||s.name==="UnsupportedProtocolError")&&this.relayFilter.add(e.toMultihash().bytes),this.#t(e).catch(i=>{this.log.error("could not remove reservation on %p after reserving slot failed - %e",e,i)}),s}},{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(ii,t),s=Ue(n).pb(jo);this.log.trace("send RESERVE to %p",e.remotePeer),await s.write({type:jo.Type.RESERVE},t);let i;try{this.log.trace("reading response from %p",e.remotePeer),i=await s.read(t)}catch(c){throw n.abort(c),c}finally{n.status!=="closed"&&await n.close(t)}if(this.log.trace("read response %s",i.status),i.status===kt.OK&&i.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of i.reservation.addrs){let d=q(l);d.getComponents().find(u=>u.code===421)==null&&(d=d.encapsulate(`/p2p/${e.remotePeer}`)),d=q(d.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(d.toString())}return i.reservation.addrs=[...c].map(l=>q(l).bytes),i.reservation}let a=`reservation failed with status ${i.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:{[Ql]: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=Et(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var D4=class extends Oo{stream;init;constructor(e){super({...e,direction:e.stream.direction}),this.init=e,this.stream=e.stream,this.stream.addEventListener("close",t=>{this.onTransportClosed(t.error)}),this.stream.addEventListener("remoteCloseWrite",t=>{this.onRemoteCloseWrite(),this.close().catch(n=>{this.abort(n)})}),this.stream.addEventListener("message",t=>{e.onDataRead?.(t.data),this.onData(t.data)}),this.stream.addEventListener("drain",()=>{this.safeDispatchEvent("drain")})}sendData(e){return this.init.onDataWrite?.(e),{sentBytes:e.byteLength,canSendMore:this.stream.send(e)}}async sendClose(e){await this.stream.close(e)}sendReset(){this.stream.abort(new Error("An error occurred"))}sendPause(){this.stream.pause()}sendResume(){this.stream.resume()}};function N4(r){return new D4(r)}var AL=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(q)}catch{return!1}return!0},BE={maxInboundStopStreams:k4,maxOutboundStopStreams:k4,stopTimeout:3e4},Ap=class{components;discovery;reservationStore;maxInboundStopStreams;maxOutboundStopStreams;started;log;shutdownController;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.maxInboundStopStreams=t.maxInboundStopStreams??BE.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??BE.maxOutboundStopStreams,this.shutdownController=new AbortController,this.discovery=new vp(e,{filter:t.discoveryFilter??Zg(RE,LE)}),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(o=>{o.name!=="HadEnoughRelaysError"&&o.name!=="RelayQueueFullError"&&this.log.error("could not add discovered relay %p - %e",n.detail,o)})}),this.reservationStore=new Sp(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.startDiscovery()}),this.reservationStore.addEventListener("relay:found-enough-relays",()=>{this.discovery?.stopDiscovery()}),this.started=!1,this.onStop=this.onStop.bind(this)}[Symbol.toStringTag]="@libp2p/circuit-relay-v2-transport";[me]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[ur](){return this.discovery!=null?["@libp2p/identify"]:[]}[vo]=!0;isStarted(){return this.started}async start(){this.shutdownController=new AbortController,this.shutdownController.signal,await this.components.registrar.handle(_4,this.onStop,{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await at(this.discovery,this.reservationStore),this.started=!0}async stop(){this.shutdownController.abort(),await lt(this.discovery,this.reservationStore),await this.components.registrar.unhandle(_4),this.started=!1}async dial(e,t){let n=e.toString().split("/p2p-circuit"),o=q(n[0]),s=q(n[n.length-1]),i=o.getComponents().find(h=>h.code===421)?.value,a=s.getComponents().find(h=>h.code===421)?.value;if(i==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 Eo(`C${h}`)}let c=Me(i),l=Me(a),u=this.components.connectionManager.getConnections(c)[0];u==null?(await this.components.peerStore.merge(c,{multiaddrs:[o]}),t.onProgress?.(new H("circuit-relay:open-connection")),u=await this.components.connectionManager.openConnection(c,t)):t.onProgress?.(new H("circuit-relay:reuse-connection"));let f;try{t.onProgress?.(new H("circuit-relay:open-hop-stream")),f=await u.newStream(ii,t);let h=Ue(f).pb(jo);t.onProgress?.(new H("circuit-relay:write-connect-message")),await h.write({type:jo.Type.CONNECT,peer:{id:l.toMultihash().bytes,addrs:[q(s).bytes]}},t),t.onProgress?.(new H("circuit-relay:read-connect-response"));let p=await h.read(t);if(p.status!==kt.OK)throw new de(`failed to connect via relay with status ${p?.status?.toString()??"undefined"}`);let g=new Zl(p.limit),m=N4({stream:h.unwrap().unwrap(),remoteAddr:e,localAddr:o.encapsulate(`/p2p-circuit/p2p/${this.components.peerId.toString()}`),onDataRead:g.onData,onDataWrite:g.onData,log:f.log.newScope("circuit-relay:connection")}),w=await this.components.upgrader.upgradeOutbound(m,{...t,limits:g.getLimits()});return w.log("outbound relayed connection established to %p with limits %o, over connection %s",w.remotePeer,p.limit??"none",u.id),w}catch(h){throw this.log.error("circuit relay dial to destination %p via relay %p failed - %e",l,c,h),f?.abort(h),h}}createListener(e){return NE({peerId:this.components.peerId,connectionManager:this.components.connectionManager,addressManager:this.components.addressManager,reservationStore:this.reservationStore,logger:this.components.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>Ep.exactMatch(t)||xp.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>yt.exactMatch(t))}async onStop(e,t){let n=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);try{if(!this.reservationStore.hasReservation(t.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.components.transportManager.listen([t.remoteAddr.encapsulate("/p2p-circuit")])}catch(u){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on - %e",u)}let o=Ue(e).pb(_n),s=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",t.remotePeer,s.type),s?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",t.remotePeer),await o.write({type:_n.Type.STATUS,status:kt.MALFORMED_MESSAGE},{signal:n}),await e.close({signal:n});return}if(s.type!==_n.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",t.remotePeer),await o.write({type:_n.Type.STATUS,status:kt.UNEXPECTED_MESSAGE},{signal:n}),await e.close({signal:n});return}if(!AL(s)){this.log.error("invalid stop connect request via peer %p",t.remotePeer),await o.write({type:_n.Type.STATUS,status:kt.MALFORMED_MESSAGE},{signal:n}),await e.close({signal:n});return}let i=Xe(ke(s.peer.id));if(await this.components.connectionGater.denyInboundRelayedConnection?.(t.remotePeer,i)===!0){this.log.error("connection gater denied inbound relayed connection from %p",t.remotePeer),await o.write({type:_n.Type.STATUS,status:kt.PERMISSION_DENIED},{signal:n}),await e.close({signal:n});return}this.log.trace("sending success response to %p",t.remotePeer),await o.write({type:_n.Type.STATUS,status:kt.OK},{signal:n});let a=new Zl(s.limit),c=t.remoteAddr.encapsulate(`/p2p-circuit/p2p/${i.toString()}`),l=this.components.addressManager.getAddresses()[0],d=N4({stream:o.unwrap().unwrap(),remoteAddr:c,localAddr:l,onDataRead:a.onData,onDataWrite:a.onData,log:e.log.newScope("circuit-relay:connection")});await this.components.upgrader.upgradeInbound(d,{limits:a.getLimits(),signal:n}),d.log("inbound relayed connection established to %p with limits %o, over connection %s",i,s.limit??"none",t.id)}finally{n?.clear()}}};function UE(r={}){return e=>new Ap(e,r)}var on;(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=()=>ze(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{if(i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.observedAddresses!=null)for(let a of o.observedAddresses)s.uint32(18),s.bytes(a);i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={observedAddresses:[]},c=s==null?o.len:o.pos+s;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{if(i.limits?.observedAddresses!=null&&a.observedAddresses.length===i.limits.observedAddresses)throw new Ne('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=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(on||(on={}));function O4(r,e){return yt.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:jf.matches(r)?!0:O9.matches(r)?!Qe(r):!1}var FE=1024*4,$E=100,Ip={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},Tp=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??Ip.timeout,this.retries=t.retries??Ip.retries,this.maxInboundStreams=t.maxInboundStreams??Ip.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Ip.maxOutboundStreams,this.handleIncomingUpgrade=this.handleIncomingUpgrade.bind(this)}[Symbol.toStringTag]="@libp2p/dcutr";[ur]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Jl,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{yt.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt - %e",n)})}}),await this.registrar.handle(Jl,this.handleIncomingUpgrade,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(Jl),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([Jl],{signal:o.signal,runOnLimitedConnection:!0});let s=Ue(t,{maxDataLength:FE}).pb(on);this.log("B sending connect to %p",e.remotePeer);let i=Date.now();await s.write({type:on.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(u=>u.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await s.read(o);if(a.type!==on.Type.CONNECT)throw this.log("A sent wrong message type"),new de("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 de("DCUtR connect message had no multiaddrs");let l=Date.now()-i;this.log("A sending sync, rtt %dms",l),await s.write({type:on.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await By(l/2),this.log("B dialing",c);let d=await this.connectionManager.openConnection(c,{signal:o.signal,priority:$E,force:!0,initiator:!1});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,d.remoteAddr),await e.close(o);break}catch(s){if(this.log.error("error while attempting DCUtR on attempt %d of %d - %e",n+1,this.retries,s),t?.abort(s),n===this.retries)throw s}finally{t!=null&&await t.close(o)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(o=>{let s=o.multiaddr;return s.getComponents().find(i=>i.code===421)?.value==null?s.encapsulate(`/p2p/${e.remotePeer}`):s}).filter(o=>O4(o,this.transportManager));if(n.length>0){let o=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let s=await this.connectionManager.openConnection(n,{signal:o,force:!0});if(yt.exactMatch(s.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,s.remoteAddr),await e.close({signal:o}),!0}catch(s){this.log.error("unilateral connection upgrade to %p on addresses %a failed - %e",e.remotePeer,n,s)}}else this.log("peer %p has no public addresses, not attempting unilateral connection upgrade",e.remotePeer);return!1}async handleIncomingUpgrade(e,t){let n={signal:AbortSignal.timeout(this.timeout)},o=Ue(e,{maxDataLength:FE}).pb(on);this.log("A receiving connect");let s=await o.read(n);if(s.type!==on.Type.CONNECT)throw this.log("B sent wrong message type"),new de("DCUtR message type was incorrect");if(s.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new de("DCUtR connect message had no multiaddrs");let i=this.getDialableMultiaddrs(s.observedAddresses);if(i.length===0)throw this.log("B had no dialable multiaddrs in %o",s.observedAddresses.map(l=>q(l))),new de("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await o.write({type:on.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==on.Type.SYNC)throw new de("DCUtR message type was incorrect");this.log("A dialing",i);let c=await this.connectionManager.openConnection(i,{signal:n.signal,priority:$E,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n),await e.close(n)}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let o=q(n);if(!O4(o,this.transportManager))continue;t.push(o)}catch{}return t}};var Jl="/libp2p/dcutr";function KE(r={}){return e=>new Tp(e,r)}function j(r){if(r!==void 0&&r!==j.REQUEST&&r!==j.RESPONSE)throw new Error("type must be REQUEST or RESPONSE");r===void 0||this.initialize(r),this.maxHeaderSize=j.maxHeaderSize}j.prototype.initialize=function(r,e){if(r!==j.REQUEST&&r!==j.RESPONSE)throw new Error("type must be REQUEST or RESPONSE");this.type=r,this.state=r+"_LINE",this.info={headers:[],upgrade:!1},this.trailers=[],this.line="",this.isChunked=!1,this.connection="",this.headerSize=0,this.body_bytes=null,this.isUserCall=!1,this.hadError=!1};j.encoding="ascii";j.maxHeaderSize=80*1024;j.REQUEST="REQUEST";j.RESPONSE="RESPONSE";var VE=j.kOnHeaders=1,M4=j.kOnHeadersComplete=2,Cp=j.kOnBody=3,B4=j.kOnMessageComplete=4;j.prototype[VE]=j.prototype[M4]=j.prototype[Cp]=j.prototype[B4]=function(){};var HE=!0;Object.defineProperty(j,"kOnExecute",{get:function(){return HE=!1,99}});var qE=j.methods=["DELETE","GET","HEAD","POST","PUT","CONNECT","OPTIONS","TRACE","COPY","LOCK","MKCOL","MOVE","PROPFIND","PROPPATCH","SEARCH","UNLOCK","BIND","REBIND","UNBIND","ACL","REPORT","MKACTIVITY","CHECKOUT","MERGE","M-SEARCH","NOTIFY","SUBSCRIBE","UNSUBSCRIBE","PATCH","PURGE","MKCALENDAR","LINK","UNLINK","SOURCE"],zE=qE.indexOf("CONNECT");j.prototype.reinitialize=j;j.prototype.close=j.prototype.pause=j.prototype.resume=j.prototype.remove=j.prototype.free=function(){};j.prototype._compatMode0_11=!1;j.prototype.getAsyncId=function(){return 0};var IL={REQUEST_LINE:!0,RESPONSE_LINE:!0,HEADER:!0};j.prototype.execute=function(r,e,t){if(!(this instanceof j))throw new TypeError("not a HTTPParser");e=e||0,t=typeof t=="number"?t:r.length,this.chunk=r,this.offset=e;var n=this.end=e+t;try{for(;this.offset<n&&!this[this.state](););}catch(o){if(this.isUserCall)throw o;return this.hadError=!0,o}return this.chunk=null,t=this.offset-e,IL[this.state]&&(this.headerSize+=t,this.headerSize>(this.maxHeaderSize||j.maxHeaderSize))?new Error("max header size exceeded"):t};var TL={REQUEST_LINE:!0,RESPONSE_LINE:!0,BODY_RAW:!0};j.prototype.finish=function(){if(!this.hadError){if(!TL[this.state])return new Error("invalid state for EOF");this.state==="BODY_RAW"&&this.userCall()(this[B4]())}};j.prototype.consume=j.prototype.unconsume=j.prototype.getCurrentBuffer=function(){};j.prototype.userCall=function(){this.isUserCall=!0;var r=this;return function(e){return r.isUserCall=!1,e}};j.prototype.nextRequest=function(){this.userCall()(this[B4]()),this.reinitialize(this.type)};j.prototype.consumeLine=function(){for(var r=this.end,e=this.chunk,t=this.offset;t<r;t++)if(e[t]===10){var n=this.line+R(e.subarray(this.offset,t),j.encoding);return n.charAt(n.length-1)==="\r"&&(n=n.substr(0,n.length-1)),this.line="",this.offset=t+1,n}this.line+=R(e.subarray(this.offset,this.end),j.encoding),this.offset=this.end};var CL=/^([^: \t]+):[ \t]*((?:.*[^ \t])|)/,_L=/^[ \t]+(.*[^ \t])/;j.prototype.parseHeader=function(r,e){if(r.indexOf("\r")!==-1)throw _p("HPE_LF_EXPECTED");var t=CL.exec(r),n=t&&t[1];if(n)e.push(n),e.push(t[2]);else{var o=_L.exec(r);o&&e.length&&(e[e.length-1]&&(e[e.length-1]+=" "),e[e.length-1]+=o[1])}};var kL=/^([A-Z-]+) ([^ ]+) HTTP\/(\d)\.(\d)$/;j.prototype.REQUEST_LINE=function(){var r=this.consumeLine();if(r){var e=kL.exec(r);if(e===null)throw _p("HPE_INVALID_CONSTANT");if(this.info.method=this._compatMode0_11?e[1]:qE.indexOf(e[1]),this.info.method===-1)throw new Error("invalid request method");this.info.url=e[2],this.info.versionMajor=+e[3],this.info.versionMinor=+e[4],this.body_bytes=0,this.state="HEADER"}};var PL=/^HTTP\/(\d)\.(\d) (\d{3}) ?(.*)$/;j.prototype.RESPONSE_LINE=function(){var r=this.consumeLine();if(r){var e=PL.exec(r);if(e===null)throw _p("HPE_INVALID_CONSTANT");this.info.versionMajor=+e[1],this.info.versionMinor=+e[2];var t=this.info.statusCode=+e[3];this.info.statusMessage=e[4],((t/100|0)===1||t===204||t===304)&&(this.body_bytes=0),this.state="HEADER"}};j.prototype.shouldKeepAlive=function(){if(this.info.versionMajor>0&&this.info.versionMinor>0){if(this.connection.indexOf("close")!==-1)return!1}else if(this.connection.indexOf("keep-alive")===-1)return!1;return!!(this.body_bytes!==null||this.isChunked)};j.prototype.HEADER=function(){var r=this.consumeLine();if(r!==void 0){var e=this.info;if(r)this.parseHeader(r,e.headers);else{for(var t=e.headers,n=!1,o,s=!1,i=0;i<t.length;i+=2)switch(t[i].toLowerCase()){case"transfer-encoding":this.isChunked=t[i+1].toLowerCase()==="chunked";break;case"content-length":if(o=+t[i+1],n){if(o!==this.body_bytes)throw _p("HPE_UNEXPECTED_CONTENT_LENGTH")}else n=!0,this.body_bytes=o;break;case"connection":this.connection+=t[i+1].toLowerCase();break;case"upgrade":s=!0;break}this.isChunked&&n&&(n=!1,this.body_bytes=null),s&&this.connection.indexOf("upgrade")!=-1?e.upgrade=this.type===j.REQUEST||e.statusCode===101:e.upgrade=e.method===zE,this.isChunked&&e.upgrade&&(this.isChunked=!1),e.shouldKeepAlive=this.shouldKeepAlive();var a;if(HE?a=this.userCall()(this[M4](e)):a=this.userCall()(this[M4](e.versionMajor,e.versionMinor,e.headers,e.method,e.url,e.statusCode,e.statusMessage,e.upgrade,e.shouldKeepAlive)),a===2)return this.nextRequest(),!0;if(this.isChunked&&!a)this.state="BODY_CHUNKHEAD";else{if(a||this.body_bytes===0)return this.nextRequest(),e.upgrade;this.body_bytes===null?this.state="BODY_RAW":this.state="BODY_SIZED"}}}};j.prototype.BODY_CHUNKHEAD=function(){var r=this.consumeLine();r!==void 0&&(this.body_bytes=parseInt(r,16),this.body_bytes?this.state="BODY_CHUNK":this.state="BODY_CHUNKTRAILERS")};j.prototype.BODY_CHUNK=function(){var r=Math.min(this.end-this.offset,this.body_bytes);this.userCall()(this[Cp](this.chunk.slice(this.offset,this.offset+r),0,r)),this.offset+=r,this.body_bytes-=r,this.body_bytes||(this.state="BODY_CHUNKEMPTYLINE")};j.prototype.BODY_CHUNKEMPTYLINE=function(){var r=this.consumeLine();if(r!==void 0){if(r!=="")throw new Error("Expected empty line");this.state="BODY_CHUNKHEAD"}};j.prototype.BODY_CHUNKTRAILERS=function(){var r=this.consumeLine();r!==void 0&&(r?this.parseHeader(r,this.trailers):(this.trailers.length&&this.userCall()(this[VE](this.trailers,"")),this.nextRequest()))};j.prototype.BODY_RAW=function(){this.userCall()(this[Cp](this.chunk.slice(this.offset,this.end),0,this.end-this.offset)),this.offset=this.end};j.prototype.BODY_SIZED=function(){var r=Math.min(this.end-this.offset,this.body_bytes);this.userCall()(this[Cp](this.chunk.slice(this.offset,this.offset+r),0,r)),this.offset+=r,this.body_bytes-=r,this.body_bytes||this.nextRequest()};["Headers","HeadersComplete","Body","MessageComplete"].forEach(function(r){var e=j["kOn"+r];Object.defineProperty(j.prototype,"on"+r,{get:function(){return this[e]},set:function(t){return this._compatMode0_11=!0,zE="CONNECT",this[e]=t}})});function _p(r){var e=new Error("Parse Error");return e.code=r,e}function WE(r){if(r!=null){if(typeof r[Symbol.iterator]=="function")return r[Symbol.iterator]();if(typeof r[Symbol.asyncIterator]=="function")return r[Symbol.asyncIterator]();if(typeof r.next=="function")return r}throw new Error("argument is not an iterator or iterable")}function U4(r,e={}){let t=WE(r),n={_cancelled:!1,async start(){this._cancelled=!1},async pull(o){try{let{value:s,done:i}=await t.next();if(this._cancelled)return;if(i===!0){o.close();return}o.enqueue(s)}catch(s){o.error(s)}},cancel(){this._cancelled=!0}};return new globalThis.ReadableStream(n,e)}var RL=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),GE=nc({name:"sha-1",code:17,encode:RL("SHA-1")});var kp=class extends globalThis.Request{constructor(e,t={}){let n=t.method??"GET",o=kn(t),s=t.body;Pp(n,o)&&(t.method="UPGRADE"),super(e,t),Object.defineProperties(this,{body:{value:s,writable:!1},method:{value:n,writable:!1},headers:{value:o,writable:!1}})}};var YE={100:"Continue",101:"Switching Protocols",102:"Processing",103:"Early Hints",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",208:"Already Reported",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",308:"Permanent Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Payload Too Large",414:"URI Too Long",415:"Unsupported Media Type",416:"Range Not Satisfiable",417:"Expectation Failed",418:"I'm a Teapot",421:"Misdirected Request",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",425:"Too Early",426:"Upgrade Required",428:"Precondition Required",429:"Too Many Requests",431:"Request Header Fields Too Large",451:"Unavailable For Legal Reasons",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",508:"Loop Detected",509:"Bandwidth Limit Exceeded",510:"Not Extended",511:"Network Authentication Required"};var Pn=class extends globalThis.Response{constructor(e,t={}){let n=kn(t),o=t.status??200;(o<200||o>599)&&(t.status=200),super(e,t),Object.defineProperties(this,{status:{value:o,writable:!1},statusText:{value:YE[o],writable:!1},headers:{value:n,writable:!1}})}};var LL=["dns","dns4","dns6","dnsaddr"];function tu(r,e){if(r instanceof URL)return r;let t=Lp(r,e),{httpPath:n}=Dp(r);return new URL(`http://${t}${n}`)}function ru(r){return r instanceof Uint8Array?r:r instanceof DataView?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):new Uint8Array(r,0,r.byteLength)}function QE(r,e){let t={method:r.method,headers:r.headers};if((t.method!=="GET"||r.upgrade)&&t.method!=="HEAD"){let n=e;r.upgrade||(n=NL(e,r.headers.get("content-length"))),t.body=U4(n),t.duplex="half"}return new kp(F4(r).toString(),t)}async function XE(r,e){if(e.send(_([`HTTP/1.1 ${r.status} ${r.statusText}`,...Rp(r.headers),"",""].join(`\r
52
- `))),r.body==null){await e.close().catch(n=>{e.abort(n)});return}let t=r.body.getReader();for(;;){let n=await t.read();if(n.value!=null&&(e.send(n.value)||await e.onDrain()),n.done)break}await e.close().catch(n=>{e.abort(n)})}var ZE=_(["HTTP/1.1 404 Not Found","Connection: close","",""].join(`\r
53
- `)),DL=_(["HTTP/1.1 400 Bad Request","Connection: close","",""].join(`\r
54
- `)),Jue=_(["HTTP/1.1 500 Internal Server Error","Connection: close","",""].join(`\r
55
- `)),ede=_(["HTTP/1.1 501 Not Implemented","Connection: close","",""].join(`\r
56
- `));function Rp(r){let e=[];r.get("Connection")==null&&r.set("Connection","close");for(let[t,n]of r.entries())e.push(`${t}: ${n}`);return e}async function*NL(r,e){if(e=parseInt(`${e??""}`),e==null||isNaN(e))return r;let t=0;for await(let n of r){if(t+=n.byteLength,t>e){yield n.subarray(0,t-e);return}if(yield n.subarray(),t===e)return}}function Fa(r,e){if(typeof r=="string"&&(r.startsWith("/")?r=q(r):r=new URL(r)),Rt(r)&&(r=q(`/p2p/${r}`)),r instanceof URL&&r.protocol==="multiaddr:"&&(r=mh(r.toString())),yn(r)&&(r=[r]),Array.isArray(r)){for(let t of r)if(t.getComponents().some(({name:o})=>o==="http")){let o=qo(t);return new URL(`${o}${e??""}`)}}return e==null?r:r instanceof URL?new URL(`${r}${e.substring(1)}`):r.map(t=>t.encapsulate(`/http-path/${encodeURIComponent(e.substring(1))}`))}function kn(r={}){return r.headers instanceof Headers||(r.headers=new Headers(r.headers)),r.headers}function eu(r){return r!=null&&r!==""}function Lp(r,e){let t,n=80,o="http:";if(r instanceof URL&&(t=r.hostname,n=parseInt(r.port,10),o=r.protocol),eu(t)||(t=e.get("host")??void 0),!eu(t)&&Array.isArray(r))for(let s of r){let a=s.getComponents().filter(({name:c})=>LL.includes(c))?.[0]?.value;if(a!=null){t=a;break}}if(!eu(t)&&Array.isArray(r))for(let s of r){let i=s.getComponents().findLast(a=>a.code===421)?.value;try{let a=oe(s);a.port!=null&&(n=a.port)}catch{}if(i!=null){t=Me(i).toCID().toString(Ar);break}}if(!eu(t)&&Array.isArray(r))for(let s of r)try{let i=oe(s);i.host!=null&&(t=i.host);break}catch{}if(eu(t))return o==="http:"&&n!==80&&(t=`${t}:${n}`),o==="https:"&&n!==443&&(t=`${t}:${n}`),t;throw new A("Could not determine request host name - a request must have a host header, be made to a DNS or IP-based multiaddr or an http(s) URL")}function Dp(r){let e="/";return r=r.map(t=>q(t.getComponents().filter(n=>n.name==="http-path"?(e=n.value??"/",!1):!0))),{httpPath:e,addresses:r}}function Np(r,e=["GET"]){return r==null?e:(typeof r=="string"&&(r=[r]),r.map(t=>t.toUpperCase()))}function F4(r){let e=r.url??"/";if(e.startsWith("http"))return new URL(e);let t=OL(r);return new URL(`http://${t}${e}`)}function OL(r){let e=r.headers?.host;if(e==null&&(e=r.headers?.Host),e==null&&typeof r.headers.get=="function"&&(e=r.headers.get("host")),e==null)throw new A("Could not read host");return e}function Pp(r,e){return r==="GET"&&e.get("connection")?.toLowerCase()==="upgrade"&&e.get("upgrade")?.toLowerCase()==="websocket"}function jE(r,e){if(r instanceof Headers)return r.get(e)??void 0;let t=r[e];return Array.isArray(t)?t.join(","):t}async function $4(r){if(jE(r,"sec-websocket-version")!=="13")throw new as("Invalid version");let e=jE(r,"sec-websocket-key");if(e==null)throw new as("Missing sec-websocket-key");let t=`${e}258EAFA5-E914-47DA-95CA-C5AB0DC85B11`,n=await GE.digest(_(t)),o=Ja.encode(n.digest).substring(1);return new Headers({Upgrade:"websocket",Connection:"upgrade","Sec-WebSocket-Accept":o})}async function JE(r,e){let t=new j("REQUEST"),n=new Q,o;t[j.kOnHeadersComplete]=s=>{let i=new Headers;for(let a=0;a<s.headers.length;a+=2)i.set(s.headers[a].toLowerCase(),s.headers[a+1]);o={...s,headers:i,raw:n,method:j.methods[s.method]}};try{for(;;){let{data:s}=await Qt(r,"message",e?.signal),i=s.subarray(),a=t.execute(i,0,i.byteLength);if(a instanceof Error)throw a;if(n.append(i.subarray(0,a)),a<i.byteLength&&r.push(i.subarray(a)),o!=null)return o}}catch(s){r.abort(s)}finally{t.finish()}throw new Error("Failed to read header info from request")}var Op=class extends Error{static name="InvalidResponseError";name="InvalidResponseError"};var ML=[101,204,205,304];async function ex(r,e,t){let n=Promise.withResolvers(),o=new TransformStream,s=o.writable.getWriter(),i=!1,a=new j("RESPONSE");a.maxHeaderSize=t.maxHeaderSize??j.maxHeaderSize,a[j.kOnHeadersComplete]=l=>{t.log("response headers complete"),i=!0;let d=new Headers;for(let h=0;h<l.headers.length;h+=2)d.append(l.headers[h],l.headers[h+1]);let u=o.readable;ML.includes(l.statusCode)&&(o.writable.close().catch(()=>{}),o.readable.cancel().catch(()=>{}),u=null);let f=new Pn(u,{status:l.statusCode,statusText:l.statusMessage,headers:d});n.resolve(f)},a[j.kOnBody]=l=>{t.log("response read body %d bytes",l.byteLength),s.write(l).catch(d=>{n.reject(d)})},a[j.kOnMessageComplete]=()=>{t.log("response message complete"),s.close().catch(l=>{n.reject(l)})};let c=0;return r.addEventListener("message",({data:l})=>{t.log("response stream read %d bytes",l.byteLength),c+=l.byteLength;let d=a.execute(l.subarray(),0,l.byteLength);d instanceof Error&&(r.abort(d),a.finish())}),r.addEventListener("remoteCloseWrite",()=>{i||n.reject(new Op(`Response ended before headers were received, read ${c} bytes`)),a.finish()}),n.promise}function tx(r,e){return e.set("Content-Length",`${r.size}`),e.set("Content-Type",r.type!=null&&r.type!==""?r.type:"application/octet-stream"),r.stream()}function rx(r,e){return e.set("Content-Length",`${r.byteLength}`),e.set("Content-Type","application/octet-stream"),new ReadableStream({start(t){t.enqueue(ru(r)),t.close()}})}function BL(r,e,t){let n=[`--${t}`],o=0,s=2;return typeof e=="string"?(n.push(`Content-Disposition: form-data; name="${r}"`,'Content-Type: text/plain; charset="UTF-8"',`Content-Length: ${e.length}`,""),o=e.length+s):(n.push(`Content-Disposition: form-data; name="${r}"; filename="${encodeURIComponent(e.name)}"`,"Content-Type: application/octet-stream",`Content-Length: ${e.size}`,""),o=e.size+s),_(n.join(`\r
57
- `)).byteLength+o}function nx(r,e){let t=`-----------------------------${crypto.randomUUID()}`;e.set("Content-Type",`multipart/form-data; boundary=${t}`);let n=0;for(let[c,l]of r.entries())n+=BL(c,l,t);e.set("Content-Length",`${n}`);let o=r.entries(),s;function i(c,l,d,u){let f=[`--${u}`];typeof d=="string"?f.push(`Content-Disposition: form-data; name="${l}"`,'Content-Type: text/plain; charset="UTF-8"',`Content-Length: ${d.length}`,"",d,""):(f.push(`Content-Disposition: form-data; name="${l}"; filename="${encodeURIComponent(d.name)}"`,"Content-Type: application/octet-stream",`Content-Length: ${d.size}`,""),s=d.stream().getReader()),c.enqueue(_(f.join(`\r
58
- `)))}async function a(c,l){if(s!=null){let f=await s.read();f.value!=null&&c.enqueue(f.value),f.done&&(c.enqueue(_(`\r
59
- `)),s=void 0);return}let{done:d,value:u}=o.next();if(u!=null){let[f,h]=u;i(c,f,h,l)}d===!0&&c.close()}return new ReadableStream({async pull(c){await a(c,t)}})}function ox(r,e){e.set("Content-Type","application/octet-stream"),e.set("Transfer-Encoding","chunked");let t=r.getReader();return new ReadableStream({async pull(n){let{done:o,value:s}=await t.read();s!=null&&(n.enqueue(_(`${s.byteLength}\r
60
- `)),n.enqueue(s),n.enqueue(_(`\r
61
- `))),o&&(n.enqueue(_(`0\r
50
+ `)}`:`${t} :`}};db=Yo;Q.Constructed=db;Yo.NAME="CONSTRUCTED";var m1=class extends $t{fromBER(e,t,n){return t}toBER(e){return Tn}};m1.override="EndOfContentValueBlock";var fb,g1=class extends Tt{constructor(e={}){super(e,m1),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};fb=g1;Q.EndOfContent=fb;g1.NAME=Bl;var hb,ri=class extends Tt{constructor(e={}){super(e,$t),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}`}};hb=ri;Q.Null=hb;ri.NAME="NULL";var y1=class extends po($t){get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=ye.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);return ho(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,X3.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};y1.NAME="BooleanValueBlock";var pb,w1=class extends Tt{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor(e={}){super(e,y1),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};pb=w1;Q.Boolean=pb;w1.NAME="BOOLEAN";var b1=class extends po(An){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=An.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let s=0;s<this.value.length;s++){let i=this.value[s].constructor.NAME;if(i===Bl){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(i!==ab)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?An.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};b1.NAME="OctetStringValueBlock";var J3,lo=class extends Tt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,s;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((s=n.value)===null||s===void 0)&&s.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},b1),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 s=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(t,t+n);try{if(s.byteLength){let i=Y1(s,0,s.byteLength);i.offset!==-1&&i.offset===n&&(this.valueBlock.value=[i.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return Yo.prototype.onAsciiEncoding.call(this);let e=this.constructor.NAME,t=ye.Convert.ToHex(this.valueBlock.valueHexView);return`${e} : ${t}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let t of this.valueBlock.value)t instanceof J3&&e.push(t.valueBlock.valueHexView);return ye.BufferSourceConverter.concat(e)}};J3=lo;Q.OctetString=J3;lo.NAME=ab;var E1=class extends po(An){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=An.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===Bl){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==cb)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 s=ye.BufferSourceConverter.toUint8Array(e);if(!ho(this,s,t,n))return-1;let i=s.subarray(t,t+n);if(this.unusedBits=i[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let a=i.subarray(1);try{if(a.byteLength){let c=Y1(a,0,a.byteLength);c.offset!==-1&&c.offset===n-1&&(this.value=[c.result])}}catch{}}return this.valueHexView=i.subarray(1),this.blockLength=i.length,t+n}toBER(e,t){if(this.isConstructed)return An.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength){let o=new Uint8Array(1);return o[0]=0,o.buffer}let n=new Uint8Array(this.valueHexView.length+1);return n[0]=this.unusedBits,n.set(this.valueHexView,1),n.buffer}toJSON(){return{...super.toJSON(),unusedBits:this.unusedBits,isConstructed:this.isConstructed}}};E1.NAME="BitStringValueBlock";var mb,x1=class extends Tt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,s;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((s=n.value)===null||s===void 0)&&s.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},E1),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 Yo.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let i of t)e.push(i.toString(2).padStart(8,"0"));let n=e.join(""),o=this.constructor.NAME,s=n.substring(0,n.length-this.valueBlock.unusedBits);return`${o} : ${s}`}}};mb=x1;Q.BitString=mb;x1.NAME=cb;var gb;function LR(r,e){let t=new Uint8Array([0]),n=new Uint8Array(r),o=new Uint8Array(e),s=n.slice(0),i=s.length-1,a=o.slice(0),c=a.length-1,l=0,d=c<i?i:c,u=0;for(let f=d;f>=0;f--,u++){switch(!0){case u<a.length:l=s[i-u]+a[c-u]+t[0];break;default:l=s[i-u]+t[0]}switch(t[0]=l/10,!0){case u>=s.length:s=c1(new Uint8Array([l%10]),s);break;default:s[i-u]=l%10}}return t[0]>0&&(s=c1(t,s)),s}function ib(r){if(r>=Nl.length)for(let e=Nl.length;e<=r;e++){let t=new Uint8Array([0]),n=Nl[e-1].slice(0);for(let o=n.length-1;o>=0;o--){let s=new Uint8Array([(n[o]<<1)+t[0]]);t[0]=s[0]/10,n[o]=s[0]%10}t[0]>0&&(n=c1(t,n)),Nl.push(n)}return Nl[r]}function DR(r,e){let t=0,n=new Uint8Array(r),o=new Uint8Array(e),s=n.slice(0),i=s.length-1,a=o.slice(0),c=a.length-1,l,d=0;for(let u=c;u>=0;u--,d++)switch(l=s[i-d]-a[c-d]-t,!0){case l<0:t=1,s[i-d]=l+10;break;default:t=0,s[i-d]=l}if(t>0)for(let u=i-c+1;u>=0;u--,d++)if(l=s[i-d]-t,l<0)t=1,s[i-d]=l+10;else{t=0,s[i-d]=l;break}return s.slice()}var Ul=class extends po($t){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=X3.call(this)))}constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(nb(e))}get valueDec(){return this._valueDec}fromDER(e,t,n,o=0){let s=this.fromBER(e,t,n);if(s===-1)return s;let i=this.valueHexView;return i[0]===0&&(i[1]&128)!==0?this.valueHexView=i.subarray(1):o!==0&&i.length<o&&(o-i.length>1&&(o=i.length+1),this.valueHexView=i.subarray(o-i.length)),s}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,s=this.valueHexView,i="",a=!1;for(let c=s.byteLength-1;c>=0;c--){o=s[c];for(let l=0;l<8;l++){if((o&1)===1)switch(n){case e:t=DR(ib(n),t),i="-";break;default:t=LR(t,ib(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(i+=sb.charAt(t[c]));return a===!1&&(i+=sb.charAt(0)),i}};gb=Ul;Ul.NAME="IntegerValueBlock";Object.defineProperty(gb.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var Ol,uo=class extends Tt{constructor(e={}){super(e,Ul),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return l1(),BigInt(this.valueBlock.toString())}static fromBigInt(e){l1();let t=BigInt(e),n=new Ml,o=t.toString(16).replace(/^-/,""),s=new Uint8Array(ye.Convert.FromHex(o));if(t<0){let a=new Uint8Array(s.length+(s[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${ye.Convert.ToHex(a)}`)+t,d=ye.BufferSourceConverter.toUint8Array(ye.Convert.FromHex(l.toString(16)));d[0]|=128,n.write(d)}else s[0]&128&&n.write(new Uint8Array([0])),n.write(s);return new Ol({valueHex:n.final()})}convertToDER(){let e=new Ol({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new Ol({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};Ol=uo;Q.Integer=Ol;uo.NAME="INTEGER";var yb,v1=class extends uo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};yb=v1;Q.Enumerated=yb;v1.NAME="ENUMERATED";var Fl=class extends po($t){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(!ho(this,o,t,n))return-1;let s=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=s[a]&127,this.blockLength++,(s[a]&128)!==0);a++);let i=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)i[a]=this.valueHexView[a];return this.valueHexView=i,(s[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=ti(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){l1();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,s=new Uint8Array(this.blockLength);for(let i=0;i<this.blockLength-1;i++)s[i]=o[i]|128;return s[this.blockLength-1]=o[this.blockLength-1],s.buffer}let t=Go(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Tn;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),s=t.byteLength-1;for(let i=0;i<s;i++)n[i]=o[i]|128;n[s]=o[s]}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}}};Fl.NAME="sidBlock";var S1=class extends $t{constructor({value:e=Ia,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new Fl;if(o=s.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=s.error,o;this.value.length===0&&(s.isFirstSid=!0),this.blockLength+=s.blockLength,n-=s.blockLength,this.value.push(s)}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,Tn;t.push(o)}return Q3(t)}fromString(e){this.value=[];let t=0,n=0,o="",s=!1;do if(n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1,s){let i=this.value[0],a=0;switch(i.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;i.valueDec=c+a,s=!1}else{let i=new Fl;if(o>Number.MAX_SAFE_INTEGER){l1();let a=BigInt(o);i.valueBigInt=a}else if(i.valueDec=parseInt(o,10),isNaN(i.valueDec))return;this.value.length||(i.isFirstSid=!0,s=!0),this.value.push(i)}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}};S1.NAME="ObjectIdentifierValueBlock";var wb,In=class extends Tt{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,S1),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};wb=In;Q.ObjectIdentifier=wb;In.NAME="OBJECT IDENTIFIER";var $l=class extends po(co){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(!ho(this,o,t,n))return-1;let s=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=s[a]&127,this.blockLength++,(s[a]&128)!==0);a++);let i=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)i[a]=this.valueHexView[a];return this.valueHexView=i,(s[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=ti(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,s=new Uint8Array(this.blockLength);for(let i=0;i<this.blockLength-1;i++)s[i]=o[i]|128;return s[this.blockLength-1]=o[this.blockLength-1],s.buffer}let t=Go(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Tn;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),s=t.byteLength-1;for(let i=0;i<s;i++)n[i]=o[i]|128;n[s]=o[s]}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}}};$l.NAME="relativeSidBlock";var A1=class extends $t{constructor({value:e=Ia,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new $l;if(o=s.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=s.error,o;this.blockLength+=s.blockLength,n-=s.blockLength,this.value.push(s)}return o}toBER(e,t){let n=[];for(let o=0;o<this.value.length;o++){let s=this.value[o].toBER(e);if(s.byteLength===0)return this.error=this.value[o].error,Tn;n.push(s)}return Q3(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 s=new $l;if(s.valueDec=parseInt(o,10),isNaN(s.valueDec))return!0;this.value.push(s)}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}};A1.NAME="RelativeObjectIdentifierValueBlock";var bb,I1=class extends Tt{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,A1),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};bb=I1;Q.RelativeObjectIdentifier=bb;I1.NAME="RelativeObjectIdentifier";var Eb,ir=class extends Yo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};Eb=ir;Q.Sequence=Eb;ir.NAME="SEQUENCE";var xb,T1=class extends Yo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};xb=T1;Q.Set=xb;T1.NAME="SET";var _1=class extends po($t){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=Ia}toJSON(){return{...super.toJSON(),value:this.value}}};_1.NAME="StringValueBlock";var C1=class extends _1{};C1.NAME="SimpleStringValueBlock";var Zt=class extends f1{constructor({...e}={}){super(e,C1)}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 k1=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}};k1.NAME="Utf8StringValueBlock";var vb,fo=class extends k1{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};vb=fo;Q.Utf8String=vb;fo.NAME="UTF8String";var P1=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))}};P1.NAME="BmpStringValueBlock";var Sb,R1=class extends P1{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};Sb=R1;Q.BmpString=Sb;R1.NAME="BMPString";var L1=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 s=Go(e.charCodeAt(o),8),i=new Uint8Array(s);if(i.length>4)continue;let a=4-i.length;for(let c=i.length-1;c>=0;c--)n[o*4+c+a]=i[c]}this.valueBlock.value=e}};L1.NAME="UniversalStringValueBlock";var Ab,D1=class extends L1{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};Ab=D1;Q.UniversalString=Ab;D1.NAME="UniversalString";var Ib,N1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};Ib=N1;Q.NumericString=Ib;N1.NAME="NumericString";var Tb,O1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};Tb=O1;Q.PrintableString=Tb;O1.NAME="PrintableString";var _b,M1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};_b=M1;Q.TeletexString=_b;M1.NAME="TeletexString";var Cb,B1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};Cb=B1;Q.VideotexString=Cb;B1.NAME="VideotexString";var kb,U1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};kb=U1;Q.IA5String=kb;U1.NAME="IA5String";var Pb,F1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};Pb=F1;Q.GraphicString=Pb;F1.NAME="GraphicString";var Rb,Kl=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};Rb=Kl;Q.VisibleString=Rb;Kl.NAME="VisibleString";var Lb,$1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};Lb=$1;Q.GeneralString=Lb;$1.NAME="GeneralString";var Db,K1=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};Db=K1;Q.CharacterString=Db;K1.NAME="CharacterString";var Nb,Vl=class extends Kl{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]=sr(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=sr(this.month,2),t[2]=sr(this.day,2),t[3]=sr(this.hour,2),t[4]=sr(this.minute,2),t[5]=sr(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}}};Nb=Vl;Q.UTCTime=Nb;Vl.NAME="UTCTime";var Ob,V1=class extends Vl{constructor(e={}){var t;super(e),(t=this.millisecond)!==null&&t!==void 0||(this.millisecond=0),this.idBlock.tagClass=1,this.idBlock.tagNumber=24}fromDate(e){super.fromDate(e),this.millisecond=e.getUTCMilliseconds()}toDate(){let e=Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond);return new Date(e)}fromString(e){let t=!1,n="",o="",s=0,i,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),t=!0;else{let u=new Number(e[e.length-1]);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");n=e}if(t){if(n.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(n.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let u=1,f=n.indexOf("+"),h="";if(f===-1&&(f=n.indexOf("-"),u=-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=u*p,h.length===4){if(p=parseInt(h.substring(2,4),10),isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");c=u*p}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let u=new Number(`0${n.substring(l)}`);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");s=u.valueOf(),o=n.substring(0,l)}else o=n;switch(!0){case o.length===8:if(i=/(\d{4})(\d{2})(\d{2})/ig,l!==-1)throw new Error("Wrong input string for conversion");break;case o.length===10:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*s;this.minute=Math.floor(u),u=60*(u-this.minute),this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===12:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*s;this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===14:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=1e3*s;this.millisecond=Math.floor(u)}break;default:throw new Error("Wrong input string for conversion")}let d=i.exec(o);if(d===null)throw new Error("Wrong input string for conversion");for(let u=1;u<d.length;u++)switch(u){case 1:this.year=parseInt(d[u],10);break;case 2:this.month=parseInt(d[u],10);break;case 3:this.day=parseInt(d[u],10);break;case 4:this.hour=parseInt(d[u],10)+a;break;case 5:this.minute=parseInt(d[u],10)+c;break;case 6:this.second=parseInt(d[u],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let u=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=u.getUTCFullYear(),this.month=u.getUTCMonth(),this.day=u.getUTCDay(),this.hour=u.getUTCHours(),this.minute=u.getUTCMinutes(),this.second=u.getUTCSeconds(),this.millisecond=u.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(sr(this.year,4)),t.push(sr(this.month,2)),t.push(sr(this.day,2)),t.push(sr(this.hour,2)),t.push(sr(this.minute,2)),t.push(sr(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(sr(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};Ob=V1;Q.GeneralizedTime=Ob;V1.NAME="GeneralizedTime";var Mb,H1=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};Mb=H1;Q.DATE=Mb;H1.NAME="DATE";var Bb,q1=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};Bb=q1;Q.TimeOfDay=Bb;q1.NAME="TimeOfDay";var Ub,W1=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};Ub=W1;Q.DateTime=Ub;W1.NAME="DateTime";var Fb,z1=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};Fb=z1;Q.Duration=Fb;z1.NAME="Duration";var $b,G1=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};$b=G1;Q.TIME=$b;G1.NAME="TIME";async function X1(r,e){let n=await Sa.create().encrypt(r,e);return rt.encode(n)}async function e4(r,e,t){if(r.type==="RSA")return BR(r,e,t);if(r.type==="Ed25519")return NR(r,e,t);if(r.type==="secp256k1")return OR(r,e,t);if(r.type==="ECDSA")return MR(r,e,t);throw new Fr}async function NR(r,e,t="libp2p-key"){if(t==="libp2p-key")return X1(ks(r),e);throw new A(`export format '${t}' is not supported`)}async function OR(r,e,t="libp2p-key"){if(t==="libp2p-key")return X1(ks(r),e);throw new A("Export format is not supported")}async function MR(r,e,t="libp2p-key"){if(t==="libp2p-key")return X1(ks(r),e);throw new A(`export format '${t}' is not supported`)}async function BR(r,e,t="pkcs-8"){if(t==="pkcs-8")return UR(r,e);if(t==="libp2p-key")return X1(ks(r),e);throw new A("Export format is not supported")}async function UR(r,e){let t=nt.get(),o=new ir({value:[new uo({value:0}),new ir({value:[new In({value:"1.2.840.113549.1.1.1"}),new ri]}),new lo({valueHex:r.raw})]}).toBER(),s=new Uint8Array(o,0,o.byteLength),i=Yt(16),a=await id(_o,e,i,{c:1e4,dkLen:32}),c=Yt(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),d=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,s),u=new ir({value:[new lo({valueHex:i}),new uo({value:1e4}),new uo({value:32}),new ir({value:[new In({value:"1.2.840.113549.2.11"}),new ri]})]}),f=new ir({value:[new In({value:"1.2.840.113549.1.5.13"}),new ir({value:[new ir({value:[new In({value:"1.2.840.113549.1.5.12"}),u]}),new ir({value:[new In({value:"2.16.840.1.101.3.4.1.42"}),new lo({valueHex:c})]})]})]}),p=new ir({value:[f,new lo({valueHex:d})]}).toBER(),g=new Uint8Array(p,0,p.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...R(g,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
51
+ `)}async function t4(r,e){try{let t=await FR(r,e);return K8(t)}catch{}if(!r.includes("BEGIN"))throw new A("Encrypted key was not a libp2p-key or a PEM file");return $R(r,e)}async function FR(r,e){let t=rt.decode(r);return Sa.create().decrypt(t,e)}async function $R(r,e){let t=nt.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let s=C(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:i}=j1(s),{iv:a,salt:c,iterations:l,keySize:d,cipherText:u}=KR(i),f=await id(_o,e,c,{c:l,dkLen:d}),h=await t.subtle.importKey("raw",f,"AES-CBC",!1,["decrypt"]),p=Hl(await t.subtle.decrypt({name:"AES-CBC",iv:a},h,u)),{result:g}=j1(p);n=qb(g)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let s=C(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:i}=j1(s);n=qb(i)}else throw new A("Could not parse private key from PEM data");let o=V8(n);if(o.type!=="RSA")throw new A("Could not parse RSA private key from PEM data");return o}function KR(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new A("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 A("Only pkcs5PBKDF2 key derivation functions are supported");let s=n.valueBlock.value[1],i=Hl(s.valueBlock.value[0].getValue()),a=1e4,c=32;if(s.valueBlock.value.length===3)a=Number(s.valueBlock.value[1].toBigInt()),c=Number(s.valueBlock.value[2].toBigInt());else if(s.valueBlock.value.length===2)throw new A("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],d=l.valueBlock.value[0].toString();if(d!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(d!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new A("Only AES-CBC encryption schemes are supported")}}}}let u=Hl(l.valueBlock.value[1].getValue());return{cipherText:Hl(r.valueBlock.value[1].getValue()),salt:i,iterations:a,keySize:c,iv:u}}function qb(r){return Hl(r.valueBlock.value[2].getValue())}function Hl(r){return new Uint8Array(r,0,r.byteLength)}var VR="/pkcs8/",r4="/info/",ql=new WeakMap,ni={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3};function Ta(r){return r==null||typeof r!="string"?!1:r===(0,Wb.default)(r.trim())&&r.length>0}async function _t(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function oi(r){return new Fe(VR+r)}function _a(r){return new Fe(r4+r)}async function HR(r){let e=ks(r),t=await ze.digest(e);return De.encode(t.bytes).substring(1)}var Q1=class{components;init;log;self;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init={...t,dek:{...Y3,...t.dek}},this.self=t.selfKey??"self",this.init.pass!=null&&this.init.pass?.length<20)throw new Error("pass must be least 20 characters");if(this.init.dek?.keyLength!=null&&this.init.dek.keyLength<ni.minKeyLength)throw new Error(`dek.keyLength must be least ${ni.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<ni.minSaltLength)throw new Error(`dek.saltLength must be least ${ni.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<ni.minIterationCount)throw new Error(`dek.iterationCount must be least ${ni.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?Rc(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";ql.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[me]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},this.options),t=Math.ceil(ni.minSaltLength/3)*3;return e.dek!=null&&(e.dek.salt=R(Yt(t),"base64")),e}static get options(){return{dek:{...Y3}}}async findKeyByName(e){if(!Ta(e))throw await _t(),new A(`Invalid key name '${e}'`);let t=_a(e);try{let n=await this.components.datastore.get(t);return JSON.parse(R(n))}catch(n){throw await _t(),this.log.error("could not read key from datastore - %e",n),new Le(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:r4};for await(let n of this.components.datastore.query(t)){let o=JSON.parse(R(n.value));if(o.id===e)return o}throw new A(`Key with id '${e}' does not exist.`)}catch(t){throw await _t(),t}}async importKey(e,t){if(!Ta(e))throw await _t(),new A(`Invalid key name '${e}'`);if(t==null)throw await _t(),new A("Key is required");let n=oi(e);if(await this.components.datastore.has(n))throw await _t(),new A(`Key '${e}' already exists`);let s,i;try{s=await HR(t);let l=ql.get(this);if(l==null)throw new A("dek missing");let d=l.dek;i=await e4(t,d,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await _t(),l}let a={name:e,id:s},c=this.components.datastore.batch();return c.put(n,C(i)),c.put(_a(e),C(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!Ta(e))throw await _t(),new A(`Invalid key name '${e}'`);let t=oi(e);try{let n=await this.components.datastore.get(t),o=R(n),s=ql.get(this);if(s==null)throw new A("dek missing");let i=s.dek;return await t4(o,i)}catch(n){throw await _t(),n}}async removeKey(e){if(!Ta(e)||e===this.self)throw await _t(),new A(`Invalid key name '${e}'`);let t=oi(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(_a(e)),await o.commit(),n}async listKeys(){let e={prefix:r4},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(R(n.value)));return t}async renameKey(e,t){if(!Ta(e)||e===this.self)throw await _t(),new A(`Invalid old key name '${e}'`);if(!Ta(t)||t===this.self)throw await _t(),new A(`Invalid new key name '${t}'`);let n=oi(e),o=oi(t),s=_a(e),i=_a(t);if(await this.components.datastore.has(o))throw await _t(),new A(`Key '${t}' already exists`);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(s),d=JSON.parse(R(l));d.name=t;let u=this.components.datastore.batch();return u.put(o,c),u.put(i,C(JSON.stringify(d))),u.delete(n),u.delete(s),await u.commit(),d}catch(c){throw await _t(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await _t(),new A(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await _t(),new A(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await _t(),new A(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=ql.get(this);if(n==null)throw new A("dek missing");let o=n.dek;this.init.pass=t;let s=t!=null&&this.init.dek?.salt!=null?Rc(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";ql.set(this,{dek:s});let i=await this.listKeys();for(let a of i){let c=await this.components.datastore.get(oi(a.name)),l=R(c),d=await t4(l,o),u=s.toString(),f=await e4(d,u,d.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),p={name:a.name,id:a.id};h.put(oi(a.name),C(f)),h.put(_a(a.name),C(JSON.stringify(p))),await h.commit()}this.log("keychain reconstructed")}};function Z1(r={}){return e=>new Q1(e,r)}async function n4(r,e={}){let t=e.selfKey??"self",n=Z1(e)({datastore:r,logger:ra()}),o;return await r.has(new Fe(`/pkcs8/${t}`))?o=await n.exportKey(t):(o=await od(e.keyType??"Ed25519"),await n.importKey(t,o)),o}var Ca=!!globalThis.process?.env?.DUMP_SESSION_KEYS,o4=16;function qR(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function J1(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function ep(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function wt(r,e,t=""){let n=qR(r),o=r?.length,s=e!==void 0;if(!n||s&&o!==e){let i=t&&`"${t}" `,a=s?` of length ${e}`:"",c=n?`length=${o}`:`type=${typeof r}`;throw new Error(i+"expected Uint8Array"+a+", got "+c)}return r}function s4(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 zb(r,e){wt(r,void 0,"output");let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}function mo(r){return new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4))}function go(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function WR(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}var zR=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Gb(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function Yb(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 i4=(r,e)=>{function t(n,...o){if(wt(n,void 0,"key"),!zR)throw new Error("Non little-endian hardware is not yet supported");if(r.nonceLength!==void 0){let d=o[0];wt(d,r.varSizeNonce?void 0:r.nonceLength,"nonce")}let s=r.tagLength;s&&o[1]!==void 0&&wt(o[1],void 0,"AAD");let i=e(n,...o),a=(d,u)=>{if(u!==void 0){if(d!==2)throw new Error("cipher output not supported");wt(u,void 0,"output")}},c=!1;return{encrypt(d,u){if(c)throw new Error("cannot encrypt() twice with same key + nonce");return c=!0,wt(d),a(i.encrypt.length,u),i.encrypt(d,u)},decrypt(d,u){if(wt(d),s&&d.length<s)throw new Error('"ciphertext" expected length bigger than tagLength='+s);return a(i.decrypt.length,u),i.decrypt(d,u)}}}return Object.assign(t,r),t};function a4(r,e,t=!0){if(e===void 0)return new Uint8Array(r);if(e.length!==r)throw new Error('"output" expected Uint8Array of length '+r+", got: "+e.length);if(t&&!GR(e))throw new Error("invalid output, must be aligned");return e}function jb(r,e,t){J1(t);let n=new Uint8Array(16),o=WR(n);return o.setBigUint64(0,BigInt(e),t),o.setBigUint64(8,BigInt(r),t),n}function GR(r){return r.byteOffset%4===0}function ka(r){return Uint8Array.from(r)}var Qb=r=>Uint8Array.from(r.split(""),e=>e.charCodeAt(0)),YR=Qb("expand 16-byte k"),jR=Qb("expand 32-byte k"),XR=mo(YR),QR=mo(jR);function Z(r,e){return r<<e|r>>>32-e}function c4(r){return r.byteOffset%4===0}var tp=64,ZR=16,Zb=2**32-1,Xb=Uint32Array.of();function JR(r,e,t,n,o,s,i,a){let c=o.length,l=new Uint8Array(tp),d=mo(l),u=c4(o)&&c4(s),f=u?mo(o):Xb,h=u?mo(s):Xb;for(let p=0;p<c;i++){if(r(e,t,n,d,i,a),i>=Zb)throw new Error("arx: counter overflow");let g=Math.min(tp,c-p);if(u&&g===tp){let m=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let w=0,T;w<ZR;w++)T=m+w,h[T]=f[T]^d[w];p+=tp;continue}for(let m=0,w;m<g;m++)w=p+m,s[w]=o[w]^l[m];p+=g}}function l4(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:s,rounds:i}=Gb({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return ep(o),ep(i),J1(s),J1(t),(a,c,l,d,u=0)=>{wt(a,void 0,"key"),wt(c,void 0,"nonce"),wt(l,void 0,"data");let f=l.length;if(d===void 0&&(d=new Uint8Array(f)),wt(d,void 0,"output"),ep(u),u<0||u>=Zb)throw new Error("arx: counter overflow");if(d.length<f)throw new Error(`arx: output (${d.length}) is shorter than data (${f})`);let h=[],p=a.length,g,m;if(p===32)h.push(g=ka(a)),m=QR;else if(p===16&&t)g=new Uint8Array(32),g.set(a),g.set(a,16),m=XR,h.push(g);else throw wt(a,32,"arx key"),new Error("invalid key size");c4(c)||h.push(c=ka(c));let w=mo(g);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(m,w,mo(c.subarray(0,16)),w),c=c.subarray(16)}let T=16-o;if(T!==c.length)throw new Error(`arx: nonce must be ${T} or 16 bytes`);if(T!==12){let D=new Uint8Array(12);D.set(c,s?0:12-c.length),c=D,h.push(c)}let I=mo(c);return JR(r,m,w,I,l,d,u,i),go(...h),d}}function Ct(r,e){return r[e++]&255|(r[e++]&255)<<8}var u4=class{blockLen=16;outputLen=16;buffer=new Uint8Array(16);r=new Uint16Array(10);h=new Uint16Array(10);pad=new Uint16Array(8);pos=0;finished=!1;constructor(e){e=ka(wt(e,32,"key"));let t=Ct(e,0),n=Ct(e,2),o=Ct(e,4),s=Ct(e,6),i=Ct(e,8),a=Ct(e,10),c=Ct(e,12),l=Ct(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|s<<9)&8191,this.r[4]=(s>>>4|i<<12)&255,this.r[5]=i>>>1&8190,this.r[6]=(i>>>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 d=0;d<8;d++)this.pad[d]=Ct(e,16+2*d)}process(e,t,n=!1){let o=n?0:2048,{h:s,r:i}=this,a=i[0],c=i[1],l=i[2],d=i[3],u=i[4],f=i[5],h=i[6],p=i[7],g=i[8],m=i[9],w=Ct(e,t+0),T=Ct(e,t+2),I=Ct(e,t+4),D=Ct(e,t+6),F=Ct(e,t+8),$=Ct(e,t+10),z=Ct(e,t+12),S=Ct(e,t+14),x=s[0]+(w&8191),L=s[1]+((w>>>13|T<<3)&8191),B=s[2]+((T>>>10|I<<6)&8191),P=s[3]+((I>>>7|D<<9)&8191),v=s[4]+((D>>>4|F<<12)&8191),E=s[5]+(F>>>1&8191),b=s[6]+((F>>>14|$<<2)&8191),_=s[7]+(($>>>11|z<<5)&8191),M=s[8]+((z>>>8|S<<8)&8191),O=s[9]+(S>>>5|o),k=0,U=k+x*a+L*(5*m)+B*(5*g)+P*(5*p)+v*(5*h);k=U>>>13,U&=8191,U+=E*(5*f)+b*(5*u)+_*(5*d)+M*(5*l)+O*(5*c),k+=U>>>13,U&=8191;let K=k+x*c+L*a+B*(5*m)+P*(5*g)+v*(5*p);k=K>>>13,K&=8191,K+=E*(5*h)+b*(5*f)+_*(5*u)+M*(5*d)+O*(5*l),k+=K>>>13,K&=8191;let W=k+x*l+L*c+B*a+P*(5*m)+v*(5*g);k=W>>>13,W&=8191,W+=E*(5*p)+b*(5*h)+_*(5*f)+M*(5*u)+O*(5*d),k+=W>>>13,W&=8191;let we=k+x*d+L*l+B*c+P*a+v*(5*m);k=we>>>13,we&=8191,we+=E*(5*g)+b*(5*p)+_*(5*h)+M*(5*f)+O*(5*u),k+=we>>>13,we&=8191;let pe=k+x*u+L*d+B*l+P*c+v*a;k=pe>>>13,pe&=8191,pe+=E*(5*m)+b*(5*g)+_*(5*p)+M*(5*h)+O*(5*f),k+=pe>>>13,pe&=8191;let ue=k+x*f+L*u+B*d+P*l+v*c;k=ue>>>13,ue&=8191,ue+=E*a+b*(5*m)+_*(5*g)+M*(5*p)+O*(5*h),k+=ue>>>13,ue&=8191;let be=k+x*h+L*f+B*u+P*d+v*l;k=be>>>13,be&=8191,be+=E*c+b*a+_*(5*m)+M*(5*g)+O*(5*p),k+=be>>>13,be&=8191;let Re=k+x*p+L*h+B*f+P*u+v*d;k=Re>>>13,Re&=8191,Re+=E*l+b*c+_*a+M*(5*m)+O*(5*g),k+=Re>>>13,Re&=8191;let Je=k+x*g+L*p+B*h+P*f+v*u;k=Je>>>13,Je&=8191,Je+=E*d+b*l+_*c+M*a+O*(5*m),k+=Je>>>13,Je&=8191;let Ee=k+x*m+L*g+B*p+P*h+v*f;k=Ee>>>13,Ee&=8191,Ee+=E*u+b*d+_*l+M*c+O*a,k+=Ee>>>13,Ee&=8191,k=(k<<2)+k|0,k=k+U|0,U=k&8191,k=k>>>13,K+=k,s[0]=U,s[1]=K,s[2]=W,s[3]=we,s[4]=pe,s[5]=ue,s[6]=be,s[7]=Re,s[8]=Je,s[9]=Ee}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 s=(o^1)-1;for(let a=0;a<10;a++)n[a]&=s;s=~s;for(let a=0;a<10;a++)e[a]=e[a]&s|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 i=e[0]+t[0];e[0]=i&65535;for(let a=1;a<8;a++)i=(e[a]+t[a]|0)+(i>>>16)|0,e[a]=i&65535;go(n)}update(e){s4(this),wt(e),e=ka(e);let{buffer:t,blockLen:n}=this,o=e.length;for(let s=0;s<o;){let i=Math.min(n-this.pos,o-s);if(i===n){for(;n<=o-s;s+=n)this.process(e,s);continue}t.set(e.subarray(s,s+i),this.pos),this.pos+=i,s+=i,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){go(this.h,this.r,this.buffer,this.pad)}digestInto(e){s4(this),zb(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 s=0;for(let i=0;i<8;i++)e[s++]=n[i]>>>0,e[s++]=n[i]>>>8;return e}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}};function eL(r){let e=(n,o)=>r(o).update(n).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var Jb=eL(r=>new u4(r));function rE(r,e,t,n,o,s=20){let i=r[0],a=r[1],c=r[2],l=r[3],d=e[0],u=e[1],f=e[2],h=e[3],p=e[4],g=e[5],m=e[6],w=e[7],T=o,I=t[0],D=t[1],F=t[2],$=i,z=a,S=c,x=l,L=d,B=u,P=f,v=h,E=p,b=g,_=m,M=w,O=T,k=I,U=D,K=F;for(let we=0;we<s;we+=2)$=$+L|0,O=Z(O^$,16),E=E+O|0,L=Z(L^E,12),$=$+L|0,O=Z(O^$,8),E=E+O|0,L=Z(L^E,7),z=z+B|0,k=Z(k^z,16),b=b+k|0,B=Z(B^b,12),z=z+B|0,k=Z(k^z,8),b=b+k|0,B=Z(B^b,7),S=S+P|0,U=Z(U^S,16),_=_+U|0,P=Z(P^_,12),S=S+P|0,U=Z(U^S,8),_=_+U|0,P=Z(P^_,7),x=x+v|0,K=Z(K^x,16),M=M+K|0,v=Z(v^M,12),x=x+v|0,K=Z(K^x,8),M=M+K|0,v=Z(v^M,7),$=$+B|0,K=Z(K^$,16),_=_+K|0,B=Z(B^_,12),$=$+B|0,K=Z(K^$,8),_=_+K|0,B=Z(B^_,7),z=z+P|0,O=Z(O^z,16),M=M+O|0,P=Z(P^M,12),z=z+P|0,O=Z(O^z,8),M=M+O|0,P=Z(P^M,7),S=S+v|0,k=Z(k^S,16),E=E+k|0,v=Z(v^E,12),S=S+v|0,k=Z(k^S,8),E=E+k|0,v=Z(v^E,7),x=x+L|0,U=Z(U^x,16),b=b+U|0,L=Z(L^b,12),x=x+L|0,U=Z(U^x,8),b=b+U|0,L=Z(L^b,7);let W=0;n[W++]=i+$|0,n[W++]=a+z|0,n[W++]=c+S|0,n[W++]=l+x|0,n[W++]=d+L|0,n[W++]=u+B|0,n[W++]=f+P|0,n[W++]=h+v|0,n[W++]=p+E|0,n[W++]=g+b|0,n[W++]=m+_|0,n[W++]=w+M|0,n[W++]=T+O|0,n[W++]=I+k|0,n[W++]=D+U|0,n[W++]=F+K|0}function tL(r,e,t,n){let o=r[0],s=r[1],i=r[2],a=r[3],c=e[0],l=e[1],d=e[2],u=e[3],f=e[4],h=e[5],p=e[6],g=e[7],m=t[0],w=t[1],T=t[2],I=t[3];for(let F=0;F<20;F+=2)o=o+c|0,m=Z(m^o,16),f=f+m|0,c=Z(c^f,12),o=o+c|0,m=Z(m^o,8),f=f+m|0,c=Z(c^f,7),s=s+l|0,w=Z(w^s,16),h=h+w|0,l=Z(l^h,12),s=s+l|0,w=Z(w^s,8),h=h+w|0,l=Z(l^h,7),i=i+d|0,T=Z(T^i,16),p=p+T|0,d=Z(d^p,12),i=i+d|0,T=Z(T^i,8),p=p+T|0,d=Z(d^p,7),a=a+u|0,I=Z(I^a,16),g=g+I|0,u=Z(u^g,12),a=a+u|0,I=Z(I^a,8),g=g+I|0,u=Z(u^g,7),o=o+l|0,I=Z(I^o,16),p=p+I|0,l=Z(l^p,12),o=o+l|0,I=Z(I^o,8),p=p+I|0,l=Z(l^p,7),s=s+d|0,m=Z(m^s,16),g=g+m|0,d=Z(d^g,12),s=s+d|0,m=Z(m^s,8),g=g+m|0,d=Z(d^g,7),i=i+u|0,w=Z(w^i,16),f=f+w|0,u=Z(u^f,12),i=i+u|0,w=Z(w^i,8),f=f+w|0,u=Z(u^f,7),a=a+c|0,T=Z(T^a,16),h=h+T|0,c=Z(c^h,12),a=a+c|0,T=Z(T^a,8),h=h+T|0,c=Z(c^h,7);let D=0;n[D++]=o,n[D++]=s,n[D++]=i,n[D++]=a,n[D++]=m,n[D++]=w,n[D++]=T,n[D++]=I}var rL=l4(rE,{counterRight:!1,counterLength:4,allowShortKeys:!1}),nL=l4(rE,{counterRight:!1,counterLength:8,extendNonceFn:tL,allowShortKeys:!1});var oL=new Uint8Array(16),eE=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(oL.subarray(t))},sL=new Uint8Array(32);function tE(r,e,t,n,o){o!==void 0&&wt(o,void 0,"AAD");let s=r(e,t,sL),i=jb(n.length,o?o.length:0,!0),a=Jb.create(s);o&&eE(a,o),eE(a,n),a.update(i);let c=a.digest();return go(s,i),c}var nE=r=>(e,t,n)=>({encrypt(s,i){let a=s.length;i=a4(a+16,i,!1),i.set(s);let c=i.subarray(0,-16);r(e,t,c,c,1);let l=tE(r,e,t,c,n);return i.set(l,a),go(l),i},decrypt(s,i){i=a4(s.length-16,i,!1);let a=s.subarray(0,-16),c=s.subarray(-16),l=tE(r,e,t,a,n);if(!Yb(c,l))throw new Error("invalid tag");return i.set(s.subarray(0,-16)),r(e,t,i,i,1),go(l),i}}),d4=i4({blockSize:64,nonceLength:12,tagLength:16},nE(rL)),Pie=i4({blockSize:64,nonceLength:24,tagLength:16},nE(nL));function sE(r,e,t){return Un(r),t===void 0&&(t=new Uint8Array(r.outputLen)),Ro(r,t,e)}var f4=Uint8Array.of(0),oE=Uint8Array.of();function iE(r,e,t,n=32){Un(r),Dt(n,"length");let o=r.outputLen;if(n>255*o)throw new Error("Length must be <= 255*HashLen");let s=Math.ceil(n/o);t===void 0?t=oE:ce(t,void 0,"info");let i=new Uint8Array(s*o),a=Ro.create(r,e),c=a._cloneInto(),l=new Uint8Array(a.outputLen);for(let d=0;d<s;d++)f4[0]=d+1,c.update(d===0?oE:l).update(t).update(f4).digestInto(l),i.set(l,o*d),a._cloneInto(c);return a.destroy(),c.destroy(),Nt(l,f4),i.slice(0,n)}var h4={hashSHA256(r){return Tr(r.subarray())},getHKDF(r,e){let t=sE(Tr,e,r),o=iE(Tr,t,void 0,96),s=o.subarray(0,32),i=o.subarray(32,64),a=o.subarray(64,96);return[s,i,a]},generateX25519KeyPair(){let r=Ec.utils.randomSecretKey();return{publicKey:Ec.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:Ec.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return Ec.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return d4(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return d4(n,e,t).decrypt(r.subarray(),o)}};var aE=h4;function cE(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 Pa=r=>{let e=Ge(2);return e[0]=r>>8,e[1]=r,e};Pa.bytes=2;var Ra=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)};Ra.bytes=2;function lE(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 p4(r,e){!e.enabled||!Ca||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${R(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${R(r.privateKey,"hex")}`)):e("Missing local static keys."))}function m4(r,e){!e.enabled||!Ca||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${R(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${R(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function uE(r,e){!e.enabled||!Ca||e(r?`REMOTE_STATIC_PUBLIC_KEY ${R(r.subarray(),"hex")}`:"Missing remote static public key.")}function g4(r,e){!e.enabled||!Ca||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${R(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function y4(r,e,t){!t.enabled||!Ca||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&R(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&R(e.k,"hex")}`))}function nn(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=Ge(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var La=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var iL=0,aL=4294967295,cL="Cipherstate has reached maximum n, a new handshake must be performed",rp=class{n;bytes;view;constructor(e=iL){this.n=e,this.bytes=ae(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>aL)throw new Error(cL)}};var si=ae(0),Da=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new rp(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}},w4=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=C(t,"utf-8");this.h=lL(e,n),this.ck=this.h,this.cs=new Da(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new Da(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new X(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,si);return[new Da(this.crypto,e),new Da(this.crypto,t)]}},b4=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:o,initiator:s,s:i,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new w4(t,n),this.ss.mixHash(o),this.initiator=s,this.s=i,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()}},Wl=class extends b4{writeMessageA(e){return new X(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new X(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new X(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new La(`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 La(`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 La(`handshake stage 2 validation fail: ${t.message}`)}}};function lL(r,e){if(e.length<=32){let t=ae(32);return t.set(e),t}else return r.hash(e)}var np;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let s of t.webtransportCerthashes)n.uint32(10),n.bytes(s);if(t.streamMuxers!=null)for(let s of t.streamMuxers)n.uint32(18),n.string(s);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={webtransportCerthashes:[],streamMuxers:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.webtransportCerthashes!=null&&s.webtransportCerthashes.length===o.limits.webtransportCerthashes)throw new Ne('Decode error - map field "webtransportCerthashes" had too many elements');s.webtransportCerthashes.push(t.bytes());break}case 2:{if(o.limits?.streamMuxers!=null&&s.streamMuxers.length===o.limits.streamMuxers)throw new Ne('Decode error - map field "streamMuxers" had too many elements');s.streamMuxers.push(t.string());break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(np||(np={}));var zl;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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),np.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={identityKey:ae(0),identitySig:ae(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.identityKey=t.bytes();break}case 2:{s.identitySig=t.bytes();break}case 4:{s.extensions=np.codec().decode(t,t.uint32(),{limits:o.limits?.extensions});break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(zl||(zl={}));async function x4(r,e,t){let n=await r.sign(fE(e));return zl.encode({identityKey:ft(r.publicKey),identitySig:n,extensions:t})}async function v4(r,e,t){try{let n=zl.decode(r),o=tt(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 s=fE(e);if(!await o.verify(s,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new vu(n.message)}}function fE(r){let e=C("noise-libp2p-static-key:");return r instanceof Uint8Array?Oe([e,r],e.length+r.length):(r.prepend(e),r)}var E4=class extends No{stream;handshake;metrics;decoder;constructor(e,t,n){super({log:e.log,inactivityTimeout:e.inactivityTimeout,maxReadBufferLength:e.maxReadBufferLength,direction:e.direction}),this.stream=e,this.handshake=t,this.metrics=n,this.decoder=new kd({lengthDecoder:Ra,maxBufferSize:16*1024*1024,encodingLength:()=>2});let o=c=>{try{for(let l of this.decoder.decode(c.data))this.onData(this.decrypt(l))}catch(l){this.abort(l)}};this.stream.addEventListener("message",o);let s=c=>{c.error!=null?c.local===!0?this.abort(c.error):this.onRemoteReset():this.onTransportClosed()};this.stream.addEventListener("close",s);let i=()=>{this.safeDispatchEvent("drain")};this.stream.addEventListener("drain",i);let a=()=>{this.onRemoteCloseWrite()};this.stream.addEventListener("remoteCloseWrite",a)}encrypt(e){let t=new X;for(let n=0;n<e.byteLength;n+=65519){let o=n+65519;o>e.byteLength&&(o=e.byteLength);let s;e instanceof Uint8Array?s=this.handshake.encrypt(e.subarray(n,o)):s=this.handshake.encrypt(e.sublist(n,o)),this.metrics?.encryptedPackets.increment(),t.append(Pa(s.byteLength)),t.append(s)}return t}decrypt(e){let t=new X;for(let n=0;n<e.byteLength;n+=65535){let o=n+65535;if(o>e.byteLength&&(o=e.byteLength),o-o4<n)throw new Error("Invalid chunk");let s;e instanceof Uint8Array?s=e.subarray(n,o):s=e.sublist(n,o);let i=e.subarray(n,o-o4);try{let a=this.handshake.decrypt(s,i);this.metrics?.decryptedPackets.increment(),t.append(a)}catch(a){throw this.metrics?.decryptErrors.increment(),a}}return t}close(e){return this.stream.close(e)}sendPause(){this.stream.pause()}sendResume(){this.stream.resume()}sendReset(e){this.stream.abort(e)}sendData(e){return{sentBytes:e.byteLength,canSendMore:this.stream.send(this.encrypt(e))}}};function S4(r,e,t){return new E4(r,e,t)}async function hE(r,e){let{log:t,connection:n,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,d=await x4(s,a.publicKey,l),u=new Wl({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:i,s:a});p4(u.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(u.writeMessageA(si),e),t.trace("Stage 0 - Initiator finished sending first message."),m4(u.e,t),t.trace("Stage 1 - Initiator waiting to receive first message from responder...");let f=u.readMessageB(await n.read(e));t.trace("Stage 1 - Initiator received the message."),g4(u.re,t),uE(u.rs,t),t.trace("Initiator going to check remote's signature...");let h=await v4(f,u.rs,c);t.trace("All good with the signature!"),t.trace("Stage 2 - Initiator sending third handshake message."),await n.write(u.writeMessageC(d),e),t.trace("Stage 2 - Initiator sent message with signed payload.");let[p,g]=u.ss.split();return y4(p,g,t),{payload:h,encrypt:m=>p.encryptWithAd(si,m),decrypt:(m,w)=>g.decryptWithAd(si,m,w)}}async function pE(r,e){let{log:t,connection:n,crypto:o,privateKey:s,prologue:i,s:a,remoteIdentityKey:c,extensions:l}=r,d=await x4(s,a.publicKey,l),u=new Wl({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:i,s:a});p4(u.s,t),t.trace("Stage 0 - Responder waiting to receive first message."),u.readMessageA(await n.read(e)),t.trace("Stage 0 - Responder received first message."),g4(u.re,t),t.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await n.write(u.writeMessageB(d),e),t.trace("Stage 1 - Responder sent the second handshake message with signed payload."),m4(u.e,t),t.trace("Stage 2 - Responder waiting for third handshake message...");let f=u.readMessageC(await n.read(e));t.trace("Stage 2 - Responder received the message, finished handshake.");let h=await v4(f,u.rs,c),[p,g]=u.ss.split();return y4(p,g,t),{payload:h,encrypt:m=>g.encryptWithAd(si,m),decrypt:(m,w)=>p.decryptWithAd(si,m,w)}}var op=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;log;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:s,prologueBytes:i}=t,{metrics:a}=e;this.components=e,this.log=e.logger.forComponent("libp2p:noise");let c=s??aE;this.crypto=cE(c),this.extensions={webtransportCerthashes:[],...o},this.metrics=a?lE(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=i??ae(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[me]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=e.log?.newScope("noise")??this.log,o=Fo(e,{lengthEncoder:Pa,lengthDecoder:Ra,maxDataLength:65535}),s=await this.performHandshakeInitiator(o,this.components.privateKey,n,t?.remotePeer?.publicKey,t),i=tt(s.payload.identityKey);return{connection:S4(o.unwrap(),s,this.metrics),remoteExtensions:s.payload.extensions,remotePeer:xn(i),streamMuxer:t?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(s.payload.extensions?.streamMuxers)}}getStreamMuxer(e){if(e==null||e.length===0)return;let t=this.components.upgrader.getStreamMuxers();if(t!=null)for(let n of e){let o=t.get(n);if(o!=null)return o}if(e.length)throw new Su("Early muxer negotiation was requested but the initiator and responder had no common muxers")}async secureInbound(e,t){let n=e.log?.newScope("noise")??this.log,o=Fo(e,{lengthEncoder:Pa,lengthDecoder:Ra,maxDataLength:65535}),s=await this.performHandshakeResponder(o,this.components.privateKey,n,t?.remotePeer?.publicKey,t),i=tt(s.payload.identityKey);return{connection:S4(o.unwrap(),s,this.metrics),remoteExtensions:s.payload.extensions,remotePeer:xn(i),streamMuxer:t?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(s.payload.extensions?.streamMuxers)}}async performHandshakeInitiator(e,t,n,o,s){let i,a=s?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{i=await hE({connection:e,privateKey:t,remoteIdentityKey:o,log:n.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},s),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return i}async performHandshakeResponder(e,t,n,o,s){let i,a=s?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{i=await pE({connection:e,privateKey:t,remoteIdentityKey:o,log:n.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},s),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return i}};function sp(r={}){return e=>new op(e,r)}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 Se;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(Se||(Se={}));var Xae=Object.values(Se).filter(r=>typeof r!="string"),mE=0,ct;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(ct||(ct={}));var _n=12;var yo=class extends Error{static name="ProtocolError";reason;constructor(e,t){super(e),this.name="ProtocolError",this.reason=t}};function gE(r){return r?.reason!==null}var Sr=class extends yo{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e,ct.ProtocolError),this.name="InvalidFrameError"}},Na=class extends yo{static name="UnRequestedPingError";constructor(e="Un-requested ping error"){super(e,ct.ProtocolError),this.name="UnRequestedPingError"}},Oa=class extends yo{static name="NotMatchingPingError";constructor(e="Not matching ping error"){super(e,ct.ProtocolError),this.name="NotMatchingPingError"}};var ip=class extends yo{static name="StreamAlreadyExistsError";constructor(e="Stream already exists"){super(e,ct.ProtocolError),this.name="StreamAlreadyExistsError"}},ap=class extends yo{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e,ct.ProtocolError),this.name="DecodeInvalidVersionError"}},cp=class extends yo{static name="BothClientsError";constructor(e="Both clients"){super(e,ct.ProtocolError),this.name="BothClientsError"}},Ma=class extends yo{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e,ct.ProtocolError),this.name="ReceiveWindowExceededError"}};var tce=new Set([Sr.name,Na.name,Oa.name,ip.name,ap.name,cp.name,Ma.name]),Yl=256*1024,lp=16*1024*1024;var jl={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,maxMessageSize:64*1024,maxEarlyStreams:10,streamOptions:{initialStreamWindowSize:Yl,maxStreamWindowSize:lp,inactivityTimeout:12e4,maxReadBufferLength:4194304,maxWriteBufferLength:1/0}};function yE(r){if(r.keepAliveInterval!=null&&r.keepAliveInterval<=0)throw new A("keep-alive interval must be positive");if(r.maxInboundStreams!=null&&r.maxInboundStreams<0)throw new A("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams!=null&&r.maxOutboundStreams<0)throw new A("max outbound streams must be larger or equal 0");if(r.maxMessageSize!=null&&r.maxMessageSize<1024)throw new A("MaxMessageSize must be greater than a kilobyte");if(r.streamOptions?.initialStreamWindowSize!=null&&r.streamOptions?.initialStreamWindowSize<Yl)throw new A("InitialStreamWindowSize must be larger or equal 256 kB");if(r.streamOptions?.maxStreamWindowSize!=null&&r.streamOptions?.initialStreamWindowSize!=null&&r.streamOptions?.maxStreamWindowSize<r.streamOptions?.initialStreamWindowSize)throw new A("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.streamOptions?.maxStreamWindowSize!=null&&r.streamOptions?.maxStreamWindowSize>2**32-1)throw new A("MaxStreamWindowSize must be less than equal MAX_UINT32")}function bE(r){return r.header.type===je.Data&&r.data!==null}var wE=2**24;function uL(r){if(r[0]!==mE)throw new Sr("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*wE+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*wE+(r[9]<<16)+(r[10]<<8)+r[11]}}var up=class{buffer;constructor(){this.buffer=new X}*emitFrames(e){for(this.buffer.append(e);;){let t=this.readFrame();if(t===void 0)break;yield t}}readFrame(){let e=_n;if(this.buffer.byteLength<_n)return;let t=uL(this.buffer.subarray(0,_n));if(t.type===je.Data){if(e+=t.length,this.buffer.byteLength<e)return;let n=this.buffer.sublist(_n,e);return this.buffer.consume(e),{header:t,data:n}}return this.buffer.consume(e),{header:t}}};function A4(r){let e=new Uint8Array(_n);return e[1]=r.type,e[2]=r.flag>>>8,e[3]=r.flag,e[4]=r.streamID>>>24,e[5]=r.streamID>>>16,e[6]=r.streamID>>>8,e[7]=r.streamID,e[8]=r.length>>>24,e[9]=r.length>>>16,e[10]=r.length>>>8,e[11]=r.length,e}var Jt;(function(r){r[r.Init=0]="Init",r[r.SYNSent=1]="SYNSent",r[r.SYNReceived=2]="SYNReceived",r[r.Established=3]="Established",r[r.Finished=4]="Finished",r[r.Paused=5]="Paused"})(Jt||(Jt={}));var dp=class extends Bo{streamId;state;sendWindowCapacity;recvWindow;recvWindowCapacity;maxStreamWindowSize;epochStart;getRTT;sendFrame;constructor(e){let t=e.initialStreamWindowSize??Yl;super({...e,maxMessageSize:t-_n}),this.streamId=e.streamId,this.state=e.state,this.sendWindowCapacity=t,this.recvWindow=t,this.recvWindowCapacity=this.recvWindow,this.maxStreamWindowSize=e.maxStreamWindowSize??lp,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame;let n=()=>{this.state=Jt.Finished};this.addEventListener("close",n)}sendData(e){let t=e.byteLength,n=0,o=!0;for(this.log?.trace("send window capacity is %d bytes",this.sendWindowCapacity);e.byteLength>0;){if(this.sendWindowCapacity===0){o=!1,this.log?.trace("sent %d/%d bytes, exhausted send window, waiting for window update",n,t);break}let s=Math.min(this.sendWindowCapacity,e.byteLength),i=this.getSendFlags(),a=e.sublist(0,s);e.consume(s);let c=this.sendFrame({type:je.Data,flag:i,streamID:this.streamId,length:s},a);if(this.sendWindowCapacity-=s,n+=s,!c){o=c,this.log.trace("sent %d/%d bytes, wait for muxer to have more send capacity",n,t);break}}return{sentBytes:n,canSendMore:o}}sendReset(){this.sendFrame({type:je.WindowUpdate,flag:Se.RST,streamID:this.streamId,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|Se.FIN;this.sendFrame({type:je.WindowUpdate,flag:e,streamID:this.streamId,length:0})}async sendCloseRead(e){e?.signal?.throwIfAborted()}sendPause(){this.state=Jt.Paused}sendResume(){this.state=Jt.Established,this.sendWindowUpdate()}handleWindowUpdate(e){this.processFlags(e.header.flag),this.sendWindowCapacity+=e.header.length,this.maxMessageSize=this.sendWindowCapacity-_n,this.maxMessageSize<0&&(this.maxMessageSize=0),this.maxMessageSize!==0&&this.writeBuffer.byteLength>0&&(this.log?.trace("window update of %d bytes allows more data to be sent, have %d bytes queued, sending data %s",e.header.length,this.writeBuffer.byteLength,this.sendingData),this.safeDispatchEvent("drain"))}handleData(e){if(!bE(e))throw new Sr("Frame was not data frame");if(this.processFlags(e.header.flag),this.recvWindowCapacity<e.header.length)throw new Ma("Receive window exceeded");this.recvWindowCapacity-=e.header.length,this.onData(e.data),this.sendWindowUpdate()}processFlags(e){(e&Se.ACK)===Se.ACK&&this.state===Jt.SYNSent&&(this.state=Jt.Established),(e&Se.FIN)===Se.FIN&&this.onRemoteCloseWrite(),(e&Se.RST)===Se.RST&&this.onRemoteReset()}getSendFlags(){switch(this.state){case Jt.Init:return this.state=Jt.SYNSent,Se.SYN;case Jt.SYNReceived:return this.state=Jt.Established,Se.ACK;default:return 0}}sendWindowUpdate(){if(this.state===Jt.Paused){this.epochStart=Date.now();return}let e=this.getSendFlags(),t=Date.now(),n=this.getRTT();if(e===0&&n>-1&&t-this.epochStart<=n*4&&(this.recvWindow=Math.min(this.recvWindow*2,this.maxStreamWindowSize)),this.recvWindowCapacity>=this.recvWindow&&e===0)return;let o=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:je.WindowUpdate,flag:e,streamID:this.streamId,length:o})}};function EE(r){return{type:je[r.type],flags:[(r.flag&Se.SYN)===Se.SYN?"SYN":void 0,(r.flag&Se.ACK)===Se.ACK?"ACK":void 0,(r.flag&Se.FIN)===Se.FIN?"FIN":void 0,(r.flag&Se.RST)===Se.RST?"RST":void 0].filter(Boolean),streamID:r.streamID,length:r.length}}var xE="/yamux/1.0.0",fp=class{protocol=xE;_init;constructor(e={}){this._init=e}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[me]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new I4(e,{...this._init})}},I4=class extends Mo{nextStreamID;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;decoder;keepAlive;enableKeepAlive;keepAliveInterval;maxInboundStreams;maxOutboundStreams;constructor(e,t={}){super(e,{...t,protocol:xE,name:"yamux"}),this.client=e.direction==="outbound",yE(t),this.enableKeepAlive=t.enableKeepAlive??jl.enableKeepAlive,this.keepAliveInterval=t.keepAliveInterval??jl.keepAliveInterval,this.maxInboundStreams=t.maxInboundStreams??jl.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??jl.maxOutboundStreams,this.decoder=new up,this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log.trace("muxer created"),this.enableKeepAlive&&(this.log.trace("muxer keepalive enabled interval=%s",this.keepAliveInterval),this.keepAlive=oa(async n=>{try{await this.ping(n)}catch(o){this.log.error("ping error: %s",o)}},this.keepAliveInterval,{runImmediately:!0}),this.keepAlive.start())}onData(e){for(let t of this.decoder.emitFrames(e))this.handleFrame(t)}onCreateStream(){if(this.remoteGoAway!==void 0)throw new Br("Muxer closed remotely");if(this.localGoAway!==void 0)throw new Br("Muxer closed locally");let e=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.maxOutboundStreams)throw new mi("max outbound streams exceeded");this.log.trace("new outgoing stream id=%s",e);let t=this._newStream(e,Jt.Init,"outbound");return this.numOutboundStreams++,queueMicrotask(()=>{t.sendWindowUpdate()}),t}async ping(e){if(this.remoteGoAway!==void 0)throw new Br("Muxer closed remotely");if(this.localGoAway!==void 0)throw new Br("Muxer closed locally");if(this.activePing!=null)return Pe(this.activePing.promise,e?.signal);this.activePing=Object.assign(Promise.withResolvers(),{id:this.nextPingID++,start:Date.now()}),this.sendPing(this.activePing.id);try{this.rtt=await Pe(this.activePing.promise,e?.signal)}finally{this.activePing=void 0}return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.status==="open")try{let t=e?.reason??ct.NormalTermination;this.log.trace("muxer close reason=%s",ct[t]),await super.close(e),this.sendGoAway(t)}finally{this.keepAlive?.stop()}}abort(e){if(this.status==="open")try{super.abort(e);let t=ct.InternalError;gE(e)&&(t=e.reason),this.log.error("muxer abort reason=%s error=%s",t,e),this.sendGoAway(t)}finally{this.keepAlive?.stop()}}onTransportClosed(){try{super.onTransportClosed()}finally{this.keepAlive?.stop()}}_newStream(e,t,n){if(this.streams.find(s=>s.streamId===e)!=null)throw new A("Stream already exists with that id");let o=new dp({...this.streamOptions,id:`${e}`,streamId:e,state:t,direction:n,sendFrame:this.sendFrame.bind(this),log:this.log.newScope(`${n}:${e}`),getRTT:this.getRTT.bind(this)});return o.addEventListener("close",()=>{this.closeStream(e)},{once:!0}),o}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--}handleFrame(e){let{streamID:t,type:n,length:o}=e.header;if(this.log.trace("received frame %o",EE(e.header)),t===0)switch(n){case je.Ping:{this.handlePing(e.header);return}case je.GoAway:{this.handleGoAway(o);return}default:throw new Sr("Invalid frame type")}else switch(e.header.type){case je.Data:case je.WindowUpdate:{this.handleStreamMessage(e);return}default:throw new Sr("Invalid frame type")}}handlePing(e){if(e.flag===Se.SYN)this.log.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,Se.ACK);else if(e.flag===Se.ACK)this.log.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new Sr("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new Na("ping not requested");if(this.activePing.id!==e)throw new Oa("ping doesn't match our id");this.activePing.resolve(Date.now()-this.activePing.start)}handleGoAway(e){this.log.trace("received GoAway reason=%s",ct[e]??"unknown"),this.remoteGoAway=e,e===ct.NormalTermination?this.onTransportClosed():this.abort(new Error("Remote sent GoAway"))}handleStreamMessage(e){let{streamID:t,flag:n,type:o}=e.header;(n&Se.SYN)===Se.SYN&&this.incomingStream(t);let s=this.streams.find(i=>i.streamId===t);if(s===void 0){this.log.trace("frame for missing stream id=%s",t);return}switch(o){case je.WindowUpdate:{s.handleWindowUpdate(e);return}case je.Data:{s.handleData(e);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new A("Both endpoints are clients");if(this.streams.find(n=>n.streamId===e))return;if(this.log.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:je.WindowUpdate,flag:Se.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.maxInboundStreams){this.log("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:je.WindowUpdate,flag:Se.RST,streamID:e,length:0});return}let t=this._newStream(e,Jt.SYNReceived,"inbound");this.numInboundStreams++,this.onRemoteStream(t)}sendFrame(e,t){let n;if(e.type===je.Data){if(t==null)throw new Sr("Invalid frame");n=new X(A4(e),t)}else n=A4(e);return this.log.trace("sending frame %o",EE(e)),this.send(n)}sendPing(e,t=Se.SYN){t===Se.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=ct.NormalTermination){this.log("sending GoAway reason=%s",ct[e]),this.localGoAway=e,this.sendFrame({type:je.GoAway,flag:0,streamID:0,length:e})}};function vE(r={}){return()=>new fp(r)}var SE="libp2p",AE="autonat",IE="1.0.0";var Ve;(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=()=>We(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=()=>We(o)})(n=r.ResponseStatus||(r.ResponseStatus={}));let s;(function(l){let d;l.codec=()=>(d==null&&(d=ne((u,f,h={})=>{if(h.lengthDelimited!==!1&&f.fork(),u.id!=null&&(f.uint32(10),f.bytes(u.id)),u.addrs!=null)for(let p of u.addrs)f.uint32(18),f.bytes(p);h.lengthDelimited!==!1&&f.ldelim()},(u,f,h={})=>{let p={addrs:[]},g=f==null?u.len:u.pos+f;for(;u.pos<g;){let m=u.uint32();switch(m>>>3){case 1:{p.id=u.bytes();break}case 2:{if(h.limits?.addrs!=null&&p.addrs.length===h.limits.addrs)throw new Ne('Decode error - map field "addrs" had too many elements');p.addrs.push(u.bytes());break}default:{u.skipType(m&7);break}}}return p})),d),l.encode=u=>re(u,l.codec()),l.decode=(u,f)=>te(u,l.codec(),f)})(s=r.PeerInfo||(r.PeerInfo={}));let i;(function(l){let d;l.codec=()=>(d==null&&(d=ne((u,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),u.peer!=null&&(f.uint32(10),r.PeerInfo.codec().encode(u.peer,f)),h.lengthDelimited!==!1&&f.ldelim()},(u,f,h={})=>{let p={},g=f==null?u.len:u.pos+f;for(;u.pos<g;){let m=u.uint32();switch(m>>>3){case 1:{p.peer=r.PeerInfo.codec().decode(u,u.uint32(),{limits:h.limits?.peer});break}default:{u.skipType(m&7);break}}}return p})),d),l.encode=u=>re(u,l.codec()),l.decode=(u,f)=>te(u,l.codec(),f)})(i=r.Dial||(r.Dial={}));let a;(function(l){let d;l.codec=()=>(d==null&&(d=ne((u,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),u.status!=null&&(f.uint32(8),r.ResponseStatus.codec().encode(u.status,f)),u.statusText!=null&&(f.uint32(18),f.string(u.statusText)),u.addr!=null&&(f.uint32(26),f.bytes(u.addr)),h.lengthDelimited!==!1&&f.ldelim()},(u,f,h={})=>{let p={},g=f==null?u.len:u.pos+f;for(;u.pos<g;){let m=u.uint32();switch(m>>>3){case 1:{p.status=r.ResponseStatus.codec().decode(u);break}case 2:{p.statusText=u.string();break}case 3:{p.addr=u.bytes();break}default:{u.skipType(m&7);break}}}return p})),d),l.encode=u=>re(u,l.codec()),l.decode=(u,f)=>te(u,l.codec(),f)})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=ne((l,d,u={})=>{u.lengthDelimited!==!1&&d.fork(),l.type!=null&&(d.uint32(8),r.MessageType.codec().encode(l.type,d)),l.dial!=null&&(d.uint32(18),r.Dial.codec().encode(l.dial,d)),l.dialResponse!=null&&(d.uint32(26),r.DialResponse.codec().encode(l.dialResponse,d)),u.lengthDelimited!==!1&&d.ldelim()},(l,d,u={})=>{let f={},h=d==null?l.len:l.pos+d;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:u.limits?.dial});break}case 3:{f.dialResponse=r.DialResponse.codec().decode(l,l.uint32(),{limits:u.limits?.dialResponse});break}default:{l.skipType(p&7);break}}}return f})),c),r.encode=l=>re(l,r.codec()),r.decode=(l,d)=>te(l,r.codec(),d)})(Ve||(Ve={}));var gL=4,yL=8,hp=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??SE}/${AE}/${IE}`,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=ot({name:"libp2p_autonat_dial_results",metrics:e.metrics}),this.findPeers=oa(this.findRandomPeers.bind(this),6e4),this.addressFilter=Et(1024)}[Symbol.toStringTag]="@libp2p/autonat";[me]=["@libp2p/autonat"];get[ur](){return["@libp2p/identify"]}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,(e,t)=>{this.handleIncomingAutonatStream(e,t).catch(n=>{this.log.error("error handling incoming autonat stream - %e",n)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.topologyId=await this.components.registrar.register(this.protocol,{onConnect:(e,t)=>{this.verifyExternalAddresses(t).catch(n=>{this.log.error("could not verify addresses - %e",n)})}}),this.findPeers.start(),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),this.topologyId!=null&&await this.components.registrar.unhandle(this.topologyId),this.dialResults.clear(),this.findPeers.stop(),this.started=!1}allAddressesAreVerified(){return this.components.addressManager.getAddressesWithMetadata().every(e=>e.expires>Date.now()?!0:e.verified)}async findRandomPeers(e){if(this.allAddressesAreVerified())return;let t=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,t){let n=AbortSignal.timeout(this.timeout);try{let o=Ue(e,{maxDataLength:this.maxMessageSize}).pb(Ve),s=await o.read({signal:n}),i=await this.handleAutonatMessage(s,t,{signal:n});await o.write(i,{signal:n}),await e.close({signal:n})}catch(o){this.log.error("error handling incoming autonat stream - %e",o),e.abort(o)}}async handleAutonatMessage(e,t,n){let o=this.components.addressManager.getAddresses().map(u=>oe(u).host),s=e.dial;if(s==null)return this.log.error("dial was missing from message"),{type:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}};let i,a=s.peer;if(a?.id==null)return this.log.error("peerId missing from message"),{type:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let u=ke(a.id);i=Ze(u)}catch(u){return this.log.error("invalid PeerId - %e",u),{type:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}}}if(this.log("incoming request from %p",i),!t.remotePeer.equals(i))return this.log("target peer %p did not equal sending peer %p",i,t.remotePeer),{type:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(u=>q(u)).filter(u=>{try{let f=oe(u);return Qe(u)?!1:f.host!==oe(t.remoteAddr).host?(this.log.trace("not dialing %a - target host did not match remote host %a",u,t.remoteAddr),!1):o.includes(f.host)?!1:this.components.transportManager.dialTransportForMultiaddr(u)==null?(this.log.trace("not dialing %a - transport unsupported",u),!1):!0}catch{return!1}}).map(u=>(u.getComponents().find(f=>f.code===421)?.value==null&&(u=u.encapsulate(`/p2p/${i.toString()}`)),u));if(c.length===0)return this.log("refused to dial all multiaddrs for %p from message",i),{type:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}};this.log("dial multiaddrs %s for peer %p",c.map(u=>u.toString()).join(", "),i);let l="",d=c[0];for(let u of c){let f;d=u;try{if(f=await this.components.connectionManager.openConnection(u,n),!f.remoteAddr.equals(u))throw this.log.error("tried to dial %a but dialed %a",u,f.remoteAddr),new Error("Unexpected remote address");return this.log("successfully dialed %p via %a",i,u),{type:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.ResponseStatus.OK,addr:f.remoteAddr.decapsulateCode(421).bytes}}}catch(h){this.log.error("could not dial %p - %e",i,h),l=h.message}finally{f!=null&&await f.close()}}return{type:Ve.MessageType.DIAL_RESPONSE,dialResponse:{status:Ve.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:d.bytes}}}getFirstUnverifiedMultiaddr(e,t){let n=this.components.addressManager.getAddressesWithMetadata().sort((o,s)=>o.type==="observed"&&s.type!=="observed"?1:s.type==="observed"&&o.type!=="observed"?-1:0).filter(o=>!(!(o.expires<Date.now())||oe(o.multiaddr).type==="ip6"&&(!t||!dd(o.multiaddr))||Qe(o.multiaddr)));for(let o of n){let s=o.multiaddr.toString(),i=this.dialResults.get(s);if(i!=null){if(i.networkSegments.includes(e)){this.log.trace("%a already has a network segment result from %s",i.multiaddr,e);continue}if(i.queue.size>10){this.log.trace("%a already has enough peers queued",i.multiaddr);continue}}if(i==null){let a=o.expires<Date.now();if(a&&this.addressFilter.remove?.(s),this.addressFilter.has(s))continue;this.addressFilter.add(s),this.log.trace("creating dial result %s %s",a?"to revalidate":"for",s),i={multiaddr:o.multiaddr,success:0,failure:0,networkSegments:[],verifyingPeers:Qg(),queue:new It({concurrency:3,maxSize:50}),type:o.type,lastVerified:o.lastVerified},this.dialResults.set(s,i)}return i}}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:i})=>oe(i).type==="ip6"),o=this.getNetworkSegment(e.remoteAddr),s=this.getFirstUnverifiedMultiaddr(o,n);if(s==null){this.log.trace("no unverified public addresses found for peer %p to verify, not requesting verification",e.remotePeer);return}if(!this.hasConnectionCapacity()){s.lastVerified!=null?(this.log("automatically re-verifying %a because we are too close to the connection limit",s.multiaddr),this.confirmAddress(s)):this.log("skipping verifying %a because we are too close to the connection limit",s.multiaddr);return}s.queue.add(async i=>{await this.askPeerToVerify(e,o,i)},{peerId:e.remotePeer,multiaddr:s.multiaddr}).catch(i=>{s?.result==null&&this.log.error("error from %p verifying address %a - %e",e.remotePeer,s?.multiaddr,i)})}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 s=AbortSignal.timeout(this.timeout);this.log.trace("asking %a to verify multiaddr %s",e.remoteAddr,n.multiaddr);let i=await e.newStream(this.protocol,{signal:s});try{let a=Ue(i).pb(Ve),[,c]=await Promise.all([a.write({type:Ve.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:[n.multiaddr.bytes]}}},{signal:s}),a.read({signal:s})]);if(c.type!==Ve.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!==Ve.ResponseStatus.OK&&l!==Ve.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===Ve.ResponseStatus.OK){if(o.success++,o.type!=="observed"){this.confirmAddress(o);return}}else l===Ve.ResponseStatus.E_DIAL_ERROR&&o.failure++;this.log("%a success %d failure %d",o.multiaddr,o.success,o.failure),o.success===gL&&this.confirmAddress(o),o.failure===yL&&this.unconfirmAddress(o)}finally{try{await i.close({signal:s})}catch(a){i.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=oe(e);switch(t.type){case"ip4":return t.host.split(".")[0].padStart(3,"0");case"ip6":return t.host.split(":")[0].padStart(4,"0");default:throw new A(`Remote address ${e} was not an IPv4 or Ipv6 address`)}}};function TE(r={}){return e=>new hp(e,r)}var wL="bootstrap",bL=50,EL=1e3,T4=class extends ie{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??EL,this.list=t.list.map(n=>q(n)).filter(n=>pa.matches(n)?n.getComponents().findLast(s=>s.code===421)?.value==null?(this.log.error("invalid bootstrap multiaddr without peer id"),!1):!0:(this.log.error("invalid multiaddr %a",n),!1)).map(n=>({id:Me(n.getComponents().findLast(o=>o.code===421)?.value??""),multiaddrs:[n]})),this._init=t}[ls]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[me]=["@libp2p/peer-discovery"];isStarted(){return!!this.timer}start(){this.isStarted()||(this.log("Starting bootstrap node discovery, discovering peers after %s ms",this.timeout),this.timer=setTimeout(()=>{this._discoverBootstrapPeers().catch(e=>{this.log.error("failed to discover bootstrap peers - %e",e)})},this.timeout))}async _discoverBootstrapPeers(){if(this.timer!=null)for(let e of this.list){if(await this.components.peerStore.merge(e.id,{tags:{[this._init.tagName??wL]:{value:this._init.tagValue??bL,ttl:this._init.tagTTL}},multiaddrs:e.multiaddrs}),this.timer==null)return;this.safeDispatchEvent("peer",{detail:e}),this.components.connectionManager.openConnection(e.id).catch(t=>{this.log.error("could not dial bootstrap peer %p - %e",e.id,t)})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function _E(r){return e=>new T4(e,r)}var _4=1e3,CE=60*_4;var tle=120*CE,kE=1,pp=5e3,PE=100;var Xl=`${us}-circuit-relay`,rle=2*CE,nle=BigInt(1<<17),ii="/libp2p/circuit/relay/0.2.0/hop",C4="/libp2p/circuit/relay/0.2.0/stop",ole=30*_4,sle=30*_4,k4=300,RE=4096,LE=.001;var jo;(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=()=>We(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.peer!=null&&(s.uint32(18),Ba.codec().encode(o.peer,s)),o.reservation!=null&&(s.uint32(26),mp.codec().encode(o.reservation,s)),o.limit!=null&&(s.uint32(34),Ua.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(40),kt.codec().encode(o.status,s)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={},c=s==null?o.len:o.pos+s;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=Ba.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.reservation=mp.codec().decode(o,o.uint32(),{limits:i.limits?.reservation});break}case 4:{a.limit=Ua.codec().decode(o,o.uint32(),{limits:i.limits?.limit});break}case 5:{a.status=kt.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(jo||(jo={}));var Cn;(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=()=>We(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.peer!=null&&(s.uint32(18),Ba.codec().encode(o.peer,s)),o.limit!=null&&(s.uint32(26),Ua.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(32),kt.codec().encode(o.status,s)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={},c=s==null?o.len:o.pos+s;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=Ba.codec().decode(o,o.uint32(),{limits:i.limits?.peer});break}case 3:{a.limit=Ua.codec().decode(o,o.uint32(),{limits:i.limits?.limit});break}case 4:{a.status=kt.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(Cn||(Cn={}));var Ba;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s of t.addrs)n.uint32(18),n.bytes(s);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={id:ae(0),addrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.id=t.bytes();break}case 2:{if(o.limits?.addrs!=null&&s.addrs.length===o.limits.addrs)throw new Ne('Decode error - map field "addrs" had too many elements');s.addrs.push(t.bytes());break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ba||(Ba={}));var mp;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s of t.addrs)n.uint32(18),n.bytes(s);t.voucher!=null&&(n.uint32(26),yp.codec().encode(t.voucher,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={expire:0n,addrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.expire=t.uint64();break}case 2:{if(o.limits?.addrs!=null&&s.addrs.length===o.limits.addrs)throw new Ne('Decode error - map field "addrs" had too many elements');s.addrs.push(t.bytes());break}case 3:{s.voucher=yp.codec().decode(t,t.uint32(),{limits:o.limits?.voucher});break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(mp||(mp={}));var Ua;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.duration=t.uint32();break}case 2:{s.data=t.uint64();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ua||(Ua={}));var kt;(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"})(kt||(kt={}));var P4;(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"})(P4||(P4={}));(function(r){r.codec=()=>We(P4)})(kt||(kt={}));var gp;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={relay:ae(0),peer:ae(0),expiration:0n},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.relay=t.bytes();break}case 2:{s.peer=t.bytes();break}case 3:{s.expiration=t.uint64();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(gp||(gp={}));var yp;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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),gp.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 s={publicKey:ae(0),payloadType:ae(0),signature:ae(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.publicKey=t.bytes();break}case 2:{s.payloadType=t.bytes();break}case 3:{s.payload=gp.codec().decode(t,t.uint32(),{limits:o.limits?.payload});break}case 5:{s.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(yp||(yp={}));var Ql=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},wp=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},bp=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function R4(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var Zl=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}},Ep=Ce(ve(pa.matchers[0],_e(290))),xp=Ce(_e(290));var vp=class extends ie{components;started;running;topologyId;log;discoveryController;filter;queue;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.components=e,this.started=!1,this.running=!1,this.filter=t.filter,this.discoveryController=new AbortController,this.discoveryController.signal,this.dialPeer=this.dialPeer.bind(this),this.onPeer=this.onPeer.bind(this)}isStarted(){return this.started}async start(){this.topologyId=await this.components.registrar.register(ii,{filter:this.filter,onConnect:e=>{this.log.trace("discovered relay %p queue (length: %d, active %d)",e,this.queue?.size,this.queue?.running),this.safeDispatchEvent("relay:discover",{detail:e})}}),this.started=!0}stop(){this.topologyId!=null&&this.components.registrar.unregister(this.topologyId),this.running&&this.stopDiscovery(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,this.discoveryController.signal,this.components.events.addEventListener("peer:discovery",this.onPeer),Promise.resolve().then(async()=>{this.log("searching peer store for relays");let e=await this.components.peerStore.all({filters:[n=>n.protocols.includes(ii)],orders:[()=>Math.random()<.5?1:-1,(n,o)=>{let s=DE(n),i=DE(o);return s>i?-1:i>s?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 It({concurrency:5});this.log("start random walk");for await(let n of this.components.randomWalk.walk({signal:this.discoveryController.signal})){if(this.log.trace("found random peer %p",n.id),t.has(n.id)){this.log.trace("random peer %p was already in queue",n.id);continue}if(this.components.connectionManager.getConnections(n.id)?.length>0){this.log.trace("random peer %p was already connected",n.id);continue}if(!await this.components.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable",n.id,n.multiaddrs.map(o=>o.toString()));continue}t.queued>10&&(this.log.trace("wait for space in queue for %p",n.id),await t.onSizeLessThan(10,{signal:this.discoveryController.signal})),this.log("adding random peer %p to dial queue (length: %d, active %d)",n.id,t.size,t.running),t.add(this.dialPeer,{peerId:n.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to random peer %p - %e",n.id,o)})}this.log("stop random walk"),await t.onIdle()}).catch(e=>{this.discoveryController.signal.aborted||this.log.error("failed when finding relays on the network - %e",e)}))}stopDiscovery(){this.log("stop discovery"),this.running=!1,this.discoveryController?.abort(),this.queue?.clear(),this.components.events.removeEventListener("peer:discovery",this.onPeer)}onPeer(e){this.log.trace("maybe dialing discovered peer %p",e.detail.id),this.maybeDialPeer(e).catch(t=>{this.log.trace("error dialing discovered peer %p - %e",e.detail.id,t)})}async maybeDialPeer(e){if(this.queue==null)return;let t=e.detail.id,n=e.detail.multiaddrs;if(this.queue.has(t)){this.log.trace("random peer %p was already in queue",t);return}if(this.components.connectionManager.getConnections(t)?.length>0){this.log.trace("random peer %p was already connected",t);return}if(!await this.components.connectionManager.isDialable(n)){this.log.trace("random peer %p was not dialable",t);return}this.queue?.add(this.dialPeer,{peerId:e.detail.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to discovered peer %p - %e",e.detail.id,o)})}async dialPeer({peerId:e,signal:t}){let n=le([AbortSignal.timeout(5e3),t]);try{await this.components.connectionManager.openConnection(e,{signal:n})}finally{n.clear()}}};function DE(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(R(e)).getTime()}var L4=class extends ie{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??pp,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(xp.exactMatch(e))this.log("searching for circuit relay servers"),this.reservationId=this.reservationStore.reserveRelay();else if(Ep.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 s=await this.reservationStore.addRelay(o.remotePeer,"configured");this.addedRelay(s)}}else throw new cs(`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=>q(t).encapsulate("/p2p-circuit")),this.listeningAddrs.forEach(t=>{this.addressManager.confirmObservedAddr(t,{type:"transport"})}),queueMicrotask(()=>{this.safeDispatchEvent("listening")})}};function NE(r){return new L4(r)}var OE="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var ME=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=OE[t[r]&63];return e};var xL=60*1e3*10,vL=60*1e3*5,SL=30*1e3,Sp=class extends ie{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 Ut,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??PE,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??pp,this.started=!1,this.relayFilter=Et(100),this.reserveQueue=new It({concurrency:t?.reservationConcurrency??kE,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("connection:close",n=>{[...this.reservations.values()].find(s=>s.connection===n.detail.id)!=null&&this.#t(n.detail.remotePeer).catch(s=>{this.log("could not remove relay %p - %e",n.detail,s)})})}isStarted(){return this.started}start(){this.started=!0}afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(Xl)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[Xl]:void 0}})})),this.log("redialing %d old relays",e.length),await Promise.all(e.map(async t=>this.addRelay(t.id,"discovered"))),this.#r()}).catch(e=>{this.log.error("failed to clean up and redial old relays during afterStart - %e",e)})}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}reserveRelay(){let e=ME();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 cs("Cannot use self as relay");if(this.reserveQueue.size>this.maxReservationQueueLength)throw new bp("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 cs("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 s=this.reservations.get(e);if(s!=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(s.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),g=!0),g&&R4(s.reservation.expire)>xL)return this.log("already have relay reservation with %p but we are still connected and it does not expire soon",e),{relay:e,details:s};await this.#t(e)}if(t==="discovered"&&this.pendingReservations.length===0)throw new Ql("Not making reservation on discovered relay because we do not need any more relays");let i=AbortSignal.timeout(this.reservationCompletionTimeout);let a=await this.connectionManager.openConnection(e,{signal:i});if(yt.matches(a.remoteAddr))throw new wp("not creating reservation over relayed connection");let c=await this.#e(a,{signal:i}),l=R4(c.expire);this.log("created reservation on relay peer %p, expiry date is %s",e,new Date(Date.now()+l).toString());let d=Math.min(Math.max(l-vL,SL),Math.pow(2,31)-1),u=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)})},d),f;if(t==="discovered"){let p=this.pendingReservations.pop();if(p==null)throw new Ql("Made reservation on relay but did not need any more discovered relays");f={timeout:u,reservation:c,type:t,connection:a.id,id:p}}else f={timeout:u,reservation:c,type:t,connection:a.id};this.reservations.set(e,f),await this.peerStore.merge(e,{tags:{[Xl]:{value:1,ttl:l}}}),this.#r();let h={relay:e,details:f};return this.safeDispatchEvent("relay:created-reservation",{detail:h}),h}catch(s){throw t==="discovered"&&s.name==="HadEnoughRelaysError"||this.log.error("could not reserve slot on %p after %dms - %e",e,Date.now()-o,s),(s.name==="DialError"||s.name==="UnsupportedProtocolError")&&this.relayFilter.add(e.toMultihash().bytes),this.#t(e).catch(i=>{this.log.error("could not remove reservation on %p after reserving slot failed - %e",e,i)}),s}},{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(ii,t),s=Ue(n).pb(jo);this.log.trace("send RESERVE to %p",e.remotePeer),await s.write({type:jo.Type.RESERVE},t);let i;try{this.log.trace("reading response from %p",e.remotePeer),i=await s.read(t)}catch(c){throw n.abort(c),c}finally{n.status!=="closed"&&await n.close(t)}if(this.log.trace("read response %s",i.status),i.status===kt.OK&&i.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of i.reservation.addrs){let d=q(l);d.getComponents().find(u=>u.code===421)==null&&(d=d.encapsulate(`/p2p/${e.remotePeer}`)),d=q(d.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(d.toString())}return i.reservation.addrs=[...c].map(l=>q(l).bytes),i.reservation}let a=`reservation failed with status ${i.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:{[Xl]: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=Et(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var D4=class extends Oo{stream;init;constructor(e){super({...e,direction:e.stream.direction}),this.init=e,this.stream=e.stream,this.stream.addEventListener("close",t=>{this.onTransportClosed(t.error)}),this.stream.addEventListener("remoteCloseWrite",t=>{this.onRemoteCloseWrite(),this.close().catch(n=>{this.abort(n)})}),this.stream.addEventListener("message",t=>{e.onDataRead?.(t.data),this.onData(t.data)}),this.stream.addEventListener("drain",()=>{this.safeDispatchEvent("drain")})}sendData(e){return this.init.onDataWrite?.(e),{sentBytes:e.byteLength,canSendMore:this.stream.send(e)}}async sendClose(e){await this.stream.close(e)}sendReset(){this.stream.abort(new Error("An error occurred"))}sendPause(){this.stream.pause()}sendResume(){this.stream.resume()}};function N4(r){return new D4(r)}var AL=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(q)}catch{return!1}return!0},BE={maxInboundStopStreams:k4,maxOutboundStopStreams:k4,stopTimeout:3e4},Ap=class{components;discovery;reservationStore;maxInboundStopStreams;maxOutboundStopStreams;started;log;shutdownController;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.maxInboundStopStreams=t.maxInboundStopStreams??BE.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??BE.maxOutboundStopStreams,this.shutdownController=new AbortController,this.discovery=new vp(e,{filter:t.discoveryFilter??Zg(RE,LE)}),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(o=>{o.name!=="HadEnoughRelaysError"&&o.name!=="RelayQueueFullError"&&this.log.error("could not add discovered relay %p - %e",n.detail,o)})}),this.reservationStore=new Sp(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.startDiscovery()}),this.reservationStore.addEventListener("relay:found-enough-relays",()=>{this.discovery?.stopDiscovery()}),this.started=!1,this.onStop=this.onStop.bind(this)}[Symbol.toStringTag]="@libp2p/circuit-relay-v2-transport";[me]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[ur](){return this.discovery!=null?["@libp2p/identify"]:[]}[vo]=!0;isStarted(){return this.started}async start(){this.shutdownController=new AbortController,this.shutdownController.signal,await this.components.registrar.handle(C4,this.onStop,{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await at(this.discovery,this.reservationStore),this.started=!0}async stop(){this.shutdownController.abort(),await lt(this.discovery,this.reservationStore),await this.components.registrar.unhandle(C4),this.started=!1}async dial(e,t){let n=e.toString().split("/p2p-circuit"),o=q(n[0]),s=q(n[n.length-1]),i=o.getComponents().find(h=>h.code===421)?.value,a=s.getComponents().find(h=>h.code===421)?.value;if(i==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 Eo(`C${h}`)}let c=Me(i),l=Me(a),u=this.components.connectionManager.getConnections(c)[0];u==null?(await this.components.peerStore.merge(c,{multiaddrs:[o]}),t.onProgress?.(new H("circuit-relay:open-connection")),u=await this.components.connectionManager.openConnection(c,t)):t.onProgress?.(new H("circuit-relay:reuse-connection"));let f;try{t.onProgress?.(new H("circuit-relay:open-hop-stream")),f=await u.newStream(ii,t);let h=Ue(f).pb(jo);t.onProgress?.(new H("circuit-relay:write-connect-message")),await h.write({type:jo.Type.CONNECT,peer:{id:l.toMultihash().bytes,addrs:[q(s).bytes]}},t),t.onProgress?.(new H("circuit-relay:read-connect-response"));let p=await h.read(t);if(p.status!==kt.OK)throw new de(`failed to connect via relay with status ${p?.status?.toString()??"undefined"}`);let g=new Zl(p.limit),m=N4({stream:h.unwrap().unwrap(),remoteAddr:e,localAddr:o.encapsulate(`/p2p-circuit/p2p/${this.components.peerId.toString()}`),onDataRead:g.onData,onDataWrite:g.onData,log:f.log.newScope("circuit-relay:connection")}),w=await this.components.upgrader.upgradeOutbound(m,{...t,limits:g.getLimits()});return w.log("outbound relayed connection established to %p with limits %o, over connection %s",w.remotePeer,p.limit??"none",u.id),w}catch(h){throw this.log.error("circuit relay dial to destination %p via relay %p failed - %e",l,c,h),f?.abort(h),h}}createListener(e){return NE({peerId:this.components.peerId,connectionManager:this.components.connectionManager,addressManager:this.components.addressManager,reservationStore:this.reservationStore,logger:this.components.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>Ep.exactMatch(t)||xp.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>yt.exactMatch(t))}async onStop(e,t){let n=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);try{if(!this.reservationStore.hasReservation(t.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.components.transportManager.listen([t.remoteAddr.encapsulate("/p2p-circuit")])}catch(u){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on - %e",u)}let o=Ue(e).pb(Cn),s=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",t.remotePeer,s.type),s?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",t.remotePeer),await o.write({type:Cn.Type.STATUS,status:kt.MALFORMED_MESSAGE},{signal:n}),await e.close({signal:n});return}if(s.type!==Cn.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",t.remotePeer),await o.write({type:Cn.Type.STATUS,status:kt.UNEXPECTED_MESSAGE},{signal:n}),await e.close({signal:n});return}if(!AL(s)){this.log.error("invalid stop connect request via peer %p",t.remotePeer),await o.write({type:Cn.Type.STATUS,status:kt.MALFORMED_MESSAGE},{signal:n}),await e.close({signal:n});return}let i=Ze(ke(s.peer.id));if(await this.components.connectionGater.denyInboundRelayedConnection?.(t.remotePeer,i)===!0){this.log.error("connection gater denied inbound relayed connection from %p",t.remotePeer),await o.write({type:Cn.Type.STATUS,status:kt.PERMISSION_DENIED},{signal:n}),await e.close({signal:n});return}this.log.trace("sending success response to %p",t.remotePeer),await o.write({type:Cn.Type.STATUS,status:kt.OK},{signal:n});let a=new Zl(s.limit),c=t.remoteAddr.encapsulate(`/p2p-circuit/p2p/${i.toString()}`),l=this.components.addressManager.getAddresses()[0],d=N4({stream:o.unwrap().unwrap(),remoteAddr:c,localAddr:l,onDataRead:a.onData,onDataWrite:a.onData,log:e.log.newScope("circuit-relay:connection")});await this.components.upgrader.upgradeInbound(d,{limits:a.getLimits(),signal:n}),d.log("inbound relayed connection established to %p with limits %o, over connection %s",i,s.limit??"none",t.id)}finally{n?.clear()}}};function UE(r={}){return e=>new Ap(e,r)}var on;(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=()=>We(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{if(i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.observedAddresses!=null)for(let a of o.observedAddresses)s.uint32(18),s.bytes(a);i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={observedAddresses:[]},c=s==null?o.len:o.pos+s;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{if(i.limits?.observedAddresses!=null&&a.observedAddresses.length===i.limits.observedAddresses)throw new Ne('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=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(on||(on={}));function O4(r,e){return yt.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:jf.matches(r)?!0:O9.matches(r)?!Qe(r):!1}var FE=1024*4,$E=100,Ip={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},Tp=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??Ip.timeout,this.retries=t.retries??Ip.retries,this.maxInboundStreams=t.maxInboundStreams??Ip.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Ip.maxOutboundStreams,this.handleIncomingUpgrade=this.handleIncomingUpgrade.bind(this)}[Symbol.toStringTag]="@libp2p/dcutr";[ur]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Jl,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{yt.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt - %e",n)})}}),await this.registrar.handle(Jl,this.handleIncomingUpgrade,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(Jl),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([Jl],{signal:o.signal,runOnLimitedConnection:!0});let s=Ue(t,{maxDataLength:FE}).pb(on);this.log("B sending connect to %p",e.remotePeer);let i=Date.now();await s.write({type:on.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(u=>u.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await s.read(o);if(a.type!==on.Type.CONNECT)throw this.log("A sent wrong message type"),new de("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 de("DCUtR connect message had no multiaddrs");let l=Date.now()-i;this.log("A sending sync, rtt %dms",l),await s.write({type:on.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await By(l/2),this.log("B dialing",c);let d=await this.connectionManager.openConnection(c,{signal:o.signal,priority:$E,force:!0,initiator:!1});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,d.remoteAddr),await e.close(o);break}catch(s){if(this.log.error("error while attempting DCUtR on attempt %d of %d - %e",n+1,this.retries,s),t?.abort(s),n===this.retries)throw s}finally{t!=null&&await t.close(o)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(o=>{let s=o.multiaddr;return s.getComponents().find(i=>i.code===421)?.value==null?s.encapsulate(`/p2p/${e.remotePeer}`):s}).filter(o=>O4(o,this.transportManager));if(n.length>0){let o=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let s=await this.connectionManager.openConnection(n,{signal:o,force:!0});if(yt.exactMatch(s.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,s.remoteAddr),await e.close({signal:o}),!0}catch(s){this.log.error("unilateral connection upgrade to %p on addresses %a failed - %e",e.remotePeer,n,s)}}else this.log("peer %p has no public addresses, not attempting unilateral connection upgrade",e.remotePeer);return!1}async handleIncomingUpgrade(e,t){let n={signal:AbortSignal.timeout(this.timeout)},o=Ue(e,{maxDataLength:FE}).pb(on);this.log("A receiving connect");let s=await o.read(n);if(s.type!==on.Type.CONNECT)throw this.log("B sent wrong message type"),new de("DCUtR message type was incorrect");if(s.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new de("DCUtR connect message had no multiaddrs");let i=this.getDialableMultiaddrs(s.observedAddresses);if(i.length===0)throw this.log("B had no dialable multiaddrs in %o",s.observedAddresses.map(l=>q(l))),new de("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await o.write({type:on.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==on.Type.SYNC)throw new de("DCUtR message type was incorrect");this.log("A dialing",i);let c=await this.connectionManager.openConnection(i,{signal:n.signal,priority:$E,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n),await e.close(n)}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let o=q(n);if(!O4(o,this.transportManager))continue;t.push(o)}catch{}return t}};var Jl="/libp2p/dcutr";function KE(r={}){return e=>new Tp(e,r)}function j(r){if(r!==void 0&&r!==j.REQUEST&&r!==j.RESPONSE)throw new Error("type must be REQUEST or RESPONSE");r===void 0||this.initialize(r),this.maxHeaderSize=j.maxHeaderSize}j.prototype.initialize=function(r,e){if(r!==j.REQUEST&&r!==j.RESPONSE)throw new Error("type must be REQUEST or RESPONSE");this.type=r,this.state=r+"_LINE",this.info={headers:[],upgrade:!1},this.trailers=[],this.line="",this.isChunked=!1,this.connection="",this.headerSize=0,this.body_bytes=null,this.isUserCall=!1,this.hadError=!1};j.encoding="ascii";j.maxHeaderSize=80*1024;j.REQUEST="REQUEST";j.RESPONSE="RESPONSE";var VE=j.kOnHeaders=1,M4=j.kOnHeadersComplete=2,_p=j.kOnBody=3,B4=j.kOnMessageComplete=4;j.prototype[VE]=j.prototype[M4]=j.prototype[_p]=j.prototype[B4]=function(){};var HE=!0;Object.defineProperty(j,"kOnExecute",{get:function(){return HE=!1,99}});var qE=j.methods=["DELETE","GET","HEAD","POST","PUT","CONNECT","OPTIONS","TRACE","COPY","LOCK","MKCOL","MOVE","PROPFIND","PROPPATCH","SEARCH","UNLOCK","BIND","REBIND","UNBIND","ACL","REPORT","MKACTIVITY","CHECKOUT","MERGE","M-SEARCH","NOTIFY","SUBSCRIBE","UNSUBSCRIBE","PATCH","PURGE","MKCALENDAR","LINK","UNLINK","SOURCE"],WE=qE.indexOf("CONNECT");j.prototype.reinitialize=j;j.prototype.close=j.prototype.pause=j.prototype.resume=j.prototype.remove=j.prototype.free=function(){};j.prototype._compatMode0_11=!1;j.prototype.getAsyncId=function(){return 0};var IL={REQUEST_LINE:!0,RESPONSE_LINE:!0,HEADER:!0};j.prototype.execute=function(r,e,t){if(!(this instanceof j))throw new TypeError("not a HTTPParser");e=e||0,t=typeof t=="number"?t:r.length,this.chunk=r,this.offset=e;var n=this.end=e+t;try{for(;this.offset<n&&!this[this.state](););}catch(o){if(this.isUserCall)throw o;return this.hadError=!0,o}return this.chunk=null,t=this.offset-e,IL[this.state]&&(this.headerSize+=t,this.headerSize>(this.maxHeaderSize||j.maxHeaderSize))?new Error("max header size exceeded"):t};var TL={REQUEST_LINE:!0,RESPONSE_LINE:!0,BODY_RAW:!0};j.prototype.finish=function(){if(!this.hadError){if(!TL[this.state])return new Error("invalid state for EOF");this.state==="BODY_RAW"&&this.userCall()(this[B4]())}};j.prototype.consume=j.prototype.unconsume=j.prototype.getCurrentBuffer=function(){};j.prototype.userCall=function(){this.isUserCall=!0;var r=this;return function(e){return r.isUserCall=!1,e}};j.prototype.nextRequest=function(){this.userCall()(this[B4]()),this.reinitialize(this.type)};j.prototype.consumeLine=function(){for(var r=this.end,e=this.chunk,t=this.offset;t<r;t++)if(e[t]===10){var n=this.line+R(e.subarray(this.offset,t),j.encoding);return n.charAt(n.length-1)==="\r"&&(n=n.substr(0,n.length-1)),this.line="",this.offset=t+1,n}this.line+=R(e.subarray(this.offset,this.end),j.encoding),this.offset=this.end};var _L=/^([^: \t]+):[ \t]*((?:.*[^ \t])|)/,CL=/^[ \t]+(.*[^ \t])/;j.prototype.parseHeader=function(r,e){if(r.indexOf("\r")!==-1)throw Cp("HPE_LF_EXPECTED");var t=_L.exec(r),n=t&&t[1];if(n)e.push(n),e.push(t[2]);else{var o=CL.exec(r);o&&e.length&&(e[e.length-1]&&(e[e.length-1]+=" "),e[e.length-1]+=o[1])}};var kL=/^([A-Z-]+) ([^ ]+) HTTP\/(\d)\.(\d)$/;j.prototype.REQUEST_LINE=function(){var r=this.consumeLine();if(r){var e=kL.exec(r);if(e===null)throw Cp("HPE_INVALID_CONSTANT");if(this.info.method=this._compatMode0_11?e[1]:qE.indexOf(e[1]),this.info.method===-1)throw new Error("invalid request method");this.info.url=e[2],this.info.versionMajor=+e[3],this.info.versionMinor=+e[4],this.body_bytes=0,this.state="HEADER"}};var PL=/^HTTP\/(\d)\.(\d) (\d{3}) ?(.*)$/;j.prototype.RESPONSE_LINE=function(){var r=this.consumeLine();if(r){var e=PL.exec(r);if(e===null)throw Cp("HPE_INVALID_CONSTANT");this.info.versionMajor=+e[1],this.info.versionMinor=+e[2];var t=this.info.statusCode=+e[3];this.info.statusMessage=e[4],((t/100|0)===1||t===204||t===304)&&(this.body_bytes=0),this.state="HEADER"}};j.prototype.shouldKeepAlive=function(){if(this.info.versionMajor>0&&this.info.versionMinor>0){if(this.connection.indexOf("close")!==-1)return!1}else if(this.connection.indexOf("keep-alive")===-1)return!1;return!!(this.body_bytes!==null||this.isChunked)};j.prototype.HEADER=function(){var r=this.consumeLine();if(r!==void 0){var e=this.info;if(r)this.parseHeader(r,e.headers);else{for(var t=e.headers,n=!1,o,s=!1,i=0;i<t.length;i+=2)switch(t[i].toLowerCase()){case"transfer-encoding":this.isChunked=t[i+1].toLowerCase()==="chunked";break;case"content-length":if(o=+t[i+1],n){if(o!==this.body_bytes)throw Cp("HPE_UNEXPECTED_CONTENT_LENGTH")}else n=!0,this.body_bytes=o;break;case"connection":this.connection+=t[i+1].toLowerCase();break;case"upgrade":s=!0;break}this.isChunked&&n&&(n=!1,this.body_bytes=null),s&&this.connection.indexOf("upgrade")!=-1?e.upgrade=this.type===j.REQUEST||e.statusCode===101:e.upgrade=e.method===WE,this.isChunked&&e.upgrade&&(this.isChunked=!1),e.shouldKeepAlive=this.shouldKeepAlive();var a;if(HE?a=this.userCall()(this[M4](e)):a=this.userCall()(this[M4](e.versionMajor,e.versionMinor,e.headers,e.method,e.url,e.statusCode,e.statusMessage,e.upgrade,e.shouldKeepAlive)),a===2)return this.nextRequest(),!0;if(this.isChunked&&!a)this.state="BODY_CHUNKHEAD";else{if(a||this.body_bytes===0)return this.nextRequest(),e.upgrade;this.body_bytes===null?this.state="BODY_RAW":this.state="BODY_SIZED"}}}};j.prototype.BODY_CHUNKHEAD=function(){var r=this.consumeLine();r!==void 0&&(this.body_bytes=parseInt(r,16),this.body_bytes?this.state="BODY_CHUNK":this.state="BODY_CHUNKTRAILERS")};j.prototype.BODY_CHUNK=function(){var r=Math.min(this.end-this.offset,this.body_bytes);this.userCall()(this[_p](this.chunk.slice(this.offset,this.offset+r),0,r)),this.offset+=r,this.body_bytes-=r,this.body_bytes||(this.state="BODY_CHUNKEMPTYLINE")};j.prototype.BODY_CHUNKEMPTYLINE=function(){var r=this.consumeLine();if(r!==void 0){if(r!=="")throw new Error("Expected empty line");this.state="BODY_CHUNKHEAD"}};j.prototype.BODY_CHUNKTRAILERS=function(){var r=this.consumeLine();r!==void 0&&(r?this.parseHeader(r,this.trailers):(this.trailers.length&&this.userCall()(this[VE](this.trailers,"")),this.nextRequest()))};j.prototype.BODY_RAW=function(){this.userCall()(this[_p](this.chunk.slice(this.offset,this.end),0,this.end-this.offset)),this.offset=this.end};j.prototype.BODY_SIZED=function(){var r=Math.min(this.end-this.offset,this.body_bytes);this.userCall()(this[_p](this.chunk.slice(this.offset,this.offset+r),0,r)),this.offset+=r,this.body_bytes-=r,this.body_bytes||this.nextRequest()};["Headers","HeadersComplete","Body","MessageComplete"].forEach(function(r){var e=j["kOn"+r];Object.defineProperty(j.prototype,"on"+r,{get:function(){return this[e]},set:function(t){return this._compatMode0_11=!0,WE="CONNECT",this[e]=t}})});function Cp(r){var e=new Error("Parse Error");return e.code=r,e}function zE(r){if(r!=null){if(typeof r[Symbol.iterator]=="function")return r[Symbol.iterator]();if(typeof r[Symbol.asyncIterator]=="function")return r[Symbol.asyncIterator]();if(typeof r.next=="function")return r}throw new Error("argument is not an iterator or iterable")}function U4(r,e={}){let t=zE(r),n={_cancelled:!1,async start(){this._cancelled=!1},async pull(o){try{let{value:s,done:i}=await t.next();if(this._cancelled)return;if(i===!0){o.close();return}o.enqueue(s)}catch(s){o.error(s)}},cancel(){this._cancelled=!0}};return new globalThis.ReadableStream(n,e)}var RL=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),GE=nc({name:"sha-1",code:17,encode:RL("SHA-1")});var kp=class extends globalThis.Request{constructor(e,t={}){let n=t.method??"GET",o=kn(t),s=t.body;Pp(n,o)&&(t.method="UPGRADE"),super(e,t),Object.defineProperties(this,{body:{value:s,writable:!1},method:{value:n,writable:!1},headers:{value:o,writable:!1}})}};var YE={100:"Continue",101:"Switching Protocols",102:"Processing",103:"Early Hints",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",208:"Already Reported",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",308:"Permanent Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Payload Too Large",414:"URI Too Long",415:"Unsupported Media Type",416:"Range Not Satisfiable",417:"Expectation Failed",418:"I'm a Teapot",421:"Misdirected Request",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",425:"Too Early",426:"Upgrade Required",428:"Precondition Required",429:"Too Many Requests",431:"Request Header Fields Too Large",451:"Unavailable For Legal Reasons",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",508:"Loop Detected",509:"Bandwidth Limit Exceeded",510:"Not Extended",511:"Network Authentication Required"};var Pn=class extends globalThis.Response{constructor(e,t={}){let n=kn(t),o=t.status??200;(o<200||o>599)&&(t.status=200),super(e,t),Object.defineProperties(this,{status:{value:o,writable:!1},statusText:{value:YE[o],writable:!1},headers:{value:n,writable:!1}})}};var LL=["dns","dns4","dns6","dnsaddr"];function tu(r,e){if(r instanceof URL)return r;let t=Lp(r,e),{httpPath:n}=Dp(r);return new URL(`http://${t}${n}`)}function ru(r){return r instanceof Uint8Array?r:r instanceof DataView?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):new Uint8Array(r,0,r.byteLength)}function XE(r,e){let t={method:r.method,headers:r.headers};if((t.method!=="GET"||r.upgrade)&&t.method!=="HEAD"){let n=e;r.upgrade||(n=NL(e,r.headers.get("content-length"))),t.body=U4(n),t.duplex="half"}return new kp(F4(r).toString(),t)}async function QE(r,e){if(e.send(C([`HTTP/1.1 ${r.status} ${r.statusText}`,...Rp(r.headers),"",""].join(`\r
52
+ `))),r.body==null){await e.close().catch(n=>{e.abort(n)});return}let t=r.body.getReader();for(;;){let n=await t.read();if(n.value!=null&&(e.send(n.value)||await e.onDrain()),n.done)break}await e.close().catch(n=>{e.abort(n)})}var ZE=C(["HTTP/1.1 404 Not Found","Connection: close","",""].join(`\r
53
+ `)),DL=C(["HTTP/1.1 400 Bad Request","Connection: close","",""].join(`\r
54
+ `)),rde=C(["HTTP/1.1 500 Internal Server Error","Connection: close","",""].join(`\r
55
+ `)),nde=C(["HTTP/1.1 501 Not Implemented","Connection: close","",""].join(`\r
56
+ `));function Rp(r){let e=[];r.get("Connection")==null&&r.set("Connection","close");for(let[t,n]of r.entries())e.push(`${t}: ${n}`);return e}async function*NL(r,e){if(e=parseInt(`${e??""}`),e==null||isNaN(e))return r;let t=0;for await(let n of r){if(t+=n.byteLength,t>e){yield n.subarray(0,t-e);return}if(yield n.subarray(),t===e)return}}function Fa(r,e){if(typeof r=="string"&&(r.startsWith("/")?r=q(r):r=new URL(r)),Rt(r)&&(r=q(`/p2p/${r}`)),r instanceof URL&&r.protocol==="multiaddr:"&&(r=mh(r.toString())),yn(r)&&(r=[r]),Array.isArray(r)){for(let t of r)if(t.getComponents().some(({name:o})=>o==="http")){let o=qo(t);return new URL(`${o}${e??""}`)}}return e==null?r:r instanceof URL?new URL(`${r}${e.substring(1)}`):r.map(t=>t.encapsulate(`/http-path/${encodeURIComponent(e.substring(1))}`))}function kn(r={}){return r.headers instanceof Headers||(r.headers=new Headers(r.headers)),r.headers}function eu(r){return r!=null&&r!==""}function Lp(r,e){let t,n=80,o="http:";if(r instanceof URL&&(t=r.hostname,n=parseInt(r.port,10),o=r.protocol),eu(t)||(t=e.get("host")??void 0),!eu(t)&&Array.isArray(r))for(let s of r){let a=s.getComponents().filter(({name:c})=>LL.includes(c))?.[0]?.value;if(a!=null){t=a;break}}if(!eu(t)&&Array.isArray(r))for(let s of r){let i=s.getComponents().findLast(a=>a.code===421)?.value;try{let a=oe(s);a.port!=null&&(n=a.port)}catch{}if(i!=null){t=Me(i).toCID().toString(Ar);break}}if(!eu(t)&&Array.isArray(r))for(let s of r)try{let i=oe(s);i.host!=null&&(t=i.host);break}catch{}if(eu(t))return o==="http:"&&n!==80&&(t=`${t}:${n}`),o==="https:"&&n!==443&&(t=`${t}:${n}`),t;throw new A("Could not determine request host name - a request must have a host header, be made to a DNS or IP-based multiaddr or an http(s) URL")}function Dp(r){let e="/";return r=r.map(t=>q(t.getComponents().filter(n=>n.name==="http-path"?(e=n.value??"/",!1):!0))),{httpPath:e,addresses:r}}function Np(r,e=["GET"]){return r==null?e:(typeof r=="string"&&(r=[r]),r.map(t=>t.toUpperCase()))}function F4(r){let e=r.url??"/";if(e.startsWith("http"))return new URL(e);let t=OL(r);return new URL(`http://${t}${e}`)}function OL(r){let e=r.headers?.host;if(e==null&&(e=r.headers?.Host),e==null&&typeof r.headers.get=="function"&&(e=r.headers.get("host")),e==null)throw new A("Could not read host");return e}function Pp(r,e){return r==="GET"&&e.get("connection")?.toLowerCase()==="upgrade"&&e.get("upgrade")?.toLowerCase()==="websocket"}function jE(r,e){if(r instanceof Headers)return r.get(e)??void 0;let t=r[e];return Array.isArray(t)?t.join(","):t}async function $4(r){if(jE(r,"sec-websocket-version")!=="13")throw new as("Invalid version");let e=jE(r,"sec-websocket-key");if(e==null)throw new as("Missing sec-websocket-key");let t=`${e}258EAFA5-E914-47DA-95CA-C5AB0DC85B11`,n=await GE.digest(C(t)),o=Ja.encode(n.digest).substring(1);return new Headers({Upgrade:"websocket",Connection:"upgrade","Sec-WebSocket-Accept":o})}async function JE(r,e){let t=new j("REQUEST"),n=new X,o;t[j.kOnHeadersComplete]=s=>{let i=new Headers;for(let a=0;a<s.headers.length;a+=2)i.set(s.headers[a].toLowerCase(),s.headers[a+1]);o={...s,headers:i,raw:n,method:j.methods[s.method]}};try{for(;;){let{data:s}=await Xt(r,"message",e?.signal),i=s.subarray(),a=t.execute(i,0,i.byteLength);if(a instanceof Error)throw a;if(n.append(i.subarray(0,a)),a<i.byteLength&&r.push(i.subarray(a)),o!=null)return o}}catch(s){r.abort(s)}finally{t.finish()}throw new Error("Failed to read header info from request")}var Op=class extends Error{static name="InvalidResponseError";name="InvalidResponseError"};var ML=[101,204,205,304];async function ex(r,e,t){let n=Promise.withResolvers(),o=new TransformStream,s=o.writable.getWriter(),i=!1,a=new j("RESPONSE");a.maxHeaderSize=t.maxHeaderSize??j.maxHeaderSize,a[j.kOnHeadersComplete]=l=>{t.log("response headers complete"),i=!0;let d=new Headers;for(let h=0;h<l.headers.length;h+=2)d.append(l.headers[h],l.headers[h+1]);let u=o.readable;ML.includes(l.statusCode)&&(o.writable.close().catch(()=>{}),o.readable.cancel().catch(()=>{}),u=null);let f=new Pn(u,{status:l.statusCode,statusText:l.statusMessage,headers:d});n.resolve(f)},a[j.kOnBody]=l=>{t.log("response read body %d bytes",l.byteLength),s.write(l).catch(d=>{n.reject(d)})},a[j.kOnMessageComplete]=()=>{t.log("response message complete"),s.close().catch(l=>{n.reject(l)})};let c=0;return r.addEventListener("message",({data:l})=>{t.log("response stream read %d bytes",l.byteLength),c+=l.byteLength;let d=a.execute(l.subarray(),0,l.byteLength);d instanceof Error&&(r.abort(d),a.finish())}),r.addEventListener("remoteCloseWrite",()=>{i||n.reject(new Op(`Response ended before headers were received, read ${c} bytes`)),a.finish()}),n.promise}function tx(r,e){return e.set("Content-Length",`${r.size}`),e.set("Content-Type",r.type!=null&&r.type!==""?r.type:"application/octet-stream"),r.stream()}function rx(r,e){return e.set("Content-Length",`${r.byteLength}`),e.set("Content-Type","application/octet-stream"),new ReadableStream({start(t){t.enqueue(ru(r)),t.close()}})}function BL(r,e,t){let n=[`--${t}`],o=0,s=2;return typeof e=="string"?(n.push(`Content-Disposition: form-data; name="${r}"`,'Content-Type: text/plain; charset="UTF-8"',`Content-Length: ${e.length}`,""),o=e.length+s):(n.push(`Content-Disposition: form-data; name="${r}"; filename="${encodeURIComponent(e.name)}"`,"Content-Type: application/octet-stream",`Content-Length: ${e.size}`,""),o=e.size+s),C(n.join(`\r
57
+ `)).byteLength+o}function nx(r,e){let t=`-----------------------------${crypto.randomUUID()}`;e.set("Content-Type",`multipart/form-data; boundary=${t}`);let n=0;for(let[c,l]of r.entries())n+=BL(c,l,t);e.set("Content-Length",`${n}`);let o=r.entries(),s;function i(c,l,d,u){let f=[`--${u}`];typeof d=="string"?f.push(`Content-Disposition: form-data; name="${l}"`,'Content-Type: text/plain; charset="UTF-8"',`Content-Length: ${d.length}`,"",d,""):(f.push(`Content-Disposition: form-data; name="${l}"; filename="${encodeURIComponent(d.name)}"`,"Content-Type: application/octet-stream",`Content-Length: ${d.size}`,""),s=d.stream().getReader()),c.enqueue(C(f.join(`\r
58
+ `)))}async function a(c,l){if(s!=null){let f=await s.read();f.value!=null&&c.enqueue(f.value),f.done&&(c.enqueue(C(`\r
59
+ `)),s=void 0);return}let{done:d,value:u}=o.next();if(u!=null){let[f,h]=u;i(c,f,h,l)}d===!0&&c.close()}return new ReadableStream({async pull(c){await a(c,t)}})}function ox(r,e){e.set("Content-Type","application/octet-stream"),e.set("Transfer-Encoding","chunked");let t=r.getReader();return new ReadableStream({async pull(n){let{done:o,value:s}=await t.read();s!=null&&(n.enqueue(C(`${s.byteLength}\r
60
+ `)),n.enqueue(s),n.enqueue(C(`\r
61
+ `))),o&&(n.enqueue(C(`0\r
62
62
  \r
63
- `)),n.close())}})}function K4(r,e){return e.set("Content-Length",`${r.length}`),e.set("Content-Type",'text/plain; charset="UTF-8"'),new ReadableStream({start(t){t.enqueue(_(r)),t.close()}})}function sx(r,e){if(r!=null){if(typeof r=="string")return K4(r,e);if(r instanceof Blob)return tx(r,e);if(UL(r))return rx(r,e);if(r instanceof URLSearchParams)return K4(r.toString(),e);if(r instanceof ReadableStream)return ox(r,e);if(r instanceof FormData)return nx(r,e);throw new Error("Unsupported body type")}}function UL(r){return r==null?!1:r.byteLength!=null}async function ix(r,e,t){let n=new Headers(t.headers),o=n.get("host")??e.hostname;n.set("host",o),n.get("user-agent")==null&&n.set("user-agent","libp2p/fetch");let s=sx(t.body,n),i=[`${t?.method?.toUpperCase()??"GET"} ${e.pathname??"/"} HTTP/1.1`,...Rp(n),"",""];r.send(_(i.join(`\r
64
- `)))||await r.onDrain({signal:t.signal??void 0}),s!=null&&(t.log("request sending body"),await FL(r,s,t))}async function FL(r,e,t){let n=e.getReader();for(;;){let{done:o,value:s}=await n.read();if(s!=null&&(t.log("request send %d bytes",s.byteLength),r.send(s)||await r.onDrain({signal:t.signal??void 0})),o){t.log("request finished sending body");break}}}async function ax(r,e,t={}){let n=r.log.newScope("http-fetch");e=typeof e=="string"?new URL(e):e;let[o]=await Promise.all([ex(r,e,{...t,log:n}),ix(r,e,{...t,log:n})]);return await r.close({signal:t.signal??void 0}),o}var Mp=class extends Event{message;error;filename="";lineno=0;colno=0;constructor(e){super("error"),this.error=e,this.message=e.message}},nu=class extends Event{code;reason;wasClean;constructor(e,t){super(e),this.code=t?.code??0,this.reason=t?.reason??"",this.wasClean=t?.wasClean??!0}};var $L={CONTINUATION:0,TEXT:1,BINARY:2,CONNECTION_CLOSE:8,PING:9,PONG:10},V4={0:"CONTINUATION",1:"TEXT",2:"BINARY",8:"CONNECTION_CLOSE",9:"PING",10:"PONG"};var ou={NORMAL_CLOSURE:1e3,GOING_AWAY:1001,PROTOCOL_ERROR:1002,UNSUPPORTED_DATA:1003,RESERVED:1004,NO_STATUS_RECEIVED:1005,ABNORMAL_CLOSURE:1006,INVALID_FRAME_PAYLOAD_DATA:1007,POLICY_VIOLATION:1008,MESSAGE_TOO_BIG:1009,MANDATORY_EXT:1010,INTERNAL_SERVER_ERROR:1011,TLS_HANDSHAKE:1015};function cx(r){let e=0;if(r.byteLength<e+1)return;let n=r.get(e)&15;if(e++,V4[n]==null)throw new Error(`Unknown opcode: ${n}`);if(r.byteLength<e+1)return;let o=r.get(e),s=(o&128)===128,i=o&127;if(e++,i===126){if(r.byteLength<e+2)return;i=r.getUint16(e),e+=2}else if(i===127){if(r.byteLength<e+8)return;i=r.getUint32(e),e+=8}if(i===0)return r.consume(e),{type:V4[n]};let a;if(s){if(r.byteLength<e+4)return;a=r.subarray(e,e+4),e+=4}if(r.byteLength<e+i)return;let c=r.subarray(e,e+i);return e+=i,a!=null&&(c=lx(c,a)),r.consume(e),{type:V4[n],data:c}}function lx(r,e){let t=0;for(let n=0;n<r.byteLength;n++)r[n]=r[n]^e[t],t++,t===e.byteLength&&(t=0);return r}function ux(r,e,t){let o=new Q(Uint8Array.from([128|$L[r]])),s=e?.byteLength??0;if(s<126)o.append(Uint8Array.from([s|(t===!0?128:0)]));else if(s<65535){let i=new Q(new Uint8Array(3));i.set(0,126|(t===!0?128:0)),i.setUint16(1,s),o.append(i)}else if(s<18446744073709552e3){let i=new Q(new Uint8Array(9));i.set(0,127|(t===!0?128:0)),i.setUint32(1,s),o.append(i)}else throw new Error("Payload too large");if(t===!0&&e!=null){let i=Uint8Array.from([0,0,0,0]);o.append(i),e=lx(e,i)}return e!=null&&o.append(e),o}function dx(r){if(r instanceof Uint8Array||r instanceof ArrayBuffer||r instanceof DataView)return ru(r);if(typeof r=="string")return _(r);if(r instanceof Blob)return r.arrayBuffer().then(e=>ru(e));throw new A("Unsupported data type")}async function fx(r,e){return new Promise((t,n)=>{let o=!1,s=new j("RESPONSE");s[j.kOnHeadersComplete]=i=>{o=!0;let a=[];for(let c=0;c<i.headers.length;c+=2)a.push([i.headers[c],i.headers[c+1]]);t(new Pn(null,{status:i.statusCode,statusText:i.statusMessage,headers:new Headers(a)}))},Promise.resolve().then(async()=>{for(;;){let{data:i}=await Qt(r,"message",e.signal),a=i.subarray(),c=s.execute(a,0,a.byteLength);if(c instanceof Error)throw c;if(c<a.byteLength&&r.push(a.subarray(c)),o)break}}).catch(i=>{n(i)})})}async function*hx(r,e=[],t){let n=Ja.encode(crypto.getRandomValues(new Uint8Array(16))).substring(1);t.set("host",r.hostname),t.set("connection","upgrade"),t.set("upgrade","websocket"),t.set("pragma","no-cache"),t.set("cache-control","no-cache"),t.set("sec-websocket-version","13"),t.set("sec-websocket-key",n),e.length>0&&t.set("sec-websocket-protocol",e.join(", ")),yield _([`GET ${r.pathname??"/"} HTTP/1.1`,...[...t.entries()].map(([o,s])=>`${o}: ${s}`),"",""].join(`\r
65
- `))}var KL=["BINARY","TEXT","CONTINUATION"],VL=10485760;var HL="/http/1.1",Bp=class extends ie{binaryType="arraybuffer";bufferedAmount=0;extensions="";protocol="";readyState;url;CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;_onclose;_onerror;_onmessage;_onopen;sentClose;isClient;buffer;maxMessageSize;_url;closeController;constructor(e,t={}){super(),this.readyState=this.CONNECTING,this.url=e.pathname,this.sentClose=!1,this.isClient=t.isClient??!0,this.buffer=new Q,this.closeController=new AbortController,this.maxMessageSize=t.maxMessageSize??VL}send(e){if(this.readyState!==this.OPEN)throw new Error("WebSocket was not open");let t=dx(e);Ed(t)?t.then(n=>{this._send("BINARY",n)}).catch(n=>{this._errored(n)}):this._send("BINARY",t)}_send(e,t){if(this.readyState!==this.OPEN)return;let n=ux(e,t,this.isClient),o=n.byteLength;this.bufferedAmount+=o,this._write(n,s=>{this.bufferedAmount-=o,s!=null&&this._errored(s)})}close(e,t){if(this.readyState!==this.OPEN)throw new Error("WebSocket was not open");this.readyState=this.CLOSING,this.sentClose=!0,this._send("CONNECTION_CLOSE")}_errored(e){this.readyState=this.CLOSED,this.dispatchEvent(new Mp(e))}set onclose(e){this._onclose=e,this.addEventListener("close",e)}get onclose(){return this._onclose??null}set onerror(e){this._onerror=e,this.addEventListener("error",e)}get onerror(){return this._onerror??null}set onmessage(e){this._onmessage=e,this.addEventListener("message",e)}get onmessage(){return this._onmessage??null}set onopen(e){this._onopen=e,this.addEventListener("open",e)}get onopen(){return this._onopen??null}_push(e){if(this.buffer.append(e),this.buffer.byteLength>this.maxMessageSize){this.close(ou.MESSAGE_TOO_BIG,"Max message size exceeded");return}for(;;){let t=cx(this.buffer);if(t==null)break;if(KL.includes(t.type)&&t.data!=null){let n;this.binaryType==="blob"?n=new Blob([t.data]):t.data.byteOffset===0&&t.data.byteLength===t.data.buffer.byteLength?n=t.data.buffer:(n=new ArrayBuffer(t.data.byteLength),new Uint8Array(n,0,n.byteLength).set(t.data)),this.dispatchEvent(new MessageEvent("message",{data:n,origin:this._url?.hostname}))}t.type==="PING"&&this._send("PONG",t.data),t.type==="CONNECTION_CLOSE"&&(this.sentClose||this.close(),this.closeController.abort(),this._close(void 0,()=>{this.readyState=this.CLOSED,this.dispatchEvent(new nu("close"))}))}}_remoteClosed(e){this.readyState=this.CLOSING,this._close(e,()=>{this.readyState=this.CLOSED,this.dispatchEvent(new nu("close"))})}};var su=class extends Bp{writer;writable;constructor(e,t,n={}){if(super(new URL(e.url),{...n,isClient:!1}),e.body==null)throw new A("Request body cannot be null");this.readyState=this.OPEN,this.writable=t,this.writer=t.getWriter();let o=e.body.getReader();Promise.resolve().then(async()=>{for(this.dispatchEvent(new Event("open"));;){let{value:s,done:i}=await o.read();if(s!=null&&this._push(s),i){this._remoteClosed();break}}}).catch(s=>{this._errored(s)})}_write(e,t){this.writer?.write(e).then(()=>{t()},n=>{t(n)})}_close(e,t){e!=null?this.writable.abort(e).then(()=>{t()},()=>{t()}):this.writable.close().then(()=>{t()},()=>{t()})}},iu=class extends Bp{stream;handshakeTimeout;drainTimeout;constructor(e,t,n,o){super(t,{...o,isClient:!0}),this.handshakeTimeout=o.handshakeTimeout??1e4,this.drainTimeout=o.drainTimeout??1e4,Promise.resolve().then(async()=>{let s=AbortSignal.timeout(this.handshakeTimeout);this.stream=await n.openStream(e,HL,{...o,signal:s});for await(let a of hx(t,o.protocols,kn(o)))this.stream.send(a)||await this.stream.onDrain({signal:s});let i=await fx(this.stream,{signal:s});if(i.status!==101)throw new Error("Invalid WebSocket handshake - response status "+i.status);await o.onHandshakeResponse?.(i,{signal:s}),this.protocol=i.headers.get("Sec-WebSocket-Protocol")??"",this.readyState=this.OPEN,this.dispatchEvent(new Event("open"));for await(let a of this.stream)this._push(a)}).catch(s=>{this._errored(s)})}_write(e,t){if(this.stream==null){t(new Error("WebSocket was not open"));return}this.stream.send(e)?t():this.stream.onDrain({signal:AbortSignal.timeout(this.drainTimeout)}).then(()=>{t()},n=>{t(n)})}_close(e,t){if(this.stream==null){t();return}if(e!=null){this.stream.abort(e),t();return}this.stream.close().catch(n=>{this.stream?.abort(n)}).finally(()=>{t()})}};var au="/http/1.1";var Up=Symbol.for("@libp2p/http/websocket-handler");var Ex=Ln(wx(),1),$p=class{log;cookies;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:http:cookies"),this.cookies=new Map}async prepareRequest(e,t){if((t.credentials??"same-origin")==="omit")return;let o=t.headers.get("origin");if(o==null||o==="null")return;let s=tu(e,t.headers),i=(this.cookies.get(s.hostname)??[]).filter(a=>!(a.expires!=null&&a.expires<Date.now()||a.path!=null&&!s.pathname.startsWith(a.path))).map(a=>`${a.name}=${a.value}`).join("; ");i.length>0&&t.headers.set("cookie",i)}async processResponse(e,t,n){if((t.credentials??"same-origin")==="omit"){bx(n);return}let s=t.headers.get("origin");if(s==null||s==="null")return;let i=tu(e,t.headers);for(let a of n.headers.getSetCookie()){let c=[...this.cookies.get(i.hostname)??[],...ZL(Ex.default.parse(a))];this.cookies.set(i.hostname,c)}bx(n)}};function bx(r){return r.headers.has("set-cookie")&&r.headers.delete("set-cookie"),r}function ZL(r){let e={},t=[];return Object.entries(r).forEach(([n,o])=>{n.toLowerCase()==="domain"&&o!=null&&(e.domain=o),n.toLowerCase()==="max-age"&&o!=null&&(e.expires=Date.now()+parseInt(o,10)*1e3),!JL.includes(n.toLowerCase())&&o!=null&&t.push({name:n,value:o})}),t.map(n=>({...n,...e}))}var JL=["domain","expires","httponly","max-age","partitioned","path","samesite","secure"];var Kp=class{async prepareRequest(e,t){if(t.headers.get("origin")!=null||t.mode==="no-cors")return;let n=tu(e,t.headers);t.headers.set("origin",`${n.protocol}//${n.host}`)}};function eD(r){return typeof r.init=="function"}function Vp(r,e){if(eD(r)){let t=r;return t.handler=r.init(e),delete t.init,t}return r}function xx(r){let e=Np(r.method,["GET"]);if(r.fallback==null&&e.filter(n=>n!=="GET").length>0)throw new A("WebSocket handlers only support the GET HTTP method");let t={...r,init:n=>{let o=Vp(r,n);return t[Up]=o.handler,async s=>{if(!Pp(s.method,s.headers))return r?.fallback!=null?r.fallback(s):new Pn(null,{status:400});let i=new TransformStream;try{let a=new Pn(i.readable,{status:101,headers:await $4(s.headers)}),c=new su(s,i.writable,r);return o.handler(c),a}catch{return new Pn(null,{status:500})}}}};return t}var Hp="/.well-known/libp2p/protocols";function vx(r){return xx({path:Hp,method:["GET"],cors:!0,handler:e=>{let t=JSON.stringify(r.getProtocolMap());e.send(t),e.close()},fallback:async e=>{let t=JSON.stringify(r.getProtocolMap());return new Response(t,{headers:{"Content-Type":"application/json","Content-Length":`${t.length}`}})}})}var qp=class{log;components;protocols;endpoint;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:http:registrar"),this.protocols=[],this.onStream=this.onStream.bind(this),this.endpoint=t.server,this.handle("",vx(this))}async start(){await this.components.registrar.handle(au,this.onStream.bind(this))}async stop(){await this.components.registrar.unhandle(au)}async onStream(e,t){let n=await JE(e);if(this.canHandle(n)){this.log("handling incoming request %s %s",n.method,n.url);let o=await this.onRequest(QE(n,e));await XE(o,e),await e.close();return}if(this.endpoint==null){this.log("cannot handle incoming request %s %s and no endpoint configured",n.method,n.url),e.send(ZE),await e.close();return}this.log("passing incoming request %s %s to endpoint",n.method,n.url),this.endpoint.inject(n,e,t).catch(o=>{this.log.error("error injecting request to endpoint - %e",o),e.abort(o)})}canHandle(e){let t=F4(e).pathname;return this.protocols.find(n=>n.route.path===t)!=null?(this.log.trace("can handle %s",t),!0):(this.log.trace("cannot handle %s",t),!1)}async onRequest(e){this.log("incoming request %s %s",e.method,e.url);let t=this.findHandler(e.url);if(t==null)return new Response(null,{status:404});let n;return t.route.method.includes(e.method)?n=await t.route.handler(e):e.method==="OPTIONS"?n=new Response(null,{status:204}):n=new Response(null,{status:405}),tD(n,e,t),this.log("%s %s %d %s",e.method,e.url,n.status,n.statusText),n}onWebSocket(e){let t=this.findHandler(e.url);if(t!=null){let n=t.route[Up];if(n!=null){n(e);return}}e.close(ou.NORMAL_CLOSURE)}findHandler(e){let t=e.startsWith("/")?e:new URL(e).pathname;this.log("search for handler on path %s",t);let n=this.protocols.find(o=>o.route.path===t);return n!=null&&this.log("found handler for HTTP protocol %s on path %s",n.protocol,e),n}handle(e,t){if(t.path=t.path??e,this.protocols.find(n=>n.protocol===e)!=null)throw new A(`HTTP protocol handler for ${e} already registered`);(t.path===""||!t.path.startsWith("/"))&&(t.path=`/${t.path}`),t.cors=t.cors??!0,t.method=Np(t.method),t=Vp(t,this.components),this.protocols.push({protocol:e,route:t}),this.protocols.sort(({route:{path:n}},{route:{path:o}})=>o.length-n.length)}unhandle(e){this.protocols=this.protocols.filter(t=>t.protocol===e)}getProtocolMap(){let e={};for(let t of this.protocols)t.protocol!==""&&(e[t.protocol]={path:t.route.path});return e}};function tD(r,e,t){let n=[...new Set(["OPTIONS",...t.route.method])].join(", ");t.route.cors&&(e.headers.get("Access-Control-Request-Method")!=null&&r.headers.set("access-control-allow-methods",n),e.headers.get("Access-Control-Request-Headers")!=null&&r.headers.set("access-control-allow-headers",e.headers.get("Access-Control-Request-Headers")??""),e.headers.get("Origin")!=null&&(r.headers.set("access-control-allow-origin",e.headers.get("Origin")??""),r.headers.set("vary","Origin"))),e.method==="OPTIONS"&&r.headers.set("allow",n)}async function Sx(r,e,t){for(let n of e.middleware)await n.prepareRequest?.(r,e);return t()}async function Ax(r,e,t){for(let n of e.middleware)await n.prepareRequest?.(r,e);return t()}async function Ix(r,e,t){for(let n of e.middleware)await n.processResponse?.(r,e,t);return t}var zp=class{log;components;httpRegistrar;origin;cookies;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:http"),this.httpRegistrar=new qp(e,t),this.origin=new Kp,this.cookies=new $p(e,t)}[Symbol.toStringTag]="@libp2p/http";[me]=["@libp2p/http"];async start(){await at(this.httpRegistrar)}async stop(){await lt(this.httpRegistrar)}agent(...e){throw new Ga("This method is not supported in browsers")}dispatcher(...e){throw new Ga("This method is not supported in browsers")}async connect(e,t={}){let n=Fa(e),o=kn(t),s={...t,headers:o,method:"GET",middleware:t.middleware?.map(i=>i(this.components))??[]};return o.set("connection","upgrade"),o.set("upgrade","websocket"),Ax(n,s,async()=>{if(n instanceof URL){let c=new globalThis.WebSocket(n,t.protocols);return c.binaryType="arraybuffer",c}let{addresses:i,httpPath:a}=Dp(n);return new iu(i,new URL(`http://${Lp(n,s.headers)}${decodeURIComponent(a)}`),this.components.connectionManager,s)})}async fetch(e,t={}){let n=Fa(e),o={...t,headers:kn(t),method:"GET",middleware:[this.origin,this.cookies,...t.middleware?.map(i=>i(this.components))??[]]},s=await Sx(n,o,async()=>this.sendRequest(n,t));return Ix(n,o,s)}async connectProtocol(e,t,n){let o=await this.getProtocolPath(e,t,n),s=Fa(e,o);return this.connect(s,n)}async fetchProtocol(e,t,n={}){let o=await this.getProtocolPath(e,t,n),s=Fa(e,o);return this.fetch(s,n)}async getSupportedProtocols(e,t={}){let n=Fa(e,Hp),o=await this.fetch(n,{method:"GET",headers:{Accept:"application/json"},signal:t.signal});if(o.status!==200)throw new Error(`Unexpected status code: ${o.status}`);return o.json()}async getProtocolPath(e,t,n={}){let o=await this.getSupportedProtocols(e,n);if(o[t]==null)throw new Error(`Peer does not serve protocol: ${t}`);return o[t].path}canHandle(e){return this.httpRegistrar.canHandle(e)}async onRequest(e){return this.httpRegistrar.onRequest(e)}onWebSocket(e){this.httpRegistrar.onWebSocket(e)}handle(e,t){this.httpRegistrar.handle(e,t)}unhandle(e){this.httpRegistrar.unhandle(e)}getProtocolMap(){return this.httpRegistrar.getProtocolMap()}async sendRequest(e,t){if(e instanceof URL)return this.log("making request to %s with global fetch"),globalThis.fetch(e,t);this.log("making request to %s with libp2p fetch",e);let n=Lp(e,kn(t)),{addresses:o,httpPath:s}=Dp(e),a=await(await this.components.connectionManager.openConnection(o,{signal:t.signal??void 0})).newStream(au,{signal:t.signal??void 0});return ax(a,new URL(`http://${n}${decodeURIComponent(s)}`),t)}};function Tx(r={}){return e=>new zp(e,r)}var Cx="0.1.0";var _x="id/push",kx="1.0.0",Px="1.0.0";var Xo;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s of t.listenAddrs)n.uint32(18),n.bytes(s);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let s of t.protocols)n.uint32(26),n.string(s);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={listenAddrs:[],protocols:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 5:{s.protocolVersion=t.string();break}case 6:{s.agentVersion=t.string();break}case 1:{s.publicKey=t.bytes();break}case 2:{if(o.limits?.listenAddrs!=null&&s.listenAddrs.length===o.limits.listenAddrs)throw new Ne('Decode error - map field "listenAddrs" had too many elements');s.listenAddrs.push(t.bytes());break}case 4:{s.observedAddr=t.bytes();break}case 3:{if(o.limits?.protocols!=null&&s.protocols.length===o.limits.protocols)throw new Ne('Decode error - map field "protocols" had too many elements');s.protocols.push(t.string());break}case 8:{s.signedPeerRecord=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Xo||(Xo={}));var ar={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function Rx(r){if(r!=null&&r.length>0)try{return q(r)}catch{}}async function Wp(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new de("message was null or undefined");let s={};if(o.listenAddrs.length>0&&(s.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:q(c)}))),o.protocols.length>0&&(s.protocols=o.protocols),o.publicKey!=null){let c=et(o.publicKey);if(!xn(c).equals(n.remotePeer))throw new de("public key did not match remote PeerId");s.publicKey=c}let i;if(o.signedPeerRecord!=null){t.trace("received signedPeerRecord from %p",n.remotePeer);let c=o.signedPeerRecord,l=await vr.openAndCertify(c,Xt.DOMAIN),d=Xt.createFromProtobuf(l.payload),u=Jr(l.publicKey.toCID());if(!d.peerId.equals(u))throw new de("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(d.peerId))throw new de("signing key does not match remote PeerId");let f;try{f=await r.get(d.peerId)}catch(h){if(h.name!=="NotFoundError")throw h}if(f!=null&&(s.metadata=f.metadata,f.peerRecordEnvelope!=null)){let h=vr.createFromProtobuf(f.peerRecordEnvelope),p=Xt.createFromProtobuf(h.payload);p.seqNumber>=d.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",p.seqNumber,d.seqNumber),d=p,c=f.peerRecordEnvelope)}s.peerRecordEnvelope=c,s.addresses=d.multiaddrs.map(h=>({isCertified:!0,multiaddr:h})),i={seq:d.seqNumber,addresses:d.multiaddrs}}else t("%p did not send a signed peer record",n.remotePeer);if(t.trace("patching %p with",n.remotePeer,s),await r.patch(n.remotePeer,s),o.agentVersion!=null||o.protocolVersion!=null){let c={};o.agentVersion!=null&&(c.AgentVersion=_(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=_(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=>q(c)),observedAddr:o.observedAddr==null?void 0:q(o.observedAddr),protocols:o.protocols,signedPeerRecord:i,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var $a=class{host;components;protocol;started;timeout;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;runOnLimitedConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.components=e,this.log=t.log,this.timeout=t.timeout??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}/${Cx}`,agentVersion:e.nodeInfo.userAgent},this.handleProtocol=this.handleProtocol.bind(this)}isStarted(){return this.started}async start(){this.started||(await this.components.peerStore.merge(this.components.peerId,{metadata:{AgentVersion:_(this.host.agentVersion),ProtocolVersion:_(this.host.protocolVersion)}}),await this.components.registrar.handle(this.protocol,this.handleProtocol,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}};var Gp=class extends $a{connectionManager;concurrency;_push;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??ar.protocolPrefix}/${_x}/${Px}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??ar.concurrency,this._push=zn(this.sendPushMessage.bind(this),t.debounce??1e3),(t.runOnSelfUpdate??ar.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error("error pushing updates to peers - %e",o)})})}[me]=["@libp2p/identify-push"];async push(){this._push()}async sendPushMessage(){if(this.isStarted())try{let e=this.components.addressManager.getAddresses().map(d=>d.decapsulateCode(421)),t=new Xt({peerId:this.components.peerId,multiaddrs:e}),n=await vr.seal(t,this.components.privateKey),o=this.components.registrar.getProtocols(),s=await this.components.peerStore.get(this.components.peerId),i=R(s.metadata.get("AgentVersion")??_(this.host.agentVersion)),a=R(s.metadata.get("ProtocolVersion")??_(this.host.protocolVersion)),c=this;async function*l(){for(let d of c.connectionManager.getConnections())(await c.components.peerStore.get(d.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let f,h=AbortSignal.timeout(c.timeout);try{f=await d.newStream(c.protocol,{signal:h,runOnLimitedConnection:c.runOnLimitedConnection}),await Ue(f,{maxDataLength:c.maxMessageSize}).pb(Xo).write({listenAddrs:e.map(g=>g.bytes),signedPeerRecord:n.marshal(),protocols:o,agentVersion:i,protocolVersion:a},{signal:h}),await f.close({signal:h})}catch(p){f?.log.newScope("identify-push")?.error("could not push identify update to peer",p),f?.abort(p)}})}await er(io(l(),{concurrency:this.concurrency}))}catch(e){this.log.error("error pushing updates to peers - %e",e)}}async handleProtocol(e,t){let n=e.log.newScope("identify-push");if(this.components.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let o={signal:AbortSignal.timeout(this.timeout)},i=await Ue(e,{maxDataLength:this.maxMessageSize}).pb(Xo).read(o);await e.close(o),await Wp(this.components.peerStore,this.components.events,n,t,i),n.trace("handled push from %p",t.remotePeer)}};var Yp=class extends $a{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??ar.protocolPrefix}/${"id"}/${kx}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??ar.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(()=>{})})}[me]=["@libp2p/identify"];async _identify(e,t={}){let n,o;if(t.signal==null){let s=AbortSignal.timeout(this.timeout);t={...t,signal:s}}this.log("run identify on new connection %a",e.remoteAddr);try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection}),o=n.log.newScope("identify");let s=Ue(n,{maxDataLength:this.maxMessageSize}).pb(Xo),i=await s.read(t);return await s.unwrap().unwrap().close(t),i}catch(s){throw o?.error("identify failed - %e",s),n?.abort(s),s}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:s,observedAddr:i}=n;if(o==null)throw new de("Public key was missing from identify message");let a=et(o),c=Jr(a.toCID());if(!e.remotePeer.equals(c))throw new de("Identified peer does not match the expected peer");if(this.components.peerId.equals(c))throw new de("Identified peer is our own peer id?");return this.maybeAddObservedAddress(i),this.log("completed for peer %p and protocols %o",c,s),Wp(this.components.peerStore,this.components.events,this.log,e,n)}maybeAddObservedAddress(e){let t=Rx(e);if(t==null||(this.log.trace("our observed address was %a",t),Qe(t)))return;let n=t.getComponents();if((n[0].code===41||n[0].code===42&&n[1].code===41)&&!dd(t)){this.log.trace("our observed address was IPv6 but not a global unicast address");return}Qs.exactMatch(t)||(this.log.trace("storing the observed address"),this.components.addressManager.addObservedAddr(t))}async handleProtocol(e,t){let n=e.log.newScope("identify");n("responding to identify");let o=AbortSignal.timeout(this.timeout);let s=await this.components.peerStore.get(this.components.peerId,{signal:o}),i=this.components.addressManager.getAddresses().map(d=>d.decapsulateCode(421)),a=s.peerRecordEnvelope;if(i.length>0&&a==null){let d=new Xt({peerId:this.components.peerId,multiaddrs:i});a=(await vr.seal(d,this.components.privateKey,{signal:o})).marshal().subarray()}let c=t.remoteAddr.bytes;N9.matches(t.remoteAddr)||(c=void 0);let l=Ue(e).pb(Xo);n("send response"),await l.write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:ft(this.components.privateKey.publicKey),listenAddrs:i.map(d=>d.bytes),signedPeerRecord:a,observedAddr:c,protocols:s.protocols},{signal:o}),n("close write"),await l.unwrap().unwrap().close({signal:o})}};function Lx(r={}){return e=>new Yp(e,r)}function Dx(r={}){return e=>new Gp(e,r)}var ai=1e3,z4=60*ai,jp=60*z4,Nx="/ipfs/kad/1.0.0",Qp=48*jp;var Ox=24*jp,Mx=10,Bx=16384,Ux=jp,W4=jp,The=10*ai,Fx=10*ai;var Xp=20,Zo=10,$x=5*z4,Kx=ai,Vx=5*ai,Hx=5*z4,qx=30*ai,zx=180*ai,G4=`${us}-kad-dht`;var cu;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={key:ae(0),value:ae(0),timeReceived:""},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.key=t.bytes();break}case 2:{s.value=t.bytes();break}case 5:{s.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(cu||(cu={}));function Wx(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"),s=String(r.getUTCMinutes()).padStart(2,"0"),i=String(r.getUTCSeconds()).padStart(2,"0"),a=r.getUTCMilliseconds(),c=String(a*1e3*1e3).padStart(9,"0");return`${e}-${t}-${n}T${o}:${s}:${i}.${c}Z`}function Gx(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,s=parseInt(t[3],10),i=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,s,i,a,c,l))}var Pt=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 cu.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:Wx(this.timeReceived)}}static deserialize(e){let t=cu.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=Gx(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 Jo=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},Zp=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},Jp=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var Yx;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.key=t.bytes();break}case 2:{s.value=t.bytes();break}case 3:{s.author=t.bytes();break}case 4:{s.signature=t.bytes();break}case 5:{s.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Yx||(Yx={}));var Ae;(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"})(Ae||(Ae={}));var e0;(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"})(e0||(e0={}));(function(r){r.codec=()=>ze(e0)})(Ae||(Ae={}));var Va;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(Va||(Va={}));var Y4;(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"})(Y4||(Y4={}));(function(r){r.codec=()=>ze(Y4)})(Va||(Va={}));var Ka;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s of t.multiaddrs)n.uint32(18),n.bytes(s);t.connection!=null&&(n.uint32(24),Va.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={id:ae(0),multiaddrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.id=t.bytes();break}case 2:{if(o.limits?.multiaddrs!=null&&s.multiaddrs.length===o.limits.multiaddrs)throw new Ne('Decode error - map field "multiaddrs" had too many elements');s.multiaddrs.push(t.bytes());break}case 3:{s.connection=Va.codec().decode(t);break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ka||(Ka={}));var es;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&e0[t.type]!==0&&(n.uint32(8),Ae.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 s of t.closer)n.uint32(66),Ka.codec().encode(s,n);if(t.providers!=null)for(let s of t.providers)n.uint32(74),Ka.codec().encode(s,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={type:Ae.PUT_VALUE,closer:[],providers:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.type=Ae.codec().decode(t);break}case 10:{s.clusterLevel=t.int32();break}case 2:{s.key=t.bytes();break}case 3:{s.record=t.bytes();break}case 8:{if(o.limits?.closer!=null&&s.closer.length===o.limits.closer)throw new Ne('Decode error - map field "closer" had too many elements');s.closer.push(Ka.codec().decode(t,t.uint32(),{limits:o.limits?.closer$}));break}case 9:{if(o.limits?.providers!=null&&s.providers.length===o.limits.providers)throw new Ne('Decode error - map field "providers" had too many elements');s.providers.push(Ka.codec().decode(t,t.uint32(),{limits:o.limits?.providers$}));break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(es||(es={}));function j4(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 lu(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 t0(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function sn(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function Q4(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function uu(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function X4(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function jx(r,e={}){let t={...r,name:"PATH_ENDED",type:8};return e.onProgress?.(new CustomEvent("kad-dht:query:path-ended",{detail:t})),t}function Qx(r,e,t){if(t.length===0)throw new A("No records given");let o=R(e).split("/");if(o.length<3)throw new A("Record key does not have a selector function");let s=r[o[1].toString()];if(s==null)throw new Jp(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:s(e,t)}function aD(r,e){return 0}var Xx={pk:aD};async function Ha(r,e,t){let n=e.key,s=R(n).split("/");if(s.length<3)return;let i=r[s[1].toString()];if(i==null)throw new A(`No validator available for key type "${s[1]}"`);await i(n,e.value,t)}var cD=async(r,e,t)=>{if(!(r instanceof Uint8Array))throw new A('"key" must be a Uint8Array');if(r.byteLength<5)throw new A("Invalid public key record");if(R(r.subarray(0,4))!=="/pk/")throw new A("key was not prefixed with /pk/");let o=et(e),s=r.slice(4);if(!ee(s,o.toMultihash().bytes))throw new A("public key does not match passed in key")},Zx={pk:cD};var lD=_("/pk/");function Jx(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>!Qe(e))}}async function ts(r,e){let t=await We.digest(r);return e?.signal?.throwIfAborted(),t.digest}async function cr(r,e){return ts(r.toMultihash().bytes,e)}function rs(r,e){return new Fe(`${r}/${R(e,"base32")}`,!1)}function ev(r){return Oe([lD,r.toMultihash().bytes])}function tv(r){return R(r.subarray(0,4))==="/pk/"}function rv(r){let e=ke(r.subarray(4));return Xe(e)}function Z4(r,e){let t=new Date;return new Pt(r,e,t).serialize()}function r0(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:G.createV1(Mn,ke(_(n,"base32"))),peerId:Me(t)}}function n0(r,e,t){let n=typeof e=="string"?e:R(e.multihash.bytes,"base32"),o=[r,n];return t!=null&&o.push(t.toString()),new Fe(o.join("/"))}function o0(r){return new Date(hr(r))}function ci(r,e,t){return async function*(...n){let o=e.queryTime?.timer(t),s=e.errorTime?.timer(t),i=!1;try{e.queries?.increment({[t]:!0}),yield*r(...n)}catch(a){throw i=!0,s?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),i||o?.()}}}function s0(r,e,t){return async function(...n){let o=e?.queryTime?.timer(t),s=e?.errorTime?.timer(t),i=!1;try{return e.queries?.increment({[t]:!0}),await r(...n)}catch(a){throw i=!0,s?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),i||o?.()}}}var i0=class{log;components;validators;selectors;peerRouting;queryManager;network;datastorePrefix;constructor(e,t){let{validators:n,selectors:o,peerRouting:s,queryManager:i,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=s,this.queryManager=i,this.network=a,this.get=e.metrics?.traceFunction("libp2p.kadDHT.get",this.get.bind(this),{optionsIndex:1})??this.get,this.put=e.metrics?.traceFunction("libp2p.kadDHT.put",this.put.bind(this),{optionsIndex:2})??this.put}async getLocal(e,t){this.log("getLocal %b",e);let n=rs(this.datastorePrefix,e);this.log("fetching record for key %k",n);let o=await this.components.datastore.get(n,t);this.log("found %k in local datastore",n);let s=Pt.deserialize(o);return await Ha(this.validators,s,t),s}async*sendCorrectionRecord(e,t,n,o){this.log("sendCorrection for %b",e);let s=Z4(e,n);for(let{value:i,from:a}of t){if(ee(i,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let d=rs(this.datastorePrefix,e);this.log(`Storing corrected record for key ${d.toString()}`),await this.components.datastore.put(d,s.subarray(),o)}catch(d){this.log.error("failed error correcting self - %e",d)}continue}let c=!1,l={type:Ae.PUT_VALUE,key:e,record:s};for await(let d of this.network.sendRequest(a,l,o))d.name==="PEER_RESPONSE"&&d.record!=null&&ee(d.record.value,Pt.deserialize(s).value)&&(c=!0),yield d;if(!c)throw new Jo("Could not send correction");this.log.error("failed error correcting entry")}}async*put(e,t,n){this.log("put key %b value %b",e,t);let o=Z4(e,t),s=rs(this.datastorePrefix,e);this.log(`storing record for key ${s.toString()}`),await this.components.datastore.put(s,o.subarray(),n),yield*Yi(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),i=>Lr(i,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:Ae.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let d of this.network.sendRequest(a.peer.id,l,{...n,path:a.path}))c.push(d),d.name==="PEER_RESPONSE"&&(d.record!=null&&ee(d.record.value,Pt.deserialize(o).value)||c.push(sn({from:a.peer.id,error:new Jo("Value not put correctly"),path:d.path},n)));return c}),i=>io(i,{ordered:!1,concurrency:Zo}),async function*(i){for await(let a of i)yield*a})}async*get(e,t){this.log("get %b",e);let n=[];for await(let a of this.getMany(e,t)){if(a.name==="VALUE"){n.push(a);continue}yield a}if(n.length===0)return;let o=n.map(a=>a.value),s=0;try{s=Qx(this.selectors,e,o)}catch(a){if(a.name!=="InvalidParametersError")throw a}let i=o[s];if(this.log("GetValue %b %b",e,i),i==null)throw new Le("Best value was not found");yield*this.sendCorrectionRecord(e,n,i,{...t,path:{index:-1,queued:0,running:0,total:0}}),yield n[s]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let s=await this.getLocal(e,t);yield uu({value:s.value,from:this.components.peerId,path:{index:-1,running:0,queued:0,total:0}},t)}catch(s){this.log("error getting local value for %b",e,s)}let n=this,o=async function*({peer:s,signal:i,path:a}){for await(let c of n.peerRouting.getValueOrPeers(s.id,e,{...t,signal:i,path:a}))yield c,c.name==="PEER_RESPONSE"&&c.record!=null&&(yield uu({from:s.id,value:c.record.value,path:a},t))};yield*this.queryManager.run(e,o,t)}};function nv(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function du(r){if(r.id==null)throw new Error("Invalid peer in message");let e=ke(r.id);return{id:Xe(e),multiaddrs:(r.multiaddrs??[]).map(t=>q(t))}}var a0=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:o,queryManager:s,routingTable:i,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=o,this.queryManager=s,this.routingTable=i,this.providers=a,this.findProviders=e.metrics?.traceFunction("libp2p.kadDHT.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,d)=>(l.name==="PROVIDER"&&(d.providers??=[],d.providers.push(...l.providers.map(u=>u.id.toString()))),d)})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.kadDHT.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,d)=>(l.name==="PEER_RESPONSE"&&l.messageName==="ADD_PROVIDER"&&(d.providers??=[],d.providers.push(l.from.toString())),d)})??this.provide}async*provide(e,t,n={}){this.log("provide %s",e);let o=e.multihash.bytes;await this.providers.addProvider(e,this.components.peerId,n);let s={type:Ae.ADD_PROVIDER,key:o,providers:[nv({id:this.components.peerId,multiaddrs:t})]},i=0,a=this;async function*c(u){try{a.log("sending provider record for %s to %p",e,u.peer.id);for await(let f of a.network.sendMessage(u.peer.id,s,{...n,path:u.path}))f.name==="PEER_RESPONSE"&&(a.log("sent provider record for %s to %p",e,u.peer.id),i++),yield f}catch(f){a.log.error("error sending provide record to peer %p - %e",u.peer.id,f),yield sn({from:u.peer.id,error:f,path:u.path},n)}}let l=vt({objectMode:!0}),d=new St({concurrency:Zo});d.addEventListener("idle",()=>{l.end()}),d.addEventListener("failure",u=>{this.log.error("error publishing provider record to peer - %e",u.detail.error)}),d.add(async()=>{let u=[];for await(let f of this.peerRouting.getClosestPeers(o,n))l.push(f),f.name==="FINAL_PEER"&&u.push(f);u.forEach(f=>{d.add(async()=>{for await(let h of c(f))l.push(h)}).catch(h=>{this.log.error("error publishing provider record to peer - %e",h)})})}).catch(u=>{l.end(u)}),yield*l,this.log("sent provider records to %d peers",i)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,o=0,s=e.multihash.bytes,i=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e,t);if(a.length>0){let d=[];for(let u of a.slice(0,n))try{let f=await this.components.peerStore.get(u,t);d.push({id:u,multiaddrs:f.addresses.map(({multiaddr:h})=>h)})}catch(f){if(f.name!=="NotFoundError")throw f;this.log("no peer store entry for %p",u)}if(yield lu({from:this.components.peerId,messageType:Ae.GET_PROVIDERS,providers:d,path:{index:-1,queued:0,running:0,total:0}},t),yield Q4({from:this.components.peerId,providers:d,path:{index:-1,queued:0,running:0,total:0}},t),o+=d.length,o>=n)return}let c=async function*({peer:d,signal:u,path:f}){let h={type:Ae.GET_PROVIDERS,key:s};yield*i.network.sendRequest(d.id,h,{...t,signal:u,path:f})},l=new xr(a);for await(let d of this.queryManager.run(s,c,t))if(yield d,d.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",d.providers.length,e,d.closer.length);let u=[];for(let f of d.providers)l.has(f.id)||(l.add(f.id),u.push(f));if(u.length>0&&(yield Q4({from:d.from,providers:u,path:d.path},t),o+=u.length,o>=n))return}}};var c0=class extends ie{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 Gr({...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],s){return{...s,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((s,i)=>{o[`providers-${i}`]=s.id.toString()}),n.closer.length>0&&n.closer.forEach((s,i)=>{o[`closer-${i}`]=s.id.toString()})),o)})??this.sendRequest,this.sendMessage=e.metrics?.traceFunction("libp2p.kadDHT.sendMessage",this.sendMessage.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],s){return{...s,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((s,i)=>{o[`providers-${i}`]=s.id.toString()}),n.closer.length>0&&n.closer.forEach((s,i)=>{o[`closer-${i}`]=s.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 A("Message type was missing");let s,i=this.timeout.getTimeoutSignal(n);n={...n,signal:i};try{this.metrics.operations?.increment({[o]:!0}),this.log("dialling %p",e),yield X4({peer:e,path:n.path},n),s=await this.components.connectionManager.openStream(e,this.protocol,n),this.log("sending %s to %p",t.type,e),yield j4({to:e,type:o,path:n.path},n);let a=await this._writeReadMessage(s,t,n);s.close(n).catch(c=>{this.log.error("error closing stream to %p - %e",e,c),s?.abort(c)}),yield lu({from:e,messageType:a.type,closer:a.closer.map(du),providers:a.providers.map(du),record:a.record==null?void 0:Pt.deserialize(a.record),path:n.path},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),s?.abort(a),n.signal?.aborted!==!0&&this.log.error("could not send %s to %p - %e",t.type,e,a),yield sn({from:e,error:a,path:n.path},n)}finally{this.timeout.cleanUp(i)}}async*sendMessage(e,t,n){if(!this.running)return;let o=t.type;if(o==null)throw new A("Message type was missing");let s,i=this.timeout.getTimeoutSignal(n);n={...n,signal:i};try{this.metrics.operations?.increment({[o]:!0}),this.log("dialling %p",e),yield X4({peer:e,path:n.path},n),s=await this.components.connectionManager.openStream(e,this.protocol,n),this.log("sending %s to %p",t.type,e),yield j4({to:e,type:o,path:n.path},n),await this._writeMessage(s,t,n),s.close(n).catch(a=>{this.log.error("error closing stream to %p - %e",e,a),s?.abort(a)}),yield lu({from:e,messageType:o,path:n.path},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),s?.abort(a),yield sn({from:e,error:a,path:n.path},n)}finally{this.timeout.cleanUp(i)}}async _writeMessage(e,t,n){await Ue(e).write(t,es,n)}async _writeReadMessage(e,t,n){let o=Ue(e);await o.write(t,es,n);let s=await o.read(es,n);return s.closer.forEach(i=>{this.safeDispatchEvent("peer",{detail:du(i)})}),s.providers.forEach(i=>{this.safeDispatchEvent("peer",{detail:du(i)})}),s}};function li(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 ns=class{originDhtKey;capacity;peerDistances;constructor(e,t){this.originDhtKey=e,this.capacity=t,this.peerDistances=[]}get length(){return this.peerDistances.length}get peers(){return[...this.peerDistances]}async add(e,t={index:-1,queued:0,running:0,total:0},n){let o=await cr(e.id,n);this.addWithKadId(e,o,t)}addWithKadId(e,t,n={index:-1,queued:0,running:0,total:0}){if(this.peerDistances.find(i=>i.peer.id.equals(e.id))!=null)return;let o={peer:e,distance:nn(this.originDhtKey,t),path:n};if(this.peerDistances.length===this.capacity){let i=this.peerDistances[this.peerDistances.length-1];if(i!=null&&li(o.distance,i.distance)!==-1)return}let s=!1;for(let i=0;i<this.peerDistances.length;i++){let a=li(this.peerDistances[i].distance,o.distance);if(a===0||a===1){s=!0,this.peerDistances.splice(i,0,o);break}}s||this.peerDistances.push(o),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e,t){if(this.length===0)return!0;let n=await cr(e,t),o=nn(n,this.originDhtKey),s=this.peerDistances[this.peerDistances.length-1].distance;return li(o,s)===-1}async anyCloser(e,t){return e.length===0?!1:Promise.any(e.map(async n=>this.isCloser(n,t)))}};var l0=class{log;routingTable;network;validators;queryManager;components;constructor(e,t){this.routingTable=t.routingTable,this.network=t.network,this.validators=t.validators,this.queryManager=t.queryManager,this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:peer-routing`),this.findPeer=e.metrics?.traceFunction("libp2p.kadDHT.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.kadDHT.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async findPeerLocal(e,t){let n,o=await this.routingTable.find(e,t);if(o!=null){this.log("findPeerLocal found %p in routing table",e);try{n=await this.components.peerStore.get(o,t)}catch(s){if(s.name!=="NotFoundError")throw s}}if(n==null)try{n=await this.components.peerStore.get(e,t)}catch(s){if(s.name!=="NotFoundError")throw s}if(n!=null)return this.log("findPeerLocal found %p in peer store",e),{id:n.id,multiaddrs:n.addresses.map(s=>s.multiaddr)}}async*_getValueSingle(e,t,n){let o={type:Ae.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=ev(e),o={index:-1,queued:0,running:0,total:0};for await(let s of this._getValueSingle(e,n,{...t,path:o}))if(yield s,s.name==="PEER_RESPONSE"&&s.record!=null){let i=et(s.record.value),a=xn(i);if(!a.equals(e))throw new Nn("public key does not match id");if(a.publicKey==null)throw new Nn("public key missing");yield uu({from:e,value:s.record.value,path:o},t)}throw new Jo(`Node not responding with its public key: ${e.toString()}`)}async*findPeer(e,t={}){if(this.log("findPeer %p",e),t.useCache!==!1){let o=await this.findPeerLocal(e,t);if(o!=null){this.log("found local"),yield t0({from:this.components.peerId,peer:o,path:{index:-1,queued:0,running:0,total:0}},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,s=async function*({peer:i,signal:a,path:c}){let l={type:Ae.FIND_NODE,key:e.toMultihash().bytes};for await(let d of o.network.sendRequest(i.id,l,{...t,signal:a,path:c}))if(yield d,d.name==="PEER_RESPONSE"){let u=d.closer.find(f=>f.id.equals(e));u!=null&&(yield t0({from:d.from,peer:u,path:d.path},t))}};for await(let i of this.queryManager.run(e.toMultihash().bytes,s,t))i.name==="FINAL_PEER"&&(n=!0),yield i}if(!n)throw new Le("Not found")}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await ts(e,t),o=new ns(n,this.routingTable.kBucketSize),s=this,i=async function*({peer:a,path:c,peerKadId:l,signal:d}){s.log("getClosestPeers asking %p",a.id);let u={type:Ae.FIND_NODE,key:e};yield*s.network.sendRequest(a.id,u,{...t,signal:d,path:c}),o.addWithKadId(a,l,c)};yield*this.queryManager.run(e,i,t),this.log("found %d peers close to %b",o.length,e);for(let{peer:a,path:c}of o.peers)try{if(a.multiaddrs.length===0&&(a=await s.components.peerStore.getInfo(a.id,t)),a.multiaddrs.length===0)continue;yield t0({from:this.components.peerId,peer:await s.components.peerStore.getInfo(a.id,t),path:{index:c.index,queued:0,running:0,total:0}},t)}catch{continue}}async*getValueOrPeers(e,t,n){for await(let o of this._getValueSingle(e,t,n)){if(o.name==="PEER_RESPONSE"&&o.record!=null)try{await this._verifyRecordOnline(o.record,n)}catch{let i="invalid record received, discarded";this.log(i),yield sn({from:o.from,error:new Jo(i),path:n.path},n);continue}yield o}}async _verifyRecordOnline(e,t){if(e.timeReceived==null)throw new Zp("invalid record received");await Ha(this.validators,new Pt(e.key,e.value,e.timeReceived),t)}async getClosestPeersOffline(e,t){let n=[];try{let i=ke(e),a=Xe(i),c=await this.components.peerStore.get(a,t);n.push({id:c.id,multiaddrs:c.addresses.map(({multiaddr:l})=>l)})}catch{}let o=await ts(e,t),s=this.routingTable.closestPeers(o,t);for(let i of s)try{n.push(await this.components.peerStore.getInfo(i,t))}catch(a){if(a.name!=="NotFoundError")throw a}return n.length>0?this.log("getClosestPeersOffline returning the %d closest peer(s) we know to %b",n.length,e):this.log("getClosestPeersOffline could not any peers close to %b with %d peers in the routing table",e,this.routingTable.size),n}};var u0=class{log;datastore;datastorePrefix;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:providers`),this.datastorePrefix=`${t.datastorePrefix}/provider`,this.datastore=e.datastore}async addProvider(e,t,n){this.log.trace("%p provides %s",t,e),await this.writeProviderEntry(e,t,n)}async removeProvider(e,t,n){let o=n0(this.datastorePrefix,e,t);this.log.trace("%p no longer provides %s",t,e),await this.datastore.delete(o,n)}async getProviders(e,t){this.log.trace("get providers for %c",e);let n=await this.loadProviders(e,t);return this.log.trace("got %d providers for %c",n.size,e),[...n.keys()]}async writeProviderEntry(e,t,n){let o=n0(this.datastorePrefix,e,t),s=Mt(n?.time?.getTime()??Date.now());await this.datastore.put(o,s,n)}async loadProviders(e,t){let n=new Ut,o=n0(this.datastorePrefix,e);for await(let s of this.datastore.query({prefix:o.toString()},t)){let{peerId:i}=r0(s.key);n.set(i,o0(s.value))}return n}};var dD=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 fD(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:d}=dD(r),u=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(g){n(),i(g);return}c.push(p),t.count===c.length&&(n(),s(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)a.includes(h)||d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&s(c)});if(o.cancel=n,typeof t.timeout=="number"){let s=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function ov(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=fD(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}async function*sv(r){let{key:e,startingPeers:t,ourPeerId:n,query:o,alpha:s,path:i,numPaths:a,log:c,peersSeen:l,connectionManager:d,signal:u}=r,f=vt({objectMode:!0}),h=new St({concurrency:s,sort:(g,m)=>li(g.options.distance,m.options.distance)});h.addEventListener("idle",()=>{f.push(jx({path:{index:i,queued:h.queued,running:h.running,total:h.size}},r)),f.end()}),h.addEventListener("failure",g=>{c.error("error during query - %e",g.detail.error)});let p=()=>{h.abort(),f.end(new Vt)};u.addEventListener("abort",p);try{let m=function(w,T){if(w==null)return;l.add(w.id.toMultihash().bytes);let I=nn(T,g);h.add(async()=>{try{for await(let D of o({...r,key:e,peer:w,path:{index:i,queued:h.queued,running:h.running,total:h.size},numPaths:a,peerKadId:T,signal:u})){if(D.name==="PEER_RESPONSE")for(let F of D.closer){if(l.has(F.id.toMultihash().bytes)){c("already seen %p in query",F.id);continue}if(n.equals(F.id)){c("not querying ourselves");continue}if(!await d.isDialable(F.multiaddrs)){c("not querying undialable peer");continue}let $=await cr(F.id,{signal:u}),W=nn($,g);if(li(W,I)!==-1){c("skipping %p as they are not closer to %b than %p",F.id,e,w.id);continue}c("querying closer peer %p",F.id),m(F,$)}f.push({...D,path:{index:i,queued:h.queued,running:h.running,total:h.size}})}}catch(D){f.push(sn({from:w.id,error:D,path:{index:i,queued:h.queued,running:h.running-1,total:h.size-1}},r))}},{distance:I}).catch(D=>{c.error("error during query - %e",D)})},g=await ts(e,{signal:u});await Promise.all(t.map(async w=>{m({id:w,multiaddrs:[]},await cr(w,{signal:u}))})),yield*f}finally{u.removeEventListener("abort",p)}}var d0=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;allowQueryWithZeroPeers;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??Xp,this.alpha=t.alpha??Zo,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.allowQueryWithZeroPeers=t.allowQueryWithZeroPeers??!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.running=!1}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.shutDownController=new AbortController,this.shutDownController.signal,void 0)}async stop(){this.running=!1,this.shutDownController.abort()}async*run(e,t,n={}){if(!this.running)throw new Error("QueryManager not started");if(n.signal==null){let c=AbortSignal.timeout(zx);n={...n,signal:c}}let o=new AbortController,s=le([this.shutDownController.signal,o.signal,n.signal]);o.signal;let i=this.logger.forComponent(`${this.logPrefix}:query:`+R(e,"base58btc")),a=!1;try{this.routingTable.size===0&&!this.allowQueryWithZeroPeers&&(i("routing table was empty, waiting for some peers before running%s query",n.isSelfQuery===!0?" self":""),await ov(this.routingTable,"peer:add",{signal:s,filter:h=>!this.peerId.equals(h.detail)}),i("routing table has peers, continuing with%s query",n.isSelfQuery===!0?" self":"")),n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(i("waiting for initial self query before continuing"),await Pe(this.initialQuerySelfHasRun.promise,s),this.initialQuerySelfHasRun=void 0),i("query:start");let c=await ts(e,{signal:s}),l=this.routingTable.closestPeers(c,{count:this.routingTable.kBucketSize}),d=l.sort(()=>Math.random()>.5?1:-1).reduce((h,p,g)=>(h[g%this.disjointPaths].push(p),h),new Array(this.disjointPaths).fill(0).map(()=>[])).filter(h=>h.length>0);if(l.length===0){i.error("running query with no peers");return}let u=Et(1024),f=d.map((h,p)=>sv({...n,key:e,startingPeers:h,ourPeerId:this.peerId,signal:s,query:t,path:p,numPaths:d.length,alpha:this.alpha,log:i,peersSeen:u,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let h of jt(...f)){if(h.name==="QUERY_ERROR"&&i.error("query error - %e",h.error),h.name==="PEER_RESPONSE")for(let p of[...h.closer,...h.providers])await this.connectionManager.isDialable(p.multiaddrs,{signal:s})&&await this.routingTable.add(p.id,{signal:s});s.throwIfAborted(),yield h}a=!0}catch(c){if(this.running)throw c}finally{a||(i("query exited early"),o.abort()),s.clear(),i("query finished")}}};function hD(r){return r[Symbol.asyncIterator]!=null}function pD(r){if(hD(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 f0=pD;var h0=class{log;peerId;peerRouting;events;count;interval;initialInterval;queryTimeout;running;timeoutId;controller;initialQuerySelfHasRun;querySelfPromise;constructor(e,t){this.peerId=e.peerId,this.log=e.logger.forComponent(`${t.logPrefix}:query-self`),this.events=e.events,this.running=!1,this.peerRouting=t.peerRouting,this.count=t.count??Xp,this.interval=t.interval??$x,this.initialInterval=t.initialInterval??Kx,this.queryTimeout=t.queryTimeout??Vx,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=s0(this.querySelf.bind(this),t.operationMetrics,"SELF_QUERY")}isStarted(){return this.running}start(){this.running||(this.running=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query - %e",e)})},this.initialInterval))}stop(){this.running=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.running){this.log("skip self-query because we are not started");return}if(this.querySelfPromise!=null)return this.log("joining existing self query"),this.querySelfPromise.promise;if(this.querySelfPromise=fe(),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.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await Yi(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),i=>Ho(i,this.count),async i=>f0(i));t?.throwIfAborted();let s=Date.now()-n;this.log("self-query found %d peers in %dms",o,s),this.events.dispatchEvent(new CustomEvent("kad-dht:query:self",{detail:{peers:o,duration:s}}))}catch(n){this.log.error("self-query error - %e",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.running&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query - %e",e)})},this.interval))}};var p0=class extends ie{log;reprovideQueue;maxQueueSize;datastore;timeout;reprovideTimeout;running;shutdownController;reprovideThreshold;contentRouting;datastorePrefix;addressManager;validity;interval;peerId;constructor(e,t){super(),this.log=e.logger.forComponent(`${t.logPrefix}:reprovider`),this.peerId=e.peerId,this.reprovideQueue=new St({concurrency:t.concurrency??Mx,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new Gr({...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??Ox,this.maxQueueSize=t.maxQueueSize??Bx,this.validity=t.validity??Qp,this.interval=t.interval??Ux,this.contentRouting=t.contentRouting,this.running=!1,this.reprovide=s0(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,this.timeout=setTimeout(()=>{this.processRecords({signal:AbortSignal.timeout(W4)}).catch(e=>{this.log.error("error running process to reprovide/cleanup - %e",e)})},this.interval))}stop(){this.running=!1,this.reprovideQueue.clear(),clearTimeout(this.timeout),this.shutdownController?.abort()}async processRecords(e){try{this.safeDispatchEvent("reprovide:start"),this.log("starting reprovide/cleanup");for await(let t of this.datastore.query({prefix:this.datastorePrefix},e))try{let{cid:n,peerId:o}=r0(t.key),i=o0(t.value).getTime()+this.validity,a=Date.now(),c=a>i,l=this.peerId.equals(o);this.log.trace("comparing: %d (now) < %d (expires) = %s %s",a,i,c,c?"(expired)":"(valid)"),c&&!l&&await this.datastore.delete(t.key,e),this.shouldReprovide(l,i)&&(this.log("reproviding %c as it is within the reprovide threshold (%d)",n,this.reprovideThreshold),this.queueReprovide(n).catch(d=>{this.log.error("could not reprovide %c - %e",n,d)}))}catch(n){this.log.error("error processing datastore key %s - %s",t.key,n.message)}this.log("reprovide/cleanup successful")}finally{this.safeDispatchEvent("reprovide:end"),this.running&&(this.log("queuing next re-provide/cleanup run in %d ms",this.interval),this.timeout=setTimeout(()=>{this.processRecords({signal:AbortSignal.timeout(W4)}).catch(t=>{this.log.error("error running re-provide - %e",t)})},this.interval))}}shouldReprovide(e,t){if(!e)return!1;let n=Date.now();return t<n?!0:t-n<this.reprovideThreshold}async queueReprovide(e,t){if(!this.running)return;this.log.trace("waiting for queue capacity before adding %c to re-provide queue",e),await this.reprovideQueue.onSizeLessThan(this.maxQueueSize,t);let n=this.reprovideQueue.queue.find(o=>o.options.cid.equals(e));if(n!=null)return this.log.trace("not adding %c to re-provide queue - already in queue",e),n.join();this.log.trace("adding %c to re-provide queue",e),this.reprovideQueue.add(async o=>{if(o.signal?.throwIfAborted(),!this.running)return;this.log.trace("re-providing %c",e);let s=this.reprovideTimeout.getTimeoutSignal(o);try{await this.reprovide(o.cid,o)}finally{this.reprovideTimeout.cleanUp(s)}this.log.trace("re-provided %c",e)},{signal:this.shutdownController?.signal,cid:e}).catch(o=>{this.log.error("could not re-provide key %c - %e",e,o)})}async reprovide(e,t){await er(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var mD=20,gD=5e3,yD="kad-close",wD=50,m0=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??gD,this.peerSetSize=t.peerSetSize??mD,this.closeTagName=t.closeTagName??yD,this.closeTagValue=t.closeTagValue??wD,this.closestPeers=new xr,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await cr(this.components.peerId);this.newPeers=new ns(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 xr(this.newPeers?.peers.map(({peer:o})=>o.id)),t=e.difference(this.closestPeers),n=this.closestPeers.difference(e);this.closestPeers=e,await Promise.all([...[...t].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:{value:this.closeTagValue},[G4]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[G4]:void 0}})})])}};function fu(r){return Array.isArray(r?.peers)}var g0=class{peerId;root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e,t){this.peerId=e.peerId,this.prefixLength=t.prefixLength??iv,this.kBucketSize=t.kBucketSize??hu,this.splitThreshold=t.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=t.numberOfOldContactsToPing??av,this.lastPingThreshold=t.lastPingThreshold??cv,this.ping=t.ping,this.verify=t.verify,this.onAdd=t.onAdd,this.onRemove=t.onRemove,this.addingPeerMap=eo({name:`${t.metricsPrefix}_adding_peer_map`,metrics:e.metrics}),this.root={prefix:"",depth:0,peers:[]}}async start(){await this.addSelfPeer(this.peerId)}stop(){this.addingPeerMap.clear(),this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e,t){this.localPeer={peerId:e,kadId:await cr(e,t),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await cr(e,t),lastPing:0},o=this.addingPeerMap.get(e);if(o!=null)return o;try{let s=this._add(n,t);this.addingPeerMap.set(e,s),await s}finally{this.addingPeerMap.delete(e)}}async _add(e,t){let n=this._determineBucket(e.kadId);if(this._indexOf(n,e.kadId)>-1)return;if(n.peers.length===this.splitThreshold&&n.depth<this.prefixLength){await this._split(n,t),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!ED(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n,t);return}await this.verify(e,t)&&(e.lastPing=Date.now(),await this._add(e,t));return}let o=n.peers.filter(i=>!(i.peerId.equals(this.localPeer?.peerId)||i.lastPing>Date.now()-this.lastPingThreshold)).sort((i,a)=>i.lastPing<a.lastPing?-1:i.lastPing>a.lastPing?1:0).slice(0,this.numberOfNodesToPing),s=!1;for await(let i of this.ping(o,t))s=!0,await this.remove(i.kadId,t);s&&await this._add(e,t)}*closest(e,t){let n=new ns(e,t?.count??this.kBucketSize);for(let o of this.toIterable())t?.exclude?.some(s=>s.equals(o.peerId))!==!0&&n.addWithKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*Lr(n.peers,({peer:o})=>o.id)}count(){function e(t){if(fu(t))return t.peers.length;let n=0;return t.left!=null&&(n+=e(t.left)),t.right!=null&&(n+=e(t.right)),n}return e(this.root)}get(e){let t=this._determineBucket(e),n=this._indexOf(t,e);return t.peers[n]}async remove(e,t){let n=this._determineBucket(e),o=this._indexOf(n,e);if(o>-1){let s=n.peers.splice(o,1)[0];await this.onRemove?.(s,n,t)}}*toIterable(){function*e(t){if(fu(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+R(nn(e,t),"base16"))}_determineBucket(e){let t=R(e,"base2");function n(o,s=0){return fu(o)?o:t[s]==="0"?n(o.left,s+1):n(o.right,s+1)}return n(this.root)}_indexOf(e,t){return e.peers.findIndex(n=>ee(n.kadId,t))}async _split(e,t){let n={prefix:"0",depth:e.depth+1,peers:[]},o={prefix:"1",depth:e.depth+1,peers:[]};for(let s of e.peers)R(s.kadId,"base2")[e.depth]==="0"?(n.peers.push(s),await this.onMove?.(s,e,n,t)):(o.peers.push(s),await this.onMove?.(s,e,o,t));bD(e,n,o)}};function bD(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function ED(r,e){return r.lastPing<Date.now()-e}var hu=20,iv=6;var xD=20,vD=100,av=3;var SD=20,AD=100,lv="kad-peer",ID=1,cv=6e5,TD=!0,CD=1e3,y0=class extends ie{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;shutdownController;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??hu,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??lv,this.peerTagValue=t.peerTagValue??ID,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??TD,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??CD,this.shutdownController=new AbortController,this.shutdownController.signal,this.pingOldContactQueue=new It({concurrency:t.pingOldContactConcurrency??SD,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??AD}),this.pingOldContactTimeout=new Gr({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new It({concurrency:t.pingNewContactConcurrency??xD,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??vD}),this.pingNewContactTimeout=new Gr({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new g0(e,{kBucketSize:t.kBucketSize,prefixLength:t.prefixLength,splitThreshold:t.splitThreshold,numberOfOldContactsToPing:t.numberOfOldContactsToPing,lastPingThreshold:t.lastPingThreshold,ping:this.pingOldContacts,verify:this.verifyNewContact,onAdd:this.peerAdded,onRemove:this.peerRemoved,metricsPrefix:t.metricsPrefix}),this.closestPeerTagger=new m0(this.components,{logPrefix:t.logPrefix,routingTable:this,peerSetSize:t.closestPeerSetSize,refreshInterval:t.closestPeerSetRefreshInterval,closeTagName:t.closeTagName,closeTagValue:t.closeTagValue}),this.components.metrics!=null&&(this.metrics={routingTableSize:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_size`),routingTableKadBucketTotal:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_total`),routingTableKadBucketAverageOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_average_occupancy`),routingTableKadBucketMinOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_min_occupancy`),routingTableKadBucketMaxOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_occupancy`),routingTableKadBucketMaxDepth:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_depth`),kadBucketEvents:this.components.metrics.registerCounterGroup(`${t.metricsPrefix}_kad_bucket_events_total`)})}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,await at(this.closestPeerTagger,this.kb))}async afterStart(){let e=0;Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let t=le([this.shutdownController.signal,AbortSignal.timeout(2e4)]);try{for(let n of await this.components.peerStore.all({filters:[o=>o.protocols.includes(this.protocol)&&o.tags.has(lv)],limit:this.populateFromDatastoreLimit,signal:t})){if(!this.running)return;try{await this.add(n.id,{signal:t}),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(n.id,{tags:{[this.peerTagName]:void 0}})}}}finally{t.clear()}this.log("added %d peer store peers to the routing table",e)}).catch(t=>{this.log.error("error adding %d, peer store peers to the routing table - %e",e,t)})}async stop(){this.running=!1,await lt(this.closestPeerTagger,this.kb),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort(),this.shutdownController.abort()}async peerAdded(e,t,n){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}},n),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t,n){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}},n),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_removed:!0}),this.safeDispatchEvent("peer:remove",{detail:e.peerId})}async*pingOldContacts(e,t){if(!this.running)return;let n=[];for(let o of e){if(this.kb.get(o.kadId)==null){this.log("asked to ping contact %p that was not in routing table",o.peerId);continue}this.metrics?.kadBucketEvents.increment({ping_old_contact:!0}),n.push(async()=>{let s=this.pingOldContactQueue.find(o.peerId);if(s!=null)return this.log("asked to ping contact %p was already being pinged",o.peerId),await s.join(t)?void 0:o;if(!await this.pingOldContactQueue.add(async a=>{let c=this.pingOldContactTimeout.getTimeoutSignal(),l=le([c,this.shutdownController.signal,a?.signal]);try{return await this.pingContact(o,a)}catch{return this.metrics?.kadBucketEvents.increment({ping_old_contact_error:!0}),!0}finally{this.pingOldContactTimeout.cleanUp(c),l.clear()}},{peerId:o.peerId,signal:t?.signal}))return o})}for await(let o of io(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=le([n,this.shutdownController.signal,t?.signal]);try{let s=this.pingNewContactQueue.find(e.peerId);return s!=null?(this.log("joining existing ping to add new peer %p to routing table",e.peerId),await s.join({signal:o})):await this.pingNewContactQueue.add(async i=>(this.metrics?.kadBucketEvents.increment({ping_new_contact:!0}),this.log("pinging new peer %p before adding to routing table",e.peerId),this.pingContact(e,i)),{peerId:e.peerId,signal:o})}catch{return this.log.trace("tried to add peer %p but they were not online",e.peerId),this.metrics?.kadBucketEvents.increment({ping_new_contact_error:!0}),!1}finally{this.pingNewContactTimeout.cleanUp(n),o.clear()}}async pingContact(e,t){let n;try{return this.log("pinging contact %p",e.peerId),await this.components.ping.ping(e.peerId,t),this.log("contact %p ping ok",e.peerId),this.safeDispatchEvent("peer:ping",{detail:e.peerId}),!0}catch(o){return this.log("error pinging old contact %p - %e",e.peerId,o),n?.abort(o),!1}}get size(){return this.kb==null?0:this.kb.count()}async find(e,t){let n=await cr(e,t);return this.kb.get(n)?.peerId}closestPeer(e){let t=this.closestPeers(e,{count:1});if(t.length>0)return t[0]}closestPeers(e,t){return this.kb==null?[]:[...this.kb.closest(e,t)]}async add(e,t){if(this.kb==null)throw new Error("RoutingTable is not started");await this.kb.add(e,t)}async remove(e,t){if(this.kb==null)throw new Error("RoutingTable is not started");let n=await cr(e,t);await this.kb.remove(n,t)}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0,o=20,s=0;function i(a){if(fu(a)){a.depth>n&&(n=a.depth),t++,e+=a.peers.length,a.peers.length<o&&(o=a.peers.length),a.peers.length>s&&(s=a.peers.length);return}i(a.left),i(a.right)}i(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(s),this.metrics.routingTableKadBucketMaxDepth.update(n)}};var uv=[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 w0=15,b0=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:o,refreshInterval:s,refreshQueryTimeout:i,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=o,this.refreshInterval=s??Hx,this.refreshQueryTimeout=i??qx,this.commonPrefixLengthRefreshedAt=[],this.refreshTable=this.refreshTable.bind(this)}async afterStart(){this.log(`refreshing routing table every ${this.refreshInterval}ms`),this.refreshTable(!0)}async stop(){this.refreshTimeoutId!=null&&clearTimeout(this.refreshTimeoutId)}refreshTable(e=!1,t){this.log("refreshing routing table");let n=this._maxCommonPrefix(),o=this._getTrackedCommonPrefixLengthsForRefresh(n);this.log(`max common prefix length ${n}`),this.log(`tracked CPLs [ ${o.map(s=>s.toISOString()).join(", ")} ]`),Promise.all(o.map(async(s,i)=>{try{if(await this._refreshCommonPrefixLength(i,s,e,t),this._numPeersForCpl(n)===0){let a=Math.min(2*(i+1),o.length-1);for(let c=i+1;c<a+1;c++)try{await this._refreshCommonPrefixLength(c,s,e,t)}catch(l){this.log.error("failed to refresh entries with common prefix length %d - %e",c,l)}}}catch(a){this.log.error("failed to refresh entries with common prefix length - %e",a)}})).catch(s=>{this.log.error("failed to refresh table - %e",s)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(s=>{this.log.error("failed to set refresh timeout - %e",s)})}async _refreshCommonPrefixLength(e,t,n,o){if(!n&&t.getTime()>Date.now()-this.refreshInterval){this.log("not running refresh for cpl %s as time since last refresh not above interval",e);return}let s=this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,s,this.routingTable.size);let i=le([o?.signal,AbortSignal.timeout(this.refreshQueryTimeout)]);try{let a=await f0(this.peerRouting.getClosestPeers(s.toMultihash().bytes,{signal:i}));this.log(`found ${a} peers that were close to imaginary peer %p`,s),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,s,this.routingTable.size)}finally{i.clear()}}_getTrackedCommonPrefixLengthsForRefresh(e){e>w0&&(e=w0);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}_generateRandomPeerId(e){if(this.routingTable.kb==null)throw new Error("Routing table not started");if(this.routingTable.kb.localPeer==null)throw new Error("Local peer not set");let t=Yt(2),n=(t[1]<<8)+t[0],o=this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),s=ke(o);return Xe(s)}_makePeerId(e,t,n){if(n>w0)throw new Error(`Cannot generate peer ID for common prefix length greater than ${w0}`);let i=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1)^32768>>n,a=65535<<16-(n+1),c=i&a|t&~a,l=uv[c],d=new ArrayBuffer(34),u=new DataView(d,0,d.byteLength);return u.setUint8(0,We.code),u.setUint8(1,32),u.setUint32(2,l,!1),new Uint8Array(u.buffer,u.byteOffset,u.byteLength)}_maxCommonPrefix(){let e=0;for(let t of this._prefixLengths())t>e&&(e=t);return e}_numPeersForCpl(e){let t=0;for(let n of this._prefixLengths())n===e&&t++;return t}*_prefixLengths(){if(this.routingTable.kb?.localPeer!=null)for(let{kadId:e}of this.routingTable.kb.toIterable()){let t=nn(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var E0=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 de("Missing key");let n;try{n=G.decode(t.key)}catch{throw new de("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 s=ke(o.id),i=Xe(s),a=o.multiaddrs.map(c=>q(c));if(!e.equals(i)){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,i),await this.peerStore.merge(i,{multiaddrs:a})}))}};var x0=class{peerRouting;peerInfoMapper;peerId;addressManager;log;constructor(e,t){let{peerRouting:n,logPrefix:o}=t;this.log=e.logger.forComponent(`${o}:rpc:handlers:find-node`),this.peerId=e.peerId,this.addressManager=e.addressManager,this.peerRouting=n,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){this.log("incoming request from %p for peers close to %b",e,t.key);try{if(t.key==null)throw new de("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getClosestPeersOffline(t.key,{exclude:[e,this.peerId]});ee(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(s=>s.decapsulateCode(421))});let o={type:Ae.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:s})=>s.length).map(s=>({id:s.id.toMultihash().bytes,multiaddrs:s.multiaddrs.map(i=>i.bytes)})),providers:[]};return o.closer.length===0?this.log("could not find any peers closer to %b for %p",t.key,e):this.log("found %d peers close to %b for %p",o.closer.length,t.key,e),o}catch(n){throw this.log("error during finding peers closer to %b for %p - %e",t.key,e,n),n}}};var v0=class{peerId;peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:o,logPrefix:s}=t;this.log=e.logger.forComponent(`${s}: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 de("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=G.decode(t.key)}catch{throw new de("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[o,s]=await Promise.all([no(Lr(await this.providers.getProviders(n),async a=>{let c=await this.peerStore.get(a);return{id:c.id,multiaddrs:c.addresses.map(({multiaddr:d})=>d)}})),this.peerRouting.getClosestPeersOffline(t.key)]),i={type:Ae.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:s.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",i.providers.length,i.closer.length),i}async _getAddresses(e){return[]}};var S0=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 de("Invalid key");let o={type:Ae.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(tv(n)){this.log("is public key");let a=rv(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new Le("No public key found in key book");c=ft(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new Pt(n,c,new Date).serialize(),o}let[s,i]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getClosestPeersOffline(n)]);return s!=null&&(this.log("had record for %b in local datastore",n),o.record=s.serialize()),i.length>0&&(this.log("had %s closer peers in routing table",i.length),o.closer=i.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=rs(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(s){if(s.name==="NotFoundError")return;throw s}let o=Pt.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>Qp){await this.datastore.delete(t);return}return o}};var A0=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 I0=class{components;validators;log;datastorePrefix;constructor(e,t){let{validators:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:put-value`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.validators=n}async handle(e,t){let n=t.key;if(this.log("%p asked us to store value for key %b",e,n),t.record==null)throw this.log.error("empty record from %p",e),new de(`Empty record from: ${e}`);try{let o=Pt.deserialize(t.record);await Ha(this.validators,o),o.timeReceived=new Date;let s=rs(this.datastorePrefix,o.key);await this.components.datastore.put(s,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,s)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var T0=class{handlers;log;metrics;incomingMessageTimeout;constructor(e,t){this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_errors_total`),rpcTime:e.metrics?.registerMetricGroup(`${t.metricsPrefix}_inbound_rpc_time_seconds`,{label:"operation"})},this.log=e.logger.forComponent(`${t.logPrefix}:rpc`),this.incomingMessageTimeout=t.incomingMessageTimeout??1e4,this.handlers={[Ae.GET_VALUE.toString()]:new S0(e,t),[Ae.PUT_VALUE.toString()]:new I0(e,t),[Ae.FIND_NODE.toString()]:new x0(e,t),[Ae.ADD_PROVIDER.toString()]:new E0(e,t),[Ae.GET_PROVIDERS.toString()]:new v0(e,t),[Ae.PING.toString()]:new A0(e,t)}}async handleMessage(e,t){let n=this.handlers[t.type];if(n==null){this.log.error(`no handler found for message type: ${t.type}`);return}try{return this.metrics.operations?.increment({[t.type]:!0}),await n.handle(e,t)}catch{this.metrics.errors?.increment({[t.type]:!0})}}async onIncomingStream(e,t){let n=()=>{e.abort(new un)},o=AbortSignal.timeout(this.incomingMessageTimeout);o.addEventListener("abort",n);let s=Ue(e).pb(es);for(;;){if(e.readStatus!=="readable"){await e.close({signal:o});break}let i=await s.read({signal:o}),a=this.metrics?.rpcTime?.timer(i.type.toString()),c=this.metrics?.rpcTime?.timer(i.type.toString()),l=!1;try{this.log("incoming %s from %p",i.type,t.remotePeer);let d=await this.handleMessage(t.remotePeer,i);d!=null&&await s.write(d,{signal:o})}catch(d){throw l=!0,c?.(),d}finally{l||a?.()}o.removeEventListener("abort",n),o=AbortSignal.timeout(this.incomingMessageTimeout),o.addEventListener("abort",n)}}};var C0=class extends ie{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 J4=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await er(this.dht.provide(e,t))}async cancelReprovide(e){await this.dht.cancelReprovide(e)}async*findProviders(e,t={}){for await(let n of this.dht.findProviders(e,t))n.name==="PROVIDER"&&(yield*n.providers.map(o=>({...o,routing:"kad-dht"})))}async put(e,t,n){await er(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 Le("Could not find value for key")}},e6=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 Le("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},_D=32,kD=64,_0=class extends ie{k;a;d;protocol;routingTable;providers;network;peerRouting;components;log;running;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;reprovider;onPeerConnectTimeout;constructor(e,t={}){super();let n=t.logPrefix??"libp2p:kad-dht",o=t.datastorePrefix??"/dht",s=t.metricsPrefix??"libp2p_kad_dht",i={queries:e.metrics?.registerMetricGroup(`${s}_operations_total`,{label:"operation"}),errors:e.metrics?.registerCounterGroup(`${s}_operation_errors_total`,{label:"operation"}),queryTime:e.metrics?.registerMetricGroup(`${s}_operation_time_seconds`,{label:"operation"}),errorTime:e.metrics?.registerMetricGroup(`${s}_operation_error_time_seconds`,{label:"operation"})};this.running=!1,this.components=e,this.log=e.logger.forComponent(n),this.k=t.kBucketSize??hu,this.a=t.alpha??Zo,this.d=t.disjointPaths??this.a,this.protocol=t.protocol??Nx,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??_D,this.maxOutboundStreams=t.maxOutboundStreams??kD,this.peerInfoMapper=t.peerInfoMapper??Jx,this.onPeerConnectTimeout=t.onPeerConnectTimeout??Fx,this.providers=new u0(e,{...t.providers,logPrefix:n,datastorePrefix:o}),this.validators={...Zx,...t.validators},this.selectors={...Xx,...t.selectors},this.network=new c0(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:s}),this.routingTable=new y0(e,{kBucketSize:this.k,pingOldContactTimeout:t.pingOldContactTimeout,pingOldContactConcurrency:t.pingOldContactConcurrency,pingOldContactMaxQueueSize:t.pingOldContactMaxQueueSize,pingNewContactTimeout:t.pingNewContactTimeout,pingNewContactConcurrency:t.pingNewContactConcurrency,pingNewContactMaxQueueSize:t.pingNewContactMaxQueueSize,protocol:this.protocol,logPrefix:n,metricsPrefix:s,prefixLength:t.prefixLength,splitThreshold:t.kBucketSplitThreshold,network:this.network});let a=fe();t.allowQueryWithZeroPeers===!0&&a.resolve(),this.queryManager=new d0(e,{disjointPaths:this.d,alpha:this.a,logPrefix:n,metricsPrefix:s,initialQuerySelfHasRun:a,routingTable:this.routingTable,allowQueryWithZeroPeers:t.allowQueryWithZeroPeers}),this.peerRouting=new l0(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new i0(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:o}),this.contentRouting=new a0(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new b0(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new T0(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:n,metricsPrefix:s,datastorePrefix:o,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new C0(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new h0(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:a,operationMetrics:i}),this.reprovider=new p0(e,{...t.reprovide,logPrefix:n,metricsPrefix:s,datastorePrefix:o,contentRouting:this.contentRouting,operationMetrics:i}),this.network.addEventListener("peer",c=>{let l=c.detail;this.onPeerConnect(l).catch(d=>{this.log.error("could not add %p to routing table - %e",l.id,d)}),this.dispatchEvent(new CustomEvent("peer",{detail:l}))}),this.topologyListener.addEventListener("peer",c=>{let l=c.detail;Promise.resolve().then(async()=>{let d=await this.components.peerStore.get(l),u={id:l,multiaddrs:d.addresses.map(({multiaddr:f})=>f),protocols:d.protocols};await this.onPeerConnect(u)}).catch(d=>{this.log.error("could not add %p to routing table - %e",l,d)})}),this.dhtPeerRouting=new e6(this),this.dhtContentRouting=new J4(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",c=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let l=c.detail.peer.addresses.some(({multiaddr:u})=>!Qe(u)&&!yt.exactMatch(u)),d=this.getMode();l&&d==="client"?await this.setMode("server"):d==="server"&&!l&&await this.setMode("client")}).catch(l=>{this.log.error("error setting dht server mode - %e",l)})}),this.get=ci(this.get.bind(this),i,"GET_VALUE"),this.findProviders=ci(this.findProviders.bind(this),i,"FIND_PROVIDERS"),this.findPeer=ci(this.findPeer.bind(this),i,"FIND_PEER"),this.getClosestPeers=ci(this.getClosestPeers.bind(this),i,"GET_CLOSEST_PEERS"),this.provide=ci(this.provide.bind(this),i,"PROVIDE"),this.put=ci(this.put.bind(this),i,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[me]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery","@libp2p/kad-dht"];[ur]=["@libp2p/identify","@libp2p/ping"];get[Dn](){return this.dhtContentRouting}get[On](){return this.dhtPeerRouting}get[ls](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id,e.multiaddrs),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log.trace("ignoring %p as there were no valid addresses in %s after filtering",e.id,e.multiaddrs.map(n=>n.toString()));return}let t=AbortSignal.timeout(this.onPeerConnectTimeout);try{await this.routingTable.add(e.id,{signal:t})}catch(n){this.log.error("could not add %p to routing table - %e",e.id,n)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e,t){if(e===this.getMode()&&t?.force!==!0){this.log("already in %s mode",e);return}if(await this.components.registrar.unhandle(this.protocol,t),e===this.getMode()&&t?.force!==!0){this.log("already in %s mode",e);return}e==="client"?(this.log("enabling client mode while in %s mode",this.getMode()),this.clientMode=!0):(this.log("enabling server mode while in %s mode",this.getMode()),this.clientMode=!1,await this.components.registrar.handle(this.protocol,this.rpc.onIncomingStream.bind(this.rpc),{signal:t?.signal,maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running||(this.running=!0,await this.setMode(this.clientMode?"client":"server",{force:!0}),await at(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await at(this.querySelf))}async stop(){this.running=!1,await lt(this.querySelf,this.queryManager,this.network,this.routingTable,this.routingTableRefresh,this.topologyListener,this.reprovider)}async*put(e,t,n={}){yield*this.contentFetching.put(e,t,n)}async*get(e,t={}){yield*this.contentFetching.get(e,t)}async*provide(e,t={}){yield*this.contentRouting.provide(e,this.components.addressManager.getAddresses(),t)}async cancelReprovide(e,t){await this.providers.removeProvider(e,this.components.peerId,t)}async*findProviders(e,t={}){yield*this.contentRouting.findProviders(e,t)}async*findPeer(e,t={}){yield*this.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t={}){yield*this.peerRouting.getClosestPeers(e,t)}async refreshRoutingTable(e){this.routingTableRefresh.refreshTable(!0,e)}};var dv;(function(r){r[r.SEND_QUERY=0]="SEND_QUERY",r[r.PEER_RESPONSE=1]="PEER_RESPONSE",r[r.FINAL_PEER=2]="FINAL_PEER",r[r.QUERY_ERROR=3]="QUERY_ERROR",r[r.PROVIDER=4]="PROVIDER",r[r.VALUE=5]="VALUE",r[r.ADD_PEER=6]="ADD_PEER",r[r.DIAL_PEER=7]="DIAL_PEER",r[r.PATH_ENDED=8]="PATH_ENDED"})(dv||(dv={}));function fv(r={}){return e=>new _0(e,r)}var Ie;(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"})(Ie||(Ie={}));var pu=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),t6=Object.freeze({NEW_STREAM:Ie.NEW_STREAM,MESSAGE:Ie.MESSAGE_INITIATOR,CLOSE:Ie.CLOSE_INITIATOR,RESET:Ie.RESET_INITIATOR}),hv=Object.freeze({MESSAGE:Ie.MESSAGE_RECEIVER,CLOSE:Ie.CLOSE_RECEIVER,RESET:Ie.RESET_RECEIVER});var mu=1<<20,r6=4<<20,k0=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=mu,t=r6){this._buffer=new Q,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 de("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:s,offset:i}=this._headerInfo;if(this._buffer.length-i<s)break;let c={id:n,type:o};(o===Ie.NEW_STREAM||o===Ie.MESSAGE_INITIATOR||o===Ie.MESSAGE_RECEIVER)&&(c.data=this._buffer.sublist(i,i+s)),t.push(c),this._buffer.consume(i+s),this._headerInfo=null}return t}_decodeHeader(e){let{value:t,offset:n}=mv(e),{value:o,offset:s}=mv(e,n),i=t&7;if(pu[i]==null)throw new Error(`Invalid type received: ${i}`);if(o>this._maxMessageSize)throw new de("Message size too large");return{id:t>>3,type:i,offset:n+s,length:o}}},PD=128,pv=127;function mv(r,e=0){let t=0,n=0,o=e,s,i=r.length;do{if(o>=i||n>49)throw e=0,new RangeError("Could not decode varint");s=r.get(o++),t+=n<28?(s&pv)<<n:(s&pv)*Math.pow(2,n),n+=7}while(s>=PD);return e=o-e,{value:t,offset:e}}var n6=10*1024,o6=class{_pool;_poolOffset;constructor(){this._pool=Ge(n6),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Mt(e.id<<3|e.type,n,o),o+=he(e.id<<3|e.type),(e.type===Ie.NEW_STREAM||e.type===Ie.MESSAGE_INITIATOR||e.type===Ie.MESSAGE_RECEIVER)&&e.data!=null?(Mt(e.data.length,n,o),o+=he(e.data.length)):(Mt(0,n,o),o+=he(0));let s=n.subarray(this._poolOffset,o);n6-o<100?(this._pool=Ge(n6),this._poolOffset=0):this._poolOffset=o,t.append(s),(e.type===Ie.NEW_STREAM||e.type===Ie.MESSAGE_INITIATOR||e.type===Ie.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},RD=new o6;function gu(r){let e=new Q;return RD.write(r,e),e}var s6=class extends Bo{streamId;types;maxDataSize;muxer;constructor(e){super(e),this.types=e.direction==="outbound"?t6:hv,this.maxDataSize=e.maxDataSize,this.muxer=e.muxer,this.streamId=parseInt(this.id.substring(1)),e.direction==="outbound"&&queueMicrotask(()=>{this.muxer.send(gu({id:this.streamId,type:t6.NEW_STREAM,data:new Q(_(this.id))}))})}sendData(e){let t=new Q,n=e.byteLength;for(;e.byteLength>0;){let o=Math.min(e.byteLength,this.maxDataSize),s=e.sublist(0,o);e=e.sublist(o),t.append(gu({id:this.streamId,type:this.types.MESSAGE,data:s}))}return{sentBytes:n,canSendMore:this.muxer.send(t)}}sendReset(){return this.muxer.send(gu({id:this.streamId,type:this.types.RESET}))}async sendCloseWrite(e){this.muxer.send(gu({id:this.streamId,type:this.types.CLOSE})),e?.signal?.throwIfAborted()}async sendCloseRead(e){e?.signal?.throwIfAborted()}sendPause(){}sendResume(){}};function gv(r){let{id:e,muxer:t,direction:n,maxMsgSize:o=mu}=r;return new s6({...r,id:n==="outbound"?`i${e}`:`r${e}`,direction:n,maxDataSize:o,muxer:t,log:r.log.newScope(`${n}:${e}`),protocol:""})}var LD=5;function DD(r){let e={...r,type:`${pu[r.type]} (${r.type})`};return r.type===Ie.NEW_STREAM&&(e.data=R(r.data.subarray())),(r.type===Ie.MESSAGE_INITIATOR||r.type===Ie.MESSAGE_RECEIVER)&&(e.data=R(r.data.subarray(),"base16")),e}var P0=class extends Mo{_streamId;rateLimiter;maxMessageSize;maxUnprocessedMessageQueueSize;decoder;constructor(e,t){super(e,{...t,protocol:"/mplex/6.7.0",name:"mplex"}),this._streamId=0,this.maxMessageSize=t.maxMessageSize??mu,this.maxUnprocessedMessageQueueSize=t.maxUnprocessedMessageQueueSize??r6,this.decoder=new k0(this.maxMessageSize,this.maxUnprocessedMessageQueueSize),this.rateLimiter=new na({points:t.disconnectThreshold??LD,duration:1})}onData(e){for(let t of this.decoder.write(e))this.handleMessage(t)}onCreateStream(e){if(this.status!=="open")throw new Br("Muxer already closed");let t=this._streamId++;return this._newStream(t,"outbound",e)}_newStream(e,t,n){return this.log("new %s stream %s",t,e),gv({...n,id:e,direction:t,maxMsgSize:this.maxMessageSize,log:this.log,muxer:this})}handleMessage(e){if(this.log.enabled&&this.log.trace("incoming message",DD(e)),e.type===Ie.NEW_STREAM){try{this.rateLimiter.consume("new-stream",1)}catch{this.log("rate limit hit when opening too many new streams over the inbound stream limit - closing remote connection"),this.abort(new Error("Too many open streams"));return}let o=this._newStream(e.id,"inbound",this.streamOptions);this.onRemoteStream(o);return}let t=`${(e.type&1)===1?"i":"r"}${e.id}`,n=this.streams.find(o=>o.id===t);if(n==null){this.log("missing stream %s for message type %s",t,pu[e.type]);try{this.rateLimiter.consume("missing-stream",1)}catch{this.log("rate limit hit when receiving messages for streams that do not exist - closing remote connection"),this.abort(new Error("Too many messages for missing streams"));return}return}try{switch(e.type){case Ie.MESSAGE_INITIATOR:case Ie.MESSAGE_RECEIVER:n.onData(e.data);break;case Ie.CLOSE_INITIATOR:case Ie.CLOSE_RECEIVER:n.onRemoteCloseWrite();break;case Ie.RESET_INITIATOR:case Ie.RESET_RECEIVER:n.onRemoteReset();break;default:this.log("unknown message type")}}catch(o){this.log.error("error while processing message - %e",o),n.abort(o)}}};var i6=class{protocol="/mplex/6.7.0";_init;constructor(e={}){this._init=e}[Symbol.toStringTag]="@libp2p/mplex";[me]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new P0(e,{...this._init})}};function yv(r={}){return()=>new i6(r)}var ND=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 OD(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:d}=ND(r),u=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(g){n(),i(g);return}c.push(p),t.count===c.length&&(n(),s(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)a.includes(h)||d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&s(c)});if(o.cancel=n,typeof t.timeout=="number"){let s=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function wv(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=OD(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}var bv="1.0.0",Ev="ping",xv="ipfs";var R0=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;constructor(e,t={}){this.components=e,this.started=!1,this.protocol=`/${t.protocolPrefix??xv}/${Ev}/${bv}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnLimitedConnection=t.runOnLimitedConnection??!0,this.handlePing=this.handlePing.bind(this)}[Symbol.toStringTag]="@libp2p/ping";[me]=["@libp2p/ping"];async start(){await this.components.registrar.handle(this.protocol,this.handlePing,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}async handlePing(e,t){let n=e.log.newScope("ping");n.trace("ping from %p",t.remotePeer);let o=AbortSignal.timeout(this.timeout);o.addEventListener("abort",()=>{e.abort(new un("Ping timed out"))});let s=Date.now();for await(let i of e){if(e.status!=="open"){n("stream status changed to %s",e.status);break}e.send(i)||(n("waiting for stream to drain"),await wv(e,"drain",{rejectionEvents:["close"],signal:o}),n("stream drained"))}n("ping from %p complete in %dms",t.remotePeer,Date.now()-s),await e.close({signal:o})}async ping(e,t={}){let n=Yt(32),o=await this.components.connectionManager.openStream(e,this.protocol,{runOnLimitedConnection:this.runOnLimitedConnection,...t}),s=o.log.newScope("ping");try{let i=Date.now(),a=Promise.withResolvers(),c=new Q,l=d=>{if(c.append(d.data),c.byteLength===32){o.removeEventListener("message",l);let u=Date.now()-i;Promise.all([o.closeRead(t)]).then(()=>{if(ee(n,c.subarray()))a.resolve(u);else throw new as(`Received wrong ping ack after ${u}ms`)}).catch(f=>{o.abort(f),a.reject(f)})}};return o.addEventListener("message",l),o.send(n),await o.close(t),await Pe(a.promise,t.signal)}catch(i){throw s.error("error while pinging %o - %e",e,i),o?.abort(i),i}finally{o?.close()}}};function Sv(r={}){return e=>new R0(e,r)}var Kt;(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=()=>ze(t)})(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.flag!=null&&(s.uint32(8),r.Flag.codec().encode(o.flag,s)),o.message!=null&&(s.uint32(18),s.bytes(o.message)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={},c=s==null?o.len:o.pos+s;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=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(Kt||(Kt={}));var Av=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"],a6=Array.from("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"),Iv="libp2p+webrtc+v1/",Tv=2*1024*1024,qa=16*1024;function FD(r=qa){let e=he(r-he(r)),t=1+he(Object.keys(Kt.Flag).length-1),n=1,o=r-e-t-n,s=he(o);return e+t+n+s}var Cv=FD();var _v=1e4,c6="/webrtc",yu="/webrtc-signaling/0.0.1";var $D=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 KD(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:d}=$D(r),u=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(g){n(),i(g);return}c.push(p),t.count===c.length&&(n(),s(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)a.includes(h)||d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&s(c)});if(o.cancel=n,typeof t.timeout=="number"){let s=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function wo(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=KD(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}var kv=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,s;n<o;n++)(s||!(n in e))&&(s||(s=Array.prototype.slice.call(e,0,n)),s[n]=e[n]);return r.concat(s||Array.prototype.slice.call(e))},VD=(function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r})();var HD=(function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r})();var qD=(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 zD=(function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r})();var WD=(function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r})();var GD=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,YD=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,Pv=3,jD=[["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",GD]],Rv=[["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 Dv(r){return r?Lv(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new WD:typeof navigator<"u"?Lv(navigator.userAgent):ZD()}function QD(r){return r!==""&&jD.reduce(function(e,t){var n=t[0],o=t[1];if(e)return e;var s=o.exec(r);return!!s&&[n,s]},!1)}function Lv(r){var e=QD(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new zD;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<Pv&&(o=kv(kv([],o,!0),JD(Pv-o.length),!0)):o=[];var s=o.join("."),i=XD(r),a=YD.exec(r);return a&&a[1]?new qD(t,s,i,a[1]):new VD(t,s,i)}function XD(r){for(var e=0,t=Rv.length;e<t;e++){var n=Rv[e],o=n[0],s=n[1],i=s.exec(r);if(i)return o}return null}function ZD(){var r=typeof process<"u"&&process.version;return r?new HD(process.version.slice(1)):null}function JD(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var Nv=Dv(),L0=Nv!=null&&Nv.name==="firefox";async function l6(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??Av.map(e=>({urls:[e]})),r}var Ov=(r=32)=>Iv+[...Array(r)].map(()=>a6.at(Math.floor(Math.random()*a6.length))).join("");var u6=class extends Bo{channel;incomingData;maxBufferedAmount;receivedFinAck;finAckTimeout;constructor(e){super({...e,maxMessageSize:(e.maxMessageSize??qa)-Cv}),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=vt(),this.maxBufferedAmount=e.maxBufferedAmount??Tv,this.finAckTimeout=e.finAckTimeout??_v,this.channel.onclose=()=>{this.log.trace("received datachannel close event"),this.onRemoteCloseWrite(),this.onTransportClosed()},this.channel.onerror=n=>{let o=n.error;this.log.trace("received datachannel error event - %e",o),this.abort(o)},this.channel.onmessage=async n=>{this.log("incoming message %d bytes",n.data.byteLength);let{data:o}=n;o===null||o.byteLength===0||this.incomingData.push(new Uint8Array(o,0,o.byteLength))},this.channel.bufferedAmountLowThreshold=0,this.channel.onbufferedamountlow=()=>{this.writableNeedsDrain&&this.safeDispatchEvent("drain")},Promise.resolve().then(async()=>{for await(let n of Ks(this.incomingData))this.processIncomingProtobuf(n)}).catch(n=>{this.log.error("error processing incoming data channel messages - %e",n)});let t=()=>{this.channel.readyState==="open"&&(this.log.trace("stream closed, closing underlying datachannel"),this.channel.close())};this.addEventListener("close",t),this.channel.readyState!=="open"&&(this.log('channel ready state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),wo(this.channel,"open",{rejectionEvents:["close","error"]}).then(()=>{this.log('channel ready state is now "%s", dispatching drain',this.channel.readyState),this.safeDispatchEvent("drain")}).catch(n=>{this.abort(n.error??n)}))}sendNewStream(){}_sendMessage(e){if(this.channel.readyState!=="open")throw new cn(`Invalid datachannel state - ${this.channel.readyState}`);if(this.log.trace('sending message, channel state "%s"',this.channel.readyState),L0){this.channel.send(e.subarray());return}for(let t of e)this.channel.send(t)}sendData(e){return this.channel.readyState!=="open"?{sentBytes:0,canSendMore:!1}:(this._sendMessage(Xn.single(Kt.encode({message:e.subarray()}))),{sentBytes:e.byteLength,canSendMore:this.channel.bufferedAmount<this.maxBufferedAmount})}sendReset(e){try{this.log.error("sending reset - %e",e),this._sendFlag(Kt.Flag.RESET),this.receivedFinAck?.reject(e)}catch(t){this.log.error("failed to send reset - %e",t)}}async sendCloseWrite(e){this._sendFlag(Kt.Flag.FIN),e?.signal?.throwIfAborted(),this.receivedFinAck=Promise.withResolvers();let t=e?.signal??AbortSignal.timeout(this.finAckTimeout),n=[wo(this.channel,"close",{signal:t}),wo(this.channel,"error",{signal:t})];await Promise.any([Pe(this.receivedFinAck.promise,t),...n]).finally(()=>{n.forEach(o=>o.cancel())})}async sendCloseRead(e){this._sendFlag(Kt.Flag.STOP_SENDING),e?.signal?.throwIfAborted()}processIncomingProtobuf(e){let t=Kt.decode(e);t.message!=null&&(this.readStatus==="readable"||this.readStatus==="paused")&&this.onData(new Q(t.message)),t.flag!==void 0&&(this.log.trace('incoming flag %s, write status "%s", read status "%s"',t.flag,this.writeStatus,this.readStatus),t.flag===Kt.Flag.FIN&&(this._sendFlag(Kt.Flag.FIN_ACK),this.onRemoteCloseWrite()),t.flag===Kt.Flag.RESET&&(this.receivedFinAck?.reject(new fi("The stream was reset")),this.onRemoteReset()),t.flag===Kt.Flag.STOP_SENDING&&this.onRemoteCloseRead(),t.flag===Kt.Flag.FIN_ACK&&this.receivedFinAck?.resolve())}_sendFlag(e){if(this.channel.readyState!=="open")return this.log.trace('not sending flag %s because channel is "%s" and not "open"',e.toString(),this.channel.readyState),!1;this.log.trace("sending flag %s",e.toString());let t=Kt.encode({flag:e}),n=Xn.single(t);try{return this._sendMessage(n),!0}catch(o){this.log.error("could not send flag %s - %e",e.toString(),o)}return!1}sendPause(){}sendResume(){}};function wu(r){let{channel:e,direction:t,isHandshake:n}=r;return new u6({...r,id:`${e.id}`,log:r.log.newScope(`${n===!0?"handshake":t}:${e.id}`),protocol:""})}var os=class{protocol;peerConnection;metrics;dataChannelOptions;earlyDataChannels;constructor(e){this.onEarlyDataChannel=this.onEarlyDataChannel.bind(this),this.peerConnection=e.peerConnection,this.metrics=e.metrics,this.protocol=e.protocol??c6,this.dataChannelOptions=e.dataChannelOptions??{},this.peerConnection.addEventListener("datachannel",this.onEarlyDataChannel),this.earlyDataChannels=[]}onEarlyDataChannel(e){this.earlyDataChannels.push(e.channel)}createStreamMuxer(e){return this.peerConnection.removeEventListener("datachannel",this.onEarlyDataChannel),new d6(e,{peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,protocol:this.protocol,earlyDataChannels:this.earlyDataChannels})}},d6=class extends Mo{peerConnection;dataChannelOptions;constructor(e,t){super(e,{...t,name:"muxer"}),this.peerConnection=t.peerConnection,this.protocol=t.protocol??c6,this.dataChannelOptions=t.dataChannelOptions??{},this.peerConnection.ondatachannel=({channel:n})=>{this.onDataChannel(n)},queueMicrotask(()=>{if(this.status!=="open"){t.earlyDataChannels.forEach(n=>{n.close()});return}t.earlyDataChannels.forEach(n=>{this.onDataChannel(n)})})}onDataChannel(e){if(this.log("incoming datachannel with channel id %d, protocol %s and status %s",e.id,e.protocol,e.readyState),e.label==="init"){this.log.trace("closing init channel %d",e.id),e.close();return}let t=wu({...this.streamOptions,...this.dataChannelOptions,channel:e,direction:"inbound",log:this.log});this.onRemoteStream(t)}async onCreateStream(e){let t=this.peerConnection.createDataChannel("",{});return this.log("open channel %d for protocol %s",t.id,e?.protocol),wu({...e,...this.dataChannelOptions,channel:t,direction:"outbound",log:this.log})}onData(){}};var f6=class extends Oo{peerConnection;constructor(e){super(e),this.peerConnection=e.peerConnection;let t=e.peerConnection.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change %s initial state %s",this.peerConnection.connectionState,t),(this.peerConnection.connectionState==="disconnected"||this.peerConnection.connectionState==="failed"||this.peerConnection.connectionState==="closed")&&(this.onTransportClosed(),this.peerConnection.close())}}sendData(e){return{sentBytes:e.byteLength,canSendMore:!0}}async sendClose(e){this.peerConnection.close(),e?.signal?.throwIfAborted()}sendReset(){this.peerConnection.close()}sendPause(){}sendResume(){}},bu=r=>new f6(r);var D0=globalThis.RTCPeerConnection,N0=globalThis.RTCSessionDescription,Mv=globalThis.RTCIceCandidate;var ss=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},Mr=class extends ss{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var O0=class extends ss{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var M0=class extends ss{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},B0=class extends ss{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 lr;(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=()=>ze(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.data!=null&&(s.uint32(18),s.string(o.data)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={},c=s==null?o.len:o.pos+s;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=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(lr||(lr={}));var U0=async(r,e,t)=>{try{let n=Promise.withResolvers();for(eN(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal})]);if(o==null){t.signal?.throwIfAborted();break}if(o.type!==lr.Type.ICE_CANDIDATE)throw new de("ICE candidate message expected");let s=JSON.parse(o.data??"null");if(s===""||s===null){t.onProgress?.(new H("webrtc:end-of-ice-candidates")),t.log.trace("end-of-candidates received");continue}let i=new Mv(s);t.log.trace("%s received new ICE candidate %o",t.direction,s);try{t.onProgress?.(new H("webrtc:add-ice-candidate",i.candidate)),await r.addIceCandidate(i)}catch(a){t.log.error("%s bad candidate received %o - %e",t.direction,s,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate - %e",t.direction,n),t.signal?.aborted===!0&&r.connectionState!=="connected")throw n}};function eN(r,e){if(r.connectionState==="connected"){e.resolve();return}r.onconnectionstatechange=t=>{switch(r.connectionState){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new di(`RTCPeerConnection connection state became "${r.connectionState}"`));break;default:break}}}function F0(r){let e;for(let t of r.getComponents())t.name==="p2p"&&(e=Me(t.value??""));if(e==null)throw new ln("Remote peerId must be present in multiaddr");return e}async function Bv({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:s,transportManager:i,log:a,logger:c,onProgress:l}){let{circuitAddress:d,targetPeer:u}=Uv(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing circuit address: %a",d);let f=s.getConnections(u),h;f.length===0?(l?.(new H("webrtc:dial-relay")),h=await i.dial(d,{signal:t,onProgress:l})):(l?.(new H("webrtc:reuse-relay-connection")),h=f[0]),l?.(new H("webrtc:open-signaling-stream"));let p=await h.newStream(yu,{signal:t,runOnLimitedConnection:!0}),g=Ue(p).pb(lr),m=new D0(r);m.addEventListener("connectionstatechange",()=>{switch(m.connectionState){case"closed":m.close();break;default:break}});let w=new os({peerConnection:m,dataChannelOptions:e});try{let T=m.createDataChannel("init");m.onicecandidate=({candidate:$})=>{if(m.connectionState==="connected"){a.trace("ignore new ice candidate as peer connection is already connected");return}if($==null||$?.candidate===""){a.trace("initiator detected end of ICE candidates");return}let W=JSON.stringify($?.toJSON()??null);a.trace("initiator sending ICE candidate %o",$),g.write({type:lr.Type.ICE_CANDIDATE,data:W},{signal:t}).catch(S=>{a.error("error sending ICE candidate - %e",S)})},m.onicecandidateerror=$=>{a.error("initiator ICE candidate error",$)};let I=await m.createOffer().catch($=>{throw a.error("could not execute createOffer - %e",$),new Mr("Failed to set createOffer")});a.trace("initiator send SDP offer %s",I.sdp),l?.(new H("webrtc:send-sdp-offer")),await g.write({type:lr.Type.SDP_OFFER,data:I.sdp},{signal:t}),await m.setLocalDescription(I).catch($=>{throw a.error("could not execute setLocalDescription - %e",$),new Mr("Failed to set localDescription")}),l?.(new H("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let D=await g.read({signal:t});if(D.type!==lr.Type.SDP_ANSWER)throw new Mr("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",D.data);let F=new N0({type:"answer",sdp:D.data});return await m.setRemoteDescription(F).catch($=>{throw a.error("could not execute setRemoteDescription - %e",$),new Mr("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new H("webrtc:read-ice-candidates")),await U0(m,g,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected"),T.readyState!=="open"&&(a.trace("wait for init channel to open"),await wo(T,"open",{signal:t})),a.trace("closing init channel"),T.close(),a.trace("waiting for init channel to close"),await wo(T,"close",{signal:t}),l?.(new H("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await p.close({signal:t}),a.trace("initiator connected to remote address %s",o),{remoteAddress:o,peerConnection:m,muxerFactory:w}}catch(T){throw a.error("outgoing signaling error - %e",T),m.close(),p.abort(T),T}finally{m.onicecandidate=null,m.onicecandidateerror=null}}var Fv=_e(pa.matchers[0],Ce(290)),$0=class r extends ie{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=>Fv.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=>Fv.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 $v(r,e,{peerConnection:t,signal:n,log:o}){o.trace("new inbound signaling stream");let s=Ue(r).pb(lr);try{t.onicecandidate=({candidate:u})=>{if(t.connectionState==="connected"){o.trace("ignore new ice candidate as peer connection is already connected");return}if(u==null||u?.candidate===""){o.trace("recipient detected end of ICE candidates");return}let f=JSON.stringify(u?.toJSON()??null);o.trace("recipient sending ICE candidate %s",f),s.write({type:lr.Type.ICE_CANDIDATE,data:f},{signal:n}).catch(h=>{o.error("error sending ICE candidate - %e",h)})},o.trace("recipient read SDP offer");let c=await s.read({signal:n});if(c.type!==lr.Type.SDP_OFFER)throw new Mr(`expected message type SDP_OFFER, received: ${c.type??"undefined"} `);o.trace("recipient received SDP offer %s",c.data);let l=new N0({type:"offer",sdp:c.data});await t.setRemoteDescription(l).catch(u=>{throw o.error("could not execute setRemoteDescription - %e",u),new Mr("Failed to set remoteDescription")});let d=await t.createAnswer().catch(u=>{throw o.error("could not execute createAnswer - %e",u),new Mr("Failed to create answer")});o.trace("recipient send SDP answer %s",d.sdp),await s.write({type:lr.Type.SDP_ANSWER,data:d.sdp},{signal:n}),await t.setLocalDescription(d).catch(u=>{throw o.error("could not execute setLocalDescription - %e",u),new Mr("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await U0(t,s,{direction:"recipient",signal:n,log:o})}catch(c){if(t.connectionState!=="connected")throw o.error("error while handling signaling stream from peer %a - %e",e.remoteAddr,c),t.close(),c;o("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",e.remoteAddr,c)}let i=F0(e.remoteAddr),a=q(`/webrtc/p2p/${i}`);return o.trace("recipient connected to remote address %s",a),{remoteAddress:a,remotePeer:i}}var K0=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"})})}[vo]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[me]=["@libp2p/transport"];[ur]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(yu,(e,t)=>{let n=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);this._onProtocol(e,t,n).catch(o=>{this.log.error("failed to handle incoming connect from %p - %e",t.remotePeer,o)}).finally(()=>{n.clear()})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(yu),this._started=!1}createListener(e){return new $0(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(yl.exactMatch)}dialFilter(e){return this.listenFilter(e)}async dial(e,t){this.log.trace("dialing address: %a",e);let{remoteAddress:n,peerConnection:o,muxerFactory:s}=await Bv({rtcConfiguration:await l6(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}),i=bu({peerConnection:o,remoteAddr:n,metrics:this.metrics?.dialerEvents,direction:"outbound",log:this.components.logger.forComponent("libp2p:webrtc:connection")}),a=await t.upgrader.upgradeOutbound(i,{skipProtection:!0,skipEncryption:!0,remotePeer:F0(e),muxerFactory:s,onProgress:t.onProgress,signal:t.signal});return this._closeOnShutdown(o,i),a}async _onProtocol(e,t,n){let o=new D0(await l6(this.init.rtcConfiguration));o.addEventListener("connectionstatechange",()=>{switch(o.connectionState){case"closed":o.close();break;default:break}});let s=new os({peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:i,remotePeer:a}=await $v(e,t,{peerConnection:o,signal:n,log:this.log});await e.close({signal:n});let c=bu({peerConnection:o,remoteAddr:i,metrics:this.metrics?.listenerEvents,direction:"inbound",log:this.components.logger.forComponent("libp2p:webrtc:connection")});await this.components.upgrader.upgradeInbound(c,{skipEncryption:!0,skipProtection:!0,remotePeer:a,muxerFactory:s,signal:n}),this._closeOnShutdown(o,c)}catch(i){throw this.log.error("incoming signaling error - %e",i),o.close(),e.abort(i),i}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection - %e",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function Uv(r){let e=r.getComponents().filter(({name:n})=>n==="p2p").map(({value:n})=>n).pop();if(e==null)throw new A("Destination peer id was missing");return{circuitAddress:q(r.getComponents().filter(({name:n})=>n!=="webrtc")),targetPeer:Me(e)}}var h6=Object.values(ps).map(r=>r.decoder).reduce((r,e)=>r.or(e)),tN=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function Kv(r){return r?.match(tN)?.groups?.fingerprint}function p6(r){let t=r.getComponents().find(n=>n.code===466)?.value;if(t===void 0||t==="")throw new A(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function rN(r){return He.decode(h6.decode(r))}function nN(r){let e=rN(p6(r)),t=oN(e.code),n=e.digest.reduce((s,i)=>s+i.toString(16).padStart(2,"0"),""),o=n.match(/.{1,2}/g);if(o==null)throw new O0(n,r.toString());return`${t} ${o.join(":").toUpperCase()}`}function Vv(r){let e=r.split(":").map(o=>parseInt(o,16)),t=Uint8Array.from(e),n=zt(We.code,t);return q(`/certhash/${ec.encode(n.bytes)}`)}function oN(r){switch(r){case 17:return"sha-1";case 18:return"sha-256";case 19:return"sha-512";default:throw new B0(r)}}function Hv(r,e){let{host:t,port:n,type:o}=oe(r);if(o!=="ip4"&&o!=="ip6")throw new A(`Multiaddr ${r} was not an IPv4 or IPv6 address`);let s=nN(r);return{type:"answer",sdp:`v=0
63
+ `)),n.close())}})}function K4(r,e){return e.set("Content-Length",`${r.length}`),e.set("Content-Type",'text/plain; charset="UTF-8"'),new ReadableStream({start(t){t.enqueue(C(r)),t.close()}})}function sx(r,e){if(r!=null){if(typeof r=="string")return K4(r,e);if(r instanceof Blob)return tx(r,e);if(UL(r))return rx(r,e);if(r instanceof URLSearchParams)return K4(r.toString(),e);if(r instanceof ReadableStream)return ox(r,e);if(r instanceof FormData)return nx(r,e);throw new Error("Unsupported body type")}}function UL(r){return r==null?!1:r.byteLength!=null}async function ix(r,e,t){let n=new Headers(t.headers),o=n.get("host")??e.hostname;n.set("host",o),n.get("user-agent")==null&&n.set("user-agent","libp2p/fetch");let s=sx(t.body,n),i=[`${t?.method?.toUpperCase()??"GET"} ${e.pathname??"/"} HTTP/1.1`,...Rp(n),"",""];r.send(C(i.join(`\r
64
+ `)))||await r.onDrain({signal:t.signal??void 0}),s!=null&&(t.log("request sending body"),await FL(r,s,t))}async function FL(r,e,t){let n=e.getReader();for(;;){let{done:o,value:s}=await n.read();if(s!=null&&(t.log("request send %d bytes",s.byteLength),r.send(s)||await r.onDrain({signal:t.signal??void 0})),o){t.log("request finished sending body");break}}}async function ax(r,e,t={}){let n=r.log.newScope("http-fetch");e=typeof e=="string"?new URL(e):e;let[o]=await Promise.all([ex(r,e,{...t,log:n}),ix(r,e,{...t,log:n})]);return await r.close({signal:t.signal??void 0}),o}var Mp=class extends Event{message;error;filename="";lineno=0;colno=0;constructor(e){super("error"),this.error=e,this.message=e.message}},nu=class extends Event{code;reason;wasClean;constructor(e,t){super(e),this.code=t?.code??0,this.reason=t?.reason??"",this.wasClean=t?.wasClean??!0}};var $L={CONTINUATION:0,TEXT:1,BINARY:2,CONNECTION_CLOSE:8,PING:9,PONG:10},V4={0:"CONTINUATION",1:"TEXT",2:"BINARY",8:"CONNECTION_CLOSE",9:"PING",10:"PONG"};var ou={NORMAL_CLOSURE:1e3,GOING_AWAY:1001,PROTOCOL_ERROR:1002,UNSUPPORTED_DATA:1003,RESERVED:1004,NO_STATUS_RECEIVED:1005,ABNORMAL_CLOSURE:1006,INVALID_FRAME_PAYLOAD_DATA:1007,POLICY_VIOLATION:1008,MESSAGE_TOO_BIG:1009,MANDATORY_EXT:1010,INTERNAL_SERVER_ERROR:1011,TLS_HANDSHAKE:1015};function cx(r){let e=0;if(r.byteLength<e+1)return;let n=r.get(e)&15;if(e++,V4[n]==null)throw new Error(`Unknown opcode: ${n}`);if(r.byteLength<e+1)return;let o=r.get(e),s=(o&128)===128,i=o&127;if(e++,i===126){if(r.byteLength<e+2)return;i=r.getUint16(e),e+=2}else if(i===127){if(r.byteLength<e+8)return;i=r.getUint32(e),e+=8}if(i===0)return r.consume(e),{type:V4[n]};let a;if(s){if(r.byteLength<e+4)return;a=r.subarray(e,e+4),e+=4}if(r.byteLength<e+i)return;let c=r.subarray(e,e+i);return e+=i,a!=null&&(c=lx(c,a)),r.consume(e),{type:V4[n],data:c}}function lx(r,e){let t=0;for(let n=0;n<r.byteLength;n++)r[n]=r[n]^e[t],t++,t===e.byteLength&&(t=0);return r}function ux(r,e,t){let o=new X(Uint8Array.from([128|$L[r]])),s=e?.byteLength??0;if(s<126)o.append(Uint8Array.from([s|(t===!0?128:0)]));else if(s<65535){let i=new X(new Uint8Array(3));i.set(0,126|(t===!0?128:0)),i.setUint16(1,s),o.append(i)}else if(s<18446744073709552e3){let i=new X(new Uint8Array(9));i.set(0,127|(t===!0?128:0)),i.setUint32(1,s),o.append(i)}else throw new Error("Payload too large");if(t===!0&&e!=null){let i=Uint8Array.from([0,0,0,0]);o.append(i),e=lx(e,i)}return e!=null&&o.append(e),o}function dx(r){if(r instanceof Uint8Array||r instanceof ArrayBuffer||r instanceof DataView)return ru(r);if(typeof r=="string")return C(r);if(r instanceof Blob)return r.arrayBuffer().then(e=>ru(e));throw new A("Unsupported data type")}async function fx(r,e){return new Promise((t,n)=>{let o=!1,s=new j("RESPONSE");s[j.kOnHeadersComplete]=i=>{o=!0;let a=[];for(let c=0;c<i.headers.length;c+=2)a.push([i.headers[c],i.headers[c+1]]);t(new Pn(null,{status:i.statusCode,statusText:i.statusMessage,headers:new Headers(a)}))},Promise.resolve().then(async()=>{for(;;){let{data:i}=await Xt(r,"message",e.signal),a=i.subarray(),c=s.execute(a,0,a.byteLength);if(c instanceof Error)throw c;if(c<a.byteLength&&r.push(a.subarray(c)),o)break}}).catch(i=>{n(i)})})}async function*hx(r,e=[],t){let n=Ja.encode(crypto.getRandomValues(new Uint8Array(16))).substring(1);t.set("host",r.hostname),t.set("connection","upgrade"),t.set("upgrade","websocket"),t.set("pragma","no-cache"),t.set("cache-control","no-cache"),t.set("sec-websocket-version","13"),t.set("sec-websocket-key",n),e.length>0&&t.set("sec-websocket-protocol",e.join(", ")),yield C([`GET ${r.pathname??"/"} HTTP/1.1`,...[...t.entries()].map(([o,s])=>`${o}: ${s}`),"",""].join(`\r
65
+ `))}var KL=["BINARY","TEXT","CONTINUATION"],VL=10485760;var HL="/http/1.1",Bp=class extends ie{binaryType="arraybuffer";bufferedAmount=0;extensions="";protocol="";readyState;url;CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;_onclose;_onerror;_onmessage;_onopen;sentClose;isClient;buffer;maxMessageSize;_url;closeController;constructor(e,t={}){super(),this.readyState=this.CONNECTING,this.url=e.pathname,this.sentClose=!1,this.isClient=t.isClient??!0,this.buffer=new X,this.closeController=new AbortController,this.maxMessageSize=t.maxMessageSize??VL}send(e){if(this.readyState!==this.OPEN)throw new Error("WebSocket was not open");let t=dx(e);Ed(t)?t.then(n=>{this._send("BINARY",n)}).catch(n=>{this._errored(n)}):this._send("BINARY",t)}_send(e,t){if(this.readyState!==this.OPEN)return;let n=ux(e,t,this.isClient),o=n.byteLength;this.bufferedAmount+=o,this._write(n,s=>{this.bufferedAmount-=o,s!=null&&this._errored(s)})}close(e,t){if(this.readyState!==this.OPEN)throw new Error("WebSocket was not open");this.readyState=this.CLOSING,this.sentClose=!0,this._send("CONNECTION_CLOSE")}_errored(e){this.readyState=this.CLOSED,this.dispatchEvent(new Mp(e))}set onclose(e){this._onclose=e,this.addEventListener("close",e)}get onclose(){return this._onclose??null}set onerror(e){this._onerror=e,this.addEventListener("error",e)}get onerror(){return this._onerror??null}set onmessage(e){this._onmessage=e,this.addEventListener("message",e)}get onmessage(){return this._onmessage??null}set onopen(e){this._onopen=e,this.addEventListener("open",e)}get onopen(){return this._onopen??null}_push(e){if(this.buffer.append(e),this.buffer.byteLength>this.maxMessageSize){this.close(ou.MESSAGE_TOO_BIG,"Max message size exceeded");return}for(;;){let t=cx(this.buffer);if(t==null)break;if(KL.includes(t.type)&&t.data!=null){let n;this.binaryType==="blob"?n=new Blob([t.data]):t.data.byteOffset===0&&t.data.byteLength===t.data.buffer.byteLength?n=t.data.buffer:(n=new ArrayBuffer(t.data.byteLength),new Uint8Array(n,0,n.byteLength).set(t.data)),this.dispatchEvent(new MessageEvent("message",{data:n,origin:this._url?.hostname}))}t.type==="PING"&&this._send("PONG",t.data),t.type==="CONNECTION_CLOSE"&&(this.sentClose||this.close(),this.closeController.abort(),this._close(void 0,()=>{this.readyState=this.CLOSED,this.dispatchEvent(new nu("close"))}))}}_remoteClosed(e){this.readyState=this.CLOSING,this._close(e,()=>{this.readyState=this.CLOSED,this.dispatchEvent(new nu("close"))})}};var su=class extends Bp{writer;writable;constructor(e,t,n={}){if(super(new URL(e.url),{...n,isClient:!1}),e.body==null)throw new A("Request body cannot be null");this.readyState=this.OPEN,this.writable=t,this.writer=t.getWriter();let o=e.body.getReader();Promise.resolve().then(async()=>{for(this.dispatchEvent(new Event("open"));;){let{value:s,done:i}=await o.read();if(s!=null&&this._push(s),i){this._remoteClosed();break}}}).catch(s=>{this._errored(s)})}_write(e,t){this.writer?.write(e).then(()=>{t()},n=>{t(n)})}_close(e,t){e!=null?this.writable.abort(e).then(()=>{t()},()=>{t()}):this.writable.close().then(()=>{t()},()=>{t()})}},iu=class extends Bp{stream;handshakeTimeout;drainTimeout;constructor(e,t,n,o){super(t,{...o,isClient:!0}),this.handshakeTimeout=o.handshakeTimeout??1e4,this.drainTimeout=o.drainTimeout??1e4,Promise.resolve().then(async()=>{let s=AbortSignal.timeout(this.handshakeTimeout);this.stream=await n.openStream(e,HL,{...o,signal:s});for await(let a of hx(t,o.protocols,kn(o)))this.stream.send(a)||await this.stream.onDrain({signal:s});let i=await fx(this.stream,{signal:s});if(i.status!==101)throw new Error("Invalid WebSocket handshake - response status "+i.status);await o.onHandshakeResponse?.(i,{signal:s}),this.protocol=i.headers.get("Sec-WebSocket-Protocol")??"",this.readyState=this.OPEN,this.dispatchEvent(new Event("open"));for await(let a of this.stream)this._push(a)}).catch(s=>{this._errored(s)})}_write(e,t){if(this.stream==null){t(new Error("WebSocket was not open"));return}this.stream.send(e)?t():this.stream.onDrain({signal:AbortSignal.timeout(this.drainTimeout)}).then(()=>{t()},n=>{t(n)})}_close(e,t){if(this.stream==null){t();return}if(e!=null){this.stream.abort(e),t();return}this.stream.close().catch(n=>{this.stream?.abort(n)}).finally(()=>{t()})}};var au="/http/1.1";var Up=Symbol.for("@libp2p/http/websocket-handler");var Ex=Ln(wx(),1),$p=class{log;cookies;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:http:cookies"),this.cookies=new Map}async prepareRequest(e,t){if((t.credentials??"same-origin")==="omit")return;let o=t.headers.get("origin");if(o==null||o==="null")return;let s=tu(e,t.headers),i=(this.cookies.get(s.hostname)??[]).filter(a=>!(a.expires!=null&&a.expires<Date.now()||a.path!=null&&!s.pathname.startsWith(a.path))).map(a=>`${a.name}=${a.value}`).join("; ");i.length>0&&t.headers.set("cookie",i)}async processResponse(e,t,n){if((t.credentials??"same-origin")==="omit"){bx(n);return}let s=t.headers.get("origin");if(s==null||s==="null")return;let i=tu(e,t.headers);for(let a of n.headers.getSetCookie()){let c=[...this.cookies.get(i.hostname)??[],...ZL(Ex.default.parse(a))];this.cookies.set(i.hostname,c)}bx(n)}};function bx(r){return r.headers.has("set-cookie")&&r.headers.delete("set-cookie"),r}function ZL(r){let e={},t=[];return Object.entries(r).forEach(([n,o])=>{n.toLowerCase()==="domain"&&o!=null&&(e.domain=o),n.toLowerCase()==="max-age"&&o!=null&&(e.expires=Date.now()+parseInt(o,10)*1e3),!JL.includes(n.toLowerCase())&&o!=null&&t.push({name:n,value:o})}),t.map(n=>({...n,...e}))}var JL=["domain","expires","httponly","max-age","partitioned","path","samesite","secure"];var Kp=class{async prepareRequest(e,t){if(t.headers.get("origin")!=null||t.mode==="no-cors")return;let n=tu(e,t.headers);t.headers.set("origin",`${n.protocol}//${n.host}`)}};function eD(r){return typeof r.init=="function"}function Vp(r,e){if(eD(r)){let t=r;return t.handler=r.init(e),delete t.init,t}return r}function xx(r){let e=Np(r.method,["GET"]);if(r.fallback==null&&e.filter(n=>n!=="GET").length>0)throw new A("WebSocket handlers only support the GET HTTP method");let t={...r,init:n=>{let o=Vp(r,n);return t[Up]=o.handler,async s=>{if(!Pp(s.method,s.headers))return r?.fallback!=null?r.fallback(s):new Pn(null,{status:400});let i=new TransformStream;try{let a=new Pn(i.readable,{status:101,headers:await $4(s.headers)}),c=new su(s,i.writable,r);return o.handler(c),a}catch{return new Pn(null,{status:500})}}}};return t}var Hp="/.well-known/libp2p/protocols";function vx(r){return xx({path:Hp,method:["GET"],cors:!0,handler:e=>{let t=JSON.stringify(r.getProtocolMap());e.send(t),e.close()},fallback:async e=>{let t=JSON.stringify(r.getProtocolMap());return new Response(t,{headers:{"Content-Type":"application/json","Content-Length":`${t.length}`}})}})}var qp=class{log;components;protocols;endpoint;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:http:registrar"),this.protocols=[],this.onStream=this.onStream.bind(this),this.endpoint=t.server,this.handle("",vx(this))}async start(){await this.components.registrar.handle(au,this.onStream.bind(this))}async stop(){await this.components.registrar.unhandle(au)}async onStream(e,t){let n=await JE(e);if(this.canHandle(n)){this.log("handling incoming request %s %s",n.method,n.url);let o=await this.onRequest(XE(n,e));await QE(o,e),await e.close();return}if(this.endpoint==null){this.log("cannot handle incoming request %s %s and no endpoint configured",n.method,n.url),e.send(ZE),await e.close();return}this.log("passing incoming request %s %s to endpoint",n.method,n.url),this.endpoint.inject(n,e,t).catch(o=>{this.log.error("error injecting request to endpoint - %e",o),e.abort(o)})}canHandle(e){let t=F4(e).pathname;return this.protocols.find(n=>n.route.path===t)!=null?(this.log.trace("can handle %s",t),!0):(this.log.trace("cannot handle %s",t),!1)}async onRequest(e){this.log("incoming request %s %s",e.method,e.url);let t=this.findHandler(e.url);if(t==null)return new Response(null,{status:404});let n;return t.route.method.includes(e.method)?n=await t.route.handler(e):e.method==="OPTIONS"?n=new Response(null,{status:204}):n=new Response(null,{status:405}),tD(n,e,t),this.log("%s %s %d %s",e.method,e.url,n.status,n.statusText),n}onWebSocket(e){let t=this.findHandler(e.url);if(t!=null){let n=t.route[Up];if(n!=null){n(e);return}}e.close(ou.NORMAL_CLOSURE)}findHandler(e){let t=e.startsWith("/")?e:new URL(e).pathname;this.log("search for handler on path %s",t);let n=this.protocols.find(o=>o.route.path===t);return n!=null&&this.log("found handler for HTTP protocol %s on path %s",n.protocol,e),n}handle(e,t){if(t.path=t.path??e,this.protocols.find(n=>n.protocol===e)!=null)throw new A(`HTTP protocol handler for ${e} already registered`);(t.path===""||!t.path.startsWith("/"))&&(t.path=`/${t.path}`),t.cors=t.cors??!0,t.method=Np(t.method),t=Vp(t,this.components),this.protocols.push({protocol:e,route:t}),this.protocols.sort(({route:{path:n}},{route:{path:o}})=>o.length-n.length)}unhandle(e){this.protocols=this.protocols.filter(t=>t.protocol===e)}getProtocolMap(){let e={};for(let t of this.protocols)t.protocol!==""&&(e[t.protocol]={path:t.route.path});return e}};function tD(r,e,t){let n=[...new Set(["OPTIONS",...t.route.method])].join(", ");t.route.cors&&(e.headers.get("Access-Control-Request-Method")!=null&&r.headers.set("access-control-allow-methods",n),e.headers.get("Access-Control-Request-Headers")!=null&&r.headers.set("access-control-allow-headers",e.headers.get("Access-Control-Request-Headers")??""),e.headers.get("Origin")!=null&&(r.headers.set("access-control-allow-origin",e.headers.get("Origin")??""),r.headers.set("vary","Origin"))),e.method==="OPTIONS"&&r.headers.set("allow",n)}async function Sx(r,e,t){for(let n of e.middleware)await n.prepareRequest?.(r,e);return t()}async function Ax(r,e,t){for(let n of e.middleware)await n.prepareRequest?.(r,e);return t()}async function Ix(r,e,t){for(let n of e.middleware)await n.processResponse?.(r,e,t);return t}var Wp=class{log;components;httpRegistrar;origin;cookies;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:http"),this.httpRegistrar=new qp(e,t),this.origin=new Kp,this.cookies=new $p(e,t)}[Symbol.toStringTag]="@libp2p/http";[me]=["@libp2p/http"];async start(){await at(this.httpRegistrar)}async stop(){await lt(this.httpRegistrar)}agent(...e){throw new Ga("This method is not supported in browsers")}dispatcher(...e){throw new Ga("This method is not supported in browsers")}async connect(e,t={}){let n=Fa(e),o=kn(t),s={...t,headers:o,method:"GET",middleware:t.middleware?.map(i=>i(this.components))??[]};return o.set("connection","upgrade"),o.set("upgrade","websocket"),Ax(n,s,async()=>{if(n instanceof URL){let c=new globalThis.WebSocket(n,t.protocols);return c.binaryType="arraybuffer",c}let{addresses:i,httpPath:a}=Dp(n);return new iu(i,new URL(`http://${Lp(n,s.headers)}${decodeURIComponent(a)}`),this.components.connectionManager,s)})}async fetch(e,t={}){let n=Fa(e),o={...t,headers:kn(t),method:"GET",middleware:[this.origin,this.cookies,...t.middleware?.map(i=>i(this.components))??[]]},s=await Sx(n,o,async()=>this.sendRequest(n,t));return Ix(n,o,s)}async connectProtocol(e,t,n){let o=await this.getProtocolPath(e,t,n),s=Fa(e,o);return this.connect(s,n)}async fetchProtocol(e,t,n={}){let o=await this.getProtocolPath(e,t,n),s=Fa(e,o);return this.fetch(s,n)}async getSupportedProtocols(e,t={}){let n=Fa(e,Hp),o=await this.fetch(n,{method:"GET",headers:{Accept:"application/json"},signal:t.signal});if(o.status!==200)throw new Error(`Unexpected status code: ${o.status}`);return o.json()}async getProtocolPath(e,t,n={}){let o=await this.getSupportedProtocols(e,n);if(o[t]==null)throw new Error(`Peer does not serve protocol: ${t}`);return o[t].path}canHandle(e){return this.httpRegistrar.canHandle(e)}async onRequest(e){return this.httpRegistrar.onRequest(e)}onWebSocket(e){this.httpRegistrar.onWebSocket(e)}handle(e,t){this.httpRegistrar.handle(e,t)}unhandle(e){this.httpRegistrar.unhandle(e)}getProtocolMap(){return this.httpRegistrar.getProtocolMap()}async sendRequest(e,t){if(e instanceof URL)return this.log("making request to %s with global fetch"),globalThis.fetch(e,t);this.log("making request to %s with libp2p fetch",e);let n=Lp(e,kn(t)),{addresses:o,httpPath:s}=Dp(e),a=await(await this.components.connectionManager.openConnection(o,{signal:t.signal??void 0})).newStream(au,{signal:t.signal??void 0});return ax(a,new URL(`http://${n}${decodeURIComponent(s)}`),t)}};function Tx(r={}){return e=>new Wp(e,r)}var _x="0.1.0";var Cx="id/push",kx="1.0.0",Px="1.0.0";var Qo;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s of t.listenAddrs)n.uint32(18),n.bytes(s);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let s of t.protocols)n.uint32(26),n.string(s);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={listenAddrs:[],protocols:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 5:{s.protocolVersion=t.string();break}case 6:{s.agentVersion=t.string();break}case 1:{s.publicKey=t.bytes();break}case 2:{if(o.limits?.listenAddrs!=null&&s.listenAddrs.length===o.limits.listenAddrs)throw new Ne('Decode error - map field "listenAddrs" had too many elements');s.listenAddrs.push(t.bytes());break}case 4:{s.observedAddr=t.bytes();break}case 3:{if(o.limits?.protocols!=null&&s.protocols.length===o.limits.protocols)throw new Ne('Decode error - map field "protocols" had too many elements');s.protocols.push(t.string());break}case 8:{s.signedPeerRecord=t.bytes();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Qo||(Qo={}));var ar={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function Rx(r){if(r!=null&&r.length>0)try{return q(r)}catch{}}async function zp(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new de("message was null or undefined");let s={};if(o.listenAddrs.length>0&&(s.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:q(c)}))),o.protocols.length>0&&(s.protocols=o.protocols),o.publicKey!=null){let c=tt(o.publicKey);if(!xn(c).equals(n.remotePeer))throw new de("public key did not match remote PeerId");s.publicKey=c}let i;if(o.signedPeerRecord!=null){t.trace("received signedPeerRecord from %p",n.remotePeer);let c=o.signedPeerRecord,l=await vr.openAndCertify(c,Qt.DOMAIN),d=Qt.createFromProtobuf(l.payload),u=Jr(l.publicKey.toCID());if(!d.peerId.equals(u))throw new de("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(d.peerId))throw new de("signing key does not match remote PeerId");let f;try{f=await r.get(d.peerId)}catch(h){if(h.name!=="NotFoundError")throw h}if(f!=null&&(s.metadata=f.metadata,f.peerRecordEnvelope!=null)){let h=vr.createFromProtobuf(f.peerRecordEnvelope),p=Qt.createFromProtobuf(h.payload);p.seqNumber>=d.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",p.seqNumber,d.seqNumber),d=p,c=f.peerRecordEnvelope)}s.peerRecordEnvelope=c,s.addresses=d.multiaddrs.map(h=>({isCertified:!0,multiaddr:h})),i={seq:d.seqNumber,addresses:d.multiaddrs}}else t("%p did not send a signed peer record",n.remotePeer);if(t.trace("patching %p with",n.remotePeer,s),await r.patch(n.remotePeer,s),o.agentVersion!=null||o.protocolVersion!=null){let c={};o.agentVersion!=null&&(c.AgentVersion=C(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=C(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=>q(c)),observedAddr:o.observedAddr==null?void 0:q(o.observedAddr),protocols:o.protocols,signedPeerRecord:i,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var $a=class{host;components;protocol;started;timeout;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;runOnLimitedConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.components=e,this.log=t.log,this.timeout=t.timeout??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}/${_x}`,agentVersion:e.nodeInfo.userAgent},this.handleProtocol=this.handleProtocol.bind(this)}isStarted(){return this.started}async start(){this.started||(await this.components.peerStore.merge(this.components.peerId,{metadata:{AgentVersion:C(this.host.agentVersion),ProtocolVersion:C(this.host.protocolVersion)}}),await this.components.registrar.handle(this.protocol,this.handleProtocol,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}};var Gp=class extends $a{connectionManager;concurrency;_push;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??ar.protocolPrefix}/${Cx}/${Px}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??ar.concurrency,this._push=Wn(this.sendPushMessage.bind(this),t.debounce??1e3),(t.runOnSelfUpdate??ar.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error("error pushing updates to peers - %e",o)})})}[me]=["@libp2p/identify-push"];async push(){this._push()}async sendPushMessage(){if(this.isStarted())try{let e=this.components.addressManager.getAddresses().map(d=>d.decapsulateCode(421)),t=new Qt({peerId:this.components.peerId,multiaddrs:e}),n=await vr.seal(t,this.components.privateKey),o=this.components.registrar.getProtocols(),s=await this.components.peerStore.get(this.components.peerId),i=R(s.metadata.get("AgentVersion")??C(this.host.agentVersion)),a=R(s.metadata.get("ProtocolVersion")??C(this.host.protocolVersion)),c=this;async function*l(){for(let d of c.connectionManager.getConnections())(await c.components.peerStore.get(d.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let f,h=AbortSignal.timeout(c.timeout);try{f=await d.newStream(c.protocol,{signal:h,runOnLimitedConnection:c.runOnLimitedConnection}),await Ue(f,{maxDataLength:c.maxMessageSize}).pb(Qo).write({listenAddrs:e.map(g=>g.bytes),signedPeerRecord:n.marshal(),protocols:o,agentVersion:i,protocolVersion:a},{signal:h}),await f.close({signal:h})}catch(p){f?.log.newScope("identify-push")?.error("could not push identify update to peer",p),f?.abort(p)}})}await er(io(l(),{concurrency:this.concurrency}))}catch(e){this.log.error("error pushing updates to peers - %e",e)}}async handleProtocol(e,t){let n=e.log.newScope("identify-push");if(this.components.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let o={signal:AbortSignal.timeout(this.timeout)},i=await Ue(e,{maxDataLength:this.maxMessageSize}).pb(Qo).read(o);await e.close(o),await zp(this.components.peerStore,this.components.events,n,t,i),n.trace("handled push from %p",t.remotePeer)}};var Yp=class extends $a{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??ar.protocolPrefix}/${"id"}/${kx}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??ar.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(()=>{})})}[me]=["@libp2p/identify"];async _identify(e,t={}){let n,o;if(t.signal==null){let s=AbortSignal.timeout(this.timeout);t={...t,signal:s}}this.log("run identify on new connection %a",e.remoteAddr);try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection}),o=n.log.newScope("identify");let s=Ue(n,{maxDataLength:this.maxMessageSize}).pb(Qo),i=await s.read(t);return await s.unwrap().unwrap().close(t),i}catch(s){throw o?.error("identify failed - %e",s),n?.abort(s),s}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:s,observedAddr:i}=n;if(o==null)throw new de("Public key was missing from identify message");let a=tt(o),c=Jr(a.toCID());if(!e.remotePeer.equals(c))throw new de("Identified peer does not match the expected peer");if(this.components.peerId.equals(c))throw new de("Identified peer is our own peer id?");return this.maybeAddObservedAddress(i),this.log("completed for peer %p and protocols %o",c,s),zp(this.components.peerStore,this.components.events,this.log,e,n)}maybeAddObservedAddress(e){let t=Rx(e);if(t==null||(this.log.trace("our observed address was %a",t),Qe(t)))return;let n=t.getComponents();if((n[0].code===41||n[0].code===42&&n[1].code===41)&&!dd(t)){this.log.trace("our observed address was IPv6 but not a global unicast address");return}Xs.exactMatch(t)||(this.log.trace("storing the observed address"),this.components.addressManager.addObservedAddr(t))}async handleProtocol(e,t){let n=e.log.newScope("identify");n("responding to identify");let o=AbortSignal.timeout(this.timeout);let s=await this.components.peerStore.get(this.components.peerId,{signal:o}),i=this.components.addressManager.getAddresses().map(d=>d.decapsulateCode(421)),a=s.peerRecordEnvelope;if(i.length>0&&a==null){let d=new Qt({peerId:this.components.peerId,multiaddrs:i});a=(await vr.seal(d,this.components.privateKey,{signal:o})).marshal().subarray()}let c=t.remoteAddr.bytes;N9.matches(t.remoteAddr)||(c=void 0);let l=Ue(e).pb(Qo);n("send response"),await l.write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:ft(this.components.privateKey.publicKey),listenAddrs:i.map(d=>d.bytes),signedPeerRecord:a,observedAddr:c,protocols:s.protocols},{signal:o}),n("close write"),await l.unwrap().unwrap().close({signal:o})}};function Lx(r={}){return e=>new Yp(e,r)}function Dx(r={}){return e=>new Gp(e,r)}var ai=1e3,W4=60*ai,jp=60*W4,Nx="/ipfs/kad/1.0.0",Xp=48*jp;var Ox=24*jp,Mx=10,Bx=16384,Ux=jp,z4=jp,khe=10*ai,Fx=10*ai;var Qp=20,Zo=10,$x=5*W4,Kx=ai,Vx=5*ai,Hx=5*W4,qx=30*ai,Wx=180*ai,G4=`${us}-kad-dht`;var cu;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={key:ae(0),value:ae(0),timeReceived:""},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.key=t.bytes();break}case 2:{s.value=t.bytes();break}case 5:{s.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(cu||(cu={}));function zx(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"),s=String(r.getUTCMinutes()).padStart(2,"0"),i=String(r.getUTCSeconds()).padStart(2,"0"),a=r.getUTCMilliseconds(),c=String(a*1e3*1e3).padStart(9,"0");return`${e}-${t}-${n}T${o}:${s}:${i}.${c}Z`}function Gx(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,s=parseInt(t[3],10),i=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,s,i,a,c,l))}var Pt=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 cu.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:zx(this.timeReceived)}}static deserialize(e){let t=cu.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=Gx(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 Jo=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},Zp=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},Jp=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var Yx;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s={},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.key=t.bytes();break}case 2:{s.value=t.bytes();break}case 3:{s.author=t.bytes();break}case 4:{s.signature=t.bytes();break}case 5:{s.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Yx||(Yx={}));var Ae;(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"})(Ae||(Ae={}));var e0;(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"})(e0||(e0={}));(function(r){r.codec=()=>We(e0)})(Ae||(Ae={}));var Va;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(Va||(Va={}));var Y4;(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"})(Y4||(Y4={}));(function(r){r.codec=()=>We(Y4)})(Va||(Va={}));var Ka;(function(r){let e;r.codec=()=>(e==null&&(e=ne((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 s of t.multiaddrs)n.uint32(18),n.bytes(s);t.connection!=null&&(n.uint32(24),Va.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={id:ae(0),multiaddrs:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.id=t.bytes();break}case 2:{if(o.limits?.multiaddrs!=null&&s.multiaddrs.length===o.limits.multiaddrs)throw new Ne('Decode error - map field "multiaddrs" had too many elements');s.multiaddrs.push(t.bytes());break}case 3:{s.connection=Va.codec().decode(t);break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ka||(Ka={}));var es;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&e0[t.type]!==0&&(n.uint32(8),Ae.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 s of t.closer)n.uint32(66),Ka.codec().encode(s,n);if(t.providers!=null)for(let s of t.providers)n.uint32(74),Ka.codec().encode(s,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let s={type:Ae.PUT_VALUE,closer:[],providers:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.type=Ae.codec().decode(t);break}case 10:{s.clusterLevel=t.int32();break}case 2:{s.key=t.bytes();break}case 3:{s.record=t.bytes();break}case 8:{if(o.limits?.closer!=null&&s.closer.length===o.limits.closer)throw new Ne('Decode error - map field "closer" had too many elements');s.closer.push(Ka.codec().decode(t,t.uint32(),{limits:o.limits?.closer$}));break}case 9:{if(o.limits?.providers!=null&&s.providers.length===o.limits.providers)throw new Ne('Decode error - map field "providers" had too many elements');s.providers.push(Ka.codec().decode(t,t.uint32(),{limits:o.limits?.providers$}));break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(es||(es={}));function j4(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 lu(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 t0(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function sn(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function X4(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function uu(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function Q4(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function jx(r,e={}){let t={...r,name:"PATH_ENDED",type:8};return e.onProgress?.(new CustomEvent("kad-dht:query:path-ended",{detail:t})),t}function Xx(r,e,t){if(t.length===0)throw new A("No records given");let o=R(e).split("/");if(o.length<3)throw new A("Record key does not have a selector function");let s=r[o[1].toString()];if(s==null)throw new Jp(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:s(e,t)}function aD(r,e){return 0}var Qx={pk:aD};async function Ha(r,e,t){let n=e.key,s=R(n).split("/");if(s.length<3)return;let i=r[s[1].toString()];if(i==null)throw new A(`No validator available for key type "${s[1]}"`);await i(n,e.value,t)}var cD=async(r,e,t)=>{if(!(r instanceof Uint8Array))throw new A('"key" must be a Uint8Array');if(r.byteLength<5)throw new A("Invalid public key record");if(R(r.subarray(0,4))!=="/pk/")throw new A("key was not prefixed with /pk/");let o=tt(e),s=r.slice(4);if(!ee(s,o.toMultihash().bytes))throw new A("public key does not match passed in key")},Zx={pk:cD};var lD=C("/pk/");function Jx(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>!Qe(e))}}async function ts(r,e){let t=await ze.digest(r);return e?.signal?.throwIfAborted(),t.digest}async function cr(r,e){return ts(r.toMultihash().bytes,e)}function rs(r,e){return new Fe(`${r}/${R(e,"base32")}`,!1)}function ev(r){return Oe([lD,r.toMultihash().bytes])}function tv(r){return R(r.subarray(0,4))==="/pk/"}function rv(r){let e=ke(r.subarray(4));return Ze(e)}function Z4(r,e){let t=new Date;return new Pt(r,e,t).serialize()}function r0(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:G.createV1(Mn,ke(C(n,"base32"))),peerId:Me(t)}}function n0(r,e,t){let n=typeof e=="string"?e:R(e.multihash.bytes,"base32"),o=[r,n];return t!=null&&o.push(t.toString()),new Fe(o.join("/"))}function o0(r){return new Date(hr(r))}function ci(r,e,t){return async function*(...n){let o=e.queryTime?.timer(t),s=e.errorTime?.timer(t),i=!1;try{e.queries?.increment({[t]:!0}),yield*r(...n)}catch(a){throw i=!0,s?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),i||o?.()}}}function s0(r,e,t){return async function(...n){let o=e?.queryTime?.timer(t),s=e?.errorTime?.timer(t),i=!1;try{return e.queries?.increment({[t]:!0}),await r(...n)}catch(a){throw i=!0,s?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),i||o?.()}}}var i0=class{log;components;validators;selectors;peerRouting;queryManager;network;datastorePrefix;constructor(e,t){let{validators:n,selectors:o,peerRouting:s,queryManager:i,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=s,this.queryManager=i,this.network=a,this.get=e.metrics?.traceFunction("libp2p.kadDHT.get",this.get.bind(this),{optionsIndex:1})??this.get,this.put=e.metrics?.traceFunction("libp2p.kadDHT.put",this.put.bind(this),{optionsIndex:2})??this.put}async getLocal(e,t){this.log("getLocal %b",e);let n=rs(this.datastorePrefix,e);this.log("fetching record for key %k",n);let o=await this.components.datastore.get(n,t);this.log("found %k in local datastore",n);let s=Pt.deserialize(o);return await Ha(this.validators,s,t),s}async*sendCorrectionRecord(e,t,n,o){this.log("sendCorrection for %b",e);let s=Z4(e,n);for(let{value:i,from:a}of t){if(ee(i,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let d=rs(this.datastorePrefix,e);this.log(`Storing corrected record for key ${d.toString()}`),await this.components.datastore.put(d,s.subarray(),o)}catch(d){this.log.error("failed error correcting self - %e",d)}continue}let c=!1,l={type:Ae.PUT_VALUE,key:e,record:s};for await(let d of this.network.sendRequest(a,l,o))d.name==="PEER_RESPONSE"&&d.record!=null&&ee(d.record.value,Pt.deserialize(s).value)&&(c=!0),yield d;if(!c)throw new Jo("Could not send correction");this.log.error("failed error correcting entry")}}async*put(e,t,n){this.log("put key %b value %b",e,t);let o=Z4(e,t),s=rs(this.datastorePrefix,e);this.log(`storing record for key ${s.toString()}`),await this.components.datastore.put(s,o.subarray(),n),yield*Yi(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),i=>Lr(i,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:Ae.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let d of this.network.sendRequest(a.peer.id,l,{...n,path:a.path}))c.push(d),d.name==="PEER_RESPONSE"&&(d.record!=null&&ee(d.record.value,Pt.deserialize(o).value)||c.push(sn({from:a.peer.id,error:new Jo("Value not put correctly"),path:d.path},n)));return c}),i=>io(i,{ordered:!1,concurrency:Zo}),async function*(i){for await(let a of i)yield*a})}async*get(e,t){this.log("get %b",e);let n=[];for await(let a of this.getMany(e,t)){if(a.name==="VALUE"){n.push(a);continue}yield a}if(n.length===0)return;let o=n.map(a=>a.value),s=0;try{s=Xx(this.selectors,e,o)}catch(a){if(a.name!=="InvalidParametersError")throw a}let i=o[s];if(this.log("GetValue %b %b",e,i),i==null)throw new Le("Best value was not found");yield*this.sendCorrectionRecord(e,n,i,{...t,path:{index:-1,queued:0,running:0,total:0}}),yield n[s]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let s=await this.getLocal(e,t);yield uu({value:s.value,from:this.components.peerId,path:{index:-1,running:0,queued:0,total:0}},t)}catch(s){this.log("error getting local value for %b",e,s)}let n=this,o=async function*({peer:s,signal:i,path:a}){for await(let c of n.peerRouting.getValueOrPeers(s.id,e,{...t,signal:i,path:a}))yield c,c.name==="PEER_RESPONSE"&&c.record!=null&&(yield uu({from:s.id,value:c.record.value,path:a},t))};yield*this.queryManager.run(e,o,t)}};function nv(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function du(r){if(r.id==null)throw new Error("Invalid peer in message");let e=ke(r.id);return{id:Ze(e),multiaddrs:(r.multiaddrs??[]).map(t=>q(t))}}var a0=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:o,queryManager:s,routingTable:i,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=o,this.queryManager=s,this.routingTable=i,this.providers=a,this.findProviders=e.metrics?.traceFunction("libp2p.kadDHT.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,d)=>(l.name==="PROVIDER"&&(d.providers??=[],d.providers.push(...l.providers.map(u=>u.id.toString()))),d)})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.kadDHT.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,d)=>(l.name==="PEER_RESPONSE"&&l.messageName==="ADD_PROVIDER"&&(d.providers??=[],d.providers.push(l.from.toString())),d)})??this.provide}async*provide(e,t,n={}){this.log("provide %s",e);let o=e.multihash.bytes;await this.providers.addProvider(e,this.components.peerId,n);let s={type:Ae.ADD_PROVIDER,key:o,providers:[nv({id:this.components.peerId,multiaddrs:t})]},i=0,a=this;async function*c(u){try{a.log("sending provider record for %s to %p",e,u.peer.id);for await(let f of a.network.sendMessage(u.peer.id,s,{...n,path:u.path}))f.name==="PEER_RESPONSE"&&(a.log("sent provider record for %s to %p",e,u.peer.id),i++),yield f}catch(f){a.log.error("error sending provide record to peer %p - %e",u.peer.id,f),yield sn({from:u.peer.id,error:f,path:u.path},n)}}let l=vt({objectMode:!0}),d=new St({concurrency:Zo});d.addEventListener("idle",()=>{l.end()}),d.addEventListener("failure",u=>{this.log.error("error publishing provider record to peer - %e",u.detail.error)}),d.add(async()=>{let u=[];for await(let f of this.peerRouting.getClosestPeers(o,n))l.push(f),f.name==="FINAL_PEER"&&u.push(f);u.forEach(f=>{d.add(async()=>{for await(let h of c(f))l.push(h)}).catch(h=>{this.log.error("error publishing provider record to peer - %e",h)})})}).catch(u=>{l.end(u)}),yield*l,this.log("sent provider records to %d peers",i)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,o=0,s=e.multihash.bytes,i=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e,t);if(a.length>0){let d=[];for(let u of a.slice(0,n))try{let f=await this.components.peerStore.get(u,t);d.push({id:u,multiaddrs:f.addresses.map(({multiaddr:h})=>h)})}catch(f){if(f.name!=="NotFoundError")throw f;this.log("no peer store entry for %p",u)}if(yield lu({from:this.components.peerId,messageType:Ae.GET_PROVIDERS,providers:d,path:{index:-1,queued:0,running:0,total:0}},t),yield X4({from:this.components.peerId,providers:d,path:{index:-1,queued:0,running:0,total:0}},t),o+=d.length,o>=n)return}let c=async function*({peer:d,signal:u,path:f}){let h={type:Ae.GET_PROVIDERS,key:s};yield*i.network.sendRequest(d.id,h,{...t,signal:u,path:f})},l=new xr(a);for await(let d of this.queryManager.run(s,c,t))if(yield d,d.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",d.providers.length,e,d.closer.length);let u=[];for(let f of d.providers)l.has(f.id)||(l.add(f.id),u.push(f));if(u.length>0&&(yield X4({from:d.from,providers:u,path:d.path},t),o+=u.length,o>=n))return}}};var c0=class extends ie{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 Gr({...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],s){return{...s,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((s,i)=>{o[`providers-${i}`]=s.id.toString()}),n.closer.length>0&&n.closer.forEach((s,i)=>{o[`closer-${i}`]=s.id.toString()})),o)})??this.sendRequest,this.sendMessage=e.metrics?.traceFunction("libp2p.kadDHT.sendMessage",this.sendMessage.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],s){return{...s,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((s,i)=>{o[`providers-${i}`]=s.id.toString()}),n.closer.length>0&&n.closer.forEach((s,i)=>{o[`closer-${i}`]=s.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 A("Message type was missing");let s,i=this.timeout.getTimeoutSignal(n);n={...n,signal:i};try{this.metrics.operations?.increment({[o]:!0}),this.log("dialling %p",e),yield Q4({peer:e,path:n.path},n),s=await this.components.connectionManager.openStream(e,this.protocol,n),this.log("sending %s to %p",t.type,e),yield j4({to:e,type:o,path:n.path},n);let a=await this._writeReadMessage(s,t,n);s.close(n).catch(c=>{this.log.error("error closing stream to %p - %e",e,c),s?.abort(c)}),yield lu({from:e,messageType:a.type,closer:a.closer.map(du),providers:a.providers.map(du),record:a.record==null?void 0:Pt.deserialize(a.record),path:n.path},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),s?.abort(a),n.signal?.aborted!==!0&&this.log.error("could not send %s to %p - %e",t.type,e,a),yield sn({from:e,error:a,path:n.path},n)}finally{this.timeout.cleanUp(i)}}async*sendMessage(e,t,n){if(!this.running)return;let o=t.type;if(o==null)throw new A("Message type was missing");let s,i=this.timeout.getTimeoutSignal(n);n={...n,signal:i};try{this.metrics.operations?.increment({[o]:!0}),this.log("dialling %p",e),yield Q4({peer:e,path:n.path},n),s=await this.components.connectionManager.openStream(e,this.protocol,n),this.log("sending %s to %p",t.type,e),yield j4({to:e,type:o,path:n.path},n),await this._writeMessage(s,t,n),s.close(n).catch(a=>{this.log.error("error closing stream to %p - %e",e,a),s?.abort(a)}),yield lu({from:e,messageType:o,path:n.path},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),s?.abort(a),yield sn({from:e,error:a,path:n.path},n)}finally{this.timeout.cleanUp(i)}}async _writeMessage(e,t,n){await Ue(e).write(t,es,n)}async _writeReadMessage(e,t,n){let o=Ue(e);await o.write(t,es,n);let s=await o.read(es,n);return s.closer.forEach(i=>{this.safeDispatchEvent("peer",{detail:du(i)})}),s.providers.forEach(i=>{this.safeDispatchEvent("peer",{detail:du(i)})}),s}};function li(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 ns=class{originDhtKey;capacity;peerDistances;constructor(e,t){this.originDhtKey=e,this.capacity=t,this.peerDistances=[]}get length(){return this.peerDistances.length}get peers(){return[...this.peerDistances]}async add(e,t={index:-1,queued:0,running:0,total:0},n){let o=await cr(e.id,n);this.addWithKadId(e,o,t)}addWithKadId(e,t,n={index:-1,queued:0,running:0,total:0}){if(this.peerDistances.find(i=>i.peer.id.equals(e.id))!=null)return;let o={peer:e,distance:nn(this.originDhtKey,t),path:n};if(this.peerDistances.length===this.capacity){let i=this.peerDistances[this.peerDistances.length-1];if(i!=null&&li(o.distance,i.distance)!==-1)return}let s=!1;for(let i=0;i<this.peerDistances.length;i++){let a=li(this.peerDistances[i].distance,o.distance);if(a===0||a===1){s=!0,this.peerDistances.splice(i,0,o);break}}s||this.peerDistances.push(o),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e,t){if(this.length===0)return!0;let n=await cr(e,t),o=nn(n,this.originDhtKey),s=this.peerDistances[this.peerDistances.length-1].distance;return li(o,s)===-1}async anyCloser(e,t){return e.length===0?!1:Promise.any(e.map(async n=>this.isCloser(n,t)))}};var l0=class{log;routingTable;network;validators;queryManager;components;constructor(e,t){this.routingTable=t.routingTable,this.network=t.network,this.validators=t.validators,this.queryManager=t.queryManager,this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:peer-routing`),this.findPeer=e.metrics?.traceFunction("libp2p.kadDHT.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.kadDHT.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async findPeerLocal(e,t){let n,o=await this.routingTable.find(e,t);if(o!=null){this.log("findPeerLocal found %p in routing table",e);try{n=await this.components.peerStore.get(o,t)}catch(s){if(s.name!=="NotFoundError")throw s}}if(n==null)try{n=await this.components.peerStore.get(e,t)}catch(s){if(s.name!=="NotFoundError")throw s}if(n!=null)return this.log("findPeerLocal found %p in peer store",e),{id:n.id,multiaddrs:n.addresses.map(s=>s.multiaddr)}}async*_getValueSingle(e,t,n){let o={type:Ae.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=ev(e),o={index:-1,queued:0,running:0,total:0};for await(let s of this._getValueSingle(e,n,{...t,path:o}))if(yield s,s.name==="PEER_RESPONSE"&&s.record!=null){let i=tt(s.record.value),a=xn(i);if(!a.equals(e))throw new Nn("public key does not match id");if(a.publicKey==null)throw new Nn("public key missing");yield uu({from:e,value:s.record.value,path:o},t)}throw new Jo(`Node not responding with its public key: ${e.toString()}`)}async*findPeer(e,t={}){if(this.log("findPeer %p",e),t.useCache!==!1){let o=await this.findPeerLocal(e,t);if(o!=null){this.log("found local"),yield t0({from:this.components.peerId,peer:o,path:{index:-1,queued:0,running:0,total:0}},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,s=async function*({peer:i,signal:a,path:c}){let l={type:Ae.FIND_NODE,key:e.toMultihash().bytes};for await(let d of o.network.sendRequest(i.id,l,{...t,signal:a,path:c}))if(yield d,d.name==="PEER_RESPONSE"){let u=d.closer.find(f=>f.id.equals(e));u!=null&&(yield t0({from:d.from,peer:u,path:d.path},t))}};for await(let i of this.queryManager.run(e.toMultihash().bytes,s,t))i.name==="FINAL_PEER"&&(n=!0),yield i}if(!n)throw new Le("Not found")}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await ts(e,t),o=new ns(n,this.routingTable.kBucketSize),s=this,i=async function*({peer:a,path:c,peerKadId:l,signal:d}){s.log("getClosestPeers asking %p",a.id);let u={type:Ae.FIND_NODE,key:e};yield*s.network.sendRequest(a.id,u,{...t,signal:d,path:c}),o.addWithKadId(a,l,c)};yield*this.queryManager.run(e,i,t),this.log("found %d peers close to %b",o.length,e);for(let{peer:a,path:c}of o.peers)try{if(a.multiaddrs.length===0&&(a=await s.components.peerStore.getInfo(a.id,t)),a.multiaddrs.length===0)continue;yield t0({from:this.components.peerId,peer:await s.components.peerStore.getInfo(a.id,t),path:{index:c.index,queued:0,running:0,total:0}},t)}catch{continue}}async*getValueOrPeers(e,t,n){for await(let o of this._getValueSingle(e,t,n)){if(o.name==="PEER_RESPONSE"&&o.record!=null)try{await this._verifyRecordOnline(o.record,n)}catch{let i="invalid record received, discarded";this.log(i),yield sn({from:o.from,error:new Jo(i),path:n.path},n);continue}yield o}}async _verifyRecordOnline(e,t){if(e.timeReceived==null)throw new Zp("invalid record received");await Ha(this.validators,new Pt(e.key,e.value,e.timeReceived),t)}async getClosestPeersOffline(e,t){let n=[];try{let i=ke(e),a=Ze(i),c=await this.components.peerStore.get(a,t);n.push({id:c.id,multiaddrs:c.addresses.map(({multiaddr:l})=>l)})}catch{}let o=await ts(e,t),s=this.routingTable.closestPeers(o,t);for(let i of s)try{n.push(await this.components.peerStore.getInfo(i,t))}catch(a){if(a.name!=="NotFoundError")throw a}return n.length>0?this.log("getClosestPeersOffline returning the %d closest peer(s) we know to %b",n.length,e):this.log("getClosestPeersOffline could not any peers close to %b with %d peers in the routing table",e,this.routingTable.size),n}};var u0=class{log;datastore;datastorePrefix;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:providers`),this.datastorePrefix=`${t.datastorePrefix}/provider`,this.datastore=e.datastore}async addProvider(e,t,n){this.log.trace("%p provides %s",t,e),await this.writeProviderEntry(e,t,n)}async removeProvider(e,t,n){let o=n0(this.datastorePrefix,e,t);this.log.trace("%p no longer provides %s",t,e),await this.datastore.delete(o,n)}async getProviders(e,t){this.log.trace("get providers for %c",e);let n=await this.loadProviders(e,t);return this.log.trace("got %d providers for %c",n.size,e),[...n.keys()]}async writeProviderEntry(e,t,n){let o=n0(this.datastorePrefix,e,t),s=Mt(n?.time?.getTime()??Date.now());await this.datastore.put(o,s,n)}async loadProviders(e,t){let n=new Ut,o=n0(this.datastorePrefix,e);for await(let s of this.datastore.query({prefix:o.toString()},t)){let{peerId:i}=r0(s.key);n.set(i,o0(s.value))}return n}};var dD=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 fD(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:d}=dD(r),u=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(g){n(),i(g);return}c.push(p),t.count===c.length&&(n(),s(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)a.includes(h)||d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&s(c)});if(o.cancel=n,typeof t.timeout=="number"){let s=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function ov(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=fD(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}async function*sv(r){let{key:e,startingPeers:t,ourPeerId:n,query:o,alpha:s,path:i,numPaths:a,log:c,peersSeen:l,connectionManager:d,signal:u}=r,f=vt({objectMode:!0}),h=new St({concurrency:s,sort:(g,m)=>li(g.options.distance,m.options.distance)});h.addEventListener("idle",()=>{f.push(jx({path:{index:i,queued:h.queued,running:h.running,total:h.size}},r)),f.end()}),h.addEventListener("failure",g=>{c.error("error during query - %e",g.detail.error)});let p=()=>{h.abort(),f.end(new Vt)};u.addEventListener("abort",p);try{let m=function(w,T){if(w==null)return;l.add(w.id.toMultihash().bytes);let I=nn(T,g);h.add(async()=>{try{for await(let D of o({...r,key:e,peer:w,path:{index:i,queued:h.queued,running:h.running,total:h.size},numPaths:a,peerKadId:T,signal:u})){if(D.name==="PEER_RESPONSE")for(let F of D.closer){if(l.has(F.id.toMultihash().bytes)){c("already seen %p in query",F.id);continue}if(n.equals(F.id)){c("not querying ourselves");continue}if(!await d.isDialable(F.multiaddrs)){c("not querying undialable peer");continue}let $=await cr(F.id,{signal:u}),z=nn($,g);if(li(z,I)!==-1){c("skipping %p as they are not closer to %b than %p",F.id,e,w.id);continue}c("querying closer peer %p",F.id),m(F,$)}f.push({...D,path:{index:i,queued:h.queued,running:h.running,total:h.size}})}}catch(D){f.push(sn({from:w.id,error:D,path:{index:i,queued:h.queued,running:h.running-1,total:h.size-1}},r))}},{distance:I}).catch(D=>{c.error("error during query - %e",D)})},g=await ts(e,{signal:u});await Promise.all(t.map(async w=>{m({id:w,multiaddrs:[]},await cr(w,{signal:u}))})),yield*f}finally{u.removeEventListener("abort",p)}}var d0=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;allowQueryWithZeroPeers;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??Qp,this.alpha=t.alpha??Zo,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.allowQueryWithZeroPeers=t.allowQueryWithZeroPeers??!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.running=!1}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.shutDownController=new AbortController,this.shutDownController.signal,void 0)}async stop(){this.running=!1,this.shutDownController.abort()}async*run(e,t,n={}){if(!this.running)throw new Error("QueryManager not started");if(n.signal==null){let c=AbortSignal.timeout(Wx);n={...n,signal:c}}let o=new AbortController,s=le([this.shutDownController.signal,o.signal,n.signal]);o.signal;let i=this.logger.forComponent(`${this.logPrefix}:query:`+R(e,"base58btc")),a=!1;try{this.routingTable.size===0&&!this.allowQueryWithZeroPeers&&(i("routing table was empty, waiting for some peers before running%s query",n.isSelfQuery===!0?" self":""),await ov(this.routingTable,"peer:add",{signal:s,filter:h=>!this.peerId.equals(h.detail)}),i("routing table has peers, continuing with%s query",n.isSelfQuery===!0?" self":"")),n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(i("waiting for initial self query before continuing"),await Pe(this.initialQuerySelfHasRun.promise,s),this.initialQuerySelfHasRun=void 0),i("query:start");let c=await ts(e,{signal:s}),l=this.routingTable.closestPeers(c,{count:this.routingTable.kBucketSize}),d=l.sort(()=>Math.random()>.5?1:-1).reduce((h,p,g)=>(h[g%this.disjointPaths].push(p),h),new Array(this.disjointPaths).fill(0).map(()=>[])).filter(h=>h.length>0);if(l.length===0){i.error("running query with no peers");return}let u=Et(1024),f=d.map((h,p)=>sv({...n,key:e,startingPeers:h,ourPeerId:this.peerId,signal:s,query:t,path:p,numPaths:d.length,alpha:this.alpha,log:i,peersSeen:u,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let h of jt(...f)){if(h.name==="QUERY_ERROR"&&i.error("query error - %e",h.error),h.name==="PEER_RESPONSE")for(let p of[...h.closer,...h.providers])await this.connectionManager.isDialable(p.multiaddrs,{signal:s})&&await this.routingTable.add(p.id,{signal:s});s.throwIfAborted(),yield h}a=!0}catch(c){if(this.running)throw c}finally{a||(i("query exited early"),o.abort()),s.clear(),i("query finished")}}};function hD(r){return r[Symbol.asyncIterator]!=null}function pD(r){if(hD(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 f0=pD;var h0=class{log;peerId;peerRouting;events;count;interval;initialInterval;queryTimeout;running;timeoutId;controller;initialQuerySelfHasRun;querySelfPromise;constructor(e,t){this.peerId=e.peerId,this.log=e.logger.forComponent(`${t.logPrefix}:query-self`),this.events=e.events,this.running=!1,this.peerRouting=t.peerRouting,this.count=t.count??Qp,this.interval=t.interval??$x,this.initialInterval=t.initialInterval??Kx,this.queryTimeout=t.queryTimeout??Vx,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=s0(this.querySelf.bind(this),t.operationMetrics,"SELF_QUERY")}isStarted(){return this.running}start(){this.running||(this.running=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query - %e",e)})},this.initialInterval))}stop(){this.running=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.running){this.log("skip self-query because we are not started");return}if(this.querySelfPromise!=null)return this.log("joining existing self query"),this.querySelfPromise.promise;if(this.querySelfPromise=fe(),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.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await Yi(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),i=>Ho(i,this.count),async i=>f0(i));t?.throwIfAborted();let s=Date.now()-n;this.log("self-query found %d peers in %dms",o,s),this.events.dispatchEvent(new CustomEvent("kad-dht:query:self",{detail:{peers:o,duration:s}}))}catch(n){this.log.error("self-query error - %e",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.running&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query - %e",e)})},this.interval))}};var p0=class extends ie{log;reprovideQueue;maxQueueSize;datastore;timeout;reprovideTimeout;running;shutdownController;reprovideThreshold;contentRouting;datastorePrefix;addressManager;validity;interval;peerId;constructor(e,t){super(),this.log=e.logger.forComponent(`${t.logPrefix}:reprovider`),this.peerId=e.peerId,this.reprovideQueue=new St({concurrency:t.concurrency??Mx,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new Gr({...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??Ox,this.maxQueueSize=t.maxQueueSize??Bx,this.validity=t.validity??Xp,this.interval=t.interval??Ux,this.contentRouting=t.contentRouting,this.running=!1,this.reprovide=s0(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,this.timeout=setTimeout(()=>{this.processRecords({signal:AbortSignal.timeout(z4)}).catch(e=>{this.log.error("error running process to reprovide/cleanup - %e",e)})},this.interval))}stop(){this.running=!1,this.reprovideQueue.clear(),clearTimeout(this.timeout),this.shutdownController?.abort()}async processRecords(e){try{this.safeDispatchEvent("reprovide:start"),this.log("starting reprovide/cleanup");for await(let t of this.datastore.query({prefix:this.datastorePrefix},e))try{let{cid:n,peerId:o}=r0(t.key),i=o0(t.value).getTime()+this.validity,a=Date.now(),c=a>i,l=this.peerId.equals(o);this.log.trace("comparing: %d (now) < %d (expires) = %s %s",a,i,c,c?"(expired)":"(valid)"),c&&!l&&await this.datastore.delete(t.key,e),this.shouldReprovide(l,i)&&(this.log("reproviding %c as it is within the reprovide threshold (%d)",n,this.reprovideThreshold),this.queueReprovide(n).catch(d=>{this.log.error("could not reprovide %c - %e",n,d)}))}catch(n){this.log.error("error processing datastore key %s - %s",t.key,n.message)}this.log("reprovide/cleanup successful")}finally{this.safeDispatchEvent("reprovide:end"),this.running&&(this.log("queuing next re-provide/cleanup run in %d ms",this.interval),this.timeout=setTimeout(()=>{this.processRecords({signal:AbortSignal.timeout(z4)}).catch(t=>{this.log.error("error running re-provide - %e",t)})},this.interval))}}shouldReprovide(e,t){if(!e)return!1;let n=Date.now();return t<n?!0:t-n<this.reprovideThreshold}async queueReprovide(e,t){if(!this.running)return;this.log.trace("waiting for queue capacity before adding %c to re-provide queue",e),await this.reprovideQueue.onSizeLessThan(this.maxQueueSize,t);let n=this.reprovideQueue.queue.find(o=>o.options.cid.equals(e));if(n!=null)return this.log.trace("not adding %c to re-provide queue - already in queue",e),n.join();this.log.trace("adding %c to re-provide queue",e),this.reprovideQueue.add(async o=>{if(o.signal?.throwIfAborted(),!this.running)return;this.log.trace("re-providing %c",e);let s=this.reprovideTimeout.getTimeoutSignal(o);try{await this.reprovide(o.cid,o)}finally{this.reprovideTimeout.cleanUp(s)}this.log.trace("re-provided %c",e)},{signal:this.shutdownController?.signal,cid:e}).catch(o=>{this.log.error("could not re-provide key %c - %e",e,o)})}async reprovide(e,t){await er(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var mD=20,gD=5e3,yD="kad-close",wD=50,m0=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??gD,this.peerSetSize=t.peerSetSize??mD,this.closeTagName=t.closeTagName??yD,this.closeTagValue=t.closeTagValue??wD,this.closestPeers=new xr,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await cr(this.components.peerId);this.newPeers=new ns(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 xr(this.newPeers?.peers.map(({peer:o})=>o.id)),t=e.difference(this.closestPeers),n=this.closestPeers.difference(e);this.closestPeers=e,await Promise.all([...[...t].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:{value:this.closeTagValue},[G4]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[G4]:void 0}})})])}};function fu(r){return Array.isArray(r?.peers)}var g0=class{peerId;root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e,t){this.peerId=e.peerId,this.prefixLength=t.prefixLength??iv,this.kBucketSize=t.kBucketSize??hu,this.splitThreshold=t.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=t.numberOfOldContactsToPing??av,this.lastPingThreshold=t.lastPingThreshold??cv,this.ping=t.ping,this.verify=t.verify,this.onAdd=t.onAdd,this.onRemove=t.onRemove,this.addingPeerMap=eo({name:`${t.metricsPrefix}_adding_peer_map`,metrics:e.metrics}),this.root={prefix:"",depth:0,peers:[]}}async start(){await this.addSelfPeer(this.peerId)}stop(){this.addingPeerMap.clear(),this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e,t){this.localPeer={peerId:e,kadId:await cr(e,t),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await cr(e,t),lastPing:0},o=this.addingPeerMap.get(e);if(o!=null)return o;try{let s=this._add(n,t);this.addingPeerMap.set(e,s),await s}finally{this.addingPeerMap.delete(e)}}async _add(e,t){let n=this._determineBucket(e.kadId);if(this._indexOf(n,e.kadId)>-1)return;if(n.peers.length===this.splitThreshold&&n.depth<this.prefixLength){await this._split(n,t),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!ED(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n,t);return}await this.verify(e,t)&&(e.lastPing=Date.now(),await this._add(e,t));return}let o=n.peers.filter(i=>!(i.peerId.equals(this.localPeer?.peerId)||i.lastPing>Date.now()-this.lastPingThreshold)).sort((i,a)=>i.lastPing<a.lastPing?-1:i.lastPing>a.lastPing?1:0).slice(0,this.numberOfNodesToPing),s=!1;for await(let i of this.ping(o,t))s=!0,await this.remove(i.kadId,t);s&&await this._add(e,t)}*closest(e,t){let n=new ns(e,t?.count??this.kBucketSize);for(let o of this.toIterable())t?.exclude?.some(s=>s.equals(o.peerId))!==!0&&n.addWithKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*Lr(n.peers,({peer:o})=>o.id)}count(){function e(t){if(fu(t))return t.peers.length;let n=0;return t.left!=null&&(n+=e(t.left)),t.right!=null&&(n+=e(t.right)),n}return e(this.root)}get(e){let t=this._determineBucket(e),n=this._indexOf(t,e);return t.peers[n]}async remove(e,t){let n=this._determineBucket(e),o=this._indexOf(n,e);if(o>-1){let s=n.peers.splice(o,1)[0];await this.onRemove?.(s,n,t)}}*toIterable(){function*e(t){if(fu(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+R(nn(e,t),"base16"))}_determineBucket(e){let t=R(e,"base2");function n(o,s=0){return fu(o)?o:t[s]==="0"?n(o.left,s+1):n(o.right,s+1)}return n(this.root)}_indexOf(e,t){return e.peers.findIndex(n=>ee(n.kadId,t))}async _split(e,t){let n={prefix:"0",depth:e.depth+1,peers:[]},o={prefix:"1",depth:e.depth+1,peers:[]};for(let s of e.peers)R(s.kadId,"base2")[e.depth]==="0"?(n.peers.push(s),await this.onMove?.(s,e,n,t)):(o.peers.push(s),await this.onMove?.(s,e,o,t));bD(e,n,o)}};function bD(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function ED(r,e){return r.lastPing<Date.now()-e}var hu=20,iv=6;var xD=20,vD=100,av=3;var SD=20,AD=100,lv="kad-peer",ID=1,cv=6e5,TD=!0,_D=1e3,y0=class extends ie{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;shutdownController;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??hu,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??lv,this.peerTagValue=t.peerTagValue??ID,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??TD,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??_D,this.shutdownController=new AbortController,this.shutdownController.signal,this.pingOldContactQueue=new It({concurrency:t.pingOldContactConcurrency??SD,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??AD}),this.pingOldContactTimeout=new Gr({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new It({concurrency:t.pingNewContactConcurrency??xD,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??vD}),this.pingNewContactTimeout=new Gr({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new g0(e,{kBucketSize:t.kBucketSize,prefixLength:t.prefixLength,splitThreshold:t.splitThreshold,numberOfOldContactsToPing:t.numberOfOldContactsToPing,lastPingThreshold:t.lastPingThreshold,ping:this.pingOldContacts,verify:this.verifyNewContact,onAdd:this.peerAdded,onRemove:this.peerRemoved,metricsPrefix:t.metricsPrefix}),this.closestPeerTagger=new m0(this.components,{logPrefix:t.logPrefix,routingTable:this,peerSetSize:t.closestPeerSetSize,refreshInterval:t.closestPeerSetRefreshInterval,closeTagName:t.closeTagName,closeTagValue:t.closeTagValue}),this.components.metrics!=null&&(this.metrics={routingTableSize:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_size`),routingTableKadBucketTotal:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_total`),routingTableKadBucketAverageOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_average_occupancy`),routingTableKadBucketMinOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_min_occupancy`),routingTableKadBucketMaxOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_occupancy`),routingTableKadBucketMaxDepth:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_depth`),kadBucketEvents:this.components.metrics.registerCounterGroup(`${t.metricsPrefix}_kad_bucket_events_total`)})}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,await at(this.closestPeerTagger,this.kb))}async afterStart(){let e=0;Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let t=le([this.shutdownController.signal,AbortSignal.timeout(2e4)]);try{for(let n of await this.components.peerStore.all({filters:[o=>o.protocols.includes(this.protocol)&&o.tags.has(lv)],limit:this.populateFromDatastoreLimit,signal:t})){if(!this.running)return;try{await this.add(n.id,{signal:t}),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(n.id,{tags:{[this.peerTagName]:void 0}})}}}finally{t.clear()}this.log("added %d peer store peers to the routing table",e)}).catch(t=>{this.log.error("error adding %d, peer store peers to the routing table - %e",e,t)})}async stop(){this.running=!1,await lt(this.closestPeerTagger,this.kb),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort(),this.shutdownController.abort()}async peerAdded(e,t,n){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}},n),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t,n){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}},n),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_removed:!0}),this.safeDispatchEvent("peer:remove",{detail:e.peerId})}async*pingOldContacts(e,t){if(!this.running)return;let n=[];for(let o of e){if(this.kb.get(o.kadId)==null){this.log("asked to ping contact %p that was not in routing table",o.peerId);continue}this.metrics?.kadBucketEvents.increment({ping_old_contact:!0}),n.push(async()=>{let s=this.pingOldContactQueue.find(o.peerId);if(s!=null)return this.log("asked to ping contact %p was already being pinged",o.peerId),await s.join(t)?void 0:o;if(!await this.pingOldContactQueue.add(async a=>{let c=this.pingOldContactTimeout.getTimeoutSignal(),l=le([c,this.shutdownController.signal,a?.signal]);try{return await this.pingContact(o,a)}catch{return this.metrics?.kadBucketEvents.increment({ping_old_contact_error:!0}),!0}finally{this.pingOldContactTimeout.cleanUp(c),l.clear()}},{peerId:o.peerId,signal:t?.signal}))return o})}for await(let o of io(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=le([n,this.shutdownController.signal,t?.signal]);try{let s=this.pingNewContactQueue.find(e.peerId);return s!=null?(this.log("joining existing ping to add new peer %p to routing table",e.peerId),await s.join({signal:o})):await this.pingNewContactQueue.add(async i=>(this.metrics?.kadBucketEvents.increment({ping_new_contact:!0}),this.log("pinging new peer %p before adding to routing table",e.peerId),this.pingContact(e,i)),{peerId:e.peerId,signal:o})}catch{return this.log.trace("tried to add peer %p but they were not online",e.peerId),this.metrics?.kadBucketEvents.increment({ping_new_contact_error:!0}),!1}finally{this.pingNewContactTimeout.cleanUp(n),o.clear()}}async pingContact(e,t){let n;try{return this.log("pinging contact %p",e.peerId),await this.components.ping.ping(e.peerId,t),this.log("contact %p ping ok",e.peerId),this.safeDispatchEvent("peer:ping",{detail:e.peerId}),!0}catch(o){return this.log("error pinging old contact %p - %e",e.peerId,o),n?.abort(o),!1}}get size(){return this.kb==null?0:this.kb.count()}async find(e,t){let n=await cr(e,t);return this.kb.get(n)?.peerId}closestPeer(e){let t=this.closestPeers(e,{count:1});if(t.length>0)return t[0]}closestPeers(e,t){return this.kb==null?[]:[...this.kb.closest(e,t)]}async add(e,t){if(this.kb==null)throw new Error("RoutingTable is not started");await this.kb.add(e,t)}async remove(e,t){if(this.kb==null)throw new Error("RoutingTable is not started");let n=await cr(e,t);await this.kb.remove(n,t)}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0,o=20,s=0;function i(a){if(fu(a)){a.depth>n&&(n=a.depth),t++,e+=a.peers.length,a.peers.length<o&&(o=a.peers.length),a.peers.length>s&&(s=a.peers.length);return}i(a.left),i(a.right)}i(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(s),this.metrics.routingTableKadBucketMaxDepth.update(n)}};var uv=[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 w0=15,b0=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:o,refreshInterval:s,refreshQueryTimeout:i,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=o,this.refreshInterval=s??Hx,this.refreshQueryTimeout=i??qx,this.commonPrefixLengthRefreshedAt=[],this.refreshTable=this.refreshTable.bind(this)}async afterStart(){this.log(`refreshing routing table every ${this.refreshInterval}ms`),this.refreshTable(!0)}async stop(){this.refreshTimeoutId!=null&&clearTimeout(this.refreshTimeoutId)}refreshTable(e=!1,t){this.log("refreshing routing table");let n=this._maxCommonPrefix(),o=this._getTrackedCommonPrefixLengthsForRefresh(n);this.log(`max common prefix length ${n}`),this.log(`tracked CPLs [ ${o.map(s=>s.toISOString()).join(", ")} ]`),Promise.all(o.map(async(s,i)=>{try{if(await this._refreshCommonPrefixLength(i,s,e,t),this._numPeersForCpl(n)===0){let a=Math.min(2*(i+1),o.length-1);for(let c=i+1;c<a+1;c++)try{await this._refreshCommonPrefixLength(c,s,e,t)}catch(l){this.log.error("failed to refresh entries with common prefix length %d - %e",c,l)}}}catch(a){this.log.error("failed to refresh entries with common prefix length - %e",a)}})).catch(s=>{this.log.error("failed to refresh table - %e",s)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(s=>{this.log.error("failed to set refresh timeout - %e",s)})}async _refreshCommonPrefixLength(e,t,n,o){if(!n&&t.getTime()>Date.now()-this.refreshInterval){this.log("not running refresh for cpl %s as time since last refresh not above interval",e);return}let s=this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,s,this.routingTable.size);let i=le([o?.signal,AbortSignal.timeout(this.refreshQueryTimeout)]);try{let a=await f0(this.peerRouting.getClosestPeers(s.toMultihash().bytes,{signal:i}));this.log(`found ${a} peers that were close to imaginary peer %p`,s),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,s,this.routingTable.size)}finally{i.clear()}}_getTrackedCommonPrefixLengthsForRefresh(e){e>w0&&(e=w0);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}_generateRandomPeerId(e){if(this.routingTable.kb==null)throw new Error("Routing table not started");if(this.routingTable.kb.localPeer==null)throw new Error("Local peer not set");let t=Yt(2),n=(t[1]<<8)+t[0],o=this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),s=ke(o);return Ze(s)}_makePeerId(e,t,n){if(n>w0)throw new Error(`Cannot generate peer ID for common prefix length greater than ${w0}`);let i=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1)^32768>>n,a=65535<<16-(n+1),c=i&a|t&~a,l=uv[c],d=new ArrayBuffer(34),u=new DataView(d,0,d.byteLength);return u.setUint8(0,ze.code),u.setUint8(1,32),u.setUint32(2,l,!1),new Uint8Array(u.buffer,u.byteOffset,u.byteLength)}_maxCommonPrefix(){let e=0;for(let t of this._prefixLengths())t>e&&(e=t);return e}_numPeersForCpl(e){let t=0;for(let n of this._prefixLengths())n===e&&t++;return t}*_prefixLengths(){if(this.routingTable.kb?.localPeer!=null)for(let{kadId:e}of this.routingTable.kb.toIterable()){let t=nn(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var E0=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 de("Missing key");let n;try{n=G.decode(t.key)}catch{throw new de("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 s=ke(o.id),i=Ze(s),a=o.multiaddrs.map(c=>q(c));if(!e.equals(i)){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,i),await this.peerStore.merge(i,{multiaddrs:a})}))}};var x0=class{peerRouting;peerInfoMapper;peerId;addressManager;log;constructor(e,t){let{peerRouting:n,logPrefix:o}=t;this.log=e.logger.forComponent(`${o}:rpc:handlers:find-node`),this.peerId=e.peerId,this.addressManager=e.addressManager,this.peerRouting=n,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){this.log("incoming request from %p for peers close to %b",e,t.key);try{if(t.key==null)throw new de("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getClosestPeersOffline(t.key,{exclude:[e,this.peerId]});ee(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(s=>s.decapsulateCode(421))});let o={type:Ae.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:s})=>s.length).map(s=>({id:s.id.toMultihash().bytes,multiaddrs:s.multiaddrs.map(i=>i.bytes)})),providers:[]};return o.closer.length===0?this.log("could not find any peers closer to %b for %p",t.key,e):this.log("found %d peers close to %b for %p",o.closer.length,t.key,e),o}catch(n){throw this.log("error during finding peers closer to %b for %p - %e",t.key,e,n),n}}};var v0=class{peerId;peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:o,logPrefix:s}=t;this.log=e.logger.forComponent(`${s}: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 de("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=G.decode(t.key)}catch{throw new de("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[o,s]=await Promise.all([no(Lr(await this.providers.getProviders(n),async a=>{let c=await this.peerStore.get(a);return{id:c.id,multiaddrs:c.addresses.map(({multiaddr:d})=>d)}})),this.peerRouting.getClosestPeersOffline(t.key)]),i={type:Ae.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:s.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",i.providers.length,i.closer.length),i}async _getAddresses(e){return[]}};var S0=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 de("Invalid key");let o={type:Ae.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(tv(n)){this.log("is public key");let a=rv(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new Le("No public key found in key book");c=ft(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new Pt(n,c,new Date).serialize(),o}let[s,i]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getClosestPeersOffline(n)]);return s!=null&&(this.log("had record for %b in local datastore",n),o.record=s.serialize()),i.length>0&&(this.log("had %s closer peers in routing table",i.length),o.closer=i.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=rs(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(s){if(s.name==="NotFoundError")return;throw s}let o=Pt.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>Xp){await this.datastore.delete(t);return}return o}};var A0=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 I0=class{components;validators;log;datastorePrefix;constructor(e,t){let{validators:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:put-value`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.validators=n}async handle(e,t){let n=t.key;if(this.log("%p asked us to store value for key %b",e,n),t.record==null)throw this.log.error("empty record from %p",e),new de(`Empty record from: ${e}`);try{let o=Pt.deserialize(t.record);await Ha(this.validators,o),o.timeReceived=new Date;let s=rs(this.datastorePrefix,o.key);await this.components.datastore.put(s,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,s)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var T0=class{handlers;log;metrics;incomingMessageTimeout;constructor(e,t){this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_errors_total`),rpcTime:e.metrics?.registerMetricGroup(`${t.metricsPrefix}_inbound_rpc_time_seconds`,{label:"operation"})},this.log=e.logger.forComponent(`${t.logPrefix}:rpc`),this.incomingMessageTimeout=t.incomingMessageTimeout??1e4,this.handlers={[Ae.GET_VALUE.toString()]:new S0(e,t),[Ae.PUT_VALUE.toString()]:new I0(e,t),[Ae.FIND_NODE.toString()]:new x0(e,t),[Ae.ADD_PROVIDER.toString()]:new E0(e,t),[Ae.GET_PROVIDERS.toString()]:new v0(e,t),[Ae.PING.toString()]:new A0(e,t)}}async handleMessage(e,t){let n=this.handlers[t.type];if(n==null){this.log.error(`no handler found for message type: ${t.type}`);return}try{return this.metrics.operations?.increment({[t.type]:!0}),await n.handle(e,t)}catch{this.metrics.errors?.increment({[t.type]:!0})}}async onIncomingStream(e,t){let n=()=>{e.abort(new un)},o=AbortSignal.timeout(this.incomingMessageTimeout);o.addEventListener("abort",n);let s=Ue(e).pb(es);for(;;){if(e.readStatus!=="readable"){await e.close({signal:o});break}let i=await s.read({signal:o}),a=this.metrics?.rpcTime?.timer(i.type.toString()),c=this.metrics?.rpcTime?.timer(i.type.toString()),l=!1;try{this.log("incoming %s from %p",i.type,t.remotePeer);let d=await this.handleMessage(t.remotePeer,i);d!=null&&await s.write(d,{signal:o})}catch(d){throw l=!0,c?.(),d}finally{l||a?.()}o.removeEventListener("abort",n),o=AbortSignal.timeout(this.incomingMessageTimeout),o.addEventListener("abort",n)}}};var _0=class extends ie{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 J4=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await er(this.dht.provide(e,t))}async cancelReprovide(e){await this.dht.cancelReprovide(e)}async*findProviders(e,t={}){for await(let n of this.dht.findProviders(e,t))n.name==="PROVIDER"&&(yield*n.providers.map(o=>({...o,routing:"kad-dht"})))}async put(e,t,n){await er(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 Le("Could not find value for key")}},e6=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 Le("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},CD=32,kD=64,C0=class extends ie{k;a;d;protocol;routingTable;providers;network;peerRouting;components;log;running;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;reprovider;onPeerConnectTimeout;constructor(e,t={}){super();let n=t.logPrefix??"libp2p:kad-dht",o=t.datastorePrefix??"/dht",s=t.metricsPrefix??"libp2p_kad_dht",i={queries:e.metrics?.registerMetricGroup(`${s}_operations_total`,{label:"operation"}),errors:e.metrics?.registerCounterGroup(`${s}_operation_errors_total`,{label:"operation"}),queryTime:e.metrics?.registerMetricGroup(`${s}_operation_time_seconds`,{label:"operation"}),errorTime:e.metrics?.registerMetricGroup(`${s}_operation_error_time_seconds`,{label:"operation"})};this.running=!1,this.components=e,this.log=e.logger.forComponent(n),this.k=t.kBucketSize??hu,this.a=t.alpha??Zo,this.d=t.disjointPaths??this.a,this.protocol=t.protocol??Nx,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??CD,this.maxOutboundStreams=t.maxOutboundStreams??kD,this.peerInfoMapper=t.peerInfoMapper??Jx,this.onPeerConnectTimeout=t.onPeerConnectTimeout??Fx,this.providers=new u0(e,{...t.providers,logPrefix:n,datastorePrefix:o}),this.validators={...Zx,...t.validators},this.selectors={...Qx,...t.selectors},this.network=new c0(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:s}),this.routingTable=new y0(e,{kBucketSize:this.k,pingOldContactTimeout:t.pingOldContactTimeout,pingOldContactConcurrency:t.pingOldContactConcurrency,pingOldContactMaxQueueSize:t.pingOldContactMaxQueueSize,pingNewContactTimeout:t.pingNewContactTimeout,pingNewContactConcurrency:t.pingNewContactConcurrency,pingNewContactMaxQueueSize:t.pingNewContactMaxQueueSize,protocol:this.protocol,logPrefix:n,metricsPrefix:s,prefixLength:t.prefixLength,splitThreshold:t.kBucketSplitThreshold,network:this.network});let a=fe();t.allowQueryWithZeroPeers===!0&&a.resolve(),this.queryManager=new d0(e,{disjointPaths:this.d,alpha:this.a,logPrefix:n,metricsPrefix:s,initialQuerySelfHasRun:a,routingTable:this.routingTable,allowQueryWithZeroPeers:t.allowQueryWithZeroPeers}),this.peerRouting=new l0(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new i0(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:o}),this.contentRouting=new a0(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new b0(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new T0(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:n,metricsPrefix:s,datastorePrefix:o,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new _0(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new h0(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:a,operationMetrics:i}),this.reprovider=new p0(e,{...t.reprovide,logPrefix:n,metricsPrefix:s,datastorePrefix:o,contentRouting:this.contentRouting,operationMetrics:i}),this.network.addEventListener("peer",c=>{let l=c.detail;this.onPeerConnect(l).catch(d=>{this.log.error("could not add %p to routing table - %e",l.id,d)}),this.dispatchEvent(new CustomEvent("peer",{detail:l}))}),this.topologyListener.addEventListener("peer",c=>{let l=c.detail;Promise.resolve().then(async()=>{let d=await this.components.peerStore.get(l),u={id:l,multiaddrs:d.addresses.map(({multiaddr:f})=>f),protocols:d.protocols};await this.onPeerConnect(u)}).catch(d=>{this.log.error("could not add %p to routing table - %e",l,d)})}),this.dhtPeerRouting=new e6(this),this.dhtContentRouting=new J4(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",c=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let l=c.detail.peer.addresses.some(({multiaddr:u})=>!Qe(u)&&!yt.exactMatch(u)),d=this.getMode();l&&d==="client"?await this.setMode("server"):d==="server"&&!l&&await this.setMode("client")}).catch(l=>{this.log.error("error setting dht server mode - %e",l)})}),this.get=ci(this.get.bind(this),i,"GET_VALUE"),this.findProviders=ci(this.findProviders.bind(this),i,"FIND_PROVIDERS"),this.findPeer=ci(this.findPeer.bind(this),i,"FIND_PEER"),this.getClosestPeers=ci(this.getClosestPeers.bind(this),i,"GET_CLOSEST_PEERS"),this.provide=ci(this.provide.bind(this),i,"PROVIDE"),this.put=ci(this.put.bind(this),i,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[me]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery","@libp2p/kad-dht"];[ur]=["@libp2p/identify","@libp2p/ping"];get[Dn](){return this.dhtContentRouting}get[On](){return this.dhtPeerRouting}get[ls](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id,e.multiaddrs),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log.trace("ignoring %p as there were no valid addresses in %s after filtering",e.id,e.multiaddrs.map(n=>n.toString()));return}let t=AbortSignal.timeout(this.onPeerConnectTimeout);try{await this.routingTable.add(e.id,{signal:t})}catch(n){this.log.error("could not add %p to routing table - %e",e.id,n)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e,t){if(e===this.getMode()&&t?.force!==!0){this.log("already in %s mode",e);return}if(await this.components.registrar.unhandle(this.protocol,t),e===this.getMode()&&t?.force!==!0){this.log("already in %s mode",e);return}e==="client"?(this.log("enabling client mode while in %s mode",this.getMode()),this.clientMode=!0):(this.log("enabling server mode while in %s mode",this.getMode()),this.clientMode=!1,await this.components.registrar.handle(this.protocol,this.rpc.onIncomingStream.bind(this.rpc),{signal:t?.signal,maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running||(this.running=!0,await this.setMode(this.clientMode?"client":"server",{force:!0}),await at(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await at(this.querySelf))}async stop(){this.running=!1,await lt(this.querySelf,this.queryManager,this.network,this.routingTable,this.routingTableRefresh,this.topologyListener,this.reprovider)}async*put(e,t,n={}){yield*this.contentFetching.put(e,t,n)}async*get(e,t={}){yield*this.contentFetching.get(e,t)}async*provide(e,t={}){yield*this.contentRouting.provide(e,this.components.addressManager.getAddresses(),t)}async cancelReprovide(e,t){await this.providers.removeProvider(e,this.components.peerId,t)}async*findProviders(e,t={}){yield*this.contentRouting.findProviders(e,t)}async*findPeer(e,t={}){yield*this.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t={}){yield*this.peerRouting.getClosestPeers(e,t)}async refreshRoutingTable(e){this.routingTableRefresh.refreshTable(!0,e)}};var dv;(function(r){r[r.SEND_QUERY=0]="SEND_QUERY",r[r.PEER_RESPONSE=1]="PEER_RESPONSE",r[r.FINAL_PEER=2]="FINAL_PEER",r[r.QUERY_ERROR=3]="QUERY_ERROR",r[r.PROVIDER=4]="PROVIDER",r[r.VALUE=5]="VALUE",r[r.ADD_PEER=6]="ADD_PEER",r[r.DIAL_PEER=7]="DIAL_PEER",r[r.PATH_ENDED=8]="PATH_ENDED"})(dv||(dv={}));function fv(r={}){return e=>new C0(e,r)}var Ie;(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"})(Ie||(Ie={}));var pu=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),t6=Object.freeze({NEW_STREAM:Ie.NEW_STREAM,MESSAGE:Ie.MESSAGE_INITIATOR,CLOSE:Ie.CLOSE_INITIATOR,RESET:Ie.RESET_INITIATOR}),hv=Object.freeze({MESSAGE:Ie.MESSAGE_RECEIVER,CLOSE:Ie.CLOSE_RECEIVER,RESET:Ie.RESET_RECEIVER});var mu=1<<20,r6=4<<20,k0=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=mu,t=r6){this._buffer=new X,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 de("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:s,offset:i}=this._headerInfo;if(this._buffer.length-i<s)break;let c={id:n,type:o};(o===Ie.NEW_STREAM||o===Ie.MESSAGE_INITIATOR||o===Ie.MESSAGE_RECEIVER)&&(c.data=this._buffer.sublist(i,i+s)),t.push(c),this._buffer.consume(i+s),this._headerInfo=null}return t}_decodeHeader(e){let{value:t,offset:n}=mv(e),{value:o,offset:s}=mv(e,n),i=t&7;if(pu[i]==null)throw new Error(`Invalid type received: ${i}`);if(o>this._maxMessageSize)throw new de("Message size too large");return{id:t>>3,type:i,offset:n+s,length:o}}},PD=128,pv=127;function mv(r,e=0){let t=0,n=0,o=e,s,i=r.length;do{if(o>=i||n>49)throw e=0,new RangeError("Could not decode varint");s=r.get(o++),t+=n<28?(s&pv)<<n:(s&pv)*Math.pow(2,n),n+=7}while(s>=PD);return e=o-e,{value:t,offset:e}}var n6=10*1024,o6=class{_pool;_poolOffset;constructor(){this._pool=Ge(n6),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Mt(e.id<<3|e.type,n,o),o+=he(e.id<<3|e.type),(e.type===Ie.NEW_STREAM||e.type===Ie.MESSAGE_INITIATOR||e.type===Ie.MESSAGE_RECEIVER)&&e.data!=null?(Mt(e.data.length,n,o),o+=he(e.data.length)):(Mt(0,n,o),o+=he(0));let s=n.subarray(this._poolOffset,o);n6-o<100?(this._pool=Ge(n6),this._poolOffset=0):this._poolOffset=o,t.append(s),(e.type===Ie.NEW_STREAM||e.type===Ie.MESSAGE_INITIATOR||e.type===Ie.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},RD=new o6;function gu(r){let e=new X;return RD.write(r,e),e}var s6=class extends Bo{streamId;types;maxDataSize;muxer;constructor(e){super(e),this.types=e.direction==="outbound"?t6:hv,this.maxDataSize=e.maxDataSize,this.muxer=e.muxer,this.streamId=parseInt(this.id.substring(1)),e.direction==="outbound"&&queueMicrotask(()=>{this.muxer.send(gu({id:this.streamId,type:t6.NEW_STREAM,data:new X(C(this.id))}))})}sendData(e){let t=new X,n=e.byteLength;for(;e.byteLength>0;){let o=Math.min(e.byteLength,this.maxDataSize),s=e.sublist(0,o);e=e.sublist(o),t.append(gu({id:this.streamId,type:this.types.MESSAGE,data:s}))}return{sentBytes:n,canSendMore:this.muxer.send(t)}}sendReset(){return this.muxer.send(gu({id:this.streamId,type:this.types.RESET}))}async sendCloseWrite(e){this.muxer.send(gu({id:this.streamId,type:this.types.CLOSE})),e?.signal?.throwIfAborted()}async sendCloseRead(e){e?.signal?.throwIfAborted()}sendPause(){}sendResume(){}};function gv(r){let{id:e,muxer:t,direction:n,maxMsgSize:o=mu}=r;return new s6({...r,id:n==="outbound"?`i${e}`:`r${e}`,direction:n,maxDataSize:o,muxer:t,log:r.log.newScope(`${n}:${e}`),protocol:""})}var LD=5;function DD(r){let e={...r,type:`${pu[r.type]} (${r.type})`};return r.type===Ie.NEW_STREAM&&(e.data=R(r.data.subarray())),(r.type===Ie.MESSAGE_INITIATOR||r.type===Ie.MESSAGE_RECEIVER)&&(e.data=R(r.data.subarray(),"base16")),e}var P0=class extends Mo{_streamId;rateLimiter;maxMessageSize;maxUnprocessedMessageQueueSize;decoder;constructor(e,t){super(e,{...t,protocol:"/mplex/6.7.0",name:"mplex"}),this._streamId=0,this.maxMessageSize=t.maxMessageSize??mu,this.maxUnprocessedMessageQueueSize=t.maxUnprocessedMessageQueueSize??r6,this.decoder=new k0(this.maxMessageSize,this.maxUnprocessedMessageQueueSize),this.rateLimiter=new na({points:t.disconnectThreshold??LD,duration:1})}onData(e){for(let t of this.decoder.write(e))this.handleMessage(t)}onCreateStream(e){if(this.status!=="open")throw new Br("Muxer already closed");let t=this._streamId++;return this._newStream(t,"outbound",e)}_newStream(e,t,n){return this.log("new %s stream %s",t,e),gv({...n,id:e,direction:t,maxMsgSize:this.maxMessageSize,log:this.log,muxer:this})}handleMessage(e){if(this.log.enabled&&this.log.trace("incoming message",DD(e)),e.type===Ie.NEW_STREAM){try{this.rateLimiter.consume("new-stream",1)}catch{this.log("rate limit hit when opening too many new streams over the inbound stream limit - closing remote connection"),this.abort(new Error("Too many open streams"));return}let o=this._newStream(e.id,"inbound",this.streamOptions);this.onRemoteStream(o);return}let t=`${(e.type&1)===1?"i":"r"}${e.id}`,n=this.streams.find(o=>o.id===t);if(n==null){this.log("missing stream %s for message type %s",t,pu[e.type]);try{this.rateLimiter.consume("missing-stream",1)}catch{this.log("rate limit hit when receiving messages for streams that do not exist - closing remote connection"),this.abort(new Error("Too many messages for missing streams"));return}return}try{switch(e.type){case Ie.MESSAGE_INITIATOR:case Ie.MESSAGE_RECEIVER:n.onData(e.data);break;case Ie.CLOSE_INITIATOR:case Ie.CLOSE_RECEIVER:n.onRemoteCloseWrite();break;case Ie.RESET_INITIATOR:case Ie.RESET_RECEIVER:n.onRemoteReset();break;default:this.log("unknown message type")}}catch(o){this.log.error("error while processing message - %e",o),n.abort(o)}}};var i6=class{protocol="/mplex/6.7.0";_init;constructor(e={}){this._init=e}[Symbol.toStringTag]="@libp2p/mplex";[me]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new P0(e,{...this._init})}};function yv(r={}){return()=>new i6(r)}var ND=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 OD(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:d}=ND(r),u=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(g){n(),i(g);return}c.push(p),t.count===c.length&&(n(),s(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)a.includes(h)||d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&s(c)});if(o.cancel=n,typeof t.timeout=="number"){let s=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function wv(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=OD(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}var bv="1.0.0",Ev="ping",xv="ipfs";var R0=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;constructor(e,t={}){this.components=e,this.started=!1,this.protocol=`/${t.protocolPrefix??xv}/${Ev}/${bv}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnLimitedConnection=t.runOnLimitedConnection??!0,this.handlePing=this.handlePing.bind(this)}[Symbol.toStringTag]="@libp2p/ping";[me]=["@libp2p/ping"];async start(){await this.components.registrar.handle(this.protocol,this.handlePing,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}async handlePing(e,t){let n=e.log.newScope("ping");n.trace("ping from %p",t.remotePeer);let o=AbortSignal.timeout(this.timeout);o.addEventListener("abort",()=>{e.abort(new un("Ping timed out"))});let s=Date.now();for await(let i of e){if(e.status!=="open"){n("stream status changed to %s",e.status);break}e.send(i)||(n("waiting for stream to drain"),await wv(e,"drain",{rejectionEvents:["close"],signal:o}),n("stream drained"))}n("ping from %p complete in %dms",t.remotePeer,Date.now()-s),await e.close({signal:o})}async ping(e,t={}){let n=Yt(32),o=await this.components.connectionManager.openStream(e,this.protocol,{runOnLimitedConnection:this.runOnLimitedConnection,...t}),s=o.log.newScope("ping");try{let i=Date.now(),a=Promise.withResolvers(),c=new X,l=d=>{if(c.append(d.data),c.byteLength===32){o.removeEventListener("message",l);let u=Date.now()-i;Promise.all([o.closeRead(t)]).then(()=>{if(ee(n,c.subarray()))a.resolve(u);else throw new as(`Received wrong ping ack after ${u}ms`)}).catch(f=>{o.abort(f),a.reject(f)})}};return o.addEventListener("message",l),o.send(n),await o.close(t),await Pe(a.promise,t.signal)}catch(i){throw s.error("error while pinging %o - %e",e,i),o?.abort(i),i}finally{o?.close()}}};function Sv(r={}){return e=>new R0(e,r)}var Kt;(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=()=>We(t)})(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.flag!=null&&(s.uint32(8),r.Flag.codec().encode(o.flag,s)),o.message!=null&&(s.uint32(18),s.bytes(o.message)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={},c=s==null?o.len:o.pos+s;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=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(Kt||(Kt={}));var Av=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"],a6=Array.from("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"),Iv="libp2p+webrtc+v1/",Tv=2*1024*1024,qa=16*1024;function FD(r=qa){let e=he(r-he(r)),t=1+he(Object.keys(Kt.Flag).length-1),n=1,o=r-e-t-n,s=he(o);return e+t+n+s}var _v=FD();var Cv=1e4,c6="/webrtc",yu="/webrtc-signaling/0.0.1";var $D=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 KD(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:d}=$D(r),u=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(g){n(),i(g);return}c.push(p),t.count===c.length&&(n(),s(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)a.includes(h)||d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&s(c)});if(o.cancel=n,typeof t.timeout=="number"){let s=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function wo(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=KD(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}var kv=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,s;n<o;n++)(s||!(n in e))&&(s||(s=Array.prototype.slice.call(e,0,n)),s[n]=e[n]);return r.concat(s||Array.prototype.slice.call(e))},VD=(function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r})();var HD=(function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r})();var qD=(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 WD=(function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r})();var zD=(function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r})();var GD=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,YD=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,Pv=3,jD=[["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",GD]],Rv=[["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 Dv(r){return r?Lv(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new zD:typeof navigator<"u"?Lv(navigator.userAgent):ZD()}function XD(r){return r!==""&&jD.reduce(function(e,t){var n=t[0],o=t[1];if(e)return e;var s=o.exec(r);return!!s&&[n,s]},!1)}function Lv(r){var e=XD(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new WD;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<Pv&&(o=kv(kv([],o,!0),JD(Pv-o.length),!0)):o=[];var s=o.join("."),i=QD(r),a=YD.exec(r);return a&&a[1]?new qD(t,s,i,a[1]):new VD(t,s,i)}function QD(r){for(var e=0,t=Rv.length;e<t;e++){var n=Rv[e],o=n[0],s=n[1],i=s.exec(r);if(i)return o}return null}function ZD(){var r=typeof process<"u"&&process.version;return r?new HD(process.version.slice(1)):null}function JD(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var Nv=Dv(),L0=Nv!=null&&Nv.name==="firefox";async function l6(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??Av.map(e=>({urls:[e]})),r}var Ov=(r=32)=>Iv+[...Array(r)].map(()=>a6.at(Math.floor(Math.random()*a6.length))).join("");var u6=class extends Bo{channel;incomingData;maxBufferedAmount;receivedFinAck;finAckTimeout;constructor(e){super({...e,maxMessageSize:(e.maxMessageSize??qa)-_v}),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=vt(),this.maxBufferedAmount=e.maxBufferedAmount??Tv,this.finAckTimeout=e.finAckTimeout??Cv,this.channel.onclose=()=>{this.log.trace("received datachannel close event"),this.onRemoteCloseWrite(),this.onTransportClosed()},this.channel.onerror=n=>{let o=n.error;this.log.trace("received datachannel error event - %e",o),this.abort(o)},this.channel.onmessage=async n=>{this.log("incoming message %d bytes",n.data.byteLength);let{data:o}=n;o===null||o.byteLength===0||this.incomingData.push(new Uint8Array(o,0,o.byteLength))},this.channel.bufferedAmountLowThreshold=0,this.channel.onbufferedamountlow=()=>{this.writableNeedsDrain&&this.safeDispatchEvent("drain")},Promise.resolve().then(async()=>{for await(let n of Ks(this.incomingData))this.processIncomingProtobuf(n)}).catch(n=>{this.log.error("error processing incoming data channel messages - %e",n)});let t=()=>{this.channel.readyState==="open"&&(this.log.trace("stream closed, closing underlying datachannel"),this.channel.close())};this.addEventListener("close",t),this.channel.readyState!=="open"&&(this.log('channel ready state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),wo(this.channel,"open",{rejectionEvents:["close","error"]}).then(()=>{this.log('channel ready state is now "%s", dispatching drain',this.channel.readyState),this.safeDispatchEvent("drain")}).catch(n=>{this.abort(n.error??n)}))}sendNewStream(){}_sendMessage(e){if(this.channel.readyState!=="open")throw new cn(`Invalid datachannel state - ${this.channel.readyState}`);if(this.log.trace('sending message, channel state "%s"',this.channel.readyState),L0){this.channel.send(e.subarray());return}for(let t of e)this.channel.send(t)}sendData(e){return this.channel.readyState!=="open"?{sentBytes:0,canSendMore:!1}:(this._sendMessage(Qn.single(Kt.encode({message:e.subarray()}))),{sentBytes:e.byteLength,canSendMore:this.channel.bufferedAmount<this.maxBufferedAmount})}sendReset(e){try{this.log.error("sending reset - %e",e),this._sendFlag(Kt.Flag.RESET),this.receivedFinAck?.reject(e)}catch(t){this.log.error("failed to send reset - %e",t)}}async sendCloseWrite(e){this._sendFlag(Kt.Flag.FIN),e?.signal?.throwIfAborted(),this.receivedFinAck=Promise.withResolvers();let t=e?.signal??AbortSignal.timeout(this.finAckTimeout),n=[wo(this.channel,"close",{signal:t}),wo(this.channel,"error",{signal:t})];await Promise.any([Pe(this.receivedFinAck.promise,t),...n]).finally(()=>{n.forEach(o=>o.cancel())})}async sendCloseRead(e){this._sendFlag(Kt.Flag.STOP_SENDING),e?.signal?.throwIfAborted()}processIncomingProtobuf(e){let t=Kt.decode(e);t.message!=null&&(this.readStatus==="readable"||this.readStatus==="paused")&&this.onData(new X(t.message)),t.flag!==void 0&&(this.log.trace('incoming flag %s, write status "%s", read status "%s"',t.flag,this.writeStatus,this.readStatus),t.flag===Kt.Flag.FIN&&(this._sendFlag(Kt.Flag.FIN_ACK),this.onRemoteCloseWrite()),t.flag===Kt.Flag.RESET&&(this.receivedFinAck?.reject(new fi("The stream was reset")),this.onRemoteReset()),t.flag===Kt.Flag.STOP_SENDING&&this.onRemoteCloseRead(),t.flag===Kt.Flag.FIN_ACK&&this.receivedFinAck?.resolve())}_sendFlag(e){if(this.channel.readyState!=="open")return this.log.trace('not sending flag %s because channel is "%s" and not "open"',e.toString(),this.channel.readyState),!1;this.log.trace("sending flag %s",e.toString());let t=Kt.encode({flag:e}),n=Qn.single(t);try{return this._sendMessage(n),!0}catch(o){this.log.error("could not send flag %s - %e",e.toString(),o)}return!1}sendPause(){}sendResume(){}};function wu(r){let{channel:e,direction:t,isHandshake:n}=r;return new u6({...r,id:`${e.id}`,log:r.log.newScope(`${n===!0?"handshake":t}:${e.id}`),protocol:""})}var os=class{protocol;peerConnection;metrics;dataChannelOptions;earlyDataChannels;constructor(e){this.onEarlyDataChannel=this.onEarlyDataChannel.bind(this),this.peerConnection=e.peerConnection,this.metrics=e.metrics,this.protocol=e.protocol??c6,this.dataChannelOptions=e.dataChannelOptions??{},this.peerConnection.addEventListener("datachannel",this.onEarlyDataChannel),this.earlyDataChannels=[]}onEarlyDataChannel(e){this.earlyDataChannels.push(e.channel)}createStreamMuxer(e){return this.peerConnection.removeEventListener("datachannel",this.onEarlyDataChannel),new d6(e,{peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,protocol:this.protocol,earlyDataChannels:this.earlyDataChannels})}},d6=class extends Mo{peerConnection;dataChannelOptions;constructor(e,t){super(e,{...t,name:"muxer"}),this.peerConnection=t.peerConnection,this.protocol=t.protocol??c6,this.dataChannelOptions=t.dataChannelOptions??{},this.peerConnection.ondatachannel=({channel:n})=>{this.onDataChannel(n)},queueMicrotask(()=>{if(this.status!=="open"){t.earlyDataChannels.forEach(n=>{n.close()});return}t.earlyDataChannels.forEach(n=>{this.onDataChannel(n)})})}onDataChannel(e){if(this.log("incoming datachannel with channel id %d, protocol %s and status %s",e.id,e.protocol,e.readyState),e.label==="init"){this.log.trace("closing init channel %d",e.id),e.close();return}let t=wu({...this.streamOptions,...this.dataChannelOptions,channel:e,direction:"inbound",log:this.log});this.onRemoteStream(t)}async onCreateStream(e){let t=this.peerConnection.createDataChannel("",{});return this.log("open channel %d for protocol %s",t.id,e?.protocol),wu({...e,...this.dataChannelOptions,channel:t,direction:"outbound",log:this.log})}onData(){}};var f6=class extends Oo{peerConnection;constructor(e){super(e),this.peerConnection=e.peerConnection;let t=e.peerConnection.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change %s initial state %s",this.peerConnection.connectionState,t),(this.peerConnection.connectionState==="disconnected"||this.peerConnection.connectionState==="failed"||this.peerConnection.connectionState==="closed")&&(this.onTransportClosed(),this.peerConnection.close())}}sendData(e){return{sentBytes:e.byteLength,canSendMore:!0}}async sendClose(e){this.peerConnection.close(),e?.signal?.throwIfAborted()}sendReset(){this.peerConnection.close()}sendPause(){}sendResume(){}},bu=r=>new f6(r);var D0=globalThis.RTCPeerConnection,N0=globalThis.RTCSessionDescription,Mv=globalThis.RTCIceCandidate;var ss=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},Mr=class extends ss{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var O0=class extends ss{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var M0=class extends ss{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},B0=class extends ss{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 lr;(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=()=>We(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.data!=null&&(s.uint32(18),s.string(o.data)),i.lengthDelimited!==!1&&s.ldelim()},(o,s,i={})=>{let a={},c=s==null?o.len:o.pos+s;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=>re(o,r.codec()),r.decode=(o,s)=>te(o,r.codec(),s)})(lr||(lr={}));var U0=async(r,e,t)=>{try{let n=Promise.withResolvers();for(eN(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal})]);if(o==null){t.signal?.throwIfAborted();break}if(o.type!==lr.Type.ICE_CANDIDATE)throw new de("ICE candidate message expected");let s=JSON.parse(o.data??"null");if(s===""||s===null){t.onProgress?.(new H("webrtc:end-of-ice-candidates")),t.log.trace("end-of-candidates received");continue}let i=new Mv(s);t.log.trace("%s received new ICE candidate %o",t.direction,s);try{t.onProgress?.(new H("webrtc:add-ice-candidate",i.candidate)),await r.addIceCandidate(i)}catch(a){t.log.error("%s bad candidate received %o - %e",t.direction,s,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate - %e",t.direction,n),t.signal?.aborted===!0&&r.connectionState!=="connected")throw n}};function eN(r,e){if(r.connectionState==="connected"){e.resolve();return}r.onconnectionstatechange=t=>{switch(r.connectionState){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new di(`RTCPeerConnection connection state became "${r.connectionState}"`));break;default:break}}}function F0(r){let e;for(let t of r.getComponents())t.name==="p2p"&&(e=Me(t.value??""));if(e==null)throw new ln("Remote peerId must be present in multiaddr");return e}async function Bv({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:s,transportManager:i,log:a,logger:c,onProgress:l}){let{circuitAddress:d,targetPeer:u}=Uv(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing circuit address: %a",d);let f=s.getConnections(u),h;f.length===0?(l?.(new H("webrtc:dial-relay")),h=await i.dial(d,{signal:t,onProgress:l})):(l?.(new H("webrtc:reuse-relay-connection")),h=f[0]),l?.(new H("webrtc:open-signaling-stream"));let p=await h.newStream(yu,{signal:t,runOnLimitedConnection:!0}),g=Ue(p).pb(lr),m=new D0(r);m.addEventListener("connectionstatechange",()=>{switch(m.connectionState){case"closed":m.close();break;default:break}});let w=new os({peerConnection:m,dataChannelOptions:e});try{let T=m.createDataChannel("init");m.onicecandidate=({candidate:$})=>{if(m.connectionState==="connected"){a.trace("ignore new ice candidate as peer connection is already connected");return}if($==null||$?.candidate===""){a.trace("initiator detected end of ICE candidates");return}let z=JSON.stringify($?.toJSON()??null);a.trace("initiator sending ICE candidate %o",$),g.write({type:lr.Type.ICE_CANDIDATE,data:z},{signal:t}).catch(S=>{a.error("error sending ICE candidate - %e",S)})},m.onicecandidateerror=$=>{a.error("initiator ICE candidate error",$)};let I=await m.createOffer().catch($=>{throw a.error("could not execute createOffer - %e",$),new Mr("Failed to set createOffer")});a.trace("initiator send SDP offer %s",I.sdp),l?.(new H("webrtc:send-sdp-offer")),await g.write({type:lr.Type.SDP_OFFER,data:I.sdp},{signal:t}),await m.setLocalDescription(I).catch($=>{throw a.error("could not execute setLocalDescription - %e",$),new Mr("Failed to set localDescription")}),l?.(new H("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let D=await g.read({signal:t});if(D.type!==lr.Type.SDP_ANSWER)throw new Mr("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",D.data);let F=new N0({type:"answer",sdp:D.data});return await m.setRemoteDescription(F).catch($=>{throw a.error("could not execute setRemoteDescription - %e",$),new Mr("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new H("webrtc:read-ice-candidates")),await U0(m,g,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected"),T.readyState!=="open"&&(a.trace("wait for init channel to open"),await wo(T,"open",{signal:t})),a.trace("closing init channel"),T.close(),a.trace("waiting for init channel to close"),await wo(T,"close",{signal:t}),l?.(new H("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await p.close({signal:t}),a.trace("initiator connected to remote address %s",o),{remoteAddress:o,peerConnection:m,muxerFactory:w}}catch(T){throw a.error("outgoing signaling error - %e",T),m.close(),p.abort(T),T}finally{m.onicecandidate=null,m.onicecandidateerror=null}}var Fv=Ce(pa.matchers[0],_e(290)),$0=class r extends ie{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=>Fv.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=>Fv.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 $v(r,e,{peerConnection:t,signal:n,log:o}){o.trace("new inbound signaling stream");let s=Ue(r).pb(lr);try{t.onicecandidate=({candidate:u})=>{if(t.connectionState==="connected"){o.trace("ignore new ice candidate as peer connection is already connected");return}if(u==null||u?.candidate===""){o.trace("recipient detected end of ICE candidates");return}let f=JSON.stringify(u?.toJSON()??null);o.trace("recipient sending ICE candidate %s",f),s.write({type:lr.Type.ICE_CANDIDATE,data:f},{signal:n}).catch(h=>{o.error("error sending ICE candidate - %e",h)})},o.trace("recipient read SDP offer");let c=await s.read({signal:n});if(c.type!==lr.Type.SDP_OFFER)throw new Mr(`expected message type SDP_OFFER, received: ${c.type??"undefined"} `);o.trace("recipient received SDP offer %s",c.data);let l=new N0({type:"offer",sdp:c.data});await t.setRemoteDescription(l).catch(u=>{throw o.error("could not execute setRemoteDescription - %e",u),new Mr("Failed to set remoteDescription")});let d=await t.createAnswer().catch(u=>{throw o.error("could not execute createAnswer - %e",u),new Mr("Failed to create answer")});o.trace("recipient send SDP answer %s",d.sdp),await s.write({type:lr.Type.SDP_ANSWER,data:d.sdp},{signal:n}),await t.setLocalDescription(d).catch(u=>{throw o.error("could not execute setLocalDescription - %e",u),new Mr("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await U0(t,s,{direction:"recipient",signal:n,log:o})}catch(c){if(t.connectionState!=="connected")throw o.error("error while handling signaling stream from peer %a - %e",e.remoteAddr,c),t.close(),c;o("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",e.remoteAddr,c)}let i=F0(e.remoteAddr),a=q(`/webrtc/p2p/${i}`);return o.trace("recipient connected to remote address %s",a),{remoteAddress:a,remotePeer:i}}var K0=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"})})}[vo]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[me]=["@libp2p/transport"];[ur]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(yu,(e,t)=>{let n=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);this._onProtocol(e,t,n).catch(o=>{this.log.error("failed to handle incoming connect from %p - %e",t.remotePeer,o)}).finally(()=>{n.clear()})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(yu),this._started=!1}createListener(e){return new $0(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(yl.exactMatch)}dialFilter(e){return this.listenFilter(e)}async dial(e,t){this.log.trace("dialing address: %a",e);let{remoteAddress:n,peerConnection:o,muxerFactory:s}=await Bv({rtcConfiguration:await l6(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}),i=bu({peerConnection:o,remoteAddr:n,metrics:this.metrics?.dialerEvents,direction:"outbound",log:this.components.logger.forComponent("libp2p:webrtc:connection")}),a=await t.upgrader.upgradeOutbound(i,{skipProtection:!0,skipEncryption:!0,remotePeer:F0(e),muxerFactory:s,onProgress:t.onProgress,signal:t.signal});return this._closeOnShutdown(o,i),a}async _onProtocol(e,t,n){let o=new D0(await l6(this.init.rtcConfiguration));o.addEventListener("connectionstatechange",()=>{switch(o.connectionState){case"closed":o.close();break;default:break}});let s=new os({peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:i,remotePeer:a}=await $v(e,t,{peerConnection:o,signal:n,log:this.log});await e.close({signal:n});let c=bu({peerConnection:o,remoteAddr:i,metrics:this.metrics?.listenerEvents,direction:"inbound",log:this.components.logger.forComponent("libp2p:webrtc:connection")});await this.components.upgrader.upgradeInbound(c,{skipEncryption:!0,skipProtection:!0,remotePeer:a,muxerFactory:s,signal:n}),this._closeOnShutdown(o,c)}catch(i){throw this.log.error("incoming signaling error - %e",i),o.close(),e.abort(i),i}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection - %e",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function Uv(r){let e=r.getComponents().filter(({name:n})=>n==="p2p").map(({value:n})=>n).pop();if(e==null)throw new A("Destination peer id was missing");return{circuitAddress:q(r.getComponents().filter(({name:n})=>n!=="webrtc")),targetPeer:Me(e)}}var h6=Object.values(ps).map(r=>r.decoder).reduce((r,e)=>r.or(e)),tN=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function Kv(r){return r?.match(tN)?.groups?.fingerprint}function p6(r){let t=r.getComponents().find(n=>n.code===466)?.value;if(t===void 0||t==="")throw new A(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function rN(r){return He.decode(h6.decode(r))}function nN(r){let e=rN(p6(r)),t=oN(e.code),n=e.digest.reduce((s,i)=>s+i.toString(16).padStart(2,"0"),""),o=n.match(/.{1,2}/g);if(o==null)throw new O0(n,r.toString());return`${t} ${o.join(":").toUpperCase()}`}function Vv(r){let e=r.split(":").map(o=>parseInt(o,16)),t=Uint8Array.from(e),n=Wt(ze.code,t);return q(`/certhash/${ec.encode(n.bytes)}`)}function oN(r){switch(r){case 17:return"sha-1";case 18:return"sha-256";case 19:return"sha-512";default:throw new B0(r)}}function Hv(r,e){let{host:t,port:n,type:o}=oe(r);if(o!=="ip4"&&o!=="ip6")throw new A(`Multiaddr ${r} was not an IPv4 or IPv6 address`);let s=nN(r);return{type:"answer",sdp:`v=0
66
66
  o=- 0 0 IN IP${o==="ip4"?4:6} ${t}
67
67
  s=-
68
68
  t=0 0
@@ -100,7 +100,7 @@ a=end-of-candidates
100
100
  `:`
101
101
  `;try{r.sdp=r.sdp.replace(/\na=ice-ufrag:[^\n]*\n/,`
102
102
  a=ice-ufrag:`+e+t).replace(/\na=ice-pwd:[^\n]*\n/,`
103
- a=ice-pwd:`+e+t)}catch{}return r}var g6=_("libp2p-webrtc-noise:");function Wv(r,e,t){let n=r.trim().toLowerCase().replaceAll(":",""),o=_(n,"hex"),s=zt(We.code,o),i=h6.decode(p6(e)),a=g6.byteLength+s.bytes.byteLength+i.byteLength;return t==="server"?Oe([g6,i,s.bytes],a):Oe([g6,s.bytes,i],a)}var sN=L0?"iceconnectionstatechange":"connectionstatechange";function iN(r,e){return r.role==="server"}async function Gv(r,e,t,n){let o=r.createDataChannel("",{negotiated:!0,id:0});try{if(n.role==="client"){n.log.trace("client creating local offer");let u=await r.createOffer();n.log.trace("client created local offer %s",u.sdp);let f=m6(u,t);n.log.trace("client setting local offer %s",f.sdp),await r.setLocalDescription(f);let h=Hv(n.remoteAddr,t);n.log.trace("client setting server description %s",h.sdp),await r.setRemoteDescription(h)}else{let u=qv(n.remoteAddr,t);n.log.trace("server setting client %s %s",u.type,u.sdp),await r.setRemoteDescription(u),n.log.trace("server creating local answer");let f=await r.createAnswer();n.log.trace("server created local answer");let h=m6(f,t);n.log.trace("server setting local description %s",f.sdp),await r.setLocalDescription(h)}if(o.readyState!=="open"&&(n.log.trace("%s wait for handshake channel to open, starting status %s",n.role,o.readyState),await wo(o,"open",n)),n.log.trace("%s handshake channel opened",n.role),iN(n,r)){let u=r.remoteFingerprint()?.value??"";n.remoteAddr=n.remoteAddr.encapsulate(Vv(u))}let s=Kv(r.localDescription?.sdp);if(s==null)throw new ss("Could not get fingerprint from local description sdp");n.log.trace("%s performing noise handshake",n.role);let i=Wv(s,n.remoteAddr,n.role),a=sp({prologueBytes:i})(n),c=wu({channel:o,direction:"outbound",isHandshake:!0,log:n.log,...n.dataChannel??{}}),l=bu({peerConnection:r,remoteAddr:n.remoteAddr,metrics:n.events,direction:n.role==="client"?"outbound":"inbound",log:n.logger.forComponent("libp2p:webrtc-direct:connection")});if(r.addEventListener(sN,()=>{switch(r.connectionState){case"failed":case"disconnected":case"closed":l.close().catch(u=>{n.log.error("error closing connection - %e",u),l.abort(u)});break;default:break}}),n.events?.increment({peer_connection:!0}),n.role==="client"){n.log.trace("%s secure inbound",n.role);let u=await a.secureInbound(c,{remotePeer:n.remotePeer,signal:n.signal,skipStreamMuxerNegotiation:!0});return n.log.trace("%s upgrade outbound",n.role),await n.upgrader.upgradeOutbound(l,{skipProtection:!0,skipEncryption:!0,remotePeer:u.remotePeer,muxerFactory:e,signal:n.signal})}n.log.trace("%s secure outbound",n.role);let d=await a.secureOutbound(c,{remotePeer:n.remotePeer,signal:n.signal,skipStreamMuxerNegotiation:!0});l.remoteAddr=l.remoteAddr.encapsulate(`/p2p/${d.remotePeer}`),n.log.trace("%s upgrade inbound",n.role),await n.upgrader.upgradeInbound(l,{skipProtection:!0,skipEncryption:!0,remotePeer:d.remotePeer,muxerFactory:e,signal:n.signal})}catch(s){throw o.close(),r.close(),s}}async function Yv(r,e,t={}){let n=t.certificate;n==null&&(n=await RTCPeerConnection.generateCertificate({name:"ECDSA",namedCurve:"P-256"}));let o=typeof t.rtcConfiguration=="function"?await t.rtcConfiguration():t.rtcConfiguration,s=new RTCPeerConnection({...o??{},certificates:[n]}),i=new os({peerConnection:s,metrics:t.events,dataChannelOptions:t.dataChannel});return{peerConnection:s,muxerFactory:i}}var V0=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"})})}[vo]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[me]=["@libp2p/transport"];async dial(e,t){this.log("dial %a",e),t.signal.throwIfAborted();let n,o=e.getComponents().findLast(c=>c.code===421)?.value;o!=null&&(n=Me(o));let s=Ov(),{peerConnection:i,muxerFactory:a}=await Yv("client",s,{rtcConfiguration:typeof this.init.rtcConfiguration=="function"?await this.init.rtcConfiguration():this.init.rtcConfiguration??{},dataChannel:this.init.dataChannel});try{return await Gv(i,a,s,{role:"client",log:this.log,logger:this.components.logger,events:this.metrics?.dialerEvents,signal:t.signal,remoteAddr:e,dataChannel:this.init.dataChannel,upgrader:t.upgrader,peerId:this.components.peerId,remotePeer:n,privateKey:this.components.privateKey})}catch(c){throw i.close(),c}}createListener(e){throw new M0("WebRTCDirectTransport.createListener")}listenFilter(e){return[]}dialFilter(e){return e.filter(gl.exactMatch)}};function jv(r){return e=>new V0(e,r)}function Qv(r){return e=>new K0(e,r)}var aN=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 cN(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:d}=aN(r),u=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(g){n(),i(g);return}c.push(p),t.count===c.length&&(n(),s(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)a.includes(h)||d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&s(c)});if(o.cancel=n,typeof t.timeout=="number"){let s=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function Xv(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=cN(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}function Zv(){throw new Error("WebSocket Servers can not be created in the browser!")}var lN=1024*1024*4,uN=10,y6=class extends Oo{websocket;maxBufferedAmount;checkBufferedAmountTask;constructor(e){super(e),this.websocket=e.websocket,this.maxBufferedAmount=e.maxBufferedAmount??lN,this.checkBufferedAmountTask=oa(this.checkBufferedAmount.bind(this),e.bufferedAmountPollInterval??uN),this.websocket.addEventListener("close",t=>{if(this.log('closed - code %d, reason "%s", wasClean %s',t.code,t.reason,t.wasClean),this.checkBufferedAmountTask.stop(),!t.wasClean){this.onRemoteReset();return}this.onTransportClosed()},{once:!0}),this.websocket.addEventListener("message",t=>{try{let n;if(typeof t.data=="string")n=_(t.data);else if(t.data instanceof ArrayBuffer)n=new Uint8Array(t.data,0,t.data.byteLength);else{this.abort(new Error("Incorrect binary type"));return}this.onData(n)}catch(n){this.log.error("error receiving data - %e",n)}})}sendData(e){for(let n of e)this.websocket.send(n);let t=this.websocket.bufferedAmount<this.maxBufferedAmount;return t||this.checkBufferedAmountTask.start(),{sentBytes:e.byteLength,canSendMore:t}}sendReset(){this.websocket.close(1006)}async sendClose(e){this.websocket.close(),e?.signal?.throwIfAborted()}sendPause(){}sendResume(){}checkBufferedAmount(){this.log("buffered amount now %d",this.websocket.bufferedAmount),this.websocket.bufferedAmount===0&&(this.checkBufferedAmountTask.stop(),this.safeDispatchEvent("drain"))}};function Jv(r){return new y6(r)}var w6=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"})})}[vo]=!0;[Symbol.toStringTag]="@libp2p/websockets";[me]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=Jv({websocket:await this._connect(e,t),remoteAddr:e,metrics:this.metrics?.dialerEvents,direction:"outbound",log:this.components.logger.forComponent("libp2p:websockets:connection"),maxBufferedAmount:this.init.maxBufferedAmount,bufferedAmountPollInterval:this.init.bufferedAmountPollInterval});this.log("new outbound connection %s",n.remoteAddr);let o=await t.upgrader.upgradeOutbound(n,t);return this.log("outbound connection %s upgraded",n.remoteAddr),o}async _connect(e,t){t?.signal?.throwIfAborted();let n=qo(e);this.log("create websocket connection to %s",n);let o=new WebSocket(n);o.binaryType="arraybuffer";try{t.onProgress?.(new H("websockets:open-connection")),await Xv(o,"open",t)}catch(s){if(t.signal?.aborted)throw this.metrics?.dialerEvents.increment({abort:!0}),new di(`Could not connect to ${n}`);this.metrics?.dialerEvents.increment({error:!0});try{o.close()}catch{}throw s}return this.log("connected %s",e),this.metrics?.dialerEvents.increment({connect:!0}),o}createListener(e){return Zv({logger:this.logger,events:this.components.events,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e.filter(t=>ro.exactMatch(t)||Xs.exactMatch(t))}dialFilter(e){return this.listenFilter(e)}};function eS(r={}){return e=>new w6(e,r)}var b6=Ln(th(),1);function tS(r,e){let t=e.map((n,o)=>({record:vn(n),index:o}));return t.sort((n,o)=>{let s=n.record.sequence,i=o.record.sequence;if(s>i)return-1;if(s<i)return 1;if(n.record.validityType===or.ValidityType.EOL&&o.record.validityType===or.ValidityType.EOL){let a=b6.default.fromString(n.record.validity).toDate(),c=b6.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 rS="6.0.20",nS="helia";var oS={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 H0(r={}){let e=`${nS}/${rS} ${o1()}`;return{privateKey:r.privateKey,dns:r.dns,nodeInfo:{userAgent:e},addresses:{listen:["/p2p-circuit","/webrtc"]},transports:[UE(),Qv(),jv(),eS()],connectionEncrypters:[sp()],streamMuxers:[vE(),yv()],peerDiscovery:[CE(oS)],services:{autoNAT:TE(),dcutr:KE(),delegatedRouting:ew(g3()),dht:fv({clientMode:!0,validators:{ipns:ch},selectors:{ipns:tS}}),identify:Lx(),identifyPush:Dx(),keychain:Z1(r.keychain),ping:Sv(),http:Tx()}}}async function sS(r){let e=r.libp2p??{};e.privateKey==null&&r.datastore!=null&&(e.privateKey=await n4(r.datastore,r.keychain));let t=H0(e);return t.datastore=t.datastore??r.datastore,await zw({...t,...e,start:!1})}async function E6(r={}){let e=r.datastore??new Js,t=r.blockstore??new vl,n;return Ww(r.libp2p)?n=r.libp2p:n=await sS({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e}),{...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[p3(),n3()],routers:r.routers??[C3(n),I3()],metrics:n.metrics}}async function dN(r={}){let e=await E6(r),t=new Df(e);return e.start!==!1&&await t.start(),t}return dS(fN);})();
103
+ a=ice-pwd:`+e+t)}catch{}return r}var g6=C("libp2p-webrtc-noise:");function zv(r,e,t){let n=r.trim().toLowerCase().replaceAll(":",""),o=C(n,"hex"),s=Wt(ze.code,o),i=h6.decode(p6(e)),a=g6.byteLength+s.bytes.byteLength+i.byteLength;return t==="server"?Oe([g6,i,s.bytes],a):Oe([g6,s.bytes,i],a)}var sN=L0?"iceconnectionstatechange":"connectionstatechange";function iN(r,e){return r.role==="server"}async function Gv(r,e,t,n){let o=r.createDataChannel("",{negotiated:!0,id:0});try{if(n.role==="client"){n.log.trace("client creating local offer");let u=await r.createOffer();n.log.trace("client created local offer %s",u.sdp);let f=m6(u,t);n.log.trace("client setting local offer %s",f.sdp),await r.setLocalDescription(f);let h=Hv(n.remoteAddr,t);n.log.trace("client setting server description %s",h.sdp),await r.setRemoteDescription(h)}else{let u=qv(n.remoteAddr,t);n.log.trace("server setting client %s %s",u.type,u.sdp),await r.setRemoteDescription(u),n.log.trace("server creating local answer");let f=await r.createAnswer();n.log.trace("server created local answer");let h=m6(f,t);n.log.trace("server setting local description %s",f.sdp),await r.setLocalDescription(h)}if(o.readyState!=="open"&&(n.log.trace("%s wait for handshake channel to open, starting status %s",n.role,o.readyState),await wo(o,"open",n)),n.log.trace("%s handshake channel opened",n.role),iN(n,r)){let u=r.remoteFingerprint()?.value??"";n.remoteAddr=n.remoteAddr.encapsulate(Vv(u))}let s=Kv(r.localDescription?.sdp);if(s==null)throw new ss("Could not get fingerprint from local description sdp");n.log.trace("%s performing noise handshake",n.role);let i=zv(s,n.remoteAddr,n.role),a=sp({prologueBytes:i})(n),c=wu({channel:o,direction:"outbound",isHandshake:!0,log:n.log,...n.dataChannel??{}}),l=bu({peerConnection:r,remoteAddr:n.remoteAddr,metrics:n.events,direction:n.role==="client"?"outbound":"inbound",log:n.logger.forComponent("libp2p:webrtc-direct:connection")});if(r.addEventListener(sN,()=>{switch(r.connectionState){case"failed":case"disconnected":case"closed":l.close().catch(u=>{n.log.error("error closing connection - %e",u),l.abort(u)});break;default:break}}),n.events?.increment({peer_connection:!0}),n.role==="client"){n.log.trace("%s secure inbound",n.role);let u=await a.secureInbound(c,{remotePeer:n.remotePeer,signal:n.signal,skipStreamMuxerNegotiation:!0});return n.log.trace("%s upgrade outbound",n.role),await n.upgrader.upgradeOutbound(l,{skipProtection:!0,skipEncryption:!0,remotePeer:u.remotePeer,muxerFactory:e,signal:n.signal})}n.log.trace("%s secure outbound",n.role);let d=await a.secureOutbound(c,{remotePeer:n.remotePeer,signal:n.signal,skipStreamMuxerNegotiation:!0});l.remoteAddr=l.remoteAddr.encapsulate(`/p2p/${d.remotePeer}`),n.log.trace("%s upgrade inbound",n.role),await n.upgrader.upgradeInbound(l,{skipProtection:!0,skipEncryption:!0,remotePeer:d.remotePeer,muxerFactory:e,signal:n.signal})}catch(s){throw o.close(),r.close(),s}}async function Yv(r,e,t={}){let n=t.certificate;n==null&&(n=await RTCPeerConnection.generateCertificate({name:"ECDSA",namedCurve:"P-256"}));let o=typeof t.rtcConfiguration=="function"?await t.rtcConfiguration():t.rtcConfiguration,s=new RTCPeerConnection({...o??{},certificates:[n]}),i=new os({peerConnection:s,metrics:t.events,dataChannelOptions:t.dataChannel});return{peerConnection:s,muxerFactory:i}}var V0=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"})})}[vo]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[me]=["@libp2p/transport"];async dial(e,t){this.log("dial %a",e),t.signal.throwIfAborted();let n,o=e.getComponents().findLast(c=>c.code===421)?.value;o!=null&&(n=Me(o));let s=Ov(),{peerConnection:i,muxerFactory:a}=await Yv("client",s,{rtcConfiguration:typeof this.init.rtcConfiguration=="function"?await this.init.rtcConfiguration():this.init.rtcConfiguration??{},dataChannel:this.init.dataChannel});try{return await Gv(i,a,s,{role:"client",log:this.log,logger:this.components.logger,events:this.metrics?.dialerEvents,signal:t.signal,remoteAddr:e,dataChannel:this.init.dataChannel,upgrader:t.upgrader,peerId:this.components.peerId,remotePeer:n,privateKey:this.components.privateKey})}catch(c){throw i.close(),c}}createListener(e){throw new M0("WebRTCDirectTransport.createListener")}listenFilter(e){return[]}dialFilter(e){return e.filter(gl.exactMatch)}};function jv(r){return e=>new V0(e,r)}function Xv(r){return e=>new K0(e,r)}var aN=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 cN(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:d}=aN(r),u=async(...h)=>{let p=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(p))return}catch(g){n(),i(g);return}c.push(p),t.count===c.length&&(n(),s(c))},f=(...h)=>{n(),i(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)d(h,u);for(let h of t.rejectionEvents)a.includes(h)||d(h,f)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&s(c)});if(o.cancel=n,typeof t.timeout=="number"){let s=qt(o,{milliseconds:t.timeout});return s.cancel=()=>{n(),s.clear()},s}return o}function Qv(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=cN(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}function Zv(){throw new Error("WebSocket Servers can not be created in the browser!")}var lN=1024*1024*4,uN=10,y6=class extends Oo{websocket;maxBufferedAmount;checkBufferedAmountTask;constructor(e){super(e),this.websocket=e.websocket,this.maxBufferedAmount=e.maxBufferedAmount??lN,this.checkBufferedAmountTask=oa(this.checkBufferedAmount.bind(this),e.bufferedAmountPollInterval??uN),this.websocket.addEventListener("close",t=>{if(this.log('closed - code %d, reason "%s", wasClean %s',t.code,t.reason,t.wasClean),this.checkBufferedAmountTask.stop(),!t.wasClean){this.onRemoteReset();return}this.onTransportClosed()},{once:!0}),this.websocket.addEventListener("message",t=>{try{let n;if(typeof t.data=="string")n=C(t.data);else if(t.data instanceof ArrayBuffer)n=new Uint8Array(t.data,0,t.data.byteLength);else{this.abort(new Error("Incorrect binary type"));return}this.onData(n)}catch(n){this.log.error("error receiving data - %e",n)}})}sendData(e){for(let n of e)this.websocket.send(n);let t=this.websocket.bufferedAmount<this.maxBufferedAmount;return t||this.checkBufferedAmountTask.start(),{sentBytes:e.byteLength,canSendMore:t}}sendReset(){this.websocket.close(1006)}async sendClose(e){this.websocket.close(),e?.signal?.throwIfAborted()}sendPause(){}sendResume(){}checkBufferedAmount(){this.log("buffered amount now %d",this.websocket.bufferedAmount),this.websocket.bufferedAmount===0&&(this.checkBufferedAmountTask.stop(),this.safeDispatchEvent("drain"))}};function Jv(r){return new y6(r)}var w6=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"})})}[vo]=!0;[Symbol.toStringTag]="@libp2p/websockets";[me]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=Jv({websocket:await this._connect(e,t),remoteAddr:e,metrics:this.metrics?.dialerEvents,direction:"outbound",log:this.components.logger.forComponent("libp2p:websockets:connection"),maxBufferedAmount:this.init.maxBufferedAmount,bufferedAmountPollInterval:this.init.bufferedAmountPollInterval});this.log("new outbound connection %s",n.remoteAddr);let o=await t.upgrader.upgradeOutbound(n,t);return this.log("outbound connection %s upgraded",n.remoteAddr),o}async _connect(e,t){t?.signal?.throwIfAborted();let n=qo(e);this.log("create websocket connection to %s",n);let o=new WebSocket(n);o.binaryType="arraybuffer";try{t.onProgress?.(new H("websockets:open-connection")),await Qv(o,"open",t)}catch(s){if(t.signal?.aborted)throw this.metrics?.dialerEvents.increment({abort:!0}),new di(`Could not connect to ${n}`);this.metrics?.dialerEvents.increment({error:!0});try{o.close()}catch{}throw s}return this.log("connected %s",e),this.metrics?.dialerEvents.increment({connect:!0}),o}createListener(e){return Zv({logger:this.logger,events:this.components.events,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e.filter(t=>ro.exactMatch(t)||Qs.exactMatch(t))}dialFilter(e){return this.listenFilter(e)}};function eS(r={}){return e=>new w6(e,r)}var b6=Ln(th(),1);function tS(r,e){let t=e.map((n,o)=>({record:vn(n),index:o}));return t.sort((n,o)=>{let s=n.record.sequence,i=o.record.sequence;if(s>i)return-1;if(s<i)return 1;if(n.record.validityType===or.ValidityType.EOL&&o.record.validityType===or.ValidityType.EOL){let a=b6.default.fromString(n.record.validity).toDate(),c=b6.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 rS="6.0.21",nS="helia";var oS={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 H0(r={}){let e=`${nS}/${rS} ${o1()}`;return{privateKey:r.privateKey,dns:r.dns,nodeInfo:{userAgent:e},addresses:{listen:["/p2p-circuit","/webrtc"]},transports:[UE(),Xv(),jv(),eS()],connectionEncrypters:[sp()],streamMuxers:[vE(),yv()],peerDiscovery:[_E(oS)],services:{autoNAT:TE(),dcutr:KE(),delegatedRouting:ew(g3()),dht:fv({clientMode:!0,validators:{ipns:ch},selectors:{ipns:tS}}),identify:Lx(),identifyPush:Dx(),keychain:Z1(r.keychain),ping:Sv(),http:Tx()}}}async function sS(r){let e=r.libp2p??{};e.privateKey==null&&r.datastore!=null&&(e.privateKey=await n4(r.datastore,r.keychain));let t=H0(e);return t.datastore=t.datastore??r.datastore,await Ww({...t,...e,start:!1})}async function E6(r={}){let e=r.datastore??new Js,t=r.blockstore??new vl,n;return zw(r.libp2p)?n=r.libp2p:n=await sS({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e}),{...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[p3(),n3()],routers:r.routers??[_3(n),I3()],metrics:n.metrics}}async function dN(r={}){let e=await E6(r),t=new Df(e);return e.start!==!1&&await t.start(),t}return dS(fN);})();
104
104
  /*! Bundled license information:
105
105
 
106
106
  pvtsutils/build/index.js: