var bton = function (t) { "use strict"; const n = new TextEncoder, e = [{name: "base58", charset: "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}, { name: "base64", charset: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" }, {name: "base64url", charset: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"}]; function r(t) { for (const n of e) if (n.name === t) return n.charset; throw TypeError("Charset does not exist: " + t) } const i = { encode: function (t, e, i = !1) { "string" == typeof t && (t = n.encode(t)); const o = r(e), s = o.length, a = []; let c, u, f, h = "", l = 0; for (c = 0; c < t.length; c++) for (l = 0, u = t[c], h += u > 0 || (h.length ^ c) > 0 ? "" : "1"; l in a || u > 0;) f = a[l], f = f > 0 ? 256 * f + u : u, u = f / s | 0, a[l] = f % s, l++; for (; l-- > 0;) h += o[a[l]]; return i && h.length % 4 > 0 ? h + "=".repeat(4 - h.length % 4) : h }, decode: function (t, n) { const e = r(n), i = e.length, o = [], s = []; t = t.replace("=", ""); let a, c, u, f = 0; for (a = 0; a < t.length; a++) { if (f = 0, c = e.indexOf(t[a]), c < 0) throw new Error(`Character range out of bounds: ${c}`); for (c > 0 || (s.length ^ a) > 0 || s.push(0); f in o || c > 0;) u = o[f], u = u > 0 ? u * i + c : c, c = u >> 8, o[f] = u % 256, f++ } for (; f-- > 0;) s.push(o[f]); return new Uint8Array(s) } }, o = "qpzry9x8gf2tvdw0s3jn54khce6mua7l", s = [996825010, 642813549, 513874426, 1027748829, 705979059], a = {BECH32: "bech32", BECH32M: "bech32m"}; function c(t) { switch (t) { case a.BECH32: return 1; case a.BECH32M: return 734539939; default: throw new Error(`Unrecognized encoding: ${t}`) } } function u(t) { let n = 1; for (let e = 0; e < t.length; ++e) { const r = n >> 25; n = (33554431 & n) << 5 ^ t[e]; for (let t = 0; t < 5; ++t) (r >> t & 1) > 0 && (n ^= s[t]) } return n } function f(t) { const n = []; let e; for (e = 0; e < t.length; ++e) n.push(t.charCodeAt(e) >> 5); for (n.push(0), e = 0; e < t.length; ++e) n.push(31 & t.charCodeAt(e)); return n } function h(t, n, e, r = !0) { const i = []; let o = 0, s = 0; const a = (1 << e) - 1, c = (1 << n + e - 1) - 1; for (const r of t) { if (r < 0 || r >> n > 0) return []; for (o = (o << n | r) & c, s += n; s >= e;) s -= e, i.push(o >> s & a) } if (r) s > 0 && i.push(o << e - s & a); else if (s >= n || (o << e - s & a) > 0) return []; return i } function l(t, n, e) { const r = n.concat(function (t, n, e) { const r = u(f(t).concat(n).concat([0, 0, 0, 0, 0, 0])) ^ c(e), i = []; for (let t = 0; t < 6; ++t) i.push(r >> 5 * (5 - t) & 31); return i }(t, n, e)); let i = t + "1"; for (let t = 0; t < r.length; ++t) i += o.charAt(r[t]); return i } function d(t, n) { const e = n > 0 ? "bech32m" : "bech32"; if (!function (t) { let n, e, r = !1, i = !1; for (n = 0; n < t.length; ++n) { if (e = t.charCodeAt(n), e < 33 || e > 126) return !1; e >= 97 && e <= 122 && (r = !0), e >= 65 && e <= 90 && (i = !0) } return !(r && i) }(t)) return {hrp: null, data: [255]}; if (!function (t) { const n = t.lastIndexOf("1"); return !(n < 1 || n + 7 > t.length || t.length > 90) }(t = t.toLowerCase())) return {hrp: null, data: [255]}; const r = [], i = t.lastIndexOf("1"), s = t.substring(0, i); for (let n = i + 1; n < t.length; ++n) { const e = o.indexOf(t.charAt(n)); if (-1 === e) return {hrp: null, data: [255]}; r.push(e) } return function (t, n, e) { return u(f(t).concat(n)) === c(e) }(s, r, e) ? {hrp: s, data: r.slice(0, r.length - 6)} : {hrp: null, data: [255]} } function w(t, n = 0) { const e = t.split("1", 1)[0], {hrp: r, data: i} = d(t, n), o = h(i.slice(1), 5, 8, !1), s = o.length; switch (!0) { case e !== r: throw new Error("Returned hrp string is invalid."); case null === o || s < 2 || s > 40: throw new Error("Decoded string is invalid or out of spec."); case i[0] > 16: throw new Error("Returned version bit is out of range."); case 0 === i[0] && 20 !== s && 32 !== s: throw new Error("Decoded string does not match version 0 spec."); case 0 === i[0] && 0 !== n: case 0 !== i[0] && 1 !== n: throw new Error("Decoded version bit does not match."); default: return Uint8Array.from(o) } } const y = { encode: function (t, n = "bch", e = 0) { const r = l(n, [e, ...h([...t], 8, 5)], e > 0 ? "bech32m" : "bech32"); return w(r, e), r }, decode: w }, g = new TextEncoder, p = new TextDecoder; function m(t) { return g.encode(t) } function b(t) { const n = []; let e, r = 0; if (t.length % 2 > 0) throw new Error(`Invalid hex string length: ${t.length}`); for (e = 0; e < t.length; e += 2) n[r] = parseInt(t.slice(e, e + 2), 16), r += 1; return Uint8Array.from(n) } function A(t) { if (0 === t) return Uint8Array.of(0); const n = []; for (; t > 0;) { const e = 255 & t; n.push(e), t = (t - e) / 256 } return Uint8Array.from(n) } function x(t) { if (0n === t) return Uint8Array.of(0); const n = []; for (; t > 0n;) { const e = 0xffn & t; n.push(Number(e)), t = (t - e) / 256n } return Uint8Array.from(n) } function E(t) { return p.decode(t) } function v(t) { let n, e = 0; for (n = t.length - 1; n >= 0; n--) e = 256 * e + t[n]; return Number(e) } function S(t) { let n, e = 0n; for (n = t.length - 1; n >= 0; n--) e = 256n * e + BigInt(t[n]); return BigInt(e) } async function P(t) { return crypto.subtle.digest("SHA-256", t).then((t => new Uint8Array(t))) } async function O(t) { return P(await P(t)) } const {crypto: U} = globalThis; let _ = class extends Uint8Array { static { this.num = (t, n, e = "le") => { const r = new _(A(t), n); return "le" === e ? r.reverse() : r } } static { this.big = (t, n, e = "le") => { const r = new _(x(t), n); return "le" === e ? r.reverse() : r } } static async b58check(t) { const n = i.decode(t, "base58"); return new _(await async function (t) { const n = t.slice(0, -4), e = t.slice(-4); if ((await O(n)).slice(0, 4).toString() !== e.toString()) throw new Error("Invalid checksum!"); return n }(n)) } static { this.any = (t, n) => new _(function (t) { if (t instanceof ArrayBuffer) return new Uint8Array(t); if (t instanceof Uint8Array) return t; const n = typeof t; switch (n) { case"bigint": return x(t); case"boolean": return Uint8Array.of(t); case"number": return A(t); case"string": return null !== t.match(/^(02|03)*[0-9a-fA-F]{64}$/) ? b(t) : g.encode(t); default: throw TypeError("Unsupported format:" + n) } }(t), n) } static { this.raw = (t, n) => new _(t, n) } static { this.str = (t, n) => new _(m(t), n) } static { this.hex = (t, n) => new _(b(t), n) } static { this.json = t => new _(m(JSON.stringify(t))) } static { this.base64 = t => new _(i.decode(t, "base64")) } static { this.b64url = t => new _(i.decode(t, "base64url")) } static { this.bech32 = (t, n = 0) => new _(y.decode(t, n)) } constructor(t, n) { if (void 0 !== n) { const e = new Uint8Array(n).fill(0); e.set(new Uint8Array(t)), t = e.buffer } return super(t), this } get num() { return this.toNum() } get big() { return this.toBig() } get arr() { return this.toArr() } get str() { return this.toStr() } get hex() { return this.toHex() } get raw() { return new Uint8Array(this) } get base64() { return this.toBase64() } get b64url() { return this.toB64url() } get digest() { return this.toDigest() } get id() { return this.toDigest().then((t => new _(t).hex)) } toNum(t = "le") { return v("le" === t ? this.reverse() : this) } toBig(t = "le") { return S("le" === t ? this.reverse() : this) } async toDigest(t = "SHA-256") { return U.subtle.digest(t, this.raw).then((t => new Uint8Array(t))) } async tob58check() { return i.encode(await async function (t) { const n = await O(t); return Uint8Array.of(...t, ...n.slice(0, 4)) }(this), "base58") } toArr() { return Array.from(this) } toStr() { return E(this) } toHex() { return function (t) { const n = []; let e; for (e = 0; e < t.length; e++) n.push(t[e].toString(16).padStart(2, "0")); return n.join("") }(this) } toJson() { return JSON.parse(E(this)) } toBytes() { return new Uint8Array(this) } toB64url() { return i.encode(this, "base64url") } toBase64(t) { return i.encode(this, "base64", t) } toBech32(t, n = 0) { return y.encode(this, t, n) } prepend(t) { return _.of(...t, ...this) } append(t) { return _.of(...this, ...t) } slice(t, n) { return new _(new Uint8Array(this).slice(t, n)) } reverse() { return new _(new Uint8Array(this).reverse()) } write(t, n) { this.set(t, n) } prefixSize2(t) { return _.of(..._.readSize(this.length, t), ...this) } // Rarity Garden Hack prefixSize(t) { const sized = _.readSize(this.length, t); const thised = this; var uint8 = new Uint8Array(sized.length + thised.length); uint8.set(sized); uint8.set(thised, sized.length); return new _(uint8) } static from(t) { return new _(Uint8Array.from(t)) } static of2(...t) { return new _(Uint8Array.of(...t)) } // Rarity Garden Hack static of(...t) { const uint8 = new Uint8Array(t.length); for(let i = 0; i < uint8.length; i++) { uint8[i] = t[i]; } return new _(uint8) } static join(t) { let n, e = 0; const r = t.reduce(((t, n) => t + n.length), 0), i = new Uint8Array(r); for (const r of t) for (n = 0; n < r.length; e++, n++) i[e] = r[n]; return new _(i, r) } static readSize(t, n) { if (t < 253) return _.num(t, 1); if (t < 65536) return _.of(253, ..._.num(t, 2, n)); if (t < 4294967296) return _.of(254, ..._.num(t, 4, n)); if (t < 0x10000000000000000) return _.of(255, ..._.num(t, 8, n)); throw new Error(`Value is too large: ${t}`) } static random(t = 32) { return new _(U.getRandomValues(new Uint8Array(t))) } static { this.encode = m } static { this.decode = E } static normalize(t, n) { if (t instanceof Uint8Array) return t; if ("string" == typeof t) return _.hex(t, n).raw; if ("number" == typeof t) return _.num(t, n).raw; if ("bigint" == typeof t) return _.big(t, n).raw; throw TypeError("Unrecognized format: " + typeof t) } static serialize(t) { if ("string" == typeof t) return _.str(t).raw; if ("object" == typeof t) { if (t instanceof Uint8Array) return t; try { return _.json(t).raw } catch { throw TypeError("Object is not serializable.") } } throw TypeError("Unrecognized format: " + typeof t) } static revitalize(t) { if (t instanceof Uint8Array && (t = E(t)), "string" == typeof t) try { return JSON.parse(t) } catch { return t } return t } }; class B { constructor(t) { this.data = new Uint8Array(t), this.size = this.data.length } peek(t) { if (t > this.size) throw new Error(`Size greater than stream: ${t} > ${this.size}`); return new _(this.data.slice(0, t).buffer) } read(t) { t = t ?? this.readSize(); const n = this.peek(t); return this.data = this.data.slice(t), this.size = this.data.length, n } readSize() { const t = this.read(1).toNum(); switch (!0) { case t >= 0 && t < 253: return t; case 253 === t: return this.read(2).toNum(); case 254 === t: return this.read(4).toNum(); case 255 === t: return this.read(8).toNum(); default: throw new Error(`Varint is out of range: ${t}`) } } } const I = { OP_0: 0, OP_PUSHDATA1: 76, OP_PUSHDATA2: 77, OP_PUSHDATA4: 78, OP_1NEGATE: 79, OP_1: 81, OP_2: 82, OP_3: 83, OP_4: 84, OP_5: 85, OP_6: 86, OP_7: 87, OP_8: 88, OP_9: 89, OP_10: 90, OP_11: 91, OP_12: 92, OP_13: 93, OP_14: 94, OP_15: 95, OP_16: 96, OP_NOP: 97, OP_IF: 99, OP_NOTIF: 100, OP_ELSE: 103, OP_ENDIF: 104, OP_VERIFY: 105, OP_RETURN: 106, OP_TOALTSTACK: 107, OP_FROMALTSTACK: 108, OP_2DROP: 109, OP_2DUP: 110, OP_3DUP: 111, OP_2OVER: 112, OP_2ROT: 113, OP_2SWAP: 114, OP_IFDUP: 115, OP_DEPTH: 116, OP_DROP: 117, OP_DUP: 118, OP_NIP: 119, OP_OVER: 120, OP_PICK: 121, OP_ROLL: 122, OP_ROT: 123, OP_SWAP: 124, OP_TUCK: 125, OP_SIZE: 130, OP_EQUAL: 135, OP_EQUALVERIFY: 136, OP_1ADD: 139, OP_1SUB: 140, OP_NEGATE: 143, OP_ABS: 144, OP_NOT: 145, OP_0NOTEQUAL: 146, OP_ADD: 147, OP_SUB: 148, OP_BOOLAND: 154, OP_BOOLOR: 155, OP_NUMEQUAL: 156, OP_NUMEQUALVERIFY: 157, OP_NUMNOTEQUAL: 158, OP_LESSTHAN: 159, OP_GREATERTHAN: 160, OP_LESSTHANOREQUAL: 161, OP_GREATERTHANOREQUAL: 162, OP_MIN: 163, OP_MAX: 164, OP_WITHIN: 165, OP_RIPEMD160: 166, OP_SHA1: 167, OP_SHA256: 168, OP_HASH160: 169, OP_HASH256: 170, OP_CODESEPARATOR: 171, OP_CHECKSIG: 172, OP_CHECKSIGVERIFY: 173, OP_CHECKMULTISIG: 174, OP_CHECKMULTISIGVERIFY: 175, OP_NOP1: 176, OP_CHECKLOCKTIMEVERIFY: 177, OP_CHECKSEQUENCEVERIFY: 178, OP_NOP4: 179, OP_NOP5: 180, OP_NOP6: 181, OP_NOP7: 182, OP_NOP8: 183, OP_NOP9: 184, OP_NOP10: 185 }; function H(t) { for (const [n, e] of Object.entries(I)) if (e === t) return n; throw new Error("OPCODE not found:" + String(t)) } const z = 520; function N(t = [], n = !0) { let e = _.num(0); return Array.isArray(t) && (e = _.raw(T(t))), "string" == typeof t && (e = _.hex(t)), t instanceof Uint8Array && (e = _.raw(t)), n && (e = e.prefixSize("be")), e.raw } function T(t) { const n = []; for (const e of t) n.push(R(e)); return n.length > 0 ? _.join(n) : new Uint8Array } function R(t) { let n = new Uint8Array; if ("string" == typeof t) { if (t.startsWith("OP_")) return _.num(function (t) { for (const [n, e] of Object.entries(I)) if (n === t) return Number(e); throw new Error("OPCODE not found:" + t) }(t), 1); t.startsWith("STR_") && (n = _.str(t.slice(3))), n = _.hex(t) } if ("number" == typeof t && (n = _.num(t)), t instanceof Uint8Array && (n = t), n.length > z) { const t = function (t) { const n = [], e = new B(t); for (; e.size > z;) n.push(e.read(z)); return n.push(e.read(e.size)), n }(n); return T(t) } return _.of(...function (t) { const n = _.num(76, 1), e = _.num(77, 1); switch (!0) { case t <= 75: return _.num(t); case t > 75 && t < 256: return _.join([n, _.num(t, 1)]); case t >= 256 && t <= z: return _.join([e, _.num(t, 2, "be")]); default: throw new Error("Invalid word size:" + t.toString()) } }(n.length), ...n) } function k(t) { return _.num(t, 4).reverse() } function C(t) { return _.hex(t, 32).reverse() } function D(t) { return _.num(t, 4).reverse() } function K(t = 4294967295) { return ("string" == typeof t ? _.hex(t, 4) : _.num(t, 4)).reverse() } function j(t) { return "number" == typeof t && (t = BigInt(t)), _.big(t, 8).reverse() } function $(t) { const n = []; if (Array.isArray(t)) { n.push(_.readSize(t.length)); for (const e of t) n.push(N(e)); return _.join(n) } return _.normalize(t) } function V(t) { return _.num(t, 4).reverse() } function L(t) { "string" == typeof t && (t = _.hex(t).raw); const n = new B(t), e = function (t) { return t.read(4).reverse().toNum() }(n), r = function (t) { const [n, e] = [...t.peek(2)]; if (0 === n) { if (t.read(2), 1 === e) return !0; throw new Error(`Invalid witness flag: ${e}`) } return !1 }(n), i = function (t) { const n = [], e = t.readSize(); for (let r = 0; r < e; r++) n.push(q(t)); return n }(n), o = function (t) { const n = [], e = t.readSize(); for (let r = 0; r < e; r++) n.push(F(t)); return n }(n); if (r) for (const t of i) t.witness = M(n); const s = function (t) { return t.read(4).reverse().toNum() }(n); return {version: e, input: i, output: o, locktime: s} } function q(t) { return { txid: t.read(32).reverse().toHex(), vout: t.read(4).reverse().toNum(), scriptSig: Y(t, !0), sequence: t.read(4).reverse().toHex() } } function F(t) { return {value: t.read(8).reverse().big, scriptPubKey: Y(t, !0)} } function M(t) { const n = [], e = t.readSize(); for (let r = 0; r < e; r++) { const e = Y(t, !0); n.push(e) } return n } function Y(t, n) { const e = !0 === n ? t.readSize() : t.size; return e > 0 ? t.read(e).toHex() : _.num(0).toHex() } function Z(t) { if (void 0 === t) throw new Error("Script data is undefined!"); if (Array.isArray(t)) throw new Error("Script data is an array!"); return _.normalize(t) } function W(t) { switch (!0) { case 0 === t: return "opcode"; case t >= 1 && t <= 75: return "varint"; case 76 === t: return "pushdata1"; case 77 === t: return "pushdata2"; case 78 === t: return "pushdata4"; case t <= 185: return "opcode"; default: throw new Error(`Invalid word range: ${t}`) } } function G(t) { switch (!0) { case"number" != typeof t: return !1; case 0 === t: return !0; case[126, 127, 128, 129, 131, 132, 133, 134, 141, 142, 149, 150, 151, 152, 153].includes(t): return !1; case 75 < t && t < 186: return !0; default: return !1 } } /*! noble-secp256k1 - MIT License (c) 2019 Paul Miller (paulmillr.com) */ const {crypto: X} = globalThis, J = BigInt(0), Q = BigInt(1), tt = BigInt(2), nt = BigInt(3), et = BigInt(8), rt = Object.freeze({ a: J, b: BigInt(7), P: BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"), n: BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"), h: Q, Gx: BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"), Gy: BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"), beta: BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee") }), it = (t, n) => (t + n / tt) / n, ot = { beta: BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"), splitScalar(t) { const {n: n} = rt, e = BigInt("0x3086d221a7d46bcde86c90e49284eb15"), r = -Q * BigInt("0xe4437ed6010e88286f547fa90abfe4c3"), i = BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"), o = e, s = BigInt("0x100000000000000000000000000000000"), a = it(o * t, n), c = it(-r * t, n); let u = Tt(t - a * e - c * i, n), f = Tt(-a * r - c * o, n); const h = u > s, l = f > s; if (h && (u = n - u), l && (f = n - f), u > s || f > s) throw new Error("splitScalarEndo: Endomorphism failed, k=" + t); return {k1neg: h, k1: u, k2neg: l, k2: f} } }, st = 32, at = 32, ct = 32, ut = st + 1, ft = 2 * st + 1; function ht(t) { const {a: n, b: e} = rt, r = Tt(t * t), i = Tt(r * t); return Tt(i + n * t + e) } const lt = rt.a === J; class dt extends Error { constructor(t) { super(t) } } function wt(t) { if (!(t instanceof yt)) throw new TypeError("JacobianPoint expected") } class yt { constructor(t, n, e) { this.x = t, this.y = n, this.z = e } static get BASE() { return new yt(rt.Gx, rt.Gy, Q) } static get ZERO() { return new yt(J, Q, J) } static fromAffine(t) { if (!(t instanceof mt)) throw new TypeError("JacobianPoint#fromAffine: expected Point"); return t.equals(mt.ZERO) ? yt.ZERO : new yt(t.x, t.y, Q) } static toAffineBatch(t) { const n = function (t, n = rt.P) { const e = new Array(t.length), r = kt(t.reduce(((t, r, i) => r === J ? t : (e[i] = t, Tt(t * r, n))), Q), n); return t.reduceRight(((t, r, i) => r === J ? t : (e[i] = Tt(t * e[i], n), Tt(t * r, n))), r), e }(t.map((t => t.z))); return t.map(((t, e) => t.toAffine(n[e]))) } static normalizeZ(t) { return yt.toAffineBatch(t).map(yt.fromAffine) } equals(t) { wt(t); const {x: n, y: e, z: r} = this, {x: i, y: o, z: s} = t, a = Tt(r * r), c = Tt(s * s), u = Tt(n * c), f = Tt(i * a), h = Tt(Tt(e * s) * c), l = Tt(Tt(o * r) * a); return u === f && h === l } negate() { return new yt(this.x, Tt(-this.y), this.z) } double() { const {x: t, y: n, z: e} = this, r = Tt(t * t), i = Tt(n * n), o = Tt(i * i), s = t + i, a = Tt(tt * (Tt(s * s) - r - o)), c = Tt(nt * r), u = Tt(c * c), f = Tt(u - tt * a), h = Tt(c * (a - f) - et * o), l = Tt(tt * n * e); return new yt(f, h, l) } add(t) { wt(t); const {x: n, y: e, z: r} = this, {x: i, y: o, z: s} = t; if (i === J || o === J) return this; if (n === J || e === J) return t; const a = Tt(r * r), c = Tt(s * s), u = Tt(n * c), f = Tt(i * a), h = Tt(Tt(e * s) * c), l = Tt(Tt(o * r) * a), d = Tt(f - u), w = Tt(l - h); if (d === J) return w === J ? this.double() : yt.ZERO; const y = Tt(d * d), g = Tt(d * y), p = Tt(u * y), m = Tt(w * w - g - tt * p), b = Tt(w * (p - m) - h * g), A = Tt(r * s * d); return new yt(m, b, A) } subtract(t) { return this.add(t.negate()) } multiplyUnsafe(t) { const n = yt.ZERO; if ("bigint" == typeof t && t === J) return n; let e = Nt(t); if (e === Q) return this; if (!lt) { let t = n, r = this; for (; e > J;) e & Q && (t = t.add(r)), r = r.double(), e >>= Q; return t } let {k1neg: r, k1: i, k2neg: o, k2: s} = ot.splitScalar(e), a = n, c = n, u = this; for (; i > J || s > J;) i & Q && (a = a.add(u)), s & Q && (c = c.add(u)), u = u.double(), i >>= Q, s >>= Q; return r && (a = a.negate()), o && (c = c.negate()), c = new yt(Tt(c.x * ot.beta), c.y, c.z), a.add(c) } precomputeWindow(t) { const n = lt ? 128 / t + 1 : 256 / t + 1, e = []; let r = this, i = r; for (let o = 0; o < n; o++) { i = r, e.push(i); for (let n = 1; n < 2 ** (t - 1); n++) i = i.add(r), e.push(i); r = i.double() } return e } wNAF(t, n) { !n && this.equals(yt.BASE) && (n = mt.BASE); const e = n && n._WINDOW_SIZE || 1; if (256 % e) throw new Error("Point#wNAF: Invalid precomputation window, must be power of 2"); let r = n && pt.get(n); r || (r = this.precomputeWindow(e), n && 1 !== e && (r = yt.normalizeZ(r), pt.set(n, r))); let i = yt.ZERO, o = yt.BASE; const s = 1 + (lt ? 128 / e : 256 / e), a = 2 ** (e - 1), c = BigInt(2 ** e - 1), u = 2 ** e, f = BigInt(e); for (let n = 0; n < s; n++) { const e = n * a; let s = Number(t & c); t >>= f, s > a && (s -= u, t += Q); const h = e, l = e + Math.abs(s) - 1, d = n % 2 != 0, w = s < 0; 0 === s ? o = o.add(gt(d, r[h])) : i = i.add(gt(w, r[l])) } return {p: i, f: o} } multiply(t, n) { let e, r, i = Nt(t); if (lt) { const {k1neg: t, k1: o, k2neg: s, k2: a} = ot.splitScalar(i); let {p: c, f: u} = this.wNAF(o, n), {p: f, f: h} = this.wNAF(a, n); c = gt(t, c), f = gt(s, f), f = new yt(Tt(f.x * ot.beta), f.y, f.z), e = c.add(f), r = u.add(h) } else { const {p: t, f: o} = this.wNAF(i, n); e = t, r = o } return yt.normalizeZ([e, r])[0] } toAffine(t) { const {x: n, y: e, z: r} = this, i = this.equals(yt.ZERO); null == t && (t = i ? et : kt(r)); const o = t, s = Tt(o * o), a = Tt(s * o), c = Tt(n * s), u = Tt(e * a), f = Tt(r * o); if (i) return mt.ZERO; if (f !== Q) throw new Error("invZ was invalid"); return new mt(c, u) } } function gt(t, n) { const e = n.negate(); return t ? e : n } const pt = new WeakMap; let mt = class { constructor(t, n) { this.x = t, this.y = n } _setWindowSize(t) { this._WINDOW_SIZE = t, pt.delete(this) } static get BASE() { return new mt(rt.Gx, rt.Gy) } static get ZERO() { return new mt(J, J) } hasEvenY() { return this.y % tt === J } static fromCompressedHex(t) { const n = 32 === t.length, e = Ht(n ? t : t.subarray(1)); if (!Vt(e)) throw new Error("Point is not on curve"); let r = function (t) { const {P: n} = rt, e = BigInt(6), r = BigInt(11), i = BigInt(22), o = BigInt(23), s = BigInt(44), a = BigInt(88), c = t * t * t % n, u = c * c * t % n, f = Rt(u, nt) * u % n, h = Rt(f, nt) * u % n, l = Rt(h, tt) * c % n, d = Rt(l, r) * l % n, w = Rt(d, i) * d % n, y = Rt(w, s) * w % n, g = Rt(y, a) * y % n, p = Rt(g, s) * w % n, m = Rt(p, nt) * u % n, b = Rt(m, o) * d % n, A = Rt(b, e) * c % n, x = Rt(A, tt); if (x * x % n !== t) throw new Error("Cannot find square root"); return x }(ht(e)); const i = (r & Q) === Q; if (n) i && (r = Tt(-r)); else { 1 == (1 & t[0]) !== i && (r = Tt(-r)) } const o = new mt(e, r); return o.assertValidity(), o } static fromUncompressedHex(t) { const n = Ht(t.subarray(1, st + 1)), e = Ht(t.subarray(st + 1, 2 * st + 1)), r = new mt(n, e); return r.assertValidity(), r } static fromHex(t) { const n = zt(t), e = n.length, r = n[0]; if (e === st) return this.fromCompressedHex(n); if (e === ut && (2 === r || 3 === r)) return this.fromCompressedHex(n); if (e === ft && 4 === r) return this.fromUncompressedHex(n); throw new Error(`Point.fromHex: received invalid point. Expected 32-${ut} compressed bytes or ${ft} uncompressed bytes, not ${e}`) } static fromPrivateKey(t) { return mt.BASE.multiply(qt(t)) } static fromSignature(t, n, e) { const {r: r, s: i} = Mt(n); if (![0, 1, 2, 3].includes(e)) throw new Error("Cannot recover: invalid recovery bit"); const o = Ct(zt(t)), {n: s} = rt, a = 2 === e || 3 === e ? r + s : r, c = kt(a, s), u = Tt(-o * c, s), f = Tt(i * c, s), h = 1 & e ? "03" : "02", l = mt.fromHex(h + Ot(a)), d = mt.BASE.multiplyAndAddUnsafe(l, u, f); if (!d) throw new Error("Cannot recover signature: point at infinify"); return d.assertValidity(), d } toRawBytes(t = !1) { return It(this.toHex(t)) } toHex(t = !1) { const n = Ot(this.x); if (t) { return `${this.hasEvenY() ? "02" : "03"}${n}` } return `04${n}${Ot(this.y)}` } toHexX() { return this.toHex(!0).slice(2) } toRawX() { return this.toRawBytes(!0).slice(1) } assertValidity() { const t = "Point is not on elliptic curve", {x: n, y: e} = this; if (!Vt(n) || !Vt(e)) throw new Error(t); const r = Tt(e * e); if (Tt(r - ht(n)) !== J) throw new Error(t) } equals(t) { return this.x === t.x && this.y === t.y } negate() { return new mt(this.x, Tt(-this.y)) } double() { return yt.fromAffine(this).double().toAffine() } add(t) { return yt.fromAffine(this).add(yt.fromAffine(t)).toAffine() } subtract(t) { return this.add(t.negate()) } multiply(t) { return yt.fromAffine(this).multiply(t, this).toAffine() } multiplyAndAddUnsafe(t, n, e) { const r = yt.fromAffine(this), i = n === J || n === Q || this !== mt.BASE ? r.multiplyUnsafe(n) : r.multiply(n), o = yt.fromAffine(t).multiplyUnsafe(e), s = i.add(o); return s.equals(yt.ZERO) ? void 0 : s.toAffine() } }; function bt(t) { return Number.parseInt(t[0], 16) >= 8 ? "00" + t : t } function At(t) { if (t.length < 2 || 2 !== t[0]) throw new Error(`Invalid signature integer tag: ${St(t)}`); const n = t[1], e = t.subarray(2, n + 2); if (!n || e.length !== n) throw new Error("Invalid signature integer: wrong length"); if (0 === e[0] && e[1] <= 127) throw new Error("Invalid signature integer: trailing length"); return {data: Ht(e), left: t.subarray(n + 2)} } class xt { constructor(t, n) { this.r = t, this.s = n, this.assertValidity() } static fromCompact(t) { const n = t instanceof Uint8Array, e = "Signature.fromCompact"; if ("string" != typeof t && !n) throw new TypeError(`${e}: Expected string or Uint8Array`); const r = n ? St(t) : t; if (128 !== r.length) throw new Error(`${e}: Expected 64-byte hex`); return new xt(Bt(r.slice(0, 64)), Bt(r.slice(64, 128))) } static fromDER(t) { const n = t instanceof Uint8Array; if ("string" != typeof t && !n) throw new TypeError("Signature.fromDER: Expected string or Uint8Array"); const {r: e, s: r} = function (t) { if (t.length < 2 || 48 != t[0]) throw new Error(`Invalid signature tag: ${St(t)}`); if (t[1] !== t.length - 2) throw new Error("Invalid signature: incorrect length"); const {data: n, left: e} = At(t.subarray(2)), {data: r, left: i} = At(e); if (i.length) throw new Error(`Invalid signature: left bytes after parsing: ${St(i)}`); return {r: n, s: r} }(n ? t : It(t)); return new xt(e, r) } static fromHex(t) { return this.fromDER(t) } assertValidity() { const {r: t, s: n} = this; if (!$t(t)) throw new Error("Invalid Signature: r must be 0 < r < n"); if (!$t(n)) throw new Error("Invalid Signature: s must be 0 < s < n") } hasHighS() { const t = rt.n >> Q; return this.s > t } normalizeS() { return this.hasHighS() ? new xt(this.r, Tt(-this.s, rt.n)) : this } toDERRawBytes() { return It(this.toDERHex()) } toDERHex() { const t = bt(_t(this.s)), n = bt(_t(this.r)), e = t.length / 2, r = n.length / 2, i = _t(e), o = _t(r); return `30${_t(r + e + 4)}02${o}${n}02${i}${t}` } toRawBytes() { return this.toDERRawBytes() } toHex() { return this.toDERHex() } toCompactRawBytes() { return It(this.toCompactHex()) } toCompactHex() { return Ot(this.r) + Ot(this.s) } } function Et(...t) { if (!t.every((t => t instanceof Uint8Array))) throw new Error("Uint8Array list expected"); if (1 === t.length) return t[0]; const n = t.reduce(((t, n) => t + n.length), 0), e = new Uint8Array(n); for (let n = 0, r = 0; n < t.length; n++) { const i = t[n]; e.set(i, r), r += i.length } return e } const vt = Array.from({length: 256}, ((t, n) => n.toString(16).padStart(2, "0"))); function St(t) { if (!(t instanceof Uint8Array)) throw new Error("Expected Uint8Array"); let n = ""; for (let e = 0; e < t.length; e++) n += vt[t[e]]; return n } const Pt = BigInt("0x10000000000000000000000000000000000000000000000000000000000000000"); function Ot(t) { if ("bigint" != typeof t) throw new Error("Expected bigint"); if (!(J <= t && t < Pt)) throw new Error("Expected number 0 <= n < 2^256"); return t.toString(16).padStart(64, "0") } function Ut(t) { const n = It(Ot(t)); if (32 !== n.length) throw new Error("Error: expected 32 bytes"); return n } function _t(t) { const n = t.toString(16); return 1 & n.length ? `0${n}` : n } function Bt(t) { if ("string" != typeof t) throw new TypeError("hexToNumber: expected string, got " + typeof t); return BigInt(`0x${t}`) } function It(t) { if ("string" != typeof t) throw new TypeError("hexToBytes: expected string, got " + typeof t); if (t.length % 2) throw new Error("hexToBytes: received invalid unpadded hex" + t.length); const n = new Uint8Array(t.length / 2); for (let e = 0; e < n.length; e++) { const r = 2 * e, i = t.slice(r, r + 2), o = Number.parseInt(i, 16); if (Number.isNaN(o) || o < 0) throw new Error("Invalid byte sequence"); n[e] = o } return n } function Ht(t) { return Bt(St(t)) } function zt(t) { return t instanceof Uint8Array ? Uint8Array.from(t) : It(t) } function Nt(t) { if ("number" == typeof t && Number.isSafeInteger(t) && t > 0) return BigInt(t); if ("bigint" == typeof t && $t(t)) return t; throw new TypeError("Expected valid private scalar: 0 < scalar < curve.n") } function Tt(t, n = rt.P) { const e = t % n; return e >= J ? e : n + e } function Rt(t, n) { const {P: e} = rt; let r = t; for (; n-- > J;) r *= r, r %= e; return r } function kt(t, n = rt.P) { if (t === J || n <= J) throw new Error(`invert: expected positive integers, got n=${t} mod=${n}`); let e = Tt(t, n), r = n, i = J, o = Q; for (; e !== J;) { const t = r % e, n = i - o * (r / e); r = e, e = t, i = o, o = n } if (r !== Q) throw new Error("invert: does not exist"); return Tt(i, n) } function Ct(t, n = !1) { const e = function (t) { const n = 8 * t.length - 8 * at, e = Ht(t); return n > 0 ? e >> BigInt(n) : e }(t); if (n) return e; const {n: r} = rt; return e >= r ? e - r : e } let Dt, Kt; class jt { constructor(t, n) { if (this.hashLen = t, this.qByteLen = n, "number" != typeof t || t < 2) throw new Error("hashLen must be a number"); if ("number" != typeof n || n < 2) throw new Error("qByteLen must be a number"); this.v = new Uint8Array(t).fill(1), this.k = new Uint8Array(t).fill(0), this.counter = 0 } hmac(...t) { return ln.hmacSha256(this.k, ...t) } hmacSync(...t) { return Kt(this.k, ...t) } checkSync() { if ("function" != typeof Kt) throw new dt("hmacSha256Sync needs to be set") } incr() { if (this.counter >= 1e3) throw new Error("Tried 1,000 k values for sign(), all were invalid"); this.counter += 1 } async reseed(t = new Uint8Array) { this.k = await this.hmac(this.v, Uint8Array.from([0]), t), this.v = await this.hmac(this.v), 0 !== t.length && (this.k = await this.hmac(this.v, Uint8Array.from([1]), t), this.v = await this.hmac(this.v)) } reseedSync(t = new Uint8Array) { this.checkSync(), this.k = this.hmacSync(this.v, Uint8Array.from([0]), t), this.v = this.hmacSync(this.v), 0 !== t.length && (this.k = this.hmacSync(this.v, Uint8Array.from([1]), t), this.v = this.hmacSync(this.v)) } async generate() { this.incr(); let t = 0; const n = []; for (; t < this.qByteLen;) { this.v = await this.hmac(this.v); const e = this.v.slice(); n.push(e), t += this.v.length } return Et(...n) } generateSync() { this.checkSync(), this.incr(); let t = 0; const n = []; for (; t < this.qByteLen;) { this.v = this.hmacSync(this.v); const e = this.v.slice(); n.push(e), t += this.v.length } return Et(...n) } } function $t(t) { return J < t && t < rt.n } function Vt(t) { return J < t && t < rt.P } function Lt(t, n, e, r = !0) { const {n: i} = rt, o = Ct(t, !0); if (!$t(o)) return; const s = kt(o, i), a = mt.BASE.multiply(o), c = Tt(a.x, i); if (c === J) return; const u = Tt(s * Tt(n + e * c, i), i); if (u === J) return; let f = new xt(c, u), h = (a.x === f.r ? 0 : 2) | Number(a.y & Q); return r && f.hasHighS() && (f = f.normalizeS(), h ^= 1), {sig: f, recovery: h} } function qt(t) { let n; if ("bigint" == typeof t) n = t; else if ("number" == typeof t && Number.isSafeInteger(t) && t > 0) n = BigInt(t); else if ("string" == typeof t) { if (t.length !== 2 * at) throw new Error("Expected 32 bytes of private key"); n = Bt(t) } else { if (!(t instanceof Uint8Array)) throw new TypeError("Expected valid private key"); if (t.length !== at) throw new Error("Expected 32 bytes of private key"); n = Ht(t) } if (!$t(n)) throw new Error("Expected private key: 0 < key < n"); return n } function Ft(t) { return t instanceof mt ? (t.assertValidity(), t) : mt.fromHex(t) } function Mt(t) { if (t instanceof xt) return t.assertValidity(), t; try { return xt.fromDER(t) } catch (n) { return xt.fromCompact(t) } } function Yt(t) { const n = t instanceof Uint8Array, e = "string" == typeof t, r = (n || e) && t.length; return n ? r === ut || r === ft : e ? r === 2 * ut || r === 2 * ft : t instanceof mt } function Zt(t, n, e = !1) { if (Yt(t)) throw new TypeError("getSharedSecret: first arg must be private key"); if (!Yt(n)) throw new TypeError("getSharedSecret: second arg must be public key"); const r = Ft(n); return r.assertValidity(), r.multiply(qt(t)).toRawBytes(e) } function Wt(t) { return Ht(t.length > st ? t.slice(0, st) : t) } function Gt(t) { const n = Wt(t), e = Tt(n, rt.n); return Xt(e < J ? n : e) } function Xt(t) { return Ut(t) } function Jt(t, n, e) { if (null == t) throw new Error(`sign: expected valid message hash, not "${t}"`); const r = zt(t), i = qt(n), o = [Xt(i), Gt(r)]; if (null != e) { !0 === e && (e = ln.randomBytes(st)); const t = zt(e); if (t.length !== st) throw new Error(`sign: Expected ${st} bytes of extra data`); o.push(t) } return {seed: Et(...o), m: Wt(r), d: i} } function Qt(t, n) { const {sig: e, recovery: r} = t, {der: i, recovered: o} = Object.assign({canonical: !0, der: !0}, n), s = i ? e.toDERRawBytes() : e.toCompactRawBytes(); return o ? [s, r] : s } const tn = {strict: !0}; function nn(t) { return Tt(Ht(t), rt.n) } class en { constructor(t, n) { this.r = t, this.s = n, this.assertValidity() } static fromHex(t) { const n = zt(t); if (64 !== n.length) throw new TypeError(`SchnorrSignature.fromHex: expected 64 bytes, not ${n.length}`); const e = Ht(n.subarray(0, 32)), r = Ht(n.subarray(32, 64)); return new en(e, r) } assertValidity() { const {r: t, s: n} = this; if (!Vt(t) || !$t(n)) throw new Error("Invalid signature") } toHex() { return Ot(this.r) + Ot(this.s) } toRawBytes() { return It(this.toHex()) } } class rn { constructor(t, n, e = ln.randomBytes()) { if (null == t) throw new TypeError(`sign: Expected valid message, not "${t}"`); this.m = zt(t); const {x: r, scalar: i} = this.getScalar(qt(n)); if (this.px = r, this.d = i, this.rand = zt(e), 32 !== this.rand.length) throw new TypeError("sign: Expected 32 bytes of aux randomness") } getScalar(t) { const n = mt.fromPrivateKey(t), e = n.hasEvenY() ? t : rt.n - t; return {point: n, scalar: e, x: n.toRawX()} } initNonce(t, n) { return Ut(t ^ Ht(n)) } finalizeNonce(t) { const n = Tt(Ht(t), rt.n); if (n === J) throw new Error("sign: Creation of signature failed. k is zero"); const {point: e, x: r, scalar: i} = this.getScalar(n); return {R: e, rx: r, k: i} } finalizeSig(t, n, e, r) { return new en(t.x, Tt(n + e * r, rt.n)).toRawBytes() } error() { throw new Error("sign: Invalid signature produced") } async calc() { const {m: t, d: n, px: e, rand: r} = this, i = ln.taggedHash, o = this.initNonce(n, await i(fn.aux, r)), { R: s, rx: a, k: c } = this.finalizeNonce(await i(fn.nonce, o, e, t)), u = nn(await i(fn.challenge, a, e, t)), f = this.finalizeSig(s, c, u, n); return await an(f, t, e) || this.error(), f } calcSync() { const {m: t, d: n, px: e, rand: r} = this, i = ln.taggedHashSync, o = this.initNonce(n, i(fn.aux, r)), {R: s, rx: a, k: c} = this.finalizeNonce(i(fn.nonce, o, e, t)), u = nn(i(fn.challenge, a, e, t)), f = this.finalizeSig(s, c, u, n); return cn(f, t, e) || this.error(), f } } function on(t, n, e) { const r = t instanceof en, i = r ? t : en.fromHex(t); return r && i.assertValidity(), {...i, m: zt(n), P: Ft(e)} } function sn(t, n, e, r) { const i = mt.BASE.multiplyAndAddUnsafe(n, qt(e), Tt(-r, rt.n)); return !(!i || !i.hasEvenY() || i.x !== t) } async function an(t, n, e) { try { const {r: r, s: i, m: o, P: s} = on(t, n, e), a = nn(await ln.taggedHash(fn.challenge, Ut(r), s.toRawX(), o)); return sn(r, s, i, a) } catch (t) { return !1 } } function cn(t, n, e) { try { const {r: r, s: i, m: o, P: s} = on(t, n, e), a = nn(ln.taggedHashSync(fn.challenge, Ut(r), s.toRawX(), o)); return sn(r, s, i, a) } catch (t) { if (t instanceof dt) throw t; return !1 } } const un = { Signature: en, getPublicKey: function (t) { return mt.fromPrivateKey(t).toRawX() }, sign: async function (t, n, e) { return new rn(t, n, e).calc() }, verify: an, signSync: function (t, n, e) { return new rn(t, n, e).calcSync() }, verifySync: cn }; mt.BASE._setWindowSize(8); const fn = {challenge: "BIP0340/challenge", aux: "BIP0340/aux", nonce: "BIP0340/nonce"}, hn = {}, ln = { bytesToHex: St, hexToBytes: It, concatBytes: Et, mod: Tt, invert: kt, isValidPrivateKey(t) { try { return qt(t), !0 } catch (t) { return !1 } }, _bigintTo32Bytes: Ut, _normalizePrivateKey: qt, hashToPrivateKey: t => { t = zt(t); const n = at + 8; if (t.length < n || t.length > 1024) throw new Error("Expected valid bytes of private key as per FIPS 186"); return Ut(Tt(Ht(t), rt.n - Q) + Q) }, randomBytes: (t = 32) => X.getRandomValues(new Uint8Array(t)), randomPrivateKey: () => ln.hashToPrivateKey(ln.randomBytes(at + 8)), precompute(t = 8, n = mt.BASE) { const e = n === mt.BASE ? n : new mt(n.x, n.y); return e._setWindowSize(t), e.multiply(nt), e }, sha256: async (...t) => { const n = await X.subtle.digest("SHA-256", Et(...t)); return new Uint8Array(n) }, hmacSha256: async (t, ...n) => { const e = await X.subtle.importKey("raw", t, {name: "HMAC", hash: {name: "SHA-256"}}, !1, ["sign"]), r = Et(...n), i = await X.subtle.sign("HMAC", e, r); return new Uint8Array(i) }, sha256Sync: void 0, hmacSha256Sync: void 0, taggedHash: async (t, ...n) => { let e = hn[t]; if (void 0 === e) { const n = await ln.sha256(Uint8Array.from(t, (t => t.charCodeAt(0)))); e = Et(n, n), hn[t] = e } return ln.sha256(e, ...n) }, taggedHashSync: (t, ...n) => { if ("function" != typeof Dt) throw new dt("sha256Sync is undefined, you need to set it"); let e = hn[t]; if (void 0 === e) { const n = Dt(Uint8Array.from(t, (t => t.charCodeAt(0)))); e = Et(n, n), hn[t] = e } return Dt(e, ...n) }, _JacobianPoint: yt }; Object.defineProperties(ln, { sha256Sync: { configurable: !1, get: () => Dt, set(t) { Dt || (Dt = t) } }, hmacSha256Sync: { configurable: !1, get: () => Kt, set(t) { Kt || (Kt = t) } } }); var dn = Object.freeze({ __proto__: null, CURVE: rt, Point: mt, Signature: xt, getPublicKey: function (t, n = !1) { return mt.fromPrivateKey(t).toRawBytes(n) }, getSharedSecret: Zt, recoverPublicKey: function (t, n, e, r = !1) { return mt.fromSignature(t, n, e).toRawBytes(r) }, schnorr: un, sign: async function (t, n, e = {}) { const {seed: r, m: i, d: o} = Jt(t, n, e.extraEntropy), s = new jt(ct, at); let a; for (await s.reseed(r); !(a = Lt(await s.generate(), i, o, e.canonical));) await s.reseed(); return Qt(a, e) }, signSync: function (t, n, e = {}) { const {seed: r, m: i, d: o} = Jt(t, n, e.extraEntropy), s = new jt(ct, at); let a; for (s.reseedSync(r); !(a = Lt(s.generateSync(), i, o, e.canonical));) s.reseedSync(); return Qt(a, e) }, utils: ln, verify: function (t, n, e, r = tn) { let i; try { i = Mt(t), n = zt(n) } catch (t) { return !1 } const {r: o, s: s} = i; if (r.strict && i.hasHighS()) return !1; const a = Ct(n); let c; try { c = Ft(e) } catch (t) { return !1 } const {n: u} = rt, f = kt(s, u), h = Tt(a * f, u), l = Tt(o * f, u), d = mt.BASE.multiplyAndAddUnsafe(c, h, l); return !!d && Tt(d.x, u) === o } }); const wn = new TextEncoder, yn = [{name: "base58", charset: "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}, { name: "base64", charset: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" }, {name: "base64url", charset: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"}]; function gn(t) { for (const n of yn) if (n.name === t) return n.charset; throw TypeError("Charset does not exist: " + t) } const pn = { encode: function (t, n, e = !1) { "string" == typeof t && (t = wn.encode(t)); const r = gn(n), i = r.length, o = []; let s, a, c, u = "", f = 0; for (s = 0; s < t.length; s++) for (f = 0, a = t[s], u += a > 0 || (u.length ^ s) > 0 ? "" : "1"; f in o || a > 0;) c = o[f], c = c > 0 ? 256 * c + a : a, a = c / i | 0, o[f] = c % i, f++; for (; f-- > 0;) u += r[o[f]]; return e && u.length % 4 > 0 ? u + "=".repeat(4 - u.length % 4) : u }, decode: function (t, n) { const e = gn(n), r = e.length, i = [], o = []; t = t.replace("=", ""); let s, a, c, u = 0; for (s = 0; s < t.length; s++) { if (u = 0, a = e.indexOf(t[s]), a < 0) throw new Error(`Character range out of bounds: ${a}`); for (a > 0 || (o.length ^ s) > 0 || o.push(0); u in i || a > 0;) c = i[u], c = c > 0 ? c * r + a : a, a = c >> 8, i[u] = c % 256, u++ } for (; u-- > 0;) o.push(i[u]); return new Uint8Array(o) } }, mn = "qpzry9x8gf2tvdw0s3jn54khce6mua7l", bn = [996825010, 642813549, 513874426, 1027748829, 705979059], An = {BECH32: "bech32", BECH32M: "bech32m"}; function xn(t) { switch (t) { case An.BECH32: return 1; case An.BECH32M: return 734539939; default: throw new Error(`Unrecognized encoding: ${t}`) } } function En(t) { let n = 1; for (let e = 0; e < t.length; ++e) { const r = n >> 25; n = (33554431 & n) << 5 ^ t[e]; for (let t = 0; t < 5; ++t) (r >> t & 1) > 0 && (n ^= bn[t]) } return n } function vn(t) { const n = []; let e; for (e = 0; e < t.length; ++e) n.push(t.charCodeAt(e) >> 5); for (n.push(0), e = 0; e < t.length; ++e) n.push(31 & t.charCodeAt(e)); return n } function Sn(t, n, e, r = !0) { const i = []; let o = 0, s = 0; const a = (1 << e) - 1, c = (1 << n + e - 1) - 1; for (const r of t) { if (r < 0 || r >> n > 0) return []; for (o = (o << n | r) & c, s += n; s >= e;) s -= e, i.push(o >> s & a) } if (r) s > 0 && i.push(o << e - s & a); else if (s >= n || (o << e - s & a) > 0) return []; return i } function Pn(t, n, e) { const r = n.concat(function (t, n, e) { const r = En(vn(t).concat(n).concat([0, 0, 0, 0, 0, 0])) ^ xn(e), i = []; for (let t = 0; t < 6; ++t) i.push(r >> 5 * (5 - t) & 31); return i }(t, n, e)); let i = t + "1"; for (let t = 0; t < r.length; ++t) i += mn.charAt(r[t]); return i } function On(t, n) { const e = n > 0 ? "bech32m" : "bech32"; if (!function (t) { let n, e, r = !1, i = !1; for (n = 0; n < t.length; ++n) { if (e = t.charCodeAt(n), e < 33 || e > 126) return !1; e >= 97 && e <= 122 && (r = !0), e >= 65 && e <= 90 && (i = !0) } return !(r && i) }(t)) return {hrp: null, data: [255]}; if (!function (t) { const n = t.lastIndexOf("1"); return !(n < 1 || n + 7 > t.length || t.length > 90) }(t = t.toLowerCase())) return {hrp: null, data: [255]}; const r = [], i = t.lastIndexOf("1"), o = t.substring(0, i); for (let n = i + 1; n < t.length; ++n) { const e = mn.indexOf(t.charAt(n)); if (-1 === e) return {hrp: null, data: [255]}; r.push(e) } return function (t, n, e) { return En(vn(t).concat(n)) === xn(e) }(o, r, e) ? {hrp: o, data: r.slice(0, r.length - 6)} : {hrp: null, data: [255]} } function Un(t, n = 0) { const e = t.split("1", 1)[0], {hrp: r, data: i} = On(t, n), o = Sn(i.slice(1), 5, 8, !1), s = o.length; switch (!0) { case e !== r: throw new Error("Returned hrp string is invalid."); case null === o || s < 2 || s > 40: throw new Error("Decoded string is invalid or out of spec."); case i[0] > 16: throw new Error("Returned version bit is out of range."); case 0 === i[0] && 20 !== s && 32 !== s: throw new Error("Decoded string does not match version 0 spec."); case 0 === i[0] && 0 !== n: case 0 !== i[0] && 1 !== n: throw new Error("Decoded version bit does not match."); default: return Uint8Array.from(o) } } const _n = { encode: function (t, n = "bch", e = 0) { const r = Pn(n, [e, ...Sn([...t], 8, 5)], e > 0 ? "bech32m" : "bech32"); return Un(r, e), r }, decode: Un }, Bn = new TextEncoder, In = new TextDecoder; function Hn(t) { return Bn.encode(t) } function zn(t) { const n = []; let e, r = 0; if (t.length % 2 > 0) throw new Error(`Invalid hex string length: ${t.length}`); for (e = 0; e < t.length; e += 2) n[r] = parseInt(t.slice(e, e + 2), 16), r += 1; return Uint8Array.from(n) } function Nn(t) { const n = []; for (; t > 0;) { const e = 255 & t; n.push(e), t = (t - e) / 256 } return Uint8Array.from(n) } function Tn(t) { const n = []; for (; t > 0n;) { const e = 0xffn & t; n.push(Number(e)), t = (t - e) / 256n } return Uint8Array.from(n) } function Rn(t) { return In.decode(t) } function kn(t) { let n, e = 0; for (n = t.length - 1; n >= 0; n--) e = 256 * e + t[n]; return Number(e) } function Cn(t) { let n, e = 0n; for (n = t.length - 1; n >= 0; n--) e = 256n * e + BigInt(t[n]); return BigInt(e) } async function Dn(t) { return crypto.subtle.digest("SHA-256", t).then((t => new Uint8Array(t))) } async function Kn(t) { return Dn(await Dn(t)) } const {crypto: jn} = globalThis; class $n extends Uint8Array { static { this.num = (t, n, e = "le") => new $n(Nn(t), n, e) } static { this.big = (t, n, e = "le") => new $n(Tn(t), n, e) } static async b58check(t) { const n = pn.decode(t, "base58"); return new $n(await async function (t) { const n = t.slice(0, -4), e = t.slice(-4); if ((await Kn(n)).slice(0, 4).toString() !== e.toString()) throw new Error("Invalid checksum!"); return n }(n)) } static { this.buff = (t, n) => new $n(function (t) { if (t instanceof ArrayBuffer) return new Uint8Array(t); if (t instanceof Uint8Array) return t; const n = typeof t; switch (n) { case"bigint": return Tn(t); case"boolean": return Uint8Array.of(t); case"number": return Nn(t); case"string": return null !== t.match(/^(02|03)*[0-9a-fA-F]{64}$/) ? zn(t) : Bn.encode(t); default: throw TypeError("Unsupported format:" + n) } }(t), n) } static { this.raw = (t, n) => new $n(t, n) } static { this.str = (t, n) => new $n(Hn(t), n) } static { this.hex = (t, n) => new $n(zn(t), n) } static { this.json = t => new $n(Hn(JSON.stringify(t))) } static { this.base64 = t => new $n(pn.decode(t, "base64")) } static { this.b64url = t => new $n(pn.decode(t, "base64url")) } static { this.bech32 = (t, n) => new $n(_n.decode(t, n)) } constructor(t, n = null, e = "be") { if (null !== n) { const e = new Uint8Array(n).fill(0); e.set(new Uint8Array(t)), t = e.buffer } return super(t = "le" === e ? new Uint8Array(t).reverse() : t), this } get num() { return this.toNum() } get big() { return this.toBig() } get arr() { return this.toArr() } get str() { return this.toStr() } get hex() { return this.toHex() } get raw() { return new Uint8Array(this) } get hash() { return this.toHash() } get id() { return this.toHash().then((t => new $n(t).hex)) } toNum(t = "le") { return kn("le" === t ? this.reverse() : this) } toBig(t = "le") { return Cn("le" === t ? this.reverse() : this) } async toHash() { return jn.subtle.digest("SHA-256", this.raw).then((t => new Uint8Array(t))) } async tob58check() { return pn.encode(await async function (t) { const n = await Kn(t); return Uint8Array.of(...t, ...n.slice(0, 4)) }(this), "base58") } toArr() { return Array.from(this) } toStr() { return Rn(this) } toHex() { return function (t) { const n = []; let e; for (e = 0; e < t.length; e++) n.push(t[e].toString(16).padStart(2, "0")); return n.join("") }(this) } toJson() { return JSON.parse(Rn(this)) } toBytes() { return new Uint8Array(this) } toB64url() { return pn.encode(this, "base64url") } toBase64(t) { return pn.encode(this, "base64", t) } toBech32(t, n) { return _n.encode(this, t, n) } prepend(t) { return $n.of(...t, ...this) } append(t) { return $n.of(...this, ...t) } slice(t, n) { return new $n(new Uint8Array(this).slice(t, n)) } reverse() { return new $n(new Uint8Array(this).reverse()) } write(t, n) { this.set(t, n) } prependVarint(t = this.length) { return $n.of(...$n.readVarint(t), ...this) } static from(t) { return new $n(Uint8Array.from(t)) } static of(...t) { return new $n(Uint8Array.of(...t)) } static join(t) { let n, e = 0; const r = t.reduce(((t, n) => t + n.length), 0), i = new Uint8Array(r); for (const r of t) for (n = 0; n < r.length; e++, n++) i[e] = r[n]; return new $n(i, r) } static readVarint(t) { if (t < 253) return $n.num(t, 1); if (t < 65536) return $n.of(253, ...$n.num(t, 2)); if (t < 4294967296) return $n.of(254, ...$n.num(t, 4)); if (t < 0x10000000000000000) return $n.of(255, ...$n.num(t, 8)); throw new Error(`Value is too large: ${t}`) } static random(t = 32) { return new $n(jn.getRandomValues(new Uint8Array(t))) } static { this.encode = Hn } static { this.decode = Rn } static normalize(t, n) { if (t instanceof Uint8Array) return t; if ("string" == typeof t) return $n.hex(t, n).toBytes(); if ("number" == typeof t) return $n.num(t, n).toBytes(); if ("bigint" == typeof t) return $n.big(t, n).toBytes(); throw TypeError("Unrecognized format: " + typeof t) } static serialize(t) { if ("string" == typeof t) return $n.str(t).toBytes(); if ("object" == typeof t) { if (t instanceof Uint8Array) return t; try { return $n.json(t).toBytes() } catch { throw TypeError("Object is not serializable.") } } throw TypeError("Unrecognized format: " + typeof t) } static revitalize(t) { if (t instanceof Uint8Array && (t = Rn(t)), "string" == typeof t) try { return JSON.parse(t) } catch { return t } return t } } const Vn = globalThis.crypto; async function Ln(t, n) { return Zt($n.normalize(t), $n.normalize(n), !0) } async function qn(t) { return Vn.subtle.importKey("raw", $n.normalize(t), {name: "AES-CBC"}, !0, ["encrypt", "decrypt"]) } const Fn = { ecdh: Ln, import: qn, export: async function (t) { return Vn.subtle.exportKey("raw", t).then((t => new Uint8Array(t))) }, hmac: async function (t, n = "SHA-256") { const e = {name: "HMAC", hash: n}; return Vn.subtle.importKey("raw", $n.normalize(t), e, !1, ["sign", "verify"]) }, shared: async function (t, n) { return qn((await Ln(t, n)).slice(1, 33)) }, generate: async function () { return qn($n.random(32)) }, normalize: async function (t) { return t instanceof CryptoKey ? t : Fn.import(t) } }; class Mn extends Uint8Array { static { this.N = rt.n } static mod(t, n = Mn.N) { return ln.mod(t, n) } static { this.isField = t => t instanceof Mn } static normalize(t) { return t = Zn(t), t = Mn.mod(t), t = ln._normalizePrivateKey(t), $n.big(t, 32).raw } static validate(t) { return ln.isValidPrivateKey(t) } constructor(t) { super(t = Mn.normalize(t)) } get buff() { return new $n(this) } get raw() { return this } get num() { return this.buff.toBig() } get point() { return Yn.fromNum(this.num) } get hasOddY() { return this.point.hasOddY } get negated() { return this.hasOddY ? this.negate() : this } gt(t) { return new Mn(t).num > this.num } lt(t) { return new Mn(t).num < this.num } eq(t) { return new Mn(t).num === this.num } ne(t) { return new Mn(t).num !== this.num } add(t) { const n = new Mn(t); return new Mn(this.num + n.num) } sub(t) { const n = new Mn(t); return new Mn(this.num - n.num) } mul(t) { const n = new Mn(t); return new Mn(this.num * n.num) } pow(t, n = Mn.N - 1n) { const e = new Mn(t), r = Mn.mod(e.num, n); return new Mn(this.num ** r) } div(t) { const n = new Mn(t), e = this.pow(n.num, Mn.N - 2n); return new Mn(this.num * e.num) } negate() { return new Mn(Mn.N - this.num) } } class Yn { static { this.N = rt.n } static validate(t) { try { t = Zn(t); const n = $n.big(t).toHex(); return mt.fromHex(n).assertValidity(), !0 } catch { return !1 } } static fromNum(t) { t = Zn(t); const n = ln.mod(t, Yn.N), e = mt.BASE.multiply(n); return new Yn(e.x, e.y) } static fromX(t) { t = Zn(t); const n = $n.big(t).toHex(); return Yn.from(mt.fromHex(n)) } static from(t) { return new Yn(t.x, t.y) } constructor(t, n) { this.__p = new mt(t, n), this.__x = this.__p.x, this.__y = this.__p.y, this.__p.assertValidity() } get p() { return this.__p } get buff() { return new $n(this.rawX.slice(1)) } get hex() { return this.buff.hex } get hasOddY() { return !this.__p.hasEvenY() } get rawX() { const t = this.__p.hasEvenY() ? 2 : 3, n = $n.big(this.__x); return Uint8Array.of(t, ...n) } get rawY() { return $n.big(this.__y) } get x() { return this.__x } get y() { return this.__y } eq(t) { return t instanceof Yn ? this.p.equals(new mt(t.x, t.y)) : t instanceof Uint8Array ? this.x.toString() === t.toString() : "number" == typeof t ? BigInt(t) === this.x : t === this.x } add(t) { return t instanceof Yn ? Yn.from(this.p.add(t.p)) : Yn.from(this.p.add(Yn.fromNum(t).p)) } sub(t) { return t instanceof Yn ? Yn.from(this.p.subtract(t.p)) : Yn.from(this.p.subtract(Yn.fromNum(t).p)) } mul(t) { return t instanceof Yn ? Yn.from(this.p.multiply(t.x)) : Yn.from(this.p.multiply(Zn(t))) } negate() { return Yn.from(this.__p.negate()) } } function Zn(t) { if (t instanceof Uint8Array) return $n.raw(t).big; if ("string" == typeof t) return $n.hex(t).big; if ("number" == typeof t) return BigInt(t); if ("bigint" == typeof t) return t; throw TypeError("Invalid input type:" + typeof t) } function Wn(t) { let n = 0n; for (let e = t.length - 1; e >= 0; e--) n = 256n * n + BigInt(t[e]); return BigInt(n) } function Gn(t, n = 0) { const e = []; for (; t > 0;) { const n = 0xffn & t; e.push(n), t = (t - n) / 256n } let r = Uint8Array.from(e.map((t => Number(t)))); if (0 !== n) { const t = new Uint8Array(n); t.set(r), r = t } return r } const Xn = [0n, 1n, 2n, 3n, 4n, 5n, 6n, 7n, 8n, 9n, 10n, 11n, 12n, 13n, 14n, 15n, 7n, 4n, 13n, 1n, 10n, 6n, 15n, 3n, 12n, 0n, 9n, 5n, 2n, 14n, 11n, 8n, 3n, 10n, 14n, 4n, 9n, 15n, 8n, 1n, 2n, 7n, 0n, 6n, 13n, 11n, 5n, 12n, 1n, 9n, 11n, 10n, 0n, 8n, 12n, 4n, 13n, 3n, 7n, 15n, 14n, 5n, 6n, 2n, 4n, 0n, 5n, 9n, 7n, 12n, 2n, 10n, 14n, 1n, 3n, 8n, 11n, 6n, 15n, 13n], Jn = [5n, 14n, 7n, 0n, 9n, 2n, 11n, 4n, 13n, 6n, 15n, 8n, 1n, 10n, 3n, 12n, 6n, 11n, 3n, 7n, 0n, 13n, 5n, 10n, 14n, 15n, 8n, 12n, 4n, 9n, 1n, 2n, 15n, 5n, 1n, 3n, 7n, 14n, 6n, 9n, 11n, 8n, 12n, 2n, 10n, 0n, 4n, 13n, 8n, 6n, 4n, 1n, 3n, 11n, 15n, 0n, 5n, 12n, 2n, 13n, 9n, 7n, 10n, 14n, 12n, 15n, 10n, 4n, 1n, 5n, 8n, 7n, 6n, 2n, 13n, 14n, 0n, 3n, 9n, 11n], Qn = [11n, 14n, 15n, 12n, 5n, 8n, 7n, 9n, 11n, 13n, 14n, 15n, 6n, 7n, 9n, 8n, 7n, 6n, 8n, 13n, 11n, 9n, 7n, 15n, 7n, 12n, 15n, 9n, 11n, 7n, 13n, 12n, 11n, 13n, 6n, 7n, 14n, 9n, 13n, 15n, 14n, 8n, 13n, 6n, 5n, 12n, 7n, 5n, 11n, 12n, 14n, 15n, 14n, 15n, 9n, 8n, 9n, 14n, 5n, 6n, 8n, 6n, 5n, 12n, 9n, 15n, 5n, 11n, 6n, 8n, 13n, 12n, 5n, 12n, 13n, 14n, 11n, 8n, 5n, 6n], te = [8n, 9n, 9n, 11n, 13n, 15n, 15n, 5n, 7n, 7n, 8n, 11n, 14n, 14n, 12n, 6n, 9n, 13n, 15n, 7n, 12n, 8n, 9n, 11n, 7n, 7n, 12n, 7n, 6n, 15n, 13n, 11n, 9n, 7n, 15n, 11n, 8n, 6n, 6n, 14n, 12n, 13n, 5n, 14n, 13n, 13n, 7n, 5n, 15n, 5n, 8n, 11n, 14n, 14n, 6n, 14n, 6n, 9n, 12n, 9n, 12n, 5n, 15n, 8n, 8n, 5n, 12n, 9n, 12n, 5n, 14n, 6n, 8n, 13n, 6n, 5n, 15n, 13n, 11n, 11n], ne = [0n, 0x5a827999n, 0x6ed9eba1n, 0x8f1bbcdcn, 0xa953fd4en], ee = [0x50a28be6n, 0x5c4dd124n, 0x6d703ef3n, 0x7a6d76e9n, 0n]; function re(t, n, e, r) { switch (!0) { case 0n === r: return t ^ n ^ e; case 1n === r: return t & n | ~t & e; case 2n === r: return (t | ~n) ^ e; case 3n === r: return t & e | n & ~e; case 4n === r: return t ^ (n | ~e); default: throw new TypeError("Unknown I value: " + String(r)) } } function ie(t, n) { return 0xffffffffn & (t << n | (0xffffffffn & t) >> 32n - n) } function oe(t, n, e, r, i, o) { const s = []; let a, c, u, f, h, l, d, w = t, y = n, g = e, p = r, m = i, b = t, A = n, x = e, E = r, v = i; for (let t = 0; t < 16; t++) { const n = Wn(o.slice(4 * t, 4 * (t + 1))); s.push(n) } for (let t = 0; t < 80; t++) a = BigInt(t) >> 4n, f = s[Number(Xn[t])], h = ne[Number(a)], l = s[Number(Jn[t])], d = ee[Number(a)], w = ie(w + re(y, g, p, a) + f + h, Qn[t]) + m, c = m, m = p, p = ie(g, 10n), g = y, y = w, w = c, b = ie(b + re(A, x, E, 4n - a) + l + d, te[t]) + v, u = v, v = E, E = ie(x, 10n), x = A, A = b, b = u; return [n + g + E, e + p + v, r + m + b, i + w + A, t + y + x] } const se = globalThis.crypto; async function ae(t, n = "SHA-256", e = 1, r = (t => t)) { let i, o = t instanceof ArrayBuffer ? t : $n.normalize(t).buffer; for (i = 0; i < e; i++) o = await se.subtle.digest(n, o), r(o); return new Uint8Array(o) } async function ce(t) { return ae(t, "SHA-256") } function ue(t) { return function (t) { let n = [0x67452301n, 0xefcdab89n, 0x98badcfen, 0x10325476n, 0xc3d2e1f0n]; for (let e = 0; e < t.length >> 6; e++) n = oe(...n, t.slice(64 * e, 64 * (e + 1))); const e = [128, ...new Array(119 - t.length & 63).fill(0)], r = Uint8Array.from([...t.slice(-64 & t.length), ...e, ...Gn(BigInt(8 * t.length), 8)]); for (let t = 0; t < r.length >> 6; t++) n = oe(...n, r.slice(64 * t, 64 * (t + 1))); const i = []; for (let t = 0; t < n.length; t++) { const e = 0xffffffffn & n[t]; i.push(...Gn(e, 4)) } return Uint8Array.from(i) }(t = $n.normalize(t)) } const fe = { data: async function (t) { return ce($n.serialize(t)).then((t => new Uint8Array(t))) }, digest: ae, ripe160: ue, sha256: ce, sha512: async function (t) { return ae(t, "SHA-512") }, hash160: async function (t) { return ue(await ce(t)) }, hash256: async function (t) { return ae(t, "SHA-256", 2) }, hmac256: async function (t, n) { const e = await Fn.hmac(t, "SHA-256"); return se.subtle.sign("HMAC", e, $n.normalize(n)).then((t => new Uint8Array(t))) }, hmac512: async function (t, n) { const e = await Fn.hmac(t, "SHA-512"); return se.subtle.sign("HMAC", e, $n.normalize(n)).then((t => new Uint8Array(t))) } }, he = [1, 2, 3, 129, 130, 131]; function le(t, n) { if (n) throw new Error(t); return !1 } const de = 192, we = new TextEncoder; function ye(t, n) { let e = new Mn(t); return e.point.hasOddY && (e = e.negate()), e.add(n) } function ge(t, n) { return Yn.fromX(t).add(n).rawX } async function pe(t, n = [], e = !1) { const r = _.normalize(t), i = n.length > 0 ? await me(n) : new Uint8Array, o = e ? dn.getPublicKey(r, !0).slice(1) : r, s = await Ee(o, i); if (e) return [_.raw(ye(r, s)).hex, 0]; { const t = _.raw(ge(r, s)); return [t.slice(1).hex, t.slice(0, 1).num] } } async function me(t) { return Se(t).then((t => _.hex(t[0]))) } async function be(t) { const n = await fe.sha256(we.encode(t)); return Uint8Array.of(...n, ...n) } // Rarity Garden Hack async function Ae(t, n = de) { let leafed = await be("TapLeaf"); const uint8 = new Uint8Array(leafed.length); for(let i = 0; i < leafed.length; i++) { uint8[i] = leafed[i]; } let tn = function (t = 192) { return 254 & t }(n); const uint8_tn = new Uint8Array(1); uint8_tn[0] = tn; let normed = _.normalize(t); const uint8_normed = new Uint8Array(normed.length); for(let i = 0; i < uint8_normed.length; i++) { uint8_normed[i] = normed[i]; } var uint8_new = new Uint8Array(uint8.length + uint8_normed.length + uint8_tn.length); uint8_new.set(uint8); uint8_new.set(uint8_tn, uint8.length); uint8_new.set(uint8_normed, uint8.length + uint8_tn.length); return fe.sha256(uint8_new).then((t => _.raw(t).hex)) } async function Ae2(t, n = de) { return fe.sha256(Uint8Array.of(...await be("TapLeaf"), function (t = 192) { return 254 & t }(n), ..._.normalize(t))).then((t => _.raw(t).hex)) } async function xe(t, n) { return n < t && ([t, n] = [n, t]), fe.sha256(Uint8Array.of(...await be("TapBranch"), ..._.hex(t).raw, ..._.hex(n).raw)).then((t => _.raw(t).hex)) } async function Ee(t, n) { return fe.sha256(Uint8Array.of(...await be("TapTweak"), ..._.normalize(t), ..._.normalize(n))) } async function ve(t, n, e) { const r = new B(_.normalize(n)), [i, o] = (s = r.read(1).num) % 2 == 0 ? [s, 2] : [s - 1, 3]; var s; const a = r.read(32), c = _.of(o, ..._.normalize(t)), u = []; let f = e; for (; r.size >= 32;) u.push(r.read(32).hex); if (0 !== r.size) throw new Error("Invalid control block size!"); for (const t of u) f = await xe(f, t); const h = ge(a, await Ee(a, _.hex(f))); return _.raw(h).hex === _.raw(c).hex } async function Se(t, n = null, e = []) { const r = [], i = []; for (let i = 0; i < t.length; i++) { const o = t[i]; if (Array.isArray(o)) { const [t, i, s] = await Se(o, n); r.push(t), n = i, e.push(...s) } else r.push(o) } if (1 === r.length) return [r[0], n, e]; r.sort(), r.length % 2 != 0 && r.push(r[r.length - 1]); for (let t = 0; t < r.length - 1; t += 2) { const o = await xe(r[t], r[t + 1]); i.push(o), "string" == typeof n && (n === r[t] ? (e.push(r[t + 1]), n = o) : n === r[t + 1] && (e.push(r[t]), n = o)) } return Se(i, n, e) } const Pe = [0, 1, 2, 3, 129, 130, 131]; async function Oe(t, n, e = {}) { ("string" == typeof t || t instanceof Uint8Array) && (t = L(t)); const { extention: r, sigflag: i = 0, extflag: o = 0, key_version: s = 0, separator_pos: a = 4294967295 } = e, {version: c, input: u = [], output: f = [], locktime: h} = t; if (n >= u.length) throw new Error("Index out of bounds: " + String(n)); if (!Pe.includes(i)) throw new Error("Invalid hash type: " + String(i)); if (o < 0 || o > 127) throw new Error("Extention flag out of range: " + String(o)); const {txid: l, vout: d, sequence: w, witness: y = []} = u[n], g = 128 == (128 & i), p = await async function (t) { if (void 0 === t) return; if (t.length < 2) return; let n = t.at(-1); "string" == typeof n && (n = _.hex(n)); if (n instanceof Uint8Array && 80 === n[0]) return _.raw(n).prefixSize("be").digest; return }(y), m = 2 * (o + (void 0 !== r ? 1 : 0)) + (void 0 !== p ? 1 : 0), b = [await be("TapSighash"), _.num(0, 1), _.num(i, 1), k(c), V(h)]; if (!g) { const t = u.map((t => Ue(t))); b.push(await async function (t) { const n = []; for (const {txid: e, vout: r} of t) n.push(C(e)), n.push(D(r)); return fe.sha256(_.join(n)) }(u), await async function (t) { const n = []; for (const {value: e} of t) n.push(j(e)); return fe.sha256(_.join(n)) }(t), await async function (t) { const n = []; for (const {scriptPubKey: e} of t) n.push(N(e)); return fe.sha256(_.join(n)) }(t), await async function (t) { const n = []; for (const {sequence: e} of t) n.push(K(e)); return fe.sha256(_.join(n)) }(u)) } if (((3 & i) < 2 || (3 & i) > 3) && b.push(await async function (t) { const n = []; for (const {value: e, scriptPubKey: r} of t) n.push(j(e)), n.push(N(r)); return fe.sha256(_.join(n)) }(f)), b.push(_.num(m, 1)), g) { const {value: t, scriptPubKey: e} = Ue(u[n]); b.push(C(l), D(d), j(t), N(e), K(w)) } else b.push(_.num(n, 4).reverse()); return void 0 !== p && b.push(p), 3 == (3 & i) && b.push(await async function (t) { return fe.sha256(_.of(...j(t.value), ...N(t.scriptPubKey))) }(f[n])), void 0 !== r && b.push(_.normalize(r), _.num(s), _.num(a, 4)), fe.sha256(_.join(b)) } function Ue(t) { if (void 0 === t.prevout) throw new Error("Prevout data missing for input: " + String(t.txid)); return t.prevout } const _e = { encode: N, decode: function (t) { return function (t, n = "asm") { const e = new B(t), r = [], i = e.size; let o, s, a, c = 0; for (; c < i;) switch (o = e.read(1).num, s = W(o), c++, s) { case"varint": r.push(e.read(o).toHex()), c += o; break; case"pushdata1": a = e.read(1).reverse().num, r.push(e.read(a).toHex()), c += a + 1; break; case"pushdata2": a = e.read(2).reverse().num, r.push(e.read(a).toHex()), c += a + 2; break; case"pushdata4": a = e.read(4).reverse().num, r.push(e.read(a).toHex()), c += a + 4; break; case"opcode": if (!G(o)) throw new Error(`Invalid OPCODE: ${o}`); "asm" === n ? r.push(H(o)) : r.push(o); break; default: throw new Error(`Word type undefined: ${o}`) } return r }(_.normalize(t)) } }, Be = { segwit: { hash: async function (t, n, e, r, i) { if (!he.includes(i)) throw new Error("Invalid hash type: " + String(i)); const {version: o, input: s, output: a, locktime: c} = t, {txid: u, vout: f, sequence: h} = s[n], l = i > 128, d = [k(o)]; return d.push(await async function (t, n) { if (!0 === n) return _.num(0, 32); const e = []; for (const {txid: n, vout: r} of t) e.push(C(n)), e.push(D(r)); return fe.hash256(_.join(e)) }(s, l), await async function (t, n) { if (1 !== n) return _.num(0, 32); const e = []; for (const {sequence: n} of t) e.push(K(n)); return fe.hash256(_.join(e)) }(s, i), C(u), D(f), N(r, !0), j(e), K(h), await async function (t, n, e) { const r = []; if (1 === e) { for (const {value: n, scriptPubKey: e} of t) r.push(j(n)), r.push(N(e)); return fe.hash256(_.join(r)) } if (3 === e && n < t.length) { const {value: e, scriptPubKey: i} = t[n]; return r.push(j(e)), r.push(N(i)), fe.hash256(_.join(r)) } return _.num(0, 32) }(a, n, i), V(c), _.num(i, 4).reverse()), fe.hash256(_.join(d)) } }, taproot: { hash: Oe, sign: async function (t, n, e, r = {}) { const {sigflag: i = 0} = r, o = dn.schnorr.sign, s = await Oe(n, e, r), a = await o(s, t); return 0 === i ? _.raw(a).hex : _.of(...a, i).hex }, verify: async function (t, n, e = {}, r = !1) { const i = function (t) { return ("string" == typeof t || t instanceof Uint8Array) && (t = L(t)), {...t} }(t), {witness: o} = i.input[n]; if (!Array.isArray(o) || o.length < 1) return le("Invalid witness data: " + String(o), r); if (80 === Z(o[o.length - 1])[0] && o.pop(), o.length < 1) return le("Invalid witness data: " + String(o), r); const s = new B(Z(o[0])), a = s.read(64), c = i.input[n].prevout, u = Z(c?.scriptPubKey).slice(2); let f, h; if (1 === s.size && (e.sigflag = s.read(1).num, 0 === e.sigflag)) return le("0x00 is not a valid appended sigflag!", r); if (o.length > 1 && (h = Z(o.pop())), o.length > 1 && h instanceof Uint8Array) { const t = N(o.pop()), n = 254 & h[0]; f = await Ae(t, n), e.extention = f } const l = await Oe(i, n, e), d = dn.schnorr.verify; return await d(a, l, u) ? !(void 0 !== h && void 0 !== f && !await ve(u, h, f)) || le("Invalid cblock!", r) : le("Invalid signature!", r) } } }, Ie = { getTag: be, getLeaf: Ae, getBranch: xe, getRoot: me, getTweak: Ee, getPubkey: async function (t, n = []) { return pe(t, n) }, getSeckey: async function (t, n = []) { return pe(t, n, !0).then((t => t[0])) }, getPath: async function t(n, e, r = [e], i = de, o = 0) { const s = _.normalize(n), [a, c, u] = await Se(r, e), f = [_.num(i + function (t = 2) { if (0 === t || 1 === t) return t; if (2 === t || "02" === t) return 0; if (3 === t || "03" === t) return 1; throw new Error("Invalid parity bit:" + String(t)) }(o)), _.normalize(n)]; r.length > 1 && u.forEach((t => f.push(_.hex(t)))); const h = _.join(f), l = ge(s, await Ee(s, _.hex(a))).slice(1); if (!await ve(l, h, e)) { if (0 === o) return t(n, e, r, i, 1); throw new Error("Path checking failed! Unable to generate path.") } return h.hex }, checkPath: ve, tweakSeckey: ye, tweakPubkey: ge, encodeAddress: function (t, n = "bc") { return (t = _.normalize(t)).length > 32 && (t = t.slice(1, 33)), _.raw(t).toBech32(n, 1) }, decodeAddress: function (t) { return _.bech32(t, 1) } }, He = { encode: function (t, n) { const {version: e, input: r, output: i, locktime: o} = t, s = !0 !== n && function (t) { for (const n of t) { const {witness: t} = n; if ("string" == typeof t || t instanceof Uint8Array || Array.isArray(t) && t.length > 0) return !0 } return !1 }(r), a = [k(e)]; s && a.push(_.hex("0001")), a.push(function (t) { const n = [_.readSize(t.length)]; for (const e of t) { const {txid: t, vout: r, scriptSig: i, sequence: o} = e; n.push(C(t)), n.push(D(r)), n.push(N(i)), n.push(K(o)) } return _.join(n) }(r)), a.push(function (t) { const n = [_.readSize(t.length)]; for (const e of t) { const {address: t, value: r, scriptPubKey: i} = e; n.push(j(r)), void 0 !== t ? n.push(_.bech32(t).raw) : n.push(N(i)) } return _.join(n) }(i)); for (const t of r) s && void 0 !== t?.witness && a.push($(t.witness)); return a.push(V(o)), _.join(a).hex }, decode: L }; return t.Script = _e, t.Sig = Be, t.Tap = Ie, t.Tx = He, t }({});