@libp2p/kad-dht 15.0.2-32627c876 → 15.0.2-3577af88a

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.
Files changed (70) hide show
  1. package/dist/index.min.js +1 -1
  2. package/dist/index.min.js.map +4 -4
  3. package/dist/src/constants.d.ts +1 -1
  4. package/dist/src/constants.d.ts.map +1 -1
  5. package/dist/src/constants.js +1 -1
  6. package/dist/src/constants.js.map +1 -1
  7. package/dist/src/content-fetching/index.d.ts.map +1 -1
  8. package/dist/src/content-fetching/index.js +26 -6
  9. package/dist/src/content-fetching/index.js.map +1 -1
  10. package/dist/src/content-routing/index.d.ts.map +1 -1
  11. package/dist/src/content-routing/index.js +84 -38
  12. package/dist/src/content-routing/index.js.map +1 -1
  13. package/dist/src/index.d.ts +55 -10
  14. package/dist/src/index.d.ts.map +1 -1
  15. package/dist/src/index.js +1 -0
  16. package/dist/src/index.js.map +1 -1
  17. package/dist/src/kad-dht.d.ts +3 -1
  18. package/dist/src/kad-dht.d.ts.map +1 -1
  19. package/dist/src/kad-dht.js +12 -8
  20. package/dist/src/kad-dht.js.map +1 -1
  21. package/dist/src/network.d.ts +3 -5
  22. package/dist/src/network.d.ts.map +1 -1
  23. package/dist/src/network.js +10 -8
  24. package/dist/src/network.js.map +1 -1
  25. package/dist/src/peer-distance-list.d.ts +4 -3
  26. package/dist/src/peer-distance-list.d.ts.map +1 -1
  27. package/dist/src/peer-distance-list.js +9 -2
  28. package/dist/src/peer-distance-list.js.map +1 -1
  29. package/dist/src/peer-routing/index.d.ts +7 -5
  30. package/dist/src/peer-routing/index.d.ts.map +1 -1
  31. package/dist/src/peer-routing/index.js +57 -45
  32. package/dist/src/peer-routing/index.js.map +1 -1
  33. package/dist/src/providers.js +4 -4
  34. package/dist/src/providers.js.map +1 -1
  35. package/dist/src/query/events.d.ts +17 -6
  36. package/dist/src/query/events.d.ts.map +1 -1
  37. package/dist/src/query/events.js +18 -0
  38. package/dist/src/query/events.js.map +1 -1
  39. package/dist/src/query/manager.d.ts +0 -4
  40. package/dist/src/query/manager.d.ts.map +1 -1
  41. package/dist/src/query/manager.js +20 -9
  42. package/dist/src/query/manager.js.map +1 -1
  43. package/dist/src/query/query-path.d.ts +7 -11
  44. package/dist/src/query/query-path.d.ts.map +1 -1
  45. package/dist/src/query/query-path.js +67 -45
  46. package/dist/src/query/query-path.js.map +1 -1
  47. package/dist/src/query/types.d.ts +6 -5
  48. package/dist/src/query/types.d.ts.map +1 -1
  49. package/dist/src/rpc/handlers/get-providers.js +1 -1
  50. package/dist/src/rpc/handlers/get-providers.js.map +1 -1
  51. package/dist/src/utils.d.ts +1 -0
  52. package/dist/src/utils.d.ts.map +1 -1
  53. package/dist/src/utils.js +4 -0
  54. package/dist/src/utils.js.map +1 -1
  55. package/package.json +13 -12
  56. package/src/constants.ts +1 -1
  57. package/src/content-fetching/index.ts +26 -6
  58. package/src/content-routing/index.ts +91 -47
  59. package/src/index.ts +62 -10
  60. package/src/kad-dht.ts +12 -8
  61. package/src/network.ts +18 -12
  62. package/src/peer-distance-list.ts +13 -3
  63. package/src/peer-routing/index.ts +61 -48
  64. package/src/providers.ts +4 -4
  65. package/src/query/events.ts +41 -6
  66. package/src/query/manager.ts +23 -14
  67. package/src/query/query-path.ts +83 -65
  68. package/src/query/types.ts +7 -5
  69. package/src/rpc/handlers/get-providers.ts +1 -1
  70. package/src/utils.ts +9 -0
package/dist/index.min.js CHANGED
@@ -1,5 +1,5 @@
1
1
  (function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.Libp2PKadDht = factory()}(typeof self !== 'undefined' ? self : this, function () {
2
- "use strict";var Libp2PKadDht=(()=>{var W3=Object.create;var E1=Object.defineProperty;var Y3=Object.getOwnPropertyDescriptor;var Z3=Object.getOwnPropertyNames;var X3=Object.getPrototypeOf,J3=Object.prototype.hasOwnProperty;var C2=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Te=(r,e)=>{for(var t in e)E1(r,t,{get:e[t],enumerable:!0})},k2=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Z3(e))!J3.call(r,o)&&o!==t&&E1(r,o,{get:()=>e[o],enumerable:!(n=Y3(e,o))||n.enumerable});return r};var D2=(r,e,t)=>(t=r!=null?W3(X3(r)):{},k2(e||!r||!r.__esModule?E1(t,"default",{value:r,enumerable:!0}):t,r)),e4=r=>k2(E1({},"__esModule",{value:!0}),r);var V2=C2((V7,uo)=>{"use strict";var n4=Object.prototype.hasOwnProperty,Se="~";function Ur(){}Object.create&&(Ur.prototype=Object.create(null),new Ur().__proto__||(Se=!1));function o4(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function F2(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new o4(t,n||r,o),s=Se?Se+e:e;return r._events[s]?r._events[s].fn?r._events[s]=[r._events[s],i]:r._events[s].push(i):(r._events[s]=i,r._eventsCount++),r}function A1(r,e){--r._eventsCount===0?r._events=new Ur:delete r._events[e]}function be(){this._events=new Ur,this._eventsCount=0}be.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)n4.call(t,n)&&e.push(Se?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};be.prototype.listeners=function(e){var t=Se?Se+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,i=n.length,s=new Array(i);o<i;o++)s[o]=n[o].fn;return s};be.prototype.listenerCount=function(e){var t=Se?Se+e:e,n=this._events[t];return n?n.fn?1:n.length:0};be.prototype.emit=function(e,t,n,o,i,s){var c=Se?Se+e:e;if(!this._events[c])return!1;var a=this._events[c],l=arguments.length,u,f;if(a.fn){switch(a.once&&this.removeListener(e,a.fn,void 0,!0),l){case 1:return a.fn.call(a.context),!0;case 2:return a.fn.call(a.context,t),!0;case 3:return a.fn.call(a.context,t,n),!0;case 4:return a.fn.call(a.context,t,n,o),!0;case 5:return a.fn.call(a.context,t,n,o,i),!0;case 6:return a.fn.call(a.context,t,n,o,i,s),!0}for(f=1,u=new Array(l-1);f<l;f++)u[f-1]=arguments[f];a.fn.apply(a.context,u)}else{var h=a.length,p;for(f=0;f<h;f++)switch(a[f].once&&this.removeListener(e,a[f].fn,void 0,!0),l){case 1:a[f].fn.call(a[f].context);break;case 2:a[f].fn.call(a[f].context,t);break;case 3:a[f].fn.call(a[f].context,t,n);break;case 4:a[f].fn.call(a[f].context,t,n,o);break;default:if(!u)for(p=1,u=new Array(l-1);p<l;p++)u[p-1]=arguments[p];a[f].fn.apply(a[f].context,u)}}return!0};be.prototype.on=function(e,t,n){return F2(this,e,t,n,!1)};be.prototype.once=function(e,t,n){return F2(this,e,t,n,!0)};be.prototype.removeListener=function(e,t,n,o){var i=Se?Se+e:e;if(!this._events[i])return this;if(!t)return A1(this,i),this;var s=this._events[i];if(s.fn)s.fn===t&&(!o||s.once)&&(!n||s.context===n)&&A1(this,i);else{for(var c=0,a=[],l=s.length;c<l;c++)(s[c].fn!==t||o&&!s[c].once||n&&s[c].context!==n)&&a.push(s[c]);a.length?this._events[i]=a.length===1?a[0]:a:A1(this,i)}return this};be.prototype.removeAllListeners=function(e){var t;return e?(t=Se?Se+e:e,this._events[t]&&A1(this,t)):(this._events=new Ur,this._eventsCount=0),this};be.prototype.off=be.prototype.removeListener;be.prototype.addListener=be.prototype.on;be.prefixed=Se;be.EventEmitter=be;typeof uo<"u"&&(uo.exports=be)});var f3=C2(p1=>{(function(){var r,e,t,n,o,i,s,c;c=function(a){var l,u,f,h;return l=(a&255<<24)>>>24,u=(a&255<<16)>>>16,f=(a&65280)>>>8,h=a&255,[l,u,f,h].join(".")},s=function(a){var l,u,f,h,p,y;for(l=[],f=h=0;h<=3&&a.length!==0;f=++h){if(f>0){if(a[0]!==".")throw new Error("Invalid IP");a=a.substring(1)}y=e(a),p=y[0],u=y[1],a=a.substring(u),l.push(p)}if(a.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(a){return a.charCodeAt(0)},n=t("0"),i=t("a"),o=t("A"),e=function(a){var l,u,f,h,p;for(h=0,l=10,u="9",f=0,a.length>1&&a[f]==="0"&&(a[f+1]==="x"||a[f+1]==="X"?(f+=2,l=16):"0"<=a[f+1]&&a[f+1]<="9"&&(f++,l=8,u="7")),p=f;f<a.length;){if("0"<=a[f]&&a[f]<=u)h=h*l+(t(a[f])-n)>>>0;else if(l===16)if("a"<=a[f]&&a[f]<="f")h=h*l+(10+t(a[f])-i)>>>0;else if("A"<=a[f]&&a[f]<="F")h=h*l+(10+t(a[f])-o)>>>0;else break;else break;if(h>4294967295)throw new Error("too large");f++}if(f===p)throw new Error("empty octet");return[h,f]},r=function(){function a(l,u){var f,h,p,y;if(typeof l!="string")throw new Error("Missing `net' parameter");if(u||(y=l.split("/",2),l=y[0],u=y[1]),u||(u=32),typeof u=="string"&&u.indexOf(".")>-1){try{this.maskLong=s(u)}catch(g){throw f=g,new Error("Invalid mask: "+u)}for(h=p=32;p>=0;h=--p)if(this.maskLong===4294967295<<32-h>>>0){this.bitmask=h;break}}else if(u||u===0)this.bitmask=parseInt(u,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(s(l)&this.maskLong)>>>0}catch(g){throw f=g,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+u);this.size=Math.pow(2,32-this.bitmask),this.base=c(this.netLong),this.mask=c(this.maskLong),this.hostmask=c(~this.maskLong),this.first=this.bitmask<=30?c(this.netLong+1):this.base,this.last=this.bitmask<=30?c(this.netLong+this.size-2):c(this.netLong+this.size-1),this.broadcast=this.bitmask<=30?c(this.netLong+this.size-1):void 0}return a.prototype.contains=function(l){return typeof l=="string"&&(l.indexOf("/")>0||l.split(".").length!==4)&&(l=new a(l)),l instanceof a?this.contains(l.base)&&this.contains(l.broadcast||l.last):(s(l)&this.maskLong)>>>0===(this.netLong&this.maskLong)>>>0},a.prototype.next=function(l){return l==null&&(l=1),new a(c(this.netLong+this.size*l),this.mask)},a.prototype.forEach=function(l){var u,f,h;for(h=s(this.first),f=s(this.last),u=0;h<=f;)l(c(h),h,u),u++,h++},a.prototype.toString=function(){return this.base+"/"+this.bitmask},a}(),p1.ip2long=s,p1.long2ip=c,p1.Netmask=r}).call(p1)});var u7={};Te(u7,{EventTypes:()=>R2,MessageType:()=>z,Record:()=>le,kadDHT:()=>c7,passthroughMapper:()=>m3,removePrivateAddressesMapper:()=>gn,removePublicAddressesMapper:()=>p3});var N2=Symbol.for("@libp2p/content-routing");var B2=Symbol.for("@libp2p/peer-discovery");var co=Symbol.for("@libp2p/peer-id");var O2=Symbol.for("@libp2p/peer-routing");var M2="keep-alive";var rt=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}};var V=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},nt=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}};var Ve=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}};var v1=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},S1=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}};var _e=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}};var qt=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var Re=class extends EventTarget{#e=new Map;constructor(){super()}listenerCount(e){let t=this.#e.get(e);return t==null?0:t.length}addEventListener(e,t,n){super.addEventListener(e,t,n);let o=this.#e.get(e);o==null&&(o=[],this.#e.set(e,o)),o.push({callback:t,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let o=this.#e.get(e);o!=null&&(o=o.filter(({callback:i})=>i!==t),this.#e.set(e,o))}dispatchEvent(e){let t=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:o})=>!o),this.#e.set(e.type,n)),t}safeDispatchEvent(e,t={}){return this.dispatchEvent(new CustomEvent(e,t))}};function U2(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function Or(...r){let e=[];for(let t of r)U2(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 I1(...r){let e=[];for(let t of r)U2(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 K2=Symbol.for("@libp2p/service-capabilities"),q2=Symbol.for("@libp2p/service-dependencies");function t4(r){return r[Symbol.asyncIterator]!=null}function r4(r){if(t4(r))return(async()=>{for await(let e of r);})();for(let e of r);}var Mr=r4;var lo=D2(V2(),1);var Kr=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},fo=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},z2=r=>globalThis.DOMException===void 0?new fo(r):new DOMException(r),H2=r=>{let e=r.reason===void 0?z2("This operation was aborted."):r.reason;return e instanceof Error?e:z2(e)};function Ft(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,c,l=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(e.signal){let{signal:p}=e;p.aborted&&f(H2(p)),c=()=>{f(H2(p))},p.addEventListener("abort",c,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(u,f);return}let h=new Kr;s=i.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),(async()=>{try{u(await r)}catch(p){f(p)}})()}).finally(()=>{l.clear(),c&&e.signal&&e.signal.removeEventListener("abort",c)});return l.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},l}function ho(r,e,t){let n=0,o=r.length;for(;o>0;){let i=Math.trunc(o/2),s=n+i;t(r[s],e)<=0?(n=++s,o-=i+1):o=i}return n}var qr=class{#e=[];enqueue(e,t){t={priority:0,...t};let n={priority:t.priority,id:t.id,run:e};if(this.size===0||this.#e[this.size-1].priority>=t.priority){this.#e.push(n);return}let o=ho(this.#e,n,(i,s)=>s.priority-i.priority);this.#e.splice(o,0,n)}setPriority(e,t){let n=this.#e.findIndex(i=>i.id===e);if(n===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);let[o]=this.#e.splice(n,1);this.enqueue(o.run,{priority:t,id:e})}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(t=>t.priority===e.priority).map(t=>t.run)}get size(){return this.#e.length}};var sr=class extends lo.default{#e;#r;#i=0;#a;#c;#p=0;#n;#u;#t;#m;#o=0;#l;#s;#g;#b=1n;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:qr,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#r=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#a=e.intervalCap,this.#c=e.interval,this.#t=new e.queueClass,this.#m=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#g=e.throwOnTimeout===!0,this.#s=e.autoStart===!1}get#x(){return this.#r||this.#i<this.#a}get#E(){return this.#o<this.#l}#v(){this.#o--,this.#f(),this.emit("next")}#S(){this.#w(),this.#y(),this.#u=void 0}get#I(){let e=Date.now();if(this.#n===void 0){let t=this.#p-e;if(t<0)this.#i=this.#e?this.#o:0;else return this.#u===void 0&&(this.#u=setTimeout(()=>{this.#S()},t)),!0}return!1}#f(){if(this.#t.size===0)return this.#n&&clearInterval(this.#n),this.#n=void 0,this.emit("empty"),this.#o===0&&this.emit("idle"),!1;if(!this.#s){let e=!this.#I;if(this.#x&&this.#E){let t=this.#t.dequeue();return t?(this.emit("active"),t(),e&&this.#y(),!0):!1}}return!1}#y(){this.#r||this.#n!==void 0||(this.#n=setInterval(()=>{this.#w()},this.#c),this.#p=Date.now()+this.#c)}#w(){this.#i===0&&this.#o===0&&this.#n&&(clearInterval(this.#n),this.#n=void 0),this.#i=this.#e?this.#o:0,this.#h()}#h(){for(;this.#f(););}get concurrency(){return this.#l}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.#l=e,this.#h()}async#A(e){return new Promise((t,n)=>{e.addEventListener("abort",()=>{n(e.reason)},{once:!0})})}setPriority(e,t){this.#t.setPriority(e,t)}async add(e,t={}){return t.id??=(this.#b++).toString(),t={timeout:this.timeout,throwOnTimeout:this.#g,...t},new Promise((n,o)=>{this.#t.enqueue(async()=>{this.#o++,this.#i++;try{t.signal?.throwIfAborted();let i=e({signal:t.signal});t.timeout&&(i=Ft(Promise.resolve(i),{milliseconds:t.timeout})),t.signal&&(i=Promise.race([i,this.#A(t.signal)]));let s=await i;n(s),this.emit("completed",s)}catch(i){if(i instanceof Kr&&!t.throwOnTimeout){n();return}o(i),this.emit("error",i)}finally{this.#v()}},t),this.emit("add"),this.#f()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#s?(this.#s=!1,this.#h(),this):this}pause(){this.#s=!0}clear(){this.#t=new this.#m}async onEmpty(){this.#t.size!==0&&await this.#d("empty")}async onSizeLessThan(e){this.#t.size<e||await this.#d("next",()=>this.#t.size<e)}async onIdle(){this.#o===0&&this.#t.size===0||await this.#d("idle")}async#d(e,t){return new Promise(n=>{let o=()=>{t&&!t()||(this.off(e,o),n())};this.on(e,o)})}get size(){return this.#t.size}sizeBy(e){return this.#t.filter(e).length}get pending(){return this.#o}get isPaused(){return this.#s}};var xt={},ar=r=>{r.addEventListener("message",e=>{ar.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{ar.dispatchEvent("message",r,e)})};ar.addEventListener=(r,e)=>{xt[r]==null&&(xt[r]=[]),xt[r].push(e)};ar.removeEventListener=(r,e)=>{xt[r]!=null&&(xt[r]=xt[r].filter(t=>t===e))};ar.dispatchEvent=function(r,e,t){xt[r]!=null&&xt[r].forEach(n=>n(e,t))};var po=ar;var mo="lock:worker:request-read",go="lock:worker:release-read",yo="lock:master:grant-read",wo="lock:worker:request-write",bo="lock:worker:release-write",xo="lock:master:grant-write";var G2=(r=21)=>Math.random().toString().substring(2);var $2=(r,e,t,n,o)=>(i,s)=>{if(s.data.type!==t)return;let c={type:s.data.type,name:s.data.name,identifier:s.data.identifier};r.dispatchEvent(new MessageEvent(e,{data:{name:c.name,handler:async()=>{i.postMessage({type:o,name:c.name,identifier:c.identifier}),await new Promise(a=>{let l=u=>{if(u?.data==null)return;let f={type:u.data.type,name:u.data.name,identifier:u.data.identifier};f.type===n&&f.identifier===c.identifier&&(i.removeEventListener("message",l),a())};i.addEventListener("message",l)})}}}))},Q2=(r,e,t,n)=>async()=>{let o=G2();return globalThis.postMessage({type:e,identifier:o,name:r}),new Promise(i=>{let s=c=>{if(c?.data==null)return;let a={type:c.data.type,identifier:c.data.identifier};a.type===t&&a.identifier===o&&(globalThis.removeEventListener("message",s),i(()=>{globalThis.postMessage({type:n,identifier:o,name:r})}))};globalThis.addEventListener("message",s)})},i4={singleProcess:!1},j2=r=>{if(r=Object.assign({},i4,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return po.addEventListener("message",$2(t,"requestReadLock",mo,go,yo)),po.addEventListener("message",$2(t,"requestWriteLock",wo,bo,xo)),t}return{isWorker:!0,readLock:t=>Q2(t,mo,yo,go),writeLock:t=>Q2(t,wo,xo,bo)}};var Vt={},Et;async function Eo(r,e){let t,n=new Promise(o=>{t=o});return r.add(async()=>Ft((async()=>{await new Promise(o=>{t(()=>{o()})})})(),{milliseconds:e.timeout})),n}var s4=(r,e)=>{if(Et.isWorker===!0)return{readLock:Et.readLock(r,e),writeLock:Et.writeLock(r,e)};let t=new sr({concurrency:1}),n;return{async readLock(){if(n!=null)return Eo(n,e);n=new sr({concurrency:e.concurrency,autoStart:!1});let o=n,i=Eo(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),i},async writeLock(){return n=null,Eo(t,e)}}},a4={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function vo(r){let e=Object.assign({},a4,r);return Et==null&&(Et=j2(e),Et.isWorker!==!0&&(Et.addEventListener("requestReadLock",t=>{Vt[t.data.name]!=null&&Vt[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),Et.addEventListener("requestWriteLock",async t=>{Vt[t.data.name]!=null&&Vt[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),Vt[e.name]==null&&(Vt[e.name]=s4(e.name,e)),Vt[e.name]}function ae(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var cr=1e3,So=60*cr,P1=60*So,W2=36*P1,Y2="/ipfs/kad/1.0.0",Z2=48*P1;var X2=24*P1,J2=10,es=16384,ts=P1,fa=10*cr;var T1=20,ur=3,rs=5*So,ns=cr,os=5*cr,is=5*So,ss=30*cr,as=180*cr,Io=`${M2}-kad-dht`;function Le(r=0){return new Uint8Array(r)}function he(r=0){return new Uint8Array(r)}var c4=Math.pow(2,7),u4=Math.pow(2,14),l4=Math.pow(2,21),Ao=Math.pow(2,28),Po=Math.pow(2,35),To=Math.pow(2,42),_o=Math.pow(2,49),$=128,xe=127;function ce(r){if(r<c4)return 1;if(r<u4)return 2;if(r<l4)return 3;if(r<Ao)return 4;if(r<Po)return 5;if(r<To)return 6;if(r<_o)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Ro(r,e,t=0){switch(ce(r)){case 8:e[t++]=r&255|$,r/=128;case 7:e[t++]=r&255|$,r/=128;case 6:e[t++]=r&255|$,r/=128;case 5:e[t++]=r&255|$,r/=128;case 4:e[t++]=r&255|$,r>>>=7;case 3:e[t++]=r&255|$,r>>>=7;case 2:e[t++]=r&255|$,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function f4(r,e,t=0){switch(ce(r)){case 8:e.set(t++,r&255|$),r/=128;case 7:e.set(t++,r&255|$),r/=128;case 6:e.set(t++,r&255|$),r/=128;case 5:e.set(t++,r&255|$),r/=128;case 4:e.set(t++,r&255|$),r>>>=7;case 3:e.set(t++,r&255|$),r>>>=7;case 2:e.set(t++,r&255|$),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function Lo(r,e){let t=r[e],n=0;if(n+=t&xe,t<$||(t=r[e+1],n+=(t&xe)<<7,t<$)||(t=r[e+2],n+=(t&xe)<<14,t<$)||(t=r[e+3],n+=(t&xe)<<21,t<$)||(t=r[e+4],n+=(t&xe)*Ao,t<$)||(t=r[e+5],n+=(t&xe)*Po,t<$)||(t=r[e+6],n+=(t&xe)*To,t<$)||(t=r[e+7],n+=(t&xe)*_o,t<$))return n;throw new RangeError("Could not decode varint")}function h4(r,e){let t=r.get(e),n=0;if(n+=t&xe,t<$||(t=r.get(e+1),n+=(t&xe)<<7,t<$)||(t=r.get(e+2),n+=(t&xe)<<14,t<$)||(t=r.get(e+3),n+=(t&xe)<<21,t<$)||(t=r.get(e+4),n+=(t&xe)*Ao,t<$)||(t=r.get(e+5),n+=(t&xe)*Po,t<$)||(t=r.get(e+6),n+=(t&xe)*To,t<$)||(t=r.get(e+7),n+=(t&xe)*_o,t<$))return n;throw new RangeError("Could not decode varint")}function qe(r,e,t=0){return e==null&&(e=he(ce(r))),e instanceof Uint8Array?Ro(r,e,t):f4(r,e,t)}function Be(r,e=0){return r instanceof Uint8Array?Lo(r,e):h4(r,e)}var Co=new Float32Array([-0]),vt=new Uint8Array(Co.buffer);function cs(r,e,t){Co[0]=r,e[t]=vt[0],e[t+1]=vt[1],e[t+2]=vt[2],e[t+3]=vt[3]}function us(r,e){return vt[0]=r[e],vt[1]=r[e+1],vt[2]=r[e+2],vt[3]=r[e+3],Co[0]}var ko=new Float64Array([-0]),Ee=new Uint8Array(ko.buffer);function ls(r,e,t){ko[0]=r,e[t]=Ee[0],e[t+1]=Ee[1],e[t+2]=Ee[2],e[t+3]=Ee[3],e[t+4]=Ee[4],e[t+5]=Ee[5],e[t+6]=Ee[6],e[t+7]=Ee[7]}function fs(r,e){return Ee[0]=r[e],Ee[1]=r[e+1],Ee[2]=r[e+2],Ee[3]=r[e+3],Ee[4]=r[e+4],Ee[5]=r[e+5],Ee[6]=r[e+6],Ee[7]=r[e+7],ko[0]}var d4=BigInt(Number.MAX_SAFE_INTEGER),p4=BigInt(Number.MIN_SAFE_INTEGER),Oe=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 Ht;if(e<d4&&e>p4)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>hs&&(o=0n,++n>hs&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return Ht;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):Ht}},Ht=new Oe(0,0);Ht.toBigInt=function(){return 0n};Ht.zzEncode=Ht.zzDecode=function(){return this};Ht.length=function(){return 1};var hs=4294967296n;function ds(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 ps(r,e,t){if(t-e<1)return"";let o,i=[],s=0,c;for(;e<t;)c=r[e++],c<128?i[s++]=c:c>191&&c<224?i[s++]=(c&31)<<6|r[e++]&63:c>239&&c<365?(c=((c&7)<<18|(r[e++]&63)<<12|(r[e++]&63)<<6|r[e++]&63)-65536,i[s++]=55296+(c>>10),i[s++]=56320+(c&1023)):i[s++]=(c&15)<<12|(r[e++]&63)<<6|r[e++]&63,s>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,i)),s=0);return o!=null?(s>0&&o.push(String.fromCharCode.apply(String,i.slice(0,s))),o.join("")):String.fromCharCode.apply(String,i.slice(0,s))}function Do(r,e,t){let n=t,o,i;for(let s=0;s<r.length;++s)o=r.charCodeAt(s),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((i=r.charCodeAt(s+1))&64512)===56320?(o=65536+((o&1023)<<10)+(i&1023),++s,e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128);return t-n}function ze(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function _1(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var No=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,ze(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 ze(this,4);return _1(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw ze(this,4);return _1(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw ze(this,4);let e=us(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw ze(this,4);let e=fs(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 ze(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return ps(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw ze(this,e);this.pos+=e}else do if(this.pos>=this.len)throw ze(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 Oe(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 ze(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 ze(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 ze(this,8);let e=_1(this.buf,this.pos+=4),t=_1(this.buf,this.pos+=4);return new Oe(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=Lo(this.buf,this.pos);return this.pos+=ce(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 Bo(r){return new No(r instanceof Uint8Array?r:r.subarray())}function je(r,e,t){let n=Bo(r);return e.decode(n,void 0,t)}var qo={};Te(qo,{base10:()=>x4});var Sa=new Uint8Array(0);function gs(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 ot(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 ys(r){return new TextEncoder().encode(r)}function ws(r){return new TextDecoder().decode(r)}function m4(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var i=r.charAt(o),s=i.charCodeAt(0);if(t[s]!==255)throw new TypeError(i+" is ambiguous");t[s]=o}var c=r.length,a=r.charAt(0),l=Math.log(c)/Math.log(256),u=Math.log(256)/Math.log(c);function f(y){if(y instanceof Uint8Array||(ArrayBuffer.isView(y)?y=new Uint8Array(y.buffer,y.byteOffset,y.byteLength):Array.isArray(y)&&(y=Uint8Array.from(y))),!(y instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(y.length===0)return"";for(var g=0,E=0,L=0,K=y.length;L!==K&&y[L]===0;)L++,g++;for(var x=(K-L)*u+1>>>0,d=new Uint8Array(x);L!==K;){for(var b=y[L],P=0,T=x-1;(b!==0||P<E)&&T!==-1;T--,P++)b+=256*d[T]>>>0,d[T]=b%c>>>0,b=b/c>>>0;if(b!==0)throw new Error("Non-zero carry");E=P,L++}for(var R=x-E;R!==x&&d[R]===0;)R++;for(var B=a.repeat(g);R<x;++R)B+=r.charAt(d[R]);return B}function h(y){if(typeof y!="string")throw new TypeError("Expected String");if(y.length===0)return new Uint8Array;var g=0;if(y[g]!==" "){for(var E=0,L=0;y[g]===a;)E++,g++;for(var K=(y.length-g)*l+1>>>0,x=new Uint8Array(K);y[g];){var d=t[y.charCodeAt(g)];if(d===255)return;for(var b=0,P=K-1;(d!==0||b<L)&&P!==-1;P--,b++)d+=c*x[P]>>>0,x[P]=d%256>>>0,d=d/256>>>0;if(d!==0)throw new Error("Non-zero carry");L=b,g++}if(y[g]!==" "){for(var T=K-L;T!==K&&x[T]===0;)T++;for(var R=new Uint8Array(E+(K-T)),B=E;T!==K;)R[B++]=x[T++];return R}}}function p(y){var g=h(y);if(g)return g;throw new Error(`Non-${e} character`)}return{encode:f,decodeUnsafe:h,decode:p}}var g4=m4,y4=g4,xs=y4;var Oo=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")}},Mo=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 Es(this,e)}},Uo=class{decoders;constructor(e){this.decoders=e}or(e){return Es(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 Es(r,e){return new Uo({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var Ko=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 Oo(e,t,n),this.decoder=new Mo(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function lr({name:r,prefix:e,encode:t,decode:n}){return new Ko(r,e,t,n)}function St({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=xs(t,r);return lr({prefix:e,name:r,encode:n,decode:i=>ot(o(i))})}function w4(r,e,t,n){let o={};for(let u=0;u<e.length;++u)o[e[u]]=u;let i=r.length;for(;r[i-1]==="=";)--i;let s=new Uint8Array(i*t/8|0),c=0,a=0,l=0;for(let u=0;u<i;++u){let f=o[r[u]];if(f===void 0)throw new SyntaxError(`Non-${n} character`);a=a<<t|f,c+=t,c>=8&&(c-=8,s[l++]=255&a>>c)}if(c>=t||(255&a<<8-c)!==0)throw new SyntaxError("Unexpected end of data");return s}function b4(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,i="",s=0,c=0;for(let a=0;a<r.length;++a)for(c=c<<8|r[a],s+=8;s>t;)s-=t,i+=e[o&c>>s];if(s!==0&&(i+=e[o&c<<t-s]),n)for(;(i.length*t&7)!==0;)i+="=";return i}function re({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return lr({prefix:e,name:r,encode(o){return b4(o,n,t)},decode(o){return w4(o,n,t,r)}})}var x4=St({prefix:"9",name:"base10",alphabet:"0123456789"});var Fo={};Te(Fo,{base16:()=>E4,base16upper:()=>v4});var E4=re({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),v4=re({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var Vo={};Te(Vo,{base2:()=>S4});var S4=re({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var zo={};Te(zo,{base256emoji:()=>_4});var vs=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}"),I4=vs.reduce((r,e,t)=>(r[t]=e,r),[]),A4=vs.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function P4(r){return r.reduce((e,t)=>(e+=I4[t],e),"")}function T4(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=A4[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var _4=lr({prefix:"\u{1F680}",name:"base256emoji",encode:P4,decode:T4});var Ho={};Te(Ho,{base32:()=>it,base32hex:()=>k4,base32hexpad:()=>N4,base32hexpadupper:()=>B4,base32hexupper:()=>D4,base32pad:()=>L4,base32padupper:()=>C4,base32upper:()=>R4,base32z:()=>O4});var it=re({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),R4=re({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),L4=re({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),C4=re({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),k4=re({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),D4=re({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),N4=re({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),B4=re({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),O4=re({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var Go={};Te(Go,{base36:()=>Fr,base36upper:()=>M4});var Fr=St({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),M4=St({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var $o={};Te($o,{base58btc:()=>W,base58flickr:()=>U4});var W=St({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),U4=St({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var Qo={};Te(Qo,{base64:()=>K4,base64pad:()=>q4,base64url:()=>F4,base64urlpad:()=>V4});var K4=re({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),q4=re({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),F4=re({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),V4=re({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var jo={};Te(jo,{base8:()=>z4});var z4=re({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var Wo={};Te(Wo,{identity:()=>H4});var H4=lr({prefix:"\0",name:"identity",encode:r=>ws(r),decode:r=>ys(r)});var Ka=new TextEncoder,qa=new TextDecoder;var Ss=85;var Zo={};Te(Zo,{identity:()=>Ge});var $4=Ts,As=128,Q4=127,j4=~Q4,W4=Math.pow(2,31);function Ts(r,e,t){e=e||[],t=t||0;for(var n=t;r>=W4;)e[t++]=r&255|As,r/=128;for(;r&j4;)e[t++]=r&255|As,r>>>=7;return e[t]=r|0,Ts.bytes=t-n+1,e}var Y4=Yo,Z4=128,Ps=127;function Yo(r,n){var t=0,n=n||0,o=0,i=n,s,c=r.length;do{if(i>=c)throw Yo.bytes=0,new RangeError("Could not decode varint");s=r[i++],t+=o<28?(s&Ps)<<o:(s&Ps)*Math.pow(2,o),o+=7}while(s>=Z4);return Yo.bytes=i-n,t}var X4=Math.pow(2,7),J4=Math.pow(2,14),e5=Math.pow(2,21),t5=Math.pow(2,28),r5=Math.pow(2,35),n5=Math.pow(2,42),o5=Math.pow(2,49),i5=Math.pow(2,56),s5=Math.pow(2,63),a5=function(r){return r<X4?1:r<J4?2:r<e5?3:r<t5?4:r<r5?5:r<n5?6:r<o5?7:r<i5?8:r<s5?9:10},c5={encode:$4,decode:Y4,encodingLength:a5},u5=c5,Vr=u5;function zr(r,e=0){return[Vr.decode(r,e),Vr.decode.bytes]}function fr(r,e,t=0){return Vr.encode(r,e,t),e}function hr(r){return Vr.encodingLength(r)}function He(r,e){let t=e.byteLength,n=hr(r),o=n+hr(t),i=new Uint8Array(o+t);return fr(r,i,0),fr(t,i,n),i.set(e,o),new dr(r,t,e,i)}function ue(r){let e=ot(r),[t,n]=zr(e),[o,i]=zr(e.subarray(n)),s=e.subarray(n+i);if(s.byteLength!==o)throw new Error("Incorrect length");return new dr(t,o,s,e)}function _s(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&gs(r.bytes,t.bytes)}}var dr=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};var Rs=0,l5="identity",Ls=ot;function f5(r){return He(Rs,Ls(r))}var Ge={code:Rs,name:l5,encode:Ls,digest:f5};var ei={};Te(ei,{sha256:()=>st,sha512:()=>h5});function Jo({name:r,code:e,encode:t}){return new Xo(r,e,t)}var Xo=class{name;code;encode;constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?He(this.code,t):t.then(n=>He(this.code,n))}else throw Error("Unknown type, must be binary type")}};function ks(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var st=Jo({name:"sha2-256",code:18,encode:ks("SHA-256")}),h5=Jo({name:"sha2-512",code:19,encode:ks("SHA-512")});function Ds(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return p5(t,ti(r),e??W.encoder);default:return m5(t,ti(r),e??it.encoder)}}var Ns=new WeakMap;function ti(r){let e=Ns.get(r);if(e==null){let t=new Map;return Ns.set(r,t),t}return e}var Z=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!==Hr)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==g5)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=He(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&&_s(e.multihash,n.multihash)}toString(e){return Ds(this,e)}toJSON(){return{"/":Ds(this)}}link(){return this}[Symbol.toStringTag]="CID";[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof r)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:o,multihash:i,bytes:s}=t;return new r(n,o,i,s??Bs(n,o,i.bytes))}else if(t[y5]===!0){let{version:n,multihash:o,code:i}=t,s=ue(o);return r.create(n,i,s)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(t!==Hr)throw new Error(`Version 0 CID must use dag-pb (code: ${Hr}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=Bs(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,Hr,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=ot(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let i=o.subarray(t.multihashSize-t.digestSize),s=new dr(t.multihashCode,t.digestSize,i,o);return[t.version===0?r.createV0(s):r.createV1(t.codec,s),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[f,h]=zr(e.subarray(t));return t+=h,f},o=n(),i=Hr;if(o===18?(o=0,t=0):i=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let s=t,c=n(),a=n(),l=t+a,u=l-s;return{version:o,codec:i,multihashCode:c,digestSize:a,multihashSize:u,size:l}}static parse(e,t){let[n,o]=d5(e,t),i=r.decode(o);if(i.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return ti(i).set(n,e),i}};function d5(r,e){switch(r[0]){case"Q":{let t=e??W;return[W.prefix,t.decode(`${W.prefix}${r}`)]}case W.prefix:{let t=e??W;return[W.prefix,t.decode(r)]}case it.prefix:{let t=e??it;return[it.prefix,t.decode(r)]}case Fr.prefix:{let t=e??Fr;return[Fr.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 p5(r,e,t){let{prefix:n}=t;if(n!==W.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let i=t.encode(r).slice(1);return e.set(n,i),i}else return o}function m5(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let i=t.encode(r);return e.set(n,i),i}else return o}var Hr=112,g5=18;function Bs(r,e,t){let n=hr(r),o=n+hr(e),i=new Uint8Array(o+t.byteLength);return fr(r,i,0),fr(e,i,n),i.set(t,o),i}var y5=Symbol.for("@ipld/js-cid/CID");var Gr={...Wo,...Vo,...jo,...qo,...Fo,...Ho,...Go,...$o,...Qo,...zo},c9={...ei,...Zo};function Ms(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var Os=Ms("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),ri=Ms("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=he(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),w5={utf8:Os,"utf-8":Os,hex:Gr.base16,latin1:ri,ascii:ri,binary:ri,...Gr},L1=w5;function G(r,e="utf8"){let t=L1[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function ni(r){let e=r??8192,t=e>>>1,n,o=e;return function(s){if(s<1||s>t)return he(s);o+s>e&&(n=he(e),o=0);let c=n.subarray(o,o+=s);return(o&7)!==0&&(o=(o|7)+1),c}}var Gt=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function oi(){}var si=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},b5=ni();function x5(r){return globalThis.Buffer!=null?he(r):b5(r)}var Qr=class{len;head;tail;states;constructor(){this.len=0,this.head=new Gt(oi,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new Gt(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new ai((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(C1,10,Oe.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=Oe.fromBigInt(e);return this._push(C1,t.length(),t)}uint64Number(e){return this._push(Ro,ce(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=Oe.fromBigInt(e).zzEncode();return this._push(C1,t.length(),t)}sint64Number(e){let t=Oe.fromNumber(e).zzEncode();return this._push(C1,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(ii,1,e?1:0)}fixed32(e){return this._push($r,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=Oe.fromBigInt(e);return this._push($r,4,t.lo)._push($r,4,t.hi)}fixed64Number(e){let t=Oe.fromNumber(e);return this._push($r,4,t.lo)._push($r,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(cs,4,e)}double(e){return this._push(ls,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(ii,1,0):this.uint32(t)._push(v5,t,e)}string(e){let t=ds(e);return t!==0?this.uint32(t)._push(Do,t,e):this._push(ii,1,0)}fork(){return this.states=new si(this),this.head=this.tail=new Gt(oi,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 Gt(oi,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=x5(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function ii(r,e,t){e[t]=r&255}function E5(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var ai=class extends Gt{next;constructor(e,t){super(E5,e,t),this.next=void 0}};function C1(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 $r(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 v5(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(Qr.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(S5,e,r),this},Qr.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(I5,e,r),this});function S5(r,e,t){e.set(r,t)}function I5(r,e,t){r.length<40?Do(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(G(r),t)}function ci(){return new Qr}function We(r,e){let t=ci();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var pr;(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"})(pr||(pr={}));function k1(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function mr(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(i,s){let c=e(i);s.int32(c)},n=function(i){let s=i.int32();return e(s)};return k1("enum",pr.VARINT,t,n)}function Ye(r,e){return k1("message",pr.LENGTH_DELIMITED,r,e)}var gr=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"};var jr;(function(r){let e;r.codec=()=>(e==null&&(e=Ye((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&t.key.byteLength>0&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&t.value.byteLength>0&&(n.uint32(18),n.bytes(t.value)),t.timeReceived!=null&&t.timeReceived!==""&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={key:Le(0),value:Le(0),timeReceived:""},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let c=t.uint32();switch(c>>>3){case 1:{i.key=t.bytes();break}case 2:{i.value=t.bytes();break}case 5:{i.timeReceived=t.string();break}default:{t.skipType(c&7);break}}}return i})),e),r.encode=t=>We(t,r.codec()),r.decode=(t,n)=>je(t,r.codec(),n)})(jr||(jr={}));function Us(r){let e=r.getUTCFullYear(),t=String(r.getUTCMonth()+1).padStart(2,"0"),n=String(r.getUTCDate()).padStart(2,"0"),o=String(r.getUTCHours()).padStart(2,"0"),i=String(r.getUTCMinutes()).padStart(2,"0"),s=String(r.getUTCSeconds()).padStart(2,"0"),c=r.getUTCMilliseconds(),a=String(c*1e3*1e3).padStart(9,"0");return`${e}-${t}-${n}T${o}:${i}:${s}.${a}Z`}function Ks(r){let e=new RegExp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d+)Z"),t=String(r).trim().match(e);if(t==null)throw new Error("Invalid format");let n=parseInt(t[1],10),o=parseInt(t[2],10)-1,i=parseInt(t[3],10),s=parseInt(t[4],10),c=parseInt(t[5],10),a=parseInt(t[6],10),l=parseInt(t[7].slice(0,-6),10);return new Date(Date.UTC(n,o,i,s,c,a,l))}var le=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 jr.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:Us(this.timeReceived)}}static deserialize(e){let t=jr.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=Ks(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)}};function P5(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 qs=P5;function T5(r){return r[Symbol.asyncIterator]!=null}function _5(r,e){let t=0;if(T5(r))return async function*(){for await(let a of r)yield e(a,t++)}();let n=qs(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();let s=e(o,t++);if(typeof s.then=="function")return async function*(){yield await s;for await(let a of n)yield e(a,t++)}();let c=e;return function*(){yield s;for(let a of n)yield c(a,t++)}()}var It=_5;var D1=globalThis.CustomEvent??Event;async function*$t(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered??!1,o=new EventTarget,i=[],s=ae(),c=ae(),a=!1,l,u=!1;o.addEventListener("task-complete",()=>{c.resolve()}),Promise.resolve().then(async()=>{try{for await(let y of r){if(i.length===t&&(s=ae(),await s.promise),u)break;let g={done:!1};i.push(g),y().then(E=>{g.done=!0,g.ok=!0,g.value=E,o.dispatchEvent(new D1("task-complete"))},E=>{g.done=!0,g.err=E,o.dispatchEvent(new D1("task-complete"))})}a=!0,o.dispatchEvent(new D1("task-complete"))}catch(y){l=y,o.dispatchEvent(new D1("task-complete"))}});function f(){return n?i[0]?.done:!!i.find(y=>y.done)}function*h(){for(;i.length>0&&i[0].done;){let y=i[0];if(i.shift(),y.ok)yield y.value;else throw u=!0,s.resolve(),y.err;s.resolve()}}function*p(){for(;f();)for(let y=0;y<i.length;y++)if(i[y].done){let g=i[y];if(i.splice(y,1),y--,g.ok)yield g.value;else throw u=!0,s.resolve(),g.err;s.resolve()}}for(;;){if(f()||(c=ae(),await c.promise),l!=null||(n?yield*h():yield*p(),l!=null))throw l;if(a&&i.length===0)break}}var N1=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}},yr=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new N1(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 N1(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 ui=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function B1(r={}){return R5(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 R5(r,e){e=e??{};let t=e.onEnd,n=new yr,o,i,s,c=ae(),a=async()=>{try{return n.isEmpty()?s?{done:!0}:await new Promise((E,L)=>{i=K=>{i=null,n.push(K);try{E(r(n))}catch(x){L(x)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{c.resolve(),c=ae()})}},l=E=>i!=null?i(E):(n.push(E),o),u=E=>(n=new yr,i!=null?i({error:E}):(n.push({error:E}),o)),f=E=>{if(s)return o;if(e?.objectMode!==!0&&E?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:E})},h=E=>s?o:(s=!0,E!=null?u(E):l({done:!0})),p=()=>(n=new yr,h(),{done:!0}),y=E=>(h(E),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:a,return:p,throw:y,push:f,end:h,get readableLength(){return n.size},onEmpty:async E=>{let L=E?.signal;if(L?.throwIfAborted(),n.isEmpty())return;let K,x;L!=null&&(K=new Promise((d,b)=>{x=()=>{b(new ui)},L.addEventListener("abort",x)}));try{await Promise.race([c.promise,K])}finally{x!=null&&L!=null&&L?.removeEventListener("abort",x)}}},t==null)return o;let g=o;return o={[Symbol.asyncIterator](){return this},next(){return g.next()},throw(E){return g.throw(E),t!=null&&(t(E),t=void 0),{done:!0}},return(){return g.return(),t!=null&&(t(),t=void 0),{done:!0}},push:f,end(E){return g.end(E),t!=null&&(t(E),t=void 0),o},get readableLength(){return g.readableLength},onEmpty:E=>g.onEmpty(E)},o}var O1=class extends Error{type;code;constructor(e,t,n){super(e??"The operation was aborted"),this.type="aborted",this.name=n??"AbortError",this.code=t??"ABORT_ERR"}};async function at(r,e,t){if(e==null)return r;if(e.aborted)return r.catch(()=>{}),Promise.reject(new O1(t?.errorMessage,t?.errorCode,t?.errorName));let n,o=new O1(t?.errorMessage,t?.errorCode,t?.errorName);try{return await Promise.race([r,new Promise((i,s)=>{n=()=>{s(o)},e.addEventListener("abort",n)})])}finally{n!=null&&e.removeEventListener("abort",n)}}var li=class{readNext;haveNext;ended;nextResult;error;constructor(){this.ended=!1,this.readNext=ae(),this.haveNext=ae()}[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=ae(),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=ae(),await at(this.readNext.promise,t?.signal,t)}};function M1(){return new li}function L5(r){return r[Symbol.asyncIterator]!=null}async function C5(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*k5(r){let e=new AbortController,t=M1();C5(r,t,e.signal).catch(()=>{});try{yield*t}finally{e.abort()}}function*D5(r){for(let e of r)yield*e}function N5(...r){let e=[];for(let t of r)L5(t)||e.push(t);return e.length===r.length?D5(e):k5(r)}var U1=N5;function At(r,...e){if(r==null)throw new Error("Empty pipeline");if(fi(r)){let n=r;r=()=>n.source}else if(Vs(r)||Fs(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&fi(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++)fi(t[n])&&(t[n]=O5(t[n]));return B5(...t)}var B5=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},Fs=r=>r?.[Symbol.asyncIterator]!=null,Vs=r=>r?.[Symbol.iterator]!=null,fi=r=>r==null?!1:r.sink!=null&&r.source!=null,O5=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=B1({objectMode:!0});t.then(()=>{n.end()},s=>{n.end(s)});let o,i=r.source;if(Fs(i))o=async function*(){yield*i,n.end()};else if(Vs(i))o=function*(){yield*i,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return U1(n,o())}return r.source};function X(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}var Pt=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}};var K1=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},q1=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var zs;(function(r){let e;r.codec=()=>(e==null&&(e=Ye((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&(n.uint32(18),n.bytes(t.value)),t.author!=null&&(n.uint32(26),n.bytes(t.author)),t.signature!=null&&(n.uint32(34),n.bytes(t.signature)),t.timeReceived!=null&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let c=t.uint32();switch(c>>>3){case 1:{i.key=t.bytes();break}case 2:{i.value=t.bytes();break}case 3:{i.author=t.bytes();break}case 4:{i.signature=t.bytes();break}case 5:{i.timeReceived=t.string();break}default:{t.skipType(c&7);break}}}return i})),e),r.encode=t=>We(t,r.codec()),r.decode=(t,n)=>je(t,r.codec(),n)})(zs||(zs={}));var z;(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"})(z||(z={}));var F1;(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"})(F1||(F1={}));(function(r){r.codec=()=>mr(F1)})(z||(z={}));var br;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(br||(br={}));var hi;(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"})(hi||(hi={}));(function(r){r.codec=()=>mr(hi)})(br||(br={}));var wr;(function(r){let e;r.codec=()=>(e==null&&(e=Ye((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.multiaddrs!=null)for(let i of t.multiaddrs)n.uint32(18),n.bytes(i);t.connection!=null&&(n.uint32(24),br.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:Le(0),multiaddrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let c=t.uint32();switch(c>>>3){case 1:{i.id=t.bytes();break}case 2:{if(o.limits?.multiaddrs!=null&&i.multiaddrs.length===o.limits.multiaddrs)throw new gr('Decode error - map field "multiaddrs" had too many elements');i.multiaddrs.push(t.bytes());break}case 3:{i.connection=br.codec().decode(t);break}default:{t.skipType(c&7);break}}}return i})),e),r.encode=t=>We(t,r.codec()),r.decode=(t,n)=>je(t,r.codec(),n)})(wr||(wr={}));var ct;(function(r){let e;r.codec=()=>(e==null&&(e=Ye((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&F1[t.type]!==0&&(n.uint32(8),z.codec().encode(t.type,n)),t.clusterLevel!=null&&(n.uint32(80),n.int32(t.clusterLevel)),t.key!=null&&(n.uint32(18),n.bytes(t.key)),t.record!=null&&(n.uint32(26),n.bytes(t.record)),t.closer!=null)for(let i of t.closer)n.uint32(66),wr.codec().encode(i,n);if(t.providers!=null)for(let i of t.providers)n.uint32(74),wr.codec().encode(i,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={type:z.PUT_VALUE,closer:[],providers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let c=t.uint32();switch(c>>>3){case 1:{i.type=z.codec().decode(t);break}case 10:{i.clusterLevel=t.int32();break}case 2:{i.key=t.bytes();break}case 3:{i.record=t.bytes();break}case 8:{if(o.limits?.closer!=null&&i.closer.length===o.limits.closer)throw new gr('Decode error - map field "closer" had too many elements');i.closer.push(wr.codec().decode(t,t.uint32(),{limits:o.limits?.closer$}));break}case 9:{if(o.limits?.providers!=null&&i.providers.length===o.limits.providers)throw new gr('Decode error - map field "providers" had too many elements');i.providers.push(wr.codec().decode(t,t.uint32(),{limits:o.limits?.providers$}));break}default:{t.skipType(c&7);break}}}return i})),e),r.encode=t=>We(t,r.codec()),r.decode=(t,n)=>je(t,r.codec(),n)})(ct||(ct={}));function di(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 Wr(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 V1(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function Ue(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function pi(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function Yr(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function _(r,e="utf8"){let t=L1[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}function Hs(r,e,t){if(t.length===0)throw new V("No records given");let o=_(e).split("/");if(o.length<3)throw new V("Record key does not have a selector function");let i=r[o[1].toString()];if(i==null)throw new q1(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:i(e,t)}function M5(r,e){return 0}var Gs={pk:M5};function ve(r,e){e==null&&(e=r.reduce((o,i)=>o+i.length,0));let t=he(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}var Qs=Symbol.for("@achingbrain/uint8arraylist");function $s(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 z1(r){return!!r?.[Qs]}var te=class r{bufs;length;[Qs]=!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(z1(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(z1(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=$s(this.bufs,e);return t.buf[t.index]}set(e,t){let n=$s(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(z1(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 ve(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:ve(n,o)}sublist(e,t){let{bufs:n,length:o}=this._subList(e,t),i=new r;return i.length=o,i.bufs=[...n],i}_subList(e,t){if(e=e??0,t=t??this.length,e<0&&(e=this.length+e),t<0&&(t=this.length+t),e<0||t>this.length)throw new RangeError("index is out of bounds");if(e===t)return{bufs:[],length:0};if(e===0&&t===this.length)return{bufs:this.bufs,length:this.length};let n=[],o=0;for(let i=0;i<this.bufs.length;i++){let s=this.bufs[i],c=o,a=c+s.byteLength;if(o=a,e>=a)continue;let l=e>=c&&e<a,u=t>c&&t<=a;if(l&&u){if(e===c&&t===a){n.push(s);break}let f=e-c;n.push(s.subarray(f,f+(t-e)));break}if(l){if(e===0){n.push(s);continue}n.push(s.subarray(e-c));continue}if(u){if(t===a){n.push(s);break}n.push(s.subarray(0,t-c));break}n.push(s)}return{bufs:n,length:t-e}}indexOf(e,t=0){if(!z1(e)&&!(e instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let n=e instanceof Uint8Array?e:e.subarray();if(t=Number(t??0),isNaN(t)&&(t=0),t<0&&(t=this.length+t),t<0&&(t=0),e.length===0)return t>this.length?this.length:t;let o=n.byteLength;if(o===0)throw new TypeError("search must be at least 1 byte long");let i=256,s=new Int32Array(i);for(let f=0;f<i;f++)s[f]=-1;for(let f=0;f<o;f++)s[n[f]]=f;let c=s,a=this.byteLength-n.byteLength,l=n.byteLength-1,u;for(let f=t;f<=a;f+=u){u=0;for(let h=l;h>=0;h--){let p=this.get(f+h);if(n[h]!==p){u=Math.max(1,h-c[p]);break}}if(u===0)return f}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=he(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=Le(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=Le(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=Le(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=he(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=Le(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=Le(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=Le(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=Le(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=Le(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(!X(this.bufs[t],e.bufs[t]))return!1;return!0}static fromUint8Arrays(e,t){let n=new r;return n.bufs=e,t==null&&(t=e.reduce((o,i)=>o+i.byteLength,0)),n.length=t,n}};var K5=parseInt("11111",2),mi=parseInt("10000000",2),q5=parseInt("01111111",2),js={0:Zr,1:Zr,2:F5,3:H5,4:G5,5:z5,6:V5,16:Zr,22:Zr,48:Zr};function ut(r,e={offset:0}){let t=r[e.offset]&K5;if(e.offset++,js[t]!=null)return js[t](r,e);throw new Error("No decoder for tag "+t)}function Xr(r,e){let t=0;if((r[e.offset]&mi)===mi){let n=r[e.offset]&q5,o="0x";e.offset++;for(let i=0;i<n;i++,e.offset++)o+=r[e.offset].toString(16).padStart(2,"0");t=parseInt(o,16)}else t=r[e.offset],e.offset++;return t}function Zr(r,e){Xr(r,e);let t=[];for(;!(e.offset>=r.byteLength);){let n=ut(r,e);if(n===null)break;t.push(n)}return t}function F5(r,e){let t=Xr(r,e),n=e.offset,o=e.offset+t,i=[];for(let s=n;s<o;s++)s===n&&r[s]===0||i.push(r[s]);return e.offset+=t,Uint8Array.from(i)}function V5(r,e){let t=Xr(r,e),n=e.offset+t,o=r[e.offset];e.offset++;let i=0,s=0;o<40?(i=0,s=o):o<80?(i=1,s=o-40):(i=2,s=o-80);let c=`${i}.${s}`,a=[];for(;e.offset<n;){let l=r[e.offset];if(e.offset++,a.push(l&127),l<128){a.reverse();let u=0;for(let f=0;f<a.length;f++)u+=a[f]<<f*7;c+=`.${u}`,a=[]}}return c}function z5(r,e){return e.offset++,null}function H5(r,e){let t=Xr(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 G5(r,e){let t=Xr(r,e),n=r.subarray(e.offset,e.offset+t);return e.offset+=t,n}function $5(r){let e=r.toString(16);e.length%2===1&&(e="0"+e);let t=new te;for(let n=0;n<e.length;n+=2)t.append(Uint8Array.from([parseInt(`${e[n]}${e[n+1]}`,16)]));return t}function gi(r){if(r.byteLength<128)return Uint8Array.from([r.byteLength]);let e=$5(r.byteLength);return new te(Uint8Array.from([e.byteLength|mi]),e)}function Ce(r){let e=new te,t=128;return(r.subarray()[0]&t)===t&&e.append(Uint8Array.from([0])),e.append(r),new te(Uint8Array.from([2]),gi(e),e)}function H1(r){let e=Uint8Array.from([0]),t=new te(e,r);return new te(Uint8Array.from([3]),gi(t),t)}function Tt(r,e=48){let t=new te;for(let n of r)t.append(n);return new te(Uint8Array.from([e]),gi(t),t)}async function Ws(r,e,t){let n=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["verify"]);return crypto.subtle.verify({name:"ECDSA",hash:{name:"SHA-256"}},n,e,t.subarray())}var Q5=Uint8Array.from([6,8,42,134,72,206,61,3,1,7]),j5=Uint8Array.from([6,5,43,129,4,0,34]),W5=Uint8Array.from([6,5,43,129,4,0,35]),Y5={ext:!0,kty:"EC",crv:"P-256"},Z5={ext:!0,kty:"EC",crv:"P-384"},X5={ext:!0,kty:"EC",crv:"P-521"},yi=32,wi=48,bi=66;function xi(r){let e=ut(r);return Ys(e)}function Ys(r){let e=r[1][1][0],t=1,n,o;if(e.byteLength===yi*2+1)return n=_(e.subarray(t,t+yi),"base64url"),o=_(e.subarray(t+yi),"base64url"),new xr({...Y5,key_ops:["verify"],x:n,y:o});if(e.byteLength===wi*2+1)return n=_(e.subarray(t,t+wi),"base64url"),o=_(e.subarray(t+wi),"base64url"),new xr({...Z5,key_ops:["verify"],x:n,y:o});if(e.byteLength===bi*2+1)return n=_(e.subarray(t,t+bi),"base64url"),o=_(e.subarray(t+bi),"base64url"),new xr({...X5,key_ops:["verify"],x:n,y:o});throw new V(`coordinates were wrong length, got ${e.byteLength}, expected 65, 97 or 133`)}function Zs(r){return Tt([Ce(Uint8Array.from([1])),Tt([J5(r.crv)],160),Tt([H1(new te(Uint8Array.from([4]),G(r.x??"","base64url"),G(r.y??"","base64url")))],161)]).subarray()}function J5(r){if(r==="P-256")return Q5;if(r==="P-384")return j5;if(r==="P-521")return W5;throw new V(`Invalid curve ${r}`)}var xr=class{type="ECDSA";jwk;_raw;constructor(e){this.jwk=e}get raw(){return this._raw==null&&(this._raw=Zs(this.jwk)),this._raw}toMultihash(){return Ge.digest(_t(this))}toCID(){return Z.createV1(114,this.toMultihash())}toString(){return W.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:X(this.raw,e.raw)}async verify(e,t){return Ws(this.jwk,t,e)}};var Qt=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function e6(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function G1(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function jt(r,...e){if(!e6(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error("Uint8Array expected of length "+e+", got length="+r.length)}function Xs(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.createHasher");G1(r.outputLen),G1(r.blockLen)}function vr(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 Js(r,e){jt(r);let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}function lt(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function $1(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function $e(r,e){return r<<32-e|r>>>e}function e0(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}function Jr(r){return typeof r=="string"&&(r=e0(r)),jt(r),r}function Ei(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];jt(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}var Er=class{};function vi(r){let e=n=>r().update(Jr(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function Sr(r=32){if(Qt&&typeof Qt.getRandomValues=="function")return Qt.getRandomValues(new Uint8Array(r));if(Qt&&typeof Qt.randomBytes=="function")return Uint8Array.from(Qt.randomBytes(r));throw new Error("crypto.getRandomValues must be defined")}function t6(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),c=Number(t&i),a=n?4:0,l=n?0:4;r.setUint32(e+a,s,n),r.setUint32(e+l,c,n)}function t0(r,e,t){return r&e^~r&t}function r0(r,e,t){return r&e^r&t^e&t}var e1=class extends Er{constructor(e,t,n,o){super(),this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.buffer=new Uint8Array(e),this.view=$1(this.buffer)}update(e){vr(this),e=Jr(e),jt(e);let{view:t,buffer:n,blockLen:o}=this,i=e.length;for(let s=0;s<i;){let c=Math.min(o-this.pos,i-s);if(c===o){let a=$1(e);for(;o<=i-s;s+=o)this.process(a,s);continue}n.set(e.subarray(s,s+c),this.pos),this.pos+=c,s+=c,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){vr(this),Js(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;t[s++]=128,lt(this.buffer.subarray(s)),this.padOffset>o-s&&(this.process(n,0),s=0);for(let f=s;f<o;f++)t[f]=0;t6(n,o-8,BigInt(this.length*8),i),this.process(n,0);let c=$1(e),a=this.outputLen;if(a%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let l=a/4,u=this.get();if(l>u.length)throw new Error("_sha2: outputLen bigger than state");for(let f=0;f<l;f++)c.setUint32(4*f,u[f],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:s,pos:c}=this;return e.destroyed=s,e.finished=i,e.length=o,e.pos=c,o%t&&e.buffer.set(n),e}clone(){return this._cloneInto()}},ft=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var ge=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var Q1=BigInt(4294967295),n0=BigInt(32);function r6(r,e=!1){return e?{h:Number(r&Q1),l:Number(r>>n0&Q1)}:{h:Number(r>>n0&Q1)|0,l:Number(r&Q1)|0}}function o0(r,e=!1){let t=r.length,n=new Uint32Array(t),o=new Uint32Array(t);for(let i=0;i<t;i++){let{h:s,l:c}=r6(r[i],e);[n[i],o[i]]=[s,c]}return[n,o]}var Si=(r,e,t)=>r>>>t,Ii=(r,e,t)=>r<<32-t|e>>>t,Wt=(r,e,t)=>r>>>t|e<<32-t,Yt=(r,e,t)=>r<<32-t|e>>>t,t1=(r,e,t)=>r<<64-t|e>>>t-32,r1=(r,e,t)=>r>>>t-32|e<<64-t;function Ze(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var i0=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),s0=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,a0=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),c0=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,u0=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),l0=(r,e,t,n,o,i)=>e+t+n+o+i+(r/2**32|0)|0;var o6=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]),Rt=new Uint32Array(64),j1=class extends e1{constructor(e=32){super(64,e,8,!1),this.A=ft[0]|0,this.B=ft[1]|0,this.C=ft[2]|0,this.D=ft[3]|0,this.E=ft[4]|0,this.F=ft[5]|0,this.G=ft[6]|0,this.H=ft[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:c,H:a}=this;return[e,t,n,o,i,s,c,a]}set(e,t,n,o,i,s,c,a){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=c|0,this.H=a|0}process(e,t){for(let f=0;f<16;f++,t+=4)Rt[f]=e.getUint32(t,!1);for(let f=16;f<64;f++){let h=Rt[f-15],p=Rt[f-2],y=$e(h,7)^$e(h,18)^h>>>3,g=$e(p,17)^$e(p,19)^p>>>10;Rt[f]=g+Rt[f-7]+y+Rt[f-16]|0}let{A:n,B:o,C:i,D:s,E:c,F:a,G:l,H:u}=this;for(let f=0;f<64;f++){let h=$e(c,6)^$e(c,11)^$e(c,25),p=u+h+t0(c,a,l)+o6[f]+Rt[f]|0,g=($e(n,2)^$e(n,13)^$e(n,22))+r0(n,o,i)|0;u=l,l=a,a=c,c=s+p|0,s=i,i=o,o=n,n=p+g|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,c=c+this.E|0,a=a+this.F|0,l=l+this.G|0,u=u+this.H|0,this.set(n,o,i,s,c,a,l,u)}roundClean(){lt(Rt)}destroy(){this.set(0,0,0,0,0,0,0,0),lt(this.buffer)}};var f0=o0(["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))),i6=f0[0],s6=f0[1],Lt=new Uint32Array(80),Ct=new Uint32Array(80),Ai=class extends e1{constructor(e=64){super(128,e,16,!1),this.Ah=ge[0]|0,this.Al=ge[1]|0,this.Bh=ge[2]|0,this.Bl=ge[3]|0,this.Ch=ge[4]|0,this.Cl=ge[5]|0,this.Dh=ge[6]|0,this.Dl=ge[7]|0,this.Eh=ge[8]|0,this.El=ge[9]|0,this.Fh=ge[10]|0,this.Fl=ge[11]|0,this.Gh=ge[12]|0,this.Gl=ge[13]|0,this.Hh=ge[14]|0,this.Hl=ge[15]|0}get(){let{Ah:e,Al:t,Bh:n,Bl:o,Ch:i,Cl:s,Dh:c,Dl:a,Eh:l,El:u,Fh:f,Fl:h,Gh:p,Gl:y,Hh:g,Hl:E}=this;return[e,t,n,o,i,s,c,a,l,u,f,h,p,y,g,E]}set(e,t,n,o,i,s,c,a,l,u,f,h,p,y,g,E){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=i|0,this.Cl=s|0,this.Dh=c|0,this.Dl=a|0,this.Eh=l|0,this.El=u|0,this.Fh=f|0,this.Fl=h|0,this.Gh=p|0,this.Gl=y|0,this.Hh=g|0,this.Hl=E|0}process(e,t){for(let x=0;x<16;x++,t+=4)Lt[x]=e.getUint32(t),Ct[x]=e.getUint32(t+=4);for(let x=16;x<80;x++){let d=Lt[x-15]|0,b=Ct[x-15]|0,P=Wt(d,b,1)^Wt(d,b,8)^Si(d,b,7),T=Yt(d,b,1)^Yt(d,b,8)^Ii(d,b,7),R=Lt[x-2]|0,B=Ct[x-2]|0,U=Wt(R,B,19)^t1(R,B,61)^Si(R,B,6),k=Yt(R,B,19)^r1(R,B,61)^Ii(R,B,6),O=a0(T,k,Ct[x-7],Ct[x-16]),N=c0(O,P,U,Lt[x-7],Lt[x-16]);Lt[x]=N|0,Ct[x]=O|0}let{Ah:n,Al:o,Bh:i,Bl:s,Ch:c,Cl:a,Dh:l,Dl:u,Eh:f,El:h,Fh:p,Fl:y,Gh:g,Gl:E,Hh:L,Hl:K}=this;for(let x=0;x<80;x++){let d=Wt(f,h,14)^Wt(f,h,18)^t1(f,h,41),b=Yt(f,h,14)^Yt(f,h,18)^r1(f,h,41),P=f&p^~f&g,T=h&y^~h&E,R=u0(K,b,T,s6[x],Ct[x]),B=l0(R,L,d,P,i6[x],Lt[x]),U=R|0,k=Wt(n,o,28)^t1(n,o,34)^t1(n,o,39),O=Yt(n,o,28)^r1(n,o,34)^r1(n,o,39),N=n&i^n&c^i&c,ie=o&s^o&a^s&a;L=g|0,K=E|0,g=p|0,E=y|0,p=f|0,y=h|0,{h:f,l:h}=Ze(l|0,u|0,B|0,U|0),l=c|0,u=a|0,c=i|0,a=s|0,i=n|0,s=o|0;let I=i0(U,O,ie);n=s0(I,B,k,N),o=I|0}({h:n,l:o}=Ze(this.Ah|0,this.Al|0,n|0,o|0)),{h:i,l:s}=Ze(this.Bh|0,this.Bl|0,i|0,s|0),{h:c,l:a}=Ze(this.Ch|0,this.Cl|0,c|0,a|0),{h:l,l:u}=Ze(this.Dh|0,this.Dl|0,l|0,u|0),{h:f,l:h}=Ze(this.Eh|0,this.El|0,f|0,h|0),{h:p,l:y}=Ze(this.Fh|0,this.Fl|0,p|0,y|0),{h:g,l:E}=Ze(this.Gh|0,this.Gl|0,g|0,E|0),{h:L,l:K}=Ze(this.Hh|0,this.Hl|0,L|0,K|0),this.set(n,o,i,s,c,a,l,u,f,h,p,y,g,E,L,K)}roundClean(){lt(Lt,Ct)}destroy(){lt(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var W1=vi(()=>new j1);var h0=vi(()=>new Ai);var Ri=BigInt(0),_i=BigInt(1);function Ir(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function Li(r){if(!Ir(r))throw new Error("Uint8Array expected")}function Xe(r,e){if(typeof e!="boolean")throw new Error(r+" boolean expected, got "+e)}function n1(r){let e=r.toString(16);return e.length&1?"0"+e:e}function m0(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return r===""?Ri:BigInt("0x"+r)}var g0=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",a6=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function kt(r){if(Li(r),g0)return r.toHex();let e="";for(let t=0;t<r.length;t++)e+=a6[r[t]];return e}var ht={_0:48,_9:57,A:65,F:70,a:97,f:102};function d0(r){if(r>=ht._0&&r<=ht._9)return r-ht._0;if(r>=ht.A&&r<=ht.F)return r-(ht.A-10);if(r>=ht.a&&r<=ht.f)return r-(ht.a-10)}function o1(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);if(g0)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,i=0;o<t;o++,i+=2){let s=d0(r.charCodeAt(i)),c=d0(r.charCodeAt(i+1));if(s===void 0||c===void 0){let a=r[i]+r[i+1];throw new Error('hex string expected, got non-hex character "'+a+'" at index '+i)}n[o]=s*16+c}return n}function dt(r){return m0(kt(r))}function Zt(r){return Li(r),m0(kt(Uint8Array.from(r).reverse()))}function Xt(r,e){return o1(r.toString(16).padStart(e*2,"0"))}function Ar(r,e){return Xt(r,e).reverse()}function J(r,e,t){let n;if(typeof e=="string")try{n=o1(e)}catch(i){throw new Error(r+" must be hex string or Uint8Array, cause: "+i)}else if(Ir(e))n=Uint8Array.from(e);else throw new Error(r+" must be hex string or Uint8Array");let o=n.length;if(typeof t=="number"&&o!==t)throw new Error(r+" of length "+t+" expected, got "+o);return n}function Dt(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];Li(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}var Pi=r=>typeof r=="bigint"&&Ri<=r;function Y1(r,e,t){return Pi(r)&&Pi(e)&&Pi(t)&&e<=r&&r<t}function Ke(r,e,t,n){if(!Y1(e,t,n))throw new Error("expected valid "+r+": "+t+" <= n < "+n+", got "+e)}function y0(r){let e;for(e=0;r>Ri;r>>=_i,e+=1);return e}var Jt=r=>(_i<<BigInt(r))-_i,Ti=r=>new Uint8Array(r),p0=r=>Uint8Array.from(r);function w0(r,e,t){if(typeof r!="number"||r<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof t!="function")throw new Error("hmacFn must be a function");let n=Ti(r),o=Ti(r),i=0,s=()=>{n.fill(1),o.fill(0),i=0},c=(...f)=>t(o,n,...f),a=(f=Ti(0))=>{o=c(p0([0]),f),n=c(),f.length!==0&&(o=c(p0([1]),f),n=c())},l=()=>{if(i++>=1e3)throw new Error("drbg: tried 1000 values");let f=0,h=[];for(;f<e;){n=c();let p=n.slice();h.push(p),f+=n.length}return Dt(...h)};return(f,h)=>{s(),a(f);let p;for(;!(p=h(l()));)a();return s(),p}}var c6={bigint:r=>typeof r=="bigint",function:r=>typeof r=="function",boolean:r=>typeof r=="boolean",string:r=>typeof r=="string",stringOrUint8Array:r=>typeof r=="string"||Ir(r),isSafeInteger:r=>Number.isSafeInteger(r),array:r=>Array.isArray(r),field:(r,e)=>e.Fp.isValid(r),hash:r=>typeof r=="function"&&Number.isSafeInteger(r.outputLen)};function pt(r,e,t={}){let n=(o,i,s)=>{let c=c6[i];if(typeof c!="function")throw new Error("invalid validator function");let a=r[o];if(!(s&&a===void 0)&&!c(a,r))throw new Error("param "+String(o)+" is invalid. Expected "+i+", got "+a)};for(let[o,i]of Object.entries(e))n(o,i,!1);for(let[o,i]of Object.entries(t))n(o,i,!0);return r}function Pr(r){let e=new WeakMap;return(t,...n)=>{let o=e.get(t);if(o!==void 0)return o;let i=r(t,...n);return e.set(t,i),i}}var Ie=BigInt(0),de=BigInt(1),er=BigInt(2),u6=BigInt(3),x0=BigInt(4),E0=BigInt(5),v0=BigInt(8);function Y(r,e){let t=r%e;return t>=Ie?t:e+t}function ee(r,e,t){let n=r;for(;e-- >Ie;)n*=n,n%=t;return n}function Z1(r,e){if(r===Ie)throw new Error("invert: expected non-zero number");if(e<=Ie)throw new Error("invert: expected positive modulus, got "+e);let t=Y(r,e),n=e,o=Ie,i=de,s=de,c=Ie;for(;t!==Ie;){let l=n/t,u=n%t,f=o-s*l,h=i-c*l;n=t,t=u,o=s,i=c,s=f,c=h}if(n!==de)throw new Error("invert: does not exist");return Y(o,e)}function S0(r,e){let t=(r.ORDER+de)/x0,n=r.pow(e,t);if(!r.eql(r.sqr(n),e))throw new Error("Cannot find square root");return n}function l6(r,e){let t=(r.ORDER-E0)/v0,n=r.mul(e,er),o=r.pow(n,t),i=r.mul(e,o),s=r.mul(r.mul(i,er),o),c=r.mul(i,r.sub(s,r.ONE));if(!r.eql(r.sqr(c),e))throw new Error("Cannot find square root");return c}function f6(r){if(r<BigInt(3))throw new Error("sqrt is not defined for small field");let e=r-de,t=0;for(;e%er===Ie;)e/=er,t++;let n=er,o=mt(r);for(;b0(o,n)===1;)if(n++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(t===1)return S0;let i=o.pow(n,e),s=(e+de)/er;return function(a,l){if(a.is0(l))return l;if(b0(a,l)!==1)throw new Error("Cannot find square root");let u=t,f=a.mul(a.ONE,i),h=a.pow(l,e),p=a.pow(l,s);for(;!a.eql(h,a.ONE);){if(a.is0(h))return a.ZERO;let y=1,g=a.sqr(h);for(;!a.eql(g,a.ONE);)if(y++,g=a.sqr(g),y===u)throw new Error("Cannot find square root");let E=de<<BigInt(u-y-1),L=a.pow(f,E);u=y,f=a.sqr(L),h=a.mul(h,f),p=a.mul(p,L)}return p}}function h6(r){return r%x0===u6?S0:r%v0===E0?l6:f6(r)}var I0=(r,e)=>(Y(r,e)&de)===de,d6=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Ci(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=d6.reduce((n,o)=>(n[o]="function",n),e);return pt(r,t)}function p6(r,e,t){if(t<Ie)throw new Error("invalid exponent, negatives unsupported");if(t===Ie)return r.ONE;if(t===de)return e;let n=r.ONE,o=e;for(;t>Ie;)t&de&&(n=r.mul(n,o)),o=r.sqr(o),t>>=de;return n}function Tr(r,e,t=!1){let n=new Array(e.length).fill(t?r.ZERO:void 0),o=e.reduce((s,c,a)=>r.is0(c)?s:(n[a]=s,r.mul(s,c)),r.ONE),i=r.inv(o);return e.reduceRight((s,c,a)=>r.is0(c)?s:(n[a]=r.mul(s,n[a]),r.mul(s,c)),i),n}function b0(r,e){let t=(r.ORDER-de)/er,n=r.pow(e,t),o=r.eql(n,r.ONE),i=r.eql(n,r.ZERO),s=r.eql(n,r.neg(r.ONE));if(!o&&!i&&!s)throw new Error("invalid Legendre symbol result");return o?1:i?0:-1}function ki(r,e){e!==void 0&&G1(e);let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function mt(r,e,t=!1,n={}){if(r<=Ie)throw new Error("invalid field: expected ORDER > 0, got "+r);let{nBitLength:o,nByteLength:i}=ki(r,e);if(i>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");let s,c=Object.freeze({ORDER:r,isLE:t,BITS:o,BYTES:i,MASK:Jt(o),ZERO:Ie,ONE:de,create:a=>Y(a,r),isValid:a=>{if(typeof a!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof a);return Ie<=a&&a<r},is0:a=>a===Ie,isOdd:a=>(a&de)===de,neg:a=>Y(-a,r),eql:(a,l)=>a===l,sqr:a=>Y(a*a,r),add:(a,l)=>Y(a+l,r),sub:(a,l)=>Y(a-l,r),mul:(a,l)=>Y(a*l,r),pow:(a,l)=>p6(c,a,l),div:(a,l)=>Y(a*Z1(l,r),r),sqrN:a=>a*a,addN:(a,l)=>a+l,subN:(a,l)=>a-l,mulN:(a,l)=>a*l,inv:a=>Z1(a,r),sqrt:n.sqrt||(a=>(s||(s=h6(r)),s(c,a))),toBytes:a=>t?Ar(a,i):Xt(a,i),fromBytes:a=>{if(a.length!==i)throw new Error("Field.fromBytes: expected "+i+" bytes, got "+a.length);return t?Zt(a):dt(a)},invertBatch:a=>Tr(c,a),cmov:(a,l,u)=>u?l:a});return Object.freeze(c)}function A0(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 Di(r){let e=A0(r);return e+Math.ceil(e/2)}function P0(r,e,t=!1){let n=r.length,o=A0(e),i=Di(e);if(n<16||n<i||n>1024)throw new Error("expected "+i+"-1024 bytes of input, got "+n);let s=t?Zt(r):dt(r),c=Y(s,e-de)+de;return t?Ar(c,o):Xt(c,o)}var T0=BigInt(0),Ui=BigInt(1);function Ni(r,e){let t=e.negate();return r?t:e}function R0(r,e){if(!Number.isSafeInteger(r)||r<=0||r>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+r)}function Bi(r,e){R0(r,e);let t=Math.ceil(e/r)+1,n=2**(r-1),o=2**r,i=Jt(r),s=BigInt(r);return{windows:t,windowSize:n,mask:i,maxNumber:o,shiftBy:s}}function _0(r,e,t){let{windowSize:n,mask:o,maxNumber:i,shiftBy:s}=t,c=Number(r&o),a=r>>s;c>n&&(c-=i,a+=Ui);let l=e*n,u=l+Math.abs(c)-1,f=c===0,h=c<0,p=e%2!==0;return{nextN:a,offset:u,isZero:f,isNeg:h,isNegF:p,offsetF:l}}function m6(r,e){if(!Array.isArray(r))throw new Error("array expected");r.forEach((t,n)=>{if(!(t instanceof e))throw new Error("invalid point at index "+n)})}function g6(r,e){if(!Array.isArray(r))throw new Error("array of scalars expected");r.forEach((t,n)=>{if(!e.isValid(t))throw new Error("invalid scalar at index "+n)})}var Oi=new WeakMap,L0=new WeakMap;function Mi(r){return L0.get(r)||1}function X1(r,e){return{constTimeNegate:Ni,hasPrecomputes(t){return Mi(t)!==1},unsafeLadder(t,n,o=r.ZERO){let i=t;for(;n>T0;)n&Ui&&(o=o.add(i)),i=i.double(),n>>=Ui;return o},precomputeWindow(t,n){let{windows:o,windowSize:i}=Bi(n,e),s=[],c=t,a=c;for(let l=0;l<o;l++){a=c,s.push(a);for(let u=1;u<i;u++)a=a.add(c),s.push(a);c=a.double()}return s},wNAF(t,n,o){let i=r.ZERO,s=r.BASE,c=Bi(t,e);for(let a=0;a<c.windows;a++){let{nextN:l,offset:u,isZero:f,isNeg:h,isNegF:p,offsetF:y}=_0(o,a,c);o=l,f?s=s.add(Ni(p,n[y])):i=i.add(Ni(h,n[u]))}return{p:i,f:s}},wNAFUnsafe(t,n,o,i=r.ZERO){let s=Bi(t,e);for(let c=0;c<s.windows&&o!==T0;c++){let{nextN:a,offset:l,isZero:u,isNeg:f}=_0(o,c,s);if(o=a,!u){let h=n[l];i=i.add(f?h.negate():h)}}return i},getPrecomputes(t,n,o){let i=Oi.get(n);return i||(i=this.precomputeWindow(n,t),t!==1&&Oi.set(n,o(i))),i},wNAFCached(t,n,o){let i=Mi(t);return this.wNAF(i,this.getPrecomputes(i,t,o),n)},wNAFCachedUnsafe(t,n,o,i){let s=Mi(t);return s===1?this.unsafeLadder(t,n,i):this.wNAFUnsafe(s,this.getPrecomputes(s,t,o),n,i)},setWindowSize(t,n){R0(n,e),L0.set(t,n),Oi.delete(t)}}}function J1(r,e,t,n){m6(t,r),g6(n,e);let o=t.length,i=n.length;if(o!==i)throw new Error("arrays of points and scalars must have equal length");let s=r.ZERO,c=y0(BigInt(o)),a=1;c>12?a=c-3:c>4?a=c-2:c>0&&(a=2);let l=Jt(a),u=new Array(Number(l)+1).fill(s),f=Math.floor((e.BITS-1)/a)*a,h=s;for(let p=f;p>=0;p-=a){u.fill(s);for(let g=0;g<i;g++){let E=n[g],L=Number(E>>BigInt(p)&l);u[L]=u[L].add(t[g])}let y=s;for(let g=u.length-1,E=s;g>0;g--)E=E.add(u[g]),y=y.add(E);if(h=h.add(y),p!==0)for(let g=0;g<a;g++)h=h.double()}return h}function i1(r){return Ci(r.Fp),pt(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...ki(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Je=BigInt(0),Ae=BigInt(1),C0=BigInt(2),y6=BigInt(8),w6={zip215:!0};function b6(r){let e=i1(r);return pt(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function k0(r){let e=b6(r),{Fp:t,n,prehash:o,hash:i,randomBytes:s,nByteLength:c,h:a}=e,l=C0<<BigInt(c*8)-Ae,u=t.create,f=mt(e.n,e.nBitLength);function h(v,m){let w=t.sqr(v),A=t.sqr(m),D=t.add(t.mul(e.a,w),A),M=t.add(t.ONE,t.mul(e.d,t.mul(w,A)));return t.eql(D,M)}if(!h(e.Gx,e.Gy))throw new Error("bad curve params: generator point");let p=e.uvRatio||((v,m)=>{try{return{isValid:!0,value:t.sqrt(v*t.inv(m))}}catch{return{isValid:!1,value:Je}}}),y=e.adjustScalarBytes||(v=>v),g=e.domain||((v,m,w)=>{if(Xe("phflag",w),m.length||w)throw new Error("Contexts/pre-hash are not supported");return v});function E(v,m,w=!1){let A=w?Ae:Je;Ke("coordinate "+v,m,A,l)}function L(v){if(!(v instanceof d))throw new Error("ExtendedPoint expected")}let K=Pr((v,m)=>{let{ex:w,ey:A,ez:D}=v,M=v.is0();m==null&&(m=M?y6:t.inv(D));let q=u(w*m),F=u(A*m),H=u(D*m);if(M)return{x:Je,y:Ae};if(H!==Ae)throw new Error("invZ was invalid");return{x:q,y:F}}),x=Pr(v=>{let{a:m,d:w}=e;if(v.is0())throw new Error("bad point: ZERO");let{ex:A,ey:D,ez:M,et:q}=v,F=u(A*A),H=u(D*D),Q=u(M*M),se=u(Q*Q),ne=u(F*m),me=u(Q*u(ne+H)),Pe=u(se+u(w*u(F*H)));if(me!==Pe)throw new Error("bad point: equation left != right (1)");let fe=u(A*D),we=u(M*q);if(fe!==we)throw new Error("bad point: equation left != right (2)");return!0});class d{constructor(m,w,A,D){E("x",m),E("y",w),E("z",A,!0),E("t",D),this.ex=m,this.ey=w,this.ez=A,this.et=D,Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(m){if(m instanceof d)throw new Error("extended point not allowed");let{x:w,y:A}=m||{};return E("x",w),E("y",A),new d(w,A,Ae,u(w*A))}static normalizeZ(m){let w=Tr(t,m.map(A=>A.ez));return m.map((A,D)=>A.toAffine(w[D])).map(d.fromAffine)}static msm(m,w){return J1(d,f,m,w)}_setWindowSize(m){T.setWindowSize(this,m)}assertValidity(){x(this)}equals(m){L(m);let{ex:w,ey:A,ez:D}=this,{ex:M,ey:q,ez:F}=m,H=u(w*F),Q=u(M*D),se=u(A*F),ne=u(q*D);return H===Q&&se===ne}is0(){return this.equals(d.ZERO)}negate(){return new d(u(-this.ex),this.ey,this.ez,u(-this.et))}double(){let{a:m}=e,{ex:w,ey:A,ez:D}=this,M=u(w*w),q=u(A*A),F=u(C0*u(D*D)),H=u(m*M),Q=w+A,se=u(u(Q*Q)-M-q),ne=H+q,me=ne-F,Pe=H-q,fe=u(se*me),we=u(ne*Pe),Ne=u(se*Pe),Fe=u(me*ne);return new d(fe,we,Fe,Ne)}add(m){L(m);let{a:w,d:A}=e,{ex:D,ey:M,ez:q,et:F}=this,{ex:H,ey:Q,ez:se,et:ne}=m,me=u(D*H),Pe=u(M*Q),fe=u(F*A*ne),we=u(q*se),Ne=u((D+M)*(H+Q)-me-Pe),Fe=we-fe,Br=we+fe,L2=u(Pe-w*me),G3=u(Ne*Fe),$3=u(Br*L2),Q3=u(Ne*L2),j3=u(Fe*Br);return new d(G3,$3,j3,Q3)}subtract(m){return this.add(m.negate())}wNAF(m){return T.wNAFCached(this,m,d.normalizeZ)}multiply(m){let w=m;Ke("scalar",w,Ae,n);let{p:A,f:D}=this.wNAF(w);return d.normalizeZ([A,D])[0]}multiplyUnsafe(m,w=d.ZERO){let A=m;return Ke("scalar",A,Je,n),A===Je?P:this.is0()||A===Ae?this:T.wNAFCachedUnsafe(this,A,d.normalizeZ,w)}isSmallOrder(){return this.multiplyUnsafe(a).is0()}isTorsionFree(){return T.unsafeLadder(this,n).is0()}toAffine(m){return K(this,m)}clearCofactor(){let{h:m}=e;return m===Ae?this:this.multiplyUnsafe(m)}static fromHex(m,w=!1){let{d:A,a:D}=e,M=t.BYTES;m=J("pointHex",m,M),Xe("zip215",w);let q=m.slice(),F=m[M-1];q[M-1]=F&-129;let H=Zt(q),Q=w?l:t.ORDER;Ke("pointHex.y",H,Je,Q);let se=u(H*H),ne=u(se-Ae),me=u(A*se-D),{isValid:Pe,value:fe}=p(ne,me);if(!Pe)throw new Error("Point.fromHex: invalid y coordinate");let we=(fe&Ae)===Ae,Ne=(F&128)!==0;if(!w&&fe===Je&&Ne)throw new Error("Point.fromHex: x=0 and x_0=1");return Ne!==we&&(fe=u(-fe)),d.fromAffine({x:fe,y:H})}static fromPrivateKey(m){let{scalar:w}=U(m);return b.multiply(w)}toRawBytes(){let{x:m,y:w}=this.toAffine(),A=Ar(w,t.BYTES);return A[A.length-1]|=m&Ae?128:0,A}toHex(){return kt(this.toRawBytes())}}d.BASE=new d(e.Gx,e.Gy,Ae,u(e.Gx*e.Gy)),d.ZERO=new d(Je,Ae,Ae,Je);let{BASE:b,ZERO:P}=d,T=X1(d,c*8);function R(v){return Y(v,n)}function B(v){return R(Zt(v))}function U(v){let m=t.BYTES;v=J("private key",v,m);let w=J("hashed private key",i(v),2*m),A=y(w.slice(0,m)),D=w.slice(m,2*m),M=B(A);return{head:A,prefix:D,scalar:M}}function k(v){let{head:m,prefix:w,scalar:A}=U(v),D=b.multiply(A),M=D.toRawBytes();return{head:m,prefix:w,scalar:A,point:D,pointBytes:M}}function O(v){return k(v).pointBytes}function N(v=Uint8Array.of(),...m){let w=Dt(...m);return B(i(g(w,J("context",v),!!o)))}function ie(v,m,w={}){v=J("message",v),o&&(v=o(v));let{prefix:A,scalar:D,pointBytes:M}=k(m),q=N(w.context,A,v),F=b.multiply(q).toRawBytes(),H=N(w.context,F,M,v),Q=R(q+H*D);Ke("signature.s",Q,Je,n);let se=Dt(F,Ar(Q,t.BYTES));return J("result",se,t.BYTES*2)}let I=w6;function S(v,m,w,A=I){let{context:D,zip215:M}=A,q=t.BYTES;v=J("signature",v,2*q),m=J("message",m),w=J("publicKey",w,q),M!==void 0&&Xe("zip215",M),o&&(m=o(m));let F=Zt(v.slice(q,2*q)),H,Q,se;try{H=d.fromHex(w,M),Q=d.fromHex(v.slice(0,q),M),se=b.multiplyUnsafe(F)}catch{return!1}if(!M&&H.isSmallOrder())return!1;let ne=N(D,Q.toRawBytes(),H.toRawBytes(),m);return Q.add(H.multiplyUnsafe(ne)).subtract(se).clearCofactor().equals(d.ZERO)}return b._setWindowSize(8),{CURVE:e,getPublicKey:O,sign:ie,verify:S,ExtendedPoint:d,utils:{getExtendedPublicKey:k,randomPrivateKey:()=>s(t.BYTES),precompute(v=8,m=d.BASE){return m._setWindowSize(v),m.multiply(BigInt(3)),m}}}}var Ki=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),D0=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),Eu=BigInt(0),x6=BigInt(1),N0=BigInt(2),vu=BigInt(3),E6=BigInt(5),v6=BigInt(8);function S6(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),i=Ki,c=r*r%i*r%i,a=ee(c,N0,i)*c%i,l=ee(a,x6,i)*r%i,u=ee(l,E6,i)*l%i,f=ee(u,e,i)*u%i,h=ee(f,t,i)*f%i,p=ee(h,n,i)*h%i,y=ee(p,o,i)*p%i,g=ee(y,o,i)*p%i,E=ee(g,e,i)*u%i;return{pow_p_5_8:ee(E,N0,i)*r%i,b2:c}}function I6(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function A6(r,e){let t=Ki,n=Y(e*e*e,t),o=Y(n*n*e,t),i=S6(r*o).pow_p_5_8,s=Y(r*n*i,t),c=Y(e*s*s,t),a=s,l=Y(s*D0,t),u=c===r,f=c===Y(-r,t),h=c===Y(-r*D0,t);return u&&(s=a),(f||h)&&(s=l),I0(s,t)&&(s=Y(-s,t)),{isValid:u||f,value:s}}var B0=mt(Ki,void 0,!0),P6={a:B0.create(BigInt(-1)),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:B0,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:v6,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:h0,randomBytes:Sr,adjustScalarBytes:I6,uvRatio:A6},O0=k0(P6);var en=32;function M0(r,e,t){return O0.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}var tn=class{type="Ed25519";raw;constructor(e){this.raw=qi(e,en)}toMultihash(){return Ge.digest(_t(this))}toCID(){return Z.createV1(114,this.toMultihash())}toString(){return W.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:X(this.raw,e.raw)}verify(e,t){return M0(this.raw,t,e)}};function Fi(r){return r=qi(r,en),new tn(r)}function qi(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new V(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var oe;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1",r.ECDSA="ECDSA"})(oe||(oe={}));var Vi;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1",r[r.ECDSA=3]="ECDSA"})(Vi||(Vi={}));(function(r){r.codec=()=>mr(Vi)})(oe||(oe={}));var et;(function(r){let e;r.codec=()=>(e==null&&(e=Ye((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),oe.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let c=t.uint32();switch(c>>>3){case 1:{i.Type=oe.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(c&7);break}}}return i})),e),r.encode=t=>We(t,r.codec()),r.decode=(t,n)=>je(t,r.codec(),n)})(et||(et={}));var zi;(function(r){let e;r.codec=()=>(e==null&&(e=Ye((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),oe.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let c=t.uint32();switch(c>>>3){case 1:{i.Type=oe.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(c&7);break}}}return i})),e),r.encode=t=>We(t,r.codec()),r.decode=(t,n)=>je(t,r.codec(),n)})(zi||(zi={}));function rn(r){if(isNaN(r)||r<=0)throw new V("random bytes length must be a Number bigger than 0");return Sr(r)}var s1=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},nn=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var q0={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new nn("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=q0;var c1={};Te(c1,{MAX_RSA_KEY_SIZE:()=>Hi,generateRSAKeyPair:()=>H0,jwkToJWKKeyPair:()=>G0,jwkToPkcs1:()=>C6,jwkToPkix:()=>ji,jwkToRSAPrivateKey:()=>Xi,pkcs1MessageToJwk:()=>$i,pkcs1MessageToRSAPrivateKey:()=>Wi,pkcs1ToJwk:()=>L6,pkcs1ToRSAPrivateKey:()=>z0,pkixMessageToJwk:()=>Qi,pkixMessageToRSAPublicKey:()=>Zi,pkixToJwk:()=>k6,pkixToRSAPublicKey:()=>Yi});var on=W1;var _r=class{type="RSA";jwk;_raw;_multihash;constructor(e,t){this.jwk=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=c1.jwkToPkix(this.jwk)),this._raw}toMultihash(){return this._multihash}toCID(){return Z.createV1(114,this._multihash)}toString(){return W.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:X(this.raw,e.raw)}verify(e,t){return V0(this.jwk,t,e)}},a1=class{type="RSA";jwk;_raw;publicKey;constructor(e,t){this.jwk=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=c1.jwkToPkcs1(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:X(this.raw,e.raw)}sign(e){return F0(this.jwk,e)}};var Hi=8192,Gi=18,_6=1062,R6=Uint8Array.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);function L6(r){let e=ut(r);return $i(e)}function $i(r){return{n:_(r[1],"base64url"),e:_(r[2],"base64url"),d:_(r[3],"base64url"),p:_(r[4],"base64url"),q:_(r[5],"base64url"),dp:_(r[6],"base64url"),dq:_(r[7],"base64url"),qi:_(r[8],"base64url"),kty:"RSA"}}function C6(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 V("JWK was missing components");return Tt([Ce(Uint8Array.from([0])),Ce(G(r.n,"base64url")),Ce(G(r.e,"base64url")),Ce(G(r.d,"base64url")),Ce(G(r.p,"base64url")),Ce(G(r.q,"base64url")),Ce(G(r.dp,"base64url")),Ce(G(r.dq,"base64url")),Ce(G(r.qi,"base64url"))]).subarray()}function k6(r){let e=ut(r,{offset:0});return Qi(e)}function Qi(r){let e=ut(r[1],{offset:0});return{kty:"RSA",n:_(e[0],"base64url"),e:_(e[1],"base64url")}}function ji(r){if(r.n==null||r.e==null)throw new V("JWK was missing components");return Tt([R6,H1(Tt([Ce(G(r.n,"base64url")),Ce(G(r.e,"base64url"))]))]).subarray()}function z0(r){let e=ut(r);return Wi(e)}function Wi(r){let e=$i(r);return Xi(e)}function Yi(r,e){if(r.byteLength>=_6)throw new nt("Key size is too large");let t=ut(r,{offset:0});return Zi(t,r,e)}function Zi(r,e,t){let n=Qi(r);if(t==null){let o=on(et.encode({Type:oe.RSA,Data:e}));t=He(Gi,o)}return new _r(n,t)}function Xi(r){if(Q0(r)>Hi)throw new V("Key size is too large");let e=G0(r),t=on(et.encode({Type:oe.RSA,Data:ji(e.publicKey)})),n=He(Gi,t);return new a1(e.privateKey,new _r(e.publicKey,n))}async function H0(r){if(r>Hi)throw new V("Key size is too large");let e=await $0(r),t=on(et.encode({Type:oe.RSA,Data:ji(e.publicKey)})),n=He(Gi,t);return new a1(e.privateKey,new _r(e.publicKey,n))}function G0(r){if(r==null)throw new V("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}async function $0(r){let e=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"]),t=await D6(e);return{privateKey:t[0],publicKey:t[1]}}async function F0(r,e){let t=await Nt.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await Nt.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function V0(r,e,t){let n=await Nt.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return Nt.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function D6(r){if(r.privateKey==null||r.publicKey==null)throw new V("Private and public key are required");return Promise.all([Nt.get().subtle.exportKey("jwk",r.privateKey),Nt.get().subtle.exportKey("jwk",r.publicKey)])}function Q0(r){if(r.kty!=="RSA")throw new V("invalid key type");if(r.n==null)throw new V("invalid key modulus");return G(r.n,"base64url").length*8}var sn=class extends Er{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,Xs(e);let n=Jr(t);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let o=this.blockLen,i=new Uint8Array(o);i.set(n.length>o?e.create().update(n).digest():n);for(let s=0;s<i.length;s++)i[s]^=54;this.iHash.update(i),this.oHash=e.create();for(let s=0;s<i.length;s++)i[s]^=106;this.oHash.update(i),lt(i)}update(e){return vr(this),this.iHash.update(e),this}digestInto(e){vr(this),jt(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));let{oHash:t,iHash:n,finished:o,destroyed:i,blockLen:s,outputLen:c}=this;return e=e,e.finished=o,e.destroyed=i,e.blockLen=s,e.outputLen=c,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()}},Ji=(r,e,t)=>new sn(r,e).update(t).digest();Ji.create=(r,e)=>new sn(r,e);function j0(r){r.lowS!==void 0&&Xe("lowS",r.lowS),r.prehash!==void 0&&Xe("prehash",r.prehash)}function N6(r){let e=i1(r);pt(e,{a:"field",b:"field"},{allowInfinityPoint:"boolean",allowedPrivateKeyLengths:"array",clearCofactor:"function",fromBytes:"function",isTorsionFree:"function",toBytes:"function",wrapPrivateKey:"boolean"});let{endo:t,Fp:n,a:o}=e;if(t){if(!n.eql(o,n.ZERO))throw new Error("invalid endo: CURVE.a must be 0");if(typeof t!="object"||typeof t.beta!="bigint"||typeof t.splitScalar!="function")throw new Error('invalid endo: expected "beta": bigint and "splitScalar": function')}return Object.freeze({...e})}var r2=class extends Error{constructor(e=""){super(e)}},gt={Err:r2,_tlv:{encode:(r,e)=>{let{Err:t}=gt;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=n1(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let i=n>127?n1(o.length/2|128):"";return n1(r)+i+o+e},decode(r,e){let{Err:t}=gt,n=0;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length<2||e[n++]!==r)throw new t("tlv.decode: wrong tlv");let o=e[n++],i=!!(o&128),s=0;if(!i)s=o;else{let a=o&127;if(!a)throw new t("tlv.decode(long): indefinite length not supported");if(a>4)throw new t("tlv.decode(long): byte length is too big");let l=e.subarray(n,n+a);if(l.length!==a)throw new t("tlv.decode: length bytes not complete");if(l[0]===0)throw new t("tlv.decode(long): zero leftmost byte");for(let u of l)s=s<<8|u;if(n+=a,s<128)throw new t("tlv.decode(long): not minimal encoding")}let c=e.subarray(n,n+s);if(c.length!==s)throw new t("tlv.decode: wrong value length");return{v:c,l:e.subarray(n+s)}}},_int:{encode(r){let{Err:e}=gt;if(r<yt)throw new e("integer: negative integers are not allowed");let t=n1(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}=gt;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 dt(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=gt,o=J("signature",r),{v:i,l:s}=n.decode(48,o);if(s.length)throw new e("invalid signature: left bytes after parsing");let{v:c,l:a}=n.decode(2,i),{v:l,l:u}=n.decode(2,a);if(u.length)throw new e("invalid signature: left bytes after parsing");return{r:t.decode(c),s:t.decode(l)}},hexFromSig(r){let{_tlv:e,_int:t}=gt,n=e.encode(2,t.encode(r.r)),o=e.encode(2,t.encode(r.s)),i=n+o;return e.encode(48,i)}};function e2(r,e){return kt(Xt(r,e))}var yt=BigInt(0),pe=BigInt(1),vl=BigInt(2),t2=BigInt(3),B6=BigInt(4);function O6(r){let e=N6(r),{Fp:t}=e,n=mt(e.n,e.nBitLength),o=e.toBytes||((x,d,b)=>{let P=d.toAffine();return Dt(Uint8Array.from([4]),t.toBytes(P.x),t.toBytes(P.y))}),i=e.fromBytes||(x=>{let d=x.subarray(1),b=t.fromBytes(d.subarray(0,t.BYTES)),P=t.fromBytes(d.subarray(t.BYTES,2*t.BYTES));return{x:b,y:P}});function s(x){let{a:d,b}=e,P=t.sqr(x),T=t.mul(P,x);return t.add(t.add(T,t.mul(x,d)),b)}function c(x,d){let b=t.sqr(d),P=s(x);return t.eql(b,P)}if(!c(e.Gx,e.Gy))throw new Error("bad curve params: generator point");let a=t.mul(t.pow(e.a,t2),B6),l=t.mul(t.sqr(e.b),BigInt(27));if(t.is0(t.add(a,l)))throw new Error("bad curve params: a or b");function u(x){return Y1(x,pe,e.n)}function f(x){let{allowedPrivateKeyLengths:d,nByteLength:b,wrapPrivateKey:P,n:T}=e;if(d&&typeof x!="bigint"){if(Ir(x)&&(x=kt(x)),typeof x!="string"||!d.includes(x.length))throw new Error("invalid private key");x=x.padStart(b*2,"0")}let R;try{R=typeof x=="bigint"?x:dt(J("private key",x,b))}catch{throw new Error("invalid private key, expected hex or "+b+" bytes, got "+typeof x)}return P&&(R=Y(R,T)),Ke("private key",R,pe,T),R}function h(x){if(!(x instanceof g))throw new Error("ProjectivePoint expected")}let p=Pr((x,d)=>{let{px:b,py:P,pz:T}=x;if(t.eql(T,t.ONE))return{x:b,y:P};let R=x.is0();d==null&&(d=R?t.ONE:t.inv(T));let B=t.mul(b,d),U=t.mul(P,d),k=t.mul(T,d);if(R)return{x:t.ZERO,y:t.ZERO};if(!t.eql(k,t.ONE))throw new Error("invZ was invalid");return{x:B,y:U}}),y=Pr(x=>{if(x.is0()){if(e.allowInfinityPoint&&!t.is0(x.py))return;throw new Error("bad point: ZERO")}let{x:d,y:b}=x.toAffine();if(!t.isValid(d)||!t.isValid(b))throw new Error("bad point: x or y not FE");if(!c(d,b))throw new Error("bad point: equation left != right");if(!x.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class g{constructor(d,b,P){if(d==null||!t.isValid(d))throw new Error("x required");if(b==null||!t.isValid(b)||t.is0(b))throw new Error("y required");if(P==null||!t.isValid(P))throw new Error("z required");this.px=d,this.py=b,this.pz=P,Object.freeze(this)}static fromAffine(d){let{x:b,y:P}=d||{};if(!d||!t.isValid(b)||!t.isValid(P))throw new Error("invalid affine point");if(d instanceof g)throw new Error("projective point not allowed");let T=R=>t.eql(R,t.ZERO);return T(b)&&T(P)?g.ZERO:new g(b,P,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(d){let b=Tr(t,d.map(P=>P.pz));return d.map((P,T)=>P.toAffine(b[T])).map(g.fromAffine)}static fromHex(d){let b=g.fromAffine(i(J("pointHex",d)));return b.assertValidity(),b}static fromPrivateKey(d){return g.BASE.multiply(f(d))}static msm(d,b){return J1(g,n,d,b)}_setWindowSize(d){K.setWindowSize(this,d)}assertValidity(){y(this)}hasEvenY(){let{y:d}=this.toAffine();if(t.isOdd)return!t.isOdd(d);throw new Error("Field doesn't support isOdd")}equals(d){h(d);let{px:b,py:P,pz:T}=this,{px:R,py:B,pz:U}=d,k=t.eql(t.mul(b,U),t.mul(R,T)),O=t.eql(t.mul(P,U),t.mul(B,T));return k&&O}negate(){return new g(this.px,t.neg(this.py),this.pz)}double(){let{a:d,b}=e,P=t.mul(b,t2),{px:T,py:R,pz:B}=this,U=t.ZERO,k=t.ZERO,O=t.ZERO,N=t.mul(T,T),ie=t.mul(R,R),I=t.mul(B,B),S=t.mul(T,R);return S=t.add(S,S),O=t.mul(T,B),O=t.add(O,O),U=t.mul(d,O),k=t.mul(P,I),k=t.add(U,k),U=t.sub(ie,k),k=t.add(ie,k),k=t.mul(U,k),U=t.mul(S,U),O=t.mul(P,O),I=t.mul(d,I),S=t.sub(N,I),S=t.mul(d,S),S=t.add(S,O),O=t.add(N,N),N=t.add(O,N),N=t.add(N,I),N=t.mul(N,S),k=t.add(k,N),I=t.mul(R,B),I=t.add(I,I),N=t.mul(I,S),U=t.sub(U,N),O=t.mul(I,ie),O=t.add(O,O),O=t.add(O,O),new g(U,k,O)}add(d){h(d);let{px:b,py:P,pz:T}=this,{px:R,py:B,pz:U}=d,k=t.ZERO,O=t.ZERO,N=t.ZERO,ie=e.a,I=t.mul(e.b,t2),S=t.mul(b,R),C=t.mul(P,B),v=t.mul(T,U),m=t.add(b,P),w=t.add(R,B);m=t.mul(m,w),w=t.add(S,C),m=t.sub(m,w),w=t.add(b,T);let A=t.add(R,U);return w=t.mul(w,A),A=t.add(S,v),w=t.sub(w,A),A=t.add(P,T),k=t.add(B,U),A=t.mul(A,k),k=t.add(C,v),A=t.sub(A,k),N=t.mul(ie,w),k=t.mul(I,v),N=t.add(k,N),k=t.sub(C,N),N=t.add(C,N),O=t.mul(k,N),C=t.add(S,S),C=t.add(C,S),v=t.mul(ie,v),w=t.mul(I,w),C=t.add(C,v),v=t.sub(S,v),v=t.mul(ie,v),w=t.add(w,v),S=t.mul(C,w),O=t.add(O,S),S=t.mul(A,w),k=t.mul(m,k),k=t.sub(k,S),S=t.mul(m,C),N=t.mul(A,N),N=t.add(N,S),new g(k,O,N)}subtract(d){return this.add(d.negate())}is0(){return this.equals(g.ZERO)}wNAF(d){return K.wNAFCached(this,d,g.normalizeZ)}multiplyUnsafe(d){let{endo:b,n:P}=e;Ke("scalar",d,yt,P);let T=g.ZERO;if(d===yt)return T;if(this.is0()||d===pe)return this;if(!b||K.hasPrecomputes(this))return K.wNAFCachedUnsafe(this,d,g.normalizeZ);let{k1neg:R,k1:B,k2neg:U,k2:k}=b.splitScalar(d),O=T,N=T,ie=this;for(;B>yt||k>yt;)B&pe&&(O=O.add(ie)),k&pe&&(N=N.add(ie)),ie=ie.double(),B>>=pe,k>>=pe;return R&&(O=O.negate()),U&&(N=N.negate()),N=new g(t.mul(N.px,b.beta),N.py,N.pz),O.add(N)}multiply(d){let{endo:b,n:P}=e;Ke("scalar",d,pe,P);let T,R;if(b){let{k1neg:B,k1:U,k2neg:k,k2:O}=b.splitScalar(d),{p:N,f:ie}=this.wNAF(U),{p:I,f:S}=this.wNAF(O);N=K.constTimeNegate(B,N),I=K.constTimeNegate(k,I),I=new g(t.mul(I.px,b.beta),I.py,I.pz),T=N.add(I),R=ie.add(S)}else{let{p:B,f:U}=this.wNAF(d);T=B,R=U}return g.normalizeZ([T,R])[0]}multiplyAndAddUnsafe(d,b,P){let T=g.BASE,R=(U,k)=>k===yt||k===pe||!U.equals(T)?U.multiplyUnsafe(k):U.multiply(k),B=R(this,b).add(R(d,P));return B.is0()?void 0:B}toAffine(d){return p(this,d)}isTorsionFree(){let{h:d,isTorsionFree:b}=e;if(d===pe)return!0;if(b)return b(g,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:d,clearCofactor:b}=e;return d===pe?this:b?b(g,this):this.multiplyUnsafe(e.h)}toRawBytes(d=!0){return Xe("isCompressed",d),this.assertValidity(),o(g,this,d)}toHex(d=!0){return Xe("isCompressed",d),kt(this.toRawBytes(d))}}g.BASE=new g(e.Gx,e.Gy,t.ONE),g.ZERO=new g(t.ZERO,t.ONE,t.ZERO);let{endo:E,nBitLength:L}=e,K=X1(g,E?Math.ceil(L/2):L);return{CURVE:e,ProjectivePoint:g,normPrivateKeyToScalar:f,weierstrassEquation:s,isWithinCurveOrder:u}}function M6(r){let e=i1(r);return pt(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function W0(r){let e=M6(r),{Fp:t,n,nByteLength:o,nBitLength:i}=e,s=t.BYTES+1,c=2*t.BYTES+1;function a(I){return Y(I,n)}function l(I){return Z1(I,n)}let{ProjectivePoint:u,normPrivateKeyToScalar:f,weierstrassEquation:h,isWithinCurveOrder:p}=O6({...e,toBytes(I,S,C){let v=S.toAffine(),m=t.toBytes(v.x),w=Dt;return Xe("isCompressed",C),C?w(Uint8Array.from([S.hasEvenY()?2:3]),m):w(Uint8Array.from([4]),m,t.toBytes(v.y))},fromBytes(I){let S=I.length,C=I[0],v=I.subarray(1);if(S===s&&(C===2||C===3)){let m=dt(v);if(!Y1(m,pe,t.ORDER))throw new Error("Point is not on curve");let w=h(m),A;try{A=t.sqrt(w)}catch(q){let F=q instanceof Error?": "+q.message:"";throw new Error("Point is not on curve"+F)}let D=(A&pe)===pe;return(C&1)===1!==D&&(A=t.neg(A)),{x:m,y:A}}else if(S===c&&C===4){let m=t.fromBytes(v.subarray(0,t.BYTES)),w=t.fromBytes(v.subarray(t.BYTES,2*t.BYTES));return{x:m,y:w}}else{let m=s,w=c;throw new Error("invalid Point, expected length of "+m+", or uncompressed "+w+", got "+S)}}});function y(I){let S=n>>pe;return I>S}function g(I){return y(I)?a(-I):I}let E=(I,S,C)=>dt(I.slice(S,C));class L{constructor(S,C,v){Ke("r",S,pe,n),Ke("s",C,pe,n),this.r=S,this.s=C,v!=null&&(this.recovery=v),Object.freeze(this)}static fromCompact(S){let C=o;return S=J("compactSignature",S,C*2),new L(E(S,0,C),E(S,C,2*C))}static fromDER(S){let{r:C,s:v}=gt.toSig(J("DER",S));return new L(C,v)}assertValidity(){}addRecoveryBit(S){return new L(this.r,this.s,S)}recoverPublicKey(S){let{r:C,s:v,recovery:m}=this,w=T(J("msgHash",S));if(m==null||![0,1,2,3].includes(m))throw new Error("recovery id invalid");let A=m===2||m===3?C+e.n:C;if(A>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let D=(m&1)===0?"02":"03",M=u.fromHex(D+e2(A,t.BYTES)),q=l(A),F=a(-w*q),H=a(v*q),Q=u.BASE.multiplyAndAddUnsafe(M,F,H);if(!Q)throw new Error("point at infinify");return Q.assertValidity(),Q}hasHighS(){return y(this.s)}normalizeS(){return this.hasHighS()?new L(this.r,a(-this.s),this.recovery):this}toDERRawBytes(){return o1(this.toDERHex())}toDERHex(){return gt.hexFromSig(this)}toCompactRawBytes(){return o1(this.toCompactHex())}toCompactHex(){let S=o;return e2(this.r,S)+e2(this.s,S)}}let K={isValidPrivateKey(I){try{return f(I),!0}catch{return!1}},normPrivateKeyToScalar:f,randomPrivateKey:()=>{let I=Di(e.n);return P0(e.randomBytes(I),e.n)},precompute(I=8,S=u.BASE){return S._setWindowSize(I),S.multiply(BigInt(3)),S}};function x(I,S=!0){return u.fromPrivateKey(I).toRawBytes(S)}function d(I){if(typeof I=="bigint")return!1;if(I instanceof u)return!0;let C=J("key",I).length,v=t.BYTES,m=v+1,w=2*v+1;if(!(e.allowedPrivateKeyLengths||o===m))return C===m||C===w}function b(I,S,C=!0){if(d(I)===!0)throw new Error("first arg must be private key");if(d(S)===!1)throw new Error("second arg must be public key");return u.fromHex(S).multiply(f(I)).toRawBytes(C)}let P=e.bits2int||function(I){if(I.length>8192)throw new Error("input is too large");let S=dt(I),C=I.length*8-i;return C>0?S>>BigInt(C):S},T=e.bits2int_modN||function(I){return a(P(I))},R=Jt(i);function B(I){return Ke("num < 2^"+i,I,yt,R),Xt(I,o)}function U(I,S,C=k){if(["recovered","canonical"].some(ne=>ne in C))throw new Error("sign() legacy options not supported");let{hash:v,randomBytes:m}=e,{lowS:w,prehash:A,extraEntropy:D}=C;w==null&&(w=!0),I=J("msgHash",I),j0(C),A&&(I=J("prehashed msgHash",v(I)));let M=T(I),q=f(S),F=[B(q),B(M)];if(D!=null&&D!==!1){let ne=D===!0?m(t.BYTES):D;F.push(J("extraEntropy",ne))}let H=Dt(...F),Q=M;function se(ne){let me=P(ne);if(!p(me))return;let Pe=l(me),fe=u.BASE.multiply(me).toAffine(),we=a(fe.x);if(we===yt)return;let Ne=a(Pe*a(Q+we*q));if(Ne===yt)return;let Fe=(fe.x===we?0:2)|Number(fe.y&pe),Br=Ne;return w&&y(Ne)&&(Br=g(Ne),Fe^=1),new L(we,Br,Fe)}return{seed:H,k2sig:se}}let k={lowS:e.lowS,prehash:!1},O={lowS:e.lowS,prehash:!1};function N(I,S,C=k){let{seed:v,k2sig:m}=U(I,S,C),w=e;return w0(w.hash.outputLen,w.nByteLength,w.hmac)(v,m)}u.BASE._setWindowSize(8);function ie(I,S,C,v=O){let m=I;S=J("msgHash",S),C=J("publicKey",C);let{lowS:w,prehash:A,format:D}=v;if(j0(v),"strict"in v)throw new Error("options.strict was renamed to lowS");if(D!==void 0&&D!=="compact"&&D!=="der")throw new Error("format must be compact or der");let M=typeof m=="string"||Ir(m),q=!M&&!D&&typeof m=="object"&&m!==null&&typeof m.r=="bigint"&&typeof m.s=="bigint";if(!M&&!q)throw new Error("invalid signature, expected Uint8Array, hex string or Signature instance");let F,H;try{if(q&&(F=new L(m.r,m.s)),M){try{D!=="compact"&&(F=L.fromDER(m))}catch(Fe){if(!(Fe instanceof gt.Err))throw Fe}!F&&D!=="der"&&(F=L.fromCompact(m))}H=u.fromHex(C)}catch{return!1}if(!F||w&&F.hasHighS())return!1;A&&(S=e.hash(S));let{r:Q,s:se}=F,ne=T(S),me=l(se),Pe=a(ne*me),fe=a(Q*me),we=u.BASE.multiplyAndAddUnsafe(H,Pe,fe)?.toAffine();return we?a(we.x)===Q:!1}return{CURVE:e,getPublicKey:x,getSharedSecret:b,sign:N,verify:ie,ProjectivePoint:u,Signature:L,utils:K}}function U6(r){return{hash:r,hmac:(e,...t)=>Ji(r,e,Ei(...t)),randomBytes:Sr}}function Y0(r,e){let t=n=>W0({...r,...U6(n)});return{...t(e),create:t}}var J0=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),Z0=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),K6=BigInt(0),q6=BigInt(1),n2=BigInt(2),X0=(r,e)=>(r+e/n2)/e;function F6(r){let e=J0,t=BigInt(3),n=BigInt(6),o=BigInt(11),i=BigInt(22),s=BigInt(23),c=BigInt(44),a=BigInt(88),l=r*r*r%e,u=l*l*r%e,f=ee(u,t,e)*u%e,h=ee(f,t,e)*u%e,p=ee(h,n2,e)*l%e,y=ee(p,o,e)*p%e,g=ee(y,i,e)*y%e,E=ee(g,c,e)*g%e,L=ee(E,a,e)*E%e,K=ee(L,c,e)*g%e,x=ee(K,t,e)*u%e,d=ee(x,s,e)*y%e,b=ee(d,n,e)*l%e,P=ee(b,n2,e);if(!o2.eql(o2.sqr(P),r))throw new Error("Cannot find square root");return P}var o2=mt(J0,void 0,void 0,{sqrt:F6}),Rr=Y0({a:K6,b:BigInt(7),Fp:o2,n:Z0,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=Z0,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-q6*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=t,s=BigInt("0x100000000000000000000000000000000"),c=X0(i*r,e),a=X0(-n*r,e),l=Y(r-c*t-a*o,e),u=Y(-c*n-a*i,e),f=l>s,h=u>s;if(f&&(l=e-l),h&&(u=e-u),l>s||u>s)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:f,k1:l,k2neg:h,k2:u}}}},W1);function e3(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function t3(r,e,t){let n=st.digest(t instanceof Uint8Array?t:t.subarray());if(e3(n))return n.then(({digest:o})=>Rr.verify(e,o,r)).catch(o=>{throw new s1(String(o))});try{return Rr.verify(e,n.digest,r)}catch(o){throw new s1(String(o))}}var an=class{type="secp256k1";raw;_key;constructor(e){this._key=n3(e),this.raw=r3(this._key)}toMultihash(){return Ge.digest(_t(this))}toCID(){return Z.createV1(114,this.toMultihash())}toString(){return W.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:X(this.raw,e.raw)}verify(e,t){return t3(this._key,t,e)}};function i2(r){return new an(r)}function r3(r){return Rr.ProjectivePoint.fromHex(r).toRawBytes(!0)}function n3(r){try{return Rr.ProjectivePoint.fromHex(r),r}catch(e){throw new nt(String(e))}}function cn(r,e){let{Type:t,Data:n}=et.decode(r),o=n??new Uint8Array;switch(t){case oe.RSA:return Yi(o,e);case oe.Ed25519:return Fi(o);case oe.secp256k1:return i2(o);case oe.ECDSA:return xi(o);default:throw new qt}}function o3(r){let{Type:e,Data:t}=et.decode(r.digest),n=t??new Uint8Array;switch(e){case oe.Ed25519:return Fi(n);case oe.secp256k1:return i2(n);case oe.ECDSA:return xi(n);default:throw new qt}}function _t(r){return et.encode({Type:oe[r.type],Data:r.raw})}async function Lr(r,e){let t=e.key,o=_(t).split("/");if(o.length<3)return;let i=r[o[1].toString()];if(i==null)throw new V(`No validator available for key type "${o[1]}"`);await i(t,e.value)}var V6=async(r,e)=>{if(!(r instanceof Uint8Array))throw new V('"key" must be a Uint8Array');if(r.byteLength<5)throw new V("Invalid public key record");if(_(r.subarray(0,4))!=="/pk/")throw new V("key was not prefixed with /pk/");let n=cn(e),o=r.slice(4);if(!X(o,n.toMultihash().bytes))throw new V("public key does not match passed in key")},i3={pk:V6};var s3=Symbol.for("nodejs.util.inspect.custom"),z6=114,u1=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()})`}[co]=!0;toString(){return this.string==null&&(this.string=W.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return Z.createV1(z6,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return X(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return X(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[s3](){return`PeerId(${this.toString()})`}},l1=class extends u1{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},f1=class extends u1{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},h1=class extends u1{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},H6=2336,d1=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=Ge.digest(G(this.url))}[s3](){return`PeerId(${this.url})`}[co]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return Z.createV1(H6,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=_(e)),e.toString()===this.toString())}};var G6=114,a3=2336;function c3(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=ue(W.decode(`z${r}`));else{if(r.startsWith("k51qzi5uqu5")||r.startsWith("kzwfwjn5ji4")||r.startsWith("k2k4r8")||r.startsWith("bafz"))return $6(Z.parse(r));if(e==null)throw new V('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=ue(e.decode(r))}return ke(t)}function u3(r){if(r.type==="Ed25519")return new f1({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new h1({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new l1({multihash:r.toCID().multihash,publicKey:r});throw new qt}function ke(r){if(j6(r))return new l1({multihash:r});if(Q6(r))try{let e=o3(r);if(e.type==="Ed25519")return new f1({multihash:r,publicKey:e});if(e.type==="secp256k1")return new h1({multihash:r,publicKey:e})}catch{let t=_(r.digest);return new d1(new URL(t))}throw new S1("Supplied PeerID Multihash is invalid")}function $6(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==G6&&r.code!==a3)throw new v1("Supplied PeerID CID is invalid");if(r.code===a3){let e=_(r.multihash.digest);return new d1(new URL(e))}return ke(r.multihash)}function Q6(r){return r.code===Ge.code}function j6(r){return r.code===st.code}var un=class{index=0;input="";new(e){return this.index=0,this.input=e,this}readAtomically(e){let t=this.index,n=e();return n===void 0&&(this.index=t),n}parseWith(e){let t=e();if(this.index===this.input.length)return t}peekChar(){if(!(this.index>=this.input.length))return this.input[this.index]}readChar(){if(!(this.index>=this.input.length))return this.input[this.index++]}readGivenChar(e){return this.readAtomically(()=>{let t=this.readChar();if(t===e)return t})}readSeparator(e,t,n){return this.readAtomically(()=>{if(!(t>0&&this.readGivenChar(e)===void 0))return n()})}readNumber(e,t,n,o){return this.readAtomically(()=>{let i=0,s=0,c=this.peekChar();if(c===void 0)return;let a=c==="0",l=2**(8*o)-1;for(;;){let u=this.readAtomically(()=>{let f=this.readChar();if(f===void 0)return;let h=Number.parseInt(f,e);if(!Number.isNaN(h))return h});if(u===void 0)break;if(i*=e,i+=u,i>l||(s+=1,t!==void 0&&s>t))return}if(s!==0)return!n&&a&&s>1?void 0:i})}readIPv4Addr(){return this.readAtomically(()=>{let e=new Uint8Array(4);for(let t=0;t<e.length;t++){let n=this.readSeparator(".",t,()=>this.readNumber(10,3,!1,1));if(n===void 0)return;e[t]=n}return e})}readIPv6Addr(){let e=t=>{for(let n=0;n<t.length/2;n++){let o=n*2;if(n<t.length-3){let s=this.readSeparator(":",n,()=>this.readIPv4Addr());if(s!==void 0)return t[o]=s[0],t[o+1]=s[1],t[o+2]=s[2],t[o+3]=s[3],[o+4,!0]}let i=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(i===void 0)return[o,!1];t[o]=i>>8,t[o+1]=i&255}return[t.length,!1]};return this.readAtomically(()=>{let t=new Uint8Array(16),[n,o]=e(t);if(n===16)return t;if(o||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let i=new Uint8Array(14),s=16-(n+2),[c]=e(i.subarray(0,s));return t.set(i.subarray(0,c),16-c),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var l3=45,W6=15,Cr=new un;function s2(r){if(!(r.length>W6))return Cr.new(r).parseWith(()=>Cr.readIPv4Addr())}function a2(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>l3))return Cr.new(r).parseWith(()=>Cr.readIPv6Addr())}function ln(r,e=!1){if(r.includes("%")&&(r=r.split("%")[0]),r.length>l3)return;let t=Cr.new(r).parseWith(()=>Cr.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 fn(r){return!!s2(r)}function hn(r){return!!a2(r)}function dn(r){return!!ln(r)}var h3=D2(f3(),1),Y6=["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"],Z6=Y6.map(r=>new h3.Netmask(r));function c2(r){for(let e of Z6)if(e.contains(r))return!0;return!1}function X6(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function J6(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 c2(o)}function e8(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function t8(r){let e=r.split(":"),t=e[e.length-1];return c2(t)}function r8(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 pn(r){return fn(r)?c2(r):X6(r)?J6(r):e8(r)?t8(r):hn(r)?r8(r):void 0}var wt="/",d3=new TextEncoder().encode(wt),mn=d3[0],m1=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=G(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]!==mn)throw new Error("Invalid key")}toString(e="utf8"){return _(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(wt))}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=d3),this._buf[0]!==mn){let e=new Uint8Array(this._buf.byteLength+1);e.fill(mn,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===mn;)this._buf=this._buf.subarray(0,-1)}less(e){let t=this.list(),n=e.list();for(let o=0;o<t.length;o++){if(n.length<o+1)return!1;let i=t[o],s=n[o];if(i<s)return!0;if(i>s)return!1}return t.length<n.length}reverse(){return r.withNamespaces(this.list().slice().reverse())}namespaces(){return this.list()}baseNamespace(){let e=this.namespaces();return e[e.length-1]}list(){return this.toString().split(wt).slice(1)}type(){return n8(this.baseNamespace())}name(){return o8(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(wt)||(e+=wt),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(wt):new r(e.slice(0,-1).join(wt))}child(e){return this.toString()===wt?e:e.toString()===wt?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(),...i8(e.map(t=>t.namespaces()))])}};function n8(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function o8(r){let e=r.split(":");return e[e.length-1]}function i8(r){return[].concat(...r)}var s8=G("/pk/");function gn(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>{let[[t,n]]=e.stringTuples();if(t===53||t===54||t===55)return n!=="localhost";if(t!==4&&t!==6||n==null)return!1;let o=pn(n);return o==null?!0:!o})}}function p3(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>{let[[t,n]]=e.stringTuples();if(n==="localhost")return!0;if(t!==4&&t!==6||n==null)return!1;let o=pn(n);return o??!1})}}function m3(r){return r}async function Bt(r){return(await st.digest(r)).digest}async function ye(r){return Bt(r.toMultihash().bytes)}function Ot(r,e){return new m1(`${r}/${_(e,"base32")}`,!1)}function g3(r){return ve([s8,r.toMultihash().bytes])}function y3(r){return _(r.subarray(0,4))==="/pk/"}function w3(r){let e=ue(r.subarray(4));return ke(e)}function u2(r,e){let t=new Date;return new le(r,e,t).serialize()}var a8=290,c8=54,u8=55,l8=56,f8=4,h8=41;function b3(r){let e=r.stringTuples();for(let t of e)if(t[0]===a8)return!1;if(e[0][0]===c8||e[0][0]===u8||e[0][0]===l8)return!0;if(e[0][0]===f8||e[0][0]===h8){let t=pn(`${e[0][1]}`);return t==null||!t}return!1}function yn(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:Z.createV1(Ss,ue(G(n,"base32"))),peerId:c3(t)}}function wn(r,e,t){let n=typeof e=="string"?e:_(e.multihash.bytes,"base32"),o=[r,n];return t!=null&&o.push(t.toString()),new m1(o.join("/"))}function bn(r){return new Date(Be(r))}function tr(r,e,t){return async function*(...n){let o=e.queryTime?.timer(t),i=e.errorTime?.timer(t),s=!1;try{e.queries?.increment({[t]:!0}),yield*r(...n)}catch(c){throw s=!0,i?.(),e.errors?.increment({[t]:!0}),c}finally{e.queries?.decrement({[t]:!0}),s||o?.()}}}function xn(r,e,t){return async function(...n){let o=e?.queryTime?.timer(t),i=e?.errorTime?.timer(t),s=!1;try{return e.queries?.increment({[t]:!0}),await r(...n)}catch(c){throw s=!0,i?.(),e.errors?.increment({[t]:!0}),c}finally{e.queries?.decrement({[t]:!0}),s||o?.()}}}var En=class{log;components;validators;selectors;peerRouting;queryManager;network;datastorePrefix;constructor(e,t){let{validators:n,selectors:o,peerRouting:i,queryManager:s,network:c,logPrefix:a}=t;this.components=e,this.log=e.logger.forComponent(`${a}:content-fetching`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.validators=n,this.selectors=o,this.peerRouting=i,this.queryManager=s,this.network=c,this.get=e.metrics?.traceFunction("libp2p.kadDHT.get",this.get.bind(this),{optionsIndex:1})??this.get,this.put=e.metrics?.traceFunction("libp2p.kadDHT.put",this.put.bind(this),{optionsIndex:2})??this.put}async getLocal(e){this.log("getLocal %b",e);let t=Ot(this.datastorePrefix,e);this.log("fetching record for key %k",t);let n=await this.components.datastore.get(t);this.log("found %k in local datastore",t);let o=le.deserialize(n);return await Lr(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o){this.log("sendCorrection for %b",e);let i=u2(e,n);for(let{value:s,from:c}of t){if(X(s,n)){this.log("record was ok");continue}if(this.components.peerId.equals(c)){try{let u=Ot(this.datastorePrefix,e);this.log(`Storing corrected record for key ${u.toString()}`),await this.components.datastore.put(u,i.subarray())}catch(u){this.log.error("Failed error correcting self",u)}continue}let a=!1,l={type:z.PUT_VALUE,key:e,record:i};for await(let u of this.network.sendRequest(c,l,o))u.name==="PEER_RESPONSE"&&u.record!=null&&X(u.record.value,le.deserialize(i).value)&&(a=!0),yield u;a||(yield Ue({from:c,error:new Pt("Value not put correctly")},o)),this.log.error("Failed error correcting entry")}}async*put(e,t,n){this.log("put key %b value %b",e,t);let o=u2(e,t),i=Ot(this.datastorePrefix,e);this.log(`storing record for key ${i.toString()}`),await this.components.datastore.put(i,o.subarray()),yield*At(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),s=>It(s,c=>async()=>{if(c.name!=="FINAL_PEER")return[c];let a=[],l={type:z.PUT_VALUE,key:e,record:o};this.log("send put to %p",c.peer.id);for await(let u of this.network.sendRequest(c.peer.id,l,{...n,path:c.path}))a.push(u),u.name==="PEER_RESPONSE"&&(u.record!=null&&X(u.record.value,le.deserialize(o).value)||a.push(Ue({from:c.peer.id,error:new Pt("Value not put correctly")},n)));return a}),s=>$t(s,{ordered:!1,concurrency:ur}),async function*(s){for await(let c of s)yield*c})}async*get(e,t){this.log("get %b",e);let n=[];for await(let c of this.getMany(e,t))c.name==="VALUE"&&n.push(c),yield c;if(n.length===0)return;let o=n.map(c=>c.value),i=0;try{i=Hs(this.selectors,e,o)}catch(c){if(c.name!=="InvalidParametersError")throw c}let s=o[i];if(this.log("GetValue %b %b",e,s),s==null)throw new Ve("Best value was not found");yield*this.sendCorrectionRecord(e,n,s,{...t,path:-1}),yield n[i]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let i=await this.getLocal(e);yield Yr({value:i.value,from:this.components.peerId},t)}catch(i){this.log("error getting local value for %b",e,i)}let n=this,o=async function*({peer:i,signal:s,path:c}){for await(let a of n.peerRouting.getValueOrPeers(i,e,{...t,signal:s,path:c}))yield a,a.name==="PEER_RESPONSE"&&a.record!=null&&(yield Yr({from:i,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function rr(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 vn(r){let e=ue(W.decode(`z${r}`));return ke(e)}var nr=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 rr(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 rr(this.map.values(),e=>e.key)}values(){return rr(this.map.values(),e=>e.value)}get size(){return this.map.size}};var tt=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 rr(this.set.entries(),e=>{let t=vn(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=vn(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return rr(this.set.values(),e=>vn(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}};var Fh=parseInt("0xFFFF",16),Vh=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);var v3=fn,w8=hn,l2=function(r){let e=0;if(r=r.toString().trim(),v3(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(w8(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let i=v3(t[n]),s;i&&(s=l2(t[n]),t[n]=_(s.slice(0,2),"base16")),s!=null&&++n<8&&t.splice(n,0,_(s.slice(2,4),"base16"))}if(t[0]==="")for(;t.length<8;)t.unshift("0");else if(t[t.length-1]==="")for(;t.length<8;)t.push("0");else if(t.length<8){for(n=0;n<t.length&&t[n]!=="";n++);let i=[n,1];for(n=9-t.length;n>0;n--)i.push("0");t.splice.apply(t,i)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){let i=parseInt(t[n],16);o[e++]=i>>8&255,o[e++]=i&255}return o}throw new Error("invalid ip address")},S3=function(r,e=0,t){e=~~e,t=t??r.length-e;let n=new DataView(r.buffer);if(t===4){let o=[];for(let i=0;i<t;i++)o.push(r[e+i]);return o.join(".")}if(t===16){let o=[];for(let i=0;i<t;i+=2)o.push(n.getUint16(e+i).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var kr={},f2={},x8=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,-1,"ip6zone"],[43,8,"ipcidr"],[53,-1,"dns",!0],[54,-1,"dns4",!0],[55,-1,"dns6",!0],[56,-1,"dnsaddr",!0],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[280,0,"webrtc-direct"],[281,0,"webrtc"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,-1,"unix",!1,!0],[421,-1,"ipfs"],[421,-1,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,-1,"garlic64"],[448,0,"tls"],[449,-1,"sni"],[460,0,"quic"],[461,0,"quic-v1"],[465,0,"webtransport"],[466,-1,"certhash"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"],[481,-1,"http-path"],[777,-1,"memory"]];x8.forEach(r=>{let e=E8(...r);f2[e.code]=e,kr[e.name]=e});function E8(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function j(r){if(typeof r=="number"){if(f2[r]!=null)return f2[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(kr[r]!=null)return kr[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var Sd=j("ip4"),Id=j("ip6"),Ad=j("ipcidr");function m2(r,e){switch(j(r).code){case 4:case 41:return S8(e);case 42:return p2(e);case 43:return _(e,"base10");case 6:case 273:case 33:case 132:return P3(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return p2(e);case 421:return T8(e);case 444:return A3(e);case 445:return A3(e);case 466:return P8(e);case 481:return globalThis.encodeURIComponent(p2(e));default:return _(e,"base16")}}function g2(r,e){switch(j(r).code){case 4:return I3(e);case 41:return I3(e);case 42:return d2(e);case 43:return G(e,"base10");case 6:case 273:case 33:case 132:return y2(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return d2(e);case 421:return I8(e);case 444:return _8(e);case 445:return R8(e);case 466:return A8(e);case 481:return d2(globalThis.decodeURIComponent(e));default:return G(e,"base16")}}var h2=Object.values(Gr).map(r=>r.decoder),v8=function(){let r=h2[0].or(h2[1]);return h2.slice(2).forEach(e=>r=r.or(e)),r}();function I3(r){if(!dn(r))throw new Error("invalid ip address");return l2(r)}function S8(r){let e=S3(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!dn(e))throw new Error("invalid ip address");return e}function y2(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function P3(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function d2(r){let e=G(r),t=Uint8Array.from(qe(e.length));return ve([t,e],t.length+e.length)}function p2(r){let e=Be(r);if(r=r.slice(ce(e)),r.length!==e)throw new Error("inconsistent lengths");return _(r)}function I8(r){let e;r[0]==="Q"||r[0]==="1"?e=ue(W.decode(`z${r}`)).bytes:e=Z.parse(r).multihash.bytes;let t=Uint8Array.from(qe(e.length));return ve([t,e],t.length+e.length)}function A8(r){let e=v8.decode(r),t=Uint8Array.from(qe(e.length));return ve([t,e],t.length+e.length)}function P8(r){let e=Be(r),t=r.slice(ce(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+_(t,"base64url")}function T8(r){let e=Be(r),t=r.slice(ce(e));if(t.length!==e)throw new Error("inconsistent lengths");return _(t,"base58btc")}function _8(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=it.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=y2(n);return ve([t,o],t.length+o.length)}function R8(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=it.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=y2(n);return ve([t,o],t.length+o.length)}function A3(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=_(e,"base32"),o=P3(t);return`${n}:${o}`}function T3(r){r=w2(r);let e=[],t=[],n=null,o=r.split("/").slice(1);if(o.length===1&&o[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let i=0;i<o.length;i++){let s=o[i],c=j(s);if(c.size===0){e.push([c.code]),t.push([c.code]);continue}if(i++,i>=o.length)throw new Sn("invalid address: "+r);if(c.path===!0){n=w2(o.slice(i).join("/")),e.push([c.code,g2(c.code,n)]),t.push([c.code,n]);break}let a=g2(c.code,o[i]);e.push([c.code,a]),t.push([c.code,m2(c.code,a)])}return{string:_3(t),bytes:In(e),tuples:e,stringTuples:t,path:n}}function b2(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let i=Be(r,o),s=ce(i),c=j(i),a=L8(c,r.slice(o+s));if(a===0){e.push([i]),t.push([i]),o+=s;continue}let l=r.slice(o+s,o+s+a);if(o+=a+s,o>r.length)throw new Sn("Invalid address Uint8Array: "+_(r,"base16"));e.push([i,l]);let u=m2(i,l);if(t.push([i,u]),c.path===!0){n=u;break}}return{bytes:Uint8Array.from(r),string:_3(t),tuples:e,stringTuples:t,path:n}}function _3(r){let e=[];return r.map(t=>{let n=j(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),w2(e.join("/"))}function In(r){return ve(r.map(e=>{let t=j(e[0]),n=Uint8Array.from(qe(t.code));return e.length>1&&e[1]!=null&&(n=ve([n,e[1]])),n}))}function L8(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=Be(e instanceof Uint8Array?e:Uint8Array.from(e));return t+ce(t)}}function w2(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}var Sn=class extends Error{static name="ParseError";name="ParseError";constructor(e){super(`Error parsing address: ${e}`)}};var C8=Symbol.for("nodejs.util.inspect.custom"),E2=Symbol.for("@multiformats/js-multiaddr/multiaddr"),k8=[j("dns").code,j("dns4").code,j("dns6").code,j("dnsaddr").code],x2=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},An=class r{bytes;#e;#r;#i;#a;[E2]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=b2(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=T3(e)}else if(L3(e))t=b2(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=t.bytes,this.#e=t.string,this.#r=t.tuples,this.#i=t.stringTuples,this.#a=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,o,i="",s=j("tcp"),c=j("udp"),a=j("ip4"),l=j("ip6"),u=j("dns6"),f=j("ip6zone");for(let[p,y]of this.stringTuples())p===f.code&&(i=`%${y??""}`),k8.includes(p)&&(t=s.name==="tcp"?"tcp":"udp",o=443,n=`${y??""}${i}`,e=p===u.code?6:4),(p===s.code||p===c.code)&&(t=j(p).name==="tcp"?"tcp":"udp",o=parseInt(y??"")),(p===a.code||p===l.code)&&(t=j(p).name==="tcp"?"tcp":"udp",n=`${y??""}${i}`,e=p===l.code?6:4);if(e==null||t==null||n==null||o==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:e,host:n,transport:t,port:o}}protos(){return this.#r.map(([e])=>Object.assign({},j(e)))}protoCodes(){return this.#r.map(([e])=>e)}protoNames(){return this.#r.map(([e])=>j(e).name)}tuples(){return this.#r.map(([e,t])=>t==null?[e]:[e,t])}stringTuples(){return this.#i.map(([e,t])=>t==null?[e]:[e,t])}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,o))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(In(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===kr.p2p.code&&e.push([n,o]),n===kr["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?_(W.decode(`z${n}`),"base58btc"):_(Z.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#a}equals(e){return X(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(i=>i.resolvable);if(t==null)return[this];let n=R3.get(t.name);if(n==null)throw new x2(`no available resolver for ${t.name}`);return(await n(this,e)).map(i=>or(i))}nodeAddress(){let e=this.toOptions();if(e.transport!=="tcp"&&e.transport!=="udp")throw new Error(`multiaddr must have a valid format - no protocol with name: "${e.transport}". Must have a valid transport protocol: "{tcp, udp}"`);return{family:e.family,address:e.host,port:e.port}}isThinWaistAddress(e){let t=(e??this).protos();return!(t.length!==2||t[0].code!==4&&t[0].code!==41||t[1].code!==6&&t[1].code!==273)}[C8](){return`Multiaddr(${this.#e})`}};var R3=new Map;function L3(r){return!!r?.[E2]}function or(r){return new An(r)}function C3(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function g1(r){if(r.id==null)throw new Error("Invalid peer in message");let e=ue(r.id);return{id:ke(e),multiaddrs:(r.multiaddrs??[]).map(t=>or(t))}}var Pn=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:o,queryManager:i,routingTable:s,providers:c,logPrefix:a}=t;this.components=e,this.log=e.logger.forComponent(`${a}:content-routing`),this.network=n,this.peerRouting=o,this.queryManager=i,this.routingTable=s,this.providers=c,this.findProviders=e.metrics?.traceFunction("libp2p.kadDHT.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PROVIDER"&&(u.providers??=[],u.providers.push(...l.providers.map(f=>f.id.toString()))),u)})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.kadDHT.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PEER_RESPONSE"&&l.messageName==="ADD_PROVIDER"&&(u.providers??=[],u.providers.push(l.from.toString())),u)})??this.provide}async*provide(e,t,n={}){this.log("provide %s",e);let o=e.multihash.bytes;await this.providers.addProvider(e,this.components.peerId);let i={type:z.ADD_PROVIDER,key:o,providers:[C3({id:this.components.peerId,multiaddrs:t})]},s=0,c=a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let l=[];this.log("putProvider %s to %p",e,a.peer.id);try{this.log("sending provider record for %s to %p",e,a.peer.id);for await(let u of this.network.sendMessage(a.peer.id,i,{...n,path:a.path??-1}))u.name==="PEER_RESPONSE"&&(this.log("sent provider record for %s to %p",e,a.peer.id),s++),l.push(u)}catch(u){this.log.error("error sending provide record to peer %p",a.peer.id,u),l.push(Ue({from:a.peer.id,error:u},n))}return l};yield*At(this.peerRouting.getClosestPeers(o,n),a=>It(a,l=>c(l)),a=>$t(a,{ordered:!1,concurrency:ur}),async function*(a){for await(let l of a)yield*l}),this.log("sent provider records to %d peers",s)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,o=0,i=e.multihash.bytes,s=this;this.log("findProviders %c",e);let c=await this.providers.getProviders(e);if(c.length>0){let u=[];for(let f of c.slice(0,n))try{let h=await this.components.peerStore.get(f);u.push({id:f,multiaddrs:h.addresses.map(({multiaddr:p})=>p)})}catch(h){if(h.name!=="NotFoundError")throw h;this.log("no peer store entry for %p",f)}if(yield Wr({from:this.components.peerId,messageType:z.GET_PROVIDERS,providers:u,path:-1},t),yield pi({from:this.components.peerId,providers:u},t),o+=u.length,o>=n)return}let a=async function*({peer:u,signal:f,path:h}){let p={type:z.GET_PROVIDERS,key:i};yield*s.network.sendRequest(u,p,{...t,signal:f,path:h})},l=new tt(c);for await(let u of this.queryManager.run(i,a,t))if(yield u,u.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",u.providers.length,e,u.closer.length);let f=[];for(let h of u.providers)l.has(h.id)||(l.add(h.id),f.push(h));if(f.length>0&&(yield pi({from:u.from,providers:f},t),o+=f.length,o>=n))return}}};function Qe(r){let e=new globalThis.AbortController;function t(){e.abort();for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}for(let i of r){if(i?.aborted===!0){t();break}i?.addEventListener!=null&&i.addEventListener("abort",t)}function n(){for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}let o=e.signal;return o.clear=n,o}var Dr=class{movingAverage;variance;deviation;forecast;timeSpan;previousTime;constructor(e){this.timeSpan=e,this.movingAverage=0,this.variance=0,this.deviation=0,this.forecast=0}alpha(e,t){return 1-Math.exp(-(e-t)/this.timeSpan)}push(e,t=Date.now()){if(this.previousTime!=null){let n=this.alpha(t,this.previousTime),o=e-this.movingAverage,i=n*o;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+o*i),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*o}else this.movingAverage=e;this.previousTime=t}};var D8=1.2,N8=2,B8=5e3,bt=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;constructor(e={}){this.success=new Dr(e.interval??5e3),this.failure=new Dr(e.interval??5e3),this.next=new Dr(e.interval??5e3),this.failureMultiplier=e.failureMultiplier??N8,this.timeoutMultiplier=e.timeoutMultiplier??D8,this.minTimeout=e.minTimeout??B8,e.metricName!=null&&(this.metric=e.metrics?.registerMetricGroup(e.metricName))}getTimeoutSignal(e={}){let t=Math.max(Math.round(this.next.movingAverage*(e.timeoutFactor??this.timeoutMultiplier)),this.minTimeout),n=AbortSignal.timeout(t),o=Qe([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 Tn=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function k3(r,e){let t=M1();r.sink(t).catch(async s=>{await t.end(s)}),r.sink=async s=>{for await(let c of s)await t.push(c);await t.end()};let n=r.source;r.source[Symbol.iterator]!=null?n=r.source[Symbol.iterator]():r.source[Symbol.asyncIterator]!=null&&(n=r.source[Symbol.asyncIterator]());let o=new te;return{read:async s=>{if(s?.signal?.throwIfAborted(),s?.bytes==null){let{done:a,value:l}=await at(n.next(),s?.signal);return a===!0?null:l}for(;o.byteLength<s.bytes;){let{value:a,done:l}=await at(n.next(),s?.signal);if(l===!0)throw new Tn("unexpected end of input");o.append(a)}let c=o.sublist(0,s.bytes);return o.consume(s.bytes),c},write:async(s,c)=>{c?.signal?.throwIfAborted(),s instanceof Uint8Array?await t.push(s,c):await t.push(s.subarray(),c)},unwrap:()=>{if(o.byteLength>0){let s=r.source;r.source=async function*(){e?.yieldBytes===!1?yield o:yield*o,yield*s}()}return r}}}var _n=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Rn=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Ln=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function D3(r,e={}){let t=k3(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=ce(e.maxDataLength));let n=e?.lengthDecoder??Be,o=e?.lengthEncoder??qe;return{read:async s=>{let c=-1,a=new te;for(;;){a.append(await t.read({...s,bytes:1}));try{c=n(a)}catch(l){if(l instanceof RangeError)continue;throw l}if(c<0)throw new _n("Invalid message length");if(e?.maxLengthLength!=null&&a.byteLength>e.maxLengthLength)throw new Ln("message length length too long");if(c>-1)break}if(e?.maxDataLength!=null&&c>e.maxDataLength)throw new Rn("message length too long");return t.read({...s,bytes:c})},write:async(s,c)=>{await t.write(new te(o(s.byteLength),s),c)},writeV:async(s,c)=>{let a=new te(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(a,c)},unwrap:()=>t.unwrap()}}function v2(r,e){let t=D3(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(c=>i.encode(c)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var Cn=class extends Re{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 bt({...t.timeout??{},metrics:e.metrics,metricName:`${t.metricsPrefix}_network_message_send_times_milliseconds`}),this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_errors_total`)},this.sendRequest=e.metrics?.traceFunction("libp2p.kadDHT.sendRequest",this.sendRequest.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendRequest,this.sendMessage=e.metrics?.traceFunction("libp2p.kadDHT.sendMessage",this.sendMessage.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendMessage}async start(){this.running||(this.running=!0)}async stop(){this.running=!1}isStarted(){return this.running}async*sendRequest(e,t,n){if(!this.running)return;let o=t.type;if(o==null)throw new V("Message type was missing");this.log("sending %s to %p",t.type,e),yield di({to:e,type:o,path:n.path},n);let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),i=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n);let a=await this._writeReadMessage(i,t,n);i.close(n).catch(l=>{this.log.error("error closing stream to %p",e,l),i?.abort(l)}),yield Wr({from:e,messageType:a.type,closer:a.closer.map(g1),providers:a.providers.map(g1),record:a.record==null?void 0:le.deserialize(a.record),path:n.path},n)}catch(c){this.metrics.errors?.increment({[o]:!0}),i?.abort(c),n.signal?.aborted!==!0&&this.log.error("could not send %s to %p - %e",t.type,e,c),yield Ue({from:e,error:c,path:n.path},n)}finally{this.timeout.cleanUp(s)}}async*sendMessage(e,t,n){if(!this.running)return;let o=t.type;if(o==null)throw new V("Message type was missing");this.log("sending %s to %p",t.type,e),yield di({to:e,type:o,path:n.path},n);let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),i=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n),await this._writeMessage(i,t,n),i.close(n).catch(a=>{this.log.error("error closing stream to %p",e,a),i?.abort(a)}),yield Wr({from:e,messageType:o,path:n.path},n)}catch(c){this.metrics.errors?.increment({[o]:!0}),i?.abort(c),yield Ue({from:e,error:c,path:n.path},n)}finally{this.timeout.cleanUp(s)}}async _writeMessage(e,t,n){await v2(e).write(t,ct,n)}async _writeReadMessage(e,t,n){let o=v2(e);await o.write(t,ct,n);let i=await o.read(ct,n);return i.closer.forEach(s=>{this.safeDispatchEvent("peer",{detail:g1(s)})}),i.providers.forEach(s=>{this.safeDispatchEvent("peer",{detail:g1(s)})}),i}};function De(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=he(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}function Mt(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 Ut=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=-1){let n=await ye(e.id);this.addWithKadId(e,n,t)}addWithKadId(e,t,n=-1){if(this.peerDistances.find(s=>s.peer.id.equals(e.id))!=null)return;let o={peer:e,distance:De(this.originDhtKey,t),path:n},i=!1;for(let s=0;s<this.peerDistances.length;s++){let c=Mt(this.peerDistances[s].distance,o.distance);if(c===0||c===1){i=!0,this.peerDistances.splice(s,0,o);break}}i||this.peerDistances.push(o),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e){if(this.length===0)return!0;let t=await ye(e),n=De(t,this.originDhtKey),o=this.peerDistances[this.peerDistances.length-1].distance;return Mt(n,o)===-1}async anyCloser(e){return e.length===0?!1:Promise.any(e.map(async t=>this.isCloser(t)))}};var kn=class{log;routingTable;network;validators;queryManager;peerStore;peerId;constructor(e,t){this.routingTable=t.routingTable,this.network=t.network,this.validators=t.validators,this.queryManager=t.queryManager,this.peerStore=e.peerStore,this.peerId=e.peerId,this.log=e.logger.forComponent(`${t.logPrefix}:peer-routing`),this.findPeer=e.metrics?.traceFunction("libp2p.kadDHT.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.kadDHT.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async findPeerLocal(e){let t,n=await this.routingTable.find(e);if(n!=null){this.log("findPeerLocal found %p in routing table",e);try{t=await this.peerStore.get(n)}catch(o){if(o.name!=="NotFoundError")throw o}}if(t==null)try{t=await this.peerStore.get(e)}catch(o){if(o.name!=="NotFoundError")throw o}if(t!=null)return this.log("findPeerLocal found %p in peer store",e),{id:t.id,multiaddrs:t.addresses.map(o=>o.multiaddr)}}async*_getValueSingle(e,t,n){let o={type:z.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=g3(e);for await(let o of this._getValueSingle(e,n,{...t,path:-1}))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let i=cn(o.record.value),s=u3(i);if(!s.equals(e))throw new nt("public key does not match id");if(s.publicKey==null)throw new nt("public key missing");yield Yr({from:e,value:o.record.value},t)}throw new Pt(`Node not responding with its public key: ${e.toString()}`)}async*findPeer(e,t={}){if(this.log("findPeer %p",e),t.useCache!==!1){let o=await this.findPeerLocal(e);if(o!=null){this.log("found local"),yield V1({from:this.peerId,peer:o,path:-1},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,i=async function*({peer:s,signal:c,path:a}){let l={type:z.FIND_NODE,key:e.toMultihash().bytes};for await(let u of o.network.sendRequest(s,l,{...t,signal:c,path:a}))if(yield u,u.name==="PEER_RESPONSE"){let f=u.closer.find(h=>h.id.equals(e));f!=null&&(yield V1({from:u.from,peer:f,path:u.path},t))}};for await(let s of this.queryManager.run(e.toMultihash().bytes,i,t))s.name==="FINAL_PEER"&&(n=!0),yield s}n||(yield Ue({from:this.peerId,error:new Ve("Not found")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await Bt(e),o=this.routingTable.closestPeers(n),i=this,s=new Ut(n,this.routingTable.kBucketSize);await Promise.all(o.map(async a=>{await s.add({id:a,multiaddrs:[]},-1)}));let c=async function*({peer:a,signal:l,path:u}){i.log("closerPeersSingle %s from %p",_(e,"base32"),a);let f={type:z.FIND_NODE,key:e};yield*i.network.sendRequest(a,f,{...t,signal:l,path:u})};for await(let a of this.queryManager.run(e,c,t))a.name==="PEER_RESPONSE"&&await Promise.all(a.closer.map(async l=>{await s.add(l,a.path)})),yield a;this.log("found %d peers close to %b",s.length,e);for(let{peer:a,path:l}of s.peers)yield V1({from:this.peerId,peer:a,path:l},t)}async*getValueOrPeers(e,t,n){for await(let o of this._getValueSingle(e,t,n)){if(o.name==="PEER_RESPONSE"&&o.record!=null)try{await this._verifyRecordOnline(o.record)}catch{let s="invalid record received, discarded";this.log(s),yield Ue({from:o.from,error:new Pt(s),path:n.path},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new K1("invalid record received");await Lr(this.validators,new le(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=[];try{let a=ue(e),l=ke(a),u=await this.peerStore.get(l);n.push({id:u.id,multiaddrs:u.addresses.map(({multiaddr:f})=>f)})}catch{}let o=await Bt(e),i=this.routingTable.closestPeers(o),s=await ye(t),c=De(s,o);for(let a of i){let l=await ye(a),u=De(l,o);if(Mt(u,c)===-1)try{let f=await this.peerStore.get(a);n.push({id:a,multiaddrs:f.addresses.map(({multiaddr:h})=>h)})}catch(f){if(f.name!=="NotFoundError")throw f}}return n.length>0?this.log("getCloserPeersOffline found %d peer(s) closer to %b than %p",n.length,e,t):this.log("getCloserPeersOffline could not find peer closer to %b than %p with %d peers in the routing table",e,t,this.routingTable.size),n}};var Dn=class{log;datastore;datastorePrefix;lock;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:providers`),this.datastorePrefix=`${t.datastorePrefix}/provider`,this.datastore=e.datastore,this.lock=t.lock}async addProvider(e,t,n){let o=await this.lock.readLock();try{this.log("%p provides %s",t,e),await this.writeProviderEntry(e,t)}finally{o()}}async removeProvider(e,t,n){let o=await this.lock.writeLock();try{let i=wn(this.datastorePrefix,e,t);this.log("%p no longer provides %s",t,e),await this.datastore.delete(i)}finally{o()}}async getProviders(e,t){let n=await this.lock.readLock();try{this.log("get providers for %c",e);let o=await this.loadProviders(e,t);return this.log("got %d providers for %c",o.size,e),[...o.keys()]}finally{n()}}async writeProviderEntry(e,t,n=new Date,o){let i=wn(this.datastorePrefix,e,t),s=qe(n.getTime());await this.datastore.put(i,s,o)}async loadProviders(e,t){let n=new nr,o=wn(this.datastorePrefix,e);for await(let i of this.datastore.query({prefix:o.toString()},t)){let{peerId:s}=yn(i.key);n.set(s,bn(i.value))}return n}};var O8=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 M8(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let c=[e].flat(),a=[],{addListener:l,removeListener:u}=O8(r),f=(...p)=>{let y=t.multiArgs?p:p[0];t.filter&&!t.filter(y)||(a.push(y),t.count===a.length&&(n(),i(a)))},h=p=>{n(),s(p)};n=()=>{for(let p of c)u(p,f);for(let p of t.rejectionEvents)u(p,h)};for(let p of c)l(p,f);for(let p of t.rejectionEvents)l(p,h);t.signal&&t.signal.addEventListener("abort",()=>{h(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(a)});if(o.cancel=n,typeof t.timeout=="number"){let i=Ft(o,{milliseconds:t.timeout});return i.cancel=n,i}return o}function N3(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=M8(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}var S2=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.name="AbortError",this.code=t??"ABORT_ERR"}};async function Nn(r,e,t,n){let o=new S2(n?.errorMessage,n?.errorCode);return t?.aborted===!0?Promise.reject(o):new Promise((i,s)=>{function c(){t?.removeEventListener("abort",u),r.removeEventListener(e,a),n?.errorEvent!=null&&r.removeEventListener(n.errorEvent,l)}let a=f=>{try{if(n?.filter?.(f)===!1)return}catch(h){c(),s(h);return}c(),i(f)},l=f=>{c(),s(f.detail)},u=()=>{c(),s(o)};t?.addEventListener("abort",u),r.addEventListener(e,a),n?.errorEvent!=null&&r.addEventListener(n.errorEvent,l)})}function I2(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 Bn=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var On=class{deferred;signal;constructor(e){this.signal=e,this.deferred=ae(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new rt)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function U8(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var Mn=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=U8(),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 rt),this.cleanup())}async join(e={}){let t=new On(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 at(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 Kt=class extends Re{concurrency;maxSize;queue;pending;sort;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,e.metricName!=null&&e.metrics?.registerMetricGroup(e.metricName,{calculate:()=>({size:this.queue.length,running:this.pending,queued:this.queue.length-this.pending})}),this.sort=e.sort,this.queue=[],this.emitEmpty=I2(this.emitEmpty.bind(this),1),this.emitIdle=I2(this.emitIdle.bind(this),1)}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.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 Bn;let n=new Mn(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.tryToStartAnother(),n.join(t).then(o=>(this.safeDispatchEvent("completed",{detail:o}),this.safeDispatchEvent("success",{detail:{job:n,result:o}}),o)).catch(o=>{if(n.status==="queued"){for(let i=0;i<this.queue.length;i++)if(this.queue[i]===n){this.queue.splice(i,1);break}}throw this.safeDispatchEvent("error",{detail:o}),this.safeDispatchEvent("failure",{detail:{job:n,error:o}}),o})}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new rt)}),this.clear()}async onEmpty(e){this.size!==0&&await Nn(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await Nn(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await Nn(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=B1({objectMode:!0}),n=a=>{a!=null?this.abort():this.clear(),t.end(a)},o=a=>{a.detail!=null&&t.push(a.detail)},i=a=>{n(a.detail)},s=()=>{n()},c=()=>{n(new rt("Queue aborted"))};this.addEventListener("completed",o),this.addEventListener("error",i),this.addEventListener("idle",s),e?.signal?.addEventListener("abort",c);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("error",i),this.removeEventListener("idle",s),e?.signal?.removeEventListener("abort",c),n()}}};async function*O3(r){let{key:e,startingPeer:t,ourPeerId:n,signal:o,query:i,alpha:s,path:c,numPaths:a,queryFuncTimeout:l,log:u,peersSeen:f,connectionManager:h}=r,p=new Kt({concurrency:s,sort:(E,L)=>Mt(E.options.distance,L.options.distance)}),y=await Bt(e);function g(E,L){if(E==null)return;f.add(E);let K=De(L,y);p.add(async()=>{let x=[o];l!=null&&x.push(AbortSignal.timeout(l));let d=Qe(x);try{for await(let b of i({...r,key:e,peer:E,signal:d,path:c,numPaths:a})){if(d.aborted)return;if(b.name==="PEER_RESPONSE")for(let P of b.closer){if(f.has(P.id)){u.trace("already seen %p in query",P.id);continue}if(n.equals(P.id)){u("not querying ourselves");continue}if(!await h.isDialable(P.multiaddrs)){u("not querying undialable peer");continue}let T=await ye(P.id),R=De(T,y);if(Mt(R,K)!==-1){u.trace("skipping %p as they are not closer to %b than %p",P.id,e,E);continue}u.trace("querying closer peer %p",P.id),g(P.id,T)}p.safeDispatchEvent("completed",{detail:b})}}catch(b){if(!o.aborted)return Ue({from:E,error:b,path:c},r)}finally{d.clear()}},{distance:K}).catch(x=>{u.error(x)})}g(t,await ye(t));for await(let E of p.toGenerator({signal:o}))E!=null&&(yield E)}var Un=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;allowQueryWithZeroPeers;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??T1,this.alpha=t.alpha??ur,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 a=AbortSignal.timeout(as);n={...n,signal:a}}let o=new AbortController,i=Qe([this.shutDownController.signal,o.signal,n.signal]);o.signal;let s=this.logger.forComponent(`${this.logPrefix}:query:`+_(e,"base58btc")),c=!1;try{this.routingTable.size===0&&!this.allowQueryWithZeroPeers&&(s("routing table was empty, waiting for some peers before running%s query",n.isSelfQuery===!0?" self":""),await N3(this.routingTable,"peer:add",{signal:i,filter:p=>!this.peerId.equals(p.detail)}),s("routing table has peers, continuing with%s query",n.isSelfQuery===!0?" self":"")),n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(s("waiting for initial query-self query before continuing"),await at(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),s("query:start");let a=await Bt(e),l=this.routingTable.closestPeers(a),u=l.slice(0,Math.min(this.disjointPaths,l.length));if(l.length===0){s.error("running query with no peers");return}let f=new tt,h=u.map((p,y)=>O3({...n,key:e,startingPeer:p,ourPeerId:this.peerId,signal:i,query:t,path:y,numPaths:u.length,alpha:this.alpha,queryFuncTimeout:n.queryFuncTimeout,log:s,peersSeen:f,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let p of U1(...h)){if(p.name==="QUERY_ERROR"&&s.error("query error",p.error),p.name==="PEER_RESPONSE")for(let y of[...p.closer,...p.providers])await this.connectionManager.isDialable(y.multiaddrs,{signal:i})&&await this.routingTable.add(y.id,{signal:i});yield p,i.throwIfAborted()}c=!0}catch(a){if(this.running)throw a}finally{c||(s("query exited early"),o.abort()),i.clear(),s("query:done")}}};function K8(r){return r[Symbol.asyncIterator]!=null}function q8(r){if(K8(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 Kn=q8;function F8(r){return r[Symbol.asyncIterator]!=null}function V8(r,e){return F8(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 M3=V8;var qn=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??T1,this.interval=t.interval??rs,this.initialInterval=t.initialInterval??ns,this.queryTimeout=t.queryTimeout??os,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=xn(this.querySelf.bind(this),t.operationMetrics,"SELF_QUERY")}isStarted(){return this.running}start(){this.running||(this.running=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.initialInterval))}stop(){this.running=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.running){this.log("skip self-query because we are not started");return}if(this.querySelfPromise!=null)return this.log("joining existing self query"),this.querySelfPromise.promise;if(this.querySelfPromise=ae(),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=Qe(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 At(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),s=>M3(s,this.count),async s=>Kn(s)),i=Date.now()-n;this.log("self-query found %d peers in %dms",o,i),this.events.dispatchEvent(new CustomEvent("kad-dht:query:self",{detail:{peers:o,duration:i}}))}catch(n){this.log.error("self-query error",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.running&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.interval))}};var Fn=class extends Re{log;reprovideQueue;maxQueueSize;datastore;timeout;reprovideTimeout;running;shutdownController;reprovideThreshold;contentRouting;datastorePrefix;addressManager;validity;interval;lock;peerId;constructor(e,t){super(),this.log=e.logger.forComponent(`${t.logPrefix}:reprovider`),this.peerId=e.peerId,this.reprovideQueue=new Kt({concurrency:t.concurrency??J2,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new bt({...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??X2,this.maxQueueSize=t.maxQueueSize??es,this.validity=t.validity??Z2,this.interval=t.interval??ts,this.contentRouting=t.contentRouting,this.lock=t.lock,this.running=!1,this.reprovide=xn(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,this.timeout=setTimeout(()=>{this.cleanUp().catch(e=>{this.log.error("error running reprovide/cleanup - %e",e)})},this.interval))}stop(){this.running=!1,this.reprovideQueue.clear(),clearTimeout(this.timeout),this.shutdownController?.abort()}async cleanUp(){let e=await this.lock.writeLock();try{this.safeDispatchEvent("reprovide:start");for await(let t of this.datastore.query({prefix:this.datastorePrefix}))try{let{cid:n,peerId:o}=yn(t.key),i=bn(t.value).getTime(),s=i+this.validity,c=Date.now(),a=c>s;this.log.trace("comparing: %d < %d = %s %s",i,c-this.validity,a,a?"(expired)":""),a&&await this.datastore.delete(t.key),this.peerId.equals(o)&&c-s<this.reprovideThreshold&&this.queueReprovide(n).catch(l=>{this.log.error("could not reprovide %c - %e",n,l)})}catch(n){this.log.error("error processing datastore key %s - %e",t.key,n.message)}this.log("reprovide/cleanup successful")}finally{e(),this.safeDispatchEvent("reprovide:end"),this.running&&(this.timeout=setTimeout(()=>{this.cleanUp().catch(t=>{this.log.error("error running re-provide - %e",t)})},this.interval))}}async queueReprovide(e){if(!this.running)return;this.log.trace("waiting for queue capacity before adding %c to re-provide queue",e),await this.reprovideQueue.onSizeLessThan(this.maxQueueSize);let t=this.reprovideQueue.queue.find(n=>n.options.cid.equals(e));if(t!=null)return this.log.trace("not adding %c to re-provide queue - already in queue",e),t.join();this.log.trace("adding %c to re-provide queue",e),this.reprovideQueue.add(async n=>{if(n.signal?.throwIfAborted(),!this.running)return;this.log.trace("re-providing %c",e);let o=this.reprovideTimeout.getTimeoutSignal(n);try{await this.reprovide(n.cid,n)}finally{this.reprovideTimeout.cleanUp(o)}this.log.trace("re-provided %c",e)},{signal:this.shutdownController?.signal,cid:e}).catch(n=>{this.log.error("could not re-provide key %c - %e",e,n)})}async reprovide(e,t){await Mr(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var y1=class extends Kt{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};var z8=20,H8=5e3,G8="kad-close",$8=50,Vn=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??H8,this.peerSetSize=t.peerSetSize??z8,this.closeTagName=t.closeTagName??G8,this.closeTagValue=t.closeTagValue??$8,this.closestPeers=new tt,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await ye(this.components.peerId);this.newPeers=new Ut(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 tt(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},[Io]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[Io]:void 0}})})])}};function w1(r){return Array.isArray(r?.peers)}var zn=class{root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e){this.prefixLength=e.prefixLength??U3,this.kBucketSize=e.kBucketSize??A2,this.splitThreshold=e.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=e.numberOfOldContactsToPing??K3,this.lastPingThreshold=e.lastPingThreshold??q3,this.ping=e.ping,this.verify=e.verify,this.onAdd=e.onAdd,this.onRemove=e.onRemove,this.addingPeerMap=new nr,this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e){this.localPeer={peerId:e,kadId:await ye(e),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await ye(e),lastPing:0},o=this.addingPeerMap.get(e);if(o!=null)return o;try{let i=this._add(n,t);this.addingPeerMap.set(e,i),await i}finally{this.addingPeerMap.delete(e)}}async _add(e,t){let n=this._determineBucket(e.kadId);if(this._indexOf(n,e.kadId)>-1)return;if(n.peers.length===this.splitThreshold&&n.depth<this.prefixLength){await this._split(n),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!j8(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n);return}await this.verify(e,t)&&(e.lastPing=Date.now(),await this._add(e,t));return}let o=n.peers.filter(s=>!(s.peerId.equals(this.localPeer?.peerId)||s.lastPing>Date.now()-this.lastPingThreshold)).sort((s,c)=>s.lastPing<c.lastPing?-1:s.lastPing>c.lastPing?1:0).slice(0,this.numberOfNodesToPing),i=!1;for await(let s of this.ping(o,t))i=!0,await this.remove(s.kadId);i&&await this._add(e,t)}*closest(e,t=this.kBucketSize){let n=new Ut(e,t);for(let o of this.toIterable())n.addWithKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*It(n.peers,({peer:o})=>o.id)}count(){function e(t){if(w1(t))return t.peers.length;let n=0;return t.left!=null&&(n+=e(t.left)),t.right!=null&&(n+=e(t.right)),n}return e(this.root)}get(e){let t=this._determineBucket(e),n=this._indexOf(t,e);return t.peers[n]}async remove(e){let t=this._determineBucket(e),n=this._indexOf(t,e);if(n>-1){let o=t.peers.splice(n,1)[0];await this.onRemove?.(o,t)}}*toIterable(){function*e(t){if(w1(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+_(De(e,t),"base16"))}_determineBucket(e){let t=_(e,"base2");function n(o,i=0){return w1(o)?o:t[i]==="0"?n(o.left,i+1):n(o.right,i+1)}return n(this.root)}_indexOf(e,t){return e.peers.findIndex(n=>X(n.kadId,t))}async _split(e){let t={prefix:"0",depth:e.depth+1,peers:[]},n={prefix:"1",depth:e.depth+1,peers:[]};for(let o of e.peers)_(o.kadId,"base2")[e.depth]==="0"?(t.peers.push(o),await this.onMove?.(o,e,t)):(n.peers.push(o),await this.onMove?.(o,e,n));Q8(e,t,n)}};function Q8(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function j8(r,e){return r.lastPing<Date.now()-e}var A2=20,U3=6;var W8=20,Y8=100,K3=3;var Z8=20,X8=100,F3="kad-peer",J8=1,q3=6e5,e7=!0,t7=1e3,Hn=class extends Re{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??A2,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??F3,this.peerTagValue=t.peerTagValue??J8,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??e7,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??t7,this.pingOldContactQueue=new y1({concurrency:t.pingOldContactConcurrency??Z8,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??X8}),this.pingOldContactTimeout=new bt({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new y1({concurrency:t.pingNewContactConcurrency??W8,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??Y8}),this.pingNewContactTimeout=new bt({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new zn({kBucketSize:t.kBucketSize,prefixLength:t.prefixLength,splitThreshold:t.splitThreshold,numberOfOldContactsToPing:t.numberOfOldContactsToPing,lastPingThreshold:t.lastPingThreshold,ping:this.pingOldContacts,verify:this.verifyNewContact,onAdd:this.peerAdded,onRemove:this.peerRemoved}),this.closestPeerTagger=new Vn(this.components,{logPrefix:t.logPrefix,routingTable:this,peerSetSize:t.closestPeerSetSize,refreshInterval:t.closestPeerSetRefreshInterval,closeTagName:t.closeTagName,closeTagValue:t.closeTagValue}),this.components.metrics!=null&&(this.metrics={routingTableSize:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_size`),routingTableKadBucketTotal:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_total`),routingTableKadBucketAverageOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_average_occupancy`),routingTableKadBucketMinOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_min_occupancy`),routingTableKadBucketMaxOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_occupancy`),routingTableKadBucketMaxDepth:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_depth`),kadBucketEvents:this.components.metrics.registerCounterGroup(`${t.metricsPrefix}_kad_bucket_events_total`)})}isStarted(){return this.running}async start(){this.running||(this.running=!0,await Or(this.closestPeerTagger),await this.kb.addSelfPeer(this.components.peerId))}async afterStart(){Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let e=0;for(let t of await this.components.peerStore.all({filters:[n=>n.protocols.includes(this.protocol)&&n.tags.has(F3)],limit:this.populateFromDatastoreLimit})){if(!this.running)return;try{await this.add(t.id),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(t.id,{tags:{[this.peerTagName]:void 0}})}}this.log("added %d peer store peers to the routing table",e)}).catch(e=>{this.log.error("error adding peer store peers to the routing table %e",e)})}async stop(){this.running=!1,await I1(this.closestPeerTagger),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort()}async peerAdded(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_removed:!0}),this.safeDispatchEvent("peer:remove",{detail:e.peerId})}async*pingOldContacts(e,t){if(!this.running)return;let n=[];for(let o of e){if(this.kb.get(o.kadId)==null){this.log("asked to ping contact %p that was not in routing table",o.peerId);continue}this.metrics?.kadBucketEvents.increment({ping_old_contact:!0}),n.push(async()=>{let i=this.pingOldContactQueue.find(o.peerId);if(i!=null)return this.log("asked to ping contact %p was already being pinged",o.peerId),await i.join(t)?void 0:o;if(!await this.pingOldContactQueue.add(async c=>{let a=this.pingOldContactTimeout.getTimeoutSignal(),l=Qe([a,c?.signal]);try{return await this.pingContact(o,c)}catch{return this.metrics?.kadBucketEvents.increment({ping_old_contact_error:!0}),!0}finally{this.pingOldContactTimeout.cleanUp(a),l.clear()}},{peerId:o.peerId,signal:t?.signal}))return o})}for await(let o of $t(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=Qe([n,t?.signal]);try{let i=this.pingNewContactQueue.find(e.peerId);return i!=null?(this.log("joining existing ping to add new peer %p to routing table",e.peerId),await i.join({signal:o})):await this.pingNewContactQueue.add(async s=>(this.metrics?.kadBucketEvents.increment({ping_new_contact:!0}),this.log("pinging new peer %p before adding to routing table",e.peerId),this.pingContact(e,s)),{peerId:e.peerId,signal:o})}catch{return this.log.trace("tried to add peer %p but they were not online",e.peerId),this.metrics?.kadBucketEvents.increment({ping_new_contact_error:!0}),!1}finally{this.pingNewContactTimeout.cleanUp(n),o.clear()}}async pingContact(e,t){let n;try{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){let t=await ye(e);return this.kb.get(t)?.peerId}closestPeer(e){let t=this.closestPeers(e,1);if(t.length>0)return t[0]}closestPeers(e,t=this.kBucketSize){return this.kb==null?[]:[...this.kb.closest(e,t)]}async add(e,t){if(this.kb==null)throw new Error("RoutingTable is not started");await this.kb.add(e,t)}async remove(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await ye(e);await this.kb.remove(t)}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0,o=20,i=0;function s(c){if(w1(c)){c.depth>n&&(n=c.depth),t++,e+=c.peers.length,c.peers.length<o&&(o=c.peers.length),c.peers.length>i&&(i=c.peers.length);return}s(c.left),s(c.right)}s(this.kb.root),this.metrics.routingTableSize.update(e),this.metrics.routingTableKadBucketTotal.update(t),this.metrics.routingTableKadBucketAverageOccupancy.update(Math.round(e/t)),this.metrics.routingTableKadBucketMinOccupancy.update(o),this.metrics.routingTableKadBucketMaxOccupancy.update(i),this.metrics.routingTableKadBucketMaxDepth.update(n)}};var V3=[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 Gn=15,$n=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:o,refreshInterval:i,refreshQueryTimeout:s,logPrefix:c}=t;this.log=e.logger.forComponent(`${c}:routing-table:refresh`),this.peerRouting=n,this.routingTable=o,this.refreshInterval=i??is,this.refreshQueryTimeout=s??ss,this.commonPrefixLengthRefreshedAt=[],this.refreshTable=this.refreshTable.bind(this)}async afterStart(){this.log(`refreshing routing table every ${this.refreshInterval}ms`),this.refreshTable(!0)}async stop(){this.refreshTimeoutId!=null&&clearTimeout(this.refreshTimeoutId)}refreshTable(e=!1){this.log("refreshing routing table");let t=this._maxCommonPrefix(),n=this._getTrackedCommonPrefixLengthsForRefresh(t);this.log(`max common prefix length ${t}`),this.log(`tracked CPLs [ ${n.map(o=>o.toISOString()).join(", ")} ]`),Promise.all(n.map(async(o,i)=>{try{if(await this._refreshCommonPrefixLength(i,o,e),this._numPeersForCpl(t)===0){let s=Math.min(2*(i+1),n.length-1);for(let c=i+1;c<s+1;c++)try{await this._refreshCommonPrefixLength(c,o,e)}catch(a){this.log.error(a)}}}catch(s){this.log.error(s)}})).catch(o=>{this.log.error(o)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(o=>{this.log.error(o)})}async _refreshCommonPrefixLength(e,t,n){if(!n&&t.getTime()>Date.now()-this.refreshInterval){this.log("not running refresh for cpl %s as time since last refresh not above interval",e);return}let o=await this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,o,this.routingTable.size);let i=AbortSignal.timeout(this.refreshQueryTimeout);let s=await Kn(this.peerRouting.getClosestPeers(o.toMultihash().bytes,{signal:i}));this.log(`found ${s} peers that were close to imaginary peer %p`,o),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,o,this.routingTable.size)}_getTrackedCommonPrefixLengthsForRefresh(e){e>Gn&&(e=Gn);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}async _generateRandomPeerId(e){if(this.routingTable.kb==null)throw new Error("Routing table not started");if(this.routingTable.kb.localPeer==null)throw new Error("Local peer not set");let t=rn(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),i=ue(o);return ke(i)}async _makePeerId(e,t,n){if(n>Gn)throw new Error(`Cannot generate peer ID for common prefix length greater than ${Gn}`);let s=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1)^32768>>n,c=65535<<16-(n+1),a=s&c|t&~c,l=V3[a],u=new ArrayBuffer(34),f=new DataView(u,0,u.byteLength);return f.setUint8(0,st.code),f.setUint8(1,32),f.setUint32(2,l,!1),new Uint8Array(f.buffer,f.byteOffset,f.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=De(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var Qn=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Nr=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},jn=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},b1=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function Wn(r){return r[Symbol.asyncIterator]!=null}function z3(r,e){if(r.byteLength>e)throw new Nr("Message length too long")}var Zn=r=>{let e=ce(r),t=he(e);return qe(r,t),Zn.bytes=e,t};Zn.bytes=0;function Xn(r,e){e=e??{};let t=e.lengthEncoder??Zn,n=e?.maxDataLength??4194304;function*o(i){z3(i,n);let s=t(i.byteLength);s instanceof Uint8Array?yield s:yield*s,i instanceof Uint8Array?yield i:yield*i}return Wn(r)?async function*(){for await(let i of r)yield*o(i)}():function*(){for(let i of r)yield*o(i)}()}Xn.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??Zn,n=e?.maxDataLength??4194304;return z3(r,n),new te(t(r.byteLength),r)};var ir;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(ir||(ir={}));var P2=r=>{let e=Be(r);return P2.bytes=ce(e),e};P2.bytes=0;function x1(r,e){let t=new te,n=ir.LENGTH,o=-1,i=e?.lengthDecoder??P2,s=e?.maxLengthLength??8,c=e?.maxDataLength??4194304;function*a(){for(;t.byteLength>0;){if(n===ir.LENGTH)try{if(o=i(t),o<0)throw new Qn("Invalid message length");if(o>c)throw new Nr("Message length too long");let l=i.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=ir.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>s)throw new jn("Message length length too long");break}throw l}if(n===ir.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=ir.LENGTH}}}return Wn(r)?async function*(){for await(let l of r)t.append(l),yield*a();if(t.byteLength>0)throw new b1("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*a();if(t.byteLength>0)throw new b1("Unexpected end of input")}()}x1.fromReader=(r,e)=>{let t=1,n=async function*(){for(;;)try{let{done:i,value:s}=await r.next(t);if(i===!0)return;s!=null&&(yield s)}catch(i){if(i.code==="ERR_UNDER_READ")return{done:!0,value:null};throw i}finally{t=1}}();return x1(n,{...e??{},onLength:i=>{t=i}})};var Jn=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 _e("Missing key");let n;try{n=Z.decode(t.key)}catch{throw new _e("Invalid CID")}(t.providers==null||t.providers.length===0)&&this.log.error("no providers found in message"),this.log("%p asked us, %p to store provider record for for %c",e,this.peerId,n),await Promise.all(t.providers.map(async o=>{let i=ue(o.id),s=ke(i),c=o.multiaddrs.map(a=>or(a));if(!e.equals(s)){this.log("invalid provider peer %p from %p",o.id,e);return}if(o.multiaddrs.length<1){this.log("no valid addresses for provider %p. Ignore",e);return}this.log.trace("received provider %p for %s (addrs %s)",e,n,c),await this.providers.addProvider(n,s),await this.peerStore.merge(s,{multiaddrs:c})}))}};var eo=class{peerRouting;peerInfoMapper;peerId;addressManager;log;constructor(e,t){let{peerRouting:n,logPrefix:o}=t;this.log=e.logger.forComponent(`${o}:rpc:handlers:find-node`),this.peerId=e.peerId,this.addressManager=e.addressManager,this.peerRouting=n,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(this.log("incoming request from %p for peers closer to %b",e,t.key),t.key==null)throw new _e("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getCloserPeersOffline(t.key,e);X(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(i=>i.decapsulateCode(j("p2p").code))});let o={type:z.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:i})=>i.length).map(i=>({id:i.id.toMultihash().bytes,multiaddrs:i.multiaddrs.map(s=>s.bytes)})),providers:[]};return o.closer.length===0&&this.log("could not find any peers closer to %b than %p",t.key,e),o}};function o7(r){return r[Symbol.asyncIterator]!=null}function i7(r){if(o7(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 H3=i7;var to=class{peerId;peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:o,logPrefix:i}=t;this.log=e.logger.forComponent(`${i}:rpc:handlers:get-providers`),this.peerId=e.peerId,this.peerStore=e.peerStore,this.peerRouting=n,this.providers=o,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new _e("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=Z.decode(t.key)}catch{throw new _e("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[o,i]=await Promise.all([H3(It(await this.providers.getProviders(n),async c=>{let a=await this.peerStore.get(c);return{id:a.id,multiaddrs:a.addresses.map(({multiaddr:u})=>u)}})),this.peerRouting.getCloserPeersOffline(t.key,this.peerId)]),s={type:z.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:i.map(this.peerInfoMapper).filter(({id:c,multiaddrs:a})=>a.length>0).map(c=>({id:c.id.toMultihash().bytes,multiaddrs:c.multiaddrs.map(a=>a.bytes)})),providers:o.map(this.peerInfoMapper).filter(({id:c,multiaddrs:a})=>a.length>0).map(c=>({id:c.id.toMultihash().bytes,multiaddrs:c.multiaddrs.map(a=>a.bytes)}))};return this.log("got %s providers %s closerPeers",s.providers.length,s.closer.length),s}async _getAddresses(e){return[]}};var ro=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 _e("Invalid key");let o={type:z.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(y3(n)){this.log("is public key");let c=w3(n),a;try{let l=await this.peerStore.get(c);if(l.id.publicKey==null)throw new Ve("No public key found in key book");a=_t(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(a!=null)return this.log("returning found public key"),o.record=new le(n,a,new Date).serialize(),o}let[i,s]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getCloserPeersOffline(n,e)]);return i!=null&&(this.log("had record for %b in local datastore",n),o.record=i.serialize()),s.length>0&&(this.log("had %s closer peers in routing table",s.length),o.closer=s.map(c=>({id:c.id.toMultihash().bytes,multiaddrs:c.multiaddrs.map(a=>a.bytes)}))),o}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=Ot(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(i){if(i.name==="NotFoundError")return;throw i}let o=le.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>W2){await this.datastore.delete(t);return}return o}};var no=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 oo=class{components;validators;log;datastorePrefix;constructor(e,t){let{validators:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:put-value`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.validators=n}async handle(e,t){let n=t.key;if(this.log("%p asked us to store value for key %b",e,n),t.record==null){let o=`Empty record from: ${e.toString()}`;throw this.log.error(o),new _e(o)}try{let o=le.deserialize(t.record);await Lr(this.validators,o),o.timeReceived=new Date;let i=Ot(this.datastorePrefix,o.key);await this.components.datastore.put(i,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,i)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var io=class{handlers;routingTable;log;metrics;constructor(e,t){this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_errors_total`)},this.log=e.logger.forComponent(`${t.logPrefix}:rpc`),this.routingTable=t.routingTable,this.handlers={[z.GET_VALUE.toString()]:new ro(e,t),[z.PUT_VALUE.toString()]:new oo(e,t),[z.FIND_NODE.toString()]:new eo(e,t),[z.ADD_PROVIDER.toString()]:new Jn(e,t),[z.GET_PROVIDERS.toString()]:new to(e,t),[z.PING.toString()]:new no(e,t)}}async handleMessage(e,t){let n=this.handlers[t.type];if(n==null){this.log.error(`no handler found for message type: ${t.type}`);return}try{return this.metrics.operations?.increment({[t.type]:!0}),await n.handle(e,t)}catch{this.metrics.errors?.increment({[t.type]:!0})}}onIncomingStream(e){let t="unknown";Promise.resolve().then(async()=>{let{stream:n,connection:o}=e,i=o.remotePeer,s=this;await At(n,c=>x1(c),async function*(c){for await(let a of c){let l=ct.decode(a);t=l.type,s.log("incoming %s from %p",l.type,i);let u=await s.handleMessage(i,l);u!=null&&(yield ct.encode(u))}},c=>Xn(c),n)}).catch(n=>{this.log.error("error handling %s RPC message from %p - %e",t,e.connection.remotePeer,n)})}};var so=class extends Re{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 T2=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await Mr(this.dht.provide(e,t))}async cancelReprovide(e){await this.dht.cancelReprovide(e)}async*findProviders(e,t={}){for await(let n of this.dht.findProviders(e,t))n.name==="PROVIDER"&&(yield*n.providers)}async put(e,t,n){await Mr(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 Ve("Could not find value for key")}},_2=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 Ve("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},s7=32,a7=64,ao=class extends Re{protocol;routingTable;providers;network;peerRouting;components;log;running;kBucketSize;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;reprovider;constructor(e,t={}){super();let n=t.logPrefix??"libp2p:kad-dht",o=t.datastorePrefix??"/dht",i=t.metricsPrefix??"libp2p_kad_dht",s={queries:e.metrics?.registerMetricGroup(`${i}_operations_total`,{label:"operation"}),errors:e.metrics?.registerCounterGroup(`${i}_operation_errors_total`,{label:"operation"}),queryTime:e.metrics?.registerMetricGroup(`${i}_operation_time_seconds`,{label:"operation"}),errorTime:e.metrics?.registerMetricGroup(`${i}_operation_error_time_seconds`,{label:"operation"})};this.running=!1,this.components=e,this.log=e.logger.forComponent(n),this.protocol=t.protocol??Y2,this.kBucketSize=t.kBucketSize??20,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??s7,this.maxOutboundStreams=t.maxOutboundStreams??a7,this.peerInfoMapper=t.peerInfoMapper??gn;let c=vo();this.providers=new Dn(e,{...t.providers,logPrefix:n,datastorePrefix:o,lock:c}),this.validators={...i3,...t.validators},this.selectors={...Gs,...t.selectors},this.network=new Cn(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:i}),this.routingTable=new Hn(e,{kBucketSize:t.kBucketSize,pingOldContactTimeout:t.pingOldContactTimeout,pingOldContactConcurrency:t.pingOldContactConcurrency,pingOldContactMaxQueueSize:t.pingOldContactMaxQueueSize,pingNewContactTimeout:t.pingNewContactTimeout,pingNewContactConcurrency:t.pingNewContactConcurrency,pingNewContactMaxQueueSize:t.pingNewContactMaxQueueSize,protocol:this.protocol,logPrefix:n,metricsPrefix:i,prefixLength:t.prefixLength,splitThreshold:t.kBucketSplitThreshold,network:this.network});let a=ae();t.allowQueryWithZeroPeers===!0&&a.resolve(),this.queryManager=new Un(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:n,metricsPrefix:i,initialQuerySelfHasRun:a,routingTable:this.routingTable,allowQueryWithZeroPeers:t.allowQueryWithZeroPeers}),this.peerRouting=new kn(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new En(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:o}),this.contentRouting=new Pn(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new $n(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new io(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:n,metricsPrefix:i,datastorePrefix:o,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new so(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new qn(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:a,operationMetrics:s}),this.reprovider=new Fn(e,{...t.reprovide,logPrefix:n,metricsPrefix:i,datastorePrefix:o,contentRouting:this.contentRouting,lock:c,operationMetrics:s}),this.network.addEventListener("peer",l=>{let u=l.detail;this.onPeerConnect(u).catch(f=>{this.log.error("could not add %p to routing table",u.id,f)}),this.dispatchEvent(new CustomEvent("peer",{detail:u}))}),this.topologyListener.addEventListener("peer",l=>{let u=l.detail;Promise.resolve().then(async()=>{let f=await this.components.peerStore.get(u),h={id:u,multiaddrs:f.addresses.map(({multiaddr:p})=>p),protocols:f.protocols};await this.onPeerConnect(h)}).catch(f=>{this.log.error("could not add %p to routing table - %e",u,f)})}),this.dhtPeerRouting=new _2(this),this.dhtContentRouting=new T2(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",l=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let u=l.detail.peer.addresses.some(({multiaddr:h})=>b3(h)),f=this.getMode();u&&f==="client"?await this.setMode("server"):f==="server"&&!u&&await this.setMode("client")}).catch(u=>{this.log.error("error setting dht server mode",u)})}),this.get=tr(this.get.bind(this),s,"GET_VALUE"),this.findProviders=tr(this.findProviders.bind(this),s,"FIND_PROVIDERS"),this.findPeer=tr(this.findPeer.bind(this),s,"FIND_PEER"),this.getClosestPeers=tr(this.getClosestPeers.bind(this),s,"GET_CLOSEST_PEERS"),this.provide=tr(this.provide.bind(this),s,"PROVIDE"),this.put=tr(this.put.bind(this),s,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[K2]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery"];[q2]=["@libp2p/identify","@libp2p/ping"];get[N2](){return this.dhtContentRouting}get[O2](){return this.dhtPeerRouting}get[B2](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log.trace("ignoring %p as there were no valid addresses in %s after filtering",e.id,e.multiaddrs.map(t=>t.toString()));return}try{await this.routingTable.add(e.id)}catch(t){this.log.error("could not add %p to routing table",e.id,t)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e,t=!1){if(e===this.getMode()&&!t){this.log("already in %s mode",e);return}if(await this.components.registrar.unhandle(this.protocol),e===this.getMode()&&!t){this.log("already in %s mode",e);return}e==="client"?(this.log("enabling client mode while in %s mode",this.getMode()),this.clientMode=!0):(this.log("enabling server mode while in %s mode",this.getMode()),this.clientMode=!1,await this.components.registrar.handle(this.protocol,this.rpc.onIncomingStream.bind(this.rpc),{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running||(this.running=!0,await this.setMode(this.clientMode?"client":"server",!0),await Or(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await Or(this.querySelf))}async stop(){this.running=!1,await I1(this.querySelf,this.queryManager,this.network,this.routingTable,this.routingTableRefresh,this.topologyListener,this.reprovider)}async*put(e,t,n={}){yield*this.contentFetching.put(e,t,n)}async*get(e,t={}){yield*this.contentFetching.get(e,t)}async*provide(e,t={}){yield*this.contentRouting.provide(e,this.components.addressManager.getAddresses(),t)}async cancelReprovide(e){await this.providers.removeProvider(e,this.components.peerId)}async*findProviders(e,t={}){yield*this.contentRouting.findProviders(e,t)}async*findPeer(e,t={}){yield*this.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t={}){yield*this.peerRouting.getClosestPeers(e,t)}async refreshRoutingTable(){this.routingTableRefresh.refreshTable(!0)}};var R2;(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"})(R2||(R2={}));function c7(r={}){return e=>new ao(e,r)}return e4(u7);})();
2
+ "use strict";var Libp2PKadDht=(()=>{var f4=Object.create;var T1=Object.defineProperty;var h4=Object.getOwnPropertyDescriptor;var d4=Object.getOwnPropertyNames;var p4=Object.getPrototypeOf,m4=Object.prototype.hasOwnProperty;var Vs=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Te=(r,e)=>{for(var t in e)T1(r,t,{get:e[t],enumerable:!0})},Hs=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of d4(e))!m4.call(r,o)&&o!==t&&T1(r,o,{get:()=>e[o],enumerable:!(n=h4(e,o))||n.enumerable});return r};var Gs=(r,e,t)=>(t=r!=null?f4(p4(r)):{},Hs(e||!r||!r.__esModule?T1(t,"default",{value:r,enumerable:!0}):t,r)),g4=r=>Hs(T1({},"__esModule",{value:!0}),r);var e2=Vs((l7,wo)=>{"use strict";var b4=Object.prototype.hasOwnProperty,_e="~";function Fr(){}Object.create&&(Fr.prototype=Object.create(null),new Fr().__proto__||(_e=!1));function x4(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function Js(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new x4(t,n||r,o),s=_e?_e+e:e;return r._events[s]?r._events[s].fn?r._events[s]=[r._events[s],i]:r._events[s].push(i):(r._events[s]=i,r._eventsCount++),r}function C1(r,e){--r._eventsCount===0?r._events=new Fr:delete r._events[e]}function be(){this._events=new Fr,this._eventsCount=0}be.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)b4.call(t,n)&&e.push(_e?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};be.prototype.listeners=function(e){var t=_e?_e+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,i=n.length,s=new Array(i);o<i;o++)s[o]=n[o].fn;return s};be.prototype.listenerCount=function(e){var t=_e?_e+e:e,n=this._events[t];return n?n.fn?1:n.length:0};be.prototype.emit=function(e,t,n,o,i,s){var a=_e?_e+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,u,f;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,o),!0;case 5:return c.fn.call(c.context,t,n,o,i),!0;case 6:return c.fn.call(c.context,t,n,o,i,s),!0}for(f=1,u=new Array(l-1);f<l;f++)u[f-1]=arguments[f];c.fn.apply(c.context,u)}else{var h=c.length,d;for(f=0;f<h;f++)switch(c[f].once&&this.removeListener(e,c[f].fn,void 0,!0),l){case 1:c[f].fn.call(c[f].context);break;case 2:c[f].fn.call(c[f].context,t);break;case 3:c[f].fn.call(c[f].context,t,n);break;case 4:c[f].fn.call(c[f].context,t,n,o);break;default:if(!u)for(d=1,u=new Array(l-1);d<l;d++)u[d-1]=arguments[d];c[f].fn.apply(c[f].context,u)}}return!0};be.prototype.on=function(e,t,n){return Js(this,e,t,n,!1)};be.prototype.once=function(e,t,n){return Js(this,e,t,n,!0)};be.prototype.removeListener=function(e,t,n,o){var i=_e?_e+e:e;if(!this._events[i])return this;if(!t)return C1(this,i),this;var s=this._events[i];if(s.fn)s.fn===t&&(!o||s.once)&&(!n||s.context===n)&&C1(this,i);else{for(var a=0,c=[],l=s.length;a<l;a++)(s[a].fn!==t||o&&!s[a].once||n&&s[a].context!==n)&&c.push(s[a]);c.length?this._events[i]=c.length===1?c[0]:c:C1(this,i)}return this};be.prototype.removeAllListeners=function(e){var t;return e?(t=_e?_e+e:e,this._events[t]&&C1(this,t)):(this._events=new Fr,this._eventsCount=0),this};be.prototype.off=be.prototype.removeListener;be.prototype.addListener=be.prototype.on;be.prefixed=_e;be.EventEmitter=be;typeof wo<"u"&&(wo.exports=be)});var _3=Vs(w1=>{(function(){var r,e,t,n,o,i,s,a;a=function(c){var l,u,f,h;return l=(c&255<<24)>>>24,u=(c&255<<16)>>>16,f=(c&65280)>>>8,h=c&255,[l,u,f,h].join(".")},s=function(c){var l,u,f,h,d,y;for(l=[],f=h=0;h<=3&&c.length!==0;f=++h){if(f>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}y=e(c),d=y[0],u=y[1],c=c.substring(u),l.push(d)}if(c.length!==0)throw new Error("Invalid IP");switch(l.length){case 1:if(l[0]>4294967295)throw new Error("Invalid IP");return l[0]>>>0;case 2:if(l[0]>255||l[1]>16777215)throw new Error("Invalid IP");return(l[0]<<24|l[1])>>>0;case 3:if(l[0]>255||l[1]>255||l[2]>65535)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2])>>>0;case 4:if(l[0]>255||l[1]>255||l[2]>255||l[3]>255)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2]<<8|l[3])>>>0;default:throw new Error("Invalid IP")}},t=function(c){return c.charCodeAt(0)},n=t("0"),i=t("a"),o=t("A"),e=function(c){var l,u,f,h,d;for(h=0,l=10,u="9",f=0,c.length>1&&c[f]==="0"&&(c[f+1]==="x"||c[f+1]==="X"?(f+=2,l=16):"0"<=c[f+1]&&c[f+1]<="9"&&(f++,l=8,u="7")),d=f;f<c.length;){if("0"<=c[f]&&c[f]<=u)h=h*l+(t(c[f])-n)>>>0;else if(l===16)if("a"<=c[f]&&c[f]<="f")h=h*l+(10+t(c[f])-i)>>>0;else if("A"<=c[f]&&c[f]<="F")h=h*l+(10+t(c[f])-o)>>>0;else break;else break;if(h>4294967295)throw new Error("too large");f++}if(f===d)throw new Error("empty octet");return[h,f]},r=function(){function c(l,u){var f,h,d,y;if(typeof l!="string")throw new Error("Missing `net' parameter");if(u||(y=l.split("/",2),l=y[0],u=y[1]),u||(u=32),typeof u=="string"&&u.indexOf(".")>-1){try{this.maskLong=s(u)}catch(g){throw f=g,new Error("Invalid mask: "+u)}for(h=d=32;d>=0;h=--d)if(this.maskLong===4294967295<<32-h>>>0){this.bitmask=h;break}}else if(u||u===0)this.bitmask=parseInt(u,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(s(l)&this.maskLong)>>>0}catch(g){throw f=g,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+u);this.size=Math.pow(2,32-this.bitmask),this.base=a(this.netLong),this.mask=a(this.maskLong),this.hostmask=a(~this.maskLong),this.first=this.bitmask<=30?a(this.netLong+1):this.base,this.last=this.bitmask<=30?a(this.netLong+this.size-2):a(this.netLong+this.size-1),this.broadcast=this.bitmask<=30?a(this.netLong+this.size-1):void 0}return c.prototype.contains=function(l){return typeof l=="string"&&(l.indexOf("/")>0||l.split(".").length!==4)&&(l=new c(l)),l instanceof c?this.contains(l.base)&&this.contains(l.broadcast||l.last):(s(l)&this.maskLong)>>>0===(this.netLong&this.maskLong)>>>0},c.prototype.next=function(l){return l==null&&(l=1),new c(a(this.netLong+this.size*l),this.mask)},c.prototype.forEach=function(l){var u,f,h;for(h=s(this.first),f=s(this.last),u=0;h<=f;)l(a(h),h,u),u++,h++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c}(),w1.ip2long=s,w1.long2ip=a,w1.Netmask=r}).call(w1)});var ka={};Te(ka,{EventTypes:()=>Fs,MessageType:()=>H,Record:()=>le,kadDHT:()=>La,passthroughMapper:()=>T3,removePrivateAddressesMapper:()=>Sn,removePublicAddressesMapper:()=>P3});var $s=Symbol.for("@libp2p/content-routing");var Qs=Symbol.for("@libp2p/peer-discovery");var yo=Symbol.for("@libp2p/peer-id");var js=Symbol.for("@libp2p/peer-routing");var Ws="keep-alive";var rt=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}};var V=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},nt=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}};var Fe=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}};var R1=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},L1=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}};var Re=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}};var Ft=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var Le=class extends EventTarget{#e=new Map;constructor(){super()}listenerCount(e){let t=this.#e.get(e);return t==null?0:t.length}addEventListener(e,t,n){super.addEventListener(e,t,n);let o=this.#e.get(e);o==null&&(o=[],this.#e.set(e,o)),o.push({callback:t,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let o=this.#e.get(e);o!=null&&(o=o.filter(({callback:i})=>i!==t),this.#e.set(e,o))}dispatchEvent(e){let t=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:o})=>!o),this.#e.set(e.type,n)),t}safeDispatchEvent(e,t={}){return this.dispatchEvent(new CustomEvent(e,t))}};function Ys(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function Kr(...r){let e=[];for(let t of r)Ys(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 k1(...r){let e=[];for(let t of r)Ys(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 Zs=Symbol.for("@libp2p/service-capabilities"),Xs=Symbol.for("@libp2p/service-dependencies");function y4(r){return r[Symbol.asyncIterator]!=null}function w4(r){if(y4(r))return(async()=>{for await(let e of r);})();for(let e of r);}var qr=w4;var bo=Gs(e2(),1);var zr=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},xo=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},t2=r=>globalThis.DOMException===void 0?new xo(r):new DOMException(r),r2=r=>{let e=r.reason===void 0?t2("This operation was aborted."):r.reason;return e instanceof Error?e:t2(e)};function zt(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,a,l=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(e.signal){let{signal:d}=e;d.aborted&&f(r2(d)),a=()=>{f(r2(d))},d.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(u,f);return}let h=new zr;s=i.setTimeout.call(void 0,()=>{if(n){try{u(n())}catch(d){f(d)}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),(async()=>{try{u(await r)}catch(d){f(d)}})()}).finally(()=>{l.clear(),a&&e.signal&&e.signal.removeEventListener("abort",a)});return l.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},l}function Eo(r,e,t){let n=0,o=r.length;for(;o>0;){let i=Math.trunc(o/2),s=n+i;t(r[s],e)<=0?(n=++s,o-=i+1):o=i}return n}var Vr=class{#e=[];enqueue(e,t){t={priority:0,...t};let n={priority:t.priority,id:t.id,run:e};if(this.size===0||this.#e[this.size-1].priority>=t.priority){this.#e.push(n);return}let o=Eo(this.#e,n,(i,s)=>s.priority-i.priority);this.#e.splice(o,0,n)}setPriority(e,t){let n=this.#e.findIndex(i=>i.id===e);if(n===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);let[o]=this.#e.splice(n,1);this.enqueue(o.run,{priority:t,id:e})}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(t=>t.priority===e.priority).map(t=>t.run)}get size(){return this.#e.length}};var cr=class extends bo.default{#e;#r;#i=0;#a;#c;#p=0;#n;#u;#t;#m;#o=0;#l;#s;#g;#b=1n;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:Vr,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#r=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#a=e.intervalCap,this.#c=e.interval,this.#t=new e.queueClass,this.#m=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#g=e.throwOnTimeout===!0,this.#s=e.autoStart===!1}get#x(){return this.#r||this.#i<this.#a}get#E(){return this.#o<this.#l}#v(){this.#o--,this.#f(),this.emit("next")}#S(){this.#w(),this.#y(),this.#u=void 0}get#_(){let e=Date.now();if(this.#n===void 0){let t=this.#p-e;if(t<0)this.#i=this.#e?this.#o:0;else return this.#u===void 0&&(this.#u=setTimeout(()=>{this.#S()},t)),!0}return!1}#f(){if(this.#t.size===0)return this.#n&&clearInterval(this.#n),this.#n=void 0,this.emit("empty"),this.#o===0&&this.emit("idle"),!1;if(!this.#s){let e=!this.#_;if(this.#x&&this.#E){let t=this.#t.dequeue();return t?(this.emit("active"),t(),e&&this.#y(),!0):!1}}return!1}#y(){this.#r||this.#n!==void 0||(this.#n=setInterval(()=>{this.#w()},this.#c),this.#p=Date.now()+this.#c)}#w(){this.#i===0&&this.#o===0&&this.#n&&(clearInterval(this.#n),this.#n=void 0),this.#i=this.#e?this.#o:0,this.#h()}#h(){for(;this.#f(););}get concurrency(){return this.#l}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.#l=e,this.#h()}async#I(e){return new Promise((t,n)=>{e.addEventListener("abort",()=>{n(e.reason)},{once:!0})})}setPriority(e,t){this.#t.setPriority(e,t)}async add(e,t={}){return t.id??=(this.#b++).toString(),t={timeout:this.timeout,throwOnTimeout:this.#g,...t},new Promise((n,o)=>{this.#t.enqueue(async()=>{this.#o++,this.#i++;try{t.signal?.throwIfAborted();let i=e({signal:t.signal});t.timeout&&(i=zt(Promise.resolve(i),{milliseconds:t.timeout})),t.signal&&(i=Promise.race([i,this.#I(t.signal)]));let s=await i;n(s),this.emit("completed",s)}catch(i){if(i instanceof zr&&!t.throwOnTimeout){n();return}o(i),this.emit("error",i)}finally{this.#v()}},t),this.emit("add"),this.#f()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#s?(this.#s=!1,this.#h(),this):this}pause(){this.#s=!0}clear(){this.#t=new this.#m}async onEmpty(){this.#t.size!==0&&await this.#d("empty")}async onSizeLessThan(e){this.#t.size<e||await this.#d("next",()=>this.#t.size<e)}async onIdle(){this.#o===0&&this.#t.size===0||await this.#d("idle")}async#d(e,t){return new Promise(n=>{let o=()=>{t&&!t()||(this.off(e,o),n())};this.on(e,o)})}get size(){return this.#t.size}sizeBy(e){return this.#t.filter(e).length}get pending(){return this.#o}get isPaused(){return this.#s}};var vt={},ur=r=>{r.addEventListener("message",e=>{ur.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{ur.dispatchEvent("message",r,e)})};ur.addEventListener=(r,e)=>{vt[r]==null&&(vt[r]=[]),vt[r].push(e)};ur.removeEventListener=(r,e)=>{vt[r]!=null&&(vt[r]=vt[r].filter(t=>t===e))};ur.dispatchEvent=function(r,e,t){vt[r]!=null&&vt[r].forEach(n=>n(e,t))};var vo=ur;var So="lock:worker:request-read",_o="lock:worker:release-read",Io="lock:master:grant-read",Ao="lock:worker:request-write",Po="lock:worker:release-write",To="lock:master:grant-write";var n2=(r=21)=>Math.random().toString().substring(2);var o2=(r,e,t,n,o)=>(i,s)=>{if(s.data.type!==t)return;let a={type:s.data.type,name:s.data.name,identifier:s.data.identifier};r.dispatchEvent(new MessageEvent(e,{data:{name:a.name,handler:async()=>{i.postMessage({type:o,name:a.name,identifier:a.identifier}),await new Promise(c=>{let l=u=>{if(u?.data==null)return;let f={type:u.data.type,name:u.data.name,identifier:u.data.identifier};f.type===n&&f.identifier===a.identifier&&(i.removeEventListener("message",l),c())};i.addEventListener("message",l)})}}}))},i2=(r,e,t,n)=>async()=>{let o=n2();return globalThis.postMessage({type:e,identifier:o,name:r}),new Promise(i=>{let s=a=>{if(a?.data==null)return;let c={type:a.data.type,identifier:a.data.identifier};c.type===t&&c.identifier===o&&(globalThis.removeEventListener("message",s),i(()=>{globalThis.postMessage({type:n,identifier:o,name:r})}))};globalThis.addEventListener("message",s)})},E4={singleProcess:!1},s2=r=>{if(r=Object.assign({},E4,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return vo.addEventListener("message",o2(t,"requestReadLock",So,_o,Io)),vo.addEventListener("message",o2(t,"requestWriteLock",Ao,Po,To)),t}return{isWorker:!0,readLock:t=>i2(t,So,Io,_o),writeLock:t=>i2(t,Ao,To,Po)}};var Vt={},St;async function Ro(r,e){let t,n=new Promise(o=>{t=o});return r.add(async()=>zt((async()=>{await new Promise(o=>{t(()=>{o()})})})(),{milliseconds:e.timeout})),n}var v4=(r,e)=>{if(St.isWorker===!0)return{readLock:St.readLock(r,e),writeLock:St.writeLock(r,e)};let t=new cr({concurrency:1}),n;return{async readLock(){if(n!=null)return Ro(n,e);n=new cr({concurrency:e.concurrency,autoStart:!1});let o=n,i=Ro(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),i},async writeLock(){return n=null,Ro(t,e)}}},S4={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function Lo(r){let e=Object.assign({},S4,r);return St==null&&(St=s2(e),St.isWorker!==!0&&(St.addEventListener("requestReadLock",t=>{Vt[t.data.name]!=null&&Vt[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),St.addEventListener("requestWriteLock",async t=>{Vt[t.data.name]!=null&&Vt[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),Vt[e.name]==null&&(Vt[e.name]=v4(e.name,e)),Vt[e.name]}function ae(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var lr=1e3,ko=60*lr,D1=60*ko,a2=36*D1,c2="/ipfs/kad/1.0.0",u2=48*D1;var l2=24*D1,f2=10,h2=16384,d2=D1,D7=10*lr;var N1=20,_t=10,p2=5*ko,m2=lr,g2=5*lr,y2=5*ko,w2=30*lr,b2=180*lr,Co=`${Ws}-kad-dht`;function xe(r=0){return new Uint8Array(r)}function he(r=0){return new Uint8Array(r)}var _4=Math.pow(2,7),I4=Math.pow(2,14),A4=Math.pow(2,21),Do=Math.pow(2,28),No=Math.pow(2,35),Bo=Math.pow(2,42),Oo=Math.pow(2,49),$=128,Ee=127;function ce(r){if(r<_4)return 1;if(r<I4)return 2;if(r<A4)return 3;if(r<Do)return 4;if(r<No)return 5;if(r<Bo)return 6;if(r<Oo)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Mo(r,e,t=0){switch(ce(r)){case 8:e[t++]=r&255|$,r/=128;case 7:e[t++]=r&255|$,r/=128;case 6:e[t++]=r&255|$,r/=128;case 5:e[t++]=r&255|$,r/=128;case 4:e[t++]=r&255|$,r>>>=7;case 3:e[t++]=r&255|$,r>>>=7;case 2:e[t++]=r&255|$,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function P4(r,e,t=0){switch(ce(r)){case 8:e.set(t++,r&255|$),r/=128;case 7:e.set(t++,r&255|$),r/=128;case 6:e.set(t++,r&255|$),r/=128;case 5:e.set(t++,r&255|$),r/=128;case 4:e.set(t++,r&255|$),r>>>=7;case 3:e.set(t++,r&255|$),r>>>=7;case 2:e.set(t++,r&255|$),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function Uo(r,e){let t=r[e],n=0;if(n+=t&Ee,t<$||(t=r[e+1],n+=(t&Ee)<<7,t<$)||(t=r[e+2],n+=(t&Ee)<<14,t<$)||(t=r[e+3],n+=(t&Ee)<<21,t<$)||(t=r[e+4],n+=(t&Ee)*Do,t<$)||(t=r[e+5],n+=(t&Ee)*No,t<$)||(t=r[e+6],n+=(t&Ee)*Bo,t<$)||(t=r[e+7],n+=(t&Ee)*Oo,t<$))return n;throw new RangeError("Could not decode varint")}function T4(r,e){let t=r.get(e),n=0;if(n+=t&Ee,t<$||(t=r.get(e+1),n+=(t&Ee)<<7,t<$)||(t=r.get(e+2),n+=(t&Ee)<<14,t<$)||(t=r.get(e+3),n+=(t&Ee)<<21,t<$)||(t=r.get(e+4),n+=(t&Ee)*Do,t<$)||(t=r.get(e+5),n+=(t&Ee)*No,t<$)||(t=r.get(e+6),n+=(t&Ee)*Bo,t<$)||(t=r.get(e+7),n+=(t&Ee)*Oo,t<$))return n;throw new RangeError("Could not decode varint")}function Ke(r,e,t=0){return e==null&&(e=he(ce(r))),e instanceof Uint8Array?Mo(r,e,t):P4(r,e,t)}function Be(r,e=0){return r instanceof Uint8Array?Uo(r,e):T4(r,e)}var Ko=new Float32Array([-0]),It=new Uint8Array(Ko.buffer);function x2(r,e,t){Ko[0]=r,e[t]=It[0],e[t+1]=It[1],e[t+2]=It[2],e[t+3]=It[3]}function E2(r,e){return It[0]=r[e],It[1]=r[e+1],It[2]=r[e+2],It[3]=r[e+3],Ko[0]}var qo=new Float64Array([-0]),ve=new Uint8Array(qo.buffer);function v2(r,e,t){qo[0]=r,e[t]=ve[0],e[t+1]=ve[1],e[t+2]=ve[2],e[t+3]=ve[3],e[t+4]=ve[4],e[t+5]=ve[5],e[t+6]=ve[6],e[t+7]=ve[7]}function S2(r,e){return ve[0]=r[e],ve[1]=r[e+1],ve[2]=r[e+2],ve[3]=r[e+3],ve[4]=r[e+4],ve[5]=r[e+5],ve[6]=r[e+6],ve[7]=r[e+7],qo[0]}var R4=BigInt(Number.MAX_SAFE_INTEGER),L4=BigInt(Number.MIN_SAFE_INTEGER),Oe=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 Gt;if(e<R4&&e>L4)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>_2&&(o=0n,++n>_2&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return Gt;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):Gt}},Gt=new Oe(0,0);Gt.toBigInt=function(){return 0n};Gt.zzEncode=Gt.zzDecode=function(){return this};Gt.length=function(){return 1};var _2=4294967296n;function I2(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 A2(r,e,t){if(t-e<1)return"";let o,i=[],s=0,a;for(;e<t;)a=r[e++],a<128?i[s++]=a:a>191&&a<224?i[s++]=(a&31)<<6|r[e++]&63:a>239&&a<365?(a=((a&7)<<18|(r[e++]&63)<<12|(r[e++]&63)<<6|r[e++]&63)-65536,i[s++]=55296+(a>>10),i[s++]=56320+(a&1023)):i[s++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,s>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,i)),s=0);return o!=null?(s>0&&o.push(String.fromCharCode.apply(String,i.slice(0,s))),o.join("")):String.fromCharCode.apply(String,i.slice(0,s))}function Fo(r,e,t){let n=t,o,i;for(let s=0;s<r.length;++s)o=r.charCodeAt(s),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((i=r.charCodeAt(s+1))&64512)===56320?(o=65536+((o&1023)<<10)+(i&1023),++s,e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128);return t-n}function ze(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function B1(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var zo=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,ze(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 ze(this,4);return B1(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw ze(this,4);return B1(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw ze(this,4);let e=E2(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw ze(this,4);let e=S2(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 ze(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return A2(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw ze(this,e);this.pos+=e}else do if(this.pos>=this.len)throw ze(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 Oe(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 ze(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 ze(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 ze(this,8);let e=B1(this.buf,this.pos+=4),t=B1(this.buf,this.pos+=4);return new Oe(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=Uo(this.buf,this.pos);return this.pos+=ce(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 Vo(r){return new zo(r instanceof Uint8Array?r:r.subarray())}function je(r,e,t){let n=Vo(r);return e.decode(n,void 0,t)}var jo={};Te(jo,{base10:()=>O4});var G7=new Uint8Array(0);function T2(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 ot(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 R2(r){return new TextEncoder().encode(r)}function L2(r){return new TextDecoder().decode(r)}function k4(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var i=r.charAt(o),s=i.charCodeAt(0);if(t[s]!==255)throw new TypeError(i+" is ambiguous");t[s]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),u=Math.log(256)/Math.log(a);function f(y){if(y instanceof Uint8Array||(ArrayBuffer.isView(y)?y=new Uint8Array(y.buffer,y.byteOffset,y.byteLength):Array.isArray(y)&&(y=Uint8Array.from(y))),!(y instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(y.length===0)return"";for(var g=0,E=0,T=0,q=y.length;T!==q&&y[T]===0;)T++,g++;for(var x=(q-T)*u+1>>>0,p=new Uint8Array(x);T!==q;){for(var b=y[T],A=0,P=x-1;(b!==0||A<E)&&P!==-1;P--,A++)b+=256*p[P]>>>0,p[P]=b%a>>>0,b=b/a>>>0;if(b!==0)throw new Error("Non-zero carry");E=A,T++}for(var L=x-E;L!==x&&p[L]===0;)L++;for(var B=c.repeat(g);L<x;++L)B+=r.charAt(p[L]);return B}function h(y){if(typeof y!="string")throw new TypeError("Expected String");if(y.length===0)return new Uint8Array;var g=0;if(y[g]!==" "){for(var E=0,T=0;y[g]===c;)E++,g++;for(var q=(y.length-g)*l+1>>>0,x=new Uint8Array(q);y[g];){var p=t[y.charCodeAt(g)];if(p===255)return;for(var b=0,A=q-1;(p!==0||b<T)&&A!==-1;A--,b++)p+=a*x[A]>>>0,x[A]=p%256>>>0,p=p/256>>>0;if(p!==0)throw new Error("Non-zero carry");T=b,g++}if(y[g]!==" "){for(var P=q-T;P!==q&&x[P]===0;)P++;for(var L=new Uint8Array(E+(q-P)),B=E;P!==q;)L[B++]=x[P++];return L}}}function d(y){var g=h(y);if(g)return g;throw new Error(`Non-${e} character`)}return{encode:f,decodeUnsafe:h,decode:d}}var C4=k4,D4=C4,C2=D4;var Ho=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")}},Go=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 D2(this,e)}},$o=class{decoders;constructor(e){this.decoders=e}or(e){return D2(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 D2(r,e){return new $o({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var Qo=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 Ho(e,t,n),this.decoder=new Go(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function fr({name:r,prefix:e,encode:t,decode:n}){return new Qo(r,e,t,n)}function At({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=C2(t,r);return fr({prefix:e,name:r,encode:n,decode:i=>ot(o(i))})}function N4(r,e,t,n){let o={};for(let u=0;u<e.length;++u)o[e[u]]=u;let i=r.length;for(;r[i-1]==="=";)--i;let s=new Uint8Array(i*t/8|0),a=0,c=0,l=0;for(let u=0;u<i;++u){let f=o[r[u]];if(f===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|f,a+=t,a>=8&&(a-=8,s[l++]=255&c>>a)}if(a>=t||(255&c<<8-a)!==0)throw new SyntaxError("Unexpected end of data");return s}function B4(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,i="",s=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],s+=8;s>t;)s-=t,i+=e[o&a>>s];if(s!==0&&(i+=e[o&a<<t-s]),n)for(;(i.length*t&7)!==0;)i+="=";return i}function re({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return fr({prefix:e,name:r,encode(o){return B4(o,n,t)},decode(o){return N4(o,n,t,r)}})}var O4=At({prefix:"9",name:"base10",alphabet:"0123456789"});var Wo={};Te(Wo,{base16:()=>M4,base16upper:()=>U4});var M4=re({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),U4=re({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var Yo={};Te(Yo,{base2:()=>K4});var K4=re({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var Zo={};Te(Zo,{base256emoji:()=>H4});var N2=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}"),q4=N2.reduce((r,e,t)=>(r[t]=e,r),[]),F4=N2.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function z4(r){return r.reduce((e,t)=>(e+=q4[t],e),"")}function V4(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=F4[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var H4=fr({prefix:"\u{1F680}",name:"base256emoji",encode:z4,decode:V4});var Xo={};Te(Xo,{base32:()=>it,base32hex:()=>j4,base32hexpad:()=>Y4,base32hexpadupper:()=>Z4,base32hexupper:()=>W4,base32pad:()=>$4,base32padupper:()=>Q4,base32upper:()=>G4,base32z:()=>X4});var it=re({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),G4=re({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),$4=re({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),Q4=re({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),j4=re({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),W4=re({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),Y4=re({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),Z4=re({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),X4=re({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var Jo={};Te(Jo,{base36:()=>Hr,base36upper:()=>J4});var Hr=At({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),J4=At({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var ei={};Te(ei,{base58btc:()=>Y,base58flickr:()=>e5});var Y=At({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),e5=At({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var ti={};Te(ti,{base64:()=>t5,base64pad:()=>r5,base64url:()=>n5,base64urlpad:()=>o5});var t5=re({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),r5=re({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),n5=re({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),o5=re({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var ri={};Te(ri,{base8:()=>i5});var i5=re({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var ni={};Te(ni,{identity:()=>s5});var s5=fr({prefix:"\0",name:"identity",encode:r=>L2(r),decode:r=>R2(r)});var a9=new TextEncoder,c9=new TextDecoder;var B2=85;var ii={};Te(ii,{identity:()=>He});var c5=K2,M2=128,u5=127,l5=~u5,f5=Math.pow(2,31);function K2(r,e,t){e=e||[],t=t||0;for(var n=t;r>=f5;)e[t++]=r&255|M2,r/=128;for(;r&l5;)e[t++]=r&255|M2,r>>>=7;return e[t]=r|0,K2.bytes=t-n+1,e}var h5=oi,d5=128,U2=127;function oi(r,n){var t=0,n=n||0,o=0,i=n,s,a=r.length;do{if(i>=a)throw oi.bytes=0,new RangeError("Could not decode varint");s=r[i++],t+=o<28?(s&U2)<<o:(s&U2)*Math.pow(2,o),o+=7}while(s>=d5);return oi.bytes=i-n,t}var p5=Math.pow(2,7),m5=Math.pow(2,14),g5=Math.pow(2,21),y5=Math.pow(2,28),w5=Math.pow(2,35),b5=Math.pow(2,42),x5=Math.pow(2,49),E5=Math.pow(2,56),v5=Math.pow(2,63),S5=function(r){return r<p5?1:r<m5?2:r<g5?3:r<y5?4:r<w5?5:r<b5?6:r<x5?7:r<E5?8:r<v5?9:10},_5={encode:c5,decode:h5,encodingLength:S5},I5=_5,Gr=I5;function $r(r,e=0){return[Gr.decode(r,e),Gr.decode.bytes]}function hr(r,e,t=0){return Gr.encode(r,e,t),e}function dr(r){return Gr.encodingLength(r)}function Ve(r,e){let t=e.byteLength,n=dr(r),o=n+dr(t),i=new Uint8Array(o+t);return hr(r,i,0),hr(t,i,n),i.set(e,o),new pr(r,t,e,i)}function ue(r){let e=ot(r),[t,n]=$r(e),[o,i]=$r(e.subarray(n)),s=e.subarray(n+i);if(s.byteLength!==o)throw new Error("Incorrect length");return new pr(t,o,s,e)}function q2(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&T2(r.bytes,t.bytes)}}var pr=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};var F2=0,A5="identity",z2=ot;function P5(r){return Ve(F2,z2(r))}var He={code:F2,name:A5,encode:z2,digest:P5};var ci={};Te(ci,{sha256:()=>st,sha512:()=>T5});function ai({name:r,code:e,encode:t}){return new si(r,e,t)}var si=class{name;code;encode;constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?Ve(this.code,t):t.then(n=>Ve(this.code,n))}else throw Error("Unknown type, must be binary type")}};function H2(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var st=ai({name:"sha2-256",code:18,encode:H2("SHA-256")}),T5=ai({name:"sha2-512",code:19,encode:H2("SHA-512")});function G2(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return L5(t,ui(r),e??Y.encoder);default:return k5(t,ui(r),e??it.encoder)}}var $2=new WeakMap;function ui(r){let e=$2.get(r);if(e==null){let t=new Map;return $2.set(r,t),t}return e}var X=class r{code;version;multihash;bytes;"/";constructor(e,t,n,o){this.code=t,this.version=e,this.multihash=n,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:t}=this;if(e!==Qr)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==C5)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=Ve(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&&q2(e.multihash,n.multihash)}toString(e){return G2(this,e)}toJSON(){return{"/":G2(this)}}link(){return this}[Symbol.toStringTag]="CID";[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof r)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:o,multihash:i,bytes:s}=t;return new r(n,o,i,s??Q2(n,o,i.bytes))}else if(t[D5]===!0){let{version:n,multihash:o,code:i}=t,s=ue(o);return r.create(n,i,s)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(t!==Qr)throw new Error(`Version 0 CID must use dag-pb (code: ${Qr}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=Q2(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,Qr,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=ot(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let i=o.subarray(t.multihashSize-t.digestSize),s=new pr(t.multihashCode,t.digestSize,i,o);return[t.version===0?r.createV0(s):r.createV1(t.codec,s),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[f,h]=$r(e.subarray(t));return t+=h,f},o=n(),i=Qr;if(o===18?(o=0,t=0):i=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let s=t,a=n(),c=n(),l=t+c,u=l-s;return{version:o,codec:i,multihashCode:a,digestSize:c,multihashSize:u,size:l}}static parse(e,t){let[n,o]=R5(e,t),i=r.decode(o);if(i.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return ui(i).set(n,e),i}};function R5(r,e){switch(r[0]){case"Q":{let t=e??Y;return[Y.prefix,t.decode(`${Y.prefix}${r}`)]}case Y.prefix:{let t=e??Y;return[Y.prefix,t.decode(r)]}case it.prefix:{let t=e??it;return[it.prefix,t.decode(r)]}case Hr.prefix:{let t=e??Hr;return[Hr.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 L5(r,e,t){let{prefix:n}=t;if(n!==Y.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let i=t.encode(r).slice(1);return e.set(n,i),i}else return o}function k5(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let i=t.encode(r);return e.set(n,i),i}else return o}var Qr=112,C5=18;function Q2(r,e,t){let n=dr(r),o=n+dr(e),i=new Uint8Array(o+t.byteLength);return hr(r,i,0),hr(e,i,n),i.set(t,o),i}var D5=Symbol.for("@ipld/js-cid/CID");var jr={...ni,...Yo,...ri,...jo,...Wo,...Xo,...Jo,...ei,...ti,...Zo},L9={...ci,...ii};function W2(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var j2=W2("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),li=W2("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=he(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),N5={utf8:j2,"utf-8":j2,hex:jr.base16,latin1:li,ascii:li,binary:li,...jr},M1=N5;function U(r,e="utf8"){let t=M1[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function fi(r){let e=r??8192,t=e>>>1,n,o=e;return function(s){if(s<1||s>t)return he(s);o+s>e&&(n=he(e),o=0);let a=n.subarray(o,o+=s);return(o&7)!==0&&(o=(o|7)+1),a}}var $t=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function hi(){}var pi=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},B5=fi();function O5(r){return globalThis.Buffer!=null?he(r):B5(r)}var Yr=class{len;head;tail;states;constructor(){this.len=0,this.head=new $t(hi,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new $t(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new mi((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(U1,10,Oe.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=Oe.fromBigInt(e);return this._push(U1,t.length(),t)}uint64Number(e){return this._push(Mo,ce(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=Oe.fromBigInt(e).zzEncode();return this._push(U1,t.length(),t)}sint64Number(e){let t=Oe.fromNumber(e).zzEncode();return this._push(U1,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(di,1,e?1:0)}fixed32(e){return this._push(Wr,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=Oe.fromBigInt(e);return this._push(Wr,4,t.lo)._push(Wr,4,t.hi)}fixed64Number(e){let t=Oe.fromNumber(e);return this._push(Wr,4,t.lo)._push(Wr,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(x2,4,e)}double(e){return this._push(v2,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(di,1,0):this.uint32(t)._push(U5,t,e)}string(e){let t=I2(e);return t!==0?this.uint32(t)._push(Fo,t,e):this._push(di,1,0)}fork(){return this.states=new pi(this),this.head=this.tail=new $t(hi,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 $t(hi,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=O5(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function di(r,e,t){e[t]=r&255}function M5(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var mi=class extends $t{next;constructor(e,t){super(M5,e,t),this.next=void 0}};function U1(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 Wr(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 U5(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(Yr.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(K5,e,r),this},Yr.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(q5,e,r),this});function K5(r,e,t){e.set(r,t)}function q5(r,e,t){r.length<40?Fo(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(U(r),t)}function gi(){return new Yr}function We(r,e){let t=gi();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var mr;(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"})(mr||(mr={}));function K1(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function gr(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(i,s){let a=e(i);s.int32(a)},n=function(i){let s=i.int32();return e(s)};return K1("enum",mr.VARINT,t,n)}function Ye(r,e){return K1("message",mr.LENGTH_DELIMITED,r,e)}var yr=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"};var Zr;(function(r){let e;r.codec=()=>(e==null&&(e=Ye((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&t.key.byteLength>0&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&t.value.byteLength>0&&(n.uint32(18),n.bytes(t.value)),t.timeReceived!=null&&t.timeReceived!==""&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={key:xe(0),value:xe(0),timeReceived:""},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.key=t.bytes();break}case 2:{i.value=t.bytes();break}case 5:{i.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>We(t,r.codec()),r.decode=(t,n)=>je(t,r.codec(),n)})(Zr||(Zr={}));function Y2(r){let e=r.getUTCFullYear(),t=String(r.getUTCMonth()+1).padStart(2,"0"),n=String(r.getUTCDate()).padStart(2,"0"),o=String(r.getUTCHours()).padStart(2,"0"),i=String(r.getUTCMinutes()).padStart(2,"0"),s=String(r.getUTCSeconds()).padStart(2,"0"),a=r.getUTCMilliseconds(),c=String(a*1e3*1e3).padStart(9,"0");return`${e}-${t}-${n}T${o}:${i}:${s}.${c}Z`}function Z2(r){let e=new RegExp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d+)Z"),t=String(r).trim().match(e);if(t==null)throw new Error("Invalid format");let n=parseInt(t[1],10),o=parseInt(t[2],10)-1,i=parseInt(t[3],10),s=parseInt(t[4],10),a=parseInt(t[5],10),c=parseInt(t[6],10),l=parseInt(t[7].slice(0,-6),10);return new Date(Date.UTC(n,o,i,s,a,c,l))}var le=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 Zr.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:Y2(this.timeReceived)}}static deserialize(e){let t=Zr.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=Z2(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)}};function z5(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 X2=z5;function V5(r){return r[Symbol.asyncIterator]!=null}function H5(r,e){let t=0;if(V5(r))return async function*(){for await(let c of r)yield e(c,t++)}();let n=X2(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();let s=e(o,t++);if(typeof s.then=="function")return async function*(){yield await s;for await(let c of n)yield e(c,t++)}();let a=e;return function*(){yield s;for(let c of n)yield a(c,t++)}()}var wr=H5;var q1=globalThis.CustomEvent??Event;async function*Xr(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered??!1,o=new EventTarget,i=[],s=ae(),a=ae(),c=!1,l,u=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let y of r){if(i.length===t&&(s=ae(),await s.promise),u)break;let g={done:!1};i.push(g),y().then(E=>{g.done=!0,g.ok=!0,g.value=E,o.dispatchEvent(new q1("task-complete"))},E=>{g.done=!0,g.err=E,o.dispatchEvent(new q1("task-complete"))})}c=!0,o.dispatchEvent(new q1("task-complete"))}catch(y){l=y,o.dispatchEvent(new q1("task-complete"))}});function f(){return n?i[0]?.done:!!i.find(y=>y.done)}function*h(){for(;i.length>0&&i[0].done;){let y=i[0];if(i.shift(),y.ok)yield y.value;else throw u=!0,s.resolve(),y.err;s.resolve()}}function*d(){for(;f();)for(let y=0;y<i.length;y++)if(i[y].done){let g=i[y];if(i.splice(y,1),y--,g.ok)yield g.value;else throw u=!0,s.resolve(),g.err;s.resolve()}}for(;;){if(f()||(a=ae(),await a.promise),l!=null||(n?yield*h():yield*d(),l!=null))throw l;if(c&&i.length===0)break}}var F1=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}},br=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new F1(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 F1(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 yi=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function Pt(r={}){return G5(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 G5(r,e){e=e??{};let t=e.onEnd,n=new br,o,i,s,a=ae(),c=async()=>{try{return n.isEmpty()?s?{done:!0}:await new Promise((E,T)=>{i=q=>{i=null,n.push(q);try{E(r(n))}catch(x){T(x)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=ae()})}},l=E=>i!=null?i(E):(n.push(E),o),u=E=>(n=new br,i!=null?i({error:E}):(n.push({error:E}),o)),f=E=>{if(s)return o;if(e?.objectMode!==!0&&E?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:E})},h=E=>s?o:(s=!0,E!=null?u(E):l({done:!0})),d=()=>(n=new br,h(),{done:!0}),y=E=>(h(E),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:d,throw:y,push:f,end:h,get readableLength(){return n.size},onEmpty:async E=>{let T=E?.signal;if(T?.throwIfAborted(),n.isEmpty())return;let q,x;T!=null&&(q=new Promise((p,b)=>{x=()=>{b(new yi)},T.addEventListener("abort",x)}));try{await Promise.race([a.promise,q])}finally{x!=null&&T!=null&&T?.removeEventListener("abort",x)}}},t==null)return o;let g=o;return o={[Symbol.asyncIterator](){return this},next(){return g.next()},throw(E){return g.throw(E),t!=null&&(t(E),t=void 0),{done:!0}},return(){return g.return(),t!=null&&(t(),t=void 0),{done:!0}},push:f,end(E){return g.end(E),t!=null&&(t(E),t=void 0),o},get readableLength(){return g.readableLength},onEmpty:E=>g.onEmpty(E)},o}var z1=class extends Error{type;code;constructor(e,t,n){super(e??"The operation was aborted"),this.type="aborted",this.name=n??"AbortError",this.code=t??"ABORT_ERR"}};async function at(r,e,t){if(e==null)return r;if(e.aborted)return r.catch(()=>{}),Promise.reject(new z1(t?.errorMessage,t?.errorCode,t?.errorName));let n,o=new z1(t?.errorMessage,t?.errorCode,t?.errorName);try{return await Promise.race([r,new Promise((i,s)=>{n=()=>{s(o)},e.addEventListener("abort",n)})])}finally{n!=null&&e.removeEventListener("abort",n)}}var wi=class{readNext;haveNext;ended;nextResult;error;constructor(){this.ended=!1,this.readNext=ae(),this.haveNext=ae()}[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=ae(),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=ae(),await at(this.readNext.promise,t?.signal,t)}};function V1(){return new wi}function $5(r){return r[Symbol.asyncIterator]!=null}async function Q5(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*j5(r){let e=new AbortController,t=V1();Q5(r,t,e.signal).catch(()=>{});try{yield*t}finally{e.abort()}}function*W5(r){for(let e of r)yield*e}function Y5(...r){let e=[];for(let t of r)$5(t)||e.push(t);return e.length===r.length?W5(e):j5(r)}var H1=Y5;function xr(r,...e){if(r==null)throw new Error("Empty pipeline");if(bi(r)){let n=r;r=()=>n.source}else if(e0(r)||J2(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&bi(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++)bi(t[n])&&(t[n]=X5(t[n]));return Z5(...t)}var Z5=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},J2=r=>r?.[Symbol.asyncIterator]!=null,e0=r=>r?.[Symbol.iterator]!=null,bi=r=>r==null?!1:r.sink!=null&&r.source!=null,X5=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=Pt({objectMode:!0});t.then(()=>{n.end()},s=>{n.end(s)});let o,i=r.source;if(J2(i))o=async function*(){yield*i,n.end()};else if(e0(i))o=function*(){yield*i,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return H1(n,o())}return r.source};function j(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}var Tt=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},G1=class extends Error{constructor(e="Query aborted"){super(e),this.name="QueryAbortedError"}},$1=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},Q1=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var t0;(function(r){let e;r.codec=()=>(e==null&&(e=Ye((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&(n.uint32(18),n.bytes(t.value)),t.author!=null&&(n.uint32(26),n.bytes(t.author)),t.signature!=null&&(n.uint32(34),n.bytes(t.signature)),t.timeReceived!=null&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.key=t.bytes();break}case 2:{i.value=t.bytes();break}case 3:{i.author=t.bytes();break}case 4:{i.signature=t.bytes();break}case 5:{i.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>We(t,r.codec()),r.decode=(t,n)=>je(t,r.codec(),n)})(t0||(t0={}));var H;(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"})(H||(H={}));var j1;(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"})(j1||(j1={}));(function(r){r.codec=()=>gr(j1)})(H||(H={}));var vr;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(vr||(vr={}));var xi;(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"})(xi||(xi={}));(function(r){r.codec=()=>gr(xi)})(vr||(vr={}));var Er;(function(r){let e;r.codec=()=>(e==null&&(e=Ye((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.multiaddrs!=null)for(let i of t.multiaddrs)n.uint32(18),n.bytes(i);t.connection!=null&&(n.uint32(24),vr.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:xe(0),multiaddrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.id=t.bytes();break}case 2:{if(o.limits?.multiaddrs!=null&&i.multiaddrs.length===o.limits.multiaddrs)throw new yr('Decode error - map field "multiaddrs" had too many elements');i.multiaddrs.push(t.bytes());break}case 3:{i.connection=vr.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>We(t,r.codec()),r.decode=(t,n)=>je(t,r.codec(),n)})(Er||(Er={}));var ct;(function(r){let e;r.codec=()=>(e==null&&(e=Ye((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&j1[t.type]!==0&&(n.uint32(8),H.codec().encode(t.type,n)),t.clusterLevel!=null&&(n.uint32(80),n.int32(t.clusterLevel)),t.key!=null&&(n.uint32(18),n.bytes(t.key)),t.record!=null&&(n.uint32(26),n.bytes(t.record)),t.closer!=null)for(let i of t.closer)n.uint32(66),Er.codec().encode(i,n);if(t.providers!=null)for(let i of t.providers)n.uint32(74),Er.codec().encode(i,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={type:H.PUT_VALUE,closer:[],providers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.type=H.codec().decode(t);break}case 10:{i.clusterLevel=t.int32();break}case 2:{i.key=t.bytes();break}case 3:{i.record=t.bytes();break}case 8:{if(o.limits?.closer!=null&&i.closer.length===o.limits.closer)throw new yr('Decode error - map field "closer" had too many elements');i.closer.push(Er.codec().decode(t,t.uint32(),{limits:o.limits?.closer$}));break}case 9:{if(o.limits?.providers!=null&&i.providers.length===o.limits.providers)throw new yr('Decode error - map field "providers" had too many elements');i.providers.push(Er.codec().decode(t,t.uint32(),{limits:o.limits?.providers$}));break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>We(t,r.codec()),r.decode=(t,n)=>je(t,r.codec(),n)})(ct||(ct={}));function Ei(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 Jr(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 W1(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function Ge(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function vi(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function e1(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function Si(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function r0(r,e={}){let t={...r,name:"PATH_ENDED",type:8};return e.onProgress?.(new CustomEvent("kad-dht:query:path-ended",{detail:t})),t}function R(r,e="utf8"){let t=M1[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}function n0(r,e,t){if(t.length===0)throw new V("No records given");let o=R(e).split("/");if(o.length<3)throw new V("Record key does not have a selector function");let i=r[o[1].toString()];if(i==null)throw new Q1(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:i(e,t)}function J5(r,e){return 0}var o0={pk:J5};function Se(r,e){e==null&&(e=r.reduce((o,i)=>o+i.length,0));let t=he(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}var s0=Symbol.for("@achingbrain/uint8arraylist");function i0(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 Y1(r){return!!r?.[s0]}var te=class r{bufs;length;[s0]=!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(Y1(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(Y1(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=i0(this.bufs,e);return t.buf[t.index]}set(e,t){let n=i0(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(Y1(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 Se(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:Se(n,o)}sublist(e,t){let{bufs:n,length:o}=this._subList(e,t),i=new r;return i.length=o,i.bufs=[...n],i}_subList(e,t){if(e=e??0,t=t??this.length,e<0&&(e=this.length+e),t<0&&(t=this.length+t),e<0||t>this.length)throw new RangeError("index is out of bounds");if(e===t)return{bufs:[],length:0};if(e===0&&t===this.length)return{bufs:this.bufs,length:this.length};let n=[],o=0;for(let i=0;i<this.bufs.length;i++){let s=this.bufs[i],a=o,c=a+s.byteLength;if(o=c,e>=c)continue;let l=e>=a&&e<c,u=t>a&&t<=c;if(l&&u){if(e===a&&t===c){n.push(s);break}let f=e-a;n.push(s.subarray(f,f+(t-e)));break}if(l){if(e===0){n.push(s);continue}n.push(s.subarray(e-a));continue}if(u){if(t===c){n.push(s);break}n.push(s.subarray(0,t-a));break}n.push(s)}return{bufs:n,length:t-e}}indexOf(e,t=0){if(!Y1(e)&&!(e instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let n=e instanceof Uint8Array?e:e.subarray();if(t=Number(t??0),isNaN(t)&&(t=0),t<0&&(t=this.length+t),t<0&&(t=0),e.length===0)return t>this.length?this.length:t;let o=n.byteLength;if(o===0)throw new TypeError("search must be at least 1 byte long");let i=256,s=new Int32Array(i);for(let f=0;f<i;f++)s[f]=-1;for(let f=0;f<o;f++)s[n[f]]=f;let a=s,c=this.byteLength-n.byteLength,l=n.byteLength-1,u;for(let f=t;f<=c;f+=u){u=0;for(let h=l;h>=0;h--){let d=this.get(f+h);if(n[h]!==d){u=Math.max(1,h-a[d]);break}}if(u===0)return f}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=he(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=xe(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=xe(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=xe(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=he(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=xe(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=xe(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=xe(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=xe(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=xe(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat64(0,t,n),this.write(o,e)}equals(e){if(e==null||!(e instanceof r)||e.bufs.length!==this.bufs.length)return!1;for(let t=0;t<this.bufs.length;t++)if(!j(this.bufs[t],e.bufs[t]))return!1;return!0}static fromUint8Arrays(e,t){let n=new r;return n.bufs=e,t==null&&(t=e.reduce((o,i)=>o+i.byteLength,0)),n.length=t,n}};var t6=parseInt("11111",2),_i=parseInt("10000000",2),r6=parseInt("01111111",2),a0={0:t1,1:t1,2:n6,3:s6,4:a6,5:i6,6:o6,16:t1,22:t1,48:t1};function ut(r,e={offset:0}){let t=r[e.offset]&t6;if(e.offset++,a0[t]!=null)return a0[t](r,e);throw new Error("No decoder for tag "+t)}function r1(r,e){let t=0;if((r[e.offset]&_i)===_i){let n=r[e.offset]&r6,o="0x";e.offset++;for(let i=0;i<n;i++,e.offset++)o+=r[e.offset].toString(16).padStart(2,"0");t=parseInt(o,16)}else t=r[e.offset],e.offset++;return t}function t1(r,e){r1(r,e);let t=[];for(;!(e.offset>=r.byteLength);){let n=ut(r,e);if(n===null)break;t.push(n)}return t}function n6(r,e){let t=r1(r,e),n=e.offset,o=e.offset+t,i=[];for(let s=n;s<o;s++)s===n&&r[s]===0||i.push(r[s]);return e.offset+=t,Uint8Array.from(i)}function o6(r,e){let t=r1(r,e),n=e.offset+t,o=r[e.offset];e.offset++;let i=0,s=0;o<40?(i=0,s=o):o<80?(i=1,s=o-40):(i=2,s=o-80);let a=`${i}.${s}`,c=[];for(;e.offset<n;){let l=r[e.offset];if(e.offset++,c.push(l&127),l<128){c.reverse();let u=0;for(let f=0;f<c.length;f++)u+=c[f]<<f*7;a+=`.${u}`,c=[]}}return a}function i6(r,e){return e.offset++,null}function s6(r,e){let t=r1(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 a6(r,e){let t=r1(r,e),n=r.subarray(e.offset,e.offset+t);return e.offset+=t,n}function c6(r){let e=r.toString(16);e.length%2===1&&(e="0"+e);let t=new te;for(let n=0;n<e.length;n+=2)t.append(Uint8Array.from([parseInt(`${e[n]}${e[n+1]}`,16)]));return t}function Ii(r){if(r.byteLength<128)return Uint8Array.from([r.byteLength]);let e=c6(r.byteLength);return new te(Uint8Array.from([e.byteLength|_i]),e)}function ke(r){let e=new te,t=128;return(r.subarray()[0]&t)===t&&e.append(Uint8Array.from([0])),e.append(r),new te(Uint8Array.from([2]),Ii(e),e)}function Z1(r){let e=Uint8Array.from([0]),t=new te(e,r);return new te(Uint8Array.from([3]),Ii(t),t)}function Rt(r,e=48){let t=new te;for(let n of r)t.append(n);return new te(Uint8Array.from([e]),Ii(t),t)}async function c0(r,e,t){let n=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["verify"]);return crypto.subtle.verify({name:"ECDSA",hash:{name:"SHA-256"}},n,e,t.subarray())}var u6=Uint8Array.from([6,8,42,134,72,206,61,3,1,7]),l6=Uint8Array.from([6,5,43,129,4,0,34]),f6=Uint8Array.from([6,5,43,129,4,0,35]),h6={ext:!0,kty:"EC",crv:"P-256"},d6={ext:!0,kty:"EC",crv:"P-384"},p6={ext:!0,kty:"EC",crv:"P-521"},Ai=32,Pi=48,Ti=66;function Ri(r){let e=ut(r);return u0(e)}function u0(r){let e=r[1][1][0],t=1,n,o;if(e.byteLength===Ai*2+1)return n=R(e.subarray(t,t+Ai),"base64url"),o=R(e.subarray(t+Ai),"base64url"),new Sr({...h6,key_ops:["verify"],x:n,y:o});if(e.byteLength===Pi*2+1)return n=R(e.subarray(t,t+Pi),"base64url"),o=R(e.subarray(t+Pi),"base64url"),new Sr({...d6,key_ops:["verify"],x:n,y:o});if(e.byteLength===Ti*2+1)return n=R(e.subarray(t,t+Ti),"base64url"),o=R(e.subarray(t+Ti),"base64url"),new Sr({...p6,key_ops:["verify"],x:n,y:o});throw new V(`coordinates were wrong length, got ${e.byteLength}, expected 65, 97 or 133`)}function l0(r){return Rt([ke(Uint8Array.from([1])),Rt([m6(r.crv)],160),Rt([Z1(new te(Uint8Array.from([4]),U(r.x??"","base64url"),U(r.y??"","base64url")))],161)]).subarray()}function m6(r){if(r==="P-256")return u6;if(r==="P-384")return l6;if(r==="P-521")return f6;throw new V(`Invalid curve ${r}`)}var Sr=class{type="ECDSA";jwk;_raw;constructor(e){this.jwk=e}get raw(){return this._raw==null&&(this._raw=l0(this.jwk)),this._raw}toMultihash(){return He.digest(Lt(this))}toCID(){return X.createV1(114,this.toMultihash())}toString(){return Y.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:j(this.raw,e.raw)}async verify(e,t){return c0(this.jwk,t,e)}};var Qt=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function g6(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function X1(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function jt(r,...e){if(!g6(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error("Uint8Array expected of length "+e+", got length="+r.length)}function f0(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.createHasher");X1(r.outputLen),X1(r.blockLen)}function Ir(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 h0(r,e){jt(r);let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}function lt(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function J1(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function $e(r,e){return r<<32-e|r>>>e}function d0(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}function n1(r){return typeof r=="string"&&(r=d0(r)),jt(r),r}function Li(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];jt(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}var _r=class{};function ki(r){let e=n=>r().update(n1(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function Ar(r=32){if(Qt&&typeof Qt.getRandomValues=="function")return Qt.getRandomValues(new Uint8Array(r));if(Qt&&typeof Qt.randomBytes=="function")return Uint8Array.from(Qt.randomBytes(r));throw new Error("crypto.getRandomValues must be defined")}function y6(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}function p0(r,e,t){return r&e^~r&t}function m0(r,e,t){return r&e^r&t^e&t}var o1=class extends _r{constructor(e,t,n,o){super(),this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.buffer=new Uint8Array(e),this.view=J1(this.buffer)}update(e){Ir(this),e=n1(e),jt(e);let{view:t,buffer:n,blockLen:o}=this,i=e.length;for(let s=0;s<i;){let a=Math.min(o-this.pos,i-s);if(a===o){let c=J1(e);for(;o<=i-s;s+=o)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Ir(this),h0(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;t[s++]=128,lt(this.buffer.subarray(s)),this.padOffset>o-s&&(this.process(n,0),s=0);for(let f=s;f<o;f++)t[f]=0;y6(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=J1(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let l=c/4,u=this.get();if(l>u.length)throw new Error("_sha2: outputLen bigger than state");for(let f=0;f<l;f++)a.setUint32(4*f,u[f],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:s,pos:a}=this;return e.destroyed=s,e.finished=i,e.length=o,e.pos=a,o%t&&e.buffer.set(n),e}clone(){return this._cloneInto()}},ft=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var ge=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var en=BigInt(4294967295),g0=BigInt(32);function w6(r,e=!1){return e?{h:Number(r&en),l:Number(r>>g0&en)}:{h:Number(r>>g0&en)|0,l:Number(r&en)|0}}function y0(r,e=!1){let t=r.length,n=new Uint32Array(t),o=new Uint32Array(t);for(let i=0;i<t;i++){let{h:s,l:a}=w6(r[i],e);[n[i],o[i]]=[s,a]}return[n,o]}var Ci=(r,e,t)=>r>>>t,Di=(r,e,t)=>r<<32-t|e>>>t,Wt=(r,e,t)=>r>>>t|e<<32-t,Yt=(r,e,t)=>r<<32-t|e>>>t,i1=(r,e,t)=>r<<64-t|e>>>t-32,s1=(r,e,t)=>r>>>t-32|e<<64-t;function Ze(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var w0=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),b0=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,x0=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),E0=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,v0=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),S0=(r,e,t,n,o,i)=>e+t+n+o+i+(r/2**32|0)|0;var x6=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]),kt=new Uint32Array(64),tn=class extends o1{constructor(e=32){super(64,e,8,!1),this.A=ft[0]|0,this.B=ft[1]|0,this.C=ft[2]|0,this.D=ft[3]|0,this.E=ft[4]|0,this.F=ft[5]|0,this.G=ft[6]|0,this.H=ft[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:a,H:c}=this;return[e,t,n,o,i,s,a,c]}set(e,t,n,o,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let f=0;f<16;f++,t+=4)kt[f]=e.getUint32(t,!1);for(let f=16;f<64;f++){let h=kt[f-15],d=kt[f-2],y=$e(h,7)^$e(h,18)^h>>>3,g=$e(d,17)^$e(d,19)^d>>>10;kt[f]=g+kt[f-7]+y+kt[f-16]|0}let{A:n,B:o,C:i,D:s,E:a,F:c,G:l,H:u}=this;for(let f=0;f<64;f++){let h=$e(a,6)^$e(a,11)^$e(a,25),d=u+h+p0(a,c,l)+x6[f]+kt[f]|0,g=($e(n,2)^$e(n,13)^$e(n,22))+m0(n,o,i)|0;u=l,l=c,c=a,a=s+d|0,s=i,i=o,o=n,n=d+g|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,u=u+this.H|0,this.set(n,o,i,s,a,c,l,u)}roundClean(){lt(kt)}destroy(){this.set(0,0,0,0,0,0,0,0),lt(this.buffer)}};var _0=y0(["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))),E6=_0[0],v6=_0[1],Ct=new Uint32Array(80),Dt=new Uint32Array(80),Ni=class extends o1{constructor(e=64){super(128,e,16,!1),this.Ah=ge[0]|0,this.Al=ge[1]|0,this.Bh=ge[2]|0,this.Bl=ge[3]|0,this.Ch=ge[4]|0,this.Cl=ge[5]|0,this.Dh=ge[6]|0,this.Dl=ge[7]|0,this.Eh=ge[8]|0,this.El=ge[9]|0,this.Fh=ge[10]|0,this.Fl=ge[11]|0,this.Gh=ge[12]|0,this.Gl=ge[13]|0,this.Hh=ge[14]|0,this.Hl=ge[15]|0}get(){let{Ah:e,Al:t,Bh:n,Bl:o,Ch:i,Cl:s,Dh:a,Dl:c,Eh:l,El:u,Fh:f,Fl:h,Gh:d,Gl:y,Hh:g,Hl:E}=this;return[e,t,n,o,i,s,a,c,l,u,f,h,d,y,g,E]}set(e,t,n,o,i,s,a,c,l,u,f,h,d,y,g,E){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=i|0,this.Cl=s|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=u|0,this.Fh=f|0,this.Fl=h|0,this.Gh=d|0,this.Gl=y|0,this.Hh=g|0,this.Hl=E|0}process(e,t){for(let x=0;x<16;x++,t+=4)Ct[x]=e.getUint32(t),Dt[x]=e.getUint32(t+=4);for(let x=16;x<80;x++){let p=Ct[x-15]|0,b=Dt[x-15]|0,A=Wt(p,b,1)^Wt(p,b,8)^Ci(p,b,7),P=Yt(p,b,1)^Yt(p,b,8)^Di(p,b,7),L=Ct[x-2]|0,B=Dt[x-2]|0,K=Wt(L,B,19)^i1(L,B,61)^Ci(L,B,6),C=Yt(L,B,19)^s1(L,B,61)^Di(L,B,6),O=x0(P,C,Dt[x-7],Dt[x-16]),N=E0(O,A,K,Ct[x-7],Ct[x-16]);Ct[x]=N|0,Dt[x]=O|0}let{Ah:n,Al:o,Bh:i,Bl:s,Ch:a,Cl:c,Dh:l,Dl:u,Eh:f,El:h,Fh:d,Fl:y,Gh:g,Gl:E,Hh:T,Hl:q}=this;for(let x=0;x<80;x++){let p=Wt(f,h,14)^Wt(f,h,18)^i1(f,h,41),b=Yt(f,h,14)^Yt(f,h,18)^s1(f,h,41),A=f&d^~f&g,P=h&y^~h&E,L=v0(q,b,P,v6[x],Dt[x]),B=S0(L,T,p,A,E6[x],Ct[x]),K=L|0,C=Wt(n,o,28)^i1(n,o,34)^i1(n,o,39),O=Yt(n,o,28)^s1(n,o,34)^s1(n,o,39),N=n&i^n&a^i&a,ie=o&s^o&c^s&c;T=g|0,q=E|0,g=d|0,E=y|0,d=f|0,y=h|0,{h:f,l:h}=Ze(l|0,u|0,B|0,K|0),l=a|0,u=c|0,a=i|0,c=s|0,i=n|0,s=o|0;let _=w0(K,O,ie);n=b0(_,B,C,N),o=_|0}({h:n,l:o}=Ze(this.Ah|0,this.Al|0,n|0,o|0)),{h:i,l:s}=Ze(this.Bh|0,this.Bl|0,i|0,s|0),{h:a,l:c}=Ze(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:u}=Ze(this.Dh|0,this.Dl|0,l|0,u|0),{h:f,l:h}=Ze(this.Eh|0,this.El|0,f|0,h|0),{h:d,l:y}=Ze(this.Fh|0,this.Fl|0,d|0,y|0),{h:g,l:E}=Ze(this.Gh|0,this.Gl|0,g|0,E|0),{h:T,l:q}=Ze(this.Hh|0,this.Hl|0,T|0,q|0),this.set(n,o,i,s,a,c,l,u,f,h,d,y,g,E,T,q)}roundClean(){lt(Ct,Dt)}destroy(){lt(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var rn=ki(()=>new tn);var I0=ki(()=>new Ni);var Ui=BigInt(0),Mi=BigInt(1);function Pr(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function Ki(r){if(!Pr(r))throw new Error("Uint8Array expected")}function Xe(r,e){if(typeof e!="boolean")throw new Error(r+" boolean expected, got "+e)}function a1(r){let e=r.toString(16);return e.length&1?"0"+e:e}function T0(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return r===""?Ui:BigInt("0x"+r)}var R0=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",S6=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function Nt(r){if(Ki(r),R0)return r.toHex();let e="";for(let t=0;t<r.length;t++)e+=S6[r[t]];return e}var ht={_0:48,_9:57,A:65,F:70,a:97,f:102};function A0(r){if(r>=ht._0&&r<=ht._9)return r-ht._0;if(r>=ht.A&&r<=ht.F)return r-(ht.A-10);if(r>=ht.a&&r<=ht.f)return r-(ht.a-10)}function c1(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);if(R0)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,i=0;o<t;o++,i+=2){let s=A0(r.charCodeAt(i)),a=A0(r.charCodeAt(i+1));if(s===void 0||a===void 0){let c=r[i]+r[i+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+i)}n[o]=s*16+a}return n}function dt(r){return T0(Nt(r))}function Zt(r){return Ki(r),T0(Nt(Uint8Array.from(r).reverse()))}function Xt(r,e){return c1(r.toString(16).padStart(e*2,"0"))}function Tr(r,e){return Xt(r,e).reverse()}function J(r,e,t){let n;if(typeof e=="string")try{n=c1(e)}catch(i){throw new Error(r+" must be hex string or Uint8Array, cause: "+i)}else if(Pr(e))n=Uint8Array.from(e);else throw new Error(r+" must be hex string or Uint8Array");let o=n.length;if(typeof t=="number"&&o!==t)throw new Error(r+" of length "+t+" expected, got "+o);return n}function Bt(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];Ki(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}var Bi=r=>typeof r=="bigint"&&Ui<=r;function nn(r,e,t){return Bi(r)&&Bi(e)&&Bi(t)&&e<=r&&r<t}function Ue(r,e,t,n){if(!nn(e,t,n))throw new Error("expected valid "+r+": "+t+" <= n < "+n+", got "+e)}function L0(r){let e;for(e=0;r>Ui;r>>=Mi,e+=1);return e}var Jt=r=>(Mi<<BigInt(r))-Mi,Oi=r=>new Uint8Array(r),P0=r=>Uint8Array.from(r);function k0(r,e,t){if(typeof r!="number"||r<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof t!="function")throw new Error("hmacFn must be a function");let n=Oi(r),o=Oi(r),i=0,s=()=>{n.fill(1),o.fill(0),i=0},a=(...f)=>t(o,n,...f),c=(f=Oi(0))=>{o=a(P0([0]),f),n=a(),f.length!==0&&(o=a(P0([1]),f),n=a())},l=()=>{if(i++>=1e3)throw new Error("drbg: tried 1000 values");let f=0,h=[];for(;f<e;){n=a();let d=n.slice();h.push(d),f+=n.length}return Bt(...h)};return(f,h)=>{s(),c(f);let d;for(;!(d=h(l()));)c();return s(),d}}var _6={bigint:r=>typeof r=="bigint",function:r=>typeof r=="function",boolean:r=>typeof r=="boolean",string:r=>typeof r=="string",stringOrUint8Array:r=>typeof r=="string"||Pr(r),isSafeInteger:r=>Number.isSafeInteger(r),array:r=>Array.isArray(r),field:(r,e)=>e.Fp.isValid(r),hash:r=>typeof r=="function"&&Number.isSafeInteger(r.outputLen)};function pt(r,e,t={}){let n=(o,i,s)=>{let a=_6[i];if(typeof a!="function")throw new Error("invalid validator function");let c=r[o];if(!(s&&c===void 0)&&!a(c,r))throw new Error("param "+String(o)+" is invalid. Expected "+i+", got "+c)};for(let[o,i]of Object.entries(e))n(o,i,!1);for(let[o,i]of Object.entries(t))n(o,i,!0);return r}function Rr(r){let e=new WeakMap;return(t,...n)=>{let o=e.get(t);if(o!==void 0)return o;let i=r(t,...n);return e.set(t,i),i}}var Ie=BigInt(0),de=BigInt(1),er=BigInt(2),I6=BigInt(3),D0=BigInt(4),N0=BigInt(5),B0=BigInt(8);function Z(r,e){let t=r%e;return t>=Ie?t:e+t}function ee(r,e,t){let n=r;for(;e-- >Ie;)n*=n,n%=t;return n}function on(r,e){if(r===Ie)throw new Error("invert: expected non-zero number");if(e<=Ie)throw new Error("invert: expected positive modulus, got "+e);let t=Z(r,e),n=e,o=Ie,i=de,s=de,a=Ie;for(;t!==Ie;){let l=n/t,u=n%t,f=o-s*l,h=i-a*l;n=t,t=u,o=s,i=a,s=f,a=h}if(n!==de)throw new Error("invert: does not exist");return Z(o,e)}function O0(r,e){let t=(r.ORDER+de)/D0,n=r.pow(e,t);if(!r.eql(r.sqr(n),e))throw new Error("Cannot find square root");return n}function A6(r,e){let t=(r.ORDER-N0)/B0,n=r.mul(e,er),o=r.pow(n,t),i=r.mul(e,o),s=r.mul(r.mul(i,er),o),a=r.mul(i,r.sub(s,r.ONE));if(!r.eql(r.sqr(a),e))throw new Error("Cannot find square root");return a}function P6(r){if(r<BigInt(3))throw new Error("sqrt is not defined for small field");let e=r-de,t=0;for(;e%er===Ie;)e/=er,t++;let n=er,o=mt(r);for(;C0(o,n)===1;)if(n++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(t===1)return O0;let i=o.pow(n,e),s=(e+de)/er;return function(c,l){if(c.is0(l))return l;if(C0(c,l)!==1)throw new Error("Cannot find square root");let u=t,f=c.mul(c.ONE,i),h=c.pow(l,e),d=c.pow(l,s);for(;!c.eql(h,c.ONE);){if(c.is0(h))return c.ZERO;let y=1,g=c.sqr(h);for(;!c.eql(g,c.ONE);)if(y++,g=c.sqr(g),y===u)throw new Error("Cannot find square root");let E=de<<BigInt(u-y-1),T=c.pow(f,E);u=y,f=c.sqr(T),h=c.mul(h,f),d=c.mul(d,T)}return d}}function T6(r){return r%D0===I6?O0:r%B0===N0?A6:P6(r)}var M0=(r,e)=>(Z(r,e)&de)===de,R6=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function qi(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=R6.reduce((n,o)=>(n[o]="function",n),e);return pt(r,t)}function L6(r,e,t){if(t<Ie)throw new Error("invalid exponent, negatives unsupported");if(t===Ie)return r.ONE;if(t===de)return e;let n=r.ONE,o=e;for(;t>Ie;)t&de&&(n=r.mul(n,o)),o=r.sqr(o),t>>=de;return n}function Lr(r,e,t=!1){let n=new Array(e.length).fill(t?r.ZERO:void 0),o=e.reduce((s,a,c)=>r.is0(a)?s:(n[c]=s,r.mul(s,a)),r.ONE),i=r.inv(o);return e.reduceRight((s,a,c)=>r.is0(a)?s:(n[c]=r.mul(s,n[c]),r.mul(s,a)),i),n}function C0(r,e){let t=(r.ORDER-de)/er,n=r.pow(e,t),o=r.eql(n,r.ONE),i=r.eql(n,r.ZERO),s=r.eql(n,r.neg(r.ONE));if(!o&&!i&&!s)throw new Error("invalid Legendre symbol result");return o?1:i?0:-1}function Fi(r,e){e!==void 0&&X1(e);let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function mt(r,e,t=!1,n={}){if(r<=Ie)throw new Error("invalid field: expected ORDER > 0, got "+r);let{nBitLength:o,nByteLength:i}=Fi(r,e);if(i>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");let s,a=Object.freeze({ORDER:r,isLE:t,BITS:o,BYTES:i,MASK:Jt(o),ZERO:Ie,ONE:de,create:c=>Z(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof c);return Ie<=c&&c<r},is0:c=>c===Ie,isOdd:c=>(c&de)===de,neg:c=>Z(-c,r),eql:(c,l)=>c===l,sqr:c=>Z(c*c,r),add:(c,l)=>Z(c+l,r),sub:(c,l)=>Z(c-l,r),mul:(c,l)=>Z(c*l,r),pow:(c,l)=>L6(a,c,l),div:(c,l)=>Z(c*on(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>on(c,r),sqrt:n.sqrt||(c=>(s||(s=T6(r)),s(a,c))),toBytes:c=>t?Tr(c,i):Xt(c,i),fromBytes:c=>{if(c.length!==i)throw new Error("Field.fromBytes: expected "+i+" bytes, got "+c.length);return t?Zt(c):dt(c)},invertBatch:c=>Lr(a,c),cmov:(c,l,u)=>u?l:c});return Object.freeze(a)}function U0(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 zi(r){let e=U0(r);return e+Math.ceil(e/2)}function K0(r,e,t=!1){let n=r.length,o=U0(e),i=zi(e);if(n<16||n<i||n>1024)throw new Error("expected "+i+"-1024 bytes of input, got "+n);let s=t?Zt(r):dt(r),a=Z(s,e-de)+de;return t?Tr(a,o):Xt(a,o)}var q0=BigInt(0),Qi=BigInt(1);function Vi(r,e){let t=e.negate();return r?t:e}function z0(r,e){if(!Number.isSafeInteger(r)||r<=0||r>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+r)}function Hi(r,e){z0(r,e);let t=Math.ceil(e/r)+1,n=2**(r-1),o=2**r,i=Jt(r),s=BigInt(r);return{windows:t,windowSize:n,mask:i,maxNumber:o,shiftBy:s}}function F0(r,e,t){let{windowSize:n,mask:o,maxNumber:i,shiftBy:s}=t,a=Number(r&o),c=r>>s;a>n&&(a-=i,c+=Qi);let l=e*n,u=l+Math.abs(a)-1,f=a===0,h=a<0,d=e%2!==0;return{nextN:c,offset:u,isZero:f,isNeg:h,isNegF:d,offsetF:l}}function k6(r,e){if(!Array.isArray(r))throw new Error("array expected");r.forEach((t,n)=>{if(!(t instanceof e))throw new Error("invalid point at index "+n)})}function C6(r,e){if(!Array.isArray(r))throw new Error("array of scalars expected");r.forEach((t,n)=>{if(!e.isValid(t))throw new Error("invalid scalar at index "+n)})}var Gi=new WeakMap,V0=new WeakMap;function $i(r){return V0.get(r)||1}function sn(r,e){return{constTimeNegate:Vi,hasPrecomputes(t){return $i(t)!==1},unsafeLadder(t,n,o=r.ZERO){let i=t;for(;n>q0;)n&Qi&&(o=o.add(i)),i=i.double(),n>>=Qi;return o},precomputeWindow(t,n){let{windows:o,windowSize:i}=Hi(n,e),s=[],a=t,c=a;for(let l=0;l<o;l++){c=a,s.push(c);for(let u=1;u<i;u++)c=c.add(a),s.push(c);a=c.double()}return s},wNAF(t,n,o){let i=r.ZERO,s=r.BASE,a=Hi(t,e);for(let c=0;c<a.windows;c++){let{nextN:l,offset:u,isZero:f,isNeg:h,isNegF:d,offsetF:y}=F0(o,c,a);o=l,f?s=s.add(Vi(d,n[y])):i=i.add(Vi(h,n[u]))}return{p:i,f:s}},wNAFUnsafe(t,n,o,i=r.ZERO){let s=Hi(t,e);for(let a=0;a<s.windows&&o!==q0;a++){let{nextN:c,offset:l,isZero:u,isNeg:f}=F0(o,a,s);if(o=c,!u){let h=n[l];i=i.add(f?h.negate():h)}}return i},getPrecomputes(t,n,o){let i=Gi.get(n);return i||(i=this.precomputeWindow(n,t),t!==1&&Gi.set(n,o(i))),i},wNAFCached(t,n,o){let i=$i(t);return this.wNAF(i,this.getPrecomputes(i,t,o),n)},wNAFCachedUnsafe(t,n,o,i){let s=$i(t);return s===1?this.unsafeLadder(t,n,i):this.wNAFUnsafe(s,this.getPrecomputes(s,t,o),n,i)},setWindowSize(t,n){z0(n,e),V0.set(t,n),Gi.delete(t)}}}function an(r,e,t,n){k6(t,r),C6(n,e);let o=t.length,i=n.length;if(o!==i)throw new Error("arrays of points and scalars must have equal length");let s=r.ZERO,a=L0(BigInt(o)),c=1;a>12?c=a-3:a>4?c=a-2:a>0&&(c=2);let l=Jt(c),u=new Array(Number(l)+1).fill(s),f=Math.floor((e.BITS-1)/c)*c,h=s;for(let d=f;d>=0;d-=c){u.fill(s);for(let g=0;g<i;g++){let E=n[g],T=Number(E>>BigInt(d)&l);u[T]=u[T].add(t[g])}let y=s;for(let g=u.length-1,E=s;g>0;g--)E=E.add(u[g]),y=y.add(E);if(h=h.add(y),d!==0)for(let g=0;g<c;g++)h=h.double()}return h}function u1(r){return qi(r.Fp),pt(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...Fi(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Je=BigInt(0),Ae=BigInt(1),H0=BigInt(2),D6=BigInt(8),N6={zip215:!0};function B6(r){let e=u1(r);return pt(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function G0(r){let e=B6(r),{Fp:t,n,prehash:o,hash:i,randomBytes:s,nByteLength:a,h:c}=e,l=H0<<BigInt(a*8)-Ae,u=t.create,f=mt(e.n,e.nBitLength);function h(v,m){let w=t.sqr(v),I=t.sqr(m),D=t.add(t.mul(e.a,w),I),M=t.add(t.ONE,t.mul(e.d,t.mul(w,I)));return t.eql(D,M)}if(!h(e.Gx,e.Gy))throw new Error("bad curve params: generator point");let d=e.uvRatio||((v,m)=>{try{return{isValid:!0,value:t.sqrt(v*t.inv(m))}}catch{return{isValid:!1,value:Je}}}),y=e.adjustScalarBytes||(v=>v),g=e.domain||((v,m,w)=>{if(Xe("phflag",w),m.length||w)throw new Error("Contexts/pre-hash are not supported");return v});function E(v,m,w=!1){let I=w?Ae:Je;Ue("coordinate "+v,m,I,l)}function T(v){if(!(v instanceof p))throw new Error("ExtendedPoint expected")}let q=Rr((v,m)=>{let{ex:w,ey:I,ez:D}=v,M=v.is0();m==null&&(m=M?D6:t.inv(D));let F=u(w*m),z=u(I*m),G=u(D*m);if(M)return{x:Je,y:Ae};if(G!==Ae)throw new Error("invZ was invalid");return{x:F,y:z}}),x=Rr(v=>{let{a:m,d:w}=e;if(v.is0())throw new Error("bad point: ZERO");let{ex:I,ey:D,ez:M,et:F}=v,z=u(I*I),G=u(D*D),Q=u(M*M),se=u(Q*Q),ne=u(z*m),me=u(Q*u(ne+G)),Pe=u(se+u(w*u(z*G)));if(me!==Pe)throw new Error("bad point: equation left != right (1)");let fe=u(I*D),we=u(M*F);if(fe!==we)throw new Error("bad point: equation left != right (2)");return!0});class p{constructor(m,w,I,D){E("x",m),E("y",w),E("z",I,!0),E("t",D),this.ex=m,this.ey=w,this.ez=I,this.et=D,Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(m){if(m instanceof p)throw new Error("extended point not allowed");let{x:w,y:I}=m||{};return E("x",w),E("y",I),new p(w,I,Ae,u(w*I))}static normalizeZ(m){let w=Lr(t,m.map(I=>I.ez));return m.map((I,D)=>I.toAffine(w[D])).map(p.fromAffine)}static msm(m,w){return an(p,f,m,w)}_setWindowSize(m){P.setWindowSize(this,m)}assertValidity(){x(this)}equals(m){T(m);let{ex:w,ey:I,ez:D}=this,{ex:M,ey:F,ez:z}=m,G=u(w*z),Q=u(M*D),se=u(I*z),ne=u(F*D);return G===Q&&se===ne}is0(){return this.equals(p.ZERO)}negate(){return new p(u(-this.ex),this.ey,this.ez,u(-this.et))}double(){let{a:m}=e,{ex:w,ey:I,ez:D}=this,M=u(w*w),F=u(I*I),z=u(H0*u(D*D)),G=u(m*M),Q=w+I,se=u(u(Q*Q)-M-F),ne=G+F,me=ne-z,Pe=G-F,fe=u(se*me),we=u(ne*Pe),Ne=u(se*Pe),qe=u(me*ne);return new p(fe,we,qe,Ne)}add(m){T(m);let{a:w,d:I}=e,{ex:D,ey:M,ez:F,et:z}=this,{ex:G,ey:Q,ez:se,et:ne}=m,me=u(D*G),Pe=u(M*Q),fe=u(z*I*ne),we=u(F*se),Ne=u((D+M)*(G+Q)-me-Pe),qe=we-fe,Ur=we+fe,zs=u(Pe-w*me),a4=u(Ne*qe),c4=u(Ur*zs),u4=u(Ne*zs),l4=u(qe*Ur);return new p(a4,c4,l4,u4)}subtract(m){return this.add(m.negate())}wNAF(m){return P.wNAFCached(this,m,p.normalizeZ)}multiply(m){let w=m;Ue("scalar",w,Ae,n);let{p:I,f:D}=this.wNAF(w);return p.normalizeZ([I,D])[0]}multiplyUnsafe(m,w=p.ZERO){let I=m;return Ue("scalar",I,Je,n),I===Je?A:this.is0()||I===Ae?this:P.wNAFCachedUnsafe(this,I,p.normalizeZ,w)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return P.unsafeLadder(this,n).is0()}toAffine(m){return q(this,m)}clearCofactor(){let{h:m}=e;return m===Ae?this:this.multiplyUnsafe(m)}static fromHex(m,w=!1){let{d:I,a:D}=e,M=t.BYTES;m=J("pointHex",m,M),Xe("zip215",w);let F=m.slice(),z=m[M-1];F[M-1]=z&-129;let G=Zt(F),Q=w?l:t.ORDER;Ue("pointHex.y",G,Je,Q);let se=u(G*G),ne=u(se-Ae),me=u(I*se-D),{isValid:Pe,value:fe}=d(ne,me);if(!Pe)throw new Error("Point.fromHex: invalid y coordinate");let we=(fe&Ae)===Ae,Ne=(z&128)!==0;if(!w&&fe===Je&&Ne)throw new Error("Point.fromHex: x=0 and x_0=1");return Ne!==we&&(fe=u(-fe)),p.fromAffine({x:fe,y:G})}static fromPrivateKey(m){let{scalar:w}=K(m);return b.multiply(w)}toRawBytes(){let{x:m,y:w}=this.toAffine(),I=Tr(w,t.BYTES);return I[I.length-1]|=m&Ae?128:0,I}toHex(){return Nt(this.toRawBytes())}}p.BASE=new p(e.Gx,e.Gy,Ae,u(e.Gx*e.Gy)),p.ZERO=new p(Je,Ae,Ae,Je);let{BASE:b,ZERO:A}=p,P=sn(p,a*8);function L(v){return Z(v,n)}function B(v){return L(Zt(v))}function K(v){let m=t.BYTES;v=J("private key",v,m);let w=J("hashed private key",i(v),2*m),I=y(w.slice(0,m)),D=w.slice(m,2*m),M=B(I);return{head:I,prefix:D,scalar:M}}function C(v){let{head:m,prefix:w,scalar:I}=K(v),D=b.multiply(I),M=D.toRawBytes();return{head:m,prefix:w,scalar:I,point:D,pointBytes:M}}function O(v){return C(v).pointBytes}function N(v=Uint8Array.of(),...m){let w=Bt(...m);return B(i(g(w,J("context",v),!!o)))}function ie(v,m,w={}){v=J("message",v),o&&(v=o(v));let{prefix:I,scalar:D,pointBytes:M}=C(m),F=N(w.context,I,v),z=b.multiply(F).toRawBytes(),G=N(w.context,z,M,v),Q=L(F+G*D);Ue("signature.s",Q,Je,n);let se=Bt(z,Tr(Q,t.BYTES));return J("result",se,t.BYTES*2)}let _=N6;function S(v,m,w,I=_){let{context:D,zip215:M}=I,F=t.BYTES;v=J("signature",v,2*F),m=J("message",m),w=J("publicKey",w,F),M!==void 0&&Xe("zip215",M),o&&(m=o(m));let z=Zt(v.slice(F,2*F)),G,Q,se;try{G=p.fromHex(w,M),Q=p.fromHex(v.slice(0,F),M),se=b.multiplyUnsafe(z)}catch{return!1}if(!M&&G.isSmallOrder())return!1;let ne=N(D,Q.toRawBytes(),G.toRawBytes(),m);return Q.add(G.multiplyUnsafe(ne)).subtract(se).clearCofactor().equals(p.ZERO)}return b._setWindowSize(8),{CURVE:e,getPublicKey:O,sign:ie,verify:S,ExtendedPoint:p,utils:{getExtendedPublicKey:C,randomPrivateKey:()=>s(t.BYTES),precompute(v=8,m=p.BASE){return m._setWindowSize(v),m.multiply(BigInt(3)),m}}}}var ji=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),$0=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),Vu=BigInt(0),O6=BigInt(1),Q0=BigInt(2),Hu=BigInt(3),M6=BigInt(5),U6=BigInt(8);function K6(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),i=ji,a=r*r%i*r%i,c=ee(a,Q0,i)*a%i,l=ee(c,O6,i)*r%i,u=ee(l,M6,i)*l%i,f=ee(u,e,i)*u%i,h=ee(f,t,i)*f%i,d=ee(h,n,i)*h%i,y=ee(d,o,i)*d%i,g=ee(y,o,i)*d%i,E=ee(g,e,i)*u%i;return{pow_p_5_8:ee(E,Q0,i)*r%i,b2:a}}function q6(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function F6(r,e){let t=ji,n=Z(e*e*e,t),o=Z(n*n*e,t),i=K6(r*o).pow_p_5_8,s=Z(r*n*i,t),a=Z(e*s*s,t),c=s,l=Z(s*$0,t),u=a===r,f=a===Z(-r,t),h=a===Z(-r*$0,t);return u&&(s=c),(f||h)&&(s=l),M0(s,t)&&(s=Z(-s,t)),{isValid:u||f,value:s}}var j0=mt(ji,void 0,!0),z6={a:j0.create(BigInt(-1)),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:j0,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:U6,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:I0,randomBytes:Ar,adjustScalarBytes:q6,uvRatio:F6},W0=G0(z6);var cn=32;function Y0(r,e,t){return W0.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}var un=class{type="Ed25519";raw;constructor(e){this.raw=Wi(e,cn)}toMultihash(){return He.digest(Lt(this))}toCID(){return X.createV1(114,this.toMultihash())}toString(){return Y.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:j(this.raw,e.raw)}verify(e,t){return Y0(this.raw,t,e)}};function Yi(r){return r=Wi(r,cn),new un(r)}function Wi(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new V(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var oe;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1",r.ECDSA="ECDSA"})(oe||(oe={}));var Zi;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1",r[r.ECDSA=3]="ECDSA"})(Zi||(Zi={}));(function(r){r.codec=()=>gr(Zi)})(oe||(oe={}));var et;(function(r){let e;r.codec=()=>(e==null&&(e=Ye((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),oe.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.Type=oe.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>We(t,r.codec()),r.decode=(t,n)=>je(t,r.codec(),n)})(et||(et={}));var Xi;(function(r){let e;r.codec=()=>(e==null&&(e=Ye((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),oe.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.Type=oe.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>We(t,r.codec()),r.decode=(t,n)=>je(t,r.codec(),n)})(Xi||(Xi={}));function ln(r){if(isNaN(r)||r<=0)throw new V("random bytes length must be a Number bigger than 0");return Ar(r)}var l1=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},fn=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var J0={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new fn("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 Ot=J0;var h1={};Te(h1,{MAX_RSA_KEY_SIZE:()=>Ji,generateRSAKeyPair:()=>n3,jwkToJWKKeyPair:()=>o3,jwkToPkcs1:()=>Q6,jwkToPkix:()=>ns,jwkToRSAPrivateKey:()=>as,pkcs1MessageToJwk:()=>ts,pkcs1MessageToRSAPrivateKey:()=>os,pkcs1ToJwk:()=>$6,pkcs1ToRSAPrivateKey:()=>r3,pkixMessageToJwk:()=>rs,pkixMessageToRSAPublicKey:()=>ss,pkixToJwk:()=>j6,pkixToRSAPublicKey:()=>is});var hn=rn;var kr=class{type="RSA";jwk;_raw;_multihash;constructor(e,t){this.jwk=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=h1.jwkToPkix(this.jwk)),this._raw}toMultihash(){return this._multihash}toCID(){return X.createV1(114,this._multihash)}toString(){return Y.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:j(this.raw,e.raw)}verify(e,t){return t3(this.jwk,t,e)}},f1=class{type="RSA";jwk;_raw;publicKey;constructor(e,t){this.jwk=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=h1.jwkToPkcs1(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:j(this.raw,e.raw)}sign(e){return e3(this.jwk,e)}};var Ji=8192,es=18,H6=1062,G6=Uint8Array.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);function $6(r){let e=ut(r);return ts(e)}function ts(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 Q6(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 V("JWK was missing components");return Rt([ke(Uint8Array.from([0])),ke(U(r.n,"base64url")),ke(U(r.e,"base64url")),ke(U(r.d,"base64url")),ke(U(r.p,"base64url")),ke(U(r.q,"base64url")),ke(U(r.dp,"base64url")),ke(U(r.dq,"base64url")),ke(U(r.qi,"base64url"))]).subarray()}function j6(r){let e=ut(r,{offset:0});return rs(e)}function rs(r){let e=ut(r[1],{offset:0});return{kty:"RSA",n:R(e[0],"base64url"),e:R(e[1],"base64url")}}function ns(r){if(r.n==null||r.e==null)throw new V("JWK was missing components");return Rt([G6,Z1(Rt([ke(U(r.n,"base64url")),ke(U(r.e,"base64url"))]))]).subarray()}function r3(r){let e=ut(r);return os(e)}function os(r){let e=ts(r);return as(e)}function is(r,e){if(r.byteLength>=H6)throw new nt("Key size is too large");let t=ut(r,{offset:0});return ss(t,r,e)}function ss(r,e,t){let n=rs(r);if(t==null){let o=hn(et.encode({Type:oe.RSA,Data:e}));t=Ve(es,o)}return new kr(n,t)}function as(r){if(s3(r)>Ji)throw new V("Key size is too large");let e=o3(r),t=hn(et.encode({Type:oe.RSA,Data:ns(e.publicKey)})),n=Ve(es,t);return new f1(e.privateKey,new kr(e.publicKey,n))}async function n3(r){if(r>Ji)throw new V("Key size is too large");let e=await i3(r),t=hn(et.encode({Type:oe.RSA,Data:ns(e.publicKey)})),n=Ve(es,t);return new f1(e.privateKey,new kr(e.publicKey,n))}function o3(r){if(r==null)throw new V("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}async function i3(r){let e=await Ot.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),t=await W6(e);return{privateKey:t[0],publicKey:t[1]}}async function e3(r,e){let t=await Ot.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await Ot.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function t3(r,e,t){let n=await Ot.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return Ot.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function W6(r){if(r.privateKey==null||r.publicKey==null)throw new V("Private and public key are required");return Promise.all([Ot.get().subtle.exportKey("jwk",r.privateKey),Ot.get().subtle.exportKey("jwk",r.publicKey)])}function s3(r){if(r.kty!=="RSA")throw new V("invalid key type");if(r.n==null)throw new V("invalid key modulus");return U(r.n,"base64url").length*8}var dn=class extends _r{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,f0(e);let n=n1(t);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let o=this.blockLen,i=new Uint8Array(o);i.set(n.length>o?e.create().update(n).digest():n);for(let s=0;s<i.length;s++)i[s]^=54;this.iHash.update(i),this.oHash=e.create();for(let s=0;s<i.length;s++)i[s]^=106;this.oHash.update(i),lt(i)}update(e){return Ir(this),this.iHash.update(e),this}digestInto(e){Ir(this),jt(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));let{oHash:t,iHash:n,finished:o,destroyed:i,blockLen:s,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=i,e.blockLen=s,e.outputLen=a,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},cs=(r,e,t)=>new dn(r,e).update(t).digest();cs.create=(r,e)=>new dn(r,e);function a3(r){r.lowS!==void 0&&Xe("lowS",r.lowS),r.prehash!==void 0&&Xe("prehash",r.prehash)}function Y6(r){let e=u1(r);pt(e,{a:"field",b:"field"},{allowInfinityPoint:"boolean",allowedPrivateKeyLengths:"array",clearCofactor:"function",fromBytes:"function",isTorsionFree:"function",toBytes:"function",wrapPrivateKey:"boolean"});let{endo:t,Fp:n,a:o}=e;if(t){if(!n.eql(o,n.ZERO))throw new Error("invalid endo: CURVE.a must be 0");if(typeof t!="object"||typeof t.beta!="bigint"||typeof t.splitScalar!="function")throw new Error('invalid endo: expected "beta": bigint and "splitScalar": function')}return Object.freeze({...e})}var fs=class extends Error{constructor(e=""){super(e)}},gt={Err:fs,_tlv:{encode:(r,e)=>{let{Err:t}=gt;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=a1(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let i=n>127?a1(o.length/2|128):"";return a1(r)+i+o+e},decode(r,e){let{Err:t}=gt,n=0;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length<2||e[n++]!==r)throw new t("tlv.decode: wrong tlv");let o=e[n++],i=!!(o&128),s=0;if(!i)s=o;else{let c=o&127;if(!c)throw new t("tlv.decode(long): indefinite length not supported");if(c>4)throw new t("tlv.decode(long): byte length is too big");let l=e.subarray(n,n+c);if(l.length!==c)throw new t("tlv.decode: length bytes not complete");if(l[0]===0)throw new t("tlv.decode(long): zero leftmost byte");for(let u of l)s=s<<8|u;if(n+=c,s<128)throw new t("tlv.decode(long): not minimal encoding")}let a=e.subarray(n,n+s);if(a.length!==s)throw new t("tlv.decode: wrong value length");return{v:a,l:e.subarray(n+s)}}},_int:{encode(r){let{Err:e}=gt;if(r<yt)throw new e("integer: negative integers are not allowed");let t=a1(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}=gt;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 dt(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=gt,o=J("signature",r),{v:i,l:s}=n.decode(48,o);if(s.length)throw new e("invalid signature: left bytes after parsing");let{v:a,l:c}=n.decode(2,i),{v:l,l:u}=n.decode(2,c);if(u.length)throw new e("invalid signature: left bytes after parsing");return{r:t.decode(a),s:t.decode(l)}},hexFromSig(r){let{_tlv:e,_int:t}=gt,n=e.encode(2,t.encode(r.r)),o=e.encode(2,t.encode(r.s)),i=n+o;return e.encode(48,i)}};function us(r,e){return Nt(Xt(r,e))}var yt=BigInt(0),pe=BigInt(1),Hl=BigInt(2),ls=BigInt(3),Z6=BigInt(4);function X6(r){let e=Y6(r),{Fp:t}=e,n=mt(e.n,e.nBitLength),o=e.toBytes||((x,p,b)=>{let A=p.toAffine();return Bt(Uint8Array.from([4]),t.toBytes(A.x),t.toBytes(A.y))}),i=e.fromBytes||(x=>{let p=x.subarray(1),b=t.fromBytes(p.subarray(0,t.BYTES)),A=t.fromBytes(p.subarray(t.BYTES,2*t.BYTES));return{x:b,y:A}});function s(x){let{a:p,b}=e,A=t.sqr(x),P=t.mul(A,x);return t.add(t.add(P,t.mul(x,p)),b)}function a(x,p){let b=t.sqr(p),A=s(x);return t.eql(b,A)}if(!a(e.Gx,e.Gy))throw new Error("bad curve params: generator point");let c=t.mul(t.pow(e.a,ls),Z6),l=t.mul(t.sqr(e.b),BigInt(27));if(t.is0(t.add(c,l)))throw new Error("bad curve params: a or b");function u(x){return nn(x,pe,e.n)}function f(x){let{allowedPrivateKeyLengths:p,nByteLength:b,wrapPrivateKey:A,n:P}=e;if(p&&typeof x!="bigint"){if(Pr(x)&&(x=Nt(x)),typeof x!="string"||!p.includes(x.length))throw new Error("invalid private key");x=x.padStart(b*2,"0")}let L;try{L=typeof x=="bigint"?x:dt(J("private key",x,b))}catch{throw new Error("invalid private key, expected hex or "+b+" bytes, got "+typeof x)}return A&&(L=Z(L,P)),Ue("private key",L,pe,P),L}function h(x){if(!(x instanceof g))throw new Error("ProjectivePoint expected")}let d=Rr((x,p)=>{let{px:b,py:A,pz:P}=x;if(t.eql(P,t.ONE))return{x:b,y:A};let L=x.is0();p==null&&(p=L?t.ONE:t.inv(P));let B=t.mul(b,p),K=t.mul(A,p),C=t.mul(P,p);if(L)return{x:t.ZERO,y:t.ZERO};if(!t.eql(C,t.ONE))throw new Error("invZ was invalid");return{x:B,y:K}}),y=Rr(x=>{if(x.is0()){if(e.allowInfinityPoint&&!t.is0(x.py))return;throw new Error("bad point: ZERO")}let{x:p,y:b}=x.toAffine();if(!t.isValid(p)||!t.isValid(b))throw new Error("bad point: x or y not FE");if(!a(p,b))throw new Error("bad point: equation left != right");if(!x.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class g{constructor(p,b,A){if(p==null||!t.isValid(p))throw new Error("x required");if(b==null||!t.isValid(b)||t.is0(b))throw new Error("y required");if(A==null||!t.isValid(A))throw new Error("z required");this.px=p,this.py=b,this.pz=A,Object.freeze(this)}static fromAffine(p){let{x:b,y:A}=p||{};if(!p||!t.isValid(b)||!t.isValid(A))throw new Error("invalid affine point");if(p instanceof g)throw new Error("projective point not allowed");let P=L=>t.eql(L,t.ZERO);return P(b)&&P(A)?g.ZERO:new g(b,A,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(p){let b=Lr(t,p.map(A=>A.pz));return p.map((A,P)=>A.toAffine(b[P])).map(g.fromAffine)}static fromHex(p){let b=g.fromAffine(i(J("pointHex",p)));return b.assertValidity(),b}static fromPrivateKey(p){return g.BASE.multiply(f(p))}static msm(p,b){return an(g,n,p,b)}_setWindowSize(p){q.setWindowSize(this,p)}assertValidity(){y(this)}hasEvenY(){let{y:p}=this.toAffine();if(t.isOdd)return!t.isOdd(p);throw new Error("Field doesn't support isOdd")}equals(p){h(p);let{px:b,py:A,pz:P}=this,{px:L,py:B,pz:K}=p,C=t.eql(t.mul(b,K),t.mul(L,P)),O=t.eql(t.mul(A,K),t.mul(B,P));return C&&O}negate(){return new g(this.px,t.neg(this.py),this.pz)}double(){let{a:p,b}=e,A=t.mul(b,ls),{px:P,py:L,pz:B}=this,K=t.ZERO,C=t.ZERO,O=t.ZERO,N=t.mul(P,P),ie=t.mul(L,L),_=t.mul(B,B),S=t.mul(P,L);return S=t.add(S,S),O=t.mul(P,B),O=t.add(O,O),K=t.mul(p,O),C=t.mul(A,_),C=t.add(K,C),K=t.sub(ie,C),C=t.add(ie,C),C=t.mul(K,C),K=t.mul(S,K),O=t.mul(A,O),_=t.mul(p,_),S=t.sub(N,_),S=t.mul(p,S),S=t.add(S,O),O=t.add(N,N),N=t.add(O,N),N=t.add(N,_),N=t.mul(N,S),C=t.add(C,N),_=t.mul(L,B),_=t.add(_,_),N=t.mul(_,S),K=t.sub(K,N),O=t.mul(_,ie),O=t.add(O,O),O=t.add(O,O),new g(K,C,O)}add(p){h(p);let{px:b,py:A,pz:P}=this,{px:L,py:B,pz:K}=p,C=t.ZERO,O=t.ZERO,N=t.ZERO,ie=e.a,_=t.mul(e.b,ls),S=t.mul(b,L),k=t.mul(A,B),v=t.mul(P,K),m=t.add(b,A),w=t.add(L,B);m=t.mul(m,w),w=t.add(S,k),m=t.sub(m,w),w=t.add(b,P);let I=t.add(L,K);return w=t.mul(w,I),I=t.add(S,v),w=t.sub(w,I),I=t.add(A,P),C=t.add(B,K),I=t.mul(I,C),C=t.add(k,v),I=t.sub(I,C),N=t.mul(ie,w),C=t.mul(_,v),N=t.add(C,N),C=t.sub(k,N),N=t.add(k,N),O=t.mul(C,N),k=t.add(S,S),k=t.add(k,S),v=t.mul(ie,v),w=t.mul(_,w),k=t.add(k,v),v=t.sub(S,v),v=t.mul(ie,v),w=t.add(w,v),S=t.mul(k,w),O=t.add(O,S),S=t.mul(I,w),C=t.mul(m,C),C=t.sub(C,S),S=t.mul(m,k),N=t.mul(I,N),N=t.add(N,S),new g(C,O,N)}subtract(p){return this.add(p.negate())}is0(){return this.equals(g.ZERO)}wNAF(p){return q.wNAFCached(this,p,g.normalizeZ)}multiplyUnsafe(p){let{endo:b,n:A}=e;Ue("scalar",p,yt,A);let P=g.ZERO;if(p===yt)return P;if(this.is0()||p===pe)return this;if(!b||q.hasPrecomputes(this))return q.wNAFCachedUnsafe(this,p,g.normalizeZ);let{k1neg:L,k1:B,k2neg:K,k2:C}=b.splitScalar(p),O=P,N=P,ie=this;for(;B>yt||C>yt;)B&pe&&(O=O.add(ie)),C&pe&&(N=N.add(ie)),ie=ie.double(),B>>=pe,C>>=pe;return L&&(O=O.negate()),K&&(N=N.negate()),N=new g(t.mul(N.px,b.beta),N.py,N.pz),O.add(N)}multiply(p){let{endo:b,n:A}=e;Ue("scalar",p,pe,A);let P,L;if(b){let{k1neg:B,k1:K,k2neg:C,k2:O}=b.splitScalar(p),{p:N,f:ie}=this.wNAF(K),{p:_,f:S}=this.wNAF(O);N=q.constTimeNegate(B,N),_=q.constTimeNegate(C,_),_=new g(t.mul(_.px,b.beta),_.py,_.pz),P=N.add(_),L=ie.add(S)}else{let{p:B,f:K}=this.wNAF(p);P=B,L=K}return g.normalizeZ([P,L])[0]}multiplyAndAddUnsafe(p,b,A){let P=g.BASE,L=(K,C)=>C===yt||C===pe||!K.equals(P)?K.multiplyUnsafe(C):K.multiply(C),B=L(this,b).add(L(p,A));return B.is0()?void 0:B}toAffine(p){return d(this,p)}isTorsionFree(){let{h:p,isTorsionFree:b}=e;if(p===pe)return!0;if(b)return b(g,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:p,clearCofactor:b}=e;return p===pe?this:b?b(g,this):this.multiplyUnsafe(e.h)}toRawBytes(p=!0){return Xe("isCompressed",p),this.assertValidity(),o(g,this,p)}toHex(p=!0){return Xe("isCompressed",p),Nt(this.toRawBytes(p))}}g.BASE=new g(e.Gx,e.Gy,t.ONE),g.ZERO=new g(t.ZERO,t.ONE,t.ZERO);let{endo:E,nBitLength:T}=e,q=sn(g,E?Math.ceil(T/2):T);return{CURVE:e,ProjectivePoint:g,normPrivateKeyToScalar:f,weierstrassEquation:s,isWithinCurveOrder:u}}function J6(r){let e=u1(r);return pt(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function c3(r){let e=J6(r),{Fp:t,n,nByteLength:o,nBitLength:i}=e,s=t.BYTES+1,a=2*t.BYTES+1;function c(_){return Z(_,n)}function l(_){return on(_,n)}let{ProjectivePoint:u,normPrivateKeyToScalar:f,weierstrassEquation:h,isWithinCurveOrder:d}=X6({...e,toBytes(_,S,k){let v=S.toAffine(),m=t.toBytes(v.x),w=Bt;return Xe("isCompressed",k),k?w(Uint8Array.from([S.hasEvenY()?2:3]),m):w(Uint8Array.from([4]),m,t.toBytes(v.y))},fromBytes(_){let S=_.length,k=_[0],v=_.subarray(1);if(S===s&&(k===2||k===3)){let m=dt(v);if(!nn(m,pe,t.ORDER))throw new Error("Point is not on curve");let w=h(m),I;try{I=t.sqrt(w)}catch(F){let z=F instanceof Error?": "+F.message:"";throw new Error("Point is not on curve"+z)}let D=(I&pe)===pe;return(k&1)===1!==D&&(I=t.neg(I)),{x:m,y:I}}else if(S===a&&k===4){let m=t.fromBytes(v.subarray(0,t.BYTES)),w=t.fromBytes(v.subarray(t.BYTES,2*t.BYTES));return{x:m,y:w}}else{let m=s,w=a;throw new Error("invalid Point, expected length of "+m+", or uncompressed "+w+", got "+S)}}});function y(_){let S=n>>pe;return _>S}function g(_){return y(_)?c(-_):_}let E=(_,S,k)=>dt(_.slice(S,k));class T{constructor(S,k,v){Ue("r",S,pe,n),Ue("s",k,pe,n),this.r=S,this.s=k,v!=null&&(this.recovery=v),Object.freeze(this)}static fromCompact(S){let k=o;return S=J("compactSignature",S,k*2),new T(E(S,0,k),E(S,k,2*k))}static fromDER(S){let{r:k,s:v}=gt.toSig(J("DER",S));return new T(k,v)}assertValidity(){}addRecoveryBit(S){return new T(this.r,this.s,S)}recoverPublicKey(S){let{r:k,s:v,recovery:m}=this,w=P(J("msgHash",S));if(m==null||![0,1,2,3].includes(m))throw new Error("recovery id invalid");let I=m===2||m===3?k+e.n:k;if(I>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let D=(m&1)===0?"02":"03",M=u.fromHex(D+us(I,t.BYTES)),F=l(I),z=c(-w*F),G=c(v*F),Q=u.BASE.multiplyAndAddUnsafe(M,z,G);if(!Q)throw new Error("point at infinify");return Q.assertValidity(),Q}hasHighS(){return y(this.s)}normalizeS(){return this.hasHighS()?new T(this.r,c(-this.s),this.recovery):this}toDERRawBytes(){return c1(this.toDERHex())}toDERHex(){return gt.hexFromSig(this)}toCompactRawBytes(){return c1(this.toCompactHex())}toCompactHex(){let S=o;return us(this.r,S)+us(this.s,S)}}let q={isValidPrivateKey(_){try{return f(_),!0}catch{return!1}},normPrivateKeyToScalar:f,randomPrivateKey:()=>{let _=zi(e.n);return K0(e.randomBytes(_),e.n)},precompute(_=8,S=u.BASE){return S._setWindowSize(_),S.multiply(BigInt(3)),S}};function x(_,S=!0){return u.fromPrivateKey(_).toRawBytes(S)}function p(_){if(typeof _=="bigint")return!1;if(_ instanceof u)return!0;let k=J("key",_).length,v=t.BYTES,m=v+1,w=2*v+1;if(!(e.allowedPrivateKeyLengths||o===m))return k===m||k===w}function b(_,S,k=!0){if(p(_)===!0)throw new Error("first arg must be private key");if(p(S)===!1)throw new Error("second arg must be public key");return u.fromHex(S).multiply(f(_)).toRawBytes(k)}let A=e.bits2int||function(_){if(_.length>8192)throw new Error("input is too large");let S=dt(_),k=_.length*8-i;return k>0?S>>BigInt(k):S},P=e.bits2int_modN||function(_){return c(A(_))},L=Jt(i);function B(_){return Ue("num < 2^"+i,_,yt,L),Xt(_,o)}function K(_,S,k=C){if(["recovered","canonical"].some(ne=>ne in k))throw new Error("sign() legacy options not supported");let{hash:v,randomBytes:m}=e,{lowS:w,prehash:I,extraEntropy:D}=k;w==null&&(w=!0),_=J("msgHash",_),a3(k),I&&(_=J("prehashed msgHash",v(_)));let M=P(_),F=f(S),z=[B(F),B(M)];if(D!=null&&D!==!1){let ne=D===!0?m(t.BYTES):D;z.push(J("extraEntropy",ne))}let G=Bt(...z),Q=M;function se(ne){let me=A(ne);if(!d(me))return;let Pe=l(me),fe=u.BASE.multiply(me).toAffine(),we=c(fe.x);if(we===yt)return;let Ne=c(Pe*c(Q+we*F));if(Ne===yt)return;let qe=(fe.x===we?0:2)|Number(fe.y&pe),Ur=Ne;return w&&y(Ne)&&(Ur=g(Ne),qe^=1),new T(we,Ur,qe)}return{seed:G,k2sig:se}}let C={lowS:e.lowS,prehash:!1},O={lowS:e.lowS,prehash:!1};function N(_,S,k=C){let{seed:v,k2sig:m}=K(_,S,k),w=e;return k0(w.hash.outputLen,w.nByteLength,w.hmac)(v,m)}u.BASE._setWindowSize(8);function ie(_,S,k,v=O){let m=_;S=J("msgHash",S),k=J("publicKey",k);let{lowS:w,prehash:I,format:D}=v;if(a3(v),"strict"in v)throw new Error("options.strict was renamed to lowS");if(D!==void 0&&D!=="compact"&&D!=="der")throw new Error("format must be compact or der");let M=typeof m=="string"||Pr(m),F=!M&&!D&&typeof m=="object"&&m!==null&&typeof m.r=="bigint"&&typeof m.s=="bigint";if(!M&&!F)throw new Error("invalid signature, expected Uint8Array, hex string or Signature instance");let z,G;try{if(F&&(z=new T(m.r,m.s)),M){try{D!=="compact"&&(z=T.fromDER(m))}catch(qe){if(!(qe instanceof gt.Err))throw qe}!z&&D!=="der"&&(z=T.fromCompact(m))}G=u.fromHex(k)}catch{return!1}if(!z||w&&z.hasHighS())return!1;I&&(S=e.hash(S));let{r:Q,s:se}=z,ne=P(S),me=l(se),Pe=c(ne*me),fe=c(Q*me),we=u.BASE.multiplyAndAddUnsafe(G,Pe,fe)?.toAffine();return we?c(we.x)===Q:!1}return{CURVE:e,getPublicKey:x,getSharedSecret:b,sign:N,verify:ie,ProjectivePoint:u,Signature:T,utils:q}}function e8(r){return{hash:r,hmac:(e,...t)=>cs(r,e,Li(...t)),randomBytes:Ar}}function u3(r,e){let t=n=>c3({...r,...e8(n)});return{...t(e),create:t}}var h3=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),l3=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),t8=BigInt(0),r8=BigInt(1),hs=BigInt(2),f3=(r,e)=>(r+e/hs)/e;function n8(r){let e=h3,t=BigInt(3),n=BigInt(6),o=BigInt(11),i=BigInt(22),s=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%e,u=l*l*r%e,f=ee(u,t,e)*u%e,h=ee(f,t,e)*u%e,d=ee(h,hs,e)*l%e,y=ee(d,o,e)*d%e,g=ee(y,i,e)*y%e,E=ee(g,a,e)*g%e,T=ee(E,c,e)*E%e,q=ee(T,a,e)*g%e,x=ee(q,t,e)*u%e,p=ee(x,s,e)*y%e,b=ee(p,n,e)*l%e,A=ee(b,hs,e);if(!ds.eql(ds.sqr(A),r))throw new Error("Cannot find square root");return A}var ds=mt(h3,void 0,void 0,{sqrt:n8}),Cr=u3({a:t8,b:BigInt(7),Fp:ds,n:l3,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=l3,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-r8*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=t,s=BigInt("0x100000000000000000000000000000000"),a=f3(i*r,e),c=f3(-n*r,e),l=Z(r-a*t-c*o,e),u=Z(-a*n-c*i,e),f=l>s,h=u>s;if(f&&(l=e-l),h&&(u=e-u),l>s||u>s)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:f,k1:l,k2neg:h,k2:u}}}},rn);function d3(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function p3(r,e,t){let n=st.digest(t instanceof Uint8Array?t:t.subarray());if(d3(n))return n.then(({digest:o})=>Cr.verify(e,o,r)).catch(o=>{throw new l1(String(o))});try{return Cr.verify(e,n.digest,r)}catch(o){throw new l1(String(o))}}var pn=class{type="secp256k1";raw;_key;constructor(e){this._key=g3(e),this.raw=m3(this._key)}toMultihash(){return He.digest(Lt(this))}toCID(){return X.createV1(114,this.toMultihash())}toString(){return Y.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:j(this.raw,e.raw)}verify(e,t){return p3(this._key,t,e)}};function ps(r){return new pn(r)}function m3(r){return Cr.ProjectivePoint.fromHex(r).toRawBytes(!0)}function g3(r){try{return Cr.ProjectivePoint.fromHex(r),r}catch(e){throw new nt(String(e))}}function mn(r,e){let{Type:t,Data:n}=et.decode(r),o=n??new Uint8Array;switch(t){case oe.RSA:return is(o,e);case oe.Ed25519:return Yi(o);case oe.secp256k1:return ps(o);case oe.ECDSA:return Ri(o);default:throw new Ft}}function y3(r){let{Type:e,Data:t}=et.decode(r.digest),n=t??new Uint8Array;switch(e){case oe.Ed25519:return Yi(n);case oe.secp256k1:return ps(n);case oe.ECDSA:return Ri(n);default:throw new Ft}}function Lt(r){return et.encode({Type:oe[r.type],Data:r.raw})}async function Dr(r,e){let t=e.key,o=R(t).split("/");if(o.length<3)return;let i=r[o[1].toString()];if(i==null)throw new V(`No validator available for key type "${o[1]}"`);await i(t,e.value)}var o8=async(r,e)=>{if(!(r instanceof Uint8Array))throw new V('"key" must be a Uint8Array');if(r.byteLength<5)throw new V("Invalid public key record");if(R(r.subarray(0,4))!=="/pk/")throw new V("key was not prefixed with /pk/");let n=mn(e),o=r.slice(4);if(!j(o,n.toMultihash().bytes))throw new V("public key does not match passed in key")},w3={pk:o8};var b3=Symbol.for("nodejs.util.inspect.custom"),i8=114,d1=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()})`}[yo]=!0;toString(){return this.string==null&&(this.string=Y.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return X.createV1(i8,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return j(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return j(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[b3](){return`PeerId(${this.toString()})`}},p1=class extends d1{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},m1=class extends d1{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},g1=class extends d1{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},s8=2336,y1=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=He.digest(U(this.url))}[b3](){return`PeerId(${this.url})`}[yo]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return X.createV1(s8,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=R(e)),e.toString()===this.toString())}};var a8=114,x3=2336;function E3(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=ue(Y.decode(`z${r}`));else{if(r.startsWith("k51qzi5uqu5")||r.startsWith("kzwfwjn5ji4")||r.startsWith("k2k4r8")||r.startsWith("bafz"))return c8(X.parse(r));if(e==null)throw new V('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=ue(e.decode(r))}return Ce(t)}function v3(r){if(r.type==="Ed25519")return new m1({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new g1({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new p1({multihash:r.toCID().multihash,publicKey:r});throw new Ft}function Ce(r){if(l8(r))return new p1({multihash:r});if(u8(r))try{let e=y3(r);if(e.type==="Ed25519")return new m1({multihash:r,publicKey:e});if(e.type==="secp256k1")return new g1({multihash:r,publicKey:e})}catch{let t=R(r.digest);return new y1(new URL(t))}throw new L1("Supplied PeerID Multihash is invalid")}function c8(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==a8&&r.code!==x3)throw new R1("Supplied PeerID CID is invalid");if(r.code===x3){let e=R(r.multihash.digest);return new y1(new URL(e))}return Ce(r.multihash)}function u8(r){return r.code===He.code}function l8(r){return r.code===st.code}var gn=class{index=0;input="";new(e){return this.index=0,this.input=e,this}readAtomically(e){let t=this.index,n=e();return n===void 0&&(this.index=t),n}parseWith(e){let t=e();if(this.index===this.input.length)return t}peekChar(){if(!(this.index>=this.input.length))return this.input[this.index]}readChar(){if(!(this.index>=this.input.length))return this.input[this.index++]}readGivenChar(e){return this.readAtomically(()=>{let t=this.readChar();if(t===e)return t})}readSeparator(e,t,n){return this.readAtomically(()=>{if(!(t>0&&this.readGivenChar(e)===void 0))return n()})}readNumber(e,t,n,o){return this.readAtomically(()=>{let i=0,s=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*o)-1;for(;;){let u=this.readAtomically(()=>{let f=this.readChar();if(f===void 0)return;let h=Number.parseInt(f,e);if(!Number.isNaN(h))return h});if(u===void 0)break;if(i*=e,i+=u,i>l||(s+=1,t!==void 0&&s>t))return}if(s!==0)return!n&&c&&s>1?void 0:i})}readIPv4Addr(){return this.readAtomically(()=>{let e=new Uint8Array(4);for(let t=0;t<e.length;t++){let n=this.readSeparator(".",t,()=>this.readNumber(10,3,!1,1));if(n===void 0)return;e[t]=n}return e})}readIPv6Addr(){let e=t=>{for(let n=0;n<t.length/2;n++){let o=n*2;if(n<t.length-3){let s=this.readSeparator(":",n,()=>this.readIPv4Addr());if(s!==void 0)return t[o]=s[0],t[o+1]=s[1],t[o+2]=s[2],t[o+3]=s[3],[o+4,!0]}let i=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(i===void 0)return[o,!1];t[o]=i>>8,t[o+1]=i&255}return[t.length,!1]};return this.readAtomically(()=>{let t=new Uint8Array(16),[n,o]=e(t);if(n===16)return t;if(o||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let i=new Uint8Array(14),s=16-(n+2),[a]=e(i.subarray(0,s));return t.set(i.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var S3=45,f8=15,Nr=new gn;function ms(r){if(!(r.length>f8))return Nr.new(r).parseWith(()=>Nr.readIPv4Addr())}function gs(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>S3))return Nr.new(r).parseWith(()=>Nr.readIPv6Addr())}function yn(r,e=!1){if(r.includes("%")&&(r=r.split("%")[0]),r.length>S3)return;let t=Nr.new(r).parseWith(()=>Nr.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 wn(r){return!!ms(r)}function bn(r){return!!gs(r)}function xn(r){return!!yn(r)}var I3=Gs(_3(),1),h8=["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"],d8=h8.map(r=>new I3.Netmask(r));function ys(r){for(let e of d8)if(e.contains(r))return!0;return!1}function p8(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function m8(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 ys(o)}function g8(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function y8(r){let e=r.split(":"),t=e[e.length-1];return ys(t)}function w8(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 En(r){return wn(r)?ys(r):p8(r)?m8(r):g8(r)?y8(r):bn(r)?w8(r):void 0}var wt="/",A3=new TextEncoder().encode(wt),vn=A3[0],b1=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=U(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]!==vn)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(wt))}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=A3),this._buf[0]!==vn){let e=new Uint8Array(this._buf.byteLength+1);e.fill(vn,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===vn;)this._buf=this._buf.subarray(0,-1)}less(e){let t=this.list(),n=e.list();for(let o=0;o<t.length;o++){if(n.length<o+1)return!1;let i=t[o],s=n[o];if(i<s)return!0;if(i>s)return!1}return t.length<n.length}reverse(){return r.withNamespaces(this.list().slice().reverse())}namespaces(){return this.list()}baseNamespace(){let e=this.namespaces();return e[e.length-1]}list(){return this.toString().split(wt).slice(1)}type(){return b8(this.baseNamespace())}name(){return x8(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(wt)||(e+=wt),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(wt):new r(e.slice(0,-1).join(wt))}child(e){return this.toString()===wt?e:e.toString()===wt?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(),...E8(e.map(t=>t.namespaces()))])}};function b8(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function x8(r){let e=r.split(":");return e[e.length-1]}function E8(r){return[].concat(...r)}var v8=U("/pk/");function Sn(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>{let[[t,n]]=e.stringTuples();if(t===53||t===54||t===55)return n!=="localhost";if(t!==4&&t!==6||n==null)return!1;let o=En(n);return o==null?!0:!o})}}function P3(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>{let[[t,n]]=e.stringTuples();if(n==="localhost")return!0;if(t!==4&&t!==6||n==null)return!1;let o=En(n);return o??!1})}}function T3(r){return r}async function Mt(r){return(await st.digest(r)).digest}async function ye(r){return Mt(r.toMultihash().bytes)}function Ut(r,e){return new b1(`${r}/${R(e,"base32")}`,!1)}function R3(r){return Se([v8,r.toMultihash().bytes])}function L3(r){return R(r.subarray(0,4))==="/pk/"}function k3(r){let e=ue(r.subarray(4));return Ce(e)}function ws(r,e){let t=new Date;return new le(r,e,t).serialize()}var S8=290,_8=54,I8=55,A8=56,P8=4,T8=41;function C3(r){let e=r.stringTuples();for(let t of e)if(t[0]===S8)return!1;if(e[0][0]===_8||e[0][0]===I8||e[0][0]===A8)return!0;if(e[0][0]===P8||e[0][0]===T8){let t=En(`${e[0][1]}`);return t==null||!t}return!1}function _n(r){let e=r.toString().split("/"),t=e.pop(),n=e.pop();if(t==null||n==null)throw new Error(`incorrectly formatted provider entry key in datastore: ${r.toString()}`);return{cid:X.createV1(B2,ue(U(n,"base32"))),peerId:E3(t)}}function In(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 b1(o.join("/"))}function An(r){return new Date(Be(r))}function tr(r,e,t){return async function*(...n){let o=e.queryTime?.timer(t),i=e.errorTime?.timer(t),s=!1;try{e.queries?.increment({[t]:!0}),yield*r(...n)}catch(a){throw s=!0,i?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||o?.()}}}function Pn(r,e,t){return async function(...n){let o=e?.queryTime?.timer(t),i=e?.errorTime?.timer(t),s=!1;try{return e.queries?.increment({[t]:!0}),await r(...n)}catch(a){throw s=!0,i?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||o?.()}}}var Tn=class{log;components;validators;selectors;peerRouting;queryManager;network;datastorePrefix;constructor(e,t){let{validators:n,selectors:o,peerRouting:i,queryManager:s,network:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-fetching`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.validators=n,this.selectors=o,this.peerRouting=i,this.queryManager=s,this.network=a,this.get=e.metrics?.traceFunction("libp2p.kadDHT.get",this.get.bind(this),{optionsIndex:1})??this.get,this.put=e.metrics?.traceFunction("libp2p.kadDHT.put",this.put.bind(this),{optionsIndex:2})??this.put}async getLocal(e){this.log("getLocal %b",e);let t=Ut(this.datastorePrefix,e);this.log("fetching record for key %k",t);let n=await this.components.datastore.get(t);this.log("found %k in local datastore",t);let o=le.deserialize(n);return await Dr(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o){this.log("sendCorrection for %b",e);let i=ws(e,n);for(let{value:s,from:a}of t){if(j(s,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let u=Ut(this.datastorePrefix,e);this.log(`Storing corrected record for key ${u.toString()}`),await this.components.datastore.put(u,i.subarray())}catch(u){this.log.error("Failed error correcting self",u)}continue}let c=!1,l={type:H.PUT_VALUE,key:e,record:i};for await(let u of this.network.sendRequest(a,l,o))u.name==="PEER_RESPONSE"&&u.record!=null&&j(u.record.value,le.deserialize(i).value)&&(c=!0),yield u;if(!c)throw new Tt("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=ws(e,t),i=Ut(this.datastorePrefix,e);this.log(`storing record for key ${i.toString()}`),await this.components.datastore.put(i,o.subarray()),yield*xr(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),s=>wr(s,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:H.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let u of this.network.sendRequest(a.peer.id,l,{...n,path:a.path}))c.push(u),u.name==="PEER_RESPONSE"&&(u.record!=null&&j(u.record.value,le.deserialize(o).value)||c.push(Ge({from:a.peer.id,error:new Tt("Value not put correctly"),path:u.path},n)));return c}),s=>Xr(s,{ordered:!1,concurrency:_t}),async function*(s){for await(let a of s)yield*a})}async*get(e,t){this.log("get %b",e);let n=[];for await(let a of this.getMany(e,t)){if(a.name==="VALUE"){n.push(a);continue}yield a}if(n.length===0)return;let o=n.map(a=>a.value),i=0;try{i=n0(this.selectors,e,o)}catch(a){if(a.name!=="InvalidParametersError")throw a}let s=o[i];if(this.log("GetValue %b %b",e,s),s==null)throw new Fe("Best value was not found");yield*this.sendCorrectionRecord(e,n,s,{...t,path:{index:-1,queued:0,running:0,total:0}}),yield n[i]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let i=await this.getLocal(e);yield e1({value:i.value,from:this.components.peerId,path:{index:-1,running:0,queued:0,total:0}},t)}catch(i){this.log("error getting local value for %b",e,i)}let n=this,o=async function*({peer:i,signal:s,path:a}){for await(let c of n.peerRouting.getValueOrPeers(i.id,e,{...t,signal:s,path:a}))yield c,c.name==="PEER_RESPONSE"&&c.record!=null&&(yield e1({from:i.id,value:c.record.value,path:a},t))};yield*this.queryManager.run(e,o,t)}};function rr(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 Rn(r){let e=ue(Y.decode(`z${r}`));return Ce(e)}var nr=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 rr(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 rr(this.map.values(),e=>e.key)}values(){return rr(this.map.values(),e=>e.value)}get size(){return this.map.size}};var Kt=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 rr(this.set.entries(),e=>{let t=Rn(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=Rn(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return rr(this.set.values(),e=>Rn(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}};var bs={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},D3={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},N3=new globalThis.TextEncoder;function L8(r,e){let t=bs[e],n=D3[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function k8(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=bs[e],o=D3[e],i=r;for(;i.length>0;){let s=N3.encodeInto(i,t);i=i.slice(s.read);for(let a=0;a<s.written;a++)o^=BigInt(t[a]),o=BigInt.asUintN(e,o*n)}return o}function xs(r,{size:e=32,utf8Buffer:t}={}){if(!bs[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 k8(r,e,t);r=N3.encode(r)}return L8(r,e)}var x1={hash:r=>Number(xs(r,{size:32})),hashV:(r,e)=>C8(x1.hash(r,e))};function C8(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),U(e,"base16")}var Es=64,Qe=class{fp;h;seed;constructor(e,t,n,o=2){if(o>Es)throw new TypeError("Invalid Fingerprint Size");let i=t.hashV(e,n),s=xe(o);for(let a=0;a<s.length;a++)s[a]=i[a];s.length===0&&(s[0]=7),this.fp=s,this.h=t,this.seed=n}hash(){return this.h.hash(this.fp,this.seed)}equals(e){return e?.fp instanceof Uint8Array?j(this.fp,e.fp):!1}};function or(r,e){return Math.floor(Math.random()*(e-r))+r}var ir=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof Qe))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof Qe))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 Qe))throw new TypeError("Invalid Fingerprint");let t=or(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof Qe))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var D8=500,E1=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??x1,this.seed=e.seed??or(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=U(e));let t=new Qe(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 ir(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new ir(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let i=[n,o],s=i[or(0,i.length-1)];this.buckets[s]==null&&(this.buckets[s]=new ir(this.bucketSize));for(let a=0;a<D8;a++){let c=this.buckets[s].swap(t);if(c!=null&&(s=(s^c.hash())%this.filterSize,this.buckets[s]==null&&(this.buckets[s]=new ir(this.bucketSize)),this.buckets[s].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=U(e));let t=new Qe(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.has(t)??!1;if(o)return o;let i=(n^t.hash())%this.filterSize;return this.buckets[i]?.has(t)??!1}remove(e){typeof e=="string"&&(e=U(e));let t=new Qe(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.remove(t)??!1;if(o)return this.count--,o;let i=(n^t.hash())%this.filterSize,s=this.buckets[i]?.remove(t)??!1;return s&&this.count--,s}get reliable(){return Math.floor(100*(this.count/this.filterSize))<=90}},N8={1:.5,2:.84,4:.95,8:.98};function B8(r=.001){return r>.002?2:r>1e-5?4:8}function B3(r,e=.001){let t=B8(e),n=N8[t],o=Math.round(r/n),i=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),Es);return{filterSize:o,bucketSize:t,fingerprintSize:i}}var Ln=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??x1,this.seed=e.seed??or(0,Math.pow(2,10)),this.filterSeries=[new E1({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=U(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 E1({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=U(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=U(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 vs(r,e=.001,t){return new Ln({...B3(r,e),...t??{}})}var Ss=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.name="AbortError",this.code=t??"ABORT_ERR"}};async function kn(r,e,t,n){let o=new Ss(n?.errorMessage,n?.errorCode);return t?.aborted===!0?Promise.reject(o):new Promise((i,s)=>{function a(){t?.removeEventListener("abort",u),r.removeEventListener(e,c),n?.errorEvent!=null&&r.removeEventListener(n.errorEvent,l)}let c=f=>{try{if(n?.filter?.(f)===!1)return}catch(h){a(),s(h);return}a(),i(f)},l=f=>{a(),s(f.detail)},u=()=>{a(),s(o)};t?.addEventListener("abort",u),r.addEventListener(e,c),n?.errorEvent!=null&&r.addEventListener(n.errorEvent,l)})}function _s(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 Cn=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var Dn=class{deferred;signal;constructor(e){this.signal=e,this.deferred=ae(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new rt)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function O8(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var Nn=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=O8(),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 rt),this.cleanup())}async join(e={}){let t=new Dn(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 at(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 tt=class extends Le{concurrency;maxSize;queue;pending;sort;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,e.metricName!=null&&e.metrics?.registerMetricGroup(e.metricName,{calculate:()=>({size:this.queue.length,running:this.pending,queued:this.queue.length-this.pending})}),this.sort=e.sort,this.queue=[],this.emitEmpty=_s(this.emitEmpty.bind(this),1),this.emitIdle=_s(this.emitIdle.bind(this),1)}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.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 Cn;let n=new Nn(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.tryToStartAnother(),n.join(t).then(o=>(this.safeDispatchEvent("completed",{detail:o}),this.safeDispatchEvent("success",{detail:{job:n,result:o}}),o)).catch(o=>{if(n.status==="queued"){for(let i=0;i<this.queue.length;i++)if(this.queue[i]===n){this.queue.splice(i,1);break}}throw this.safeDispatchEvent("error",{detail:o}),this.safeDispatchEvent("failure",{detail:{job:n,error:o}}),o})}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new rt)}),this.clear()}async onEmpty(e){this.size!==0&&await kn(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await kn(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await kn(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=Pt({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail)},i=c=>{n(c.detail)},s=()=>{n()},a=()=>{n(new rt("Queue aborted"))};this.addEventListener("completed",o),this.addEventListener("error",i),this.addEventListener("idle",s),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("error",i),this.removeEventListener("idle",s),e?.signal?.removeEventListener("abort",a),n()}}};var Yd=parseInt("0xFFFF",16),Zd=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);var K3=wn,F8=bn,Is=function(r){let e=0;if(r=r.toString().trim(),K3(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(F8(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let i=K3(t[n]),s;i&&(s=Is(t[n]),t[n]=R(s.slice(0,2),"base16")),s!=null&&++n<8&&t.splice(n,0,R(s.slice(2,4),"base16"))}if(t[0]==="")for(;t.length<8;)t.unshift("0");else if(t[t.length-1]==="")for(;t.length<8;)t.push("0");else if(t.length<8){for(n=0;n<t.length&&t[n]!=="";n++);let i=[n,1];for(n=9-t.length;n>0;n--)i.push("0");t.splice.apply(t,i)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){let i=parseInt(t[n],16);o[e++]=i>>8&255,o[e++]=i&255}return o}throw new Error("invalid ip address")},q3=function(r,e=0,t){e=~~e,t=t??r.length-e;let n=new DataView(r.buffer);if(t===4){let o=[];for(let i=0;i<t;i++)o.push(r[e+i]);return o.join(".")}if(t===16){let o=[];for(let i=0;i<t;i+=2)o.push(n.getUint16(e+i).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var Br={},As={},V8=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,-1,"ip6zone"],[43,8,"ipcidr"],[53,-1,"dns",!0],[54,-1,"dns4",!0],[55,-1,"dns6",!0],[56,-1,"dnsaddr",!0],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[280,0,"webrtc-direct"],[281,0,"webrtc"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,-1,"unix",!1,!0],[421,-1,"ipfs"],[421,-1,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,-1,"garlic64"],[448,0,"tls"],[449,-1,"sni"],[460,0,"quic"],[461,0,"quic-v1"],[465,0,"webtransport"],[466,-1,"certhash"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"],[481,-1,"http-path"],[777,-1,"memory"]];V8.forEach(r=>{let e=H8(...r);As[e.code]=e,Br[e.name]=e});function H8(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function W(r){if(typeof r=="number"){if(As[r]!=null)return As[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(Br[r]!=null)return Br[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var Cp=W("ip4"),Dp=W("ip6"),Np=W("ipcidr");function Ls(r,e){switch(W(r).code){case 4:case 41:return $8(e);case 42:return Rs(e);case 43:return R(e,"base10");case 6:case 273:case 33:case 132:return V3(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return Rs(e);case 421:return Y8(e);case 444:return z3(e);case 445:return z3(e);case 466:return W8(e);case 481:return globalThis.encodeURIComponent(Rs(e));default:return R(e,"base16")}}function ks(r,e){switch(W(r).code){case 4:return F3(e);case 41:return F3(e);case 42:return Ts(e);case 43:return U(e,"base10");case 6:case 273:case 33:case 132:return Cs(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return Ts(e);case 421:return Q8(e);case 444:return Z8(e);case 445:return X8(e);case 466:return j8(e);case 481:return Ts(globalThis.decodeURIComponent(e));default:return U(e,"base16")}}var Ps=Object.values(jr).map(r=>r.decoder),G8=function(){let r=Ps[0].or(Ps[1]);return Ps.slice(2).forEach(e=>r=r.or(e)),r}();function F3(r){if(!xn(r))throw new Error("invalid ip address");return Is(r)}function $8(r){let e=q3(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!xn(e))throw new Error("invalid ip address");return e}function Cs(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function V3(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function Ts(r){let e=U(r),t=Uint8Array.from(Ke(e.length));return Se([t,e],t.length+e.length)}function Rs(r){let e=Be(r);if(r=r.slice(ce(e)),r.length!==e)throw new Error("inconsistent lengths");return R(r)}function Q8(r){let e;r[0]==="Q"||r[0]==="1"?e=ue(Y.decode(`z${r}`)).bytes:e=X.parse(r).multihash.bytes;let t=Uint8Array.from(Ke(e.length));return Se([t,e],t.length+e.length)}function j8(r){let e=G8.decode(r),t=Uint8Array.from(Ke(e.length));return Se([t,e],t.length+e.length)}function W8(r){let e=Be(r),t=r.slice(ce(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+R(t,"base64url")}function Y8(r){let e=Be(r),t=r.slice(ce(e));if(t.length!==e)throw new Error("inconsistent lengths");return R(t,"base58btc")}function Z8(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=it.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=Cs(n);return Se([t,o],t.length+o.length)}function X8(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=it.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=Cs(n);return Se([t,o],t.length+o.length)}function z3(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=R(e,"base32"),o=V3(t);return`${n}:${o}`}function H3(r){r=Ds(r);let e=[],t=[],n=null,o=r.split("/").slice(1);if(o.length===1&&o[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let i=0;i<o.length;i++){let s=o[i],a=W(s);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(i++,i>=o.length)throw new Bn("invalid address: "+r);if(a.path===!0){n=Ds(o.slice(i).join("/")),e.push([a.code,ks(a.code,n)]),t.push([a.code,n]);break}let c=ks(a.code,o[i]);e.push([a.code,c]),t.push([a.code,Ls(a.code,c)])}return{string:G3(t),bytes:On(e),tuples:e,stringTuples:t,path:n}}function Ns(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let i=Be(r,o),s=ce(i),a=W(i),c=J8(a,r.slice(o+s));if(c===0){e.push([i]),t.push([i]),o+=s;continue}let l=r.slice(o+s,o+s+c);if(o+=c+s,o>r.length)throw new Bn("Invalid address Uint8Array: "+R(r,"base16"));e.push([i,l]);let u=Ls(i,l);if(t.push([i,u]),a.path===!0){n=u;break}}return{bytes:Uint8Array.from(r),string:G3(t),tuples:e,stringTuples:t,path:n}}function G3(r){let e=[];return r.map(t=>{let n=W(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),Ds(e.join("/"))}function On(r){return Se(r.map(e=>{let t=W(e[0]),n=Uint8Array.from(Ke(t.code));return e.length>1&&e[1]!=null&&(n=Se([n,e[1]])),n}))}function J8(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=Be(e instanceof Uint8Array?e:Uint8Array.from(e));return t+ce(t)}}function Ds(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}var Bn=class extends Error{static name="ParseError";name="ParseError";constructor(e){super(`Error parsing address: ${e}`)}};var ea=Symbol.for("nodejs.util.inspect.custom"),Os=Symbol.for("@multiformats/js-multiaddr/multiaddr"),ta=[W("dns").code,W("dns4").code,W("dns6").code,W("dnsaddr").code],Bs=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},Mn=class r{bytes;#e;#r;#i;#a;[Os]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=Ns(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=H3(e)}else if(Q3(e))t=Ns(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=t.bytes,this.#e=t.string,this.#r=t.tuples,this.#i=t.stringTuples,this.#a=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,o,i="",s=W("tcp"),a=W("udp"),c=W("ip4"),l=W("ip6"),u=W("dns6"),f=W("ip6zone");for(let[d,y]of this.stringTuples())d===f.code&&(i=`%${y??""}`),ta.includes(d)&&(t=s.name==="tcp"?"tcp":"udp",o=443,n=`${y??""}${i}`,e=d===u.code?6:4),(d===s.code||d===a.code)&&(t=W(d).name==="tcp"?"tcp":"udp",o=parseInt(y??"")),(d===c.code||d===l.code)&&(t=W(d).name==="tcp"?"tcp":"udp",n=`${y??""}${i}`,e=d===l.code?6:4);if(e==null||t==null||n==null||o==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:e,host:n,transport:t,port:o}}protos(){return this.#r.map(([e])=>Object.assign({},W(e)))}protoCodes(){return this.#r.map(([e])=>e)}protoNames(){return this.#r.map(([e])=>W(e).name)}tuples(){return this.#r.map(([e,t])=>t==null?[e]:[e,t])}stringTuples(){return this.#i.map(([e,t])=>t==null?[e]:[e,t])}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,o))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(On(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===Br.p2p.code&&e.push([n,o]),n===Br["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?R(Y.decode(`z${n}`),"base58btc"):R(X.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#a}equals(e){return j(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(i=>i.resolvable);if(t==null)return[this];let n=$3.get(t.name);if(n==null)throw new Bs(`no available resolver for ${t.name}`);return(await n(this,e)).map(i=>sr(i))}nodeAddress(){let e=this.toOptions();if(e.transport!=="tcp"&&e.transport!=="udp")throw new Error(`multiaddr must have a valid format - no protocol with name: "${e.transport}". Must have a valid transport protocol: "{tcp, udp}"`);return{family:e.family,address:e.host,port:e.port}}isThinWaistAddress(e){let t=(e??this).protos();return!(t.length!==2||t[0].code!==4&&t[0].code!==41||t[1].code!==6&&t[1].code!==273)}[ea](){return`Multiaddr(${this.#e})`}};var $3=new Map;function Q3(r){return!!r?.[Os]}function sr(r){return new Mn(r)}function j3(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function v1(r){if(r.id==null)throw new Error("Invalid peer in message");let e=ue(r.id);return{id:Ce(e),multiaddrs:(r.multiaddrs??[]).map(t=>sr(t))}}var Un=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:o,queryManager:i,routingTable:s,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=o,this.queryManager=i,this.routingTable=s,this.providers=a,this.findProviders=e.metrics?.traceFunction("libp2p.kadDHT.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PROVIDER"&&(u.providers??=[],u.providers.push(...l.providers.map(f=>f.id.toString()))),u)})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.kadDHT.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PEER_RESPONSE"&&l.messageName==="ADD_PROVIDER"&&(u.providers??=[],u.providers.push(l.from.toString())),u)})??this.provide}async*provide(e,t,n={}){this.log("provide %s",e);let o=e.multihash.bytes;await this.providers.addProvider(e,this.components.peerId);let i={type:H.ADD_PROVIDER,key:o,providers:[j3({id:this.components.peerId,multiaddrs:t})]},s=0,a=this;async function*c(f){try{a.log("sending provider record for %s to %p",e,f.peer.id);for await(let h of a.network.sendMessage(f.peer.id,i,{...n,path:f.path}))h.name==="PEER_RESPONSE"&&(a.log("sent provider record for %s to %p",e,f.peer.id),s++),yield h}catch(h){a.log.error("error sending provide record to peer %p",f.peer.id,h),yield Ge({from:f.peer.id,error:h,path:f.path},n)}}let l=Pt({objectMode:!0}),u=new tt({concurrency:_t});u.addEventListener("idle",()=>{l.end()}),u.addEventListener("error",f=>{this.log.error("error publishing provider record to peer - %e",f)}),u.add(async()=>{let f=[];for await(let h of this.peerRouting.getClosestPeers(o,n))l.push(h),h.name==="FINAL_PEER"&&f.push(h);f.forEach(h=>{u.add(async()=>{for await(let d of c(h))l.push(d)}).catch(d=>{this.log.error("error publishing provider record to peer - %e",d)})})}).catch(f=>{l.end(f)}),yield*l,this.log("sent provider records to %d peers",s)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,o=0,i=e.multihash.bytes,s=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e);if(a.length>0){let u=[];for(let f of a.slice(0,n))try{let h=await this.components.peerStore.get(f);u.push({id:f,multiaddrs:h.addresses.map(({multiaddr:d})=>d)})}catch(h){if(h.name!=="NotFoundError")throw h;this.log("no peer store entry for %p",f)}if(yield Jr({from:this.components.peerId,messageType:H.GET_PROVIDERS,providers:u,path:{index:-1,queued:0,running:0,total:0}},t),yield vi({from:this.components.peerId,providers:u,path:{index:-1,queued:0,running:0,total:0}},t),o+=u.length,o>=n)return}let c=async function*({peer:u,signal:f,path:h}){let d={type:H.GET_PROVIDERS,key:i};yield*s.network.sendRequest(u.id,d,{...t,signal:f,path:h})},l=new Kt(a);for await(let u of this.queryManager.run(i,c,t))if(yield u,u.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",u.providers.length,e,u.closer.length);let f=[];for(let h of u.providers)l.has(h.id)||(l.add(h.id),f.push(h));if(f.length>0&&(yield vi({from:u.from,providers:f,path:u.path},t),o+=f.length,o>=n))return}}};function bt(r){let e=new globalThis.AbortController;function t(){e.abort();for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}for(let i of r){if(i?.aborted===!0){t();break}i?.addEventListener!=null&&i.addEventListener("abort",t)}function n(){for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}let o=e.signal;return o.clear=n,o}var Or=class{movingAverage;variance;deviation;forecast;timeSpan;previousTime;constructor(e){this.timeSpan=e,this.movingAverage=0,this.variance=0,this.deviation=0,this.forecast=0}alpha(e,t){return 1-Math.exp(-(e-t)/this.timeSpan)}push(e,t=Date.now()){if(this.previousTime!=null){let n=this.alpha(t,this.previousTime),o=e-this.movingAverage,i=n*o;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+o*i),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*o}else this.movingAverage=e;this.previousTime=t}};var ra=1.2,na=2,oa=5e3,xt=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;constructor(e={}){this.success=new Or(e.interval??5e3),this.failure=new Or(e.interval??5e3),this.next=new Or(e.interval??5e3),this.failureMultiplier=e.failureMultiplier??na,this.timeoutMultiplier=e.timeoutMultiplier??ra,this.minTimeout=e.minTimeout??oa,e.metricName!=null&&(this.metric=e.metrics?.registerMetricGroup(e.metricName))}getTimeoutSignal(e={}){let t=Math.max(Math.round(this.next.movingAverage*(e.timeoutFactor??this.timeoutMultiplier)),this.minTimeout),n=AbortSignal.timeout(t),o=bt([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 Kn=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function W3(r,e){let t=V1();r.sink(t).catch(async s=>{await t.end(s)}),r.sink=async s=>{for await(let a of s)await t.push(a);await t.end()};let n=r.source;r.source[Symbol.iterator]!=null?n=r.source[Symbol.iterator]():r.source[Symbol.asyncIterator]!=null&&(n=r.source[Symbol.asyncIterator]());let o=new te;return{read:async s=>{if(s?.signal?.throwIfAborted(),s?.bytes==null){let{done:c,value:l}=await at(n.next(),s?.signal);return c===!0?null:l}for(;o.byteLength<s.bytes;){let{value:c,done:l}=await at(n.next(),s?.signal);if(l===!0)throw new Kn("unexpected end of input");o.append(c)}let a=o.sublist(0,s.bytes);return o.consume(s.bytes),a},write:async(s,a)=>{a?.signal?.throwIfAborted(),s instanceof Uint8Array?await t.push(s,a):await t.push(s.subarray(),a)},unwrap:()=>{if(o.byteLength>0){let s=r.source;r.source=async function*(){e?.yieldBytes===!1?yield o:yield*o,yield*s}()}return r}}}var qn=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Fn=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},zn=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function Y3(r,e={}){let t=W3(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=ce(e.maxDataLength));let n=e?.lengthDecoder??Be,o=e?.lengthEncoder??Ke;return{read:async s=>{let a=-1,c=new te;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new qn("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new zn("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new Fn("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new te(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new te(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function Ms(r,e){let t=Y3(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(a=>i.encode(a)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var Vn=class extends Le{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 xt({...t.timeout??{},metrics:e.metrics,metricName:`${t.metricsPrefix}_network_message_send_times_milliseconds`}),this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_errors_total`)},this.sendRequest=e.metrics?.traceFunction("libp2p.kadDHT.sendRequest",this.sendRequest.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendRequest,this.sendMessage=e.metrics?.traceFunction("libp2p.kadDHT.sendMessage",this.sendMessage.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendMessage}async start(){this.running||(this.running=!0)}async stop(){this.running=!1}isStarted(){return this.running}async*sendRequest(e,t,n){if(!this.running)return;let o=t.type;if(o==null)throw new V("Message type was missing");let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),this.log("dialling %p",e),yield Si({peer:e,path:n.path},n),i=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n),this.log("sending %s to %p",t.type,e),yield Ei({to:e,type:o,path:n.path},n);let c=await this._writeReadMessage(i,t,n);i.close(n).catch(l=>{this.log.error("error closing stream to %p",e,l),i?.abort(l)}),yield Jr({from:e,messageType:c.type,closer:c.closer.map(v1),providers:c.providers.map(v1),record:c.record==null?void 0:le.deserialize(c.record),path:n.path},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),n.signal?.aborted!==!0&&this.log.error("could not send %s to %p - %e",t.type,e,a),yield Ge({from:e,error:a,path:n.path},n)}finally{this.timeout.cleanUp(s)}}async*sendMessage(e,t,n){if(!this.running)return;let o=t.type;if(o==null)throw new V("Message type was missing");let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),this.log("dialling %p",e),yield Si({peer:e,path:n.path},n),i=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n),this.log("sending %s to %p",t.type,e),yield Ei({to:e,type:o,path:n.path},n),await this._writeMessage(i,t,n),i.close(n).catch(c=>{this.log.error("error closing stream to %p",e,c),i?.abort(c)}),yield Jr({from:e,messageType:o,path:n.path},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),yield Ge({from:e,error:a,path:n.path},n)}finally{this.timeout.cleanUp(s)}}async _writeMessage(e,t,n){await Ms(e).write(t,ct,n)}async _writeReadMessage(e,t,n){let o=Ms(e);await o.write(t,ct,n);let i=await o.read(ct,n);return i.closer.forEach(s=>{this.safeDispatchEvent("peer",{detail:v1(s)})}),i.providers.forEach(s=>{this.safeDispatchEvent("peer",{detail:v1(s)})}),i}};function De(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=he(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}function Et(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 qt=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}){let n=await ye(e.id);this.addWithKadId(e,n,t)}addWithKadId(e,t,n={index:-1,queued:0,running:0,total:0}){if(this.peerDistances.find(s=>s.peer.id.equals(e.id))!=null)return;let o={peer:e,distance:De(this.originDhtKey,t),path:n};if(this.peerDistances.length===this.capacity){let s=this.peerDistances[this.peerDistances.length-1];if(s!=null&&Et(o.distance,s.distance)!==-1)return}let i=!1;for(let s=0;s<this.peerDistances.length;s++){let a=Et(this.peerDistances[s].distance,o.distance);if(a===0||a===1){i=!0,this.peerDistances.splice(s,0,o);break}}i||this.peerDistances.push(o),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e){if(this.length===0)return!0;let t=await ye(e),n=De(t,this.originDhtKey),o=this.peerDistances[this.peerDistances.length-1].distance;return Et(n,o)===-1}async anyCloser(e){return e.length===0?!1:Promise.any(e.map(async t=>this.isCloser(t)))}};var Hn=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){let t,n=await this.routingTable.find(e);if(n!=null){this.log("findPeerLocal found %p in routing table",e);try{t=await this.components.peerStore.get(n)}catch(o){if(o.name!=="NotFoundError")throw o}}if(t==null)try{t=await this.components.peerStore.get(e)}catch(o){if(o.name!=="NotFoundError")throw o}if(t!=null)return this.log("findPeerLocal found %p in peer store",e),{id:t.id,multiaddrs:t.addresses.map(o=>o.multiaddr)}}async*_getValueSingle(e,t,n){let o={type:H.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=R3(e),o={index:-1,queued:0,running:0,total:0};for await(let i of this._getValueSingle(e,n,{...t,path:o}))if(yield i,i.name==="PEER_RESPONSE"&&i.record!=null){let s=mn(i.record.value),a=v3(s);if(!a.equals(e))throw new nt("public key does not match id");if(a.publicKey==null)throw new nt("public key missing");yield e1({from:e,value:i.record.value,path:o},t)}throw new Tt(`Node not responding with its public key: ${e.toString()}`)}async*findPeer(e,t={}){if(this.log("findPeer %p",e),t.useCache!==!1){let o=await this.findPeerLocal(e);if(o!=null){this.log("found local"),yield W1({from:this.components.peerId,peer:o,path:{index:-1,queued:0,running:0,total:0}},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,i=async function*({peer:s,signal:a,path:c}){let l={type:H.FIND_NODE,key:e.toMultihash().bytes};for await(let u of o.network.sendRequest(s.id,l,{...t,signal:a,path:c}))if(yield u,u.name==="PEER_RESPONSE"){let f=u.closer.find(h=>h.id.equals(e));f!=null&&(yield W1({from:u.from,peer:f,path:u.path},t))}};for await(let s of this.queryManager.run(e.toMultihash().bytes,i,t))s.name==="FINAL_PEER"&&(n=!0),yield s}if(!n)throw new Fe("Not found")}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await Mt(e),o=new qt(n,this.routingTable.kBucketSize),i=this,s=async function*({peer:a,path:c,peerKadId:l,signal:u}){i.log("getClosestPeers asking %p",a);let f={type:H.FIND_NODE,key:e};yield*i.network.sendRequest(a.id,f,{...t,signal:u,path:c}),o.addWithKadId(a,l,c)};yield*this.queryManager.run(e,s,t),this.log("found %d peers close to %b",o.length,e);for(let{peer:a,path:c}of o.peers)try{if(a.multiaddrs.length===0&&(a=await i.components.peerStore.getInfo(a.id)),a.multiaddrs.length===0)continue;yield W1({from:this.components.peerId,peer:await i.components.peerStore.getInfo(a.id),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)}catch{let s="invalid record received, discarded";this.log(s),yield Ge({from:o.from,error:new Tt(s),path:n.path},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new $1("invalid record received");await Dr(this.validators,new le(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=[];try{let c=ue(e),l=Ce(c),u=await this.components.peerStore.get(l);n.push({id:u.id,multiaddrs:u.addresses.map(({multiaddr:f})=>f)})}catch{}let o=await Mt(e),i=this.routingTable.closestPeers(o),s=await ye(t),a=De(s,o);for(let c of i){let l=await ye(c),u=De(l,o);if(Et(u,a)===-1)try{n.push(await this.components.peerStore.getInfo(c))}catch(f){if(f.name!=="NotFoundError")throw f}}return n.length>0?this.log("getCloserPeersOffline found %d peer(s) closer to %b than %p",n.length,e,t):this.log("getCloserPeersOffline could not find peer closer to %b than %p with %d peers in the routing table",e,t,this.routingTable.size),n}};var Gn=class{log;datastore;datastorePrefix;lock;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:providers`),this.datastorePrefix=`${t.datastorePrefix}/provider`,this.datastore=e.datastore,this.lock=t.lock}async addProvider(e,t,n){let o=await this.lock.readLock();try{this.log.trace("%p provides %s",t,e),await this.writeProviderEntry(e,t)}finally{o()}}async removeProvider(e,t,n){let o=await this.lock.writeLock();try{let i=In(this.datastorePrefix,e,t);this.log.trace("%p no longer provides %s",t,e),await this.datastore.delete(i)}finally{o()}}async getProviders(e,t){let n=await this.lock.readLock();try{this.log.trace("get providers for %c",e);let o=await this.loadProviders(e,t);return this.log.trace("got %d providers for %c",o.size,e),[...o.keys()]}finally{n()}}async writeProviderEntry(e,t,n=new Date,o){let i=In(this.datastorePrefix,e,t),s=Ke(n.getTime());await this.datastore.put(i,s,o)}async loadProviders(e,t){let n=new nr,o=In(this.datastorePrefix,e);for await(let i of this.datastore.query({prefix:o.toString()},t)){let{peerId:s}=_n(i.key);n.set(s,An(i.value))}return n}};var ia=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 sa(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:u}=ia(r),f=(...d)=>{let y=t.multiArgs?d:d[0];t.filter&&!t.filter(y)||(c.push(y),t.count===c.length&&(n(),i(c)))},h=d=>{n(),s(d)};n=()=>{for(let d of a)u(d,f);for(let d of t.rejectionEvents)u(d,h)};for(let d of a)l(d,f);for(let d of t.rejectionEvents)l(d,h);t.signal&&t.signal.addEventListener("abort",()=>{h(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=zt(o,{milliseconds:t.timeout});return i.cancel=n,i}return o}function Z3(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=sa(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}async function*X3(r){let{key:e,startingPeers:t,ourPeerId:n,query:o,alpha:i,path:s,numPaths:a,log:c,peersSeen:l,connectionManager:u,signal:f}=r,h=Pt({objectMode:!0}),d=new tt({concurrency:i,sort:(E,T)=>Et(E.options.distance,T.options.distance)});d.addEventListener("idle",()=>{h.push(r0({path:{index:s,queued:d.queued,running:d.running,total:d.size}},r)),h.end()}),d.addEventListener("error",E=>{c.error("error during query - %e",E.detail)}),f.addEventListener("abort",()=>{d.abort(),h.end(new G1)});let y=await Mt(e);function g(E,T){if(E==null)return;l.add(E.id.toMultihash().bytes);let q=De(T,y);d.add(async()=>{try{for await(let x of o({...r,key:e,peer:E,path:{index:s,queued:d.queued,running:d.running,total:d.size},numPaths:a,peerKadId:T,signal:f})){if(x.name==="PEER_RESPONSE")for(let p of x.closer){if(l.has(p.id.toMultihash().bytes)){c("already seen %p in query",p.id);continue}if(n.equals(p.id)){c("not querying ourselves");continue}if(!await u.isDialable(p.multiaddrs)){c("not querying undialable peer");continue}let b=await ye(p.id),A=De(b,y);if(Et(A,q)!==-1){c("skipping %p as they are not closer to %b than %p",p.id,e,E);continue}c("querying closer peer %p",p.id),g(p,b)}h.push({...x,path:{index:s,queued:d.queued,running:d.running,total:d.size}})}}catch(x){h.push(Ge({from:E.id,error:x,path:{index:s,queued:d.queued,running:d.running-1,total:d.size-1}},r))}},{distance:q}).catch(x=>{c.error("error during query - %e",x)})}await Promise.all(t.map(async E=>{g({id:E,multiaddrs:[]},await ye(E))})),yield*h}var $n=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;allowQueryWithZeroPeers;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??N1,this.alpha=t.alpha??_t,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(b2);n={...n,signal:c}}let o=new AbortController,i=bt([this.shutDownController.signal,o.signal,n.signal]);o.signal;let s=this.logger.forComponent(`${this.logPrefix}:query:`+R(e,"base58btc")),a=!1;try{this.routingTable.size===0&&!this.allowQueryWithZeroPeers&&(s("routing table was empty, waiting for some peers before running%s query",n.isSelfQuery===!0?" self":""),await Z3(this.routingTable,"peer:add",{signal:i,filter:d=>!this.peerId.equals(d.detail)}),s("routing table has peers, continuing with%s query",n.isSelfQuery===!0?" self":"")),n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(s("waiting for initial self query before continuing"),await at(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),s("query:start");let c=await Mt(e),l=this.routingTable.closestPeers(c,this.routingTable.kBucketSize),u=l.sort(()=>Math.random()>.5?1:-1).reduce((d,y,g)=>(d[g%this.disjointPaths].push(y),d),new Array(this.disjointPaths).fill(0).map(()=>[])).filter(d=>d.length>0);if(l.length===0){s.error("running query with no peers");return}let f=vs(1024),h=u.map((d,y)=>X3({...n,key:e,startingPeers:d,ourPeerId:this.peerId,signal:i,query:t,path:y,numPaths:u.length,alpha:this.alpha,log:s,peersSeen:f,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let d of H1(...h)){if(d.name==="QUERY_ERROR"&&s.error("query error",d.error),d.name==="PEER_RESPONSE")for(let y of[...d.closer,...d.providers])await this.connectionManager.isDialable(y.multiaddrs,{signal:i})&&await this.routingTable.add(y.id,{signal:i});i.throwIfAborted(),yield d}a=!0}catch(c){if(this.running)throw c}finally{a||(s("query exited early"),o.abort()),i.clear(),s("query finished")}}};function aa(r){return r[Symbol.asyncIterator]!=null}function ca(r){if(aa(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 Qn=ca;function ua(r){return r[Symbol.asyncIterator]!=null}function la(r,e){return ua(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 J3=la;var jn=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??N1,this.interval=t.interval??p2,this.initialInterval=t.initialInterval??m2,this.queryTimeout=t.queryTimeout??g2,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=Pn(this.querySelf.bind(this),t.operationMetrics,"SELF_QUERY")}isStarted(){return this.running}start(){this.running||(this.running=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.initialInterval))}stop(){this.running=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.running){this.log("skip self-query because we are not started");return}if(this.querySelfPromise!=null)return this.log("joining existing self query"),this.querySelfPromise.promise;if(this.querySelfPromise=ae(),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=bt(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 xr(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),s=>J3(s,this.count),async s=>Qn(s)),i=Date.now()-n;this.log("self-query found %d peers in %dms",o,i),this.events.dispatchEvent(new CustomEvent("kad-dht:query:self",{detail:{peers:o,duration:i}}))}catch(n){this.log.error("self-query error",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.running&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.interval))}};var Wn=class extends Le{log;reprovideQueue;maxQueueSize;datastore;timeout;reprovideTimeout;running;shutdownController;reprovideThreshold;contentRouting;datastorePrefix;addressManager;validity;interval;lock;peerId;constructor(e,t){super(),this.log=e.logger.forComponent(`${t.logPrefix}:reprovider`),this.peerId=e.peerId,this.reprovideQueue=new tt({concurrency:t.concurrency??f2,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new xt({...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??l2,this.maxQueueSize=t.maxQueueSize??h2,this.validity=t.validity??u2,this.interval=t.interval??d2,this.contentRouting=t.contentRouting,this.lock=t.lock,this.running=!1,this.reprovide=Pn(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,this.timeout=setTimeout(()=>{this.cleanUp().catch(e=>{this.log.error("error running reprovide/cleanup - %e",e)})},this.interval))}stop(){this.running=!1,this.reprovideQueue.clear(),clearTimeout(this.timeout),this.shutdownController?.abort()}async cleanUp(){let e=await this.lock.writeLock();try{this.safeDispatchEvent("reprovide:start");for await(let t of this.datastore.query({prefix:this.datastorePrefix}))try{let{cid:n,peerId:o}=_n(t.key),i=An(t.value).getTime(),s=i+this.validity,a=Date.now(),c=a>s;this.log.trace("comparing: %d < %d = %s %s",i,a-this.validity,c,c?"(expired)":""),c&&await this.datastore.delete(t.key),this.peerId.equals(o)&&a-s<this.reprovideThreshold&&this.queueReprovide(n).catch(l=>{this.log.error("could not reprovide %c - %e",n,l)})}catch(n){this.log.error("error processing datastore key %s - %e",t.key,n.message)}this.log("reprovide/cleanup successful")}finally{e(),this.safeDispatchEvent("reprovide:end"),this.running&&(this.timeout=setTimeout(()=>{this.cleanUp().catch(t=>{this.log.error("error running re-provide - %e",t)})},this.interval))}}async queueReprovide(e){if(!this.running)return;this.log.trace("waiting for queue capacity before adding %c to re-provide queue",e),await this.reprovideQueue.onSizeLessThan(this.maxQueueSize);let t=this.reprovideQueue.queue.find(n=>n.options.cid.equals(e));if(t!=null)return this.log.trace("not adding %c to re-provide queue - already in queue",e),t.join();this.log.trace("adding %c to re-provide queue",e),this.reprovideQueue.add(async n=>{if(n.signal?.throwIfAborted(),!this.running)return;this.log.trace("re-providing %c",e);let o=this.reprovideTimeout.getTimeoutSignal(n);try{await this.reprovide(n.cid,n)}finally{this.reprovideTimeout.cleanUp(o)}this.log.trace("re-provided %c",e)},{signal:this.shutdownController?.signal,cid:e}).catch(n=>{this.log.error("could not re-provide key %c - %e",e,n)})}async reprovide(e,t){await qr(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var S1=class extends tt{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};var fa=20,ha=5e3,da="kad-close",pa=50,Yn=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??ha,this.peerSetSize=t.peerSetSize??fa,this.closeTagName=t.closeTagName??da,this.closeTagValue=t.closeTagValue??pa,this.closestPeers=new Kt,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await ye(this.components.peerId);this.newPeers=new qt(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 Kt(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},[Co]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[Co]:void 0}})})])}};function _1(r){return Array.isArray(r?.peers)}var Zn=class{root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e){this.prefixLength=e.prefixLength??e4,this.kBucketSize=e.kBucketSize??I1,this.splitThreshold=e.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=e.numberOfOldContactsToPing??t4,this.lastPingThreshold=e.lastPingThreshold??r4,this.ping=e.ping,this.verify=e.verify,this.onAdd=e.onAdd,this.onRemove=e.onRemove,this.addingPeerMap=new nr,this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e){this.localPeer={peerId:e,kadId:await ye(e),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await ye(e),lastPing:0},o=this.addingPeerMap.get(e);if(o!=null)return o;try{let i=this._add(n,t);this.addingPeerMap.set(e,i),await i}finally{this.addingPeerMap.delete(e)}}async _add(e,t){let n=this._determineBucket(e.kadId);if(this._indexOf(n,e.kadId)>-1)return;if(n.peers.length===this.splitThreshold&&n.depth<this.prefixLength){await this._split(n),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!ga(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n);return}await this.verify(e,t)&&(e.lastPing=Date.now(),await this._add(e,t));return}let o=n.peers.filter(s=>!(s.peerId.equals(this.localPeer?.peerId)||s.lastPing>Date.now()-this.lastPingThreshold)).sort((s,a)=>s.lastPing<a.lastPing?-1:s.lastPing>a.lastPing?1:0).slice(0,this.numberOfNodesToPing),i=!1;for await(let s of this.ping(o,t))i=!0,await this.remove(s.kadId);i&&await this._add(e,t)}*closest(e,t=this.kBucketSize){let n=new qt(e,t);for(let o of this.toIterable())n.addWithKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*wr(n.peers,({peer:o})=>o.id)}count(){function e(t){if(_1(t))return t.peers.length;let n=0;return t.left!=null&&(n+=e(t.left)),t.right!=null&&(n+=e(t.right)),n}return e(this.root)}get(e){let t=this._determineBucket(e),n=this._indexOf(t,e);return t.peers[n]}async remove(e){let t=this._determineBucket(e),n=this._indexOf(t,e);if(n>-1){let o=t.peers.splice(n,1)[0];await this.onRemove?.(o,t)}}*toIterable(){function*e(t){if(_1(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+R(De(e,t),"base16"))}_determineBucket(e){let t=R(e,"base2");function n(o,i=0){return _1(o)?o:t[i]==="0"?n(o.left,i+1):n(o.right,i+1)}return n(this.root)}_indexOf(e,t){return e.peers.findIndex(n=>j(n.kadId,t))}async _split(e){let t={prefix:"0",depth:e.depth+1,peers:[]},n={prefix:"1",depth:e.depth+1,peers:[]};for(let o of e.peers)R(o.kadId,"base2")[e.depth]==="0"?(t.peers.push(o),await this.onMove?.(o,e,t)):(n.peers.push(o),await this.onMove?.(o,e,n));ma(e,t,n)}};function ma(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function ga(r,e){return r.lastPing<Date.now()-e}var I1=20,e4=6;var ya=20,wa=100,t4=3;var ba=20,xa=100,n4="kad-peer",Ea=1,r4=6e5,va=!0,Sa=1e3,Xn=class extends Le{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??I1,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??n4,this.peerTagValue=t.peerTagValue??Ea,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??va,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??Sa,this.pingOldContactQueue=new S1({concurrency:t.pingOldContactConcurrency??ba,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??xa}),this.pingOldContactTimeout=new xt({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new S1({concurrency:t.pingNewContactConcurrency??ya,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??wa}),this.pingNewContactTimeout=new xt({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new Zn({kBucketSize:t.kBucketSize,prefixLength:t.prefixLength,splitThreshold:t.splitThreshold,numberOfOldContactsToPing:t.numberOfOldContactsToPing,lastPingThreshold:t.lastPingThreshold,ping:this.pingOldContacts,verify:this.verifyNewContact,onAdd:this.peerAdded,onRemove:this.peerRemoved}),this.closestPeerTagger=new Yn(this.components,{logPrefix:t.logPrefix,routingTable:this,peerSetSize:t.closestPeerSetSize,refreshInterval:t.closestPeerSetRefreshInterval,closeTagName:t.closeTagName,closeTagValue:t.closeTagValue}),this.components.metrics!=null&&(this.metrics={routingTableSize:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_size`),routingTableKadBucketTotal:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_total`),routingTableKadBucketAverageOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_average_occupancy`),routingTableKadBucketMinOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_min_occupancy`),routingTableKadBucketMaxOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_occupancy`),routingTableKadBucketMaxDepth:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_depth`),kadBucketEvents:this.components.metrics.registerCounterGroup(`${t.metricsPrefix}_kad_bucket_events_total`)})}isStarted(){return this.running}async start(){this.running||(this.running=!0,await Kr(this.closestPeerTagger),await this.kb.addSelfPeer(this.components.peerId))}async afterStart(){Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let e=0;for(let t of await this.components.peerStore.all({filters:[n=>n.protocols.includes(this.protocol)&&n.tags.has(n4)],limit:this.populateFromDatastoreLimit})){if(!this.running)return;try{await this.add(t.id),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(t.id,{tags:{[this.peerTagName]:void 0}})}}this.log("added %d peer store peers to the routing table",e)}).catch(e=>{this.log.error("error adding peer store peers to the routing table %e",e)})}async stop(){this.running=!1,await k1(this.closestPeerTagger),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort()}async peerAdded(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_removed:!0}),this.safeDispatchEvent("peer:remove",{detail:e.peerId})}async*pingOldContacts(e,t){if(!this.running)return;let n=[];for(let o of e){if(this.kb.get(o.kadId)==null){this.log("asked to ping contact %p that was not in routing table",o.peerId);continue}this.metrics?.kadBucketEvents.increment({ping_old_contact:!0}),n.push(async()=>{let i=this.pingOldContactQueue.find(o.peerId);if(i!=null)return this.log("asked to ping contact %p was already being pinged",o.peerId),await i.join(t)?void 0:o;if(!await this.pingOldContactQueue.add(async a=>{let c=this.pingOldContactTimeout.getTimeoutSignal(),l=bt([c,a?.signal]);try{return await this.pingContact(o,a)}catch{return this.metrics?.kadBucketEvents.increment({ping_old_contact_error:!0}),!0}finally{this.pingOldContactTimeout.cleanUp(c),l.clear()}},{peerId:o.peerId,signal:t?.signal}))return o})}for await(let o of Xr(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=bt([n,t?.signal]);try{let i=this.pingNewContactQueue.find(e.peerId);return i!=null?(this.log("joining existing ping to add new peer %p to routing table",e.peerId),await i.join({signal:o})):await this.pingNewContactQueue.add(async s=>(this.metrics?.kadBucketEvents.increment({ping_new_contact:!0}),this.log("pinging new peer %p before adding to routing table",e.peerId),this.pingContact(e,s)),{peerId:e.peerId,signal:o})}catch{return this.log.trace("tried to add peer %p but they were not online",e.peerId),this.metrics?.kadBucketEvents.increment({ping_new_contact_error:!0}),!1}finally{this.pingNewContactTimeout.cleanUp(n),o.clear()}}async pingContact(e,t){let n;try{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){let t=await ye(e);return this.kb.get(t)?.peerId}closestPeer(e){let t=this.closestPeers(e,1);if(t.length>0)return t[0]}closestPeers(e,t=this.kBucketSize){return this.kb==null?[]:[...this.kb.closest(e,t)]}async add(e,t){if(this.kb==null)throw new Error("RoutingTable is not started");await this.kb.add(e,t)}async remove(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await ye(e);await this.kb.remove(t)}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0,o=20,i=0;function s(a){if(_1(a)){a.depth>n&&(n=a.depth),t++,e+=a.peers.length,a.peers.length<o&&(o=a.peers.length),a.peers.length>i&&(i=a.peers.length);return}s(a.left),s(a.right)}s(this.kb.root),this.metrics.routingTableSize.update(e),this.metrics.routingTableKadBucketTotal.update(t),this.metrics.routingTableKadBucketAverageOccupancy.update(Math.round(e/t)),this.metrics.routingTableKadBucketMinOccupancy.update(o),this.metrics.routingTableKadBucketMaxOccupancy.update(i),this.metrics.routingTableKadBucketMaxDepth.update(n)}};var o4=[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 Jn=15,eo=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:o,refreshInterval:i,refreshQueryTimeout:s,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=o,this.refreshInterval=i??y2,this.refreshQueryTimeout=s??w2,this.commonPrefixLengthRefreshedAt=[],this.refreshTable=this.refreshTable.bind(this)}async afterStart(){this.log(`refreshing routing table every ${this.refreshInterval}ms`),this.refreshTable(!0)}async stop(){this.refreshTimeoutId!=null&&clearTimeout(this.refreshTimeoutId)}refreshTable(e=!1){this.log("refreshing routing table");let t=this._maxCommonPrefix(),n=this._getTrackedCommonPrefixLengthsForRefresh(t);this.log(`max common prefix length ${t}`),this.log(`tracked CPLs [ ${n.map(o=>o.toISOString()).join(", ")} ]`),Promise.all(n.map(async(o,i)=>{try{if(await this._refreshCommonPrefixLength(i,o,e),this._numPeersForCpl(t)===0){let s=Math.min(2*(i+1),n.length-1);for(let a=i+1;a<s+1;a++)try{await this._refreshCommonPrefixLength(a,o,e)}catch(c){this.log.error(c)}}}catch(s){this.log.error(s)}})).catch(o=>{this.log.error(o)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(o=>{this.log.error(o)})}async _refreshCommonPrefixLength(e,t,n){if(!n&&t.getTime()>Date.now()-this.refreshInterval){this.log("not running refresh for cpl %s as time since last refresh not above interval",e);return}let o=await this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,o,this.routingTable.size);let i=AbortSignal.timeout(this.refreshQueryTimeout);let s=await Qn(this.peerRouting.getClosestPeers(o.toMultihash().bytes,{signal:i}));this.log(`found ${s} peers that were close to imaginary peer %p`,o),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,o,this.routingTable.size)}_getTrackedCommonPrefixLengthsForRefresh(e){e>Jn&&(e=Jn);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}async _generateRandomPeerId(e){if(this.routingTable.kb==null)throw new Error("Routing table not started");if(this.routingTable.kb.localPeer==null)throw new Error("Local peer not set");let t=ln(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),i=ue(o);return Ce(i)}async _makePeerId(e,t,n){if(n>Jn)throw new Error(`Cannot generate peer ID for common prefix length greater than ${Jn}`);let s=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1)^32768>>n,a=65535<<16-(n+1),c=s&a|t&~a,l=o4[c],u=new ArrayBuffer(34),f=new DataView(u,0,u.byteLength);return f.setUint8(0,st.code),f.setUint8(1,32),f.setUint32(2,l,!1),new Uint8Array(f.buffer,f.byteOffset,f.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=De(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var to=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Mr=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},ro=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},A1=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function no(r){return r[Symbol.asyncIterator]!=null}function i4(r,e){if(r.byteLength>e)throw new Mr("Message length too long")}var io=r=>{let e=ce(r),t=he(e);return Ke(r,t),io.bytes=e,t};io.bytes=0;function so(r,e){e=e??{};let t=e.lengthEncoder??io,n=e?.maxDataLength??4194304;function*o(i){i4(i,n);let s=t(i.byteLength);s instanceof Uint8Array?yield s:yield*s,i instanceof Uint8Array?yield i:yield*i}return no(r)?async function*(){for await(let i of r)yield*o(i)}():function*(){for(let i of r)yield*o(i)}()}so.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??io,n=e?.maxDataLength??4194304;return i4(r,n),new te(t(r.byteLength),r)};var ar;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(ar||(ar={}));var Us=r=>{let e=Be(r);return Us.bytes=ce(e),e};Us.bytes=0;function P1(r,e){let t=new te,n=ar.LENGTH,o=-1,i=e?.lengthDecoder??Us,s=e?.maxLengthLength??8,a=e?.maxDataLength??4194304;function*c(){for(;t.byteLength>0;){if(n===ar.LENGTH)try{if(o=i(t),o<0)throw new to("Invalid message length");if(o>a)throw new Mr("Message length too long");let l=i.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=ar.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>s)throw new ro("Message length length too long");break}throw l}if(n===ar.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=ar.LENGTH}}}return no(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new A1("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new A1("Unexpected end of input")}()}P1.fromReader=(r,e)=>{let t=1,n=async function*(){for(;;)try{let{done:i,value:s}=await r.next(t);if(i===!0)return;s!=null&&(yield s)}catch(i){if(i.code==="ERR_UNDER_READ")return{done:!0,value:null};throw i}finally{t=1}}();return P1(n,{...e??{},onLength:i=>{t=i}})};var ao=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 Re("Missing key");let n;try{n=X.decode(t.key)}catch{throw new Re("Invalid CID")}(t.providers==null||t.providers.length===0)&&this.log.error("no providers found in message"),this.log("%p asked us, %p to store provider record for for %c",e,this.peerId,n),await Promise.all(t.providers.map(async o=>{let i=ue(o.id),s=Ce(i),a=o.multiaddrs.map(c=>sr(c));if(!e.equals(s)){this.log("invalid provider peer %p from %p",o.id,e);return}if(o.multiaddrs.length<1){this.log("no valid addresses for provider %p. Ignore",e);return}this.log.trace("received provider %p for %s (addrs %s)",e,n,a),await this.providers.addProvider(n,s),await this.peerStore.merge(s,{multiaddrs:a})}))}};var co=class{peerRouting;peerInfoMapper;peerId;addressManager;log;constructor(e,t){let{peerRouting:n,logPrefix:o}=t;this.log=e.logger.forComponent(`${o}:rpc:handlers:find-node`),this.peerId=e.peerId,this.addressManager=e.addressManager,this.peerRouting=n,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(this.log("incoming request from %p for peers closer to %b",e,t.key),t.key==null)throw new Re("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getCloserPeersOffline(t.key,e);j(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(i=>i.decapsulateCode(W("p2p").code))});let o={type:H.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:i})=>i.length).map(i=>({id:i.id.toMultihash().bytes,multiaddrs:i.multiaddrs.map(s=>s.bytes)})),providers:[]};return o.closer.length===0&&this.log("could not find any peers closer to %b than %p",t.key,e),o}};function Aa(r){return r[Symbol.asyncIterator]!=null}function Pa(r){if(Aa(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 s4=Pa;var uo=class{peerId;peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:o,logPrefix:i}=t;this.log=e.logger.forComponent(`${i}:rpc:handlers:get-providers`),this.peerId=e.peerId,this.peerStore=e.peerStore,this.peerRouting=n,this.providers=o,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new Re("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=X.decode(t.key)}catch{throw new Re("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[o,i]=await Promise.all([s4(wr(await this.providers.getProviders(n),async a=>{let c=await this.peerStore.get(a);return{id:c.id,multiaddrs:c.addresses.map(({multiaddr:u})=>u)}})),this.peerRouting.getCloserPeersOffline(t.key,e)]),s={type:H.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:i.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)})),providers:o.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))};return this.log("got %s providers %s closerPeers",s.providers.length,s.closer.length),s}async _getAddresses(e){return[]}};var lo=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 Re("Invalid key");let o={type:H.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(L3(n)){this.log("is public key");let a=k3(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new Fe("No public key found in key book");c=Lt(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new le(n,c,new Date).serialize(),o}let[i,s]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getCloserPeersOffline(n,e)]);return i!=null&&(this.log("had record for %b in local datastore",n),o.record=i.serialize()),s.length>0&&(this.log("had %s closer peers in routing table",s.length),o.closer=s.map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))),o}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=Ut(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(i){if(i.name==="NotFoundError")return;throw i}let o=le.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>a2){await this.datastore.delete(t);return}return o}};var fo=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 ho=class{components;validators;log;datastorePrefix;constructor(e,t){let{validators:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:put-value`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.validators=n}async handle(e,t){let n=t.key;if(this.log("%p asked us to store value for key %b",e,n),t.record==null){let o=`Empty record from: ${e.toString()}`;throw this.log.error(o),new Re(o)}try{let o=le.deserialize(t.record);await Dr(this.validators,o),o.timeReceived=new Date;let i=Ut(this.datastorePrefix,o.key);await this.components.datastore.put(i,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,i)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var po=class{handlers;routingTable;log;metrics;constructor(e,t){this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_errors_total`)},this.log=e.logger.forComponent(`${t.logPrefix}:rpc`),this.routingTable=t.routingTable,this.handlers={[H.GET_VALUE.toString()]:new lo(e,t),[H.PUT_VALUE.toString()]:new ho(e,t),[H.FIND_NODE.toString()]:new co(e,t),[H.ADD_PROVIDER.toString()]:new ao(e,t),[H.GET_PROVIDERS.toString()]:new uo(e,t),[H.PING.toString()]:new fo(e,t)}}async handleMessage(e,t){let n=this.handlers[t.type];if(n==null){this.log.error(`no handler found for message type: ${t.type}`);return}try{return this.metrics.operations?.increment({[t.type]:!0}),await n.handle(e,t)}catch{this.metrics.errors?.increment({[t.type]:!0})}}onIncomingStream(e){let t="unknown";Promise.resolve().then(async()=>{let{stream:n,connection:o}=e,i=o.remotePeer,s=this;await xr(n,a=>P1(a),async function*(a){for await(let c of a){let l=ct.decode(c);t=l.type,s.log("incoming %s from %p",l.type,i);let u=await s.handleMessage(i,l);u!=null&&(yield ct.encode(u))}},a=>so(a),n)}).catch(n=>{this.log.error("error handling %s RPC message from %p - %e",t,e.connection.remotePeer,n)})}};var mo=class extends Le{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 Ks=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await qr(this.dht.provide(e,t))}async cancelReprovide(e){await this.dht.cancelReprovide(e)}async*findProviders(e,t={}){for await(let n of this.dht.findProviders(e,t))n.name==="PROVIDER"&&(yield*n.providers)}async put(e,t,n){await qr(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 Fe("Could not find value for key")}},qs=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 Fe("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},Ta=32,Ra=64,go=class extends Le{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;constructor(e,t={}){super();let n=t.logPrefix??"libp2p:kad-dht",o=t.datastorePrefix??"/dht",i=t.metricsPrefix??"libp2p_kad_dht",s={queries:e.metrics?.registerMetricGroup(`${i}_operations_total`,{label:"operation"}),errors:e.metrics?.registerCounterGroup(`${i}_operation_errors_total`,{label:"operation"}),queryTime:e.metrics?.registerMetricGroup(`${i}_operation_time_seconds`,{label:"operation"}),errorTime:e.metrics?.registerMetricGroup(`${i}_operation_error_time_seconds`,{label:"operation"})};this.running=!1,this.components=e,this.log=e.logger.forComponent(n),this.k=t.kBucketSize??I1,this.a=t.alpha??_t,this.d=t.disjointPaths??this.a,this.protocol=t.protocol??c2,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??Ta,this.maxOutboundStreams=t.maxOutboundStreams??Ra,this.peerInfoMapper=t.peerInfoMapper??Sn;let a=Lo();this.providers=new Gn(e,{...t.providers,logPrefix:n,datastorePrefix:o,lock:a}),this.validators={...w3,...t.validators},this.selectors={...o0,...t.selectors},this.network=new Vn(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:i}),this.routingTable=new Xn(e,{kBucketSize:this.k,pingOldContactTimeout:t.pingOldContactTimeout,pingOldContactConcurrency:t.pingOldContactConcurrency,pingOldContactMaxQueueSize:t.pingOldContactMaxQueueSize,pingNewContactTimeout:t.pingNewContactTimeout,pingNewContactConcurrency:t.pingNewContactConcurrency,pingNewContactMaxQueueSize:t.pingNewContactMaxQueueSize,protocol:this.protocol,logPrefix:n,metricsPrefix:i,prefixLength:t.prefixLength,splitThreshold:t.kBucketSplitThreshold,network:this.network});let c=ae();t.allowQueryWithZeroPeers===!0&&c.resolve(),this.queryManager=new $n(e,{disjointPaths:this.d,alpha:this.a,logPrefix:n,metricsPrefix:i,initialQuerySelfHasRun:c,routingTable:this.routingTable,allowQueryWithZeroPeers:t.allowQueryWithZeroPeers}),this.peerRouting=new Hn(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new Tn(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:o}),this.contentRouting=new Un(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new eo(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new po(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:n,metricsPrefix:i,datastorePrefix:o,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new mo(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new jn(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:c,operationMetrics:s}),this.reprovider=new Wn(e,{...t.reprovide,logPrefix:n,metricsPrefix:i,datastorePrefix:o,contentRouting:this.contentRouting,lock:a,operationMetrics:s}),this.network.addEventListener("peer",l=>{let u=l.detail;this.onPeerConnect(u).catch(f=>{this.log.error("could not add %p to routing table",u.id,f)}),this.dispatchEvent(new CustomEvent("peer",{detail:u}))}),this.topologyListener.addEventListener("peer",l=>{let u=l.detail;Promise.resolve().then(async()=>{let f=await this.components.peerStore.get(u),h={id:u,multiaddrs:f.addresses.map(({multiaddr:d})=>d),protocols:f.protocols};await this.onPeerConnect(h)}).catch(f=>{this.log.error("could not add %p to routing table - %e - %e",u,f)})}),this.dhtPeerRouting=new qs(this),this.dhtContentRouting=new Ks(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",l=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let u=l.detail.peer.addresses.some(({multiaddr:h})=>C3(h)),f=this.getMode();u&&f==="client"?await this.setMode("server"):f==="server"&&!u&&await this.setMode("client")}).catch(u=>{this.log.error("error setting dht server mode",u)})}),this.get=tr(this.get.bind(this),s,"GET_VALUE"),this.findProviders=tr(this.findProviders.bind(this),s,"FIND_PROVIDERS"),this.findPeer=tr(this.findPeer.bind(this),s,"FIND_PEER"),this.getClosestPeers=tr(this.getClosestPeers.bind(this),s,"GET_CLOSEST_PEERS"),this.provide=tr(this.provide.bind(this),s,"PROVIDE"),this.put=tr(this.put.bind(this),s,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[Zs]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery"];[Xs]=["@libp2p/identify","@libp2p/ping"];get[$s](){return this.dhtContentRouting}get[js](){return this.dhtPeerRouting}get[Qs](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log.trace("ignoring %p as there were no valid addresses in %s after filtering",e.id,e.multiaddrs.map(t=>t.toString()));return}try{await this.routingTable.add(e.id)}catch(t){this.log.error("could not add %p to routing table",e.id,t)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e,t=!1){if(e===this.getMode()&&!t){this.log("already in %s mode",e);return}if(await this.components.registrar.unhandle(this.protocol),e===this.getMode()&&!t){this.log("already in %s mode",e);return}e==="client"?(this.log("enabling client mode while in %s mode",this.getMode()),this.clientMode=!0):(this.log("enabling server mode while in %s mode",this.getMode()),this.clientMode=!1,await this.components.registrar.handle(this.protocol,this.rpc.onIncomingStream.bind(this.rpc),{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running||(this.running=!0,await this.setMode(this.clientMode?"client":"server",!0),await Kr(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await Kr(this.querySelf))}async stop(){this.running=!1,await k1(this.querySelf,this.queryManager,this.network,this.routingTable,this.routingTableRefresh,this.topologyListener,this.reprovider)}async*put(e,t,n={}){yield*this.contentFetching.put(e,t,n)}async*get(e,t={}){yield*this.contentFetching.get(e,t)}async*provide(e,t={}){yield*this.contentRouting.provide(e,this.components.addressManager.getAddresses(),t)}async cancelReprovide(e){await this.providers.removeProvider(e,this.components.peerId)}async*findProviders(e,t={}){yield*this.contentRouting.findProviders(e,t)}async*findPeer(e,t={}){yield*this.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t={}){yield*this.peerRouting.getClosestPeers(e,t)}async refreshRoutingTable(){this.routingTableRefresh.refreshTable(!0)}};var Fs;(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"})(Fs||(Fs={}));function La(r={}){return e=>new go(e,r)}return g4(ka);})();
3
3
  /*! Bundled license information:
4
4
 
5
5
  @noble/hashes/esm/utils.js: