{
  "version": 3,
  "sources": ["../../../node_modules/.pnpm/@isaacs+ttlcache@1.4.1/node_modules/@isaacs/ttlcache/index.js", "../../../node_modules/.pnpm/level-supports@4.0.1/node_modules/level-supports/index.js", "../../../node_modules/.pnpm/module-error@1.0.2/node_modules/module-error/index.js", "../../../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js", "../../../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js", "../../../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js", "../../../node_modules/.pnpm/level-transcoder@1.0.1/node_modules/level-transcoder/lib/text-endec.js", "../../../node_modules/.pnpm/level-transcoder@1.0.1/node_modules/level-transcoder/lib/encoding.js", "../../../node_modules/.pnpm/level-transcoder@1.0.1/node_modules/level-transcoder/lib/formats.js", "../../../node_modules/.pnpm/level-transcoder@1.0.1/node_modules/level-transcoder/lib/encodings.js", "../../../node_modules/.pnpm/level-transcoder@1.0.1/node_modules/level-transcoder/index.js", "../../../node_modules/.pnpm/events@3.3.0/node_modules/events/events.js", "../../../node_modules/.pnpm/catering@2.1.1/node_modules/catering/next-tick-browser.js", "../../../node_modules/.pnpm/catering@2.1.1/node_modules/catering/index.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/lib/common.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/abstract-iterator.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/lib/default-kv-iterator.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/lib/deferred-iterator.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/abstract-chained-batch.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/lib/default-chained-batch.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/lib/range-options.js", "../../../node_modules/.pnpm/queue-microtask@1.2.3/node_modules/queue-microtask/index.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/lib/next-tick-browser.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/lib/abstract-sublevel-iterator.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/lib/abstract-sublevel.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/abstract-level.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/index.js", "../../../node_modules/.pnpm/run-parallel-limit@1.1.0/node_modules/run-parallel-limit/index.js", "../../../node_modules/.pnpm/browser-level@1.0.1/node_modules/browser-level/util/key-range.js", "../../../node_modules/.pnpm/browser-level@1.0.1/node_modules/browser-level/util/deserialize.js", "../../../node_modules/.pnpm/browser-level@1.0.1/node_modules/browser-level/iterator.js", "../../../node_modules/.pnpm/browser-level@1.0.1/node_modules/browser-level/util/clear.js", "../../../node_modules/.pnpm/browser-level@1.0.1/node_modules/browser-level/index.js", "../../../node_modules/.pnpm/level@8.0.1/node_modules/level/browser.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/ours/primordials.js", "../../../node_modules/.pnpm/abort-controller@3.0.0/node_modules/abort-controller/browser.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/ours/util.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/ours/errors.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/validators.js", "../../../node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/utils.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/end-of-stream.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/destroy.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/legacy.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/add-abort-signal.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/buffer_list.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/state.js", "../../../node_modules/.pnpm/safe-buffer@5.2.1/node_modules/safe-buffer/index.js", "../../../node_modules/.pnpm/string_decoder@1.3.0/node_modules/string_decoder/lib/string_decoder.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/from.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/readable.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/writable.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/duplexify.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/duplex.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/transform.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/passthrough.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/pipeline.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/compose.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/operators.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/stream/promises.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/stream.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/ours/browser.js", "../../common/src/cache.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/bytes.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/vendor/base-x.js", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/bases/base.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/bases/base32.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/bases/base58.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/bases/base64.ts", "../../common/src/type-utils.ts", "../../common/src/convert.ts", "../../common/src/logger.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/varint.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/vendor/varint.js", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/hashes/digest.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/cid.ts", "../../common/src/multicodec.ts", "../../common/src/object.ts", "../../common/src/stores.ts", "../../common/src/stream-node.ts", "../../../node_modules/.pnpm/@noble+hashes@1.4.0/node_modules/@noble/hashes/src/_assert.ts", "../../../node_modules/.pnpm/@noble+hashes@1.4.0/node_modules/@noble/hashes/src/crypto.ts", "../../../node_modules/.pnpm/@noble+hashes@1.4.0/node_modules/@noble/hashes/src/utils.ts", "../../../node_modules/.pnpm/@noble+hashes@1.4.0/node_modules/@noble/hashes/src/_md.ts", "../../../node_modules/.pnpm/@noble+hashes@1.4.0/node_modules/@noble/hashes/src/sha256.ts", "../src/primitives/sha256.ts", "../src/algorithms/crypto-algorithm.ts", "../src/algorithms/sha-2.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/_assert.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/crypto.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/utils.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/_sha2.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/sha256.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/abstract/utils.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/abstract/modular.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/abstract/curve.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/abstract/weierstrass.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/hmac.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/_shortw_utils.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/secp256k1.ts", "../src/jose/utils.ts", "../src/jose/jwk.ts", "../src/primitives/secp256k1.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/p256.ts", "../src/primitives/secp256r1.ts", "../src/algorithms/ecdsa.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/_u64.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/sha512.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/abstract/edwards.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/abstract/montgomery.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/ed25519.ts", "../src/primitives/ed25519.ts", "../src/algorithms/eddsa.ts", "../src/local-key-manager.ts", "../src/utils.ts", "../../../node_modules/.pnpm/@noble+ciphers@0.5.3/node_modules/@noble/ciphers/src/crypto.ts", "../src/primitives/aes-ctr.ts", "../src/algorithms/aes-ctr.ts", "../../../node_modules/.pnpm/@noble+ciphers@0.5.3/node_modules/@noble/ciphers/src/_assert.ts", "../../../node_modules/.pnpm/@noble+ciphers@0.5.3/node_modules/@noble/ciphers/src/utils.ts", "../../../node_modules/.pnpm/@noble+ciphers@0.5.3/node_modules/@noble/ciphers/src/webcrypto.ts", "../src/primitives/aes-gcm.ts", "../src/algorithms/aes-gcm.ts", "../src/primitives/concat-kdf.ts", "../src/primitives/pbkdf2.ts", "../src/primitives/x25519.ts", "../../../node_modules/.pnpm/@noble+ciphers@0.5.3/node_modules/@noble/ciphers/src/_poly1305.ts", "../../../node_modules/.pnpm/@noble+ciphers@0.5.3/node_modules/@noble/ciphers/src/_arx.ts", "../../../node_modules/.pnpm/@noble+ciphers@0.5.3/node_modules/@noble/ciphers/src/chacha.ts", "../src/primitives/xchacha20.ts", "../src/primitives/xchacha20-poly1305.ts"],
  "sourcesContent": ["// A simple TTL cache with max capacity option, ms resolution,\n// autopurge, and reasonably optimized performance\n// Relies on the fact that integer Object keys are kept sorted,\n// and managed very efficiently by V8.\n\n/* istanbul ignore next */\nconst perf =\n  typeof performance === 'object' &&\n  performance &&\n  typeof performance.now === 'function'\n    ? performance\n    : Date\n\nconst now = () => perf.now()\nconst isPosInt = n => n && n === Math.floor(n) && n > 0 && isFinite(n)\nconst isPosIntOrInf = n => n === Infinity || isPosInt(n)\n\nclass TTLCache {\n  constructor({\n    max = Infinity,\n    ttl,\n    updateAgeOnGet = false,\n    checkAgeOnGet = false,\n    noUpdateTTL = false,\n    dispose,\n    noDisposeOnSet = false,\n  } = {}) {\n    // {[expirationTime]: [keys]}\n    this.expirations = Object.create(null)\n    // {key=>val}\n    this.data = new Map()\n    // {key=>expiration}\n    this.expirationMap = new Map()\n    if (ttl !== undefined && !isPosIntOrInf(ttl)) {\n      throw new TypeError(\n        'ttl must be positive integer or Infinity if set'\n      )\n    }\n    if (!isPosIntOrInf(max)) {\n      throw new TypeError('max must be positive integer or Infinity')\n    }\n    this.ttl = ttl\n    this.max = max\n    this.updateAgeOnGet = !!updateAgeOnGet\n    this.checkAgeOnGet = !!checkAgeOnGet\n    this.noUpdateTTL = !!noUpdateTTL\n    this.noDisposeOnSet = !!noDisposeOnSet\n    if (dispose !== undefined) {\n      if (typeof dispose !== 'function') {\n        throw new TypeError('dispose must be function if set')\n      }\n      this.dispose = dispose\n    }\n\n    this.timer = undefined\n    this.timerExpiration = undefined\n  }\n\n  setTimer(expiration, ttl) {\n    if (this.timerExpiration < expiration) {\n      return\n    }\n\n    if (this.timer) {\n      clearTimeout(this.timer)\n    }\n\n    const t = setTimeout(() => {\n      this.timer = undefined\n      this.timerExpiration = undefined\n      this.purgeStale()\n      for (const exp in this.expirations) {\n        this.setTimer(exp, exp - now())\n        break\n      }\n    }, ttl)\n\n    /* istanbul ignore else - affordance for non-node envs */\n    if (t.unref) t.unref()\n\n    this.timerExpiration = expiration\n    this.timer = t\n  }\n\n  // hang onto the timer so we can clearTimeout if all items\n  // are deleted.  Deno doesn't have Timer.unref(), so it\n  // hangs otherwise.\n  cancelTimer() {\n    if (this.timer) {\n      clearTimeout(this.timer)\n      this.timerExpiration = undefined\n      this.timer = undefined\n    }\n  }\n\n  /* istanbul ignore next */\n  cancelTimers() {\n    process.emitWarning(\n      'TTLCache.cancelTimers has been renamed to ' +\n        'TTLCache.cancelTimer (no \"s\"), and will be removed in the next ' +\n        'major version update'\n    )\n    return this.cancelTimer()\n  }\n\n  clear() {\n    const entries =\n      this.dispose !== TTLCache.prototype.dispose ? [...this] : []\n    this.data.clear()\n    this.expirationMap.clear()\n    // no need for any purging now\n    this.cancelTimer()\n    this.expirations = Object.create(null)\n    for (const [key, val] of entries) {\n      this.dispose(val, key, 'delete')\n    }\n  }\n\n  setTTL(key, ttl = this.ttl) {\n    const current = this.expirationMap.get(key)\n    if (current !== undefined) {\n      // remove from the expirations list, so it isn't purged\n      const exp = this.expirations[current]\n      if (!exp || exp.length <= 1) {\n        delete this.expirations[current]\n      } else {\n        this.expirations[current] = exp.filter(k => k !== key)\n      }\n    }\n\n    if (ttl !== Infinity) {\n      const expiration = Math.floor(now() + ttl)\n      this.expirationMap.set(key, expiration)\n      if (!this.expirations[expiration]) {\n        this.expirations[expiration] = []\n        this.setTimer(expiration, ttl)\n      }\n      this.expirations[expiration].push(key)\n    } else {\n      this.expirationMap.set(key, Infinity)\n    }\n  }\n\n  set(\n    key,\n    val,\n    {\n      ttl = this.ttl,\n      noUpdateTTL = this.noUpdateTTL,\n      noDisposeOnSet = this.noDisposeOnSet,\n    } = {}\n  ) {\n    if (!isPosIntOrInf(ttl)) {\n      throw new TypeError('ttl must be positive integer or Infinity')\n    }\n    if (this.expirationMap.has(key)) {\n      if (!noUpdateTTL) {\n        this.setTTL(key, ttl)\n      }\n      // has old value\n      const oldValue = this.data.get(key)\n      if (oldValue !== val) {\n        this.data.set(key, val)\n        if (!noDisposeOnSet) {\n          this.dispose(oldValue, key, 'set')\n        }\n      }\n    } else {\n      this.setTTL(key, ttl)\n      this.data.set(key, val)\n    }\n\n    while (this.size > this.max) {\n      this.purgeToCapacity()\n    }\n\n    return this\n  }\n\n  has(key) {\n    return this.data.has(key)\n  }\n\n  getRemainingTTL(key) {\n    const expiration = this.expirationMap.get(key)\n    return expiration === Infinity\n      ? expiration\n      : expiration !== undefined\n      ? Math.max(0, Math.ceil(expiration - now()))\n      : 0\n  }\n\n  get(\n    key,\n    {\n      updateAgeOnGet = this.updateAgeOnGet,\n      ttl = this.ttl,\n      checkAgeOnGet = this.checkAgeOnGet,\n    } = {}\n  ) {\n    const val = this.data.get(key)\n    if (checkAgeOnGet && this.getRemainingTTL(key) === 0) {\n      this.delete(key)\n      return undefined\n    }\n    if (updateAgeOnGet) {\n      this.setTTL(key, ttl)\n    }\n    return val\n  }\n\n  dispose(_, __) {}\n\n  delete(key) {\n    const current = this.expirationMap.get(key)\n    if (current !== undefined) {\n      const value = this.data.get(key)\n      this.data.delete(key)\n      this.expirationMap.delete(key)\n      const exp = this.expirations[current]\n      if (exp) {\n        if (exp.length <= 1) {\n          delete this.expirations[current]\n        } else {\n          this.expirations[current] = exp.filter(k => k !== key)\n        }\n      }\n      this.dispose(value, key, 'delete')\n      if (this.size === 0) {\n        this.cancelTimer()\n      }\n      return true\n    }\n    return false\n  }\n\n  purgeToCapacity() {\n    for (const exp in this.expirations) {\n      const keys = this.expirations[exp]\n      if (this.size - keys.length >= this.max) {\n        delete this.expirations[exp]\n        const entries = []\n        for (const key of keys) {\n          entries.push([key, this.data.get(key)])\n          this.data.delete(key)\n          this.expirationMap.delete(key)\n        }\n        for (const [key, val] of entries) {\n          this.dispose(val, key, 'evict')\n        }\n      } else {\n        const s = this.size - this.max\n        const entries = []\n        for (const key of keys.splice(0, s)) {\n          entries.push([key, this.data.get(key)])\n          this.data.delete(key)\n          this.expirationMap.delete(key)\n        }\n        for (const [key, val] of entries) {\n          this.dispose(val, key, 'evict')\n        }\n        return\n      }\n    }\n  }\n\n  get size() {\n    return this.data.size\n  }\n\n  purgeStale() {\n    const n = Math.ceil(now())\n    for (const exp in this.expirations) {\n      if (exp === 'Infinity' || exp > n) {\n        return\n      }\n\n      /* istanbul ignore next\n       * mysterious need for a guard here?\n       * https://github.com/isaacs/ttlcache/issues/26 */\n      const keys = [...(this.expirations[exp] || [])]\n      const entries = []\n      delete this.expirations[exp]\n      for (const key of keys) {\n        entries.push([key, this.data.get(key)])\n        this.data.delete(key)\n        this.expirationMap.delete(key)\n      }\n      for (const [key, val] of entries) {\n        this.dispose(val, key, 'stale')\n      }\n    }\n    if (this.size === 0) {\n      this.cancelTimer()\n    }\n  }\n\n  *entries() {\n    for (const exp in this.expirations) {\n      for (const key of this.expirations[exp]) {\n        yield [key, this.data.get(key)]\n      }\n    }\n  }\n  *keys() {\n    for (const exp in this.expirations) {\n      for (const key of this.expirations[exp]) {\n        yield key\n      }\n    }\n  }\n  *values() {\n    for (const exp in this.expirations) {\n      for (const key of this.expirations[exp]) {\n        yield this.data.get(key)\n      }\n    }\n  }\n  [Symbol.iterator]() {\n    return this.entries()\n  }\n}\n\nmodule.exports = TTLCache\n", "'use strict'\n\nexports.supports = function supports (...manifests) {\n  const manifest = manifests.reduce((acc, m) => Object.assign(acc, m), {})\n\n  return Object.assign(manifest, {\n    snapshots: manifest.snapshots || false,\n    permanence: manifest.permanence || false,\n    seek: manifest.seek || false,\n    clear: manifest.clear || false,\n    getMany: manifest.getMany || false,\n    keyIterator: manifest.keyIterator || false,\n    valueIterator: manifest.valueIterator || false,\n    iteratorNextv: manifest.iteratorNextv || false,\n    iteratorAll: manifest.iteratorAll || false,\n    status: manifest.status || false,\n    createIfMissing: manifest.createIfMissing || false,\n    errorIfExists: manifest.errorIfExists || false,\n    deferredOpen: manifest.deferredOpen || false,\n    promises: manifest.promises || false,\n    streams: manifest.streams || false,\n    encodings: Object.assign({}, manifest.encodings),\n    events: Object.assign({}, manifest.events),\n    additionalMethods: Object.assign({}, manifest.additionalMethods)\n  })\n}\n", "'use strict'\n\nmodule.exports = class ModuleError extends Error {\n  /**\n   * @param {string} message Error message\n   * @param {{ code?: string, cause?: Error, expected?: boolean, transient?: boolean }} [options]\n   */\n  constructor (message, options) {\n    super(message || '')\n\n    if (typeof options === 'object' && options !== null) {\n      if (options.code) this.code = String(options.code)\n      if (options.expected) this.expected = true\n      if (options.transient) this.transient = true\n      if (options.cause) this.cause = options.cause\n    }\n\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, this.constructor)\n    }\n  }\n}\n", "'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n", "/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n", "/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n  (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n    ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n    : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    const arr = new Uint8Array(1)\n    const proto = { foo: function () { return 42 } }\n    Object.setPrototypeOf(proto, Uint8Array.prototype)\n    Object.setPrototypeOf(arr, proto)\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.buffer\n  }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.byteOffset\n  }\n})\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n  }\n  // Return an augmented `Uint8Array` instance\n  const buf = new Uint8Array(length)\n  Object.setPrototypeOf(buf, Buffer.prototype)\n  return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError(\n        'The \"string\" argument must be of type string. Received type number'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayView(value)\n  }\n\n  if (value == null) {\n    throw new TypeError(\n      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n      'or Array-like Object. Received type ' + (typeof value)\n    )\n  }\n\n  if (isInstance(value, ArrayBuffer) ||\n      (value && isInstance(value.buffer, ArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof SharedArrayBuffer !== 'undefined' &&\n      (isInstance(value, SharedArrayBuffer) ||\n      (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'number') {\n    throw new TypeError(\n      'The \"value\" argument must not be of type number. Received type number'\n    )\n  }\n\n  const valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  const b = fromObject(value)\n  if (b) return b\n\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n      typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n  }\n\n  throw new TypeError(\n    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n    'or Array-like Object. Received type ' + (typeof value)\n  )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number')\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpreted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding)\n  }\n\n  const length = byteLength(string, encoding) | 0\n  let buf = createBuffer(length)\n\n  const actual = buf.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  const length = array.length < 0 ? 0 : checked(array.length) | 0\n  const buf = createBuffer(length)\n  for (let i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayView (arrayView) {\n  if (isInstance(arrayView, Uint8Array)) {\n    const copy = new Uint8Array(arrayView)\n    return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n  }\n  return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds')\n  }\n\n  let buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(buf, Buffer.prototype)\n\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    const len = checked(obj.length) | 0\n    const buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0)\n    }\n    return fromArrayLike(obj)\n  }\n\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data)\n  }\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true &&\n    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError(\n      'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n    )\n  }\n\n  if (a === b) return 0\n\n  let x = a.length\n  let y = b.length\n\n  for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  let i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  const buffer = Buffer.allocUnsafe(length)\n  let pos = 0\n  for (i = 0; i < list.length; ++i) {\n    let buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      if (pos + buf.length > buffer.length) {\n        if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n        buf.copy(buffer, pos)\n      } else {\n        Uint8Array.prototype.set.call(\n          buffer,\n          buf,\n          pos\n        )\n      }\n    } else if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    } else {\n      buf.copy(buffer, pos)\n    }\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError(\n      'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n      'Received type ' + typeof string\n    )\n  }\n\n  const len = string.length\n  const mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) {\n          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n        }\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  let loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  const i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  const len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (let i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  const len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (let i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  const len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (let i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  const length = this.length\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  let str = ''\n  const max = exports.INSPECT_MAX_BYTES\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n  if (this.length > max) str += ' ... '\n  return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength)\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError(\n      'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n      'Received type ' + (typeof target)\n    )\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  let x = thisEnd - thisStart\n  let y = end - start\n  const len = Math.min(x, y)\n\n  const thisCopy = this.slice(thisStart, thisEnd)\n  const targetCopy = target.slice(start, end)\n\n  for (let i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  let indexSize = 1\n  let arrLength = arr.length\n  let valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  let i\n  if (dir) {\n    let foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      let found = true\n      for (let j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  const remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  const strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  let i\n  for (i = 0; i < length; ++i) {\n    const parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0\n    if (isFinite(length)) {\n      length = length >>> 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  const remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return asciiWrite(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  const res = []\n\n  let i = start\n  while (i < end) {\n    const firstByte = buf[i]\n    let codePoint = null\n    let bytesPerSequence = (firstByte > 0xEF)\n      ? 4\n      : (firstByte > 0xDF)\n          ? 3\n          : (firstByte > 0xBF)\n              ? 2\n              : 1\n\n    if (i + bytesPerSequence <= end) {\n      let secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  const len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  let res = ''\n  let i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  const len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  let out = ''\n  for (let i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]]\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  const bytes = buf.slice(start, end)\n  let res = ''\n  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n  for (let i = 0; i < bytes.length - 1; i += 2) {\n    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  const len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  const newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  let val = this[offset + --byteLength]\n  let mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const lo = first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24\n\n  const hi = this[++offset] +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    last * 2 ** 24\n\n  return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const hi = first * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  const lo = this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last\n\n  return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let i = byteLength\n  let mul = 1\n  let val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = this[offset + 4] +\n    this[offset + 5] * 2 ** 8 +\n    this[offset + 6] * 2 ** 16 +\n    (last << 24) // Overflow\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = (first << 24) + // Overflow\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let mul = 1\n  let i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset + 7] = lo\n  lo = lo >> 8\n  buf[offset + 6] = lo\n  lo = lo >> 8\n  buf[offset + 5] = lo\n  lo = lo >> 8\n  buf[offset + 4] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset + 3] = hi\n  hi = hi >> 8\n  buf[offset + 2] = hi\n  hi = hi >> 8\n  buf[offset + 1] = hi\n  hi = hi >> 8\n  buf[offset] = hi\n  return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = 0\n  let mul = 1\n  let sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  let sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  const len = end - start\n\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end)\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, end),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n    if (val.length === 1) {\n      const code = val.charCodeAt(0)\n      if ((encoding === 'utf8' && code < 128) ||\n          encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  } else if (typeof val === 'boolean') {\n    val = Number(val)\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  let i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    const bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    const len = bytes.length\n    if (len === 0) {\n      throw new TypeError('The value \"' + val +\n        '\" is invalid for argument \"value\"')\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n  errors[sym] = class NodeError extends Base {\n    constructor () {\n      super()\n\n      Object.defineProperty(this, 'message', {\n        value: getMessage.apply(this, arguments),\n        writable: true,\n        configurable: true\n      })\n\n      // Add the error code to the name to include it in the stack trace.\n      this.name = `${this.name} [${sym}]`\n      // Access the stack to generate the error message including the error code\n      // from the name.\n      this.stack // eslint-disable-line no-unused-expressions\n      // Reset the name to the actual name.\n      delete this.name\n    }\n\n    get code () {\n      return sym\n    }\n\n    set code (value) {\n      Object.defineProperty(this, 'code', {\n        configurable: true,\n        enumerable: true,\n        value,\n        writable: true\n      })\n    }\n\n    toString () {\n      return `${this.name} [${sym}]: ${this.message}`\n    }\n  }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n  function (name) {\n    if (name) {\n      return `${name} is outside of buffer bounds`\n    }\n\n    return 'Attempt to access memory outside buffer bounds'\n  }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n  function (name, actual) {\n    return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n  }, TypeError)\nE('ERR_OUT_OF_RANGE',\n  function (str, range, input) {\n    let msg = `The value of \"${str}\" is out of range.`\n    let received = input\n    if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n      received = addNumericalSeparator(String(input))\n    } else if (typeof input === 'bigint') {\n      received = String(input)\n      if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n        received = addNumericalSeparator(received)\n      }\n      received += 'n'\n    }\n    msg += ` It must be ${range}. Received ${received}`\n    return msg\n  }, RangeError)\n\nfunction addNumericalSeparator (val) {\n  let res = ''\n  let i = val.length\n  const start = val[0] === '-' ? 1 : 0\n  for (; i >= start + 4; i -= 3) {\n    res = `_${val.slice(i - 3, i)}${res}`\n  }\n  return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n  validateNumber(offset, 'offset')\n  if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n    boundsError(offset, buf.length - (byteLength + 1))\n  }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n  if (value > max || value < min) {\n    const n = typeof min === 'bigint' ? 'n' : ''\n    let range\n    if (byteLength > 3) {\n      if (min === 0 || min === BigInt(0)) {\n        range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n      } else {\n        range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n                `${(byteLength + 1) * 8 - 1}${n}`\n      }\n    } else {\n      range = `>= ${min}${n} and <= ${max}${n}`\n    }\n    throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n  }\n  checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n  if (typeof value !== 'number') {\n    throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n}\n\nfunction boundsError (value, length, type) {\n  if (Math.floor(value) !== value) {\n    validateNumber(value, type)\n    throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n  }\n\n  if (length < 0) {\n    throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n  }\n\n  throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n                                    `>= ${type ? 1 : 0} and <= ${length}`,\n                                    value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0]\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  let codePoint\n  const length = string.length\n  let leadSurrogate = null\n  const bytes = []\n\n  for (let i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  let c, hi, lo\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  let i\n  for (i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n  return obj instanceof type ||\n    (obj != null && obj.constructor != null && obj.constructor.name != null &&\n      obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n  // For IE11 support\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n  const alphabet = '0123456789abcdef'\n  const table = new Array(256)\n  for (let i = 0; i < 16; ++i) {\n    const i16 = i * 16\n    for (let j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j]\n    }\n  }\n  return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n  return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n  throw new Error('BigInt not supported')\n}\n", "'use strict'\n\n/** @type {{ textEncoder: TextEncoder, textDecoder: TextDecoder }|null} */\nlet lazy = null\n\n/**\n * Get semi-global instances of TextEncoder and TextDecoder.\n * @returns {{ textEncoder: TextEncoder, textDecoder: TextDecoder }}\n */\nmodule.exports = function () {\n  if (lazy === null) {\n    lazy = {\n      textEncoder: new TextEncoder(),\n      textDecoder: new TextDecoder()\n    }\n  }\n\n  return lazy\n}\n", "'use strict'\n\nconst ModuleError = require('module-error')\nconst formats = new Set(['buffer', 'view', 'utf8'])\n\n/**\n * @template TIn, TFormat, TOut\n * @abstract\n */\nclass Encoding {\n  /**\n   * @param {IEncoding<TIn,TFormat,TOut>} options\n   */\n  constructor (options) {\n    /** @type {(data: TIn) => TFormat} */\n    this.encode = options.encode || this.encode\n\n    /** @type {(data: TFormat) => TOut} */\n    this.decode = options.decode || this.decode\n\n    /** @type {string} */\n    this.name = options.name || this.name\n\n    /** @type {string} */\n    this.format = options.format || this.format\n\n    if (typeof this.encode !== 'function') {\n      throw new TypeError(\"The 'encode' property must be a function\")\n    }\n\n    if (typeof this.decode !== 'function') {\n      throw new TypeError(\"The 'decode' property must be a function\")\n    }\n\n    this.encode = this.encode.bind(this)\n    this.decode = this.decode.bind(this)\n\n    if (typeof this.name !== 'string' || this.name === '') {\n      throw new TypeError(\"The 'name' property must be a string\")\n    }\n\n    if (typeof this.format !== 'string' || !formats.has(this.format)) {\n      throw new TypeError(\"The 'format' property must be one of 'buffer', 'view', 'utf8'\")\n    }\n\n    if (options.createViewTranscoder) {\n      this.createViewTranscoder = options.createViewTranscoder\n    }\n\n    if (options.createBufferTranscoder) {\n      this.createBufferTranscoder = options.createBufferTranscoder\n    }\n\n    if (options.createUTF8Transcoder) {\n      this.createUTF8Transcoder = options.createUTF8Transcoder\n    }\n  }\n\n  get commonName () {\n    return /** @type {string} */ (this.name.split('+')[0])\n  }\n\n  /** @return {BufferFormat<TIn,TOut>} */\n  createBufferTranscoder () {\n    throw new ModuleError(`Encoding '${this.name}' cannot be transcoded to 'buffer'`, {\n      code: 'LEVEL_ENCODING_NOT_SUPPORTED'\n    })\n  }\n\n  /** @return {ViewFormat<TIn,TOut>} */\n  createViewTranscoder () {\n    throw new ModuleError(`Encoding '${this.name}' cannot be transcoded to 'view'`, {\n      code: 'LEVEL_ENCODING_NOT_SUPPORTED'\n    })\n  }\n\n  /** @return {UTF8Format<TIn,TOut>} */\n  createUTF8Transcoder () {\n    throw new ModuleError(`Encoding '${this.name}' cannot be transcoded to 'utf8'`, {\n      code: 'LEVEL_ENCODING_NOT_SUPPORTED'\n    })\n  }\n}\n\nexports.Encoding = Encoding\n\n/**\n * @typedef {import('./encoding').IEncoding<TIn,TFormat,TOut>} IEncoding\n * @template TIn, TFormat, TOut\n */\n\n/**\n * @typedef {import('./formats').BufferFormat<TIn,TOut>} BufferFormat\n * @template TIn, TOut\n */\n\n/**\n * @typedef {import('./formats').ViewFormat<TIn,TOut>} ViewFormat\n * @template TIn, TOut\n */\n\n/**\n * @typedef {import('./formats').UTF8Format<TIn,TOut>} UTF8Format\n * @template TIn, TOut\n */\n", "'use strict'\n\nconst { Buffer } = require('buffer') || {}\nconst { Encoding } = require('./encoding')\nconst textEndec = require('./text-endec')\n\n/**\n * @template TIn, TOut\n * @extends {Encoding<TIn,Buffer,TOut>}\n */\nclass BufferFormat extends Encoding {\n  /**\n   * @param {Omit<IEncoding<TIn, Buffer, TOut>, 'format'>} options\n   */\n  constructor (options) {\n    super({ ...options, format: 'buffer' })\n  }\n\n  /** @override */\n  createViewTranscoder () {\n    return new ViewFormat({\n      encode: this.encode, // Buffer is a view (UInt8Array)\n      decode: (data) => this.decode(\n        Buffer.from(data.buffer, data.byteOffset, data.byteLength)\n      ),\n      name: `${this.name}+view`\n    })\n  }\n\n  /** @override */\n  createBufferTranscoder () {\n    return this\n  }\n}\n\n/**\n * @extends {Encoding<TIn,Uint8Array,TOut>}\n * @template TIn, TOut\n */\nclass ViewFormat extends Encoding {\n  /**\n   * @param {Omit<IEncoding<TIn, Uint8Array, TOut>, 'format'>} options\n   */\n  constructor (options) {\n    super({ ...options, format: 'view' })\n  }\n\n  /** @override */\n  createBufferTranscoder () {\n    return new BufferFormat({\n      encode: (data) => {\n        const view = this.encode(data)\n        return Buffer.from(view.buffer, view.byteOffset, view.byteLength)\n      },\n      decode: this.decode, // Buffer is a view (UInt8Array)\n      name: `${this.name}+buffer`\n    })\n  }\n\n  /** @override */\n  createViewTranscoder () {\n    return this\n  }\n}\n\n/**\n * @extends {Encoding<TIn,string,TOut>}\n * @template TIn, TOut\n */\nclass UTF8Format extends Encoding {\n  /**\n   * @param {Omit<IEncoding<TIn, string, TOut>, 'format'>} options\n   */\n  constructor (options) {\n    super({ ...options, format: 'utf8' })\n  }\n\n  /** @override */\n  createBufferTranscoder () {\n    return new BufferFormat({\n      encode: (data) => Buffer.from(this.encode(data), 'utf8'),\n      decode: (data) => this.decode(data.toString('utf8')),\n      name: `${this.name}+buffer`\n    })\n  }\n\n  /** @override */\n  createViewTranscoder () {\n    const { textEncoder, textDecoder } = textEndec()\n\n    return new ViewFormat({\n      encode: (data) => textEncoder.encode(this.encode(data)),\n      decode: (data) => this.decode(textDecoder.decode(data)),\n      name: `${this.name}+view`\n    })\n  }\n\n  /** @override */\n  createUTF8Transcoder () {\n    return this\n  }\n}\n\nexports.BufferFormat = BufferFormat\nexports.ViewFormat = ViewFormat\nexports.UTF8Format = UTF8Format\n\n/**\n * @typedef {import('./encoding').IEncoding<TIn,TFormat,TOut>} IEncoding\n * @template TIn, TFormat, TOut\n */\n", "'use strict'\n\nconst { Buffer } = require('buffer') || { Buffer: { isBuffer: () => false } }\nconst { textEncoder, textDecoder } = require('./text-endec')()\nconst { BufferFormat, ViewFormat, UTF8Format } = require('./formats')\n\n/** @type {<T>(v: T) => v} */\nconst identity = (v) => v\n\n/**\n * @type {typeof import('./encodings').utf8}\n */\nexports.utf8 = new UTF8Format({\n  encode: function (data) {\n    // On node 16.9.1 buffer.toString() is 5x faster than TextDecoder\n    return Buffer.isBuffer(data)\n      ? data.toString('utf8')\n      : ArrayBuffer.isView(data)\n        ? textDecoder.decode(data)\n        : String(data)\n  },\n  decode: identity,\n  name: 'utf8',\n  createViewTranscoder () {\n    return new ViewFormat({\n      encode: function (data) {\n        return ArrayBuffer.isView(data) ? data : textEncoder.encode(data)\n      },\n      decode: function (data) {\n        return textDecoder.decode(data)\n      },\n      name: `${this.name}+view`\n    })\n  },\n  createBufferTranscoder () {\n    return new BufferFormat({\n      encode: function (data) {\n        return Buffer.isBuffer(data)\n          ? data\n          : ArrayBuffer.isView(data)\n            ? Buffer.from(data.buffer, data.byteOffset, data.byteLength)\n            : Buffer.from(String(data), 'utf8')\n      },\n      decode: function (data) {\n        return data.toString('utf8')\n      },\n      name: `${this.name}+buffer`\n    })\n  }\n})\n\n/**\n * @type {typeof import('./encodings').json}\n */\nexports.json = new UTF8Format({\n  encode: JSON.stringify,\n  decode: JSON.parse,\n  name: 'json'\n})\n\n/**\n * @type {typeof import('./encodings').buffer}\n */\nexports.buffer = new BufferFormat({\n  encode: function (data) {\n    return Buffer.isBuffer(data)\n      ? data\n      : ArrayBuffer.isView(data)\n        ? Buffer.from(data.buffer, data.byteOffset, data.byteLength)\n        : Buffer.from(String(data), 'utf8')\n  },\n  decode: identity,\n  name: 'buffer',\n  createViewTranscoder () {\n    return new ViewFormat({\n      encode: function (data) {\n        return ArrayBuffer.isView(data) ? data : Buffer.from(String(data), 'utf8')\n      },\n      decode: function (data) {\n        return Buffer.from(data.buffer, data.byteOffset, data.byteLength)\n      },\n      name: `${this.name}+view`\n    })\n  }\n})\n\n/**\n * @type {typeof import('./encodings').view}\n */\nexports.view = new ViewFormat({\n  encode: function (data) {\n    return ArrayBuffer.isView(data) ? data : textEncoder.encode(data)\n  },\n  decode: identity,\n  name: 'view',\n  createBufferTranscoder () {\n    return new BufferFormat({\n      encode: function (data) {\n        return Buffer.isBuffer(data)\n          ? data\n          : ArrayBuffer.isView(data)\n            ? Buffer.from(data.buffer, data.byteOffset, data.byteLength)\n            : Buffer.from(String(data), 'utf8')\n      },\n      decode: identity,\n      name: `${this.name}+buffer`\n    })\n  }\n})\n\n/**\n * @type {typeof import('./encodings').hex}\n */\nexports.hex = new BufferFormat({\n  encode: function (data) {\n    return Buffer.isBuffer(data) ? data : Buffer.from(String(data), 'hex')\n  },\n  decode: function (buffer) {\n    return buffer.toString('hex')\n  },\n  name: 'hex'\n})\n\n/**\n * @type {typeof import('./encodings').base64}\n */\nexports.base64 = new BufferFormat({\n  encode: function (data) {\n    return Buffer.isBuffer(data) ? data : Buffer.from(String(data), 'base64')\n  },\n  decode: function (buffer) {\n    return buffer.toString('base64')\n  },\n  name: 'base64'\n})\n", "'use strict'\n\nconst ModuleError = require('module-error')\nconst encodings = require('./lib/encodings')\nconst { Encoding } = require('./lib/encoding')\nconst { BufferFormat, ViewFormat, UTF8Format } = require('./lib/formats')\n\nconst kFormats = Symbol('formats')\nconst kEncodings = Symbol('encodings')\nconst validFormats = new Set(['buffer', 'view', 'utf8'])\n\n/** @template T */\nclass Transcoder {\n  /**\n   * @param {Array<'buffer'|'view'|'utf8'>} formats\n   */\n  constructor (formats) {\n    if (!Array.isArray(formats)) {\n      throw new TypeError(\"The first argument 'formats' must be an array\")\n    } else if (!formats.every(f => validFormats.has(f))) {\n      // Note: we only only support aliases in key- and valueEncoding options (where we already did)\n      throw new TypeError(\"Format must be one of 'buffer', 'view', 'utf8'\")\n    }\n\n    /** @type {Map<string|MixedEncoding<any, any, any>, Encoding<any, any, any>>} */\n    this[kEncodings] = new Map()\n    this[kFormats] = new Set(formats)\n\n    // Register encodings (done early in order to populate encodings())\n    for (const k in encodings) {\n      try {\n        this.encoding(k)\n      } catch (err) {\n        /* istanbul ignore if: assertion */\n        if (err.code !== 'LEVEL_ENCODING_NOT_SUPPORTED') throw err\n      }\n    }\n  }\n\n  /**\n   * @returns {Array<Encoding<any,T,any>>}\n   */\n  encodings () {\n    return Array.from(new Set(this[kEncodings].values()))\n  }\n\n  /**\n   * @param {string|MixedEncoding<any, any, any>} encoding\n   * @returns {Encoding<any, T, any>}\n   */\n  encoding (encoding) {\n    let resolved = this[kEncodings].get(encoding)\n\n    if (resolved === undefined) {\n      if (typeof encoding === 'string' && encoding !== '') {\n        resolved = lookup[encoding]\n\n        if (!resolved) {\n          throw new ModuleError(`Encoding '${encoding}' is not found`, {\n            code: 'LEVEL_ENCODING_NOT_FOUND'\n          })\n        }\n      } else if (typeof encoding !== 'object' || encoding === null) {\n        throw new TypeError(\"First argument 'encoding' must be a string or object\")\n      } else {\n        resolved = from(encoding)\n      }\n\n      const { name, format } = resolved\n\n      if (!this[kFormats].has(format)) {\n        if (this[kFormats].has('view')) {\n          resolved = resolved.createViewTranscoder()\n        } else if (this[kFormats].has('buffer')) {\n          resolved = resolved.createBufferTranscoder()\n        } else if (this[kFormats].has('utf8')) {\n          resolved = resolved.createUTF8Transcoder()\n        } else {\n          throw new ModuleError(`Encoding '${name}' cannot be transcoded`, {\n            code: 'LEVEL_ENCODING_NOT_SUPPORTED'\n          })\n        }\n      }\n\n      for (const k of [encoding, name, resolved.name, resolved.commonName]) {\n        this[kEncodings].set(k, resolved)\n      }\n    }\n\n    return resolved\n  }\n}\n\nexports.Transcoder = Transcoder\n\n/**\n * @param {MixedEncoding<any, any, any>} options\n * @returns {Encoding<any, any, any>}\n */\nfunction from (options) {\n  if (options instanceof Encoding) {\n    return options\n  }\n\n  // Loosely typed for ecosystem compatibility\n  const maybeType = 'type' in options && typeof options.type === 'string' ? options.type : undefined\n  const name = options.name || maybeType || `anonymous-${anonymousCount++}`\n\n  switch (detectFormat(options)) {\n    case 'view': return new ViewFormat({ ...options, name })\n    case 'utf8': return new UTF8Format({ ...options, name })\n    case 'buffer': return new BufferFormat({ ...options, name })\n    default: {\n      throw new TypeError(\"Format must be one of 'buffer', 'view', 'utf8'\")\n    }\n  }\n}\n\n/**\n * If format is not provided, fallback to detecting `level-codec`\n * or `multiformats` encodings, else assume a format of buffer.\n * @param {MixedEncoding<any, any, any>} options\n * @returns {string}\n */\nfunction detectFormat (options) {\n  if ('format' in options && options.format !== undefined) {\n    return options.format\n  } else if ('buffer' in options && typeof options.buffer === 'boolean') {\n    return options.buffer ? 'buffer' : 'utf8' // level-codec\n  } else if ('code' in options && Number.isInteger(options.code)) {\n    return 'view' // multiformats\n  } else {\n    return 'buffer'\n  }\n}\n\n/**\n * @typedef {import('./lib/encoding').MixedEncoding<TIn,TFormat,TOut>} MixedEncoding\n * @template TIn, TFormat, TOut\n */\n\n/**\n * @type {Object.<string, Encoding<any, any, any>>}\n */\nconst aliases = {\n  binary: encodings.buffer,\n  'utf-8': encodings.utf8\n}\n\n/**\n * @type {Object.<string, Encoding<any, any, any>>}\n */\nconst lookup = {\n  ...encodings,\n  ...aliases\n}\n\nlet anonymousCount = 0\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n  this._maxListeners = n;\n  return this;\n};\n\nfunction _getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  checkListener(listener);\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = _getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    if (arguments.length === 0)\n      return this.listener.call(this.target);\n    return this.listener.apply(this.target, arguments);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  checkListener(listener);\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      checkListener(listener);\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      checkListener(listener);\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n\nfunction once(emitter, name) {\n  return new Promise(function (resolve, reject) {\n    function errorListener(err) {\n      emitter.removeListener(name, resolver);\n      reject(err);\n    }\n\n    function resolver() {\n      if (typeof emitter.removeListener === 'function') {\n        emitter.removeListener('error', errorListener);\n      }\n      resolve([].slice.call(arguments));\n    };\n\n    eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n    if (name !== 'error') {\n      addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n    }\n  });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n  if (typeof emitter.on === 'function') {\n    eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n  }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n  if (typeof emitter.on === 'function') {\n    if (flags.once) {\n      emitter.once(name, listener);\n    } else {\n      emitter.on(name, listener);\n    }\n  } else if (typeof emitter.addEventListener === 'function') {\n    // EventTarget does not have `error` event semantics like Node\n    // EventEmitters, we do not listen for `error` events here.\n    emitter.addEventListener(name, function wrapListener(arg) {\n      // IE does not have builtin `{ once: true }` support so we\n      // have to do it manually.\n      if (flags.once) {\n        emitter.removeEventListener(name, wrapListener);\n      }\n      listener(arg);\n    });\n  } else {\n    throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n  }\n}\n", "module.exports = typeof queueMicrotask === 'function' ? queueMicrotask : (fn) => Promise.resolve().then(fn)\n", "'use strict'\n\nvar nextTick = require('./next-tick')\n\nexports.fromCallback = function (callback, symbol) {\n  if (callback === undefined) {\n    var promise = new Promise(function (resolve, reject) {\n      callback = function (err, res) {\n        if (err) reject(err)\n        else resolve(res)\n      }\n    })\n\n    callback[symbol !== undefined ? symbol : 'promise'] = promise\n  } else if (typeof callback !== 'function') {\n    throw new TypeError('Callback must be a function')\n  }\n\n  return callback\n}\n\nexports.fromPromise = function (promise, callback) {\n  if (callback === undefined) return promise\n\n  promise\n    .then(function (res) { nextTick(() => callback(null, res)) })\n    .catch(function (err) { nextTick(() => callback(err)) })\n}\n", "'use strict'\n\nexports.getCallback = function (options, callback) {\n  return typeof options === 'function' ? options : callback\n}\n\nexports.getOptions = function (options, def) {\n  if (typeof options === 'object' && options !== null) {\n    return options\n  }\n\n  if (def !== undefined) {\n    return def\n  }\n\n  return {}\n}\n", "'use strict'\n\nconst { fromCallback } = require('catering')\nconst ModuleError = require('module-error')\nconst { getOptions, getCallback } = require('./lib/common')\n\nconst kPromise = Symbol('promise')\nconst kCallback = Symbol('callback')\nconst kWorking = Symbol('working')\nconst kHandleOne = Symbol('handleOne')\nconst kHandleMany = Symbol('handleMany')\nconst kAutoClose = Symbol('autoClose')\nconst kFinishWork = Symbol('finishWork')\nconst kReturnMany = Symbol('returnMany')\nconst kClosing = Symbol('closing')\nconst kHandleClose = Symbol('handleClose')\nconst kClosed = Symbol('closed')\nconst kCloseCallbacks = Symbol('closeCallbacks')\nconst kKeyEncoding = Symbol('keyEncoding')\nconst kValueEncoding = Symbol('valueEncoding')\nconst kAbortOnClose = Symbol('abortOnClose')\nconst kLegacy = Symbol('legacy')\nconst kKeys = Symbol('keys')\nconst kValues = Symbol('values')\nconst kLimit = Symbol('limit')\nconst kCount = Symbol('count')\n\nconst emptyOptions = Object.freeze({})\nconst noop = () => {}\nlet warnedEnd = false\n\n// This class is an internal utility for common functionality between AbstractIterator,\n// AbstractKeyIterator and AbstractValueIterator. It's not exported.\nclass CommonIterator {\n  constructor (db, options, legacy) {\n    if (typeof db !== 'object' || db === null) {\n      const hint = db === null ? 'null' : typeof db\n      throw new TypeError(`The first argument must be an abstract-level database, received ${hint}`)\n    }\n\n    if (typeof options !== 'object' || options === null) {\n      throw new TypeError('The second argument must be an options object')\n    }\n\n    this[kClosed] = false\n    this[kCloseCallbacks] = []\n    this[kWorking] = false\n    this[kClosing] = false\n    this[kAutoClose] = false\n    this[kCallback] = null\n    this[kHandleOne] = this[kHandleOne].bind(this)\n    this[kHandleMany] = this[kHandleMany].bind(this)\n    this[kHandleClose] = this[kHandleClose].bind(this)\n    this[kKeyEncoding] = options[kKeyEncoding]\n    this[kValueEncoding] = options[kValueEncoding]\n    this[kLegacy] = legacy\n    this[kLimit] = Number.isInteger(options.limit) && options.limit >= 0 ? options.limit : Infinity\n    this[kCount] = 0\n\n    // Undocumented option to abort pending work on close(). Used by the\n    // many-level module as a temporary solution to a blocked close().\n    // TODO (next major): consider making this the default behavior. Native\n    // implementations should have their own logic to safely close iterators.\n    this[kAbortOnClose] = !!options.abortOnClose\n\n    this.db = db\n    this.db.attachResource(this)\n    this.nextTick = db.nextTick\n  }\n\n  get count () {\n    return this[kCount]\n  }\n\n  get limit () {\n    return this[kLimit]\n  }\n\n  next (callback) {\n    let promise\n\n    if (callback === undefined) {\n      promise = new Promise((resolve, reject) => {\n        callback = (err, key, value) => {\n          if (err) reject(err)\n          else if (!this[kLegacy]) resolve(key)\n          else if (key === undefined && value === undefined) resolve()\n          else resolve([key, value])\n        }\n      })\n    } else if (typeof callback !== 'function') {\n      throw new TypeError('Callback must be a function')\n    }\n\n    if (this[kClosing]) {\n      this.nextTick(callback, new ModuleError('Iterator is not open: cannot call next() after close()', {\n        code: 'LEVEL_ITERATOR_NOT_OPEN'\n      }))\n    } else if (this[kWorking]) {\n      this.nextTick(callback, new ModuleError('Iterator is busy: cannot call next() until previous call has completed', {\n        code: 'LEVEL_ITERATOR_BUSY'\n      }))\n    } else {\n      this[kWorking] = true\n      this[kCallback] = callback\n\n      if (this[kCount] >= this[kLimit]) this.nextTick(this[kHandleOne], null)\n      else this._next(this[kHandleOne])\n    }\n\n    return promise\n  }\n\n  _next (callback) {\n    this.nextTick(callback)\n  }\n\n  nextv (size, options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, emptyOptions)\n\n    if (!Number.isInteger(size)) {\n      this.nextTick(callback, new TypeError(\"The first argument 'size' must be an integer\"))\n      return callback[kPromise]\n    }\n\n    if (this[kClosing]) {\n      this.nextTick(callback, new ModuleError('Iterator is not open: cannot call nextv() after close()', {\n        code: 'LEVEL_ITERATOR_NOT_OPEN'\n      }))\n    } else if (this[kWorking]) {\n      this.nextTick(callback, new ModuleError('Iterator is busy: cannot call nextv() until previous call has completed', {\n        code: 'LEVEL_ITERATOR_BUSY'\n      }))\n    } else {\n      if (size < 1) size = 1\n      if (this[kLimit] < Infinity) size = Math.min(size, this[kLimit] - this[kCount])\n\n      this[kWorking] = true\n      this[kCallback] = callback\n\n      if (size <= 0) this.nextTick(this[kHandleMany], null, [])\n      else this._nextv(size, options, this[kHandleMany])\n    }\n\n    return callback[kPromise]\n  }\n\n  _nextv (size, options, callback) {\n    const acc = []\n    const onnext = (err, key, value) => {\n      if (err) {\n        return callback(err)\n      } else if (this[kLegacy] ? key === undefined && value === undefined : key === undefined) {\n        return callback(null, acc)\n      }\n\n      acc.push(this[kLegacy] ? [key, value] : key)\n\n      if (acc.length === size) {\n        callback(null, acc)\n      } else {\n        this._next(onnext)\n      }\n    }\n\n    this._next(onnext)\n  }\n\n  all (options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, emptyOptions)\n\n    if (this[kClosing]) {\n      this.nextTick(callback, new ModuleError('Iterator is not open: cannot call all() after close()', {\n        code: 'LEVEL_ITERATOR_NOT_OPEN'\n      }))\n    } else if (this[kWorking]) {\n      this.nextTick(callback, new ModuleError('Iterator is busy: cannot call all() until previous call has completed', {\n        code: 'LEVEL_ITERATOR_BUSY'\n      }))\n    } else {\n      this[kWorking] = true\n      this[kCallback] = callback\n      this[kAutoClose] = true\n\n      if (this[kCount] >= this[kLimit]) this.nextTick(this[kHandleMany], null, [])\n      else this._all(options, this[kHandleMany])\n    }\n\n    return callback[kPromise]\n  }\n\n  _all (options, callback) {\n    // Must count here because we're directly calling _nextv()\n    let count = this[kCount]\n    const acc = []\n\n    const nextv = () => {\n      // Not configurable, because implementations should optimize _all().\n      const size = this[kLimit] < Infinity ? Math.min(1e3, this[kLimit] - count) : 1e3\n\n      if (size <= 0) {\n        this.nextTick(callback, null, acc)\n      } else {\n        this._nextv(size, emptyOptions, onnextv)\n      }\n    }\n\n    const onnextv = (err, items) => {\n      if (err) {\n        callback(err)\n      } else if (items.length === 0) {\n        callback(null, acc)\n      } else {\n        acc.push.apply(acc, items)\n        count += items.length\n        nextv()\n      }\n    }\n\n    nextv()\n  }\n\n  [kFinishWork] () {\n    const cb = this[kCallback]\n\n    // Callback will be null if work was aborted on close\n    if (this[kAbortOnClose] && cb === null) return noop\n\n    this[kWorking] = false\n    this[kCallback] = null\n\n    if (this[kClosing]) this._close(this[kHandleClose])\n\n    return cb\n  }\n\n  [kReturnMany] (cb, err, items) {\n    if (this[kAutoClose]) {\n      this.close(cb.bind(null, err, items))\n    } else {\n      cb(err, items)\n    }\n  }\n\n  seek (target, options) {\n    options = getOptions(options, emptyOptions)\n\n    if (this[kClosing]) {\n      // Don't throw here, to be kind to implementations that wrap\n      // another db and don't necessarily control when the db is closed\n    } else if (this[kWorking]) {\n      throw new ModuleError('Iterator is busy: cannot call seek() until next() has completed', {\n        code: 'LEVEL_ITERATOR_BUSY'\n      })\n    } else {\n      const keyEncoding = this.db.keyEncoding(options.keyEncoding || this[kKeyEncoding])\n      const keyFormat = keyEncoding.format\n\n      if (options.keyEncoding !== keyFormat) {\n        options = { ...options, keyEncoding: keyFormat }\n      }\n\n      const mapped = this.db.prefixKey(keyEncoding.encode(target), keyFormat)\n      this._seek(mapped, options)\n    }\n  }\n\n  _seek (target, options) {\n    throw new ModuleError('Iterator does not support seek()', {\n      code: 'LEVEL_NOT_SUPPORTED'\n    })\n  }\n\n  close (callback) {\n    callback = fromCallback(callback, kPromise)\n\n    if (this[kClosed]) {\n      this.nextTick(callback)\n    } else if (this[kClosing]) {\n      this[kCloseCallbacks].push(callback)\n    } else {\n      this[kClosing] = true\n      this[kCloseCallbacks].push(callback)\n\n      if (!this[kWorking]) {\n        this._close(this[kHandleClose])\n      } else if (this[kAbortOnClose]) {\n        // Don't wait for work to finish. Subsequently ignore the result.\n        const cb = this[kFinishWork]()\n\n        cb(new ModuleError('Aborted on iterator close()', {\n          code: 'LEVEL_ITERATOR_NOT_OPEN'\n        }))\n      }\n    }\n\n    return callback[kPromise]\n  }\n\n  _close (callback) {\n    this.nextTick(callback)\n  }\n\n  [kHandleClose] () {\n    this[kClosed] = true\n    this.db.detachResource(this)\n\n    const callbacks = this[kCloseCallbacks]\n    this[kCloseCallbacks] = []\n\n    for (const cb of callbacks) {\n      cb()\n    }\n  }\n\n  async * [Symbol.asyncIterator] () {\n    try {\n      let item\n\n      while ((item = (await this.next())) !== undefined) {\n        yield item\n      }\n    } finally {\n      if (!this[kClosed]) await this.close()\n    }\n  }\n}\n\n// For backwards compatibility this class is not (yet) called AbstractEntryIterator.\nclass AbstractIterator extends CommonIterator {\n  constructor (db, options) {\n    super(db, options, true)\n    this[kKeys] = options.keys !== false\n    this[kValues] = options.values !== false\n  }\n\n  [kHandleOne] (err, key, value) {\n    const cb = this[kFinishWork]()\n    if (err) return cb(err)\n\n    try {\n      key = this[kKeys] && key !== undefined ? this[kKeyEncoding].decode(key) : undefined\n      value = this[kValues] && value !== undefined ? this[kValueEncoding].decode(value) : undefined\n    } catch (err) {\n      return cb(new IteratorDecodeError('entry', err))\n    }\n\n    if (!(key === undefined && value === undefined)) {\n      this[kCount]++\n    }\n\n    cb(null, key, value)\n  }\n\n  [kHandleMany] (err, entries) {\n    const cb = this[kFinishWork]()\n    if (err) return this[kReturnMany](cb, err)\n\n    try {\n      for (const entry of entries) {\n        const key = entry[0]\n        const value = entry[1]\n\n        entry[0] = this[kKeys] && key !== undefined ? this[kKeyEncoding].decode(key) : undefined\n        entry[1] = this[kValues] && value !== undefined ? this[kValueEncoding].decode(value) : undefined\n      }\n    } catch (err) {\n      return this[kReturnMany](cb, new IteratorDecodeError('entries', err))\n    }\n\n    this[kCount] += entries.length\n    this[kReturnMany](cb, null, entries)\n  }\n\n  end (callback) {\n    if (!warnedEnd && typeof console !== 'undefined') {\n      warnedEnd = true\n      console.warn(new ModuleError(\n        'The iterator.end() method was renamed to close() and end() is an alias that will be removed in a future version',\n        { code: 'LEVEL_LEGACY' }\n      ))\n    }\n\n    return this.close(callback)\n  }\n}\n\nclass AbstractKeyIterator extends CommonIterator {\n  constructor (db, options) {\n    super(db, options, false)\n  }\n\n  [kHandleOne] (err, key) {\n    const cb = this[kFinishWork]()\n    if (err) return cb(err)\n\n    try {\n      key = key !== undefined ? this[kKeyEncoding].decode(key) : undefined\n    } catch (err) {\n      return cb(new IteratorDecodeError('key', err))\n    }\n\n    if (key !== undefined) this[kCount]++\n    cb(null, key)\n  }\n\n  [kHandleMany] (err, keys) {\n    const cb = this[kFinishWork]()\n    if (err) return this[kReturnMany](cb, err)\n\n    try {\n      for (let i = 0; i < keys.length; i++) {\n        const key = keys[i]\n        keys[i] = key !== undefined ? this[kKeyEncoding].decode(key) : undefined\n      }\n    } catch (err) {\n      return this[kReturnMany](cb, new IteratorDecodeError('keys', err))\n    }\n\n    this[kCount] += keys.length\n    this[kReturnMany](cb, null, keys)\n  }\n}\n\nclass AbstractValueIterator extends CommonIterator {\n  constructor (db, options) {\n    super(db, options, false)\n  }\n\n  [kHandleOne] (err, value) {\n    const cb = this[kFinishWork]()\n    if (err) return cb(err)\n\n    try {\n      value = value !== undefined ? this[kValueEncoding].decode(value) : undefined\n    } catch (err) {\n      return cb(new IteratorDecodeError('value', err))\n    }\n\n    if (value !== undefined) this[kCount]++\n    cb(null, value)\n  }\n\n  [kHandleMany] (err, values) {\n    const cb = this[kFinishWork]()\n    if (err) return this[kReturnMany](cb, err)\n\n    try {\n      for (let i = 0; i < values.length; i++) {\n        const value = values[i]\n        values[i] = value !== undefined ? this[kValueEncoding].decode(value) : undefined\n      }\n    } catch (err) {\n      return this[kReturnMany](cb, new IteratorDecodeError('values', err))\n    }\n\n    this[kCount] += values.length\n    this[kReturnMany](cb, null, values)\n  }\n}\n\n// Internal utility, not typed or exported\nclass IteratorDecodeError extends ModuleError {\n  constructor (subject, cause) {\n    super(`Iterator could not decode ${subject}`, {\n      code: 'LEVEL_DECODE_ERROR',\n      cause\n    })\n  }\n}\n\n// To help migrating to abstract-level\nfor (const k of ['_ended property', '_nexting property', '_end method']) {\n  Object.defineProperty(AbstractIterator.prototype, k.split(' ')[0], {\n    get () { throw new ModuleError(`The ${k} has been removed`, { code: 'LEVEL_LEGACY' }) },\n    set () { throw new ModuleError(`The ${k} has been removed`, { code: 'LEVEL_LEGACY' }) }\n  })\n}\n\n// Exposed so that AbstractLevel can set these options\nAbstractIterator.keyEncoding = kKeyEncoding\nAbstractIterator.valueEncoding = kValueEncoding\n\nexports.AbstractIterator = AbstractIterator\nexports.AbstractKeyIterator = AbstractKeyIterator\nexports.AbstractValueIterator = AbstractValueIterator\n", "'use strict'\n\nconst { AbstractKeyIterator, AbstractValueIterator } = require('../abstract-iterator')\n\nconst kIterator = Symbol('iterator')\nconst kCallback = Symbol('callback')\nconst kHandleOne = Symbol('handleOne')\nconst kHandleMany = Symbol('handleMany')\n\nclass DefaultKeyIterator extends AbstractKeyIterator {\n  constructor (db, options) {\n    super(db, options)\n\n    this[kIterator] = db.iterator({ ...options, keys: true, values: false })\n    this[kHandleOne] = this[kHandleOne].bind(this)\n    this[kHandleMany] = this[kHandleMany].bind(this)\n  }\n}\n\nclass DefaultValueIterator extends AbstractValueIterator {\n  constructor (db, options) {\n    super(db, options)\n\n    this[kIterator] = db.iterator({ ...options, keys: false, values: true })\n    this[kHandleOne] = this[kHandleOne].bind(this)\n    this[kHandleMany] = this[kHandleMany].bind(this)\n  }\n}\n\nfor (const Iterator of [DefaultKeyIterator, DefaultValueIterator]) {\n  const keys = Iterator === DefaultKeyIterator\n  const mapEntry = keys ? (entry) => entry[0] : (entry) => entry[1]\n\n  Iterator.prototype._next = function (callback) {\n    this[kCallback] = callback\n    this[kIterator].next(this[kHandleOne])\n  }\n\n  Iterator.prototype[kHandleOne] = function (err, key, value) {\n    const callback = this[kCallback]\n    if (err) callback(err)\n    else callback(null, keys ? key : value)\n  }\n\n  Iterator.prototype._nextv = function (size, options, callback) {\n    this[kCallback] = callback\n    this[kIterator].nextv(size, options, this[kHandleMany])\n  }\n\n  Iterator.prototype._all = function (options, callback) {\n    this[kCallback] = callback\n    this[kIterator].all(options, this[kHandleMany])\n  }\n\n  Iterator.prototype[kHandleMany] = function (err, entries) {\n    const callback = this[kCallback]\n    if (err) callback(err)\n    else callback(null, entries.map(mapEntry))\n  }\n\n  Iterator.prototype._seek = function (target, options) {\n    this[kIterator].seek(target, options)\n  }\n\n  Iterator.prototype._close = function (callback) {\n    this[kIterator].close(callback)\n  }\n}\n\n// Internal utilities, should be typed as AbstractKeyIterator and AbstractValueIterator\nexports.DefaultKeyIterator = DefaultKeyIterator\nexports.DefaultValueIterator = DefaultValueIterator\n", "'use strict'\n\nconst { AbstractIterator, AbstractKeyIterator, AbstractValueIterator } = require('../abstract-iterator')\nconst ModuleError = require('module-error')\n\nconst kNut = Symbol('nut')\nconst kUndefer = Symbol('undefer')\nconst kFactory = Symbol('factory')\n\nclass DeferredIterator extends AbstractIterator {\n  constructor (db, options) {\n    super(db, options)\n\n    this[kNut] = null\n    this[kFactory] = () => db.iterator(options)\n\n    this.db.defer(() => this[kUndefer]())\n  }\n}\n\nclass DeferredKeyIterator extends AbstractKeyIterator {\n  constructor (db, options) {\n    super(db, options)\n\n    this[kNut] = null\n    this[kFactory] = () => db.keys(options)\n\n    this.db.defer(() => this[kUndefer]())\n  }\n}\n\nclass DeferredValueIterator extends AbstractValueIterator {\n  constructor (db, options) {\n    super(db, options)\n\n    this[kNut] = null\n    this[kFactory] = () => db.values(options)\n\n    this.db.defer(() => this[kUndefer]())\n  }\n}\n\nfor (const Iterator of [DeferredIterator, DeferredKeyIterator, DeferredValueIterator]) {\n  Iterator.prototype[kUndefer] = function () {\n    if (this.db.status === 'open') {\n      this[kNut] = this[kFactory]()\n    }\n  }\n\n  Iterator.prototype._next = function (callback) {\n    if (this[kNut] !== null) {\n      this[kNut].next(callback)\n    } else if (this.db.status === 'opening') {\n      this.db.defer(() => this._next(callback))\n    } else {\n      this.nextTick(callback, new ModuleError('Iterator is not open: cannot call next() after close()', {\n        code: 'LEVEL_ITERATOR_NOT_OPEN'\n      }))\n    }\n  }\n\n  Iterator.prototype._nextv = function (size, options, callback) {\n    if (this[kNut] !== null) {\n      this[kNut].nextv(size, options, callback)\n    } else if (this.db.status === 'opening') {\n      this.db.defer(() => this._nextv(size, options, callback))\n    } else {\n      this.nextTick(callback, new ModuleError('Iterator is not open: cannot call nextv() after close()', {\n        code: 'LEVEL_ITERATOR_NOT_OPEN'\n      }))\n    }\n  }\n\n  Iterator.prototype._all = function (options, callback) {\n    if (this[kNut] !== null) {\n      this[kNut].all(callback)\n    } else if (this.db.status === 'opening') {\n      this.db.defer(() => this._all(options, callback))\n    } else {\n      this.nextTick(callback, new ModuleError('Iterator is not open: cannot call all() after close()', {\n        code: 'LEVEL_ITERATOR_NOT_OPEN'\n      }))\n    }\n  }\n\n  Iterator.prototype._seek = function (target, options) {\n    if (this[kNut] !== null) {\n      // TODO: explain why we need _seek() rather than seek() here\n      this[kNut]._seek(target, options)\n    } else if (this.db.status === 'opening') {\n      this.db.defer(() => this._seek(target, options))\n    }\n  }\n\n  Iterator.prototype._close = function (callback) {\n    if (this[kNut] !== null) {\n      this[kNut].close(callback)\n    } else if (this.db.status === 'opening') {\n      this.db.defer(() => this._close(callback))\n    } else {\n      this.nextTick(callback)\n    }\n  }\n}\n\nexports.DeferredIterator = DeferredIterator\nexports.DeferredKeyIterator = DeferredKeyIterator\nexports.DeferredValueIterator = DeferredValueIterator\n", "'use strict'\n\nconst { fromCallback } = require('catering')\nconst ModuleError = require('module-error')\nconst { getCallback, getOptions } = require('./lib/common')\n\nconst kPromise = Symbol('promise')\nconst kStatus = Symbol('status')\nconst kOperations = Symbol('operations')\nconst kFinishClose = Symbol('finishClose')\nconst kCloseCallbacks = Symbol('closeCallbacks')\n\nclass AbstractChainedBatch {\n  constructor (db) {\n    if (typeof db !== 'object' || db === null) {\n      const hint = db === null ? 'null' : typeof db\n      throw new TypeError(`The first argument must be an abstract-level database, received ${hint}`)\n    }\n\n    this[kOperations] = []\n    this[kCloseCallbacks] = []\n    this[kStatus] = 'open'\n    this[kFinishClose] = this[kFinishClose].bind(this)\n\n    this.db = db\n    this.db.attachResource(this)\n    this.nextTick = db.nextTick\n  }\n\n  get length () {\n    return this[kOperations].length\n  }\n\n  put (key, value, options) {\n    if (this[kStatus] !== 'open') {\n      throw new ModuleError('Batch is not open: cannot call put() after write() or close()', {\n        code: 'LEVEL_BATCH_NOT_OPEN'\n      })\n    }\n\n    const err = this.db._checkKey(key) || this.db._checkValue(value)\n    if (err) throw err\n\n    const db = options && options.sublevel != null ? options.sublevel : this.db\n    const original = options\n    const keyEncoding = db.keyEncoding(options && options.keyEncoding)\n    const valueEncoding = db.valueEncoding(options && options.valueEncoding)\n    const keyFormat = keyEncoding.format\n\n    // Forward encoding options\n    options = { ...options, keyEncoding: keyFormat, valueEncoding: valueEncoding.format }\n\n    // Prevent double prefixing\n    if (db !== this.db) {\n      options.sublevel = null\n    }\n\n    const mappedKey = db.prefixKey(keyEncoding.encode(key), keyFormat)\n    const mappedValue = valueEncoding.encode(value)\n\n    this._put(mappedKey, mappedValue, options)\n    this[kOperations].push({ ...original, type: 'put', key, value })\n\n    return this\n  }\n\n  _put (key, value, options) {}\n\n  del (key, options) {\n    if (this[kStatus] !== 'open') {\n      throw new ModuleError('Batch is not open: cannot call del() after write() or close()', {\n        code: 'LEVEL_BATCH_NOT_OPEN'\n      })\n    }\n\n    const err = this.db._checkKey(key)\n    if (err) throw err\n\n    const db = options && options.sublevel != null ? options.sublevel : this.db\n    const original = options\n    const keyEncoding = db.keyEncoding(options && options.keyEncoding)\n    const keyFormat = keyEncoding.format\n\n    // Forward encoding options\n    options = { ...options, keyEncoding: keyFormat }\n\n    // Prevent double prefixing\n    if (db !== this.db) {\n      options.sublevel = null\n    }\n\n    this._del(db.prefixKey(keyEncoding.encode(key), keyFormat), options)\n    this[kOperations].push({ ...original, type: 'del', key })\n\n    return this\n  }\n\n  _del (key, options) {}\n\n  clear () {\n    if (this[kStatus] !== 'open') {\n      throw new ModuleError('Batch is not open: cannot call clear() after write() or close()', {\n        code: 'LEVEL_BATCH_NOT_OPEN'\n      })\n    }\n\n    this._clear()\n    this[kOperations] = []\n\n    return this\n  }\n\n  _clear () {}\n\n  write (options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options)\n\n    if (this[kStatus] !== 'open') {\n      this.nextTick(callback, new ModuleError('Batch is not open: cannot call write() after write() or close()', {\n        code: 'LEVEL_BATCH_NOT_OPEN'\n      }))\n    } else if (this.length === 0) {\n      this.close(callback)\n    } else {\n      this[kStatus] = 'writing'\n      this._write(options, (err) => {\n        this[kStatus] = 'closing'\n        this[kCloseCallbacks].push(() => callback(err))\n\n        // Emit after setting 'closing' status, because event may trigger a\n        // db close which in turn triggers (idempotently) closing this batch.\n        if (!err) this.db.emit('batch', this[kOperations])\n\n        this._close(this[kFinishClose])\n      })\n    }\n\n    return callback[kPromise]\n  }\n\n  _write (options, callback) {}\n\n  close (callback) {\n    callback = fromCallback(callback, kPromise)\n\n    if (this[kStatus] === 'closing') {\n      this[kCloseCallbacks].push(callback)\n    } else if (this[kStatus] === 'closed') {\n      this.nextTick(callback)\n    } else {\n      this[kCloseCallbacks].push(callback)\n\n      if (this[kStatus] !== 'writing') {\n        this[kStatus] = 'closing'\n        this._close(this[kFinishClose])\n      }\n    }\n\n    return callback[kPromise]\n  }\n\n  _close (callback) {\n    this.nextTick(callback)\n  }\n\n  [kFinishClose] () {\n    this[kStatus] = 'closed'\n    this.db.detachResource(this)\n\n    const callbacks = this[kCloseCallbacks]\n    this[kCloseCallbacks] = []\n\n    for (const cb of callbacks) {\n      cb()\n    }\n  }\n}\n\nexports.AbstractChainedBatch = AbstractChainedBatch\n", "'use strict'\n\nconst { AbstractChainedBatch } = require('../abstract-chained-batch')\nconst ModuleError = require('module-error')\nconst kEncoded = Symbol('encoded')\n\n// Functional default for chained batch, with support of deferred open\nclass DefaultChainedBatch extends AbstractChainedBatch {\n  constructor (db) {\n    super(db)\n    this[kEncoded] = []\n  }\n\n  _put (key, value, options) {\n    this[kEncoded].push({ ...options, type: 'put', key, value })\n  }\n\n  _del (key, options) {\n    this[kEncoded].push({ ...options, type: 'del', key })\n  }\n\n  _clear () {\n    this[kEncoded] = []\n  }\n\n  // Assumes this[kEncoded] cannot change after write()\n  _write (options, callback) {\n    if (this.db.status === 'opening') {\n      this.db.defer(() => this._write(options, callback))\n    } else if (this.db.status === 'open') {\n      if (this[kEncoded].length === 0) this.nextTick(callback)\n      else this.db._batch(this[kEncoded], options, callback)\n    } else {\n      this.nextTick(callback, new ModuleError('Batch is not open: cannot call write() after write() or close()', {\n        code: 'LEVEL_BATCH_NOT_OPEN'\n      }))\n    }\n  }\n}\n\nexports.DefaultChainedBatch = DefaultChainedBatch\n", "'use strict'\n\nconst ModuleError = require('module-error')\nconst hasOwnProperty = Object.prototype.hasOwnProperty\nconst rangeOptions = new Set(['lt', 'lte', 'gt', 'gte'])\n\nmodule.exports = function (options, keyEncoding) {\n  const result = {}\n\n  for (const k in options) {\n    if (!hasOwnProperty.call(options, k)) continue\n    if (k === 'keyEncoding' || k === 'valueEncoding') continue\n\n    if (k === 'start' || k === 'end') {\n      throw new ModuleError(`The legacy range option '${k}' has been removed`, {\n        code: 'LEVEL_LEGACY'\n      })\n    } else if (k === 'encoding') {\n      // To help migrating to abstract-level\n      throw new ModuleError(\"The levelup-style 'encoding' alias has been removed, use 'valueEncoding' instead\", {\n        code: 'LEVEL_LEGACY'\n      })\n    }\n\n    if (rangeOptions.has(k)) {\n      // Note that we don't reject nullish and empty options here. While\n      // those types are invalid as keys, they are valid as range options.\n      result[k] = keyEncoding.encode(options[k])\n    } else {\n      result[k] = options[k]\n    }\n  }\n\n  result.reverse = !!result.reverse\n  result.limit = Number.isInteger(result.limit) && result.limit >= 0 ? result.limit : -1\n\n  return result\n}\n", "/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nlet promise\n\nmodule.exports = typeof queueMicrotask === 'function'\n  ? queueMicrotask.bind(typeof window !== 'undefined' ? window : global)\n  // reuse resolved promise, and allocate it lazily\n  : cb => (promise || (promise = Promise.resolve()))\n    .then(cb)\n    .catch(err => setTimeout(() => { throw err }, 0))\n", "'use strict'\n\nconst queueMicrotask = require('queue-microtask')\n\nmodule.exports = function (fn, ...args) {\n  if (args.length === 0) {\n    queueMicrotask(fn)\n  } else {\n    queueMicrotask(() => fn(...args))\n  }\n}\n", "'use strict'\n\nconst { AbstractIterator, AbstractKeyIterator, AbstractValueIterator } = require('../abstract-iterator')\n\nconst kUnfix = Symbol('unfix')\nconst kIterator = Symbol('iterator')\nconst kHandleOne = Symbol('handleOne')\nconst kHandleMany = Symbol('handleMany')\nconst kCallback = Symbol('callback')\n\n// TODO: unfix natively if db supports it\nclass AbstractSublevelIterator extends AbstractIterator {\n  constructor (db, options, iterator, unfix) {\n    super(db, options)\n\n    this[kIterator] = iterator\n    this[kUnfix] = unfix\n    this[kHandleOne] = this[kHandleOne].bind(this)\n    this[kHandleMany] = this[kHandleMany].bind(this)\n    this[kCallback] = null\n  }\n\n  [kHandleOne] (err, key, value) {\n    const callback = this[kCallback]\n    if (err) return callback(err)\n    if (key !== undefined) key = this[kUnfix](key)\n    callback(err, key, value)\n  }\n\n  [kHandleMany] (err, entries) {\n    const callback = this[kCallback]\n    if (err) return callback(err)\n\n    for (const entry of entries) {\n      const key = entry[0]\n      if (key !== undefined) entry[0] = this[kUnfix](key)\n    }\n\n    callback(err, entries)\n  }\n}\n\nclass AbstractSublevelKeyIterator extends AbstractKeyIterator {\n  constructor (db, options, iterator, unfix) {\n    super(db, options)\n\n    this[kIterator] = iterator\n    this[kUnfix] = unfix\n    this[kHandleOne] = this[kHandleOne].bind(this)\n    this[kHandleMany] = this[kHandleMany].bind(this)\n    this[kCallback] = null\n  }\n\n  [kHandleOne] (err, key) {\n    const callback = this[kCallback]\n    if (err) return callback(err)\n    if (key !== undefined) key = this[kUnfix](key)\n    callback(err, key)\n  }\n\n  [kHandleMany] (err, keys) {\n    const callback = this[kCallback]\n    if (err) return callback(err)\n\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i]\n      if (key !== undefined) keys[i] = this[kUnfix](key)\n    }\n\n    callback(err, keys)\n  }\n}\n\nclass AbstractSublevelValueIterator extends AbstractValueIterator {\n  constructor (db, options, iterator) {\n    super(db, options)\n    this[kIterator] = iterator\n  }\n}\n\nfor (const Iterator of [AbstractSublevelIterator, AbstractSublevelKeyIterator]) {\n  Iterator.prototype._next = function (callback) {\n    this[kCallback] = callback\n    this[kIterator].next(this[kHandleOne])\n  }\n\n  Iterator.prototype._nextv = function (size, options, callback) {\n    this[kCallback] = callback\n    this[kIterator].nextv(size, options, this[kHandleMany])\n  }\n\n  Iterator.prototype._all = function (options, callback) {\n    this[kCallback] = callback\n    this[kIterator].all(options, this[kHandleMany])\n  }\n}\n\nfor (const Iterator of [AbstractSublevelValueIterator]) {\n  Iterator.prototype._next = function (callback) {\n    this[kIterator].next(callback)\n  }\n\n  Iterator.prototype._nextv = function (size, options, callback) {\n    this[kIterator].nextv(size, options, callback)\n  }\n\n  Iterator.prototype._all = function (options, callback) {\n    this[kIterator].all(options, callback)\n  }\n}\n\nfor (const Iterator of [AbstractSublevelIterator, AbstractSublevelKeyIterator, AbstractSublevelValueIterator]) {\n  Iterator.prototype._seek = function (target, options) {\n    this[kIterator].seek(target, options)\n  }\n\n  Iterator.prototype._close = function (callback) {\n    this[kIterator].close(callback)\n  }\n}\n\nexports.AbstractSublevelIterator = AbstractSublevelIterator\nexports.AbstractSublevelKeyIterator = AbstractSublevelKeyIterator\nexports.AbstractSublevelValueIterator = AbstractSublevelValueIterator\n", "'use strict'\n\nconst ModuleError = require('module-error')\nconst { Buffer } = require('buffer') || {}\nconst {\n  AbstractSublevelIterator,\n  AbstractSublevelKeyIterator,\n  AbstractSublevelValueIterator\n} = require('./abstract-sublevel-iterator')\n\nconst kPrefix = Symbol('prefix')\nconst kUpperBound = Symbol('upperBound')\nconst kPrefixRange = Symbol('prefixRange')\nconst kParent = Symbol('parent')\nconst kUnfix = Symbol('unfix')\n\nconst textEncoder = new TextEncoder()\nconst defaults = { separator: '!' }\n\n// Wrapped to avoid circular dependency\nmodule.exports = function ({ AbstractLevel }) {\n  class AbstractSublevel extends AbstractLevel {\n    static defaults (options) {\n      // To help migrating from subleveldown to abstract-level\n      if (typeof options === 'string') {\n        throw new ModuleError('The subleveldown string shorthand for { separator } has been removed', {\n          code: 'LEVEL_LEGACY'\n        })\n      } else if (options && options.open) {\n        throw new ModuleError('The subleveldown open option has been removed', {\n          code: 'LEVEL_LEGACY'\n        })\n      }\n\n      if (options == null) {\n        return defaults\n      } else if (!options.separator) {\n        return { ...options, separator: '!' }\n      } else {\n        return options\n      }\n    }\n\n    // TODO: add autoClose option, which if true, does parent.attachResource(this)\n    constructor (db, name, options) {\n      // Don't forward AbstractSublevel options to AbstractLevel\n      const { separator, manifest, ...forward } = AbstractSublevel.defaults(options)\n      name = trim(name, separator)\n\n      // Reserve one character between separator and name to give us an upper bound\n      const reserved = separator.charCodeAt(0) + 1\n      const parent = db[kParent] || db\n\n      // Keys should sort like ['!a!', '!a!!a!', '!a\"', '!aa!', '!b!'].\n      // Use ASCII for consistent length between string, Buffer and Uint8Array\n      if (!textEncoder.encode(name).every(x => x > reserved && x < 127)) {\n        throw new ModuleError(`Prefix must use bytes > ${reserved} < ${127}`, {\n          code: 'LEVEL_INVALID_PREFIX'\n        })\n      }\n\n      super(mergeManifests(parent, manifest), forward)\n\n      const prefix = (db.prefix || '') + separator + name + separator\n      const upperBound = prefix.slice(0, -1) + String.fromCharCode(reserved)\n\n      this[kParent] = parent\n      this[kPrefix] = new MultiFormat(prefix)\n      this[kUpperBound] = new MultiFormat(upperBound)\n      this[kUnfix] = new Unfixer()\n\n      this.nextTick = parent.nextTick\n    }\n\n    prefixKey (key, keyFormat) {\n      if (keyFormat === 'utf8') {\n        return this[kPrefix].utf8 + key\n      } else if (key.byteLength === 0) {\n        // Fast path for empty key (no copy)\n        return this[kPrefix][keyFormat]\n      } else if (keyFormat === 'view') {\n        const view = this[kPrefix].view\n        const result = new Uint8Array(view.byteLength + key.byteLength)\n\n        result.set(view, 0)\n        result.set(key, view.byteLength)\n\n        return result\n      } else {\n        const buffer = this[kPrefix].buffer\n        return Buffer.concat([buffer, key], buffer.byteLength + key.byteLength)\n      }\n    }\n\n    // Not exposed for now.\n    [kPrefixRange] (range, keyFormat) {\n      if (range.gte !== undefined) {\n        range.gte = this.prefixKey(range.gte, keyFormat)\n      } else if (range.gt !== undefined) {\n        range.gt = this.prefixKey(range.gt, keyFormat)\n      } else {\n        range.gte = this[kPrefix][keyFormat]\n      }\n\n      if (range.lte !== undefined) {\n        range.lte = this.prefixKey(range.lte, keyFormat)\n      } else if (range.lt !== undefined) {\n        range.lt = this.prefixKey(range.lt, keyFormat)\n      } else {\n        range.lte = this[kUpperBound][keyFormat]\n      }\n    }\n\n    get prefix () {\n      return this[kPrefix].utf8\n    }\n\n    get db () {\n      return this[kParent]\n    }\n\n    _open (options, callback) {\n      // The parent db must open itself or be (re)opened by the user because\n      // a sublevel should not initiate state changes on the rest of the db.\n      this[kParent].open({ passive: true }, callback)\n    }\n\n    _put (key, value, options, callback) {\n      this[kParent].put(key, value, options, callback)\n    }\n\n    _get (key, options, callback) {\n      this[kParent].get(key, options, callback)\n    }\n\n    _getMany (keys, options, callback) {\n      this[kParent].getMany(keys, options, callback)\n    }\n\n    _del (key, options, callback) {\n      this[kParent].del(key, options, callback)\n    }\n\n    _batch (operations, options, callback) {\n      this[kParent].batch(operations, options, callback)\n    }\n\n    _clear (options, callback) {\n      // TODO (refactor): move to AbstractLevel\n      this[kPrefixRange](options, options.keyEncoding)\n      this[kParent].clear(options, callback)\n    }\n\n    _iterator (options) {\n      // TODO (refactor): move to AbstractLevel\n      this[kPrefixRange](options, options.keyEncoding)\n      const iterator = this[kParent].iterator(options)\n      const unfix = this[kUnfix].get(this[kPrefix].utf8.length, options.keyEncoding)\n      return new AbstractSublevelIterator(this, options, iterator, unfix)\n    }\n\n    _keys (options) {\n      this[kPrefixRange](options, options.keyEncoding)\n      const iterator = this[kParent].keys(options)\n      const unfix = this[kUnfix].get(this[kPrefix].utf8.length, options.keyEncoding)\n      return new AbstractSublevelKeyIterator(this, options, iterator, unfix)\n    }\n\n    _values (options) {\n      this[kPrefixRange](options, options.keyEncoding)\n      const iterator = this[kParent].values(options)\n      return new AbstractSublevelValueIterator(this, options, iterator)\n    }\n  }\n\n  return { AbstractSublevel }\n}\n\nconst mergeManifests = function (parent, manifest) {\n  return {\n    // Inherit manifest of parent db\n    ...parent.supports,\n\n    // Disable unsupported features\n    createIfMissing: false,\n    errorIfExists: false,\n\n    // Unset additional events because we're not forwarding them\n    events: {},\n\n    // Unset additional methods (like approximateSize) which we can't support here unless\n    // the AbstractSublevel class is overridden by an implementation of `abstract-level`.\n    additionalMethods: {},\n\n    // Inherit manifest of custom AbstractSublevel subclass. Such a class is not\n    // allowed to override encodings.\n    ...manifest,\n\n    encodings: {\n      utf8: supportsEncoding(parent, 'utf8'),\n      buffer: supportsEncoding(parent, 'buffer'),\n      view: supportsEncoding(parent, 'view')\n    }\n  }\n}\n\nconst supportsEncoding = function (parent, encoding) {\n  // Prefer a non-transcoded encoding for optimal performance\n  return parent.supports.encodings[encoding]\n    ? parent.keyEncoding(encoding).name === encoding\n    : false\n}\n\nclass MultiFormat {\n  constructor (key) {\n    this.utf8 = key\n    this.view = textEncoder.encode(key)\n    this.buffer = Buffer ? Buffer.from(this.view.buffer, 0, this.view.byteLength) : {}\n  }\n}\n\nclass Unfixer {\n  constructor () {\n    this.cache = new Map()\n  }\n\n  get (prefixLength, keyFormat) {\n    let unfix = this.cache.get(keyFormat)\n\n    if (unfix === undefined) {\n      if (keyFormat === 'view') {\n        unfix = function (prefixLength, key) {\n          // Avoid Uint8Array#slice() because it copies\n          return key.subarray(prefixLength)\n        }.bind(null, prefixLength)\n      } else {\n        unfix = function (prefixLength, key) {\n          // Avoid Buffer#subarray() because it's slow\n          return key.slice(prefixLength)\n        }.bind(null, prefixLength)\n      }\n\n      this.cache.set(keyFormat, unfix)\n    }\n\n    return unfix\n  }\n}\n\nconst trim = function (str, char) {\n  let start = 0\n  let end = str.length\n\n  while (start < end && str[start] === char) start++\n  while (end > start && str[end - 1] === char) end--\n\n  return str.slice(start, end)\n}\n", "'use strict'\n\nconst { supports } = require('level-supports')\nconst { Transcoder } = require('level-transcoder')\nconst { EventEmitter } = require('events')\nconst { fromCallback } = require('catering')\nconst ModuleError = require('module-error')\nconst { AbstractIterator } = require('./abstract-iterator')\nconst { DefaultKeyIterator, DefaultValueIterator } = require('./lib/default-kv-iterator')\nconst { DeferredIterator, DeferredKeyIterator, DeferredValueIterator } = require('./lib/deferred-iterator')\nconst { DefaultChainedBatch } = require('./lib/default-chained-batch')\nconst { getCallback, getOptions } = require('./lib/common')\nconst rangeOptions = require('./lib/range-options')\n\nconst kPromise = Symbol('promise')\nconst kLanded = Symbol('landed')\nconst kResources = Symbol('resources')\nconst kCloseResources = Symbol('closeResources')\nconst kOperations = Symbol('operations')\nconst kUndefer = Symbol('undefer')\nconst kDeferOpen = Symbol('deferOpen')\nconst kOptions = Symbol('options')\nconst kStatus = Symbol('status')\nconst kDefaultOptions = Symbol('defaultOptions')\nconst kTranscoder = Symbol('transcoder')\nconst kKeyEncoding = Symbol('keyEncoding')\nconst kValueEncoding = Symbol('valueEncoding')\nconst noop = () => {}\n\nclass AbstractLevel extends EventEmitter {\n  constructor (manifest, options) {\n    super()\n\n    if (typeof manifest !== 'object' || manifest === null) {\n      throw new TypeError(\"The first argument 'manifest' must be an object\")\n    }\n\n    options = getOptions(options)\n    const { keyEncoding, valueEncoding, passive, ...forward } = options\n\n    this[kResources] = new Set()\n    this[kOperations] = []\n    this[kDeferOpen] = true\n    this[kOptions] = forward\n    this[kStatus] = 'opening'\n\n    this.supports = supports(manifest, {\n      status: true,\n      promises: true,\n      clear: true,\n      getMany: true,\n      deferredOpen: true,\n\n      // TODO (next major): add seek\n      snapshots: manifest.snapshots !== false,\n      permanence: manifest.permanence !== false,\n\n      // TODO: remove from level-supports because it's always supported\n      keyIterator: true,\n      valueIterator: true,\n      iteratorNextv: true,\n      iteratorAll: true,\n\n      encodings: manifest.encodings || {},\n      events: Object.assign({}, manifest.events, {\n        opening: true,\n        open: true,\n        closing: true,\n        closed: true,\n        put: true,\n        del: true,\n        batch: true,\n        clear: true\n      })\n    })\n\n    this[kTranscoder] = new Transcoder(formats(this))\n    this[kKeyEncoding] = this[kTranscoder].encoding(keyEncoding || 'utf8')\n    this[kValueEncoding] = this[kTranscoder].encoding(valueEncoding || 'utf8')\n\n    // Add custom and transcoder encodings to manifest\n    for (const encoding of this[kTranscoder].encodings()) {\n      if (!this.supports.encodings[encoding.commonName]) {\n        this.supports.encodings[encoding.commonName] = true\n      }\n    }\n\n    this[kDefaultOptions] = {\n      empty: Object.freeze({}),\n      entry: Object.freeze({\n        keyEncoding: this[kKeyEncoding].commonName,\n        valueEncoding: this[kValueEncoding].commonName\n      }),\n      key: Object.freeze({\n        keyEncoding: this[kKeyEncoding].commonName\n      })\n    }\n\n    // Let subclass finish its constructor\n    this.nextTick(() => {\n      if (this[kDeferOpen]) {\n        this.open({ passive: false }, noop)\n      }\n    })\n  }\n\n  get status () {\n    return this[kStatus]\n  }\n\n  keyEncoding (encoding) {\n    return this[kTranscoder].encoding(encoding != null ? encoding : this[kKeyEncoding])\n  }\n\n  valueEncoding (encoding) {\n    return this[kTranscoder].encoding(encoding != null ? encoding : this[kValueEncoding])\n  }\n\n  open (options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n\n    options = { ...this[kOptions], ...getOptions(options) }\n\n    options.createIfMissing = options.createIfMissing !== false\n    options.errorIfExists = !!options.errorIfExists\n\n    const maybeOpened = (err) => {\n      if (this[kStatus] === 'closing' || this[kStatus] === 'opening') {\n        // Wait until pending state changes are done\n        this.once(kLanded, err ? () => maybeOpened(err) : maybeOpened)\n      } else if (this[kStatus] !== 'open') {\n        callback(new ModuleError('Database is not open', {\n          code: 'LEVEL_DATABASE_NOT_OPEN',\n          cause: err\n        }))\n      } else {\n        callback()\n      }\n    }\n\n    if (options.passive) {\n      if (this[kStatus] === 'opening') {\n        this.once(kLanded, maybeOpened)\n      } else {\n        this.nextTick(maybeOpened)\n      }\n    } else if (this[kStatus] === 'closed' || this[kDeferOpen]) {\n      this[kDeferOpen] = false\n      this[kStatus] = 'opening'\n      this.emit('opening')\n\n      this._open(options, (err) => {\n        if (err) {\n          this[kStatus] = 'closed'\n\n          // Resources must be safe to close in any db state\n          this[kCloseResources](() => {\n            this.emit(kLanded)\n            maybeOpened(err)\n          })\n\n          this[kUndefer]()\n          return\n        }\n\n        this[kStatus] = 'open'\n        this[kUndefer]()\n        this.emit(kLanded)\n\n        // Only emit public event if pending state changes are done\n        if (this[kStatus] === 'open') this.emit('open')\n\n        // TODO (next major): remove this alias\n        if (this[kStatus] === 'open') this.emit('ready')\n\n        maybeOpened()\n      })\n    } else if (this[kStatus] === 'open') {\n      this.nextTick(maybeOpened)\n    } else {\n      this.once(kLanded, () => this.open(options, callback))\n    }\n\n    return callback[kPromise]\n  }\n\n  _open (options, callback) {\n    this.nextTick(callback)\n  }\n\n  close (callback) {\n    callback = fromCallback(callback, kPromise)\n\n    const maybeClosed = (err) => {\n      if (this[kStatus] === 'opening' || this[kStatus] === 'closing') {\n        // Wait until pending state changes are done\n        this.once(kLanded, err ? maybeClosed(err) : maybeClosed)\n      } else if (this[kStatus] !== 'closed') {\n        callback(new ModuleError('Database is not closed', {\n          code: 'LEVEL_DATABASE_NOT_CLOSED',\n          cause: err\n        }))\n      } else {\n        callback()\n      }\n    }\n\n    if (this[kStatus] === 'open') {\n      this[kStatus] = 'closing'\n      this.emit('closing')\n\n      const cancel = (err) => {\n        this[kStatus] = 'open'\n        this[kUndefer]()\n        this.emit(kLanded)\n        maybeClosed(err)\n      }\n\n      this[kCloseResources](() => {\n        this._close((err) => {\n          if (err) return cancel(err)\n\n          this[kStatus] = 'closed'\n          this[kUndefer]()\n          this.emit(kLanded)\n\n          // Only emit public event if pending state changes are done\n          if (this[kStatus] === 'closed') this.emit('closed')\n\n          maybeClosed()\n        })\n      })\n    } else if (this[kStatus] === 'closed') {\n      this.nextTick(maybeClosed)\n    } else {\n      this.once(kLanded, () => this.close(callback))\n    }\n\n    return callback[kPromise]\n  }\n\n  [kCloseResources] (callback) {\n    if (this[kResources].size === 0) {\n      return this.nextTick(callback)\n    }\n\n    let pending = this[kResources].size\n    let sync = true\n\n    const next = () => {\n      if (--pending === 0) {\n        // We don't have tests for generic resources, so dezalgo\n        if (sync) this.nextTick(callback)\n        else callback()\n      }\n    }\n\n    // In parallel so that all resources know they are closed\n    for (const resource of this[kResources]) {\n      resource.close(next)\n    }\n\n    sync = false\n    this[kResources].clear()\n  }\n\n  _close (callback) {\n    this.nextTick(callback)\n  }\n\n  get (key, options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, this[kDefaultOptions].entry)\n\n    if (this[kStatus] === 'opening') {\n      this.defer(() => this.get(key, options, callback))\n      return callback[kPromise]\n    }\n\n    if (maybeError(this, callback)) {\n      return callback[kPromise]\n    }\n\n    const err = this._checkKey(key)\n\n    if (err) {\n      this.nextTick(callback, err)\n      return callback[kPromise]\n    }\n\n    const keyEncoding = this.keyEncoding(options.keyEncoding)\n    const valueEncoding = this.valueEncoding(options.valueEncoding)\n    const keyFormat = keyEncoding.format\n    const valueFormat = valueEncoding.format\n\n    // Forward encoding options to the underlying store\n    if (options.keyEncoding !== keyFormat || options.valueEncoding !== valueFormat) {\n      // Avoid spread operator because of https://bugs.chromium.org/p/chromium/issues/detail?id=1204540\n      options = Object.assign({}, options, { keyEncoding: keyFormat, valueEncoding: valueFormat })\n    }\n\n    this._get(this.prefixKey(keyEncoding.encode(key), keyFormat), options, (err, value) => {\n      if (err) {\n        // Normalize not found error for backwards compatibility with abstract-leveldown and level(up)\n        if (err.code === 'LEVEL_NOT_FOUND' || err.notFound || /NotFound/i.test(err)) {\n          if (!err.code) err.code = 'LEVEL_NOT_FOUND' // Preferred way going forward\n          if (!err.notFound) err.notFound = true // Same as level-errors\n          if (!err.status) err.status = 404 // Same as level-errors\n        }\n\n        return callback(err)\n      }\n\n      try {\n        value = valueEncoding.decode(value)\n      } catch (err) {\n        return callback(new ModuleError('Could not decode value', {\n          code: 'LEVEL_DECODE_ERROR',\n          cause: err\n        }))\n      }\n\n      callback(null, value)\n    })\n\n    return callback[kPromise]\n  }\n\n  _get (key, options, callback) {\n    this.nextTick(callback, new Error('NotFound'))\n  }\n\n  getMany (keys, options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, this[kDefaultOptions].entry)\n\n    if (this[kStatus] === 'opening') {\n      this.defer(() => this.getMany(keys, options, callback))\n      return callback[kPromise]\n    }\n\n    if (maybeError(this, callback)) {\n      return callback[kPromise]\n    }\n\n    if (!Array.isArray(keys)) {\n      this.nextTick(callback, new TypeError(\"The first argument 'keys' must be an array\"))\n      return callback[kPromise]\n    }\n\n    if (keys.length === 0) {\n      this.nextTick(callback, null, [])\n      return callback[kPromise]\n    }\n\n    const keyEncoding = this.keyEncoding(options.keyEncoding)\n    const valueEncoding = this.valueEncoding(options.valueEncoding)\n    const keyFormat = keyEncoding.format\n    const valueFormat = valueEncoding.format\n\n    // Forward encoding options\n    if (options.keyEncoding !== keyFormat || options.valueEncoding !== valueFormat) {\n      options = Object.assign({}, options, { keyEncoding: keyFormat, valueEncoding: valueFormat })\n    }\n\n    const mappedKeys = new Array(keys.length)\n\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i]\n      const err = this._checkKey(key)\n\n      if (err) {\n        this.nextTick(callback, err)\n        return callback[kPromise]\n      }\n\n      mappedKeys[i] = this.prefixKey(keyEncoding.encode(key), keyFormat)\n    }\n\n    this._getMany(mappedKeys, options, (err, values) => {\n      if (err) return callback(err)\n\n      try {\n        for (let i = 0; i < values.length; i++) {\n          if (values[i] !== undefined) {\n            values[i] = valueEncoding.decode(values[i])\n          }\n        }\n      } catch (err) {\n        return callback(new ModuleError(`Could not decode one or more of ${values.length} value(s)`, {\n          code: 'LEVEL_DECODE_ERROR',\n          cause: err\n        }))\n      }\n\n      callback(null, values)\n    })\n\n    return callback[kPromise]\n  }\n\n  _getMany (keys, options, callback) {\n    this.nextTick(callback, null, new Array(keys.length).fill(undefined))\n  }\n\n  put (key, value, options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, this[kDefaultOptions].entry)\n\n    if (this[kStatus] === 'opening') {\n      this.defer(() => this.put(key, value, options, callback))\n      return callback[kPromise]\n    }\n\n    if (maybeError(this, callback)) {\n      return callback[kPromise]\n    }\n\n    const err = this._checkKey(key) || this._checkValue(value)\n\n    if (err) {\n      this.nextTick(callback, err)\n      return callback[kPromise]\n    }\n\n    const keyEncoding = this.keyEncoding(options.keyEncoding)\n    const valueEncoding = this.valueEncoding(options.valueEncoding)\n    const keyFormat = keyEncoding.format\n    const valueFormat = valueEncoding.format\n\n    // Forward encoding options\n    if (options.keyEncoding !== keyFormat || options.valueEncoding !== valueFormat) {\n      options = Object.assign({}, options, { keyEncoding: keyFormat, valueEncoding: valueFormat })\n    }\n\n    const mappedKey = this.prefixKey(keyEncoding.encode(key), keyFormat)\n    const mappedValue = valueEncoding.encode(value)\n\n    this._put(mappedKey, mappedValue, options, (err) => {\n      if (err) return callback(err)\n      this.emit('put', key, value)\n      callback()\n    })\n\n    return callback[kPromise]\n  }\n\n  _put (key, value, options, callback) {\n    this.nextTick(callback)\n  }\n\n  del (key, options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, this[kDefaultOptions].key)\n\n    if (this[kStatus] === 'opening') {\n      this.defer(() => this.del(key, options, callback))\n      return callback[kPromise]\n    }\n\n    if (maybeError(this, callback)) {\n      return callback[kPromise]\n    }\n\n    const err = this._checkKey(key)\n\n    if (err) {\n      this.nextTick(callback, err)\n      return callback[kPromise]\n    }\n\n    const keyEncoding = this.keyEncoding(options.keyEncoding)\n    const keyFormat = keyEncoding.format\n\n    // Forward encoding options\n    if (options.keyEncoding !== keyFormat) {\n      options = Object.assign({}, options, { keyEncoding: keyFormat })\n    }\n\n    this._del(this.prefixKey(keyEncoding.encode(key), keyFormat), options, (err) => {\n      if (err) return callback(err)\n      this.emit('del', key)\n      callback()\n    })\n\n    return callback[kPromise]\n  }\n\n  _del (key, options, callback) {\n    this.nextTick(callback)\n  }\n\n  batch (operations, options, callback) {\n    if (!arguments.length) {\n      if (this[kStatus] === 'opening') return new DefaultChainedBatch(this)\n      if (this[kStatus] !== 'open') {\n        throw new ModuleError('Database is not open', {\n          code: 'LEVEL_DATABASE_NOT_OPEN'\n        })\n      }\n      return this._chainedBatch()\n    }\n\n    if (typeof operations === 'function') callback = operations\n    else callback = getCallback(options, callback)\n\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, this[kDefaultOptions].empty)\n\n    if (this[kStatus] === 'opening') {\n      this.defer(() => this.batch(operations, options, callback))\n      return callback[kPromise]\n    }\n\n    if (maybeError(this, callback)) {\n      return callback[kPromise]\n    }\n\n    if (!Array.isArray(operations)) {\n      this.nextTick(callback, new TypeError(\"The first argument 'operations' must be an array\"))\n      return callback[kPromise]\n    }\n\n    if (operations.length === 0) {\n      this.nextTick(callback)\n      return callback[kPromise]\n    }\n\n    const mapped = new Array(operations.length)\n    const { keyEncoding: ke, valueEncoding: ve, ...forward } = options\n\n    for (let i = 0; i < operations.length; i++) {\n      if (typeof operations[i] !== 'object' || operations[i] === null) {\n        this.nextTick(callback, new TypeError('A batch operation must be an object'))\n        return callback[kPromise]\n      }\n\n      const op = Object.assign({}, operations[i])\n\n      if (op.type !== 'put' && op.type !== 'del') {\n        this.nextTick(callback, new TypeError(\"A batch operation must have a type property that is 'put' or 'del'\"))\n        return callback[kPromise]\n      }\n\n      const err = this._checkKey(op.key)\n\n      if (err) {\n        this.nextTick(callback, err)\n        return callback[kPromise]\n      }\n\n      const db = op.sublevel != null ? op.sublevel : this\n      const keyEncoding = db.keyEncoding(op.keyEncoding || ke)\n      const keyFormat = keyEncoding.format\n\n      op.key = db.prefixKey(keyEncoding.encode(op.key), keyFormat)\n      op.keyEncoding = keyFormat\n\n      if (op.type === 'put') {\n        const valueErr = this._checkValue(op.value)\n\n        if (valueErr) {\n          this.nextTick(callback, valueErr)\n          return callback[kPromise]\n        }\n\n        const valueEncoding = db.valueEncoding(op.valueEncoding || ve)\n\n        op.value = valueEncoding.encode(op.value)\n        op.valueEncoding = valueEncoding.format\n      }\n\n      // Prevent double prefixing\n      if (db !== this) {\n        op.sublevel = null\n      }\n\n      mapped[i] = op\n    }\n\n    this._batch(mapped, forward, (err) => {\n      if (err) return callback(err)\n      this.emit('batch', operations)\n      callback()\n    })\n\n    return callback[kPromise]\n  }\n\n  _batch (operations, options, callback) {\n    this.nextTick(callback)\n  }\n\n  sublevel (name, options) {\n    return this._sublevel(name, AbstractSublevel.defaults(options))\n  }\n\n  _sublevel (name, options) {\n    return new AbstractSublevel(this, name, options)\n  }\n\n  prefixKey (key, keyFormat) {\n    return key\n  }\n\n  clear (options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, this[kDefaultOptions].empty)\n\n    if (this[kStatus] === 'opening') {\n      this.defer(() => this.clear(options, callback))\n      return callback[kPromise]\n    }\n\n    if (maybeError(this, callback)) {\n      return callback[kPromise]\n    }\n\n    const original = options\n    const keyEncoding = this.keyEncoding(options.keyEncoding)\n\n    options = rangeOptions(options, keyEncoding)\n    options.keyEncoding = keyEncoding.format\n\n    if (options.limit === 0) {\n      this.nextTick(callback)\n    } else {\n      this._clear(options, (err) => {\n        if (err) return callback(err)\n        this.emit('clear', original)\n        callback()\n      })\n    }\n\n    return callback[kPromise]\n  }\n\n  _clear (options, callback) {\n    this.nextTick(callback)\n  }\n\n  iterator (options) {\n    const keyEncoding = this.keyEncoding(options && options.keyEncoding)\n    const valueEncoding = this.valueEncoding(options && options.valueEncoding)\n\n    options = rangeOptions(options, keyEncoding)\n    options.keys = options.keys !== false\n    options.values = options.values !== false\n\n    // We need the original encoding options in AbstractIterator in order to decode data\n    options[AbstractIterator.keyEncoding] = keyEncoding\n    options[AbstractIterator.valueEncoding] = valueEncoding\n\n    // Forward encoding options to private API\n    options.keyEncoding = keyEncoding.format\n    options.valueEncoding = valueEncoding.format\n\n    if (this[kStatus] === 'opening') {\n      return new DeferredIterator(this, options)\n    } else if (this[kStatus] !== 'open') {\n      throw new ModuleError('Database is not open', {\n        code: 'LEVEL_DATABASE_NOT_OPEN'\n      })\n    }\n\n    return this._iterator(options)\n  }\n\n  _iterator (options) {\n    return new AbstractIterator(this, options)\n  }\n\n  keys (options) {\n    // Also include valueEncoding (though unused) because we may fallback to _iterator()\n    const keyEncoding = this.keyEncoding(options && options.keyEncoding)\n    const valueEncoding = this.valueEncoding(options && options.valueEncoding)\n\n    options = rangeOptions(options, keyEncoding)\n\n    // We need the original encoding options in AbstractKeyIterator in order to decode data\n    options[AbstractIterator.keyEncoding] = keyEncoding\n    options[AbstractIterator.valueEncoding] = valueEncoding\n\n    // Forward encoding options to private API\n    options.keyEncoding = keyEncoding.format\n    options.valueEncoding = valueEncoding.format\n\n    if (this[kStatus] === 'opening') {\n      return new DeferredKeyIterator(this, options)\n    } else if (this[kStatus] !== 'open') {\n      throw new ModuleError('Database is not open', {\n        code: 'LEVEL_DATABASE_NOT_OPEN'\n      })\n    }\n\n    return this._keys(options)\n  }\n\n  _keys (options) {\n    return new DefaultKeyIterator(this, options)\n  }\n\n  values (options) {\n    const keyEncoding = this.keyEncoding(options && options.keyEncoding)\n    const valueEncoding = this.valueEncoding(options && options.valueEncoding)\n\n    options = rangeOptions(options, keyEncoding)\n\n    // We need the original encoding options in AbstractValueIterator in order to decode data\n    options[AbstractIterator.keyEncoding] = keyEncoding\n    options[AbstractIterator.valueEncoding] = valueEncoding\n\n    // Forward encoding options to private API\n    options.keyEncoding = keyEncoding.format\n    options.valueEncoding = valueEncoding.format\n\n    if (this[kStatus] === 'opening') {\n      return new DeferredValueIterator(this, options)\n    } else if (this[kStatus] !== 'open') {\n      throw new ModuleError('Database is not open', {\n        code: 'LEVEL_DATABASE_NOT_OPEN'\n      })\n    }\n\n    return this._values(options)\n  }\n\n  _values (options) {\n    return new DefaultValueIterator(this, options)\n  }\n\n  defer (fn) {\n    if (typeof fn !== 'function') {\n      throw new TypeError('The first argument must be a function')\n    }\n\n    this[kOperations].push(fn)\n  }\n\n  [kUndefer] () {\n    if (this[kOperations].length === 0) {\n      return\n    }\n\n    const operations = this[kOperations]\n    this[kOperations] = []\n\n    for (const op of operations) {\n      op()\n    }\n  }\n\n  // TODO: docs and types\n  attachResource (resource) {\n    if (typeof resource !== 'object' || resource === null ||\n      typeof resource.close !== 'function') {\n      throw new TypeError('The first argument must be a resource object')\n    }\n\n    this[kResources].add(resource)\n  }\n\n  // TODO: docs and types\n  detachResource (resource) {\n    this[kResources].delete(resource)\n  }\n\n  _chainedBatch () {\n    return new DefaultChainedBatch(this)\n  }\n\n  _checkKey (key) {\n    if (key === null || key === undefined) {\n      return new ModuleError('Key cannot be null or undefined', {\n        code: 'LEVEL_INVALID_KEY'\n      })\n    }\n  }\n\n  _checkValue (value) {\n    if (value === null || value === undefined) {\n      return new ModuleError('Value cannot be null or undefined', {\n        code: 'LEVEL_INVALID_VALUE'\n      })\n    }\n  }\n}\n\n// Expose browser-compatible nextTick for dependents\n// TODO: after we drop node 10, also use queueMicrotask in node\nAbstractLevel.prototype.nextTick = require('./lib/next-tick')\n\nconst { AbstractSublevel } = require('./lib/abstract-sublevel')({ AbstractLevel })\n\nexports.AbstractLevel = AbstractLevel\nexports.AbstractSublevel = AbstractSublevel\n\nconst maybeError = function (db, callback) {\n  if (db[kStatus] !== 'open') {\n    db.nextTick(callback, new ModuleError('Database is not open', {\n      code: 'LEVEL_DATABASE_NOT_OPEN'\n    }))\n    return true\n  }\n\n  return false\n}\n\nconst formats = function (db) {\n  return Object.keys(db.supports.encodings)\n    .filter(k => !!db.supports.encodings[k])\n}\n", "'use strict'\n\nexports.AbstractLevel = require('./abstract-level').AbstractLevel\nexports.AbstractSublevel = require('./abstract-level').AbstractSublevel\nexports.AbstractIterator = require('./abstract-iterator').AbstractIterator\nexports.AbstractKeyIterator = require('./abstract-iterator').AbstractKeyIterator\nexports.AbstractValueIterator = require('./abstract-iterator').AbstractValueIterator\nexports.AbstractChainedBatch = require('./abstract-chained-batch').AbstractChainedBatch\n", "/*! run-parallel-limit. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nmodule.exports = runParallelLimit\n\nconst queueMicrotask = require('queue-microtask')\n\nfunction runParallelLimit (tasks, limit, cb) {\n  if (typeof limit !== 'number') throw new Error('second argument must be a Number')\n  let results, len, pending, keys, isErrored\n  let isSync = true\n  let next\n\n  if (Array.isArray(tasks)) {\n    results = []\n    pending = len = tasks.length\n  } else {\n    keys = Object.keys(tasks)\n    results = {}\n    pending = len = keys.length\n  }\n\n  function done (err) {\n    function end () {\n      if (cb) cb(err, results)\n      cb = null\n    }\n    if (isSync) queueMicrotask(end)\n    else end()\n  }\n\n  function each (i, err, result) {\n    results[i] = result\n    if (err) isErrored = true\n    if (--pending === 0 || err) {\n      done(err)\n    } else if (!isErrored && next < len) {\n      let key\n      if (keys) {\n        key = keys[next]\n        next += 1\n        tasks[key](function (err, result) { each(key, err, result) })\n      } else {\n        key = next\n        next += 1\n        tasks[key](function (err, result) { each(key, err, result) })\n      }\n    }\n  }\n\n  next = limit\n  if (!pending) {\n    // empty\n    done(null)\n  } else if (keys) {\n    // object\n    keys.some(function (key, i) {\n      tasks[key](function (err, result) { each(key, err, result) })\n      if (i === limit - 1) return true // early return\n      return false\n    })\n  } else {\n    // array\n    tasks.some(function (task, i) {\n      task(function (err, result) { each(i, err, result) })\n      if (i === limit - 1) return true // early return\n      return false\n    })\n  }\n\n  isSync = false\n}\n", "/* global IDBKeyRange */\n\n'use strict'\n\nmodule.exports = function createKeyRange (options) {\n  const lower = options.gte !== undefined ? options.gte : options.gt !== undefined ? options.gt : undefined\n  const upper = options.lte !== undefined ? options.lte : options.lt !== undefined ? options.lt : undefined\n  const lowerExclusive = options.gte === undefined\n  const upperExclusive = options.lte === undefined\n\n  if (lower !== undefined && upper !== undefined) {\n    return IDBKeyRange.bound(lower, upper, lowerExclusive, upperExclusive)\n  } else if (lower !== undefined) {\n    return IDBKeyRange.lowerBound(lower, lowerExclusive)\n  } else if (upper !== undefined) {\n    return IDBKeyRange.upperBound(upper, upperExclusive)\n  } else {\n    return null\n  }\n}\n", "'use strict'\n\nconst textEncoder = new TextEncoder()\n\nmodule.exports = function (data) {\n  if (data instanceof Uint8Array) {\n    return data\n  } else if (data instanceof ArrayBuffer) {\n    return new Uint8Array(data)\n  } else {\n    // Non-binary data stored with an old version (level-js < 5.0.0)\n    return textEncoder.encode(data)\n  }\n}\n", "'use strict'\n\nconst { AbstractIterator } = require('abstract-level')\nconst createKeyRange = require('./util/key-range')\nconst deserialize = require('./util/deserialize')\n\nconst kCache = Symbol('cache')\nconst kFinished = Symbol('finished')\nconst kOptions = Symbol('options')\nconst kCurrentOptions = Symbol('currentOptions')\nconst kPosition = Symbol('position')\nconst kLocation = Symbol('location')\nconst kFirst = Symbol('first')\nconst emptyOptions = {}\n\nclass Iterator extends AbstractIterator {\n  constructor (db, location, options) {\n    super(db, options)\n\n    this[kCache] = []\n    this[kFinished] = this.limit === 0\n    this[kOptions] = options\n    this[kCurrentOptions] = { ...options }\n    this[kPosition] = undefined\n    this[kLocation] = location\n    this[kFirst] = true\n  }\n\n  // Note: if called by _all() then size can be Infinity. This is an internal\n  // detail; by design AbstractIterator.nextv() does not support Infinity.\n  _nextv (size, options, callback) {\n    this[kFirst] = false\n\n    if (this[kFinished]) {\n      return this.nextTick(callback, null, [])\n    } else if (this[kCache].length > 0) {\n      // TODO: mixing next and nextv is not covered by test suite\n      size = Math.min(size, this[kCache].length)\n      return this.nextTick(callback, null, this[kCache].splice(0, size))\n    }\n\n    // Adjust range by what we already visited\n    if (this[kPosition] !== undefined) {\n      if (this[kOptions].reverse) {\n        this[kCurrentOptions].lt = this[kPosition]\n        this[kCurrentOptions].lte = undefined\n      } else {\n        this[kCurrentOptions].gt = this[kPosition]\n        this[kCurrentOptions].gte = undefined\n      }\n    }\n\n    let keyRange\n\n    try {\n      keyRange = createKeyRange(this[kCurrentOptions])\n    } catch (_) {\n      // The lower key is greater than the upper key.\n      // IndexedDB throws an error, but we'll just return 0 results.\n      this[kFinished] = true\n      return this.nextTick(callback, null, [])\n    }\n\n    const transaction = this.db.db.transaction([this[kLocation]], 'readonly')\n    const store = transaction.objectStore(this[kLocation])\n    const entries = []\n\n    if (!this[kOptions].reverse) {\n      let keys\n      let values\n\n      const complete = () => {\n        // Wait for both requests to complete\n        if (keys === undefined || values === undefined) return\n\n        const length = Math.max(keys.length, values.length)\n\n        if (length === 0 || size === Infinity) {\n          this[kFinished] = true\n        } else {\n          this[kPosition] = keys[length - 1]\n        }\n\n        // Resize\n        entries.length = length\n\n        // Merge keys and values\n        for (let i = 0; i < length; i++) {\n          const key = keys[i]\n          const value = values[i]\n\n          entries[i] = [\n            this[kOptions].keys && key !== undefined ? deserialize(key) : undefined,\n            this[kOptions].values && value !== undefined ? deserialize(value) : undefined\n          ]\n        }\n\n        maybeCommit(transaction)\n      }\n\n      // If keys were not requested and size is Infinity, we don't have to keep\n      // track of position and can thus skip getting keys.\n      if (this[kOptions].keys || size < Infinity) {\n        store.getAllKeys(keyRange, size < Infinity ? size : undefined).onsuccess = (ev) => {\n          keys = ev.target.result\n          complete()\n        }\n      } else {\n        keys = []\n        this.nextTick(complete)\n      }\n\n      if (this[kOptions].values) {\n        store.getAll(keyRange, size < Infinity ? size : undefined).onsuccess = (ev) => {\n          values = ev.target.result\n          complete()\n        }\n      } else {\n        values = []\n        this.nextTick(complete)\n      }\n    } else {\n      // Can't use getAll() in reverse, so use a slower cursor that yields one item at a time\n      // TODO: test if all target browsers support openKeyCursor\n      const method = !this[kOptions].values && store.openKeyCursor ? 'openKeyCursor' : 'openCursor'\n\n      store[method](keyRange, 'prev').onsuccess = (ev) => {\n        const cursor = ev.target.result\n\n        if (cursor) {\n          const { key, value } = cursor\n          this[kPosition] = key\n\n          entries.push([\n            this[kOptions].keys && key !== undefined ? deserialize(key) : undefined,\n            this[kOptions].values && value !== undefined ? deserialize(value) : undefined\n          ])\n\n          if (entries.length < size) {\n            cursor.continue()\n          } else {\n            maybeCommit(transaction)\n          }\n        } else {\n          this[kFinished] = true\n        }\n      }\n    }\n\n    // If an error occurs (on the request), the transaction will abort.\n    transaction.onabort = () => {\n      callback(transaction.error || new Error('aborted by user'))\n      callback = null\n    }\n\n    transaction.oncomplete = () => {\n      callback(null, entries)\n      callback = null\n    }\n  }\n\n  _next (callback) {\n    if (this[kCache].length > 0) {\n      const [key, value] = this[kCache].shift()\n      this.nextTick(callback, null, key, value)\n    } else if (this[kFinished]) {\n      this.nextTick(callback)\n    } else {\n      let size = Math.min(100, this.limit - this.count)\n\n      if (this[kFirst]) {\n        // It's common to only want one entry initially or after a seek()\n        this[kFirst] = false\n        size = 1\n      }\n\n      this._nextv(size, emptyOptions, (err, entries) => {\n        if (err) return callback(err)\n        this[kCache] = entries\n        this._next(callback)\n      })\n    }\n  }\n\n  _all (options, callback) {\n    this[kFirst] = false\n\n    // TODO: mixing next and all is not covered by test suite\n    const cache = this[kCache].splice(0, this[kCache].length)\n    const size = this.limit - this.count - cache.length\n\n    if (size <= 0) {\n      return this.nextTick(callback, null, cache)\n    }\n\n    this._nextv(size, emptyOptions, (err, entries) => {\n      if (err) return callback(err)\n      if (cache.length > 0) entries = cache.concat(entries)\n      callback(null, entries)\n    })\n  }\n\n  _seek (target, options) {\n    this[kFirst] = true\n    this[kCache] = []\n    this[kFinished] = false\n    this[kPosition] = undefined\n\n    // TODO: not covered by test suite\n    this[kCurrentOptions] = { ...this[kOptions] }\n\n    let keyRange\n\n    try {\n      keyRange = createKeyRange(this[kOptions])\n    } catch (_) {\n      this[kFinished] = true\n      return\n    }\n\n    if (keyRange !== null && !keyRange.includes(target)) {\n      this[kFinished] = true\n    } else if (this[kOptions].reverse) {\n      this[kCurrentOptions].lte = target\n    } else {\n      this[kCurrentOptions].gte = target\n    }\n  }\n}\n\nexports.Iterator = Iterator\n\nfunction maybeCommit (transaction) {\n  // Commit (meaning close) now instead of waiting for auto-commit\n  if (typeof transaction.commit === 'function') {\n    transaction.commit()\n  }\n}\n", "'use strict'\n\nmodule.exports = function clear (db, location, keyRange, options, callback) {\n  if (options.limit === 0) return db.nextTick(callback)\n\n  const transaction = db.db.transaction([location], 'readwrite')\n  const store = transaction.objectStore(location)\n  let count = 0\n\n  transaction.oncomplete = function () {\n    callback()\n  }\n\n  transaction.onabort = function () {\n    callback(transaction.error || new Error('aborted by user'))\n  }\n\n  // A key cursor is faster (skips reading values) but not supported by IE\n  // TODO: we no longer support IE. Test others\n  const method = store.openKeyCursor ? 'openKeyCursor' : 'openCursor'\n  const direction = options.reverse ? 'prev' : 'next'\n\n  store[method](keyRange, direction).onsuccess = function (ev) {\n    const cursor = ev.target.result\n\n    if (cursor) {\n      // Wait for a request to complete before continuing, saving CPU.\n      store.delete(cursor.key).onsuccess = function () {\n        if (options.limit <= 0 || ++count < options.limit) {\n          cursor.continue()\n        }\n      }\n    }\n  }\n}\n", "/* global indexedDB */\n\n'use strict'\n\nconst { AbstractLevel } = require('abstract-level')\nconst ModuleError = require('module-error')\nconst parallel = require('run-parallel-limit')\nconst { fromCallback } = require('catering')\nconst { Iterator } = require('./iterator')\nconst deserialize = require('./util/deserialize')\nconst clear = require('./util/clear')\nconst createKeyRange = require('./util/key-range')\n\n// Keep as-is for compatibility with existing level-js databases\nconst DEFAULT_PREFIX = 'level-js-'\n\nconst kIDB = Symbol('idb')\nconst kNamePrefix = Symbol('namePrefix')\nconst kLocation = Symbol('location')\nconst kVersion = Symbol('version')\nconst kStore = Symbol('store')\nconst kOnComplete = Symbol('onComplete')\nconst kPromise = Symbol('promise')\n\nclass BrowserLevel extends AbstractLevel {\n  constructor (location, options, _) {\n    // To help migrating to abstract-level\n    if (typeof options === 'function' || typeof _ === 'function') {\n      throw new ModuleError('The levelup-style callback argument has been removed', {\n        code: 'LEVEL_LEGACY'\n      })\n    }\n\n    const { prefix, version, ...forward } = options || {}\n\n    super({\n      encodings: { view: true },\n      snapshots: false,\n      createIfMissing: false,\n      errorIfExists: false,\n      seek: true\n    }, forward)\n\n    if (typeof location !== 'string') {\n      throw new Error('constructor requires a location string argument')\n    }\n\n    // TODO (next major): remove default prefix\n    this[kLocation] = location\n    this[kNamePrefix] = prefix == null ? DEFAULT_PREFIX : prefix\n    this[kVersion] = parseInt(version || 1, 10)\n    this[kIDB] = null\n  }\n\n  get location () {\n    return this[kLocation]\n  }\n\n  get namePrefix () {\n    return this[kNamePrefix]\n  }\n\n  get version () {\n    return this[kVersion]\n  }\n\n  // Exposed for backwards compat and unit tests\n  get db () {\n    return this[kIDB]\n  }\n\n  get type () {\n    return 'browser-level'\n  }\n\n  _open (options, callback) {\n    const req = indexedDB.open(this[kNamePrefix] + this[kLocation], this[kVersion])\n\n    req.onerror = function () {\n      callback(req.error || new Error('unknown error'))\n    }\n\n    req.onsuccess = () => {\n      this[kIDB] = req.result\n      callback()\n    }\n\n    req.onupgradeneeded = (ev) => {\n      const db = ev.target.result\n\n      if (!db.objectStoreNames.contains(this[kLocation])) {\n        db.createObjectStore(this[kLocation])\n      }\n    }\n  }\n\n  [kStore] (mode) {\n    const transaction = this[kIDB].transaction([this[kLocation]], mode)\n    return transaction.objectStore(this[kLocation])\n  }\n\n  [kOnComplete] (request, callback) {\n    const transaction = request.transaction\n\n    // Take advantage of the fact that a non-canceled request error aborts\n    // the transaction. I.e. no need to listen for \"request.onerror\".\n    transaction.onabort = function () {\n      callback(transaction.error || new Error('aborted by user'))\n    }\n\n    transaction.oncomplete = function () {\n      callback(null, request.result)\n    }\n  }\n\n  _get (key, options, callback) {\n    const store = this[kStore]('readonly')\n    let req\n\n    try {\n      req = store.get(key)\n    } catch (err) {\n      return this.nextTick(callback, err)\n    }\n\n    this[kOnComplete](req, function (err, value) {\n      if (err) return callback(err)\n\n      if (value === undefined) {\n        return callback(new ModuleError('Entry not found', {\n          code: 'LEVEL_NOT_FOUND'\n        }))\n      }\n\n      callback(null, deserialize(value))\n    })\n  }\n\n  _getMany (keys, options, callback) {\n    const store = this[kStore]('readonly')\n    const tasks = keys.map((key) => (next) => {\n      let request\n\n      try {\n        request = store.get(key)\n      } catch (err) {\n        return next(err)\n      }\n\n      request.onsuccess = () => {\n        const value = request.result\n        next(null, value === undefined ? value : deserialize(value))\n      }\n\n      request.onerror = (ev) => {\n        ev.stopPropagation()\n        next(request.error)\n      }\n    })\n\n    parallel(tasks, 16, callback)\n  }\n\n  _del (key, options, callback) {\n    const store = this[kStore]('readwrite')\n    let req\n\n    try {\n      req = store.delete(key)\n    } catch (err) {\n      return this.nextTick(callback, err)\n    }\n\n    this[kOnComplete](req, callback)\n  }\n\n  _put (key, value, options, callback) {\n    const store = this[kStore]('readwrite')\n    let req\n\n    try {\n      // Will throw a DataError or DataCloneError if the environment\n      // does not support serializing the key or value respectively.\n      req = store.put(value, key)\n    } catch (err) {\n      return this.nextTick(callback, err)\n    }\n\n    this[kOnComplete](req, callback)\n  }\n\n  // TODO: implement key and value iterators\n  _iterator (options) {\n    return new Iterator(this, this[kLocation], options)\n  }\n\n  _batch (operations, options, callback) {\n    const store = this[kStore]('readwrite')\n    const transaction = store.transaction\n    let index = 0\n    let error\n\n    transaction.onabort = function () {\n      callback(error || transaction.error || new Error('aborted by user'))\n    }\n\n    transaction.oncomplete = function () {\n      callback()\n    }\n\n    // Wait for a request to complete before making the next, saving CPU.\n    function loop () {\n      const op = operations[index++]\n      const key = op.key\n\n      let req\n\n      try {\n        req = op.type === 'del' ? store.delete(key) : store.put(op.value, key)\n      } catch (err) {\n        error = err\n        transaction.abort()\n        return\n      }\n\n      if (index < operations.length) {\n        req.onsuccess = loop\n      } else if (typeof transaction.commit === 'function') {\n        // Commit now instead of waiting for auto-commit\n        transaction.commit()\n      }\n    }\n\n    loop()\n  }\n\n  _clear (options, callback) {\n    let keyRange\n    let req\n\n    try {\n      keyRange = createKeyRange(options)\n    } catch (e) {\n      // The lower key is greater than the upper key.\n      // IndexedDB throws an error, but we'll just do nothing.\n      return this.nextTick(callback)\n    }\n\n    if (options.limit >= 0) {\n      // IDBObjectStore#delete(range) doesn't have such an option.\n      // Fall back to cursor-based implementation.\n      return clear(this, this[kLocation], keyRange, options, callback)\n    }\n\n    try {\n      const store = this[kStore]('readwrite')\n      req = keyRange ? store.delete(keyRange) : store.clear()\n    } catch (err) {\n      return this.nextTick(callback, err)\n    }\n\n    this[kOnComplete](req, callback)\n  }\n\n  _close (callback) {\n    this[kIDB].close()\n    this.nextTick(callback)\n  }\n}\n\nBrowserLevel.destroy = function (location, prefix, callback) {\n  if (typeof prefix === 'function') {\n    callback = prefix\n    prefix = DEFAULT_PREFIX\n  }\n\n  callback = fromCallback(callback, kPromise)\n  const request = indexedDB.deleteDatabase(prefix + location)\n\n  request.onsuccess = function () {\n    callback()\n  }\n\n  request.onerror = function (err) {\n    callback(err)\n  }\n\n  return callback[kPromise]\n}\n\nexports.BrowserLevel = BrowserLevel\n", "exports.Level = require('browser-level').BrowserLevel\n", "'use strict'\n\n/*\n  This file is a reduced and adapted version of the main lib/internal/per_context/primordials.js file defined at\n\n  https://github.com/nodejs/node/blob/master/lib/internal/per_context/primordials.js\n\n  Don't try to replace with the original file and keep it up to date with the upstream file.\n*/\nmodule.exports = {\n  ArrayIsArray(self) {\n    return Array.isArray(self)\n  },\n  ArrayPrototypeIncludes(self, el) {\n    return self.includes(el)\n  },\n  ArrayPrototypeIndexOf(self, el) {\n    return self.indexOf(el)\n  },\n  ArrayPrototypeJoin(self, sep) {\n    return self.join(sep)\n  },\n  ArrayPrototypeMap(self, fn) {\n    return self.map(fn)\n  },\n  ArrayPrototypePop(self, el) {\n    return self.pop(el)\n  },\n  ArrayPrototypePush(self, el) {\n    return self.push(el)\n  },\n  ArrayPrototypeSlice(self, start, end) {\n    return self.slice(start, end)\n  },\n  Error,\n  FunctionPrototypeCall(fn, thisArgs, ...args) {\n    return fn.call(thisArgs, ...args)\n  },\n  FunctionPrototypeSymbolHasInstance(self, instance) {\n    return Function.prototype[Symbol.hasInstance].call(self, instance)\n  },\n  MathFloor: Math.floor,\n  Number,\n  NumberIsInteger: Number.isInteger,\n  NumberIsNaN: Number.isNaN,\n  NumberMAX_SAFE_INTEGER: Number.MAX_SAFE_INTEGER,\n  NumberMIN_SAFE_INTEGER: Number.MIN_SAFE_INTEGER,\n  NumberParseInt: Number.parseInt,\n  ObjectDefineProperties(self, props) {\n    return Object.defineProperties(self, props)\n  },\n  ObjectDefineProperty(self, name, prop) {\n    return Object.defineProperty(self, name, prop)\n  },\n  ObjectGetOwnPropertyDescriptor(self, name) {\n    return Object.getOwnPropertyDescriptor(self, name)\n  },\n  ObjectKeys(obj) {\n    return Object.keys(obj)\n  },\n  ObjectSetPrototypeOf(target, proto) {\n    return Object.setPrototypeOf(target, proto)\n  },\n  Promise,\n  PromisePrototypeCatch(self, fn) {\n    return self.catch(fn)\n  },\n  PromisePrototypeThen(self, thenFn, catchFn) {\n    return self.then(thenFn, catchFn)\n  },\n  PromiseReject(err) {\n    return Promise.reject(err)\n  },\n  PromiseResolve(val) {\n    return Promise.resolve(val)\n  },\n  ReflectApply: Reflect.apply,\n  RegExpPrototypeTest(self, value) {\n    return self.test(value)\n  },\n  SafeSet: Set,\n  String,\n  StringPrototypeSlice(self, start, end) {\n    return self.slice(start, end)\n  },\n  StringPrototypeToLowerCase(self) {\n    return self.toLowerCase()\n  },\n  StringPrototypeToUpperCase(self) {\n    return self.toUpperCase()\n  },\n  StringPrototypeTrim(self) {\n    return self.trim()\n  },\n  Symbol,\n  SymbolFor: Symbol.for,\n  SymbolAsyncIterator: Symbol.asyncIterator,\n  SymbolHasInstance: Symbol.hasInstance,\n  SymbolIterator: Symbol.iterator,\n  SymbolDispose: Symbol.dispose || Symbol('Symbol.dispose'),\n  SymbolAsyncDispose: Symbol.asyncDispose || Symbol('Symbol.asyncDispose'),\n  TypedArrayPrototypeSet(self, buf, len) {\n    return self.set(buf, len)\n  },\n  Boolean: Boolean,\n  Uint8Array\n}\n", "/*globals self, window */\n\"use strict\"\n\n/*eslint-disable @mysticatea/prettier */\nconst { AbortController, AbortSignal } =\n    typeof self !== \"undefined\" ? self :\n    typeof window !== \"undefined\" ? window :\n    /* otherwise */ undefined\n/*eslint-enable @mysticatea/prettier */\n\nmodule.exports = AbortController\nmodule.exports.AbortSignal = AbortSignal\nmodule.exports.default = AbortController\n", "'use strict'\n\nconst bufferModule = require('buffer')\nconst { kResistStopPropagation, SymbolDispose } = require('./primordials')\nconst AbortSignal = globalThis.AbortSignal || require('abort-controller').AbortSignal\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst AsyncFunction = Object.getPrototypeOf(async function () {}).constructor\nconst Blob = globalThis.Blob || bufferModule.Blob\n/* eslint-disable indent */\nconst isBlob =\n  typeof Blob !== 'undefined'\n    ? function isBlob(b) {\n        // eslint-disable-next-line indent\n        return b instanceof Blob\n      }\n    : function isBlob(b) {\n        return false\n      }\n/* eslint-enable indent */\n\nconst validateAbortSignal = (signal, name) => {\n  if (signal !== undefined && (signal === null || typeof signal !== 'object' || !('aborted' in signal))) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n  }\n}\nconst validateFunction = (value, name) => {\n  if (typeof value !== 'function') throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n}\n\n// This is a simplified version of AggregateError\nclass AggregateError extends Error {\n  constructor(errors) {\n    if (!Array.isArray(errors)) {\n      throw new TypeError(`Expected input to be an Array, got ${typeof errors}`)\n    }\n    let message = ''\n    for (let i = 0; i < errors.length; i++) {\n      message += `    ${errors[i].stack}\\n`\n    }\n    super(message)\n    this.name = 'AggregateError'\n    this.errors = errors\n  }\n}\nmodule.exports = {\n  AggregateError,\n  kEmptyObject: Object.freeze({}),\n  once(callback) {\n    let called = false\n    return function (...args) {\n      if (called) {\n        return\n      }\n      called = true\n      callback.apply(this, args)\n    }\n  },\n  createDeferredPromise: function () {\n    let resolve\n    let reject\n\n    // eslint-disable-next-line promise/param-names\n    const promise = new Promise((res, rej) => {\n      resolve = res\n      reject = rej\n    })\n    return {\n      promise,\n      resolve,\n      reject\n    }\n  },\n  promisify(fn) {\n    return new Promise((resolve, reject) => {\n      fn((err, ...args) => {\n        if (err) {\n          return reject(err)\n        }\n        return resolve(...args)\n      })\n    })\n  },\n  debuglog() {\n    return function () {}\n  },\n  format(format, ...args) {\n    // Simplified version of https://nodejs.org/api/util.html#utilformatformat-args\n    return format.replace(/%([sdifj])/g, function (...[_unused, type]) {\n      const replacement = args.shift()\n      if (type === 'f') {\n        return replacement.toFixed(6)\n      } else if (type === 'j') {\n        return JSON.stringify(replacement)\n      } else if (type === 's' && typeof replacement === 'object') {\n        const ctor = replacement.constructor !== Object ? replacement.constructor.name : ''\n        return `${ctor} {}`.trim()\n      } else {\n        return replacement.toString()\n      }\n    })\n  },\n  inspect(value) {\n    // Vastly simplified version of https://nodejs.org/api/util.html#utilinspectobject-options\n    switch (typeof value) {\n      case 'string':\n        if (value.includes(\"'\")) {\n          if (!value.includes('\"')) {\n            return `\"${value}\"`\n          } else if (!value.includes('`') && !value.includes('${')) {\n            return `\\`${value}\\``\n          }\n        }\n        return `'${value}'`\n      case 'number':\n        if (isNaN(value)) {\n          return 'NaN'\n        } else if (Object.is(value, -0)) {\n          return String(value)\n        }\n        return value\n      case 'bigint':\n        return `${String(value)}n`\n      case 'boolean':\n      case 'undefined':\n        return String(value)\n      case 'object':\n        return '{}'\n    }\n  },\n  types: {\n    isAsyncFunction(fn) {\n      return fn instanceof AsyncFunction\n    },\n    isArrayBufferView(arr) {\n      return ArrayBuffer.isView(arr)\n    }\n  },\n  isBlob,\n  deprecate(fn, message) {\n    return fn\n  },\n  addAbortListener:\n    require('events').addAbortListener ||\n    function addAbortListener(signal, listener) {\n      if (signal === undefined) {\n        throw new ERR_INVALID_ARG_TYPE('signal', 'AbortSignal', signal)\n      }\n      validateAbortSignal(signal, 'signal')\n      validateFunction(listener, 'listener')\n      let removeEventListener\n      if (signal.aborted) {\n        queueMicrotask(() => listener())\n      } else {\n        signal.addEventListener('abort', listener, {\n          __proto__: null,\n          once: true,\n          [kResistStopPropagation]: true\n        })\n        removeEventListener = () => {\n          signal.removeEventListener('abort', listener)\n        }\n      }\n      return {\n        __proto__: null,\n        [SymbolDispose]() {\n          var _removeEventListener\n          ;(_removeEventListener = removeEventListener) === null || _removeEventListener === undefined\n            ? undefined\n            : _removeEventListener()\n        }\n      }\n    },\n  AbortSignalAny:\n    AbortSignal.any ||\n    function AbortSignalAny(signals) {\n      // Fast path if there is only one signal.\n      if (signals.length === 1) {\n        return signals[0]\n      }\n      const ac = new AbortController()\n      const abort = () => ac.abort()\n      signals.forEach((signal) => {\n        validateAbortSignal(signal, 'signals')\n        signal.addEventListener('abort', abort, {\n          once: true\n        })\n      })\n      ac.signal.addEventListener(\n        'abort',\n        () => {\n          signals.forEach((signal) => signal.removeEventListener('abort', abort))\n        },\n        {\n          once: true\n        }\n      )\n      return ac.signal\n    }\n}\nmodule.exports.promisify.custom = Symbol.for('nodejs.util.promisify.custom')\n", "'use strict'\n\nconst { format, inspect, AggregateError: CustomAggregateError } = require('./util')\n\n/*\n  This file is a reduced and adapted version of the main lib/internal/errors.js file defined at\n\n  https://github.com/nodejs/node/blob/master/lib/internal/errors.js\n\n  Don't try to replace with the original file and keep it up to date (starting from E(...) definitions)\n  with the upstream file.\n*/\n\nconst AggregateError = globalThis.AggregateError || CustomAggregateError\nconst kIsNodeError = Symbol('kIsNodeError')\nconst kTypes = [\n  'string',\n  'function',\n  'number',\n  'object',\n  // Accept 'Function' and 'Object' as alternative to the lower cased version.\n  'Function',\n  'Object',\n  'boolean',\n  'bigint',\n  'symbol'\n]\nconst classRegExp = /^([A-Z][a-z0-9]*)+$/\nconst nodeInternalPrefix = '__node_internal_'\nconst codes = {}\nfunction assert(value, message) {\n  if (!value) {\n    throw new codes.ERR_INTERNAL_ASSERTION(message)\n  }\n}\n\n// Only use this for integers! Decimal numbers do not work with this function.\nfunction addNumericalSeparator(val) {\n  let res = ''\n  let i = val.length\n  const start = val[0] === '-' ? 1 : 0\n  for (; i >= start + 4; i -= 3) {\n    res = `_${val.slice(i - 3, i)}${res}`\n  }\n  return `${val.slice(0, i)}${res}`\n}\nfunction getMessage(key, msg, args) {\n  if (typeof msg === 'function') {\n    assert(\n      msg.length <= args.length,\n      // Default options do not count.\n      `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${msg.length}).`\n    )\n    return msg(...args)\n  }\n  const expectedLength = (msg.match(/%[dfijoOs]/g) || []).length\n  assert(\n    expectedLength === args.length,\n    `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${expectedLength}).`\n  )\n  if (args.length === 0) {\n    return msg\n  }\n  return format(msg, ...args)\n}\nfunction E(code, message, Base) {\n  if (!Base) {\n    Base = Error\n  }\n  class NodeError extends Base {\n    constructor(...args) {\n      super(getMessage(code, message, args))\n    }\n    toString() {\n      return `${this.name} [${code}]: ${this.message}`\n    }\n  }\n  Object.defineProperties(NodeError.prototype, {\n    name: {\n      value: Base.name,\n      writable: true,\n      enumerable: false,\n      configurable: true\n    },\n    toString: {\n      value() {\n        return `${this.name} [${code}]: ${this.message}`\n      },\n      writable: true,\n      enumerable: false,\n      configurable: true\n    }\n  })\n  NodeError.prototype.code = code\n  NodeError.prototype[kIsNodeError] = true\n  codes[code] = NodeError\n}\nfunction hideStackFrames(fn) {\n  // We rename the functions that will be hidden to cut off the stacktrace\n  // at the outermost one\n  const hidden = nodeInternalPrefix + fn.name\n  Object.defineProperty(fn, 'name', {\n    value: hidden\n  })\n  return fn\n}\nfunction aggregateTwoErrors(innerError, outerError) {\n  if (innerError && outerError && innerError !== outerError) {\n    if (Array.isArray(outerError.errors)) {\n      // If `outerError` is already an `AggregateError`.\n      outerError.errors.push(innerError)\n      return outerError\n    }\n    const err = new AggregateError([outerError, innerError], outerError.message)\n    err.code = outerError.code\n    return err\n  }\n  return innerError || outerError\n}\nclass AbortError extends Error {\n  constructor(message = 'The operation was aborted', options = undefined) {\n    if (options !== undefined && typeof options !== 'object') {\n      throw new codes.ERR_INVALID_ARG_TYPE('options', 'Object', options)\n    }\n    super(message, options)\n    this.code = 'ABORT_ERR'\n    this.name = 'AbortError'\n  }\n}\nE('ERR_ASSERTION', '%s', Error)\nE(\n  'ERR_INVALID_ARG_TYPE',\n  (name, expected, actual) => {\n    assert(typeof name === 'string', \"'name' must be a string\")\n    if (!Array.isArray(expected)) {\n      expected = [expected]\n    }\n    let msg = 'The '\n    if (name.endsWith(' argument')) {\n      // For cases like 'first argument'\n      msg += `${name} `\n    } else {\n      msg += `\"${name}\" ${name.includes('.') ? 'property' : 'argument'} `\n    }\n    msg += 'must be '\n    const types = []\n    const instances = []\n    const other = []\n    for (const value of expected) {\n      assert(typeof value === 'string', 'All expected entries have to be of type string')\n      if (kTypes.includes(value)) {\n        types.push(value.toLowerCase())\n      } else if (classRegExp.test(value)) {\n        instances.push(value)\n      } else {\n        assert(value !== 'object', 'The value \"object\" should be written as \"Object\"')\n        other.push(value)\n      }\n    }\n\n    // Special handle `object` in case other instances are allowed to outline\n    // the differences between each other.\n    if (instances.length > 0) {\n      const pos = types.indexOf('object')\n      if (pos !== -1) {\n        types.splice(types, pos, 1)\n        instances.push('Object')\n      }\n    }\n    if (types.length > 0) {\n      switch (types.length) {\n        case 1:\n          msg += `of type ${types[0]}`\n          break\n        case 2:\n          msg += `one of type ${types[0]} or ${types[1]}`\n          break\n        default: {\n          const last = types.pop()\n          msg += `one of type ${types.join(', ')}, or ${last}`\n        }\n      }\n      if (instances.length > 0 || other.length > 0) {\n        msg += ' or '\n      }\n    }\n    if (instances.length > 0) {\n      switch (instances.length) {\n        case 1:\n          msg += `an instance of ${instances[0]}`\n          break\n        case 2:\n          msg += `an instance of ${instances[0]} or ${instances[1]}`\n          break\n        default: {\n          const last = instances.pop()\n          msg += `an instance of ${instances.join(', ')}, or ${last}`\n        }\n      }\n      if (other.length > 0) {\n        msg += ' or '\n      }\n    }\n    switch (other.length) {\n      case 0:\n        break\n      case 1:\n        if (other[0].toLowerCase() !== other[0]) {\n          msg += 'an '\n        }\n        msg += `${other[0]}`\n        break\n      case 2:\n        msg += `one of ${other[0]} or ${other[1]}`\n        break\n      default: {\n        const last = other.pop()\n        msg += `one of ${other.join(', ')}, or ${last}`\n      }\n    }\n    if (actual == null) {\n      msg += `. Received ${actual}`\n    } else if (typeof actual === 'function' && actual.name) {\n      msg += `. Received function ${actual.name}`\n    } else if (typeof actual === 'object') {\n      var _actual$constructor\n      if (\n        (_actual$constructor = actual.constructor) !== null &&\n        _actual$constructor !== undefined &&\n        _actual$constructor.name\n      ) {\n        msg += `. Received an instance of ${actual.constructor.name}`\n      } else {\n        const inspected = inspect(actual, {\n          depth: -1\n        })\n        msg += `. Received ${inspected}`\n      }\n    } else {\n      let inspected = inspect(actual, {\n        colors: false\n      })\n      if (inspected.length > 25) {\n        inspected = `${inspected.slice(0, 25)}...`\n      }\n      msg += `. Received type ${typeof actual} (${inspected})`\n    }\n    return msg\n  },\n  TypeError\n)\nE(\n  'ERR_INVALID_ARG_VALUE',\n  (name, value, reason = 'is invalid') => {\n    let inspected = inspect(value)\n    if (inspected.length > 128) {\n      inspected = inspected.slice(0, 128) + '...'\n    }\n    const type = name.includes('.') ? 'property' : 'argument'\n    return `The ${type} '${name}' ${reason}. Received ${inspected}`\n  },\n  TypeError\n)\nE(\n  'ERR_INVALID_RETURN_VALUE',\n  (input, name, value) => {\n    var _value$constructor\n    const type =\n      value !== null &&\n      value !== undefined &&\n      (_value$constructor = value.constructor) !== null &&\n      _value$constructor !== undefined &&\n      _value$constructor.name\n        ? `instance of ${value.constructor.name}`\n        : `type ${typeof value}`\n    return `Expected ${input} to be returned from the \"${name}\"` + ` function but got ${type}.`\n  },\n  TypeError\n)\nE(\n  'ERR_MISSING_ARGS',\n  (...args) => {\n    assert(args.length > 0, 'At least one arg needs to be specified')\n    let msg\n    const len = args.length\n    args = (Array.isArray(args) ? args : [args]).map((a) => `\"${a}\"`).join(' or ')\n    switch (len) {\n      case 1:\n        msg += `The ${args[0]} argument`\n        break\n      case 2:\n        msg += `The ${args[0]} and ${args[1]} arguments`\n        break\n      default:\n        {\n          const last = args.pop()\n          msg += `The ${args.join(', ')}, and ${last} arguments`\n        }\n        break\n    }\n    return `${msg} must be specified`\n  },\n  TypeError\n)\nE(\n  'ERR_OUT_OF_RANGE',\n  (str, range, input) => {\n    assert(range, 'Missing \"range\" argument')\n    let received\n    if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n      received = addNumericalSeparator(String(input))\n    } else if (typeof input === 'bigint') {\n      received = String(input)\n      if (input > 2n ** 32n || input < -(2n ** 32n)) {\n        received = addNumericalSeparator(received)\n      }\n      received += 'n'\n    } else {\n      received = inspect(input)\n    }\n    return `The value of \"${str}\" is out of range. It must be ${range}. Received ${received}`\n  },\n  RangeError\n)\nE('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times', Error)\nE('ERR_METHOD_NOT_IMPLEMENTED', 'The %s method is not implemented', Error)\nE('ERR_STREAM_ALREADY_FINISHED', 'Cannot call %s after a stream was finished', Error)\nE('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable', Error)\nE('ERR_STREAM_DESTROYED', 'Cannot call %s after a stream was destroyed', Error)\nE('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError)\nE('ERR_STREAM_PREMATURE_CLOSE', 'Premature close', Error)\nE('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF', Error)\nE('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event', Error)\nE('ERR_STREAM_WRITE_AFTER_END', 'write after end', Error)\nE('ERR_UNKNOWN_ENCODING', 'Unknown encoding: %s', TypeError)\nmodule.exports = {\n  AbortError,\n  aggregateTwoErrors: hideStackFrames(aggregateTwoErrors),\n  hideStackFrames,\n  codes\n}\n", "/* eslint jsdoc/require-jsdoc: \"error\" */\n\n'use strict'\n\nconst {\n  ArrayIsArray,\n  ArrayPrototypeIncludes,\n  ArrayPrototypeJoin,\n  ArrayPrototypeMap,\n  NumberIsInteger,\n  NumberIsNaN,\n  NumberMAX_SAFE_INTEGER,\n  NumberMIN_SAFE_INTEGER,\n  NumberParseInt,\n  ObjectPrototypeHasOwnProperty,\n  RegExpPrototypeExec,\n  String,\n  StringPrototypeToUpperCase,\n  StringPrototypeTrim\n} = require('../ours/primordials')\nconst {\n  hideStackFrames,\n  codes: { ERR_SOCKET_BAD_PORT, ERR_INVALID_ARG_TYPE, ERR_INVALID_ARG_VALUE, ERR_OUT_OF_RANGE, ERR_UNKNOWN_SIGNAL }\n} = require('../ours/errors')\nconst { normalizeEncoding } = require('../ours/util')\nconst { isAsyncFunction, isArrayBufferView } = require('../ours/util').types\nconst signals = {}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction isInt32(value) {\n  return value === (value | 0)\n}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction isUint32(value) {\n  return value === value >>> 0\n}\nconst octalReg = /^[0-7]+$/\nconst modeDesc = 'must be a 32-bit unsigned integer or an octal string'\n\n/**\n * Parse and validate values that will be converted into mode_t (the S_*\n * constants). Only valid numbers and octal strings are allowed. They could be\n * converted to 32-bit unsigned integers or non-negative signed integers in the\n * C++ land, but any value higher than 0o777 will result in platform-specific\n * behaviors.\n * @param {*} value Values to be validated\n * @param {string} name Name of the argument\n * @param {number} [def] If specified, will be returned for invalid values\n * @returns {number}\n */\nfunction parseFileMode(value, name, def) {\n  if (typeof value === 'undefined') {\n    value = def\n  }\n  if (typeof value === 'string') {\n    if (RegExpPrototypeExec(octalReg, value) === null) {\n      throw new ERR_INVALID_ARG_VALUE(name, value, modeDesc)\n    }\n    value = NumberParseInt(value, 8)\n  }\n  validateUint32(value, name)\n  return value\n}\n\n/**\n * @callback validateInteger\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateInteger} */\nconst validateInteger = hideStackFrames((value, name, min = NumberMIN_SAFE_INTEGER, max = NumberMAX_SAFE_INTEGER) => {\n  if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  if (!NumberIsInteger(value)) throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n  if (value < min || value > max) throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n})\n\n/**\n * @callback validateInt32\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateInt32} */\nconst validateInt32 = hideStackFrames((value, name, min = -2147483648, max = 2147483647) => {\n  // The defaults for min and max correspond to the limits of 32-bit integers.\n  if (typeof value !== 'number') {\n    throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n  if (!NumberIsInteger(value)) {\n    throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n  }\n  if (value < min || value > max) {\n    throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n  }\n})\n\n/**\n * @callback validateUint32\n * @param {*} value\n * @param {string} name\n * @param {number|boolean} [positive=false]\n * @returns {asserts value is number}\n */\n\n/** @type {validateUint32} */\nconst validateUint32 = hideStackFrames((value, name, positive = false) => {\n  if (typeof value !== 'number') {\n    throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n  if (!NumberIsInteger(value)) {\n    throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n  }\n  const min = positive ? 1 : 0\n  // 2 ** 32 === 4294967296\n  const max = 4294967295\n  if (value < min || value > max) {\n    throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n  }\n})\n\n/**\n * @callback validateString\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is string}\n */\n\n/** @type {validateString} */\nfunction validateString(value, name) {\n  if (typeof value !== 'string') throw new ERR_INVALID_ARG_TYPE(name, 'string', value)\n}\n\n/**\n * @callback validateNumber\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateNumber} */\nfunction validateNumber(value, name, min = undefined, max) {\n  if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  if (\n    (min != null && value < min) ||\n    (max != null && value > max) ||\n    ((min != null || max != null) && NumberIsNaN(value))\n  ) {\n    throw new ERR_OUT_OF_RANGE(\n      name,\n      `${min != null ? `>= ${min}` : ''}${min != null && max != null ? ' && ' : ''}${max != null ? `<= ${max}` : ''}`,\n      value\n    )\n  }\n}\n\n/**\n * @callback validateOneOf\n * @template T\n * @param {T} value\n * @param {string} name\n * @param {T[]} oneOf\n */\n\n/** @type {validateOneOf} */\nconst validateOneOf = hideStackFrames((value, name, oneOf) => {\n  if (!ArrayPrototypeIncludes(oneOf, value)) {\n    const allowed = ArrayPrototypeJoin(\n      ArrayPrototypeMap(oneOf, (v) => (typeof v === 'string' ? `'${v}'` : String(v))),\n      ', '\n    )\n    const reason = 'must be one of: ' + allowed\n    throw new ERR_INVALID_ARG_VALUE(name, value, reason)\n  }\n})\n\n/**\n * @callback validateBoolean\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is boolean}\n */\n\n/** @type {validateBoolean} */\nfunction validateBoolean(value, name) {\n  if (typeof value !== 'boolean') throw new ERR_INVALID_ARG_TYPE(name, 'boolean', value)\n}\n\n/**\n * @param {any} options\n * @param {string} key\n * @param {boolean} defaultValue\n * @returns {boolean}\n */\nfunction getOwnPropertyValueOrDefault(options, key, defaultValue) {\n  return options == null || !ObjectPrototypeHasOwnProperty(options, key) ? defaultValue : options[key]\n}\n\n/**\n * @callback validateObject\n * @param {*} value\n * @param {string} name\n * @param {{\n *   allowArray?: boolean,\n *   allowFunction?: boolean,\n *   nullable?: boolean\n * }} [options]\n */\n\n/** @type {validateObject} */\nconst validateObject = hideStackFrames((value, name, options = null) => {\n  const allowArray = getOwnPropertyValueOrDefault(options, 'allowArray', false)\n  const allowFunction = getOwnPropertyValueOrDefault(options, 'allowFunction', false)\n  const nullable = getOwnPropertyValueOrDefault(options, 'nullable', false)\n  if (\n    (!nullable && value === null) ||\n    (!allowArray && ArrayIsArray(value)) ||\n    (typeof value !== 'object' && (!allowFunction || typeof value !== 'function'))\n  ) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'Object', value)\n  }\n})\n\n/**\n * @callback validateDictionary - We are using the Web IDL Standard definition\n *                                of \"dictionary\" here, which means any value\n *                                whose Type is either Undefined, Null, or\n *                                Object (which includes functions).\n * @param {*} value\n * @param {string} name\n * @see https://webidl.spec.whatwg.org/#es-dictionary\n * @see https://tc39.es/ecma262/#table-typeof-operator-results\n */\n\n/** @type {validateDictionary} */\nconst validateDictionary = hideStackFrames((value, name) => {\n  if (value != null && typeof value !== 'object' && typeof value !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE(name, 'a dictionary', value)\n  }\n})\n\n/**\n * @callback validateArray\n * @param {*} value\n * @param {string} name\n * @param {number} [minLength]\n * @returns {asserts value is any[]}\n */\n\n/** @type {validateArray} */\nconst validateArray = hideStackFrames((value, name, minLength = 0) => {\n  if (!ArrayIsArray(value)) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'Array', value)\n  }\n  if (value.length < minLength) {\n    const reason = `must be longer than ${minLength}`\n    throw new ERR_INVALID_ARG_VALUE(name, value, reason)\n  }\n})\n\n/**\n * @callback validateStringArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is string[]}\n */\n\n/** @type {validateStringArray} */\nfunction validateStringArray(value, name) {\n  validateArray(value, name)\n  for (let i = 0; i < value.length; i++) {\n    validateString(value[i], `${name}[${i}]`)\n  }\n}\n\n/**\n * @callback validateBooleanArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is boolean[]}\n */\n\n/** @type {validateBooleanArray} */\nfunction validateBooleanArray(value, name) {\n  validateArray(value, name)\n  for (let i = 0; i < value.length; i++) {\n    validateBoolean(value[i], `${name}[${i}]`)\n  }\n}\n\n/**\n * @callback validateAbortSignalArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is AbortSignal[]}\n */\n\n/** @type {validateAbortSignalArray} */\nfunction validateAbortSignalArray(value, name) {\n  validateArray(value, name)\n  for (let i = 0; i < value.length; i++) {\n    const signal = value[i]\n    const indexedName = `${name}[${i}]`\n    if (signal == null) {\n      throw new ERR_INVALID_ARG_TYPE(indexedName, 'AbortSignal', signal)\n    }\n    validateAbortSignal(signal, indexedName)\n  }\n}\n\n/**\n * @param {*} signal\n * @param {string} [name='signal']\n * @returns {asserts signal is keyof signals}\n */\nfunction validateSignalName(signal, name = 'signal') {\n  validateString(signal, name)\n  if (signals[signal] === undefined) {\n    if (signals[StringPrototypeToUpperCase(signal)] !== undefined) {\n      throw new ERR_UNKNOWN_SIGNAL(signal + ' (signals must use all capital letters)')\n    }\n    throw new ERR_UNKNOWN_SIGNAL(signal)\n  }\n}\n\n/**\n * @callback validateBuffer\n * @param {*} buffer\n * @param {string} [name='buffer']\n * @returns {asserts buffer is ArrayBufferView}\n */\n\n/** @type {validateBuffer} */\nconst validateBuffer = hideStackFrames((buffer, name = 'buffer') => {\n  if (!isArrayBufferView(buffer)) {\n    throw new ERR_INVALID_ARG_TYPE(name, ['Buffer', 'TypedArray', 'DataView'], buffer)\n  }\n})\n\n/**\n * @param {string} data\n * @param {string} encoding\n */\nfunction validateEncoding(data, encoding) {\n  const normalizedEncoding = normalizeEncoding(encoding)\n  const length = data.length\n  if (normalizedEncoding === 'hex' && length % 2 !== 0) {\n    throw new ERR_INVALID_ARG_VALUE('encoding', encoding, `is invalid for data of length ${length}`)\n  }\n}\n\n/**\n * Check that the port number is not NaN when coerced to a number,\n * is an integer and that it falls within the legal range of port numbers.\n * @param {*} port\n * @param {string} [name='Port']\n * @param {boolean} [allowZero=true]\n * @returns {number}\n */\nfunction validatePort(port, name = 'Port', allowZero = true) {\n  if (\n    (typeof port !== 'number' && typeof port !== 'string') ||\n    (typeof port === 'string' && StringPrototypeTrim(port).length === 0) ||\n    +port !== +port >>> 0 ||\n    port > 0xffff ||\n    (port === 0 && !allowZero)\n  ) {\n    throw new ERR_SOCKET_BAD_PORT(name, port, allowZero)\n  }\n  return port | 0\n}\n\n/**\n * @callback validateAbortSignal\n * @param {*} signal\n * @param {string} name\n */\n\n/** @type {validateAbortSignal} */\nconst validateAbortSignal = hideStackFrames((signal, name) => {\n  if (signal !== undefined && (signal === null || typeof signal !== 'object' || !('aborted' in signal))) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n  }\n})\n\n/**\n * @callback validateFunction\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is Function}\n */\n\n/** @type {validateFunction} */\nconst validateFunction = hideStackFrames((value, name) => {\n  if (typeof value !== 'function') throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n})\n\n/**\n * @callback validatePlainFunction\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is Function}\n */\n\n/** @type {validatePlainFunction} */\nconst validatePlainFunction = hideStackFrames((value, name) => {\n  if (typeof value !== 'function' || isAsyncFunction(value)) throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n})\n\n/**\n * @callback validateUndefined\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is undefined}\n */\n\n/** @type {validateUndefined} */\nconst validateUndefined = hideStackFrames((value, name) => {\n  if (value !== undefined) throw new ERR_INVALID_ARG_TYPE(name, 'undefined', value)\n})\n\n/**\n * @template T\n * @param {T} value\n * @param {string} name\n * @param {T[]} union\n */\nfunction validateUnion(value, name, union) {\n  if (!ArrayPrototypeIncludes(union, value)) {\n    throw new ERR_INVALID_ARG_TYPE(name, `('${ArrayPrototypeJoin(union, '|')}')`, value)\n  }\n}\n\n/*\n  The rules for the Link header field are described here:\n  https://www.rfc-editor.org/rfc/rfc8288.html#section-3\n\n  This regex validates any string surrounded by angle brackets\n  (not necessarily a valid URI reference) followed by zero or more\n  link-params separated by semicolons.\n*/\nconst linkValueRegExp = /^(?:<[^>]*>)(?:\\s*;\\s*[^;\"\\s]+(?:=(\")?[^;\"\\s]*\\1)?)*$/\n\n/**\n * @param {any} value\n * @param {string} name\n */\nfunction validateLinkHeaderFormat(value, name) {\n  if (typeof value === 'undefined' || !RegExpPrototypeExec(linkValueRegExp, value)) {\n    throw new ERR_INVALID_ARG_VALUE(\n      name,\n      value,\n      'must be an array or string of format \"</styles.css>; rel=preload; as=style\"'\n    )\n  }\n}\n\n/**\n * @param {any} hints\n * @return {string}\n */\nfunction validateLinkHeaderValue(hints) {\n  if (typeof hints === 'string') {\n    validateLinkHeaderFormat(hints, 'hints')\n    return hints\n  } else if (ArrayIsArray(hints)) {\n    const hintsLength = hints.length\n    let result = ''\n    if (hintsLength === 0) {\n      return result\n    }\n    for (let i = 0; i < hintsLength; i++) {\n      const link = hints[i]\n      validateLinkHeaderFormat(link, 'hints')\n      result += link\n      if (i !== hintsLength - 1) {\n        result += ', '\n      }\n    }\n    return result\n  }\n  throw new ERR_INVALID_ARG_VALUE(\n    'hints',\n    hints,\n    'must be an array or string of format \"</styles.css>; rel=preload; as=style\"'\n  )\n}\nmodule.exports = {\n  isInt32,\n  isUint32,\n  parseFileMode,\n  validateArray,\n  validateStringArray,\n  validateBooleanArray,\n  validateAbortSignalArray,\n  validateBoolean,\n  validateBuffer,\n  validateDictionary,\n  validateEncoding,\n  validateFunction,\n  validateInt32,\n  validateInteger,\n  validateNumber,\n  validateObject,\n  validateOneOf,\n  validatePlainFunction,\n  validatePort,\n  validateSignalName,\n  validateString,\n  validateUint32,\n  validateUndefined,\n  validateUnion,\n  validateAbortSignal,\n  validateLinkHeaderValue\n}\n", "// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n", "'use strict'\n\nconst { SymbolAsyncIterator, SymbolIterator, SymbolFor } = require('../../ours/primordials')\n\n// We need to use SymbolFor to make these globally available\n// for interopt with readable-stream, i.e. readable-stream\n// and node core needs to be able to read/write private state\n// from each other for proper interoperability.\nconst kIsDestroyed = SymbolFor('nodejs.stream.destroyed')\nconst kIsErrored = SymbolFor('nodejs.stream.errored')\nconst kIsReadable = SymbolFor('nodejs.stream.readable')\nconst kIsWritable = SymbolFor('nodejs.stream.writable')\nconst kIsDisturbed = SymbolFor('nodejs.stream.disturbed')\nconst kIsClosedPromise = SymbolFor('nodejs.webstream.isClosedPromise')\nconst kControllerErrorFunction = SymbolFor('nodejs.webstream.controllerErrorFunction')\nfunction isReadableNodeStream(obj, strict = false) {\n  var _obj$_readableState\n  return !!(\n    (\n      obj &&\n      typeof obj.pipe === 'function' &&\n      typeof obj.on === 'function' &&\n      (!strict || (typeof obj.pause === 'function' && typeof obj.resume === 'function')) &&\n      (!obj._writableState ||\n        ((_obj$_readableState = obj._readableState) === null || _obj$_readableState === undefined\n          ? undefined\n          : _obj$_readableState.readable) !== false) &&\n      // Duplex\n      (!obj._writableState || obj._readableState)\n    ) // Writable has .pipe.\n  )\n}\n\nfunction isWritableNodeStream(obj) {\n  var _obj$_writableState\n  return !!(\n    (\n      obj &&\n      typeof obj.write === 'function' &&\n      typeof obj.on === 'function' &&\n      (!obj._readableState ||\n        ((_obj$_writableState = obj._writableState) === null || _obj$_writableState === undefined\n          ? undefined\n          : _obj$_writableState.writable) !== false)\n    ) // Duplex\n  )\n}\n\nfunction isDuplexNodeStream(obj) {\n  return !!(\n    obj &&\n    typeof obj.pipe === 'function' &&\n    obj._readableState &&\n    typeof obj.on === 'function' &&\n    typeof obj.write === 'function'\n  )\n}\nfunction isNodeStream(obj) {\n  return (\n    obj &&\n    (obj._readableState ||\n      obj._writableState ||\n      (typeof obj.write === 'function' && typeof obj.on === 'function') ||\n      (typeof obj.pipe === 'function' && typeof obj.on === 'function'))\n  )\n}\nfunction isReadableStream(obj) {\n  return !!(\n    obj &&\n    !isNodeStream(obj) &&\n    typeof obj.pipeThrough === 'function' &&\n    typeof obj.getReader === 'function' &&\n    typeof obj.cancel === 'function'\n  )\n}\nfunction isWritableStream(obj) {\n  return !!(obj && !isNodeStream(obj) && typeof obj.getWriter === 'function' && typeof obj.abort === 'function')\n}\nfunction isTransformStream(obj) {\n  return !!(obj && !isNodeStream(obj) && typeof obj.readable === 'object' && typeof obj.writable === 'object')\n}\nfunction isWebStream(obj) {\n  return isReadableStream(obj) || isWritableStream(obj) || isTransformStream(obj)\n}\nfunction isIterable(obj, isAsync) {\n  if (obj == null) return false\n  if (isAsync === true) return typeof obj[SymbolAsyncIterator] === 'function'\n  if (isAsync === false) return typeof obj[SymbolIterator] === 'function'\n  return typeof obj[SymbolAsyncIterator] === 'function' || typeof obj[SymbolIterator] === 'function'\n}\nfunction isDestroyed(stream) {\n  if (!isNodeStream(stream)) return null\n  const wState = stream._writableState\n  const rState = stream._readableState\n  const state = wState || rState\n  return !!(stream.destroyed || stream[kIsDestroyed] || (state !== null && state !== undefined && state.destroyed))\n}\n\n// Have been end():d.\nfunction isWritableEnded(stream) {\n  if (!isWritableNodeStream(stream)) return null\n  if (stream.writableEnded === true) return true\n  const wState = stream._writableState\n  if (wState !== null && wState !== undefined && wState.errored) return false\n  if (typeof (wState === null || wState === undefined ? undefined : wState.ended) !== 'boolean') return null\n  return wState.ended\n}\n\n// Have emitted 'finish'.\nfunction isWritableFinished(stream, strict) {\n  if (!isWritableNodeStream(stream)) return null\n  if (stream.writableFinished === true) return true\n  const wState = stream._writableState\n  if (wState !== null && wState !== undefined && wState.errored) return false\n  if (typeof (wState === null || wState === undefined ? undefined : wState.finished) !== 'boolean') return null\n  return !!(wState.finished || (strict === false && wState.ended === true && wState.length === 0))\n}\n\n// Have been push(null):d.\nfunction isReadableEnded(stream) {\n  if (!isReadableNodeStream(stream)) return null\n  if (stream.readableEnded === true) return true\n  const rState = stream._readableState\n  if (!rState || rState.errored) return false\n  if (typeof (rState === null || rState === undefined ? undefined : rState.ended) !== 'boolean') return null\n  return rState.ended\n}\n\n// Have emitted 'end'.\nfunction isReadableFinished(stream, strict) {\n  if (!isReadableNodeStream(stream)) return null\n  const rState = stream._readableState\n  if (rState !== null && rState !== undefined && rState.errored) return false\n  if (typeof (rState === null || rState === undefined ? undefined : rState.endEmitted) !== 'boolean') return null\n  return !!(rState.endEmitted || (strict === false && rState.ended === true && rState.length === 0))\n}\nfunction isReadable(stream) {\n  if (stream && stream[kIsReadable] != null) return stream[kIsReadable]\n  if (typeof (stream === null || stream === undefined ? undefined : stream.readable) !== 'boolean') return null\n  if (isDestroyed(stream)) return false\n  return isReadableNodeStream(stream) && stream.readable && !isReadableFinished(stream)\n}\nfunction isWritable(stream) {\n  if (stream && stream[kIsWritable] != null) return stream[kIsWritable]\n  if (typeof (stream === null || stream === undefined ? undefined : stream.writable) !== 'boolean') return null\n  if (isDestroyed(stream)) return false\n  return isWritableNodeStream(stream) && stream.writable && !isWritableEnded(stream)\n}\nfunction isFinished(stream, opts) {\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (isDestroyed(stream)) {\n    return true\n  }\n  if ((opts === null || opts === undefined ? undefined : opts.readable) !== false && isReadable(stream)) {\n    return false\n  }\n  if ((opts === null || opts === undefined ? undefined : opts.writable) !== false && isWritable(stream)) {\n    return false\n  }\n  return true\n}\nfunction isWritableErrored(stream) {\n  var _stream$_writableStat, _stream$_writableStat2\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (stream.writableErrored) {\n    return stream.writableErrored\n  }\n  return (_stream$_writableStat =\n    (_stream$_writableStat2 = stream._writableState) === null || _stream$_writableStat2 === undefined\n      ? undefined\n      : _stream$_writableStat2.errored) !== null && _stream$_writableStat !== undefined\n    ? _stream$_writableStat\n    : null\n}\nfunction isReadableErrored(stream) {\n  var _stream$_readableStat, _stream$_readableStat2\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (stream.readableErrored) {\n    return stream.readableErrored\n  }\n  return (_stream$_readableStat =\n    (_stream$_readableStat2 = stream._readableState) === null || _stream$_readableStat2 === undefined\n      ? undefined\n      : _stream$_readableStat2.errored) !== null && _stream$_readableStat !== undefined\n    ? _stream$_readableStat\n    : null\n}\nfunction isClosed(stream) {\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (typeof stream.closed === 'boolean') {\n    return stream.closed\n  }\n  const wState = stream._writableState\n  const rState = stream._readableState\n  if (\n    typeof (wState === null || wState === undefined ? undefined : wState.closed) === 'boolean' ||\n    typeof (rState === null || rState === undefined ? undefined : rState.closed) === 'boolean'\n  ) {\n    return (\n      (wState === null || wState === undefined ? undefined : wState.closed) ||\n      (rState === null || rState === undefined ? undefined : rState.closed)\n    )\n  }\n  if (typeof stream._closed === 'boolean' && isOutgoingMessage(stream)) {\n    return stream._closed\n  }\n  return null\n}\nfunction isOutgoingMessage(stream) {\n  return (\n    typeof stream._closed === 'boolean' &&\n    typeof stream._defaultKeepAlive === 'boolean' &&\n    typeof stream._removedConnection === 'boolean' &&\n    typeof stream._removedContLen === 'boolean'\n  )\n}\nfunction isServerResponse(stream) {\n  return typeof stream._sent100 === 'boolean' && isOutgoingMessage(stream)\n}\nfunction isServerRequest(stream) {\n  var _stream$req\n  return (\n    typeof stream._consuming === 'boolean' &&\n    typeof stream._dumped === 'boolean' &&\n    ((_stream$req = stream.req) === null || _stream$req === undefined ? undefined : _stream$req.upgradeOrConnect) ===\n      undefined\n  )\n}\nfunction willEmitClose(stream) {\n  if (!isNodeStream(stream)) return null\n  const wState = stream._writableState\n  const rState = stream._readableState\n  const state = wState || rState\n  return (\n    (!state && isServerResponse(stream)) || !!(state && state.autoDestroy && state.emitClose && state.closed === false)\n  )\n}\nfunction isDisturbed(stream) {\n  var _stream$kIsDisturbed\n  return !!(\n    stream &&\n    ((_stream$kIsDisturbed = stream[kIsDisturbed]) !== null && _stream$kIsDisturbed !== undefined\n      ? _stream$kIsDisturbed\n      : stream.readableDidRead || stream.readableAborted)\n  )\n}\nfunction isErrored(stream) {\n  var _ref,\n    _ref2,\n    _ref3,\n    _ref4,\n    _ref5,\n    _stream$kIsErrored,\n    _stream$_readableStat3,\n    _stream$_writableStat3,\n    _stream$_readableStat4,\n    _stream$_writableStat4\n  return !!(\n    stream &&\n    ((_ref =\n      (_ref2 =\n        (_ref3 =\n          (_ref4 =\n            (_ref5 =\n              (_stream$kIsErrored = stream[kIsErrored]) !== null && _stream$kIsErrored !== undefined\n                ? _stream$kIsErrored\n                : stream.readableErrored) !== null && _ref5 !== undefined\n              ? _ref5\n              : stream.writableErrored) !== null && _ref4 !== undefined\n            ? _ref4\n            : (_stream$_readableStat3 = stream._readableState) === null || _stream$_readableStat3 === undefined\n            ? undefined\n            : _stream$_readableStat3.errorEmitted) !== null && _ref3 !== undefined\n          ? _ref3\n          : (_stream$_writableStat3 = stream._writableState) === null || _stream$_writableStat3 === undefined\n          ? undefined\n          : _stream$_writableStat3.errorEmitted) !== null && _ref2 !== undefined\n        ? _ref2\n        : (_stream$_readableStat4 = stream._readableState) === null || _stream$_readableStat4 === undefined\n        ? undefined\n        : _stream$_readableStat4.errored) !== null && _ref !== undefined\n      ? _ref\n      : (_stream$_writableStat4 = stream._writableState) === null || _stream$_writableStat4 === undefined\n      ? undefined\n      : _stream$_writableStat4.errored)\n  )\n}\nmodule.exports = {\n  isDestroyed,\n  kIsDestroyed,\n  isDisturbed,\n  kIsDisturbed,\n  isErrored,\n  kIsErrored,\n  isReadable,\n  kIsReadable,\n  kIsClosedPromise,\n  kControllerErrorFunction,\n  kIsWritable,\n  isClosed,\n  isDuplexNodeStream,\n  isFinished,\n  isIterable,\n  isReadableNodeStream,\n  isReadableStream,\n  isReadableEnded,\n  isReadableFinished,\n  isReadableErrored,\n  isNodeStream,\n  isWebStream,\n  isWritable,\n  isWritableNodeStream,\n  isWritableStream,\n  isWritableEnded,\n  isWritableFinished,\n  isWritableErrored,\n  isServerRequest,\n  isServerResponse,\n  willEmitClose,\n  isTransformStream\n}\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n;('use strict')\nconst { AbortError, codes } = require('../../ours/errors')\nconst { ERR_INVALID_ARG_TYPE, ERR_STREAM_PREMATURE_CLOSE } = codes\nconst { kEmptyObject, once } = require('../../ours/util')\nconst { validateAbortSignal, validateFunction, validateObject, validateBoolean } = require('../validators')\nconst { Promise, PromisePrototypeThen, SymbolDispose } = require('../../ours/primordials')\nconst {\n  isClosed,\n  isReadable,\n  isReadableNodeStream,\n  isReadableStream,\n  isReadableFinished,\n  isReadableErrored,\n  isWritable,\n  isWritableNodeStream,\n  isWritableStream,\n  isWritableFinished,\n  isWritableErrored,\n  isNodeStream,\n  willEmitClose: _willEmitClose,\n  kIsClosedPromise\n} = require('./utils')\nlet addAbortListener\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function'\n}\nconst nop = () => {}\nfunction eos(stream, options, callback) {\n  var _options$readable, _options$writable\n  if (arguments.length === 2) {\n    callback = options\n    options = kEmptyObject\n  } else if (options == null) {\n    options = kEmptyObject\n  } else {\n    validateObject(options, 'options')\n  }\n  validateFunction(callback, 'callback')\n  validateAbortSignal(options.signal, 'options.signal')\n  callback = once(callback)\n  if (isReadableStream(stream) || isWritableStream(stream)) {\n    return eosWeb(stream, options, callback)\n  }\n  if (!isNodeStream(stream)) {\n    throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream)\n  }\n  const readable =\n    (_options$readable = options.readable) !== null && _options$readable !== undefined\n      ? _options$readable\n      : isReadableNodeStream(stream)\n  const writable =\n    (_options$writable = options.writable) !== null && _options$writable !== undefined\n      ? _options$writable\n      : isWritableNodeStream(stream)\n  const wState = stream._writableState\n  const rState = stream._readableState\n  const onlegacyfinish = () => {\n    if (!stream.writable) {\n      onfinish()\n    }\n  }\n\n  // TODO (ronag): Improve soft detection to include core modules and\n  // common ecosystem modules that do properly emit 'close' but fail\n  // this generic check.\n  let willEmitClose =\n    _willEmitClose(stream) && isReadableNodeStream(stream) === readable && isWritableNodeStream(stream) === writable\n  let writableFinished = isWritableFinished(stream, false)\n  const onfinish = () => {\n    writableFinished = true\n    // Stream should not be destroyed here. If it is that\n    // means that user space is doing something differently and\n    // we cannot trust willEmitClose.\n    if (stream.destroyed) {\n      willEmitClose = false\n    }\n    if (willEmitClose && (!stream.readable || readable)) {\n      return\n    }\n    if (!readable || readableFinished) {\n      callback.call(stream)\n    }\n  }\n  let readableFinished = isReadableFinished(stream, false)\n  const onend = () => {\n    readableFinished = true\n    // Stream should not be destroyed here. If it is that\n    // means that user space is doing something differently and\n    // we cannot trust willEmitClose.\n    if (stream.destroyed) {\n      willEmitClose = false\n    }\n    if (willEmitClose && (!stream.writable || writable)) {\n      return\n    }\n    if (!writable || writableFinished) {\n      callback.call(stream)\n    }\n  }\n  const onerror = (err) => {\n    callback.call(stream, err)\n  }\n  let closed = isClosed(stream)\n  const onclose = () => {\n    closed = true\n    const errored = isWritableErrored(stream) || isReadableErrored(stream)\n    if (errored && typeof errored !== 'boolean') {\n      return callback.call(stream, errored)\n    }\n    if (readable && !readableFinished && isReadableNodeStream(stream, true)) {\n      if (!isReadableFinished(stream, false)) return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE())\n    }\n    if (writable && !writableFinished) {\n      if (!isWritableFinished(stream, false)) return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE())\n    }\n    callback.call(stream)\n  }\n  const onclosed = () => {\n    closed = true\n    const errored = isWritableErrored(stream) || isReadableErrored(stream)\n    if (errored && typeof errored !== 'boolean') {\n      return callback.call(stream, errored)\n    }\n    callback.call(stream)\n  }\n  const onrequest = () => {\n    stream.req.on('finish', onfinish)\n  }\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish)\n    if (!willEmitClose) {\n      stream.on('abort', onclose)\n    }\n    if (stream.req) {\n      onrequest()\n    } else {\n      stream.on('request', onrequest)\n    }\n  } else if (writable && !wState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish)\n    stream.on('close', onlegacyfinish)\n  }\n\n  // Not all streams will emit 'close' after 'aborted'.\n  if (!willEmitClose && typeof stream.aborted === 'boolean') {\n    stream.on('aborted', onclose)\n  }\n  stream.on('end', onend)\n  stream.on('finish', onfinish)\n  if (options.error !== false) {\n    stream.on('error', onerror)\n  }\n  stream.on('close', onclose)\n  if (closed) {\n    process.nextTick(onclose)\n  } else if (\n    (wState !== null && wState !== undefined && wState.errorEmitted) ||\n    (rState !== null && rState !== undefined && rState.errorEmitted)\n  ) {\n    if (!willEmitClose) {\n      process.nextTick(onclosed)\n    }\n  } else if (\n    !readable &&\n    (!willEmitClose || isReadable(stream)) &&\n    (writableFinished || isWritable(stream) === false)\n  ) {\n    process.nextTick(onclosed)\n  } else if (\n    !writable &&\n    (!willEmitClose || isWritable(stream)) &&\n    (readableFinished || isReadable(stream) === false)\n  ) {\n    process.nextTick(onclosed)\n  } else if (rState && stream.req && stream.aborted) {\n    process.nextTick(onclosed)\n  }\n  const cleanup = () => {\n    callback = nop\n    stream.removeListener('aborted', onclose)\n    stream.removeListener('complete', onfinish)\n    stream.removeListener('abort', onclose)\n    stream.removeListener('request', onrequest)\n    if (stream.req) stream.req.removeListener('finish', onfinish)\n    stream.removeListener('end', onlegacyfinish)\n    stream.removeListener('close', onlegacyfinish)\n    stream.removeListener('finish', onfinish)\n    stream.removeListener('end', onend)\n    stream.removeListener('error', onerror)\n    stream.removeListener('close', onclose)\n  }\n  if (options.signal && !closed) {\n    const abort = () => {\n      // Keep it because cleanup removes it.\n      const endCallback = callback\n      cleanup()\n      endCallback.call(\n        stream,\n        new AbortError(undefined, {\n          cause: options.signal.reason\n        })\n      )\n    }\n    if (options.signal.aborted) {\n      process.nextTick(abort)\n    } else {\n      addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n      const disposable = addAbortListener(options.signal, abort)\n      const originalCallback = callback\n      callback = once((...args) => {\n        disposable[SymbolDispose]()\n        originalCallback.apply(stream, args)\n      })\n    }\n  }\n  return cleanup\n}\nfunction eosWeb(stream, options, callback) {\n  let isAborted = false\n  let abort = nop\n  if (options.signal) {\n    abort = () => {\n      isAborted = true\n      callback.call(\n        stream,\n        new AbortError(undefined, {\n          cause: options.signal.reason\n        })\n      )\n    }\n    if (options.signal.aborted) {\n      process.nextTick(abort)\n    } else {\n      addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n      const disposable = addAbortListener(options.signal, abort)\n      const originalCallback = callback\n      callback = once((...args) => {\n        disposable[SymbolDispose]()\n        originalCallback.apply(stream, args)\n      })\n    }\n  }\n  const resolverFn = (...args) => {\n    if (!isAborted) {\n      process.nextTick(() => callback.apply(stream, args))\n    }\n  }\n  PromisePrototypeThen(stream[kIsClosedPromise].promise, resolverFn, resolverFn)\n  return nop\n}\nfunction finished(stream, opts) {\n  var _opts\n  let autoCleanup = false\n  if (opts === null) {\n    opts = kEmptyObject\n  }\n  if ((_opts = opts) !== null && _opts !== undefined && _opts.cleanup) {\n    validateBoolean(opts.cleanup, 'cleanup')\n    autoCleanup = opts.cleanup\n  }\n  return new Promise((resolve, reject) => {\n    const cleanup = eos(stream, opts, (err) => {\n      if (autoCleanup) {\n        cleanup()\n      }\n      if (err) {\n        reject(err)\n      } else {\n        resolve()\n      }\n    })\n  })\n}\nmodule.exports = eos\nmodule.exports.finished = finished\n", "'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst {\n  aggregateTwoErrors,\n  codes: { ERR_MULTIPLE_CALLBACK },\n  AbortError\n} = require('../../ours/errors')\nconst { Symbol } = require('../../ours/primordials')\nconst { kIsDestroyed, isDestroyed, isFinished, isServerRequest } = require('./utils')\nconst kDestroy = Symbol('kDestroy')\nconst kConstruct = Symbol('kConstruct')\nfunction checkError(err, w, r) {\n  if (err) {\n    // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n    err.stack // eslint-disable-line no-unused-expressions\n\n    if (w && !w.errored) {\n      w.errored = err\n    }\n    if (r && !r.errored) {\n      r.errored = err\n    }\n  }\n}\n\n// Backwards compat. cb() is undocumented and unused in core but\n// unfortunately might be used by modules.\nfunction destroy(err, cb) {\n  const r = this._readableState\n  const w = this._writableState\n  // With duplex streams we use the writable side for state.\n  const s = w || r\n  if ((w !== null && w !== undefined && w.destroyed) || (r !== null && r !== undefined && r.destroyed)) {\n    if (typeof cb === 'function') {\n      cb()\n    }\n    return this\n  }\n\n  // We set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n  checkError(err, w, r)\n  if (w) {\n    w.destroyed = true\n  }\n  if (r) {\n    r.destroyed = true\n  }\n\n  // If still constructing then defer calling _destroy.\n  if (!s.constructed) {\n    this.once(kDestroy, function (er) {\n      _destroy(this, aggregateTwoErrors(er, err), cb)\n    })\n  } else {\n    _destroy(this, err, cb)\n  }\n  return this\n}\nfunction _destroy(self, err, cb) {\n  let called = false\n  function onDestroy(err) {\n    if (called) {\n      return\n    }\n    called = true\n    const r = self._readableState\n    const w = self._writableState\n    checkError(err, w, r)\n    if (w) {\n      w.closed = true\n    }\n    if (r) {\n      r.closed = true\n    }\n    if (typeof cb === 'function') {\n      cb(err)\n    }\n    if (err) {\n      process.nextTick(emitErrorCloseNT, self, err)\n    } else {\n      process.nextTick(emitCloseNT, self)\n    }\n  }\n  try {\n    self._destroy(err || null, onDestroy)\n  } catch (err) {\n    onDestroy(err)\n  }\n}\nfunction emitErrorCloseNT(self, err) {\n  emitErrorNT(self, err)\n  emitCloseNT(self)\n}\nfunction emitCloseNT(self) {\n  const r = self._readableState\n  const w = self._writableState\n  if (w) {\n    w.closeEmitted = true\n  }\n  if (r) {\n    r.closeEmitted = true\n  }\n  if ((w !== null && w !== undefined && w.emitClose) || (r !== null && r !== undefined && r.emitClose)) {\n    self.emit('close')\n  }\n}\nfunction emitErrorNT(self, err) {\n  const r = self._readableState\n  const w = self._writableState\n  if ((w !== null && w !== undefined && w.errorEmitted) || (r !== null && r !== undefined && r.errorEmitted)) {\n    return\n  }\n  if (w) {\n    w.errorEmitted = true\n  }\n  if (r) {\n    r.errorEmitted = true\n  }\n  self.emit('error', err)\n}\nfunction undestroy() {\n  const r = this._readableState\n  const w = this._writableState\n  if (r) {\n    r.constructed = true\n    r.closed = false\n    r.closeEmitted = false\n    r.destroyed = false\n    r.errored = null\n    r.errorEmitted = false\n    r.reading = false\n    r.ended = r.readable === false\n    r.endEmitted = r.readable === false\n  }\n  if (w) {\n    w.constructed = true\n    w.destroyed = false\n    w.closed = false\n    w.closeEmitted = false\n    w.errored = null\n    w.errorEmitted = false\n    w.finalCalled = false\n    w.prefinished = false\n    w.ended = w.writable === false\n    w.ending = w.writable === false\n    w.finished = w.writable === false\n  }\n}\nfunction errorOrDestroy(stream, err, sync) {\n  // We have tests that rely on errors being emitted\n  // in the same tick, so changing this is semver major.\n  // For now when you opt-in to autoDestroy we allow\n  // the error to be emitted nextTick. In a future\n  // semver major update we should change the default to this.\n\n  const r = stream._readableState\n  const w = stream._writableState\n  if ((w !== null && w !== undefined && w.destroyed) || (r !== null && r !== undefined && r.destroyed)) {\n    return this\n  }\n  if ((r !== null && r !== undefined && r.autoDestroy) || (w !== null && w !== undefined && w.autoDestroy))\n    stream.destroy(err)\n  else if (err) {\n    // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n    err.stack // eslint-disable-line no-unused-expressions\n\n    if (w && !w.errored) {\n      w.errored = err\n    }\n    if (r && !r.errored) {\n      r.errored = err\n    }\n    if (sync) {\n      process.nextTick(emitErrorNT, stream, err)\n    } else {\n      emitErrorNT(stream, err)\n    }\n  }\n}\nfunction construct(stream, cb) {\n  if (typeof stream._construct !== 'function') {\n    return\n  }\n  const r = stream._readableState\n  const w = stream._writableState\n  if (r) {\n    r.constructed = false\n  }\n  if (w) {\n    w.constructed = false\n  }\n  stream.once(kConstruct, cb)\n  if (stream.listenerCount(kConstruct) > 1) {\n    // Duplex\n    return\n  }\n  process.nextTick(constructNT, stream)\n}\nfunction constructNT(stream) {\n  let called = false\n  function onConstruct(err) {\n    if (called) {\n      errorOrDestroy(stream, err !== null && err !== undefined ? err : new ERR_MULTIPLE_CALLBACK())\n      return\n    }\n    called = true\n    const r = stream._readableState\n    const w = stream._writableState\n    const s = w || r\n    if (r) {\n      r.constructed = true\n    }\n    if (w) {\n      w.constructed = true\n    }\n    if (s.destroyed) {\n      stream.emit(kDestroy, err)\n    } else if (err) {\n      errorOrDestroy(stream, err, true)\n    } else {\n      process.nextTick(emitConstructNT, stream)\n    }\n  }\n  try {\n    stream._construct((err) => {\n      process.nextTick(onConstruct, err)\n    })\n  } catch (err) {\n    process.nextTick(onConstruct, err)\n  }\n}\nfunction emitConstructNT(stream) {\n  stream.emit(kConstruct)\n}\nfunction isRequest(stream) {\n  return (stream === null || stream === undefined ? undefined : stream.setHeader) && typeof stream.abort === 'function'\n}\nfunction emitCloseLegacy(stream) {\n  stream.emit('close')\n}\nfunction emitErrorCloseLegacy(stream, err) {\n  stream.emit('error', err)\n  process.nextTick(emitCloseLegacy, stream)\n}\n\n// Normalize destroy for legacy.\nfunction destroyer(stream, err) {\n  if (!stream || isDestroyed(stream)) {\n    return\n  }\n  if (!err && !isFinished(stream)) {\n    err = new AbortError()\n  }\n\n  // TODO: Remove isRequest branches.\n  if (isServerRequest(stream)) {\n    stream.socket = null\n    stream.destroy(err)\n  } else if (isRequest(stream)) {\n    stream.abort()\n  } else if (isRequest(stream.req)) {\n    stream.req.abort()\n  } else if (typeof stream.destroy === 'function') {\n    stream.destroy(err)\n  } else if (typeof stream.close === 'function') {\n    // TODO: Don't lose err?\n    stream.close()\n  } else if (err) {\n    process.nextTick(emitErrorCloseLegacy, stream, err)\n  } else {\n    process.nextTick(emitCloseLegacy, stream)\n  }\n  if (!stream.destroyed) {\n    stream[kIsDestroyed] = true\n  }\n}\nmodule.exports = {\n  construct,\n  destroyer,\n  destroy,\n  undestroy,\n  errorOrDestroy\n}\n", "'use strict'\n\nconst { ArrayIsArray, ObjectSetPrototypeOf } = require('../../ours/primordials')\nconst { EventEmitter: EE } = require('events')\nfunction Stream(opts) {\n  EE.call(this, opts)\n}\nObjectSetPrototypeOf(Stream.prototype, EE.prototype)\nObjectSetPrototypeOf(Stream, EE)\nStream.prototype.pipe = function (dest, options) {\n  const source = this\n  function ondata(chunk) {\n    if (dest.writable && dest.write(chunk) === false && source.pause) {\n      source.pause()\n    }\n  }\n  source.on('data', ondata)\n  function ondrain() {\n    if (source.readable && source.resume) {\n      source.resume()\n    }\n  }\n  dest.on('drain', ondrain)\n\n  // If the 'end' option is not supplied, dest.end() will be called when\n  // source gets the 'end' or 'close' events.  Only dest.end() once.\n  if (!dest._isStdio && (!options || options.end !== false)) {\n    source.on('end', onend)\n    source.on('close', onclose)\n  }\n  let didOnEnd = false\n  function onend() {\n    if (didOnEnd) return\n    didOnEnd = true\n    dest.end()\n  }\n  function onclose() {\n    if (didOnEnd) return\n    didOnEnd = true\n    if (typeof dest.destroy === 'function') dest.destroy()\n  }\n\n  // Don't leave dangling pipes when there are errors.\n  function onerror(er) {\n    cleanup()\n    if (EE.listenerCount(this, 'error') === 0) {\n      this.emit('error', er)\n    }\n  }\n  prependListener(source, 'error', onerror)\n  prependListener(dest, 'error', onerror)\n\n  // Remove all the event listeners that were added.\n  function cleanup() {\n    source.removeListener('data', ondata)\n    dest.removeListener('drain', ondrain)\n    source.removeListener('end', onend)\n    source.removeListener('close', onclose)\n    source.removeListener('error', onerror)\n    dest.removeListener('error', onerror)\n    source.removeListener('end', cleanup)\n    source.removeListener('close', cleanup)\n    dest.removeListener('close', cleanup)\n  }\n  source.on('end', cleanup)\n  source.on('close', cleanup)\n  dest.on('close', cleanup)\n  dest.emit('pipe', source)\n\n  // Allow for unix-like usage: A.pipe(B).pipe(C)\n  return dest\n}\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn)\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn)\n  else if (ArrayIsArray(emitter._events[event])) emitter._events[event].unshift(fn)\n  else emitter._events[event] = [fn, emitter._events[event]]\n}\nmodule.exports = {\n  Stream,\n  prependListener\n}\n", "'use strict'\n\nconst { SymbolDispose } = require('../../ours/primordials')\nconst { AbortError, codes } = require('../../ours/errors')\nconst { isNodeStream, isWebStream, kControllerErrorFunction } = require('./utils')\nconst eos = require('./end-of-stream')\nconst { ERR_INVALID_ARG_TYPE } = codes\nlet addAbortListener\n\n// This method is inlined here for readable-stream\n// It also does not allow for signal to not exist on the stream\n// https://github.com/nodejs/node/pull/36061#discussion_r533718029\nconst validateAbortSignal = (signal, name) => {\n  if (typeof signal !== 'object' || !('aborted' in signal)) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n  }\n}\nmodule.exports.addAbortSignal = function addAbortSignal(signal, stream) {\n  validateAbortSignal(signal, 'signal')\n  if (!isNodeStream(stream) && !isWebStream(stream)) {\n    throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream)\n  }\n  return module.exports.addAbortSignalNoValidate(signal, stream)\n}\nmodule.exports.addAbortSignalNoValidate = function (signal, stream) {\n  if (typeof signal !== 'object' || !('aborted' in signal)) {\n    return stream\n  }\n  const onAbort = isNodeStream(stream)\n    ? () => {\n        stream.destroy(\n          new AbortError(undefined, {\n            cause: signal.reason\n          })\n        )\n      }\n    : () => {\n        stream[kControllerErrorFunction](\n          new AbortError(undefined, {\n            cause: signal.reason\n          })\n        )\n      }\n  if (signal.aborted) {\n    onAbort()\n  } else {\n    addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n    const disposable = addAbortListener(signal, onAbort)\n    eos(stream, disposable[SymbolDispose])\n  }\n  return stream\n}\n", "'use strict'\n\nconst { StringPrototypeSlice, SymbolIterator, TypedArrayPrototypeSet, Uint8Array } = require('../../ours/primordials')\nconst { Buffer } = require('buffer')\nconst { inspect } = require('../../ours/util')\nmodule.exports = class BufferList {\n  constructor() {\n    this.head = null\n    this.tail = null\n    this.length = 0\n  }\n  push(v) {\n    const entry = {\n      data: v,\n      next: null\n    }\n    if (this.length > 0) this.tail.next = entry\n    else this.head = entry\n    this.tail = entry\n    ++this.length\n  }\n  unshift(v) {\n    const entry = {\n      data: v,\n      next: this.head\n    }\n    if (this.length === 0) this.tail = entry\n    this.head = entry\n    ++this.length\n  }\n  shift() {\n    if (this.length === 0) return\n    const ret = this.head.data\n    if (this.length === 1) this.head = this.tail = null\n    else this.head = this.head.next\n    --this.length\n    return ret\n  }\n  clear() {\n    this.head = this.tail = null\n    this.length = 0\n  }\n  join(s) {\n    if (this.length === 0) return ''\n    let p = this.head\n    let ret = '' + p.data\n    while ((p = p.next) !== null) ret += s + p.data\n    return ret\n  }\n  concat(n) {\n    if (this.length === 0) return Buffer.alloc(0)\n    const ret = Buffer.allocUnsafe(n >>> 0)\n    let p = this.head\n    let i = 0\n    while (p) {\n      TypedArrayPrototypeSet(ret, p.data, i)\n      i += p.data.length\n      p = p.next\n    }\n    return ret\n  }\n\n  // Consumes a specified amount of bytes or characters from the buffered data.\n  consume(n, hasStrings) {\n    const data = this.head.data\n    if (n < data.length) {\n      // `slice` is the same for buffers and strings.\n      const slice = data.slice(0, n)\n      this.head.data = data.slice(n)\n      return slice\n    }\n    if (n === data.length) {\n      // First chunk is a perfect match.\n      return this.shift()\n    }\n    // Result spans more than one buffer.\n    return hasStrings ? this._getString(n) : this._getBuffer(n)\n  }\n  first() {\n    return this.head.data\n  }\n  *[SymbolIterator]() {\n    for (let p = this.head; p; p = p.next) {\n      yield p.data\n    }\n  }\n\n  // Consumes a specified amount of characters from the buffered data.\n  _getString(n) {\n    let ret = ''\n    let p = this.head\n    let c = 0\n    do {\n      const str = p.data\n      if (n > str.length) {\n        ret += str\n        n -= str.length\n      } else {\n        if (n === str.length) {\n          ret += str\n          ++c\n          if (p.next) this.head = p.next\n          else this.head = this.tail = null\n        } else {\n          ret += StringPrototypeSlice(str, 0, n)\n          this.head = p\n          p.data = StringPrototypeSlice(str, n)\n        }\n        break\n      }\n      ++c\n    } while ((p = p.next) !== null)\n    this.length -= c\n    return ret\n  }\n\n  // Consumes a specified amount of bytes from the buffered data.\n  _getBuffer(n) {\n    const ret = Buffer.allocUnsafe(n)\n    const retLen = n\n    let p = this.head\n    let c = 0\n    do {\n      const buf = p.data\n      if (n > buf.length) {\n        TypedArrayPrototypeSet(ret, buf, retLen - n)\n        n -= buf.length\n      } else {\n        if (n === buf.length) {\n          TypedArrayPrototypeSet(ret, buf, retLen - n)\n          ++c\n          if (p.next) this.head = p.next\n          else this.head = this.tail = null\n        } else {\n          TypedArrayPrototypeSet(ret, new Uint8Array(buf.buffer, buf.byteOffset, n), retLen - n)\n          this.head = p\n          p.data = buf.slice(n)\n        }\n        break\n      }\n      ++c\n    } while ((p = p.next) !== null)\n    this.length -= c\n    return ret\n  }\n\n  // Make sure the linked list only shows the minimal necessary information.\n  [Symbol.for('nodejs.util.inspect.custom')](_, options) {\n    return inspect(this, {\n      ...options,\n      // Only inspect one level.\n      depth: 0,\n      // It should not recurse.\n      customInspect: false\n    })\n  }\n}\n", "'use strict'\n\nconst { MathFloor, NumberIsInteger } = require('../../ours/primordials')\nconst { validateInteger } = require('../validators')\nconst { ERR_INVALID_ARG_VALUE } = require('../../ours/errors').codes\nlet defaultHighWaterMarkBytes = 16 * 1024\nlet defaultHighWaterMarkObjectMode = 16\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null\n}\nfunction getDefaultHighWaterMark(objectMode) {\n  return objectMode ? defaultHighWaterMarkObjectMode : defaultHighWaterMarkBytes\n}\nfunction setDefaultHighWaterMark(objectMode, value) {\n  validateInteger(value, 'value', 0)\n  if (objectMode) {\n    defaultHighWaterMarkObjectMode = value\n  } else {\n    defaultHighWaterMarkBytes = value\n  }\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  const hwm = highWaterMarkFrom(options, isDuplex, duplexKey)\n  if (hwm != null) {\n    if (!NumberIsInteger(hwm) || hwm < 0) {\n      const name = isDuplex ? `options.${duplexKey}` : 'options.highWaterMark'\n      throw new ERR_INVALID_ARG_VALUE(name, hwm)\n    }\n    return MathFloor(hwm)\n  }\n\n  // Default value\n  return getDefaultHighWaterMark(state.objectMode)\n}\nmodule.exports = {\n  getHighWaterMark,\n  getDefaultHighWaterMark,\n  setDefaultHighWaterMark\n}\n", "/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}", "'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst { PromisePrototypeThen, SymbolAsyncIterator, SymbolIterator } = require('../../ours/primordials')\nconst { Buffer } = require('buffer')\nconst { ERR_INVALID_ARG_TYPE, ERR_STREAM_NULL_VALUES } = require('../../ours/errors').codes\nfunction from(Readable, iterable, opts) {\n  let iterator\n  if (typeof iterable === 'string' || iterable instanceof Buffer) {\n    return new Readable({\n      objectMode: true,\n      ...opts,\n      read() {\n        this.push(iterable)\n        this.push(null)\n      }\n    })\n  }\n  let isAsync\n  if (iterable && iterable[SymbolAsyncIterator]) {\n    isAsync = true\n    iterator = iterable[SymbolAsyncIterator]()\n  } else if (iterable && iterable[SymbolIterator]) {\n    isAsync = false\n    iterator = iterable[SymbolIterator]()\n  } else {\n    throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable)\n  }\n  const readable = new Readable({\n    objectMode: true,\n    highWaterMark: 1,\n    // TODO(ronag): What options should be allowed?\n    ...opts\n  })\n\n  // Flag to protect against _read\n  // being called before last iteration completion.\n  let reading = false\n  readable._read = function () {\n    if (!reading) {\n      reading = true\n      next()\n    }\n  }\n  readable._destroy = function (error, cb) {\n    PromisePrototypeThen(\n      close(error),\n      () => process.nextTick(cb, error),\n      // nextTick is here in case cb throws\n      (e) => process.nextTick(cb, e || error)\n    )\n  }\n  async function close(error) {\n    const hadError = error !== undefined && error !== null\n    const hasThrow = typeof iterator.throw === 'function'\n    if (hadError && hasThrow) {\n      const { value, done } = await iterator.throw(error)\n      await value\n      if (done) {\n        return\n      }\n    }\n    if (typeof iterator.return === 'function') {\n      const { value } = await iterator.return()\n      await value\n    }\n  }\n  async function next() {\n    for (;;) {\n      try {\n        const { value, done } = isAsync ? await iterator.next() : iterator.next()\n        if (done) {\n          readable.push(null)\n        } else {\n          const res = value && typeof value.then === 'function' ? await value : value\n          if (res === null) {\n            reading = false\n            throw new ERR_STREAM_NULL_VALUES()\n          } else if (readable.push(res)) {\n            continue\n          } else {\n            reading = false\n          }\n        }\n      } catch (err) {\n        readable.destroy(err)\n      }\n      break\n    }\n  }\n  return readable\n}\nmodule.exports = from\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n;('use strict')\nconst {\n  ArrayPrototypeIndexOf,\n  NumberIsInteger,\n  NumberIsNaN,\n  NumberParseInt,\n  ObjectDefineProperties,\n  ObjectKeys,\n  ObjectSetPrototypeOf,\n  Promise,\n  SafeSet,\n  SymbolAsyncDispose,\n  SymbolAsyncIterator,\n  Symbol\n} = require('../../ours/primordials')\nmodule.exports = Readable\nReadable.ReadableState = ReadableState\nconst { EventEmitter: EE } = require('events')\nconst { Stream, prependListener } = require('./legacy')\nconst { Buffer } = require('buffer')\nconst { addAbortSignal } = require('./add-abort-signal')\nconst eos = require('./end-of-stream')\nlet debug = require('../../ours/util').debuglog('stream', (fn) => {\n  debug = fn\n})\nconst BufferList = require('./buffer_list')\nconst destroyImpl = require('./destroy')\nconst { getHighWaterMark, getDefaultHighWaterMark } = require('./state')\nconst {\n  aggregateTwoErrors,\n  codes: {\n    ERR_INVALID_ARG_TYPE,\n    ERR_METHOD_NOT_IMPLEMENTED,\n    ERR_OUT_OF_RANGE,\n    ERR_STREAM_PUSH_AFTER_EOF,\n    ERR_STREAM_UNSHIFT_AFTER_END_EVENT\n  },\n  AbortError\n} = require('../../ours/errors')\nconst { validateObject } = require('../validators')\nconst kPaused = Symbol('kPaused')\nconst { StringDecoder } = require('string_decoder')\nconst from = require('./from')\nObjectSetPrototypeOf(Readable.prototype, Stream.prototype)\nObjectSetPrototypeOf(Readable, Stream)\nconst nop = () => {}\nconst { errorOrDestroy } = destroyImpl\nconst kObjectMode = 1 << 0\nconst kEnded = 1 << 1\nconst kEndEmitted = 1 << 2\nconst kReading = 1 << 3\nconst kConstructed = 1 << 4\nconst kSync = 1 << 5\nconst kNeedReadable = 1 << 6\nconst kEmittedReadable = 1 << 7\nconst kReadableListening = 1 << 8\nconst kResumeScheduled = 1 << 9\nconst kErrorEmitted = 1 << 10\nconst kEmitClose = 1 << 11\nconst kAutoDestroy = 1 << 12\nconst kDestroyed = 1 << 13\nconst kClosed = 1 << 14\nconst kCloseEmitted = 1 << 15\nconst kMultiAwaitDrain = 1 << 16\nconst kReadingMore = 1 << 17\nconst kDataEmitted = 1 << 18\n\n// TODO(benjamingr) it is likely slower to do it this way than with free functions\nfunction makeBitMapDescriptor(bit) {\n  return {\n    enumerable: false,\n    get() {\n      return (this.state & bit) !== 0\n    },\n    set(value) {\n      if (value) this.state |= bit\n      else this.state &= ~bit\n    }\n  }\n}\nObjectDefineProperties(ReadableState.prototype, {\n  objectMode: makeBitMapDescriptor(kObjectMode),\n  ended: makeBitMapDescriptor(kEnded),\n  endEmitted: makeBitMapDescriptor(kEndEmitted),\n  reading: makeBitMapDescriptor(kReading),\n  // Stream is still being constructed and cannot be\n  // destroyed until construction finished or failed.\n  // Async construction is opt in, therefore we start as\n  // constructed.\n  constructed: makeBitMapDescriptor(kConstructed),\n  // A flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  sync: makeBitMapDescriptor(kSync),\n  // Whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  needReadable: makeBitMapDescriptor(kNeedReadable),\n  emittedReadable: makeBitMapDescriptor(kEmittedReadable),\n  readableListening: makeBitMapDescriptor(kReadableListening),\n  resumeScheduled: makeBitMapDescriptor(kResumeScheduled),\n  // True if the error was already emitted and should not be thrown again.\n  errorEmitted: makeBitMapDescriptor(kErrorEmitted),\n  emitClose: makeBitMapDescriptor(kEmitClose),\n  autoDestroy: makeBitMapDescriptor(kAutoDestroy),\n  // Has it been destroyed.\n  destroyed: makeBitMapDescriptor(kDestroyed),\n  // Indicates whether the stream has finished destroying.\n  closed: makeBitMapDescriptor(kClosed),\n  // True if close has been emitted or would have been emitted\n  // depending on emitClose.\n  closeEmitted: makeBitMapDescriptor(kCloseEmitted),\n  multiAwaitDrain: makeBitMapDescriptor(kMultiAwaitDrain),\n  // If true, a maybeReadMore has been scheduled.\n  readingMore: makeBitMapDescriptor(kReadingMore),\n  dataEmitted: makeBitMapDescriptor(kDataEmitted)\n})\nfunction ReadableState(options, stream, isDuplex) {\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof require('./duplex')\n\n  // Bit map field to store ReadableState more effciently with 1 bit per field\n  // instead of a V8 slot per field.\n  this.state = kEmitClose | kAutoDestroy | kConstructed | kSync\n  // Object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away.\n  if (options && options.objectMode) this.state |= kObjectMode\n  if (isDuplex && options && options.readableObjectMode) this.state |= kObjectMode\n\n  // The point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  this.highWaterMark = options\n    ? getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex)\n    : getDefaultHighWaterMark(false)\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift().\n  this.buffer = new BufferList()\n  this.length = 0\n  this.pipes = []\n  this.flowing = null\n  this[kPaused] = null\n\n  // Should close be emitted on destroy. Defaults to true.\n  if (options && options.emitClose === false) this.state &= ~kEmitClose\n\n  // Should .destroy() be called after 'end' (and potentially 'finish').\n  if (options && options.autoDestroy === false) this.state &= ~kAutoDestroy\n\n  // Indicates whether the stream has errored. When true no further\n  // _read calls, 'data' or 'readable' events should occur. This is needed\n  // since when autoDestroy is disabled we need a way to tell whether the\n  // stream has failed.\n  this.errored = null\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = (options && options.defaultEncoding) || 'utf8'\n\n  // Ref the piped dest which we need a drain event on it\n  // type: null | Writable | Set<Writable>.\n  this.awaitDrainWriters = null\n  this.decoder = null\n  this.encoding = null\n  if (options && options.encoding) {\n    this.decoder = new StringDecoder(options.encoding)\n    this.encoding = options.encoding\n  }\n}\nfunction Readable(options) {\n  if (!(this instanceof Readable)) return new Readable(options)\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the ReadableState constructor, at least with V8 6.5.\n  const isDuplex = this instanceof require('./duplex')\n  this._readableState = new ReadableState(options, this, isDuplex)\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read\n    if (typeof options.destroy === 'function') this._destroy = options.destroy\n    if (typeof options.construct === 'function') this._construct = options.construct\n    if (options.signal && !isDuplex) addAbortSignal(options.signal, this)\n  }\n  Stream.call(this, options)\n  destroyImpl.construct(this, () => {\n    if (this._readableState.needReadable) {\n      maybeReadMore(this, this._readableState)\n    }\n  })\n}\nReadable.prototype.destroy = destroyImpl.destroy\nReadable.prototype._undestroy = destroyImpl.undestroy\nReadable.prototype._destroy = function (err, cb) {\n  cb(err)\n}\nReadable.prototype[EE.captureRejectionSymbol] = function (err) {\n  this.destroy(err)\n}\nReadable.prototype[SymbolAsyncDispose] = function () {\n  let error\n  if (!this.destroyed) {\n    error = this.readableEnded ? null : new AbortError()\n    this.destroy(error)\n  }\n  return new Promise((resolve, reject) => eos(this, (err) => (err && err !== error ? reject(err) : resolve(null))))\n}\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  return readableAddChunk(this, chunk, encoding, false)\n}\n\n// Unshift should *always* be something directly out of read().\nReadable.prototype.unshift = function (chunk, encoding) {\n  return readableAddChunk(this, chunk, encoding, true)\n}\nfunction readableAddChunk(stream, chunk, encoding, addToFront) {\n  debug('readableAddChunk', chunk)\n  const state = stream._readableState\n  let err\n  if ((state.state & kObjectMode) === 0) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding\n      if (state.encoding !== encoding) {\n        if (addToFront && state.encoding) {\n          // When unshifting, if state.encoding is set, we have to save\n          // the string in the BufferList with the state encoding.\n          chunk = Buffer.from(chunk, encoding).toString(state.encoding)\n        } else {\n          chunk = Buffer.from(chunk, encoding)\n          encoding = ''\n        }\n      }\n    } else if (chunk instanceof Buffer) {\n      encoding = ''\n    } else if (Stream._isUint8Array(chunk)) {\n      chunk = Stream._uint8ArrayToBuffer(chunk)\n      encoding = ''\n    } else if (chunk != null) {\n      err = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk)\n    }\n  }\n  if (err) {\n    errorOrDestroy(stream, err)\n  } else if (chunk === null) {\n    state.state &= ~kReading\n    onEofChunk(stream, state)\n  } else if ((state.state & kObjectMode) !== 0 || (chunk && chunk.length > 0)) {\n    if (addToFront) {\n      if ((state.state & kEndEmitted) !== 0) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT())\n      else if (state.destroyed || state.errored) return false\n      else addChunk(stream, state, chunk, true)\n    } else if (state.ended) {\n      errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF())\n    } else if (state.destroyed || state.errored) {\n      return false\n    } else {\n      state.state &= ~kReading\n      if (state.decoder && !encoding) {\n        chunk = state.decoder.write(chunk)\n        if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false)\n        else maybeReadMore(stream, state)\n      } else {\n        addChunk(stream, state, chunk, false)\n      }\n    }\n  } else if (!addToFront) {\n    state.state &= ~kReading\n    maybeReadMore(stream, state)\n  }\n\n  // We can push more data if we are below the highWaterMark.\n  // Also, if we have no data yet, we can stand some more bytes.\n  // This is to work around cases where hwm=0, such as the repl.\n  return !state.ended && (state.length < state.highWaterMark || state.length === 0)\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync && stream.listenerCount('data') > 0) {\n    // Use the guard to avoid creating `Set()` repeatedly\n    // when we have multiple pipes.\n    if ((state.state & kMultiAwaitDrain) !== 0) {\n      state.awaitDrainWriters.clear()\n    } else {\n      state.awaitDrainWriters = null\n    }\n    state.dataEmitted = true\n    stream.emit('data', chunk)\n  } else {\n    // Update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length\n    if (addToFront) state.buffer.unshift(chunk)\n    else state.buffer.push(chunk)\n    if ((state.state & kNeedReadable) !== 0) emitReadable(stream)\n  }\n  maybeReadMore(stream, state)\n}\nReadable.prototype.isPaused = function () {\n  const state = this._readableState\n  return state[kPaused] === true || state.flowing === false\n}\n\n// Backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  const decoder = new StringDecoder(enc)\n  this._readableState.decoder = decoder\n  // If setEncoding(null), decoder.encoding equals utf8.\n  this._readableState.encoding = this._readableState.decoder.encoding\n  const buffer = this._readableState.buffer\n  // Iterate over current buffer to convert already stored Buffers:\n  let content = ''\n  for (const data of buffer) {\n    content += decoder.write(data)\n  }\n  buffer.clear()\n  if (content !== '') buffer.push(content)\n  this._readableState.length = content.length\n  return this\n}\n\n// Don't raise the hwm > 1GB.\nconst MAX_HWM = 0x40000000\nfunction computeNewHighWaterMark(n) {\n  if (n > MAX_HWM) {\n    throw new ERR_OUT_OF_RANGE('size', '<= 1GiB', n)\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts.\n    n--\n    n |= n >>> 1\n    n |= n >>> 2\n    n |= n >>> 4\n    n |= n >>> 8\n    n |= n >>> 16\n    n++\n  }\n  return n\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || (state.length === 0 && state.ended)) return 0\n  if ((state.state & kObjectMode) !== 0) return 1\n  if (NumberIsNaN(n)) {\n    // Only flow one buffer at a time.\n    if (state.flowing && state.length) return state.buffer.first().length\n    return state.length\n  }\n  if (n <= state.length) return n\n  return state.ended ? state.length : 0\n}\n\n// You can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n)\n  // Same as parseInt(undefined, 10), however V8 7.3 performance regressed\n  // in this scenario, so we are doing it manually.\n  if (n === undefined) {\n    n = NaN\n  } else if (!NumberIsInteger(n)) {\n    n = NumberParseInt(n, 10)\n  }\n  const state = this._readableState\n  const nOrig = n\n\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n)\n  if (n !== 0) state.state &= ~kEmittedReadable\n\n  // If we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (\n    n === 0 &&\n    state.needReadable &&\n    ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)\n  ) {\n    debug('read: emitReadable', state.length, state.ended)\n    if (state.length === 0 && state.ended) endReadable(this)\n    else emitReadable(this)\n    return null\n  }\n  n = howMuchToRead(n, state)\n\n  // If we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this)\n    return null\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  let doRead = (state.state & kNeedReadable) !== 0\n  debug('need readable', doRead)\n\n  // If we currently have less than the highWaterMark, then also read some.\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true\n    debug('length less than watermark', doRead)\n  }\n\n  // However, if we've ended, then there's no point, if we're already\n  // reading, then it's unnecessary, if we're constructing we have to wait,\n  // and if we're destroyed or errored, then it's not allowed,\n  if (state.ended || state.reading || state.destroyed || state.errored || !state.constructed) {\n    doRead = false\n    debug('reading, ended or constructing', doRead)\n  } else if (doRead) {\n    debug('do read')\n    state.state |= kReading | kSync\n    // If the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.state |= kNeedReadable\n\n    // Call internal read method\n    try {\n      this._read(state.highWaterMark)\n    } catch (err) {\n      errorOrDestroy(this, err)\n    }\n    state.state &= ~kSync\n\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state)\n  }\n  let ret\n  if (n > 0) ret = fromList(n, state)\n  else ret = null\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark\n    n = 0\n  } else {\n    state.length -= n\n    if (state.multiAwaitDrain) {\n      state.awaitDrainWriters.clear()\n    } else {\n      state.awaitDrainWriters = null\n    }\n  }\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this)\n  }\n  if (ret !== null && !state.errorEmitted && !state.closeEmitted) {\n    state.dataEmitted = true\n    this.emit('data', ret)\n  }\n  return ret\n}\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk')\n  if (state.ended) return\n  if (state.decoder) {\n    const chunk = state.decoder.end()\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk)\n      state.length += state.objectMode ? 1 : chunk.length\n    }\n  }\n  state.ended = true\n  if (state.sync) {\n    // If we are sync, wait until next tick to emit the data.\n    // Otherwise we risk emitting data in the flow()\n    // the readable code triggers during a read() call.\n    emitReadable(stream)\n  } else {\n    // Emit 'readable' now to make sure it gets picked up.\n    state.needReadable = false\n    state.emittedReadable = true\n    // We have to emit readable now that we are EOF. Modules\n    // in the ecosystem (e.g. dicer) rely on this event being sync.\n    emitReadable_(stream)\n  }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  const state = stream._readableState\n  debug('emitReadable', state.needReadable, state.emittedReadable)\n  state.needReadable = false\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing)\n    state.emittedReadable = true\n    process.nextTick(emitReadable_, stream)\n  }\n}\nfunction emitReadable_(stream) {\n  const state = stream._readableState\n  debug('emitReadable_', state.destroyed, state.length, state.ended)\n  if (!state.destroyed && !state.errored && (state.length || state.ended)) {\n    stream.emit('readable')\n    state.emittedReadable = false\n  }\n\n  // The stream needs another readable event if:\n  // 1. It is not flowing, as the flow mechanism will take\n  //    care of it.\n  // 2. It is not ended.\n  // 3. It is below the highWaterMark, so we can schedule\n  //    another readable later.\n  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark\n  flow(stream)\n}\n\n// At this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore && state.constructed) {\n    state.readingMore = true\n    process.nextTick(maybeReadMore_, stream, state)\n  }\n}\nfunction maybeReadMore_(stream, state) {\n  // Attempt to read more data if we should.\n  //\n  // The conditions for reading more data are (one of):\n  // - Not enough data buffered (state.length < state.highWaterMark). The loop\n  //   is responsible for filling the buffer with enough data if such data\n  //   is available. If highWaterMark is 0 and we are not in the flowing mode\n  //   we should _not_ attempt to buffer any extra data. We'll get more data\n  //   when the stream consumer calls read() instead.\n  // - No data in the buffer, and the stream is in flowing mode. In this mode\n  //   the loop below is responsible for ensuring read() is called. Failing to\n  //   call read here would abort the flow and there's no other mechanism for\n  //   continuing the flow if the stream consumer has just subscribed to the\n  //   'data' event.\n  //\n  // In addition to the above conditions to keep reading data, the following\n  // conditions prevent the data from being read:\n  // - The stream has ended (state.ended).\n  // - There is already a pending 'read' operation (state.reading). This is a\n  //   case where the stream has called the implementation defined _read()\n  //   method, but they are processing the call asynchronously and have _not_\n  //   called push() with new data. In this case we skip performing more\n  //   read()s. The execution ends in this method again after the _read() ends\n  //   up calling push() with more data.\n  while (\n    !state.reading &&\n    !state.ended &&\n    (state.length < state.highWaterMark || (state.flowing && state.length === 0))\n  ) {\n    const len = state.length\n    debug('maybeReadMore read 0')\n    stream.read(0)\n    if (len === state.length)\n      // Didn't get any data, stop spinning.\n      break\n  }\n  state.readingMore = false\n}\n\n// Abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  throw new ERR_METHOD_NOT_IMPLEMENTED('_read()')\n}\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  const src = this\n  const state = this._readableState\n  if (state.pipes.length === 1) {\n    if (!state.multiAwaitDrain) {\n      state.multiAwaitDrain = true\n      state.awaitDrainWriters = new SafeSet(state.awaitDrainWriters ? [state.awaitDrainWriters] : [])\n    }\n  }\n  state.pipes.push(dest)\n  debug('pipe count=%d opts=%j', state.pipes.length, pipeOpts)\n  const doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr\n  const endFn = doEnd ? onend : unpipe\n  if (state.endEmitted) process.nextTick(endFn)\n  else src.once('end', endFn)\n  dest.on('unpipe', onunpipe)\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe')\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true\n        cleanup()\n      }\n    }\n  }\n  function onend() {\n    debug('onend')\n    dest.end()\n  }\n  let ondrain\n  let cleanedUp = false\n  function cleanup() {\n    debug('cleanup')\n    // Cleanup event handlers once the pipe is broken.\n    dest.removeListener('close', onclose)\n    dest.removeListener('finish', onfinish)\n    if (ondrain) {\n      dest.removeListener('drain', ondrain)\n    }\n    dest.removeListener('error', onerror)\n    dest.removeListener('unpipe', onunpipe)\n    src.removeListener('end', onend)\n    src.removeListener('end', unpipe)\n    src.removeListener('data', ondata)\n    cleanedUp = true\n\n    // If the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (ondrain && state.awaitDrainWriters && (!dest._writableState || dest._writableState.needDrain)) ondrain()\n  }\n  function pause() {\n    // If the user unpiped during `dest.write()`, it is possible\n    // to get stuck in a permanently paused state if that write\n    // also returned false.\n    // => Check whether `dest` is still a piping destination.\n    if (!cleanedUp) {\n      if (state.pipes.length === 1 && state.pipes[0] === dest) {\n        debug('false write response, pause', 0)\n        state.awaitDrainWriters = dest\n        state.multiAwaitDrain = false\n      } else if (state.pipes.length > 1 && state.pipes.includes(dest)) {\n        debug('false write response, pause', state.awaitDrainWriters.size)\n        state.awaitDrainWriters.add(dest)\n      }\n      src.pause()\n    }\n    if (!ondrain) {\n      // When the dest drains, it reduces the awaitDrain counter\n      // on the source.  This would be more elegant with a .once()\n      // handler in flow(), but adding and removing repeatedly is\n      // too slow.\n      ondrain = pipeOnDrain(src, dest)\n      dest.on('drain', ondrain)\n    }\n  }\n  src.on('data', ondata)\n  function ondata(chunk) {\n    debug('ondata')\n    const ret = dest.write(chunk)\n    debug('dest.write', ret)\n    if (ret === false) {\n      pause()\n    }\n  }\n\n  // If the dest has an error, then stop piping into it.\n  // However, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er)\n    unpipe()\n    dest.removeListener('error', onerror)\n    if (dest.listenerCount('error') === 0) {\n      const s = dest._writableState || dest._readableState\n      if (s && !s.errorEmitted) {\n        // User incorrectly emitted 'error' directly on the stream.\n        errorOrDestroy(dest, er)\n      } else {\n        dest.emit('error', er)\n      }\n    }\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror)\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish)\n    unpipe()\n  }\n  dest.once('close', onclose)\n  function onfinish() {\n    debug('onfinish')\n    dest.removeListener('close', onclose)\n    unpipe()\n  }\n  dest.once('finish', onfinish)\n  function unpipe() {\n    debug('unpipe')\n    src.unpipe(dest)\n  }\n\n  // Tell the dest that it's being piped to.\n  dest.emit('pipe', src)\n\n  // Start the flow if it hasn't been started already.\n\n  if (dest.writableNeedDrain === true) {\n    pause()\n  } else if (!state.flowing) {\n    debug('pipe resume')\n    src.resume()\n  }\n  return dest\n}\nfunction pipeOnDrain(src, dest) {\n  return function pipeOnDrainFunctionResult() {\n    const state = src._readableState\n\n    // `ondrain` will call directly,\n    // `this` maybe not a reference to dest,\n    // so we use the real dest here.\n    if (state.awaitDrainWriters === dest) {\n      debug('pipeOnDrain', 1)\n      state.awaitDrainWriters = null\n    } else if (state.multiAwaitDrain) {\n      debug('pipeOnDrain', state.awaitDrainWriters.size)\n      state.awaitDrainWriters.delete(dest)\n    }\n    if ((!state.awaitDrainWriters || state.awaitDrainWriters.size === 0) && src.listenerCount('data')) {\n      src.resume()\n    }\n  }\n}\nReadable.prototype.unpipe = function (dest) {\n  const state = this._readableState\n  const unpipeInfo = {\n    hasUnpiped: false\n  }\n\n  // If we're not piping anywhere, then do nothing.\n  if (state.pipes.length === 0) return this\n  if (!dest) {\n    // remove all.\n    const dests = state.pipes\n    state.pipes = []\n    this.pause()\n    for (let i = 0; i < dests.length; i++)\n      dests[i].emit('unpipe', this, {\n        hasUnpiped: false\n      })\n    return this\n  }\n\n  // Try to find the right one.\n  const index = ArrayPrototypeIndexOf(state.pipes, dest)\n  if (index === -1) return this\n  state.pipes.splice(index, 1)\n  if (state.pipes.length === 0) this.pause()\n  dest.emit('unpipe', this, unpipeInfo)\n  return this\n}\n\n// Set up data events if they are asked for\n// Ensure readable listeners eventually get something.\nReadable.prototype.on = function (ev, fn) {\n  const res = Stream.prototype.on.call(this, ev, fn)\n  const state = this._readableState\n  if (ev === 'data') {\n    // Update readableListening so that resume() may be a no-op\n    // a few lines down. This is needed to support once('readable').\n    state.readableListening = this.listenerCount('readable') > 0\n\n    // Try start flowing on next tick if stream isn't explicitly paused.\n    if (state.flowing !== false) this.resume()\n  } else if (ev === 'readable') {\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true\n      state.flowing = false\n      state.emittedReadable = false\n      debug('on readable', state.length, state.reading)\n      if (state.length) {\n        emitReadable(this)\n      } else if (!state.reading) {\n        process.nextTick(nReadingNextTick, this)\n      }\n    }\n  }\n  return res\n}\nReadable.prototype.addListener = Readable.prototype.on\nReadable.prototype.removeListener = function (ev, fn) {\n  const res = Stream.prototype.removeListener.call(this, ev, fn)\n  if (ev === 'readable') {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this)\n  }\n  return res\n}\nReadable.prototype.off = Readable.prototype.removeListener\nReadable.prototype.removeAllListeners = function (ev) {\n  const res = Stream.prototype.removeAllListeners.apply(this, arguments)\n  if (ev === 'readable' || ev === undefined) {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this)\n  }\n  return res\n}\nfunction updateReadableListening(self) {\n  const state = self._readableState\n  state.readableListening = self.listenerCount('readable') > 0\n  if (state.resumeScheduled && state[kPaused] === false) {\n    // Flowing needs to be set to true now, otherwise\n    // the upcoming resume will not flow.\n    state.flowing = true\n\n    // Crude way to check if we should resume.\n  } else if (self.listenerCount('data') > 0) {\n    self.resume()\n  } else if (!state.readableListening) {\n    state.flowing = null\n  }\n}\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0')\n  self.read(0)\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  const state = this._readableState\n  if (!state.flowing) {\n    debug('resume')\n    // We flow only if there is no one listening\n    // for readable, but we still have to call\n    // resume().\n    state.flowing = !state.readableListening\n    resume(this, state)\n  }\n  state[kPaused] = false\n  return this\n}\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true\n    process.nextTick(resume_, stream, state)\n  }\n}\nfunction resume_(stream, state) {\n  debug('resume', state.reading)\n  if (!state.reading) {\n    stream.read(0)\n  }\n  state.resumeScheduled = false\n  stream.emit('resume')\n  flow(stream)\n  if (state.flowing && !state.reading) stream.read(0)\n}\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing)\n  if (this._readableState.flowing !== false) {\n    debug('pause')\n    this._readableState.flowing = false\n    this.emit('pause')\n  }\n  this._readableState[kPaused] = true\n  return this\n}\nfunction flow(stream) {\n  const state = stream._readableState\n  debug('flow', state.flowing)\n  while (state.flowing && stream.read() !== null);\n}\n\n// Wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  let paused = false\n\n  // TODO (ronag): Should this.destroy(err) emit\n  // 'error' on the wrapped stream? Would require\n  // a static factory method, e.g. Readable.wrap(stream).\n\n  stream.on('data', (chunk) => {\n    if (!this.push(chunk) && stream.pause) {\n      paused = true\n      stream.pause()\n    }\n  })\n  stream.on('end', () => {\n    this.push(null)\n  })\n  stream.on('error', (err) => {\n    errorOrDestroy(this, err)\n  })\n  stream.on('close', () => {\n    this.destroy()\n  })\n  stream.on('destroy', () => {\n    this.destroy()\n  })\n  this._read = () => {\n    if (paused && stream.resume) {\n      paused = false\n      stream.resume()\n    }\n  }\n\n  // Proxy all the other methods. Important when wrapping filters and duplexes.\n  const streamKeys = ObjectKeys(stream)\n  for (let j = 1; j < streamKeys.length; j++) {\n    const i = streamKeys[j]\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = stream[i].bind(stream)\n    }\n  }\n  return this\n}\nReadable.prototype[SymbolAsyncIterator] = function () {\n  return streamToAsyncIterator(this)\n}\nReadable.prototype.iterator = function (options) {\n  if (options !== undefined) {\n    validateObject(options, 'options')\n  }\n  return streamToAsyncIterator(this, options)\n}\nfunction streamToAsyncIterator(stream, options) {\n  if (typeof stream.read !== 'function') {\n    stream = Readable.wrap(stream, {\n      objectMode: true\n    })\n  }\n  const iter = createAsyncIterator(stream, options)\n  iter.stream = stream\n  return iter\n}\nasync function* createAsyncIterator(stream, options) {\n  let callback = nop\n  function next(resolve) {\n    if (this === stream) {\n      callback()\n      callback = nop\n    } else {\n      callback = resolve\n    }\n  }\n  stream.on('readable', next)\n  let error\n  const cleanup = eos(\n    stream,\n    {\n      writable: false\n    },\n    (err) => {\n      error = err ? aggregateTwoErrors(error, err) : null\n      callback()\n      callback = nop\n    }\n  )\n  try {\n    while (true) {\n      const chunk = stream.destroyed ? null : stream.read()\n      if (chunk !== null) {\n        yield chunk\n      } else if (error) {\n        throw error\n      } else if (error === null) {\n        return\n      } else {\n        await new Promise(next)\n      }\n    }\n  } catch (err) {\n    error = aggregateTwoErrors(error, err)\n    throw error\n  } finally {\n    if (\n      (error || (options === null || options === undefined ? undefined : options.destroyOnReturn) !== false) &&\n      (error === undefined || stream._readableState.autoDestroy)\n    ) {\n      destroyImpl.destroyer(stream, null)\n    } else {\n      stream.off('readable', next)\n      cleanup()\n    }\n  }\n}\n\n// Making it explicit these properties are not enumerable\n// because otherwise some prototype manipulation in\n// userland will fail.\nObjectDefineProperties(Readable.prototype, {\n  readable: {\n    __proto__: null,\n    get() {\n      const r = this._readableState\n      // r.readable === false means that this is part of a Duplex stream\n      // where the readable side was disabled upon construction.\n      // Compat. The user might manually disable readable side through\n      // deprecated setter.\n      return !!r && r.readable !== false && !r.destroyed && !r.errorEmitted && !r.endEmitted\n    },\n    set(val) {\n      // Backwards compat.\n      if (this._readableState) {\n        this._readableState.readable = !!val\n      }\n    }\n  },\n  readableDidRead: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState.dataEmitted\n    }\n  },\n  readableAborted: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return !!(\n        this._readableState.readable !== false &&\n        (this._readableState.destroyed || this._readableState.errored) &&\n        !this._readableState.endEmitted\n      )\n    }\n  },\n  readableHighWaterMark: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState.highWaterMark\n    }\n  },\n  readableBuffer: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState && this._readableState.buffer\n    }\n  },\n  readableFlowing: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState.flowing\n    },\n    set: function (state) {\n      if (this._readableState) {\n        this._readableState.flowing = state\n      }\n    }\n  },\n  readableLength: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState.length\n    }\n  },\n  readableObjectMode: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.objectMode : false\n    }\n  },\n  readableEncoding: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.encoding : null\n    }\n  },\n  errored: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.errored : null\n    }\n  },\n  closed: {\n    __proto__: null,\n    get() {\n      return this._readableState ? this._readableState.closed : false\n    }\n  },\n  destroyed: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.destroyed : false\n    },\n    set(value) {\n      // We ignore the value if the stream\n      // has not been initialized yet.\n      if (!this._readableState) {\n        return\n      }\n\n      // Backward compatibility, the user is explicitly\n      // managing destroyed.\n      this._readableState.destroyed = value\n    }\n  },\n  readableEnded: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.endEmitted : false\n    }\n  }\n})\nObjectDefineProperties(ReadableState.prototype, {\n  // Legacy getter for `pipesCount`.\n  pipesCount: {\n    __proto__: null,\n    get() {\n      return this.pipes.length\n    }\n  },\n  // Legacy property for `paused`.\n  paused: {\n    __proto__: null,\n    get() {\n      return this[kPaused] !== false\n    },\n    set(value) {\n      this[kPaused] = !!value\n    }\n  }\n})\n\n// Exposed for testing purposes only.\nReadable._fromList = fromList\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered.\n  if (state.length === 0) return null\n  let ret\n  if (state.objectMode) ret = state.buffer.shift()\n  else if (!n || n >= state.length) {\n    // Read it all, truncate the list.\n    if (state.decoder) ret = state.buffer.join('')\n    else if (state.buffer.length === 1) ret = state.buffer.first()\n    else ret = state.buffer.concat(state.length)\n    state.buffer.clear()\n  } else {\n    // read part of list.\n    ret = state.buffer.consume(n, state.decoder)\n  }\n  return ret\n}\nfunction endReadable(stream) {\n  const state = stream._readableState\n  debug('endReadable', state.endEmitted)\n  if (!state.endEmitted) {\n    state.ended = true\n    process.nextTick(endReadableNT, state, stream)\n  }\n}\nfunction endReadableNT(state, stream) {\n  debug('endReadableNT', state.endEmitted, state.length)\n\n  // Check that we didn't get one last unshift.\n  if (!state.errored && !state.closeEmitted && !state.endEmitted && state.length === 0) {\n    state.endEmitted = true\n    stream.emit('end')\n    if (stream.writable && stream.allowHalfOpen === false) {\n      process.nextTick(endWritableNT, stream)\n    } else if (state.autoDestroy) {\n      // In case of duplex streams we need a way to detect\n      // if the writable side is ready for autoDestroy as well.\n      const wState = stream._writableState\n      const autoDestroy =\n        !wState ||\n        (wState.autoDestroy &&\n          // We don't expect the writable to ever 'finish'\n          // if writable is explicitly set to false.\n          (wState.finished || wState.writable === false))\n      if (autoDestroy) {\n        stream.destroy()\n      }\n    }\n  }\n}\nfunction endWritableNT(stream) {\n  const writable = stream.writable && !stream.writableEnded && !stream.destroyed\n  if (writable) {\n    stream.end()\n  }\n}\nReadable.from = function (iterable, opts) {\n  return from(Readable, iterable, opts)\n}\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n  if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n  return webStreamsAdapters\n}\nReadable.fromWeb = function (readableStream, options) {\n  return lazyWebStreams().newStreamReadableFromReadableStream(readableStream, options)\n}\nReadable.toWeb = function (streamReadable, options) {\n  return lazyWebStreams().newReadableStreamFromStreamReadable(streamReadable, options)\n}\nReadable.wrap = function (src, options) {\n  var _ref, _src$readableObjectMo\n  return new Readable({\n    objectMode:\n      (_ref =\n        (_src$readableObjectMo = src.readableObjectMode) !== null && _src$readableObjectMo !== undefined\n          ? _src$readableObjectMo\n          : src.objectMode) !== null && _ref !== undefined\n        ? _ref\n        : true,\n    ...options,\n    destroy(err, callback) {\n      destroyImpl.destroyer(src, err)\n      callback(err)\n    }\n  }).wrap(src)\n}\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n;('use strict')\nconst {\n  ArrayPrototypeSlice,\n  Error,\n  FunctionPrototypeSymbolHasInstance,\n  ObjectDefineProperty,\n  ObjectDefineProperties,\n  ObjectSetPrototypeOf,\n  StringPrototypeToLowerCase,\n  Symbol,\n  SymbolHasInstance\n} = require('../../ours/primordials')\nmodule.exports = Writable\nWritable.WritableState = WritableState\nconst { EventEmitter: EE } = require('events')\nconst Stream = require('./legacy').Stream\nconst { Buffer } = require('buffer')\nconst destroyImpl = require('./destroy')\nconst { addAbortSignal } = require('./add-abort-signal')\nconst { getHighWaterMark, getDefaultHighWaterMark } = require('./state')\nconst {\n  ERR_INVALID_ARG_TYPE,\n  ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK,\n  ERR_STREAM_CANNOT_PIPE,\n  ERR_STREAM_DESTROYED,\n  ERR_STREAM_ALREADY_FINISHED,\n  ERR_STREAM_NULL_VALUES,\n  ERR_STREAM_WRITE_AFTER_END,\n  ERR_UNKNOWN_ENCODING\n} = require('../../ours/errors').codes\nconst { errorOrDestroy } = destroyImpl\nObjectSetPrototypeOf(Writable.prototype, Stream.prototype)\nObjectSetPrototypeOf(Writable, Stream)\nfunction nop() {}\nconst kOnFinished = Symbol('kOnFinished')\nfunction WritableState(options, stream, isDuplex) {\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream,\n  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof require('./duplex')\n\n  // Object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!(options && options.objectMode)\n  if (isDuplex) this.objectMode = this.objectMode || !!(options && options.writableObjectMode)\n\n  // The point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write().\n  this.highWaterMark = options\n    ? getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex)\n    : getDefaultHighWaterMark(false)\n\n  // if _final has been called.\n  this.finalCalled = false\n\n  // drain event flag.\n  this.needDrain = false\n  // At the start of calling end()\n  this.ending = false\n  // When end() has been called, and returned.\n  this.ended = false\n  // When 'finish' is emitted.\n  this.finished = false\n\n  // Has it been destroyed\n  this.destroyed = false\n\n  // Should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  const noDecode = !!(options && options.decodeStrings === false)\n  this.decodeStrings = !noDecode\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = (options && options.defaultEncoding) || 'utf8'\n\n  // Not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0\n\n  // A flag to see when we're in the middle of a write.\n  this.writing = false\n\n  // When true all writes will be buffered until .uncork() call.\n  this.corked = 0\n\n  // A flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true\n\n  // A flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false\n\n  // The callback that's passed to _write(chunk, cb).\n  this.onwrite = onwrite.bind(undefined, stream)\n\n  // The callback that the user supplies to write(chunk, encoding, cb).\n  this.writecb = null\n\n  // The amount that is being written when _write is called.\n  this.writelen = 0\n\n  // Storage for data passed to the afterWrite() callback in case of\n  // synchronous _write() completion.\n  this.afterWriteTickInfo = null\n  resetBuffer(this)\n\n  // Number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted.\n  this.pendingcb = 0\n\n  // Stream is still being constructed and cannot be\n  // destroyed until construction finished or failed.\n  // Async construction is opt in, therefore we start as\n  // constructed.\n  this.constructed = true\n\n  // Emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams.\n  this.prefinished = false\n\n  // True if the error was already emitted and should not be thrown again.\n  this.errorEmitted = false\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = !options || options.emitClose !== false\n\n  // Should .destroy() be called after 'finish' (and potentially 'end').\n  this.autoDestroy = !options || options.autoDestroy !== false\n\n  // Indicates whether the stream has errored. When true all write() calls\n  // should return false. This is needed since when autoDestroy\n  // is disabled we need a way to tell whether the stream has failed.\n  this.errored = null\n\n  // Indicates whether the stream has finished destroying.\n  this.closed = false\n\n  // True if close has been emitted or would have been emitted\n  // depending on emitClose.\n  this.closeEmitted = false\n  this[kOnFinished] = []\n}\nfunction resetBuffer(state) {\n  state.buffered = []\n  state.bufferedIndex = 0\n  state.allBuffers = true\n  state.allNoop = true\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n  return ArrayPrototypeSlice(this.buffered, this.bufferedIndex)\n}\nObjectDefineProperty(WritableState.prototype, 'bufferedRequestCount', {\n  __proto__: null,\n  get() {\n    return this.buffered.length - this.bufferedIndex\n  }\n})\nfunction Writable(options) {\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the WritableState constructor, at least with V8 6.5.\n  const isDuplex = this instanceof require('./duplex')\n  if (!isDuplex && !FunctionPrototypeSymbolHasInstance(Writable, this)) return new Writable(options)\n  this._writableState = new WritableState(options, this, isDuplex)\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write\n    if (typeof options.writev === 'function') this._writev = options.writev\n    if (typeof options.destroy === 'function') this._destroy = options.destroy\n    if (typeof options.final === 'function') this._final = options.final\n    if (typeof options.construct === 'function') this._construct = options.construct\n    if (options.signal) addAbortSignal(options.signal, this)\n  }\n  Stream.call(this, options)\n  destroyImpl.construct(this, () => {\n    const state = this._writableState\n    if (!state.writing) {\n      clearBuffer(this, state)\n    }\n    finishMaybe(this, state)\n  })\n}\nObjectDefineProperty(Writable, SymbolHasInstance, {\n  __proto__: null,\n  value: function (object) {\n    if (FunctionPrototypeSymbolHasInstance(this, object)) return true\n    if (this !== Writable) return false\n    return object && object._writableState instanceof WritableState\n  }\n})\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE())\n}\nfunction _write(stream, chunk, encoding, cb) {\n  const state = stream._writableState\n  if (typeof encoding === 'function') {\n    cb = encoding\n    encoding = state.defaultEncoding\n  } else {\n    if (!encoding) encoding = state.defaultEncoding\n    else if (encoding !== 'buffer' && !Buffer.isEncoding(encoding)) throw new ERR_UNKNOWN_ENCODING(encoding)\n    if (typeof cb !== 'function') cb = nop\n  }\n  if (chunk === null) {\n    throw new ERR_STREAM_NULL_VALUES()\n  } else if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      if (state.decodeStrings !== false) {\n        chunk = Buffer.from(chunk, encoding)\n        encoding = 'buffer'\n      }\n    } else if (chunk instanceof Buffer) {\n      encoding = 'buffer'\n    } else if (Stream._isUint8Array(chunk)) {\n      chunk = Stream._uint8ArrayToBuffer(chunk)\n      encoding = 'buffer'\n    } else {\n      throw new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk)\n    }\n  }\n  let err\n  if (state.ending) {\n    err = new ERR_STREAM_WRITE_AFTER_END()\n  } else if (state.destroyed) {\n    err = new ERR_STREAM_DESTROYED('write')\n  }\n  if (err) {\n    process.nextTick(cb, err)\n    errorOrDestroy(stream, err, true)\n    return err\n  }\n  state.pendingcb++\n  return writeOrBuffer(stream, state, chunk, encoding, cb)\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n  return _write(this, chunk, encoding, cb) === true\n}\nWritable.prototype.cork = function () {\n  this._writableState.corked++\n}\nWritable.prototype.uncork = function () {\n  const state = this._writableState\n  if (state.corked) {\n    state.corked--\n    if (!state.writing) clearBuffer(this, state)\n  }\n}\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = StringPrototypeToLowerCase(encoding)\n  if (!Buffer.isEncoding(encoding)) throw new ERR_UNKNOWN_ENCODING(encoding)\n  this._writableState.defaultEncoding = encoding\n  return this\n}\n\n// If we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, chunk, encoding, callback) {\n  const len = state.objectMode ? 1 : chunk.length\n  state.length += len\n\n  // stream._write resets state.length\n  const ret = state.length < state.highWaterMark\n  // We must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true\n  if (state.writing || state.corked || state.errored || !state.constructed) {\n    state.buffered.push({\n      chunk,\n      encoding,\n      callback\n    })\n    if (state.allBuffers && encoding !== 'buffer') {\n      state.allBuffers = false\n    }\n    if (state.allNoop && callback !== nop) {\n      state.allNoop = false\n    }\n  } else {\n    state.writelen = len\n    state.writecb = callback\n    state.writing = true\n    state.sync = true\n    stream._write(chunk, encoding, state.onwrite)\n    state.sync = false\n  }\n\n  // Return false if errored or destroyed in order to break\n  // any synchronous while(stream.write(data)) loops.\n  return ret && !state.errored && !state.destroyed\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len\n  state.writecb = cb\n  state.writing = true\n  state.sync = true\n  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'))\n  else if (writev) stream._writev(chunk, state.onwrite)\n  else stream._write(chunk, encoding, state.onwrite)\n  state.sync = false\n}\nfunction onwriteError(stream, state, er, cb) {\n  --state.pendingcb\n  cb(er)\n  // Ensure callbacks are invoked even when autoDestroy is\n  // not enabled. Passing `er` here doesn't make sense since\n  // it's related to one specific write, not to the buffered\n  // writes.\n  errorBuffer(state)\n  // This can emit error, but error must always follow cb.\n  errorOrDestroy(stream, er)\n}\nfunction onwrite(stream, er) {\n  const state = stream._writableState\n  const sync = state.sync\n  const cb = state.writecb\n  if (typeof cb !== 'function') {\n    errorOrDestroy(stream, new ERR_MULTIPLE_CALLBACK())\n    return\n  }\n  state.writing = false\n  state.writecb = null\n  state.length -= state.writelen\n  state.writelen = 0\n  if (er) {\n    // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n    er.stack // eslint-disable-line no-unused-expressions\n\n    if (!state.errored) {\n      state.errored = er\n    }\n\n    // In case of duplex streams we need to notify the readable side of the\n    // error.\n    if (stream._readableState && !stream._readableState.errored) {\n      stream._readableState.errored = er\n    }\n    if (sync) {\n      process.nextTick(onwriteError, stream, state, er, cb)\n    } else {\n      onwriteError(stream, state, er, cb)\n    }\n  } else {\n    if (state.buffered.length > state.bufferedIndex) {\n      clearBuffer(stream, state)\n    }\n    if (sync) {\n      // It is a common case that the callback passed to .write() is always\n      // the same. In that case, we do not schedule a new nextTick(), but\n      // rather just increase a counter, to improve performance and avoid\n      // memory allocations.\n      if (state.afterWriteTickInfo !== null && state.afterWriteTickInfo.cb === cb) {\n        state.afterWriteTickInfo.count++\n      } else {\n        state.afterWriteTickInfo = {\n          count: 1,\n          cb,\n          stream,\n          state\n        }\n        process.nextTick(afterWriteTick, state.afterWriteTickInfo)\n      }\n    } else {\n      afterWrite(stream, state, 1, cb)\n    }\n  }\n}\nfunction afterWriteTick({ stream, state, count, cb }) {\n  state.afterWriteTickInfo = null\n  return afterWrite(stream, state, count, cb)\n}\nfunction afterWrite(stream, state, count, cb) {\n  const needDrain = !state.ending && !stream.destroyed && state.length === 0 && state.needDrain\n  if (needDrain) {\n    state.needDrain = false\n    stream.emit('drain')\n  }\n  while (count-- > 0) {\n    state.pendingcb--\n    cb()\n  }\n  if (state.destroyed) {\n    errorBuffer(state)\n  }\n  finishMaybe(stream, state)\n}\n\n// If there's something in the buffer waiting, then invoke callbacks.\nfunction errorBuffer(state) {\n  if (state.writing) {\n    return\n  }\n  for (let n = state.bufferedIndex; n < state.buffered.length; ++n) {\n    var _state$errored\n    const { chunk, callback } = state.buffered[n]\n    const len = state.objectMode ? 1 : chunk.length\n    state.length -= len\n    callback(\n      (_state$errored = state.errored) !== null && _state$errored !== undefined\n        ? _state$errored\n        : new ERR_STREAM_DESTROYED('write')\n    )\n  }\n  const onfinishCallbacks = state[kOnFinished].splice(0)\n  for (let i = 0; i < onfinishCallbacks.length; i++) {\n    var _state$errored2\n    onfinishCallbacks[i](\n      (_state$errored2 = state.errored) !== null && _state$errored2 !== undefined\n        ? _state$errored2\n        : new ERR_STREAM_DESTROYED('end')\n    )\n  }\n  resetBuffer(state)\n}\n\n// If there's something in the buffer waiting, then process it.\nfunction clearBuffer(stream, state) {\n  if (state.corked || state.bufferProcessing || state.destroyed || !state.constructed) {\n    return\n  }\n  const { buffered, bufferedIndex, objectMode } = state\n  const bufferedLength = buffered.length - bufferedIndex\n  if (!bufferedLength) {\n    return\n  }\n  let i = bufferedIndex\n  state.bufferProcessing = true\n  if (bufferedLength > 1 && stream._writev) {\n    state.pendingcb -= bufferedLength - 1\n    const callback = state.allNoop\n      ? nop\n      : (err) => {\n          for (let n = i; n < buffered.length; ++n) {\n            buffered[n].callback(err)\n          }\n        }\n    // Make a copy of `buffered` if it's going to be used by `callback` above,\n    // since `doWrite` will mutate the array.\n    const chunks = state.allNoop && i === 0 ? buffered : ArrayPrototypeSlice(buffered, i)\n    chunks.allBuffers = state.allBuffers\n    doWrite(stream, state, true, state.length, chunks, '', callback)\n    resetBuffer(state)\n  } else {\n    do {\n      const { chunk, encoding, callback } = buffered[i]\n      buffered[i++] = null\n      const len = objectMode ? 1 : chunk.length\n      doWrite(stream, state, false, len, chunk, encoding, callback)\n    } while (i < buffered.length && !state.writing)\n    if (i === buffered.length) {\n      resetBuffer(state)\n    } else if (i > 256) {\n      buffered.splice(0, i)\n      state.bufferedIndex = 0\n    } else {\n      state.bufferedIndex = i\n    }\n  }\n  state.bufferProcessing = false\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n  if (this._writev) {\n    this._writev(\n      [\n        {\n          chunk,\n          encoding\n        }\n      ],\n      cb\n    )\n  } else {\n    throw new ERR_METHOD_NOT_IMPLEMENTED('_write()')\n  }\n}\nWritable.prototype._writev = null\nWritable.prototype.end = function (chunk, encoding, cb) {\n  const state = this._writableState\n  if (typeof chunk === 'function') {\n    cb = chunk\n    chunk = null\n    encoding = null\n  } else if (typeof encoding === 'function') {\n    cb = encoding\n    encoding = null\n  }\n  let err\n  if (chunk !== null && chunk !== undefined) {\n    const ret = _write(this, chunk, encoding)\n    if (ret instanceof Error) {\n      err = ret\n    }\n  }\n\n  // .end() fully uncorks.\n  if (state.corked) {\n    state.corked = 1\n    this.uncork()\n  }\n  if (err) {\n    // Do nothing...\n  } else if (!state.errored && !state.ending) {\n    // This is forgiving in terms of unnecessary calls to end() and can hide\n    // logic errors. However, usually such errors are harmless and causing a\n    // hard error can be disproportionately destructive. It is not always\n    // trivial for the user to determine whether end() needs to be called\n    // or not.\n\n    state.ending = true\n    finishMaybe(this, state, true)\n    state.ended = true\n  } else if (state.finished) {\n    err = new ERR_STREAM_ALREADY_FINISHED('end')\n  } else if (state.destroyed) {\n    err = new ERR_STREAM_DESTROYED('end')\n  }\n  if (typeof cb === 'function') {\n    if (err || state.finished) {\n      process.nextTick(cb, err)\n    } else {\n      state[kOnFinished].push(cb)\n    }\n  }\n  return this\n}\nfunction needFinish(state) {\n  return (\n    state.ending &&\n    !state.destroyed &&\n    state.constructed &&\n    state.length === 0 &&\n    !state.errored &&\n    state.buffered.length === 0 &&\n    !state.finished &&\n    !state.writing &&\n    !state.errorEmitted &&\n    !state.closeEmitted\n  )\n}\nfunction callFinal(stream, state) {\n  let called = false\n  function onFinish(err) {\n    if (called) {\n      errorOrDestroy(stream, err !== null && err !== undefined ? err : ERR_MULTIPLE_CALLBACK())\n      return\n    }\n    called = true\n    state.pendingcb--\n    if (err) {\n      const onfinishCallbacks = state[kOnFinished].splice(0)\n      for (let i = 0; i < onfinishCallbacks.length; i++) {\n        onfinishCallbacks[i](err)\n      }\n      errorOrDestroy(stream, err, state.sync)\n    } else if (needFinish(state)) {\n      state.prefinished = true\n      stream.emit('prefinish')\n      // Backwards compat. Don't check state.sync here.\n      // Some streams assume 'finish' will be emitted\n      // asynchronously relative to _final callback.\n      state.pendingcb++\n      process.nextTick(finish, stream, state)\n    }\n  }\n  state.sync = true\n  state.pendingcb++\n  try {\n    stream._final(onFinish)\n  } catch (err) {\n    onFinish(err)\n  }\n  state.sync = false\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.finalCalled = true\n      callFinal(stream, state)\n    } else {\n      state.prefinished = true\n      stream.emit('prefinish')\n    }\n  }\n}\nfunction finishMaybe(stream, state, sync) {\n  if (needFinish(state)) {\n    prefinish(stream, state)\n    if (state.pendingcb === 0) {\n      if (sync) {\n        state.pendingcb++\n        process.nextTick(\n          (stream, state) => {\n            if (needFinish(state)) {\n              finish(stream, state)\n            } else {\n              state.pendingcb--\n            }\n          },\n          stream,\n          state\n        )\n      } else if (needFinish(state)) {\n        state.pendingcb++\n        finish(stream, state)\n      }\n    }\n  }\n}\nfunction finish(stream, state) {\n  state.pendingcb--\n  state.finished = true\n  const onfinishCallbacks = state[kOnFinished].splice(0)\n  for (let i = 0; i < onfinishCallbacks.length; i++) {\n    onfinishCallbacks[i]()\n  }\n  stream.emit('finish')\n  if (state.autoDestroy) {\n    // In case of duplex streams we need a way to detect\n    // if the readable side is ready for autoDestroy as well.\n    const rState = stream._readableState\n    const autoDestroy =\n      !rState ||\n      (rState.autoDestroy &&\n        // We don't expect the readable to ever 'end'\n        // if readable is explicitly set to false.\n        (rState.endEmitted || rState.readable === false))\n    if (autoDestroy) {\n      stream.destroy()\n    }\n  }\n}\nObjectDefineProperties(Writable.prototype, {\n  closed: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.closed : false\n    }\n  },\n  destroyed: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.destroyed : false\n    },\n    set(value) {\n      // Backward compatibility, the user is explicitly managing destroyed.\n      if (this._writableState) {\n        this._writableState.destroyed = value\n      }\n    }\n  },\n  writable: {\n    __proto__: null,\n    get() {\n      const w = this._writableState\n      // w.writable === false means that this is part of a Duplex stream\n      // where the writable side was disabled upon construction.\n      // Compat. The user might manually disable writable side through\n      // deprecated setter.\n      return !!w && w.writable !== false && !w.destroyed && !w.errored && !w.ending && !w.ended\n    },\n    set(val) {\n      // Backwards compatible.\n      if (this._writableState) {\n        this._writableState.writable = !!val\n      }\n    }\n  },\n  writableFinished: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.finished : false\n    }\n  },\n  writableObjectMode: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.objectMode : false\n    }\n  },\n  writableBuffer: {\n    __proto__: null,\n    get() {\n      return this._writableState && this._writableState.getBuffer()\n    }\n  },\n  writableEnded: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.ending : false\n    }\n  },\n  writableNeedDrain: {\n    __proto__: null,\n    get() {\n      const wState = this._writableState\n      if (!wState) return false\n      return !wState.destroyed && !wState.ending && wState.needDrain\n    }\n  },\n  writableHighWaterMark: {\n    __proto__: null,\n    get() {\n      return this._writableState && this._writableState.highWaterMark\n    }\n  },\n  writableCorked: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.corked : 0\n    }\n  },\n  writableLength: {\n    __proto__: null,\n    get() {\n      return this._writableState && this._writableState.length\n    }\n  },\n  errored: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._writableState ? this._writableState.errored : null\n    }\n  },\n  writableAborted: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return !!(\n        this._writableState.writable !== false &&\n        (this._writableState.destroyed || this._writableState.errored) &&\n        !this._writableState.finished\n      )\n    }\n  }\n})\nconst destroy = destroyImpl.destroy\nWritable.prototype.destroy = function (err, cb) {\n  const state = this._writableState\n\n  // Invoke pending callbacks.\n  if (!state.destroyed && (state.bufferedIndex < state.buffered.length || state[kOnFinished].length)) {\n    process.nextTick(errorBuffer, state)\n  }\n  destroy.call(this, err, cb)\n  return this\n}\nWritable.prototype._undestroy = destroyImpl.undestroy\nWritable.prototype._destroy = function (err, cb) {\n  cb(err)\n}\nWritable.prototype[EE.captureRejectionSymbol] = function (err) {\n  this.destroy(err)\n}\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n  if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n  return webStreamsAdapters\n}\nWritable.fromWeb = function (writableStream, options) {\n  return lazyWebStreams().newStreamWritableFromWritableStream(writableStream, options)\n}\nWritable.toWeb = function (streamWritable) {\n  return lazyWebStreams().newWritableStreamFromStreamWritable(streamWritable)\n}\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\n;('use strict')\nconst bufferModule = require('buffer')\nconst {\n  isReadable,\n  isWritable,\n  isIterable,\n  isNodeStream,\n  isReadableNodeStream,\n  isWritableNodeStream,\n  isDuplexNodeStream,\n  isReadableStream,\n  isWritableStream\n} = require('./utils')\nconst eos = require('./end-of-stream')\nconst {\n  AbortError,\n  codes: { ERR_INVALID_ARG_TYPE, ERR_INVALID_RETURN_VALUE }\n} = require('../../ours/errors')\nconst { destroyer } = require('./destroy')\nconst Duplex = require('./duplex')\nconst Readable = require('./readable')\nconst Writable = require('./writable')\nconst { createDeferredPromise } = require('../../ours/util')\nconst from = require('./from')\nconst Blob = globalThis.Blob || bufferModule.Blob\nconst isBlob =\n  typeof Blob !== 'undefined'\n    ? function isBlob(b) {\n        return b instanceof Blob\n      }\n    : function isBlob(b) {\n        return false\n      }\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst { FunctionPrototypeCall } = require('../../ours/primordials')\n\n// This is needed for pre node 17.\nclass Duplexify extends Duplex {\n  constructor(options) {\n    super(options)\n\n    // https://github.com/nodejs/node/pull/34385\n\n    if ((options === null || options === undefined ? undefined : options.readable) === false) {\n      this._readableState.readable = false\n      this._readableState.ended = true\n      this._readableState.endEmitted = true\n    }\n    if ((options === null || options === undefined ? undefined : options.writable) === false) {\n      this._writableState.writable = false\n      this._writableState.ending = true\n      this._writableState.ended = true\n      this._writableState.finished = true\n    }\n  }\n}\nmodule.exports = function duplexify(body, name) {\n  if (isDuplexNodeStream(body)) {\n    return body\n  }\n  if (isReadableNodeStream(body)) {\n    return _duplexify({\n      readable: body\n    })\n  }\n  if (isWritableNodeStream(body)) {\n    return _duplexify({\n      writable: body\n    })\n  }\n  if (isNodeStream(body)) {\n    return _duplexify({\n      writable: false,\n      readable: false\n    })\n  }\n  if (isReadableStream(body)) {\n    return _duplexify({\n      readable: Readable.fromWeb(body)\n    })\n  }\n  if (isWritableStream(body)) {\n    return _duplexify({\n      writable: Writable.fromWeb(body)\n    })\n  }\n  if (typeof body === 'function') {\n    const { value, write, final, destroy } = fromAsyncGen(body)\n    if (isIterable(value)) {\n      return from(Duplexify, value, {\n        // TODO (ronag): highWaterMark?\n        objectMode: true,\n        write,\n        final,\n        destroy\n      })\n    }\n    const then = value === null || value === undefined ? undefined : value.then\n    if (typeof then === 'function') {\n      let d\n      const promise = FunctionPrototypeCall(\n        then,\n        value,\n        (val) => {\n          if (val != null) {\n            throw new ERR_INVALID_RETURN_VALUE('nully', 'body', val)\n          }\n        },\n        (err) => {\n          destroyer(d, err)\n        }\n      )\n      return (d = new Duplexify({\n        // TODO (ronag): highWaterMark?\n        objectMode: true,\n        readable: false,\n        write,\n        final(cb) {\n          final(async () => {\n            try {\n              await promise\n              process.nextTick(cb, null)\n            } catch (err) {\n              process.nextTick(cb, err)\n            }\n          })\n        },\n        destroy\n      }))\n    }\n    throw new ERR_INVALID_RETURN_VALUE('Iterable, AsyncIterable or AsyncFunction', name, value)\n  }\n  if (isBlob(body)) {\n    return duplexify(body.arrayBuffer())\n  }\n  if (isIterable(body)) {\n    return from(Duplexify, body, {\n      // TODO (ronag): highWaterMark?\n      objectMode: true,\n      writable: false\n    })\n  }\n  if (\n    isReadableStream(body === null || body === undefined ? undefined : body.readable) &&\n    isWritableStream(body === null || body === undefined ? undefined : body.writable)\n  ) {\n    return Duplexify.fromWeb(body)\n  }\n  if (\n    typeof (body === null || body === undefined ? undefined : body.writable) === 'object' ||\n    typeof (body === null || body === undefined ? undefined : body.readable) === 'object'\n  ) {\n    const readable =\n      body !== null && body !== undefined && body.readable\n        ? isReadableNodeStream(body === null || body === undefined ? undefined : body.readable)\n          ? body === null || body === undefined\n            ? undefined\n            : body.readable\n          : duplexify(body.readable)\n        : undefined\n    const writable =\n      body !== null && body !== undefined && body.writable\n        ? isWritableNodeStream(body === null || body === undefined ? undefined : body.writable)\n          ? body === null || body === undefined\n            ? undefined\n            : body.writable\n          : duplexify(body.writable)\n        : undefined\n    return _duplexify({\n      readable,\n      writable\n    })\n  }\n  const then = body === null || body === undefined ? undefined : body.then\n  if (typeof then === 'function') {\n    let d\n    FunctionPrototypeCall(\n      then,\n      body,\n      (val) => {\n        if (val != null) {\n          d.push(val)\n        }\n        d.push(null)\n      },\n      (err) => {\n        destroyer(d, err)\n      }\n    )\n    return (d = new Duplexify({\n      objectMode: true,\n      writable: false,\n      read() {}\n    }))\n  }\n  throw new ERR_INVALID_ARG_TYPE(\n    name,\n    [\n      'Blob',\n      'ReadableStream',\n      'WritableStream',\n      'Stream',\n      'Iterable',\n      'AsyncIterable',\n      'Function',\n      '{ readable, writable } pair',\n      'Promise'\n    ],\n    body\n  )\n}\nfunction fromAsyncGen(fn) {\n  let { promise, resolve } = createDeferredPromise()\n  const ac = new AbortController()\n  const signal = ac.signal\n  const value = fn(\n    (async function* () {\n      while (true) {\n        const _promise = promise\n        promise = null\n        const { chunk, done, cb } = await _promise\n        process.nextTick(cb)\n        if (done) return\n        if (signal.aborted)\n          throw new AbortError(undefined, {\n            cause: signal.reason\n          })\n        ;({ promise, resolve } = createDeferredPromise())\n        yield chunk\n      }\n    })(),\n    {\n      signal\n    }\n  )\n  return {\n    value,\n    write(chunk, encoding, cb) {\n      const _resolve = resolve\n      resolve = null\n      _resolve({\n        chunk,\n        done: false,\n        cb\n      })\n    },\n    final(cb) {\n      const _resolve = resolve\n      resolve = null\n      _resolve({\n        done: true,\n        cb\n      })\n    },\n    destroy(err, cb) {\n      ac.abort()\n      cb(err)\n    }\n  }\n}\nfunction _duplexify(pair) {\n  const r = pair.readable && typeof pair.readable.read !== 'function' ? Readable.wrap(pair.readable) : pair.readable\n  const w = pair.writable\n  let readable = !!isReadable(r)\n  let writable = !!isWritable(w)\n  let ondrain\n  let onfinish\n  let onreadable\n  let onclose\n  let d\n  function onfinished(err) {\n    const cb = onclose\n    onclose = null\n    if (cb) {\n      cb(err)\n    } else if (err) {\n      d.destroy(err)\n    }\n  }\n\n  // TODO(ronag): Avoid double buffering.\n  // Implement Writable/Readable/Duplex traits.\n  // See, https://github.com/nodejs/node/pull/33515.\n  d = new Duplexify({\n    // TODO (ronag): highWaterMark?\n    readableObjectMode: !!(r !== null && r !== undefined && r.readableObjectMode),\n    writableObjectMode: !!(w !== null && w !== undefined && w.writableObjectMode),\n    readable,\n    writable\n  })\n  if (writable) {\n    eos(w, (err) => {\n      writable = false\n      if (err) {\n        destroyer(r, err)\n      }\n      onfinished(err)\n    })\n    d._write = function (chunk, encoding, callback) {\n      if (w.write(chunk, encoding)) {\n        callback()\n      } else {\n        ondrain = callback\n      }\n    }\n    d._final = function (callback) {\n      w.end()\n      onfinish = callback\n    }\n    w.on('drain', function () {\n      if (ondrain) {\n        const cb = ondrain\n        ondrain = null\n        cb()\n      }\n    })\n    w.on('finish', function () {\n      if (onfinish) {\n        const cb = onfinish\n        onfinish = null\n        cb()\n      }\n    })\n  }\n  if (readable) {\n    eos(r, (err) => {\n      readable = false\n      if (err) {\n        destroyer(r, err)\n      }\n      onfinished(err)\n    })\n    r.on('readable', function () {\n      if (onreadable) {\n        const cb = onreadable\n        onreadable = null\n        cb()\n      }\n    })\n    r.on('end', function () {\n      d.push(null)\n    })\n    d._read = function () {\n      while (true) {\n        const buf = r.read()\n        if (buf === null) {\n          onreadable = d._read\n          return\n        }\n        if (!d.push(buf)) {\n          return\n        }\n      }\n    }\n  }\n  d._destroy = function (err, callback) {\n    if (!err && onclose !== null) {\n      err = new AbortError()\n    }\n    onreadable = null\n    ondrain = null\n    onfinish = null\n    if (onclose === null) {\n      callback(err)\n    } else {\n      onclose = callback\n      destroyer(w, err)\n      destroyer(r, err)\n    }\n  }\n  return d\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototype inheritance, this class\n// prototypically inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict'\n\nconst {\n  ObjectDefineProperties,\n  ObjectGetOwnPropertyDescriptor,\n  ObjectKeys,\n  ObjectSetPrototypeOf\n} = require('../../ours/primordials')\nmodule.exports = Duplex\nconst Readable = require('./readable')\nconst Writable = require('./writable')\nObjectSetPrototypeOf(Duplex.prototype, Readable.prototype)\nObjectSetPrototypeOf(Duplex, Readable)\n{\n  const keys = ObjectKeys(Writable.prototype)\n  // Allow the keys array to be GC'ed.\n  for (let i = 0; i < keys.length; i++) {\n    const method = keys[i]\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]\n  }\n}\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options)\n  Readable.call(this, options)\n  Writable.call(this, options)\n  if (options) {\n    this.allowHalfOpen = options.allowHalfOpen !== false\n    if (options.readable === false) {\n      this._readableState.readable = false\n      this._readableState.ended = true\n      this._readableState.endEmitted = true\n    }\n    if (options.writable === false) {\n      this._writableState.writable = false\n      this._writableState.ending = true\n      this._writableState.ended = true\n      this._writableState.finished = true\n    }\n  } else {\n    this.allowHalfOpen = true\n  }\n}\nObjectDefineProperties(Duplex.prototype, {\n  writable: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writable')\n  },\n  writableHighWaterMark: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableHighWaterMark')\n  },\n  writableObjectMode: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableObjectMode')\n  },\n  writableBuffer: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableBuffer')\n  },\n  writableLength: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableLength')\n  },\n  writableFinished: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableFinished')\n  },\n  writableCorked: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableCorked')\n  },\n  writableEnded: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableEnded')\n  },\n  writableNeedDrain: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableNeedDrain')\n  },\n  destroyed: {\n    __proto__: null,\n    get() {\n      if (this._readableState === undefined || this._writableState === undefined) {\n        return false\n      }\n      return this._readableState.destroyed && this._writableState.destroyed\n    },\n    set(value) {\n      // Backward compatibility, the user is explicitly\n      // managing destroyed.\n      if (this._readableState && this._writableState) {\n        this._readableState.destroyed = value\n        this._writableState.destroyed = value\n      }\n    }\n  }\n})\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n  if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n  return webStreamsAdapters\n}\nDuplex.fromWeb = function (pair, options) {\n  return lazyWebStreams().newStreamDuplexFromReadableWritablePair(pair, options)\n}\nDuplex.toWeb = function (duplex) {\n  return lazyWebStreams().newReadableWritablePairFromDuplex(duplex)\n}\nlet duplexify\nDuplex.from = function (body) {\n  if (!duplexify) {\n    duplexify = require('./duplexify')\n  }\n  return duplexify(body, 'body')\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict'\n\nconst { ObjectSetPrototypeOf, Symbol } = require('../../ours/primordials')\nmodule.exports = Transform\nconst { ERR_METHOD_NOT_IMPLEMENTED } = require('../../ours/errors').codes\nconst Duplex = require('./duplex')\nconst { getHighWaterMark } = require('./state')\nObjectSetPrototypeOf(Transform.prototype, Duplex.prototype)\nObjectSetPrototypeOf(Transform, Duplex)\nconst kCallback = Symbol('kCallback')\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options)\n\n  // TODO (ronag): This should preferably always be\n  // applied but would be semver-major. Or even better;\n  // make Transform a Readable with the Writable interface.\n  const readableHighWaterMark = options ? getHighWaterMark(this, options, 'readableHighWaterMark', true) : null\n  if (readableHighWaterMark === 0) {\n    // A Duplex will buffer both on the writable and readable side while\n    // a Transform just wants to buffer hwm number of elements. To avoid\n    // buffering twice we disable buffering on the writable side.\n    options = {\n      ...options,\n      highWaterMark: null,\n      readableHighWaterMark,\n      // TODO (ronag): 0 is not optimal since we have\n      // a \"bug\" where we check needDrain before calling _write and not after.\n      // Refs: https://github.com/nodejs/node/pull/32887\n      // Refs: https://github.com/nodejs/node/pull/35941\n      writableHighWaterMark: options.writableHighWaterMark || 0\n    }\n  }\n  Duplex.call(this, options)\n\n  // We have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false\n  this[kCallback] = null\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform\n    if (typeof options.flush === 'function') this._flush = options.flush\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  // Backwards compat. Some Transform streams incorrectly implement _final\n  // instead of or in addition to _flush. By using 'prefinish' instead of\n  // implementing _final we continue supporting this unfortunate use case.\n  this.on('prefinish', prefinish)\n}\nfunction final(cb) {\n  if (typeof this._flush === 'function' && !this.destroyed) {\n    this._flush((er, data) => {\n      if (er) {\n        if (cb) {\n          cb(er)\n        } else {\n          this.destroy(er)\n        }\n        return\n      }\n      if (data != null) {\n        this.push(data)\n      }\n      this.push(null)\n      if (cb) {\n        cb()\n      }\n    })\n  } else {\n    this.push(null)\n    if (cb) {\n      cb()\n    }\n  }\n}\nfunction prefinish() {\n  if (this._final !== final) {\n    final.call(this)\n  }\n}\nTransform.prototype._final = final\nTransform.prototype._transform = function (chunk, encoding, callback) {\n  throw new ERR_METHOD_NOT_IMPLEMENTED('_transform()')\n}\nTransform.prototype._write = function (chunk, encoding, callback) {\n  const rState = this._readableState\n  const wState = this._writableState\n  const length = rState.length\n  this._transform(chunk, encoding, (err, val) => {\n    if (err) {\n      callback(err)\n      return\n    }\n    if (val != null) {\n      this.push(val)\n    }\n    if (\n      wState.ended ||\n      // Backwards compat.\n      length === rState.length ||\n      // Backwards compat.\n      rState.length < rState.highWaterMark\n    ) {\n      callback()\n    } else {\n      this[kCallback] = callback\n    }\n  })\n}\nTransform.prototype._read = function () {\n  if (this[kCallback]) {\n    const callback = this[kCallback]\n    this[kCallback] = null\n    callback()\n  }\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict'\n\nconst { ObjectSetPrototypeOf } = require('../../ours/primordials')\nmodule.exports = PassThrough\nconst Transform = require('./transform')\nObjectSetPrototypeOf(PassThrough.prototype, Transform.prototype)\nObjectSetPrototypeOf(PassThrough, Transform)\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options)\n  Transform.call(this, options)\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk)\n}\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n;('use strict')\nconst { ArrayIsArray, Promise, SymbolAsyncIterator, SymbolDispose } = require('../../ours/primordials')\nconst eos = require('./end-of-stream')\nconst { once } = require('../../ours/util')\nconst destroyImpl = require('./destroy')\nconst Duplex = require('./duplex')\nconst {\n  aggregateTwoErrors,\n  codes: {\n    ERR_INVALID_ARG_TYPE,\n    ERR_INVALID_RETURN_VALUE,\n    ERR_MISSING_ARGS,\n    ERR_STREAM_DESTROYED,\n    ERR_STREAM_PREMATURE_CLOSE\n  },\n  AbortError\n} = require('../../ours/errors')\nconst { validateFunction, validateAbortSignal } = require('../validators')\nconst {\n  isIterable,\n  isReadable,\n  isReadableNodeStream,\n  isNodeStream,\n  isTransformStream,\n  isWebStream,\n  isReadableStream,\n  isReadableFinished\n} = require('./utils')\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nlet PassThrough\nlet Readable\nlet addAbortListener\nfunction destroyer(stream, reading, writing) {\n  let finished = false\n  stream.on('close', () => {\n    finished = true\n  })\n  const cleanup = eos(\n    stream,\n    {\n      readable: reading,\n      writable: writing\n    },\n    (err) => {\n      finished = !err\n    }\n  )\n  return {\n    destroy: (err) => {\n      if (finished) return\n      finished = true\n      destroyImpl.destroyer(stream, err || new ERR_STREAM_DESTROYED('pipe'))\n    },\n    cleanup\n  }\n}\nfunction popCallback(streams) {\n  // Streams should never be an empty array. It should always contain at least\n  // a single stream. Therefore optimize for the average case instead of\n  // checking for length === 0 as well.\n  validateFunction(streams[streams.length - 1], 'streams[stream.length - 1]')\n  return streams.pop()\n}\nfunction makeAsyncIterable(val) {\n  if (isIterable(val)) {\n    return val\n  } else if (isReadableNodeStream(val)) {\n    // Legacy streams are not Iterable.\n    return fromReadable(val)\n  }\n  throw new ERR_INVALID_ARG_TYPE('val', ['Readable', 'Iterable', 'AsyncIterable'], val)\n}\nasync function* fromReadable(val) {\n  if (!Readable) {\n    Readable = require('./readable')\n  }\n  yield* Readable.prototype[SymbolAsyncIterator].call(val)\n}\nasync function pumpToNode(iterable, writable, finish, { end }) {\n  let error\n  let onresolve = null\n  const resume = (err) => {\n    if (err) {\n      error = err\n    }\n    if (onresolve) {\n      const callback = onresolve\n      onresolve = null\n      callback()\n    }\n  }\n  const wait = () =>\n    new Promise((resolve, reject) => {\n      if (error) {\n        reject(error)\n      } else {\n        onresolve = () => {\n          if (error) {\n            reject(error)\n          } else {\n            resolve()\n          }\n        }\n      }\n    })\n  writable.on('drain', resume)\n  const cleanup = eos(\n    writable,\n    {\n      readable: false\n    },\n    resume\n  )\n  try {\n    if (writable.writableNeedDrain) {\n      await wait()\n    }\n    for await (const chunk of iterable) {\n      if (!writable.write(chunk)) {\n        await wait()\n      }\n    }\n    if (end) {\n      writable.end()\n      await wait()\n    }\n    finish()\n  } catch (err) {\n    finish(error !== err ? aggregateTwoErrors(error, err) : err)\n  } finally {\n    cleanup()\n    writable.off('drain', resume)\n  }\n}\nasync function pumpToWeb(readable, writable, finish, { end }) {\n  if (isTransformStream(writable)) {\n    writable = writable.writable\n  }\n  // https://streams.spec.whatwg.org/#example-manual-write-with-backpressure\n  const writer = writable.getWriter()\n  try {\n    for await (const chunk of readable) {\n      await writer.ready\n      writer.write(chunk).catch(() => {})\n    }\n    await writer.ready\n    if (end) {\n      await writer.close()\n    }\n    finish()\n  } catch (err) {\n    try {\n      await writer.abort(err)\n      finish(err)\n    } catch (err) {\n      finish(err)\n    }\n  }\n}\nfunction pipeline(...streams) {\n  return pipelineImpl(streams, once(popCallback(streams)))\n}\nfunction pipelineImpl(streams, callback, opts) {\n  if (streams.length === 1 && ArrayIsArray(streams[0])) {\n    streams = streams[0]\n  }\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams')\n  }\n  const ac = new AbortController()\n  const signal = ac.signal\n  const outerSignal = opts === null || opts === undefined ? undefined : opts.signal\n\n  // Need to cleanup event listeners if last stream is readable\n  // https://github.com/nodejs/node/issues/35452\n  const lastStreamCleanup = []\n  validateAbortSignal(outerSignal, 'options.signal')\n  function abort() {\n    finishImpl(new AbortError())\n  }\n  addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n  let disposable\n  if (outerSignal) {\n    disposable = addAbortListener(outerSignal, abort)\n  }\n  let error\n  let value\n  const destroys = []\n  let finishCount = 0\n  function finish(err) {\n    finishImpl(err, --finishCount === 0)\n  }\n  function finishImpl(err, final) {\n    var _disposable\n    if (err && (!error || error.code === 'ERR_STREAM_PREMATURE_CLOSE')) {\n      error = err\n    }\n    if (!error && !final) {\n      return\n    }\n    while (destroys.length) {\n      destroys.shift()(error)\n    }\n    ;(_disposable = disposable) === null || _disposable === undefined ? undefined : _disposable[SymbolDispose]()\n    ac.abort()\n    if (final) {\n      if (!error) {\n        lastStreamCleanup.forEach((fn) => fn())\n      }\n      process.nextTick(callback, error, value)\n    }\n  }\n  let ret\n  for (let i = 0; i < streams.length; i++) {\n    const stream = streams[i]\n    const reading = i < streams.length - 1\n    const writing = i > 0\n    const end = reading || (opts === null || opts === undefined ? undefined : opts.end) !== false\n    const isLastStream = i === streams.length - 1\n    if (isNodeStream(stream)) {\n      if (end) {\n        const { destroy, cleanup } = destroyer(stream, reading, writing)\n        destroys.push(destroy)\n        if (isReadable(stream) && isLastStream) {\n          lastStreamCleanup.push(cleanup)\n        }\n      }\n\n      // Catch stream errors that occur after pipe/pump has completed.\n      function onError(err) {\n        if (err && err.name !== 'AbortError' && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n          finish(err)\n        }\n      }\n      stream.on('error', onError)\n      if (isReadable(stream) && isLastStream) {\n        lastStreamCleanup.push(() => {\n          stream.removeListener('error', onError)\n        })\n      }\n    }\n    if (i === 0) {\n      if (typeof stream === 'function') {\n        ret = stream({\n          signal\n        })\n        if (!isIterable(ret)) {\n          throw new ERR_INVALID_RETURN_VALUE('Iterable, AsyncIterable or Stream', 'source', ret)\n        }\n      } else if (isIterable(stream) || isReadableNodeStream(stream) || isTransformStream(stream)) {\n        ret = stream\n      } else {\n        ret = Duplex.from(stream)\n      }\n    } else if (typeof stream === 'function') {\n      if (isTransformStream(ret)) {\n        var _ret\n        ret = makeAsyncIterable((_ret = ret) === null || _ret === undefined ? undefined : _ret.readable)\n      } else {\n        ret = makeAsyncIterable(ret)\n      }\n      ret = stream(ret, {\n        signal\n      })\n      if (reading) {\n        if (!isIterable(ret, true)) {\n          throw new ERR_INVALID_RETURN_VALUE('AsyncIterable', `transform[${i - 1}]`, ret)\n        }\n      } else {\n        var _ret2\n        if (!PassThrough) {\n          PassThrough = require('./passthrough')\n        }\n\n        // If the last argument to pipeline is not a stream\n        // we must create a proxy stream so that pipeline(...)\n        // always returns a stream which can be further\n        // composed through `.pipe(stream)`.\n\n        const pt = new PassThrough({\n          objectMode: true\n        })\n\n        // Handle Promises/A+ spec, `then` could be a getter that throws on\n        // second use.\n        const then = (_ret2 = ret) === null || _ret2 === undefined ? undefined : _ret2.then\n        if (typeof then === 'function') {\n          finishCount++\n          then.call(\n            ret,\n            (val) => {\n              value = val\n              if (val != null) {\n                pt.write(val)\n              }\n              if (end) {\n                pt.end()\n              }\n              process.nextTick(finish)\n            },\n            (err) => {\n              pt.destroy(err)\n              process.nextTick(finish, err)\n            }\n          )\n        } else if (isIterable(ret, true)) {\n          finishCount++\n          pumpToNode(ret, pt, finish, {\n            end\n          })\n        } else if (isReadableStream(ret) || isTransformStream(ret)) {\n          const toRead = ret.readable || ret\n          finishCount++\n          pumpToNode(toRead, pt, finish, {\n            end\n          })\n        } else {\n          throw new ERR_INVALID_RETURN_VALUE('AsyncIterable or Promise', 'destination', ret)\n        }\n        ret = pt\n        const { destroy, cleanup } = destroyer(ret, false, true)\n        destroys.push(destroy)\n        if (isLastStream) {\n          lastStreamCleanup.push(cleanup)\n        }\n      }\n    } else if (isNodeStream(stream)) {\n      if (isReadableNodeStream(ret)) {\n        finishCount += 2\n        const cleanup = pipe(ret, stream, finish, {\n          end\n        })\n        if (isReadable(stream) && isLastStream) {\n          lastStreamCleanup.push(cleanup)\n        }\n      } else if (isTransformStream(ret) || isReadableStream(ret)) {\n        const toRead = ret.readable || ret\n        finishCount++\n        pumpToNode(toRead, stream, finish, {\n          end\n        })\n      } else if (isIterable(ret)) {\n        finishCount++\n        pumpToNode(ret, stream, finish, {\n          end\n        })\n      } else {\n        throw new ERR_INVALID_ARG_TYPE(\n          'val',\n          ['Readable', 'Iterable', 'AsyncIterable', 'ReadableStream', 'TransformStream'],\n          ret\n        )\n      }\n      ret = stream\n    } else if (isWebStream(stream)) {\n      if (isReadableNodeStream(ret)) {\n        finishCount++\n        pumpToWeb(makeAsyncIterable(ret), stream, finish, {\n          end\n        })\n      } else if (isReadableStream(ret) || isIterable(ret)) {\n        finishCount++\n        pumpToWeb(ret, stream, finish, {\n          end\n        })\n      } else if (isTransformStream(ret)) {\n        finishCount++\n        pumpToWeb(ret.readable, stream, finish, {\n          end\n        })\n      } else {\n        throw new ERR_INVALID_ARG_TYPE(\n          'val',\n          ['Readable', 'Iterable', 'AsyncIterable', 'ReadableStream', 'TransformStream'],\n          ret\n        )\n      }\n      ret = stream\n    } else {\n      ret = Duplex.from(stream)\n    }\n  }\n  if (\n    (signal !== null && signal !== undefined && signal.aborted) ||\n    (outerSignal !== null && outerSignal !== undefined && outerSignal.aborted)\n  ) {\n    process.nextTick(abort)\n  }\n  return ret\n}\nfunction pipe(src, dst, finish, { end }) {\n  let ended = false\n  dst.on('close', () => {\n    if (!ended) {\n      // Finish if the destination closes before the source has completed.\n      finish(new ERR_STREAM_PREMATURE_CLOSE())\n    }\n  })\n  src.pipe(dst, {\n    end: false\n  }) // If end is true we already will have a listener to end dst.\n\n  if (end) {\n    // Compat. Before node v10.12.0 stdio used to throw an error so\n    // pipe() did/does not end() stdio destinations.\n    // Now they allow it but \"secretly\" don't close the underlying fd.\n\n    function endFn() {\n      ended = true\n      dst.end()\n    }\n    if (isReadableFinished(src)) {\n      // End the destination if the source has already ended.\n      process.nextTick(endFn)\n    } else {\n      src.once('end', endFn)\n    }\n  } else {\n    finish()\n  }\n  eos(\n    src,\n    {\n      readable: true,\n      writable: false\n    },\n    (err) => {\n      const rState = src._readableState\n      if (\n        err &&\n        err.code === 'ERR_STREAM_PREMATURE_CLOSE' &&\n        rState &&\n        rState.ended &&\n        !rState.errored &&\n        !rState.errorEmitted\n      ) {\n        // Some readable streams will emit 'close' before 'end'. However, since\n        // this is on the readable side 'end' should still be emitted if the\n        // stream has been ended and no error emitted. This should be allowed in\n        // favor of backwards compatibility. Since the stream is piped to a\n        // destination this should not result in any observable difference.\n        // We don't need to check if this is a writable premature close since\n        // eos will only fail with premature close on the reading side for\n        // duplex streams.\n        src.once('end', finish).once('error', finish)\n      } else {\n        finish(err)\n      }\n    }\n  )\n  return eos(\n    dst,\n    {\n      readable: false,\n      writable: true\n    },\n    finish\n  )\n}\nmodule.exports = {\n  pipelineImpl,\n  pipeline\n}\n", "'use strict'\n\nconst { pipeline } = require('./pipeline')\nconst Duplex = require('./duplex')\nconst { destroyer } = require('./destroy')\nconst {\n  isNodeStream,\n  isReadable,\n  isWritable,\n  isWebStream,\n  isTransformStream,\n  isWritableStream,\n  isReadableStream\n} = require('./utils')\nconst {\n  AbortError,\n  codes: { ERR_INVALID_ARG_VALUE, ERR_MISSING_ARGS }\n} = require('../../ours/errors')\nconst eos = require('./end-of-stream')\nmodule.exports = function compose(...streams) {\n  if (streams.length === 0) {\n    throw new ERR_MISSING_ARGS('streams')\n  }\n  if (streams.length === 1) {\n    return Duplex.from(streams[0])\n  }\n  const orgStreams = [...streams]\n  if (typeof streams[0] === 'function') {\n    streams[0] = Duplex.from(streams[0])\n  }\n  if (typeof streams[streams.length - 1] === 'function') {\n    const idx = streams.length - 1\n    streams[idx] = Duplex.from(streams[idx])\n  }\n  for (let n = 0; n < streams.length; ++n) {\n    if (!isNodeStream(streams[n]) && !isWebStream(streams[n])) {\n      // TODO(ronag): Add checks for non streams.\n      continue\n    }\n    if (\n      n < streams.length - 1 &&\n      !(isReadable(streams[n]) || isReadableStream(streams[n]) || isTransformStream(streams[n]))\n    ) {\n      throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], 'must be readable')\n    }\n    if (n > 0 && !(isWritable(streams[n]) || isWritableStream(streams[n]) || isTransformStream(streams[n]))) {\n      throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], 'must be writable')\n    }\n  }\n  let ondrain\n  let onfinish\n  let onreadable\n  let onclose\n  let d\n  function onfinished(err) {\n    const cb = onclose\n    onclose = null\n    if (cb) {\n      cb(err)\n    } else if (err) {\n      d.destroy(err)\n    } else if (!readable && !writable) {\n      d.destroy()\n    }\n  }\n  const head = streams[0]\n  const tail = pipeline(streams, onfinished)\n  const writable = !!(isWritable(head) || isWritableStream(head) || isTransformStream(head))\n  const readable = !!(isReadable(tail) || isReadableStream(tail) || isTransformStream(tail))\n\n  // TODO(ronag): Avoid double buffering.\n  // Implement Writable/Readable/Duplex traits.\n  // See, https://github.com/nodejs/node/pull/33515.\n  d = new Duplex({\n    // TODO (ronag): highWaterMark?\n    writableObjectMode: !!(head !== null && head !== undefined && head.writableObjectMode),\n    readableObjectMode: !!(tail !== null && tail !== undefined && tail.readableObjectMode),\n    writable,\n    readable\n  })\n  if (writable) {\n    if (isNodeStream(head)) {\n      d._write = function (chunk, encoding, callback) {\n        if (head.write(chunk, encoding)) {\n          callback()\n        } else {\n          ondrain = callback\n        }\n      }\n      d._final = function (callback) {\n        head.end()\n        onfinish = callback\n      }\n      head.on('drain', function () {\n        if (ondrain) {\n          const cb = ondrain\n          ondrain = null\n          cb()\n        }\n      })\n    } else if (isWebStream(head)) {\n      const writable = isTransformStream(head) ? head.writable : head\n      const writer = writable.getWriter()\n      d._write = async function (chunk, encoding, callback) {\n        try {\n          await writer.ready\n          writer.write(chunk).catch(() => {})\n          callback()\n        } catch (err) {\n          callback(err)\n        }\n      }\n      d._final = async function (callback) {\n        try {\n          await writer.ready\n          writer.close().catch(() => {})\n          onfinish = callback\n        } catch (err) {\n          callback(err)\n        }\n      }\n    }\n    const toRead = isTransformStream(tail) ? tail.readable : tail\n    eos(toRead, () => {\n      if (onfinish) {\n        const cb = onfinish\n        onfinish = null\n        cb()\n      }\n    })\n  }\n  if (readable) {\n    if (isNodeStream(tail)) {\n      tail.on('readable', function () {\n        if (onreadable) {\n          const cb = onreadable\n          onreadable = null\n          cb()\n        }\n      })\n      tail.on('end', function () {\n        d.push(null)\n      })\n      d._read = function () {\n        while (true) {\n          const buf = tail.read()\n          if (buf === null) {\n            onreadable = d._read\n            return\n          }\n          if (!d.push(buf)) {\n            return\n          }\n        }\n      }\n    } else if (isWebStream(tail)) {\n      const readable = isTransformStream(tail) ? tail.readable : tail\n      const reader = readable.getReader()\n      d._read = async function () {\n        while (true) {\n          try {\n            const { value, done } = await reader.read()\n            if (!d.push(value)) {\n              return\n            }\n            if (done) {\n              d.push(null)\n              return\n            }\n          } catch {\n            return\n          }\n        }\n      }\n    }\n  }\n  d._destroy = function (err, callback) {\n    if (!err && onclose !== null) {\n      err = new AbortError()\n    }\n    onreadable = null\n    ondrain = null\n    onfinish = null\n    if (onclose === null) {\n      callback(err)\n    } else {\n      onclose = callback\n      if (isNodeStream(tail)) {\n        destroyer(tail, err)\n      }\n    }\n  }\n  return d\n}\n", "'use strict'\n\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst {\n  codes: { ERR_INVALID_ARG_VALUE, ERR_INVALID_ARG_TYPE, ERR_MISSING_ARGS, ERR_OUT_OF_RANGE },\n  AbortError\n} = require('../../ours/errors')\nconst { validateAbortSignal, validateInteger, validateObject } = require('../validators')\nconst kWeakHandler = require('../../ours/primordials').Symbol('kWeak')\nconst kResistStopPropagation = require('../../ours/primordials').Symbol('kResistStopPropagation')\nconst { finished } = require('./end-of-stream')\nconst staticCompose = require('./compose')\nconst { addAbortSignalNoValidate } = require('./add-abort-signal')\nconst { isWritable, isNodeStream } = require('./utils')\nconst { deprecate } = require('../../ours/util')\nconst {\n  ArrayPrototypePush,\n  Boolean,\n  MathFloor,\n  Number,\n  NumberIsNaN,\n  Promise,\n  PromiseReject,\n  PromiseResolve,\n  PromisePrototypeThen,\n  Symbol\n} = require('../../ours/primordials')\nconst kEmpty = Symbol('kEmpty')\nconst kEof = Symbol('kEof')\nfunction compose(stream, options) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  if (isNodeStream(stream) && !isWritable(stream)) {\n    throw new ERR_INVALID_ARG_VALUE('stream', stream, 'must be writable')\n  }\n  const composedStream = staticCompose(this, stream)\n  if (options !== null && options !== undefined && options.signal) {\n    // Not validating as we already validated before\n    addAbortSignalNoValidate(options.signal, composedStream)\n  }\n  return composedStream\n}\nfunction map(fn, options) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  let concurrency = 1\n  if ((options === null || options === undefined ? undefined : options.concurrency) != null) {\n    concurrency = MathFloor(options.concurrency)\n  }\n  let highWaterMark = concurrency - 1\n  if ((options === null || options === undefined ? undefined : options.highWaterMark) != null) {\n    highWaterMark = MathFloor(options.highWaterMark)\n  }\n  validateInteger(concurrency, 'options.concurrency', 1)\n  validateInteger(highWaterMark, 'options.highWaterMark', 0)\n  highWaterMark += concurrency\n  return async function* map() {\n    const signal = require('../../ours/util').AbortSignalAny(\n      [options === null || options === undefined ? undefined : options.signal].filter(Boolean)\n    )\n    const stream = this\n    const queue = []\n    const signalOpt = {\n      signal\n    }\n    let next\n    let resume\n    let done = false\n    let cnt = 0\n    function onCatch() {\n      done = true\n      afterItemProcessed()\n    }\n    function afterItemProcessed() {\n      cnt -= 1\n      maybeResume()\n    }\n    function maybeResume() {\n      if (resume && !done && cnt < concurrency && queue.length < highWaterMark) {\n        resume()\n        resume = null\n      }\n    }\n    async function pump() {\n      try {\n        for await (let val of stream) {\n          if (done) {\n            return\n          }\n          if (signal.aborted) {\n            throw new AbortError()\n          }\n          try {\n            val = fn(val, signalOpt)\n            if (val === kEmpty) {\n              continue\n            }\n            val = PromiseResolve(val)\n          } catch (err) {\n            val = PromiseReject(err)\n          }\n          cnt += 1\n          PromisePrototypeThen(val, afterItemProcessed, onCatch)\n          queue.push(val)\n          if (next) {\n            next()\n            next = null\n          }\n          if (!done && (queue.length >= highWaterMark || cnt >= concurrency)) {\n            await new Promise((resolve) => {\n              resume = resolve\n            })\n          }\n        }\n        queue.push(kEof)\n      } catch (err) {\n        const val = PromiseReject(err)\n        PromisePrototypeThen(val, afterItemProcessed, onCatch)\n        queue.push(val)\n      } finally {\n        done = true\n        if (next) {\n          next()\n          next = null\n        }\n      }\n    }\n    pump()\n    try {\n      while (true) {\n        while (queue.length > 0) {\n          const val = await queue[0]\n          if (val === kEof) {\n            return\n          }\n          if (signal.aborted) {\n            throw new AbortError()\n          }\n          if (val !== kEmpty) {\n            yield val\n          }\n          queue.shift()\n          maybeResume()\n        }\n        await new Promise((resolve) => {\n          next = resolve\n        })\n      }\n    } finally {\n      done = true\n      if (resume) {\n        resume()\n        resume = null\n      }\n    }\n  }.call(this)\n}\nfunction asIndexedPairs(options = undefined) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  return async function* asIndexedPairs() {\n    let index = 0\n    for await (const val of this) {\n      var _options$signal\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal = options.signal) !== null &&\n        _options$signal !== undefined &&\n        _options$signal.aborted\n      ) {\n        throw new AbortError({\n          cause: options.signal.reason\n        })\n      }\n      yield [index++, val]\n    }\n  }.call(this)\n}\nasync function some(fn, options = undefined) {\n  for await (const unused of filter.call(this, fn, options)) {\n    return true\n  }\n  return false\n}\nasync function every(fn, options = undefined) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  // https://en.wikipedia.org/wiki/De_Morgan%27s_laws\n  return !(await some.call(\n    this,\n    async (...args) => {\n      return !(await fn(...args))\n    },\n    options\n  ))\n}\nasync function find(fn, options) {\n  for await (const result of filter.call(this, fn, options)) {\n    return result\n  }\n  return undefined\n}\nasync function forEach(fn, options) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  async function forEachFn(value, options) {\n    await fn(value, options)\n    return kEmpty\n  }\n  // eslint-disable-next-line no-unused-vars\n  for await (const unused of map.call(this, forEachFn, options));\n}\nfunction filter(fn, options) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  async function filterFn(value, options) {\n    if (await fn(value, options)) {\n      return value\n    }\n    return kEmpty\n  }\n  return map.call(this, filterFn, options)\n}\n\n// Specific to provide better error to reduce since the argument is only\n// missing if the stream has no items in it - but the code is still appropriate\nclass ReduceAwareErrMissingArgs extends ERR_MISSING_ARGS {\n  constructor() {\n    super('reduce')\n    this.message = 'Reduce of an empty stream requires an initial value'\n  }\n}\nasync function reduce(reducer, initialValue, options) {\n  var _options$signal2\n  if (typeof reducer !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('reducer', ['Function', 'AsyncFunction'], reducer)\n  }\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  let hasInitialValue = arguments.length > 1\n  if (\n    options !== null &&\n    options !== undefined &&\n    (_options$signal2 = options.signal) !== null &&\n    _options$signal2 !== undefined &&\n    _options$signal2.aborted\n  ) {\n    const err = new AbortError(undefined, {\n      cause: options.signal.reason\n    })\n    this.once('error', () => {}) // The error is already propagated\n    await finished(this.destroy(err))\n    throw err\n  }\n  const ac = new AbortController()\n  const signal = ac.signal\n  if (options !== null && options !== undefined && options.signal) {\n    const opts = {\n      once: true,\n      [kWeakHandler]: this,\n      [kResistStopPropagation]: true\n    }\n    options.signal.addEventListener('abort', () => ac.abort(), opts)\n  }\n  let gotAnyItemFromStream = false\n  try {\n    for await (const value of this) {\n      var _options$signal3\n      gotAnyItemFromStream = true\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal3 = options.signal) !== null &&\n        _options$signal3 !== undefined &&\n        _options$signal3.aborted\n      ) {\n        throw new AbortError()\n      }\n      if (!hasInitialValue) {\n        initialValue = value\n        hasInitialValue = true\n      } else {\n        initialValue = await reducer(initialValue, value, {\n          signal\n        })\n      }\n    }\n    if (!gotAnyItemFromStream && !hasInitialValue) {\n      throw new ReduceAwareErrMissingArgs()\n    }\n  } finally {\n    ac.abort()\n  }\n  return initialValue\n}\nasync function toArray(options) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  const result = []\n  for await (const val of this) {\n    var _options$signal4\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal4 = options.signal) !== null &&\n      _options$signal4 !== undefined &&\n      _options$signal4.aborted\n    ) {\n      throw new AbortError(undefined, {\n        cause: options.signal.reason\n      })\n    }\n    ArrayPrototypePush(result, val)\n  }\n  return result\n}\nfunction flatMap(fn, options) {\n  const values = map.call(this, fn, options)\n  return async function* flatMap() {\n    for await (const val of values) {\n      yield* val\n    }\n  }.call(this)\n}\nfunction toIntegerOrInfinity(number) {\n  // We coerce here to align with the spec\n  // https://github.com/tc39/proposal-iterator-helpers/issues/169\n  number = Number(number)\n  if (NumberIsNaN(number)) {\n    return 0\n  }\n  if (number < 0) {\n    throw new ERR_OUT_OF_RANGE('number', '>= 0', number)\n  }\n  return number\n}\nfunction drop(number, options = undefined) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  number = toIntegerOrInfinity(number)\n  return async function* drop() {\n    var _options$signal5\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal5 = options.signal) !== null &&\n      _options$signal5 !== undefined &&\n      _options$signal5.aborted\n    ) {\n      throw new AbortError()\n    }\n    for await (const val of this) {\n      var _options$signal6\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal6 = options.signal) !== null &&\n        _options$signal6 !== undefined &&\n        _options$signal6.aborted\n      ) {\n        throw new AbortError()\n      }\n      if (number-- <= 0) {\n        yield val\n      }\n    }\n  }.call(this)\n}\nfunction take(number, options = undefined) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  number = toIntegerOrInfinity(number)\n  return async function* take() {\n    var _options$signal7\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal7 = options.signal) !== null &&\n      _options$signal7 !== undefined &&\n      _options$signal7.aborted\n    ) {\n      throw new AbortError()\n    }\n    for await (const val of this) {\n      var _options$signal8\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal8 = options.signal) !== null &&\n        _options$signal8 !== undefined &&\n        _options$signal8.aborted\n      ) {\n        throw new AbortError()\n      }\n      if (number-- > 0) {\n        yield val\n      }\n\n      // Don't get another item from iterator in case we reached the end\n      if (number <= 0) {\n        return\n      }\n    }\n  }.call(this)\n}\nmodule.exports.streamReturningOperators = {\n  asIndexedPairs: deprecate(asIndexedPairs, 'readable.asIndexedPairs will be removed in a future version.'),\n  drop,\n  filter,\n  flatMap,\n  map,\n  take,\n  compose\n}\nmodule.exports.promiseReturningOperators = {\n  every,\n  forEach,\n  reduce,\n  toArray,\n  some,\n  find\n}\n", "'use strict'\n\nconst { ArrayPrototypePop, Promise } = require('../ours/primordials')\nconst { isIterable, isNodeStream, isWebStream } = require('../internal/streams/utils')\nconst { pipelineImpl: pl } = require('../internal/streams/pipeline')\nconst { finished } = require('../internal/streams/end-of-stream')\nrequire('../../lib/stream.js')\nfunction pipeline(...streams) {\n  return new Promise((resolve, reject) => {\n    let signal\n    let end\n    const lastArg = streams[streams.length - 1]\n    if (\n      lastArg &&\n      typeof lastArg === 'object' &&\n      !isNodeStream(lastArg) &&\n      !isIterable(lastArg) &&\n      !isWebStream(lastArg)\n    ) {\n      const options = ArrayPrototypePop(streams)\n      signal = options.signal\n      end = options.end\n    }\n    pl(\n      streams,\n      (err, value) => {\n        if (err) {\n          reject(err)\n        } else {\n          resolve(value)\n        }\n      },\n      {\n        signal,\n        end\n      }\n    )\n  })\n}\nmodule.exports = {\n  finished,\n  pipeline\n}\n", "/* replacement start */\n\nconst { Buffer } = require('buffer')\n\n/* replacement end */\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n;('use strict')\nconst { ObjectDefineProperty, ObjectKeys, ReflectApply } = require('./ours/primordials')\nconst {\n  promisify: { custom: customPromisify }\n} = require('./ours/util')\nconst { streamReturningOperators, promiseReturningOperators } = require('./internal/streams/operators')\nconst {\n  codes: { ERR_ILLEGAL_CONSTRUCTOR }\n} = require('./ours/errors')\nconst compose = require('./internal/streams/compose')\nconst { setDefaultHighWaterMark, getDefaultHighWaterMark } = require('./internal/streams/state')\nconst { pipeline } = require('./internal/streams/pipeline')\nconst { destroyer } = require('./internal/streams/destroy')\nconst eos = require('./internal/streams/end-of-stream')\nconst internalBuffer = {}\nconst promises = require('./stream/promises')\nconst utils = require('./internal/streams/utils')\nconst Stream = (module.exports = require('./internal/streams/legacy').Stream)\nStream.isDestroyed = utils.isDestroyed\nStream.isDisturbed = utils.isDisturbed\nStream.isErrored = utils.isErrored\nStream.isReadable = utils.isReadable\nStream.isWritable = utils.isWritable\nStream.Readable = require('./internal/streams/readable')\nfor (const key of ObjectKeys(streamReturningOperators)) {\n  const op = streamReturningOperators[key]\n  function fn(...args) {\n    if (new.target) {\n      throw ERR_ILLEGAL_CONSTRUCTOR()\n    }\n    return Stream.Readable.from(ReflectApply(op, this, args))\n  }\n  ObjectDefineProperty(fn, 'name', {\n    __proto__: null,\n    value: op.name\n  })\n  ObjectDefineProperty(fn, 'length', {\n    __proto__: null,\n    value: op.length\n  })\n  ObjectDefineProperty(Stream.Readable.prototype, key, {\n    __proto__: null,\n    value: fn,\n    enumerable: false,\n    configurable: true,\n    writable: true\n  })\n}\nfor (const key of ObjectKeys(promiseReturningOperators)) {\n  const op = promiseReturningOperators[key]\n  function fn(...args) {\n    if (new.target) {\n      throw ERR_ILLEGAL_CONSTRUCTOR()\n    }\n    return ReflectApply(op, this, args)\n  }\n  ObjectDefineProperty(fn, 'name', {\n    __proto__: null,\n    value: op.name\n  })\n  ObjectDefineProperty(fn, 'length', {\n    __proto__: null,\n    value: op.length\n  })\n  ObjectDefineProperty(Stream.Readable.prototype, key, {\n    __proto__: null,\n    value: fn,\n    enumerable: false,\n    configurable: true,\n    writable: true\n  })\n}\nStream.Writable = require('./internal/streams/writable')\nStream.Duplex = require('./internal/streams/duplex')\nStream.Transform = require('./internal/streams/transform')\nStream.PassThrough = require('./internal/streams/passthrough')\nStream.pipeline = pipeline\nconst { addAbortSignal } = require('./internal/streams/add-abort-signal')\nStream.addAbortSignal = addAbortSignal\nStream.finished = eos\nStream.destroy = destroyer\nStream.compose = compose\nStream.setDefaultHighWaterMark = setDefaultHighWaterMark\nStream.getDefaultHighWaterMark = getDefaultHighWaterMark\nObjectDefineProperty(Stream, 'promises', {\n  __proto__: null,\n  configurable: true,\n  enumerable: true,\n  get() {\n    return promises\n  }\n})\nObjectDefineProperty(pipeline, customPromisify, {\n  __proto__: null,\n  enumerable: true,\n  get() {\n    return promises.pipeline\n  }\n})\nObjectDefineProperty(eos, customPromisify, {\n  __proto__: null,\n  enumerable: true,\n  get() {\n    return promises.finished\n  }\n})\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream\nStream._isUint8Array = function isUint8Array(value) {\n  return value instanceof Uint8Array\n}\nStream._uint8ArrayToBuffer = function _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength)\n}\n", "'use strict'\n\nconst CustomStream = require('../stream')\nconst promises = require('../stream/promises')\nconst originalDestroy = CustomStream.Readable.destroy\nmodule.exports = CustomStream.Readable\n\n// Explicit export naming is needed for ESM\nmodule.exports._uint8ArrayToBuffer = CustomStream._uint8ArrayToBuffer\nmodule.exports._isUint8Array = CustomStream._isUint8Array\nmodule.exports.isDisturbed = CustomStream.isDisturbed\nmodule.exports.isErrored = CustomStream.isErrored\nmodule.exports.isReadable = CustomStream.isReadable\nmodule.exports.Readable = CustomStream.Readable\nmodule.exports.Writable = CustomStream.Writable\nmodule.exports.Duplex = CustomStream.Duplex\nmodule.exports.Transform = CustomStream.Transform\nmodule.exports.PassThrough = CustomStream.PassThrough\nmodule.exports.addAbortSignal = CustomStream.addAbortSignal\nmodule.exports.finished = CustomStream.finished\nmodule.exports.destroy = CustomStream.destroy\nmodule.exports.destroy = originalDestroy\nmodule.exports.pipeline = CustomStream.pipeline\nmodule.exports.compose = CustomStream.compose\nObject.defineProperty(CustomStream, 'promises', {\n  configurable: true,\n  enumerable: true,\n  get() {\n    return promises\n  }\n})\nmodule.exports.Stream = CustomStream.Stream\n\n// Allow default importing\nmodule.exports.default = module.exports\n", "import TTLCache from '@isaacs/ttlcache';\nexport { TTLCache as TtlCache };", "export const empty = new Uint8Array(0)\n\nexport function toHex (d: Uint8Array): string {\n  return d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n}\n\nexport function fromHex (hex: string): Uint8Array {\n  const hexes = hex.match(/../g)\n  return hexes != null ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\nexport function equals (aa: Uint8Array, bb: Uint8Array): boolean {\n  if (aa === bb) return true\n  if (aa.byteLength !== bb.byteLength) {\n    return false\n  }\n\n  for (let ii = 0; ii < aa.byteLength; ii++) {\n    if (aa[ii] !== bb[ii]) {\n      return false\n    }\n  }\n\n  return true\n}\n\nexport function coerce (o: ArrayBufferView | ArrayBuffer | Uint8Array): Uint8Array {\n  if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n  if (o instanceof ArrayBuffer) return new Uint8Array(o)\n  if (ArrayBuffer.isView(o)) {\n    return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n  }\n  throw new Error('Unknown type, must be binary type')\n}\n\nexport function isBinary (o: unknown): o is ArrayBuffer | ArrayBufferView {\n  return o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n}\n\nexport function fromString (str: string): Uint8Array {\n  return new TextEncoder().encode(str)\n}\n\nexport function toString (b: Uint8Array): string {\n  return new TextDecoder().decode(b)\n}\n", "/* eslint-disable */\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n/**\n * @param {string} ALPHABET\n * @param {any} name\n */\nfunction base (ALPHABET, name) {\n  if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n  var BASE_MAP = new Uint8Array(256);\n  for (var j = 0; j < BASE_MAP.length; j++) {\n    BASE_MAP[j] = 255;\n  }\n  for (var i = 0; i < ALPHABET.length; i++) {\n    var x = ALPHABET.charAt(i);\n    var xc = x.charCodeAt(0);\n    if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n    BASE_MAP[xc] = i;\n  }\n  var BASE = ALPHABET.length;\n  var LEADER = ALPHABET.charAt(0);\n  var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n  var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n  /**\n   * @param {any[] | Iterable<number>} source\n   */\n  function encode (source) {\n    // @ts-ignore\n    if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n      source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n    } else if (Array.isArray(source)) {\n      source = Uint8Array.from(source);\n    }\n    if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n    if (source.length === 0) { return '' }\n        // Skip & count leading zeroes.\n    var zeroes = 0;\n    var length = 0;\n    var pbegin = 0;\n    var pend = source.length;\n    while (pbegin !== pend && source[pbegin] === 0) {\n      pbegin++;\n      zeroes++;\n    }\n        // Allocate enough space in big-endian base58 representation.\n    var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n    var b58 = new Uint8Array(size);\n        // Process the bytes.\n    while (pbegin !== pend) {\n      var carry = source[pbegin];\n            // Apply \"b58 = b58 * 256 + ch\".\n      var i = 0;\n      for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n        carry += (256 * b58[it1]) >>> 0;\n        b58[it1] = (carry % BASE) >>> 0;\n        carry = (carry / BASE) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      pbegin++;\n    }\n        // Skip leading zeroes in base58 result.\n    var it2 = size - length;\n    while (it2 !== size && b58[it2] === 0) {\n      it2++;\n    }\n        // Translate the result into a string.\n    var str = LEADER.repeat(zeroes);\n    for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n    return str\n  }\n  /**\n   * @param {string | string[]} source\n   */\n  function decodeUnsafe (source) {\n    if (typeof source !== 'string') { throw new TypeError('Expected String') }\n    if (source.length === 0) { return new Uint8Array() }\n    var psz = 0;\n        // Skip leading spaces.\n    if (source[psz] === ' ') { return }\n        // Skip and count leading '1's.\n    var zeroes = 0;\n    var length = 0;\n    while (source[psz] === LEADER) {\n      zeroes++;\n      psz++;\n    }\n        // Allocate enough space in big-endian base256 representation.\n    var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n    var b256 = new Uint8Array(size);\n        // Process the characters.\n    while (source[psz]) {\n            // Decode character\n      var carry = BASE_MAP[source.charCodeAt(psz)];\n            // Invalid character\n      if (carry === 255) { return }\n      var i = 0;\n      for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n        carry += (BASE * b256[it3]) >>> 0;\n        b256[it3] = (carry % 256) >>> 0;\n        carry = (carry / 256) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      psz++;\n    }\n        // Skip trailing spaces.\n    if (source[psz] === ' ') { return }\n        // Skip leading zeroes in b256.\n    var it4 = size - length;\n    while (it4 !== size && b256[it4] === 0) {\n      it4++;\n    }\n    var vch = new Uint8Array(zeroes + (size - it4));\n    var j = zeroes;\n    while (it4 !== size) {\n      vch[j++] = b256[it4++];\n    }\n    return vch\n  }\n  /**\n   * @param {string | string[]} string\n   */\n  function decode (string) {\n    var buffer = decodeUnsafe(string);\n    if (buffer) { return buffer }\n    throw new Error(`Non-${name} character`)\n  }\n  return {\n    encode: encode,\n    decodeUnsafe: decodeUnsafe,\n    decode: decode\n  }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "import { coerce } from '../bytes.js'\nimport basex from '../vendor/base-x.js'\nimport type { BaseCodec, BaseDecoder, BaseEncoder, CombobaseDecoder, Multibase, MultibaseCodec, MultibaseDecoder, MultibaseEncoder, UnibaseDecoder } from './interface.js'\n\ninterface EncodeFn { (bytes: Uint8Array): string }\ninterface DecodeFn { (text: string): Uint8Array }\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n */\nclass Encoder<Base extends string, Prefix extends string> implements MultibaseEncoder<Prefix>, BaseEncoder {\n  readonly name: Base\n  readonly prefix: Prefix\n  readonly baseEncode: EncodeFn\n\n  constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n  }\n\n  encode (bytes: Uint8Array): Multibase<Prefix> {\n    if (bytes instanceof Uint8Array) {\n      return `${this.prefix}${this.baseEncode(bytes)}`\n    } else {\n      throw Error('Unknown type, must be binary type')\n    }\n  }\n}\n\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n */\nclass Decoder<Base extends string, Prefix extends string> implements MultibaseDecoder<Prefix>, UnibaseDecoder<Prefix>, BaseDecoder {\n  readonly name: Base\n  readonly prefix: Prefix\n  readonly baseDecode: DecodeFn\n  private readonly prefixCodePoint: number\n\n  constructor (name: Base, prefix: Prefix, baseDecode: DecodeFn) {\n    this.name = name\n    this.prefix = prefix\n    /* c8 ignore next 3 */\n    if (prefix.codePointAt(0) === undefined) {\n      throw new Error('Invalid prefix character')\n    }\n    this.prefixCodePoint = prefix.codePointAt(0) as number\n    this.baseDecode = baseDecode\n  }\n\n  decode (text: string): Uint8Array {\n    if (typeof text === 'string') {\n      if (text.codePointAt(0) !== this.prefixCodePoint) {\n        throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n      }\n      return this.baseDecode(text.slice(this.prefix.length))\n    } else {\n      throw Error('Can only multibase decode strings')\n    }\n  }\n\n  or<OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n    return or(this, decoder)\n  }\n}\n\ntype Decoders<Prefix extends string> = Record<Prefix, UnibaseDecoder<Prefix>>\n\nclass ComposedDecoder<Prefix extends string> implements MultibaseDecoder<Prefix>, CombobaseDecoder<Prefix> {\n  readonly decoders: Decoders<Prefix>\n\n  constructor (decoders: Decoders<Prefix>) {\n    this.decoders = decoders\n  }\n\n  or <OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n    return or(this, decoder)\n  }\n\n  decode (input: string): Uint8Array {\n    const prefix = input[0] as Prefix\n    const decoder = this.decoders[prefix]\n    if (decoder != null) {\n      return decoder.decode(input)\n    } else {\n      throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n    }\n  }\n}\n\nexport function or <L extends string, R extends string> (left: UnibaseDecoder<L> | CombobaseDecoder<L>, right: UnibaseDecoder<R> | CombobaseDecoder<R>): ComposedDecoder<L | R> {\n  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n  return new ComposedDecoder({\n    ...(left.decoders ?? { [(left as UnibaseDecoder<L>).prefix]: left }),\n    ...(right.decoders ?? { [(right as UnibaseDecoder<R>).prefix]: right })\n  } as Decoders<L | R>)\n}\n\nexport class Codec<Base extends string, Prefix extends string> implements MultibaseCodec<Prefix>, MultibaseEncoder<Prefix>, MultibaseDecoder<Prefix>, BaseCodec, BaseEncoder, BaseDecoder {\n  readonly name: Base\n  readonly prefix: Prefix\n  readonly baseEncode: EncodeFn\n  readonly baseDecode: DecodeFn\n  readonly encoder: Encoder<Base, Prefix>\n  readonly decoder: Decoder<Base, Prefix>\n\n  constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn, baseDecode: DecodeFn) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n    this.baseDecode = baseDecode\n    this.encoder = new Encoder(name, prefix, baseEncode)\n    this.decoder = new Decoder(name, prefix, baseDecode)\n  }\n\n  encode (input: Uint8Array): string {\n    return this.encoder.encode(input)\n  }\n\n  decode (input: string): Uint8Array {\n    return this.decoder.decode(input)\n  }\n}\n\nexport function from <Base extends string, Prefix extends string> ({ name, prefix, encode, decode }: { name: Base, prefix: Prefix, encode: EncodeFn, decode: DecodeFn }): Codec<Base, Prefix> {\n  return new Codec(name, prefix, encode, decode)\n}\n\nexport function baseX <Base extends string, Prefix extends string> ({ name, prefix, alphabet }: { name: Base, prefix: Prefix, alphabet: string }): Codec<Base, Prefix> {\n  const { encode, decode } = basex(alphabet, name)\n  return from({\n    prefix,\n    name,\n    encode,\n    decode: (text: string): Uint8Array => coerce(decode(text))\n  })\n}\n\nfunction decode (string: string, alphabet: string, bitsPerChar: number, name: string): Uint8Array {\n  // Build the character lookup table:\n  const codes: Record<string, number> = {}\n  for (let i = 0; i < alphabet.length; ++i) {\n    codes[alphabet[i]] = i\n  }\n\n  // Count the padding bytes:\n  let end = string.length\n  while (string[end - 1] === '=') {\n    --end\n  }\n\n  // Allocate the output:\n  const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n  // Parse the data:\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  let written = 0 // Next byte to write\n  for (let i = 0; i < end; ++i) {\n    // Read one character from the string:\n    const value = codes[string[i]]\n    if (value === undefined) {\n      throw new SyntaxError(`Non-${name} character`)\n    }\n\n    // Append the bits to the buffer:\n    buffer = (buffer << bitsPerChar) | value\n    bits += bitsPerChar\n\n    // Write out some bits if the buffer has a byte's worth:\n    if (bits >= 8) {\n      bits -= 8\n      out[written++] = 0xff & (buffer >> bits)\n    }\n  }\n\n  // Verify that we have received just enough bits:\n  if (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n    throw new SyntaxError('Unexpected end of data')\n  }\n\n  return out\n}\n\nfunction encode (data: Uint8Array, alphabet: string, bitsPerChar: number): string {\n  const pad = alphabet[alphabet.length - 1] === '='\n  const mask = (1 << bitsPerChar) - 1\n  let out = ''\n\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  for (let i = 0; i < data.length; ++i) {\n    // Slurp data into the buffer:\n    buffer = (buffer << 8) | data[i]\n    bits += 8\n\n    // Write out as much as we can:\n    while (bits > bitsPerChar) {\n      bits -= bitsPerChar\n      out += alphabet[mask & (buffer >> bits)]\n    }\n  }\n\n  // Partial character:\n  if (bits !== 0) {\n    out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n  }\n\n  // Add padding characters until we hit a byte boundary:\n  if (pad) {\n    while (((out.length * bitsPerChar) & 7) !== 0) {\n      out += '='\n    }\n  }\n\n  return out\n}\n\n/**\n * RFC4648 Factory\n */\nexport function rfc4648 <Base extends string, Prefix extends string> ({ name, prefix, bitsPerChar, alphabet }: { name: Base, prefix: Prefix, bitsPerChar: number, alphabet: string }): Codec<Base, Prefix> {\n  return from({\n    prefix,\n    name,\n    encode (input: Uint8Array): string {\n      return encode(input, alphabet, bitsPerChar)\n    },\n    decode (input: string): Uint8Array {\n      return decode(input, alphabet, bitsPerChar, name)\n    }\n  })\n}\n", "import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n  prefix: 'b',\n  name: 'base32',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n  bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n  prefix: 'B',\n  name: 'base32upper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n  bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n  prefix: 'c',\n  name: 'base32pad',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n  bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n  prefix: 'C',\n  name: 'base32padupper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n  bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n  prefix: 'v',\n  name: 'base32hex',\n  alphabet: '0123456789abcdefghijklmnopqrstuv',\n  bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n  prefix: 'V',\n  name: 'base32hexupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n  bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n  prefix: 't',\n  name: 'base32hexpad',\n  alphabet: '0123456789abcdefghijklmnopqrstuv=',\n  bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n  prefix: 'T',\n  name: 'base32hexpadupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n  bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n  prefix: 'h',\n  name: 'base32z',\n  alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n  bitsPerChar: 5\n})\n", "import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n  name: 'base58btc',\n  prefix: 'z',\n  alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n  name: 'base58flickr',\n  prefix: 'Z',\n  alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base64 = rfc4648({\n  prefix: 'm',\n  name: 'base64',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n  bitsPerChar: 6\n})\n\nexport const base64pad = rfc4648({\n  prefix: 'M',\n  name: 'base64pad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n  bitsPerChar: 6\n})\n\nexport const base64url = rfc4648({\n  prefix: 'u',\n  name: 'base64url',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n  bitsPerChar: 6\n})\n\nexport const base64urlpad = rfc4648({\n  prefix: 'U',\n  name: 'base64urlpad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n  bitsPerChar: 6\n})\n", "/**\n * Represents an array of a fixed length, preventing modifications to its size.\n *\n * The `FixedLengthArray` utility type transforms a standard array into a variant where\n * methods that could alter the length are omitted. It leverages TypeScript's advanced types,\n * such as conditional types and mapped types, to ensure that the array cannot be resized\n * through methods like `push`, `pop`, `splice`, `shift`, and `unshift`. The utility type\n * maintains all other characteristics of a standard array, including indexing, iteration,\n * and type checking for its elements.\n *\n * Note: The type does not prevent direct assignment to indices, even if it would exceed\n * the original length. However, such actions would lead to TypeScript type errors.\n *\n * @example\n * ```ts\n * // Declare a variable with a type of fixed-length array of three strings.\n * let myFixedLengthArray: FixedLengthArray< [string, string, string]>;\n *\n * // Array declaration tests\n * myFixedLengthArray = [ 'a', 'b', 'c' ];  // OK\n * myFixedLengthArray = [ 'a', 'b', 123 ];  // TYPE ERROR\n * myFixedLengthArray = [ 'a' ];            // LENGTH ERROR\n * myFixedLengthArray = [ 'a', 'b' ];       // LENGTH ERROR\n *\n * // Index assignment tests\n * myFixedLengthArray[1] = 'foo';           // OK\n * myFixedLengthArray[1000] = 'foo';        // INVALID INDEX ERROR\n *\n * // Methods that mutate array length\n * myFixedLengthArray.push('foo');          // MISSING METHOD ERROR\n * myFixedLengthArray.pop();                // MISSING METHOD ERROR\n *\n * // Direct length manipulation\n * myFixedLengthArray.length = 123;         // READ-ONLY ERROR\n *\n * // Destructuring\n * let [ a ] = myFixedLengthArray;          // OK\n * let [ a, b ] = myFixedLengthArray;       // OK\n * let [ a, b, c ] = myFixedLengthArray;    // OK\n * let [ a, b, c, d ] = myFixedLengthArray; // INVALID INDEX ERROR\n * ```\n *\n * @template T extends any[] - The array type to be transformed.\n */\nexport type FixedLengthArray<T extends any[]> =\n  Pick<T, Exclude<keyof T, ArrayLengthMutationKeys>>\n  & {\n    /**\n     * Custom iterator for the `FixedLengthArray` type.\n     *\n     * This iterator allows the `FixedLengthArray` to be used in standard iteration\n     * contexts, such as `for...of` loops and spread syntax. It ensures that even though\n     * the array is of a fixed length with disabled mutation methods, it still retains\n     * iterable behavior similar to a regular array.\n     *\n     * @returns An IterableIterator for the array items.\n     */\n    [Symbol.iterator]: () => IterableIterator<ArrayItems<T>>\n  };\n\n/** Helper types for {@link FixedLengthArray} */\ntype ArrayLengthMutationKeys = 'splice' | 'push' | 'pop' | 'shift' | 'unshift' | number;\ntype ArrayItems<T extends Array<any>> = T extends Array<infer TItems> ? TItems : never;\n\n/**\n * isArrayBufferSlice\n *\n * Checks if the ArrayBufferView represents a slice (subarray or a subview)\n * of an ArrayBuffer.\n *\n * An ArrayBufferView (TypedArray or DataView) can represent a portion of an\n * ArrayBuffer - such a view is said to be a \"slice\" of the original buffer.\n * This can occur when the `subarray` or `slice` method is called on a\n * TypedArray or when a DataView is created with a byteOffset and/or\n * byteLength that doesn't cover the full ArrayBuffer.\n *\n * @param arrayBufferView - The ArrayBufferView to be checked\n * @returns true if the ArrayBufferView represents a slice of an ArrayBuffer; false otherwise.\n */\nexport function isArrayBufferSlice(arrayBufferView: ArrayBufferView): boolean {\n  return arrayBufferView.byteOffset !== 0 || arrayBufferView.byteLength !== arrayBufferView.buffer.byteLength;\n}\n\n/**\n * Checks if the given object is an AsyncIterable.\n *\n * An AsyncIterable is an object that implements the AsyncIterable protocol,\n * which means it has a [Symbol.asyncIterator] method. This function checks\n * if the provided object conforms to this protocol by verifying the presence\n * and type of the [Symbol.asyncIterator] method.\n *\n * @param obj - The object to be checked for AsyncIterable conformity.\n * @returns True if the object is an AsyncIterable, false otherwise.\n *\n * @example\n * ```ts\n * // Returns true for a valid AsyncIterable\n * const asyncIterable = {\n *   async *[Symbol.asyncIterator]() {\n *     yield 1;\n *     yield 2;\n *   }\n * };\n * console.log(isAsyncIterable(asyncIterable)); // true\n * ```\n *\n * @example\n * ```ts\n * // Returns false for a regular object\n * console.log(isAsyncIterable({ a: 1, b: 2 })); // false\n * ```\n */\nexport function isAsyncIterable(obj: any): obj is AsyncIterable<any> {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  return typeof obj[Symbol.asyncIterator] === 'function';\n}\n\n/**\n * isDefined\n *\n * Utility function to check if a variable is neither null nor undefined.\n * This function helps in making TypeScript infer the type of the variable\n * as being defined, excluding `null` and `undefined`.\n *\n * The function uses strict equality (`!==`) for the comparison, ensuring\n * that the variable is not just falsy (like an empty string or zero),\n * but is truly either `null` or `undefined`.\n *\n * @param arg - The variable to be checked\n * @returns true if the variable is neither `null` nor `undefined`\n */\nexport function isDefined<T>(arg: T): arg is Exclude<T, null | undefined> {\n  return arg !== null && typeof arg !== 'undefined';\n}\n\n/**\n * Utility type that transforms a type `T` to have only certain keys `K` as required, while the\n * rest remain optional, except for keys specified in `O`, which are omitted entirely.\n *\n * This type is useful when you need a variation of a type where only specific properties are\n * required, and others are either optional or not included at all. It allows for more flexible type\n * definitions based on existing types without the need to redefine them.\n *\n * @template T - The original type to be transformed.\n * @template K - The keys of `T` that should be required.\n * @template O - The keys of `T` that should be omitted from the resulting type (optional).\n *\n * @example\n * ```ts\n * // Given an interface\n * interface Example {\n *   requiredProp: string;\n *   optionalProp?: number;\n *   anotherOptionalProp?: boolean;\n * }\n *\n * // Making 'optionalProp' required and omitting 'anotherOptionalProp'\n * type ModifiedExample = RequireOnly<Example, 'optionalProp', 'anotherOptionalProp'>;\n * // Result: { requiredProp?: string; optionalProp: number; }\n * ```\n */\nexport type RequireOnly<T, K extends keyof T, O extends keyof T = never> = Required<Pick<T, K>> & Omit<Partial<T>, O>;\n\n/**\n * universalTypeOf\n *\n * Why does this function exist?\n *\n * You can typically check if a value is of a particular type, such as\n * Uint8Array or ArrayBuffer, by using the `instanceof` operator. The\n * `instanceof` operator checks the prototype property of a constructor\n * in the object's prototype chain.\n *\n * However, there is a caveat with the `instanceof` check if the value\n * was created from a different JavaScript context (like an iframe or\n * a web worker). In those cases, the `instanceof` check might fail\n * because each context has a different global object, and therefore,\n * different built-in constructor functions.\n *\n * The `typeof` operator provides information about the type of the\n * operand in a less detailed way. For basic data types like number,\n * string, boolean, and undefined, the `typeof` operator works as\n * expected.  However, for objects, including arrays and null,\n * it always returns \"object\".  For functions, it returns \"function\".\n * So, while `typeof` is good for basic type checking, it doesn't\n * give detailed information about complex data types.\n *\n * Unlike `instanceof` and `typeof`, `Object.prototype.toString.call(value)`\n * can ensure a consistent result across different JavaScript\n * contexts.\n *\n * Credit for inspiration:\n *   Angus Croll\n *   https://github.com/angus-c\n *   https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/\n */\nexport function universalTypeOf(value: unknown) {\n  // Returns '[Object Type]' string.\n  const typeString = Object.prototype.toString.call(value);\n  // Returns ['Object', 'Type'] array or null.\n  const match = typeString.match(/\\s([a-zA-Z0-9]+)/);\n  // Deconstructs the array and gets just the type from index 1.\n  const [_, type] = match as RegExpMatchArray;\n\n  return type;\n}\n\n/**\n * Utility type to extract the type resolved by a Promise.\n *\n * This type unwraps the type `T` from `Promise<T>` if `T` is a Promise, otherwise returns `T` as\n * is. It's useful in situations where you need to handle the type returned by a promise-based\n * function in a synchronous context, such as defining types for test vectors or handling return\n * types in non-async code blocks.\n *\n * @template T - The type to unwrap from the Promise.\n *\n * @example\n * ```ts\n * // For a Promise type, it extracts the resolved type.\n * type AsyncNumber = Promise<number>;\n * type UnwrappedNumber = UnwrapPromise<AsyncNumber>; // number\n *\n * // For a non-Promise type, it returns the type as is.\n * type StringValue = string;\n * type UnwrappedString = UnwrapPromise<StringValue>; // string\n * ```\n */\nexport type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;", "import type { Multibase } from 'multiformats';\n\nimport { base32z } from 'multiformats/bases/base32';\nimport { base58btc } from 'multiformats/bases/base58';\nimport { base64url } from 'multiformats/bases/base64';\n\nimport { isAsyncIterable, isArrayBufferSlice, universalTypeOf } from './type-utils.js';\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nexport class Convert {\n  data: any;\n  format: string;\n\n  constructor(data: any, format: string) {\n    this.data = data;\n    this.format = format;\n  }\n\n  static arrayBuffer(data: ArrayBuffer): Convert {\n    return new Convert(data, 'ArrayBuffer');\n  }\n\n  static asyncIterable(data: AsyncIterable<any>): Convert {\n    if (!isAsyncIterable(data)) {\n      throw new TypeError('Input must be of type AsyncIterable.');\n    }\n    return new Convert(data, 'AsyncIterable');\n  }\n\n  static base32Z(data: string): Convert {\n    return new Convert(data, 'Base32Z');\n  }\n\n  static base58Btc(data: string): Convert {\n    return new Convert(data, 'Base58Btc');\n  }\n\n  static base64Url(data: string): Convert {\n    return new Convert(data, 'Base64Url');\n  }\n\n  /**\n   * Reference:\n   * The BufferSource type is a TypeScript type that represents an ArrayBuffer\n   * or one of the ArrayBufferView types, such a TypedArray (e.g., Uint8Array)\n   * or a DataView.\n   */\n  static bufferSource(data: BufferSource): Convert {\n    return new Convert(data, 'BufferSource');\n  }\n\n  static hex(data: string): Convert {\n    if (typeof data !== 'string') {\n      throw new TypeError('Hex input must be a string.');\n    }\n    if (data.length % 2 !== 0) {\n      throw new TypeError('Hex input must have an even number of characters.');\n    }\n    return new Convert(data, 'Hex');\n  }\n\n  static multibase(data: string): Convert {\n    return new Convert(data, 'Multibase');\n  }\n\n  static object(data: Record<string, any>): Convert {\n    return new Convert(data, 'Object');\n  }\n\n  static string(data: string): Convert {\n    return new Convert(data, 'String');\n  }\n\n  static uint8Array(data: Uint8Array): Convert {\n    return new Convert(data, 'Uint8Array');\n  }\n\n  toArrayBuffer(): ArrayBuffer {\n    switch (this.format) {\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data).buffer;\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data).buffer;\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'ArrayBuffer') {\n          // Data is already an ArrayBuffer, No conversion is necessary.\n          return this.data;\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          if (isArrayBufferSlice(this.data)) {\n            // Data is a slice of an ArrayBuffer. Return a new ArrayBuffer or ArrayBufferView of the same slice.\n            return this.data.buffer.slice(this.data.byteOffset, this.data.byteOffset + this.data.byteLength);\n          } else {\n            // Data is a whole ArrayBuffer viewed as a different TypedArray or DataView. Return the whole ArrayBuffer.\n            return this.data.buffer;\n          }\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'String': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'Uint8Array': {\n        return this.data.buffer;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  async toArrayBufferAsync(): Promise<ArrayBuffer> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        const blob = await this.toBlobAsync();\n        return await blob.arrayBuffer();\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  toBase32Z(): string {\n    switch (this.format) {\n\n      case 'Uint8Array': {\n        return base32z.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base64Z is not supported.`);\n    }\n  }\n\n  toBase58Btc(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base58btc.baseEncode(u8a);\n      }\n\n      case 'Multibase': {\n        return this.data.substring(1);\n      }\n\n      case 'Uint8Array': {\n        return base58btc.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base58Btc is not supported.`);\n    }\n  }\n\n  toBase64Url(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'BufferSource': {\n        const u8a = this.toUint8Array();\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        const u8a = textEncoder.encode(string);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'String': {\n        const u8a = textEncoder.encode(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Uint8Array': {\n        return base64url.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base64Url is not supported.`);\n    }\n  }\n\n  async toBlobAsync(): Promise<Blob> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Initialize an array to hold the chunks from the AsyncIterable.\n        const chunks = [];\n\n        // Asynchronously iterate over each chunk in the AsyncIterable.\n        for await (const chunk of (this.data as AsyncIterable<any>)) {\n          // Append each chunk to the chunks array. These chunks can be of any type, typically binary data or text.\n          chunks.push(chunk);\n        }\n\n        // Create a new Blob from the aggregated chunks.\n        // The Blob constructor combines these chunks into a single Blob object.\n        const blob = new Blob(chunks);\n\n        return blob;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Blob is not supported.`);\n    }\n  }\n\n  toHex(): string {\n    // pre-calculating Hex values improves runtime by 6-10x.\n    const hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Base64Url': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Uint8Array': {\n        let hex = '';\n        for (let i = 0; i < this.data.length; i++) {\n          hex += hexes[this.data[i]];\n        }\n        return hex;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Hex is not supported.`);\n    }\n  }\n\n  toMultibase(): Multibase<any> {\n    switch (this.format) {\n      case 'Base58Btc': {\n        return `z${this.data}`;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Multibase is not supported.`);\n    }\n  }\n\n  toObject(): object {\n    switch (this.format) {\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        const text = textDecoder.decode(u8a);\n        return JSON.parse(text);\n      }\n\n      case 'String': {\n        return JSON.parse(this.data);\n      }\n\n      case 'Uint8Array': {\n        const text = textDecoder.decode(this.data);\n        return JSON.parse(text);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  async toObjectAsync(): Promise<any> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Convert the AsyncIterable to a String.\n        const text = await this.toStringAsync();\n\n        // Parse the string as JSON. This step assumes that the string represents a valid JSON structure.\n        // JSON.parse() will convert the string into a corresponding JavaScript object.\n        const json = JSON.parse(text);\n\n        // Return the parsed JavaScript object. The type of this object will depend on the structure\n        // of the JSON in the stream. It could be an object, array, string, number, etc.\n        return json;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  toString(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        return textDecoder.decode(this.data);\n      }\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        return textDecoder.decode(u8a);\n      }\n\n      case 'Object': {\n        return JSON.stringify(this.data);\n      }\n\n      case 'Uint8Array': {\n        return textDecoder.decode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  async toStringAsync(): Promise<string> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Initialize an empty string to accumulate the decoded text.\n        let str = '';\n\n        // Iterate over the chunks from the AsyncIterable.\n        for await (const chunk of (this.data as AsyncIterable<any>)) {\n          // If the chunk is already a string, concatenate it directly.\n          if (typeof chunk === 'string')\n            str += chunk;\n          else\n          // If the chunk is a Uint8Array or similar, use the decoder to convert it to a string.\n          // The `stream: true` option lets the decoder handle multi-byte characters spanning\n          // multiple chunks.\n            str += textDecoder.decode(chunk, { stream: true });\n        }\n\n        // Finalize the decoding process to handle any remaining bytes and signal the end of the stream.\n        // The `stream: false` option flushes the decoder's internal state.\n        str += textDecoder.decode(undefined, { stream: false });\n\n        // Return the accumulated string.\n        return str;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  toUint8Array(): Uint8Array {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        // \u00C7reate Uint8Array as a view on the ArrayBuffer.\n        // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n        return new Uint8Array(this.data);\n      }\n\n      case 'Base32Z': {\n        return base32z.baseDecode(this.data);\n      }\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data);\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data);\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'Uint8Array') {\n          // Data is already a Uint8Array. No conversion is necessary.\n          // Note: Uint8Array is a type of BufferSource.\n          return this.data;\n        } else if (dataType === 'ArrayBuffer') {\n          // Data is an ArrayBuffer, create Uint8Array as a view on the ArrayBuffer.\n          // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n          return new Uint8Array(this.data);\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          return new Uint8Array(this.data.buffer, this.data.byteOffset, this.data.byteLength);\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        const u8a = new Uint8Array(this.data.length / 2);\n        for (let i = 0; i < this.data.length; i += 2) {\n          const byteValue = parseInt(this.data.substring(i, i + 2), 16);\n          if (isNaN(byteValue)) {\n            throw new TypeError('Input is not a valid hexadecimal string.');\n          }\n          u8a[i / 2] = byteValue;\n        }\n        return u8a;\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        return textEncoder.encode(string);\n      }\n\n      case 'String': {\n        return textEncoder.encode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n\n  async toUint8ArrayAsync(): Promise<Uint8Array> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        const arrayBuffer = await this.toArrayBufferAsync();\n        return new Uint8Array(arrayBuffer);\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n}", "/**\n * Web5 logger level.\n */\nexport enum Web5LogLevel {\n  Debug = 'debug',\n  Silent = 'silent',\n}\n\n/**\n * Web5 logger interface.\n */\nexport interface Web5LoggerInterface {\n\n  /**\n   * Sets the log verbose level.\n   */\n  setLogLevel(logLevel: Web5LogLevel): void;\n\n  /**\n   * Same as `info()`.\n   * Logs an informational message.\n   */\n  log (message: string): void;\n\n  /**\n   * Logs an informational message.\n   */\n  info(message: string): void;\n\n  /**\n   * Logs an error message.\n   */\n  error(message: string): void;\n}\n\n/**\n * A Web5 logger implementation.\n */\nclass Web5Logger implements Web5LoggerInterface {\n  private logLevel: Web5LogLevel = Web5LogLevel.Silent; // Default to silent/no-op log level\n\n  setLogLevel(logLevel: Web5LogLevel): void {\n    this.logLevel = logLevel;\n  }\n\n  public log(message: string): void {\n    this.info(message);\n  }\n\n  public info(message: string): void {\n    if (this.logLevel === Web5LogLevel.Silent) { return; }\n\n    console.info(message);\n  }\n\n  public error(message: string): void {\n    if (this.logLevel === Web5LogLevel.Silent) { return; }\n\n    console.error(message);\n  }\n}\n\n// Export a singleton logger instance\nexport const logger = new Web5Logger();\n\n// Attach logger to the global window object in browser environment for easy access to the logger instance.\n// e.g. can call `web5logger.setLogLevel('debug');` directly in browser console.\nif (typeof window !== 'undefined') {\n  (window as any).web5logger = logger; // Makes `web5Logger` accessible globally in browser\n}", "import varint from './vendor/varint.js'\n\nexport function decode (data: Uint8Array, offset = 0): [number, number] {\n  const code = varint.decode(data, offset)\n  return [code, varint.decode.bytes]\n}\n\nexport function encodeTo (int: number, target: Uint8Array, offset = 0): Uint8Array {\n  varint.encode(int, target, offset)\n  return target\n}\n\nexport function encodingLength (int: number): number {\n  return varint.encodingLength(int)\n}\n", "/* eslint-disable */\nvar encode_1 = encode;\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31);\n\n/**\n * @param {number} num\n * @param {number[]} out\n * @param {number} offset\n */\nfunction encode(num, out, offset) {\n  out = out || [];\n  offset = offset || 0;\n  var oldOffset = offset;\n\n  while(num >= INT) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num /= 128;\n  }\n  while(num & MSBALL) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num >>>= 7;\n  }\n  out[offset] = num | 0;\n  \n  // @ts-ignore\n  encode.bytes = offset - oldOffset + 1;\n  \n  return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n  , REST$1 = 0x7F;\n\n/**\n * @param {string | any[]} buf\n * @param {number} offset\n */\nfunction read(buf, offset) {\n  var res    = 0\n    , offset = offset || 0\n    , shift  = 0\n    , counter = offset\n    , b\n    , l = buf.length;\n\n  do {\n    if (counter >= l) {\n      // @ts-ignore\n      read.bytes = 0;\n      throw new RangeError('Could not decode varint')\n    }\n    b = buf[counter++];\n    res += shift < 28\n      ? (b & REST$1) << shift\n      : (b & REST$1) * Math.pow(2, shift);\n    shift += 7;\n  } while (b >= MSB$1)\n\n  // @ts-ignore\n  read.bytes = counter - offset;\n\n  return res\n}\n\nvar N1 = Math.pow(2,  7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (/** @type {number} */ value) {\n  return (\n    value < N1 ? 1\n  : value < N2 ? 2\n  : value < N3 ? 3\n  : value < N4 ? 4\n  : value < N5 ? 5\n  : value < N6 ? 6\n  : value < N7 ? 7\n  : value < N8 ? 8\n  : value < N9 ? 9\n  :              10\n  )\n};\n\nvar varint = {\n    encode: encode_1\n  , decode: decode\n  , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n", "import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\nimport type { MultihashDigest } from './interface.js'\n\n/**\n * Creates a multihash digest.\n */\nexport function create <Code extends number> (code: Code, digest: Uint8Array): Digest<Code, number> {\n  const size = digest.byteLength\n  const sizeOffset = varint.encodingLength(code)\n  const digestOffset = sizeOffset + varint.encodingLength(size)\n\n  const bytes = new Uint8Array(digestOffset + size)\n  varint.encodeTo(code, bytes, 0)\n  varint.encodeTo(size, bytes, sizeOffset)\n  bytes.set(digest, digestOffset)\n\n  return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n */\nexport function decode (multihash: Uint8Array): MultihashDigest {\n  const bytes = coerce(multihash)\n  const [code, sizeOffset] = varint.decode(bytes)\n  const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n  const digest = bytes.subarray(sizeOffset + digestOffset)\n\n  if (digest.byteLength !== size) {\n    throw new Error('Incorrect length')\n  }\n\n  return new Digest(code, size, digest, bytes)\n}\n\nexport function equals (a: MultihashDigest, b: unknown): b is MultihashDigest {\n  if (a === b) {\n    return true\n  } else {\n    const data = b as { code?: unknown, size?: unknown, bytes?: unknown }\n\n    return (\n      a.code === data.code &&\n      a.size === data.size &&\n      data.bytes instanceof Uint8Array &&\n      equalBytes(a.bytes, data.bytes)\n    )\n  }\n}\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\nexport class Digest<Code extends number, Size extends number> implements MultihashDigest {\n  readonly code: Code\n  readonly size: Size\n  readonly digest: Uint8Array\n  readonly bytes: Uint8Array\n\n  /**\n   * Creates a multihash digest.\n   */\n  constructor (code: Code, size: Size, digest: Uint8Array, bytes: Uint8Array) {\n    this.code = code\n    this.size = size\n    this.digest = digest\n    this.bytes = bytes\n  }\n}\n", "import { base32 } from './bases/base32.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\nimport * as varint from './varint.js'\nimport type * as API from './link/interface.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nexport function format <T extends API.Link<unknown, number, number, API.Version>, Prefix extends string> (link: T, base?: API.MultibaseEncoder<Prefix>): API.ToString<T, Prefix> {\n  const { bytes, version } = link\n  switch (version) {\n    case 0:\n      return toStringV0(\n        bytes,\n        baseCache(link),\n        base as API.MultibaseEncoder<'z'> ?? base58btc.encoder\n      )\n    default:\n      return toStringV1(\n        bytes,\n        baseCache(link),\n        (base ?? base32.encoder) as API.MultibaseEncoder<Prefix>\n      )\n  }\n}\n\nexport function toJSON <Link extends API.UnknownLink> (link: Link): API.LinkJSON<Link> {\n  return {\n    '/': format(link)\n  }\n}\n\nexport function fromJSON <Link extends API.UnknownLink> (json: API.LinkJSON<Link>): CID<unknown, number, number, API.Version> {\n  return CID.parse(json['/'])\n}\n\nconst cache = new WeakMap<API.UnknownLink, Map<string, string>>()\n\nfunction baseCache (cid: API.UnknownLink): Map<string, string> {\n  const baseCache = cache.get(cid)\n  if (baseCache == null) {\n    const baseCache = new Map()\n    cache.set(cid, baseCache)\n    return baseCache\n  }\n  return baseCache\n}\n\nexport class CID<Data = unknown, Format extends number = number, Alg extends number = number, Version extends API.Version = API.Version> implements API.Link<Data, Format, Alg, Version> {\n  readonly code: Format\n  readonly version: Version\n  readonly multihash: API.MultihashDigest<Alg>\n  readonly bytes: Uint8Array\n  readonly '/': Uint8Array\n\n  /**\n   * @param version - Version of the CID\n   * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param multihash - (Multi)hash of the of the content.\n   */\n  constructor (version: Version, code: Format, multihash: API.MultihashDigest<Alg>, bytes: Uint8Array) {\n    this.code = code\n    this.version = version\n    this.multihash = multihash\n    this.bytes = bytes\n\n    // flag to serializers that this is a CID and\n    // should be treated specially\n    this['/'] = bytes\n  }\n\n  /**\n   * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n   * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n   *\n   * @deprecated\n   */\n  get asCID (): this {\n    return this\n  }\n\n  // ArrayBufferView\n  get byteOffset (): number {\n    return this.bytes.byteOffset\n  }\n\n  // ArrayBufferView\n  get byteLength (): number {\n    return this.bytes.byteLength\n  }\n\n  toV0 (): CID<Data, API.DAG_PB, API.SHA_256, 0> {\n    switch (this.version) {\n      case 0: {\n        return this as CID<Data, API.DAG_PB, API.SHA_256, 0>\n      }\n      case 1: {\n        const { code, multihash } = this\n\n        if (code !== DAG_PB_CODE) {\n          throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n        }\n\n        // sha2-256\n        if (multihash.code !== SHA_256_CODE) {\n          throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n        }\n\n        return (\n          CID.createV0(\n            multihash as API.MultihashDigest<API.SHA_256>\n          )\n        )\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  toV1 (): CID<Data, Format, Alg, 1> {\n    switch (this.version) {\n      case 0: {\n        const { code, digest } = this.multihash\n        const multihash = Digest.create(code, digest)\n        return (\n          CID.createV1(this.code, multihash)\n        )\n      }\n      case 1: {\n        return this as CID<Data, Format, Alg, 1>\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  equals (other: unknown): other is CID<Data, Format, Alg, Version> {\n    return CID.equals(this, other)\n  }\n\n  static equals <Data, Format extends number, Alg extends number, Version extends API.Version>(self: API.Link<Data, Format, Alg, Version>, other: unknown): other is CID {\n    const unknown = other as { code?: unknown, version?: unknown, multihash?: unknown }\n    return (\n      unknown != null &&\n      self.code === unknown.code &&\n      self.version === unknown.version &&\n      Digest.equals(self.multihash, unknown.multihash)\n    )\n  }\n\n  toString (base?: API.MultibaseEncoder<string>): string {\n    return format(this, base)\n  }\n\n  toJSON (): API.LinkJSON<this> {\n    return { '/': format(this) }\n  }\n\n  link (): this {\n    return this\n  }\n\n  readonly [Symbol.toStringTag] = 'CID';\n\n  // Legacy\n\n  [Symbol.for('nodejs.util.inspect.custom')] (): string {\n    return `CID(${this.toString()})`\n  }\n\n  /**\n   * Takes any input `value` and returns a `CID` instance if it was\n   * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n   * it will return value back. If `value` is not instance of this CID\n   * class, but is compatible CID it will return new instance of this\n   * `CID` class. Otherwise returns null.\n   *\n   * This allows two different incompatible versions of CID library to\n   * co-exist and interop as long as binary interface is compatible.\n   */\n  static asCID <Data, Format extends number, Alg extends number, Version extends API.Version, U>(input: API.Link<Data, Format, Alg, Version> | U): CID<Data, Format, Alg, Version> | null {\n    if (input == null) {\n      return null\n    }\n\n    const value = input as any\n    if (value instanceof CID) {\n      // If value is instance of CID then we're all set.\n      return value\n    } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n      // If value isn't instance of this CID class but `this.asCID === this` or\n      // `value['/'] === value.bytes` is true it is CID instance coming from a\n      // different implementation (diff version or duplicate). In that case we\n      // rebase it to this `CID` implementation so caller is guaranteed to get\n      // instance with expected API.\n      const { version, code, multihash, bytes } = value\n      return new CID(\n        version,\n        code,\n        multihash as API.MultihashDigest<Alg>,\n        bytes ?? encodeCID(version, code, multihash.bytes)\n      )\n    } else if (value[cidSymbol] === true) {\n      // If value is a CID from older implementation that used to be tagged via\n      // symbol we still rebase it to the this `CID` implementation by\n      // delegating that to a constructor.\n      const { version, multihash, code } = value\n      const digest = Digest.decode(multihash) as API.MultihashDigest<Alg>\n      return CID.create(version, code, digest)\n    } else {\n      // Otherwise value is not a CID (or an incompatible version of it) in\n      // which case we return `null`.\n      return null\n    }\n  }\n\n  /**\n   * @param version - Version of the CID\n   * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param digest - (Multi)hash of the of the content.\n   */\n  static create <Data, Format extends number, Alg extends number, Version extends API.Version>(version: Version, code: Format, digest: API.MultihashDigest<Alg>): CID<Data, Format, Alg, Version> {\n    if (typeof code !== 'number') {\n      throw new Error('String codecs are no longer supported')\n    }\n\n    if (!(digest.bytes instanceof Uint8Array)) {\n      throw new Error('Invalid digest')\n    }\n\n    switch (version) {\n      case 0: {\n        if (code !== DAG_PB_CODE) {\n          throw new Error(\n            `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n          )\n        } else {\n          return new CID(version, code, digest, digest.bytes)\n        }\n      }\n      case 1: {\n        const bytes = encodeCID(version, code, digest.bytes)\n        return new CID(version, code, digest, bytes)\n      }\n      default: {\n        throw new Error('Invalid version')\n      }\n    }\n  }\n\n  /**\n   * Simplified version of `create` for CIDv0.\n   */\n  static createV0 <T = unknown>(digest: API.MultihashDigest<typeof SHA_256_CODE>): CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0> {\n    return CID.create(0, DAG_PB_CODE, digest)\n  }\n\n  /**\n   * Simplified version of `create` for CIDv1.\n   *\n   * @param code - Content encoding format code.\n   * @param digest - Multihash of the content.\n   */\n  static createV1 <Data, Code extends number, Alg extends number>(code: Code, digest: API.MultihashDigest<Alg>): CID<Data, Code, Alg, 1> {\n    return CID.create(1, code, digest)\n  }\n\n  /**\n   * Decoded a CID from its binary representation. The byte array must contain\n   * only the CID with no additional bytes.\n   *\n   * An error will be thrown if the bytes provided do not contain a valid\n   * binary representation of a CID.\n   */\n  static decode <Data, Code extends number, Alg extends number, Version extends API.Version>(bytes: API.ByteView<API.Link<Data, Code, Alg, Version>>): CID<Data, Code, Alg, Version> {\n    const [cid, remainder] = CID.decodeFirst(bytes)\n    if (remainder.length !== 0) {\n      throw new Error('Incorrect length')\n    }\n    return cid\n  }\n\n  /**\n   * Decoded a CID from its binary representation at the beginning of a byte\n   * array.\n   *\n   * Returns an array with the first element containing the CID and the second\n   * element containing the remainder of the original byte array. The remainder\n   * will be a zero-length byte array if the provided bytes only contained a\n   * binary CID representation.\n   */\n  static decodeFirst <T, C extends number, A extends number, V extends API.Version>(bytes: API.ByteView<API.Link<T, C, A, V>>): [CID<T, C, A, V>, Uint8Array] {\n    const specs = CID.inspectBytes(bytes)\n    const prefixSize = specs.size - specs.multihashSize\n    const multihashBytes = coerce(\n      bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n    )\n    if (multihashBytes.byteLength !== specs.multihashSize) {\n      throw new Error('Incorrect length')\n    }\n    const digestBytes = multihashBytes.subarray(\n      specs.multihashSize - specs.digestSize\n    )\n    const digest = new Digest.Digest(\n      specs.multihashCode,\n      specs.digestSize,\n      digestBytes,\n      multihashBytes\n    )\n    const cid =\n      specs.version === 0\n        ? CID.createV0(digest as API.MultihashDigest<API.SHA_256>)\n        : CID.createV1(specs.codec, digest)\n    return [cid as CID<T, C, A, V>, bytes.subarray(specs.size)]\n  }\n\n  /**\n   * Inspect the initial bytes of a CID to determine its properties.\n   *\n   * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n   * bytes but for larger multicodec code values and larger multihash digest\n   * lengths these varints can be quite large. It is recommended that at least\n   * 10 bytes be made available in the `initialBytes` argument for a complete\n   * inspection.\n   */\n  static inspectBytes <T, C extends number, A extends number, V extends API.Version>(initialBytes: API.ByteView<API.Link<T, C, A, V>>): { version: V, codec: C, multihashCode: A, digestSize: number, multihashSize: number, size: number } {\n    let offset = 0\n    const next = (): number => {\n      const [i, length] = varint.decode(initialBytes.subarray(offset))\n      offset += length\n      return i\n    }\n\n    let version = next() as V\n    let codec = DAG_PB_CODE as C\n    if (version as number === 18) {\n      // CIDv0\n      version = 0 as V\n      offset = 0\n    } else {\n      codec = next() as C\n    }\n\n    if (version !== 0 && version !== 1) {\n      throw new RangeError(`Invalid CID version ${version}`)\n    }\n\n    const prefixSize = offset\n    const multihashCode = next() as A // multihash code\n    const digestSize = next() // multihash length\n    const size = offset + digestSize\n    const multihashSize = size - prefixSize\n\n    return { version, codec, multihashCode, digestSize, multihashSize, size }\n  }\n\n  /**\n   * Takes cid in a string representation and creates an instance. If `base`\n   * decoder is not provided will use a default from the configuration. It will\n   * throw an error if encoding of the CID is not compatible with supplied (or\n   * a default decoder).\n   */\n  static parse <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version>(source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): CID<Data, Code, Alg, Version> {\n    const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n    const cid = CID.decode(bytes)\n\n    if (cid.version === 0 && source[0] !== 'Q') {\n      throw Error('Version 0 CID string must not include multibase prefix')\n    }\n\n    // Cache string representation to avoid computing it on `this.toString()`\n    baseCache(cid).set(prefix, source)\n\n    return cid\n  }\n}\n\nfunction parseCIDtoBytes <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): [Prefix, API.ByteView<API.Link<Data, Code, Alg, Version>>] {\n  switch (source[0]) {\n    // CIDv0 is parsed differently\n    case 'Q': {\n      const decoder = base ?? base58btc\n      return [\n        base58btc.prefix as Prefix,\n        decoder.decode(`${base58btc.prefix}${source}`)\n      ]\n    }\n    case base58btc.prefix: {\n      const decoder = base ?? base58btc\n      return [base58btc.prefix as Prefix, decoder.decode(source)]\n    }\n    case base32.prefix: {\n      const decoder = base ?? base32\n      return [base32.prefix as Prefix, decoder.decode(source)]\n    }\n    default: {\n      if (base == null) {\n        throw Error(\n          'To parse non base32 or base58btc encoded CID multibase decoder must be provided'\n        )\n      }\n      return [source[0] as Prefix, base.decode(source)]\n    }\n  }\n}\n\nfunction toStringV0 (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<'z'>): string {\n  const { prefix } = base\n  if (prefix !== base58btc.prefix) {\n    throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n  }\n\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes).slice(1)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\nfunction toStringV1 <Prefix extends string> (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<Prefix>): string {\n  const { prefix } = base\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\nfunction encodeCID (version: API.Version, code: number, multihash: Uint8Array): Uint8Array {\n  const codeOffset = varint.encodingLength(version)\n  const hashOffset = codeOffset + varint.encodingLength(code)\n  const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n  varint.encodeTo(version, bytes, 0)\n  varint.encodeTo(code, bytes, codeOffset)\n  bytes.set(multihash, hashOffset)\n  return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n", "import { varint } from 'multiformats';\n\nexport type MulticodecCode = number;\n\nexport type MulticodecDefinition<MulticodecCode> = {\n  code: MulticodecCode;\n  // codeBytes: Uint8Array;\n  name: string;\n}\n\n/**\n * The `Multicodec` class provides an interface to prepend binary data\n * with a prefix that identifies the data that follows.\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Multicodec is a self-describing multiformat, it wraps other formats with\n * a tiny bit of self-description. A multicodec identifier is a\n * varint (variable integer) that indicates the format of the data.\n *\n * The canonical table of multicodecs can be access at the following URL:\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Example usage:\n *\n * ```ts\n * Multicodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\n * const prefixedData = Multicodec.addPrefix({ code: 0xed, data: new Uint8Array(32) });\n * ```\n */\nexport class Multicodec {\n  /**\n   * A static field containing a map of codec codes to their corresponding names.\n   */\n  static codeToName = new Map<MulticodecCode, string>();\n\n  /**\n   * A static field containing a map of codec names to their corresponding codes.\n   */\n  static nameToCode = new Map<string, MulticodecCode>();\n\n  /**\n   * Adds a multicodec prefix to input data.\n   *\n   * @param options - The options for adding a prefix.\n   * @param options.code - The codec code. Either the code or name must be provided.\n   * @param options.name - The codec name. Either the code or name must be provided.\n   * @param options.data - The data to be prefixed.\n   * @returns The data with the added prefix as a Uint8Array.\n   */\n  public static addPrefix(options: {\n    code?: MulticodecCode,\n    data: Uint8Array,\n    name?: string,\n  }): Uint8Array {\n    let { code, data, name } = options;\n\n    if (!(name ? !code : code)) {\n      throw new Error(`Either 'name' or 'code' must be defined, but not both.`);\n    }\n\n    // If code was given, confirm it exists, or lookup code by name.\n    code = Multicodec.codeToName.has(code!) ? code : Multicodec.nameToCode.get(name!);\n\n    // Throw error if a registered Codec wasn't found.\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${options.name ?? options.code}`);\n    }\n\n    // Create a new array to store the prefix and input data.\n    const prefixLength = varint.encodingLength(code);\n    const dataWithPrefix = new Uint8Array(prefixLength + data.byteLength);\n    dataWithPrefix.set(data, prefixLength);\n\n    // Prepend the prefix.\n    varint.encodeTo(code, dataWithPrefix);\n\n    return dataWithPrefix;\n  }\n\n  /**\n   * Get the Multicodec code from given prefixed data.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.prefixedData - The data to extract the codec code from.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromData(options: {\n    prefixedData: Uint8Array\n  }): MulticodecCode {\n    const { prefixedData } = options;\n    const [code, _] = varint.decode(prefixedData);\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec code from given Multicodec name.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.name - The name to lookup.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromName(options: {\n    name: string\n  }): MulticodecCode {\n    const { name } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const code = Multicodec.nameToCode.get(name);\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${name}`);\n    }\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec name from given Multicodec code.\n   *\n   * @param options - The options for getting the codec name.\n   * @param options.name - The code to lookup.\n   * @returns - The Multicodec name as a string.\n   */\n  public static getNameFromCode(options: {\n    code: MulticodecCode\n  }): string {\n    const { code } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return name;\n  }\n\n  /**\n   * Registers a new codec in the Multicodec class.\n   *\n   * @param codec - The codec to be registered.\n   */\n  public static registerCodec(codec: MulticodecDefinition<MulticodecCode>) {\n    Multicodec.codeToName.set(codec.code, codec.name);\n    Multicodec.nameToCode.set(codec.name, codec.code);\n  }\n\n  /**\n   * Returns the data with the Multicodec prefix removed.\n   *\n   * @param refixedData - The data to extract the codec code from.\n   * @returns {Uint8Array}\n   */\n  public static removePrefix(options: {\n    prefixedData: Uint8Array\n  }): { code: MulticodecCode, name: string, data: Uint8Array } {\n    const { prefixedData } = options;\n    const [code, codeByteLength] = varint.decode(prefixedData);\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return { code, data: prefixedData.slice(codeByteLength), name };\n  }\n}\n\n// Pre-defined registered codecs:\nMulticodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\nMulticodec.registerCodec({ code: 0x1300, name: 'ed25519-priv' });\nMulticodec.registerCodec({ code: 0xec, name: 'x25519-pub' });\nMulticodec.registerCodec({ code: 0x1302, name: 'x25519-priv' });\nMulticodec.registerCodec({ code: 0xe7, name: 'secp256k1-pub' });\nMulticodec.registerCodec({ code: 0x1301, name: 'secp256k1-priv' });", "/**\n * Checks whether the given object has any properties.\n */\nexport function isEmptyObject(obj: unknown): boolean {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  if (Object.getOwnPropertySymbols(obj).length > 0) {\n    return false;\n  }\n\n  return Object.keys(obj).length === 0;\n}\n\n/**\n * Recursively removes all properties with an empty object or array as its value from the given object.\n */\nexport function removeEmptyObjects(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (typeof(obj[key]) === 'object') {\n      // recursive remove empty object or array properties in nested objects\n      removeEmptyObjects(obj[key] as Record<string, unknown>);\n    }\n\n    if (isEmptyObject(obj[key])) {\n      delete obj[key];\n    }\n  });\n}\n\n/**\n * Recursively removes all properties with `undefined` as its value from the given object.\n */\nexport function removeUndefinedProperties(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (obj[key] === undefined) {\n      delete obj[key];\n    } else if (typeof(obj[key]) === 'object') {\n      removeUndefinedProperties(obj[key] as Record<string, unknown>); // recursive remove `undefined` properties in nested objects\n    }\n  });\n}", "import type { AbstractLevel } from 'abstract-level';\n\nimport { Level } from 'level';\n\nimport type { KeyValueStore } from './types.js';\n\nexport class LevelStore<K = string, V = any> implements KeyValueStore<K, V> {\n  private store: AbstractLevel<string | Buffer | Uint8Array, K, V>;\n\n  constructor({ db, location = 'DATASTORE' }: {\n    db?: AbstractLevel<string | Buffer | Uint8Array, K, V>;\n    location?: string;\n  } = {}) {\n    this.store = db ?? new Level<K, V>(location);\n  }\n\n  async clear(): Promise<void> {\n    await this.store.clear();\n  }\n\n  async close(): Promise<void> {\n    await this.store.close();\n  }\n\n  async delete(key: K): Promise<void> {\n    await this.store.del(key);\n  }\n\n  async get(key: K): Promise<V | undefined> {\n    try {\n      return await this.store.get(key);\n    } catch (error: any) {\n      // Don't throw when a key wasn't found.\n      if (error.notFound) return undefined;\n      throw error;\n    }\n  }\n\n  async set(key: K, value: V): Promise<void> {\n    await this.store.put(key, value);\n  }\n}\n\n/**\n * The `MemoryStore` class is an implementation of\n * `KeyValueStore` that holds data in memory.\n *\n * It provides a basic key-value store that works synchronously and keeps all\n * data in memory. This can be used for testing, or for handling small amounts\n * of data with simple key-value semantics.\n *\n * Example usage:\n *\n * ```ts\n * const memoryStore = new MemoryStore<string, number>();\n * await memoryStore.set(\"key1\", 1);\n * const value = await memoryStore.get(\"key1\");\n * console.log(value); // 1\n * ```\n *\n * @public\n */\nexport class MemoryStore<K, V> implements KeyValueStore<K, V> {\n  /**\n   * A private field that contains the Map used as the key-value store.\n   */\n  private store: Map<K, V> = new Map();\n\n  /**\n   * Clears all entries in the key-value store.\n   *\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async clear(): Promise<void> {\n    this.store.clear();\n  }\n\n  /**\n   * This operation is no-op for `MemoryStore`\n   * and will log a warning if called.\n   */\n  async close(): Promise<void> {\n    /** no-op */\n  }\n\n  /**\n   * Deletes an entry from the key-value store by its key.\n   *\n   * @param id - The key of the entry to delete.\n   * @returns A Promise that resolves to a boolean indicating whether the entry was successfully deleted.\n   */\n  async delete(id: K): Promise<boolean> {\n    return this.store.delete(id);\n  }\n\n  /**\n   * Retrieves the value of an entry by its key.\n   *\n   * @param id - The key of the entry to retrieve.\n   * @returns A Promise that resolves to the value of the entry, or `undefined` if the entry does not exist.\n   */\n  async get(id: K): Promise<V | undefined> {\n    return this.store.get(id);\n  }\n\n  /**\n   * Checks for the presence of an entry by key.\n   *\n   * @param id - The key to check for the existence of.\n   * @returns A Promise that resolves to a boolean indicating whether an element with the specified key exists or not.\n   */\n  async has(id: K): Promise<boolean> {\n    return this.store.has(id);\n  }\n\n  /**\n   * Retrieves all values in the key-value store.\n   *\n   * @returns A Promise that resolves to an array of all values in the store.\n   */\n  async list(): Promise<V[]> {\n    return Array.from(this.store.values());\n  }\n\n  /**\n   * Sets the value of an entry in the key-value store.\n   *\n   * @param id - The key of the entry to set.\n   * @param key - The new value for the entry.\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async set(id: K, key: V): Promise<void> {\n    this.store.set(id, key);\n  }\n}", "import type { Duplex, ReadableStateOptions, Transform, Writable } from 'readable-stream';\n\nimport { Readable } from 'readable-stream';\nimport { Stream } from './stream.js';\nimport { Convert } from './convert.js';\n\nexport { Readable } from 'readable-stream';\n\nexport class NodeStream {\n  /**\n   * Consumes a `Readable` stream and returns its contents as an `ArrayBuffer`.\n   *\n   * This method reads all data from a Node.js `Readable` stream, collects it, and converts it into\n   * an `ArrayBuffer`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const arrayBuffer = await NodeStream.consumeToArrayBuffer({ readable: nodeReadable });\n   * ```\n   *\n   * @param readable - The Node.js Readable stream whose data will be consumed.\n   * @returns A Promise that resolves to an `ArrayBuffer` containing all the data from the stream.\n   */\n  public static async consumeToArrayBuffer({ readable }: { readable: Readable}): Promise<ArrayBuffer> {\n    const arrayBuffer = await Convert.asyncIterable(readable).toArrayBufferAsync();\n\n    return arrayBuffer;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a `Blob`.\n   *\n   * This method reads all data from a Node.js `Readable` stream, collects it, and converts it into\n   * a `Blob`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const blob = await NodeStream.consumeToBlob({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose data will be consumed.\n   * @returns A Promise that resolves to a `Blob` containing all the data from the stream.\n   */\n  public static async consumeToBlob({ readable }: { readable: Readable }): Promise<Blob> {\n    const blob = await Convert.asyncIterable(readable).toBlobAsync();\n\n    return blob;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a `Uint8Array`.\n   *\n   * This method reads all data from a Node.js `Readable`, collects it, and converts it into a\n   * `Uint8Array`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const bytes = await NodeStream.consumeToBytes({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose data will be consumed.\n   * @returns A Promise that resolves to a `Uint8Array` containing all the data from the stream.\n   */\n  public static async consumeToBytes({ readable }: { readable: Readable }): Promise<Uint8Array> {\n    const bytes = await Convert.asyncIterable(readable).toUint8ArrayAsync();\n\n    return bytes;\n  }\n\n  /**\n   * Consumes a `Readable` stream and parses its contents as JSON.\n   *\n   * This method reads all the data from the stream, converts it to a text string, and then parses\n   * it as JSON, returning the resulting object.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const jsonData = await NodeStream.consumeToJson({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose JSON content will be consumed.\n   * @returns A Promise that resolves to the parsed JSON object from the stream's data.\n   */\n  public static async consumeToJson({ readable }: { readable: Readable }): Promise<any> {\n    const object = await Convert.asyncIterable(readable).toObjectAsync();\n\n    return object;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a text string.\n   *\n   * This method reads all the data from the stream, converting it into a single string.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const text = await NodeStream.consumeToText({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose text content will be consumed.\n   * @returns A Promise that resolves to a string containing all the data from the stream.\n   */\n  public static async consumeToText({ readable }: { readable: Readable}): Promise<string> {\n    const text = await Convert.asyncIterable(readable).toStringAsync();\n\n    return text;\n  }\n\n  /**\n   * Converts a Web `ReadableStream` to a Node.js `Readable` stream.\n   *\n   * This method takes a Web `ReadableStream` and converts it to a Node.js `Readable` stream.\n   * The conversion is done by reading chunks from the Web `ReadableStream` and pushing them\n   * into the Node.js `Readable` stream.\n   *\n   * @example\n   * ```ts\n   * const webReadableStream = getWebReadableStreamSomehow();\n   * const nodeReadableStream = NodeStream.fromWebReadable({ readableStream: webReadableStream });\n   * ```\n   *\n   * @param readableStream - The Web `ReadableStream` to be converted.\n   * @param readableOptions - Optional `Readable` stream options for the Node.js stream.\n   * @returns The Node.js `Readable` stream.\n   */\n  public static fromWebReadable({ readableStream, readableOptions }: {\n    readableStream: ReadableStream,\n    readableOptions?: ReadableStateOptions\n  }): Readable {\n    if (!Stream.isReadableStream(readableStream)) {\n      throw new TypeError(`NodeStream.fromWebReadable: 'readableStream' is not a Web ReadableStream.`);\n    }\n\n    const reader = readableStream.getReader();\n    let closed = false;\n\n    const nodeReadable = new Readable({\n      ...readableOptions,\n\n      read: function () {\n        reader.read().then(({ done, value }) => {\n          if (done) {\n            this.push(null); // Push null to signify end of stream.\n          } else {\n            if (!this.push(value)) {\n              // When push returns false, we should stop reading until _read is called again.\n              return;\n            }\n          }\n        }).catch((error) => {\n          // If an error occurs while reading, destroy the stream.\n          this.destroy(error);\n        });\n      },\n\n      destroy: function (error, callback) {\n        function done() {\n          callback(error);\n        }\n\n        if (!closed) {\n          reader.cancel(error)\n            .then(done)\n            .catch(done);\n          return;\n        }\n        done();\n      }\n    });\n\n    reader.closed\n      .then(() => {\n        closed = true; // Prevents reader.cancel() from being called in destroy()\n      })\n      .catch((error) => {\n        closed = true; // Prevents reader.cancel() from being called in destroy()\n        nodeReadable.destroy(error);\n      });\n\n    return nodeReadable;\n  }\n\n  /**\n   * Checks if a Node.js stream (`Readable`, `Writable`, `Duplex`, or `Transform`) has been destroyed.\n   *\n   * This method determines whether the provided Node.js stream has been destroyed. A stream\n   * is considered destroyed if its 'destroyed' property is set to true or if its internal state\n   * indicates it has been destroyed.\n   *\n   * @example\n   * ```ts\n   * const stream = getStreamSomehow();\n   * stream.destroy(); // Destroy the stream.\n   * const isDestroyed = NodeStream.isDestroyed({ stream });\n   * console.log(isDestroyed); // Output: true\n   * ```\n   *\n   * @param stream - The Node.js stream to check.\n   * @returns `true` if the stream has been destroyed; otherwise, `false`.\n   */\n  public static isDestroyed({ stream }: { stream: Readable | Writable | Duplex | Transform }): boolean {\n    if (!NodeStream.isStream(stream)) {\n      throw new TypeError(`NodeStream.isDestroyed: 'stream' is not a Node stream.`);\n    }\n\n    const writableState = '_writableState' in stream ? stream._writableState : undefined;\n    const readableState = stream._readableState;\n    const state = writableState || readableState;\n\n    return !!(stream.destroyed || state.destroyed);\n  }\n\n  /**\n   * Checks if a Node.js `Readable` stream is still readable.\n   *\n   * This method checks if a Node.js `Readable` stream is still in a state that allows reading from\n   * it. A stream is considered readable if it has not ended, has not been destroyed, and is not\n   * currently paused.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new Readable();\n   * const isReadable = NodeStream.isReadable({ readable: readableStream });\n   * console.log(isReadable); // Output: true or false\n   * ```\n   *\n   * @param readable - The Node.js `Readable` stream to be checked.\n   * @returns `true` if the stream is still readable; otherwise, `false`.\n   */\n  public static isReadable({ readable }: { readable: Readable }): boolean {\n    // Check if the object is a Node Readable stream.\n    if (!NodeStream.isReadableStream(readable)) {\n      return false;\n    }\n\n    // Check if the stream is still readable.\n    return (\n      readable.readable && // Is the stream readable?\n        (typeof readable._readableState.ended === 'boolean' && !readable._readableState.ended) && // Has the 'end' method been called?\n        (typeof readable._readableState.endEmitted === 'boolean' && !readable._readableState.endEmitted) && // Has the 'end' event been emitted?\n        !readable.destroyed && // Has the 'destroy' method been called?\n        !readable.isPaused() // Is the stream paused?\n    );\n  }\n\n  /**\n   * Checks if an object is a Node.js `Readable` stream.\n   *\n   * This method verifies if the provided object is a Node.js `Readable` stream by checking for\n   * specific properties and methods typical of a `Readable` stream in Node.js.\n   *\n   * @example\n   * ```ts\n   * const obj = getSomeObject();\n   * if (NodeStream.isReadableStream(obj)) {\n   *   // obj is a Node.js Readable stream\n   * }\n   * ```\n   *\n   * @param obj - The object to be checked.\n   * @returns `true` if `obj` is a Node.js `Readable` stream; otherwise, `false`.\n   */\n  static isReadableStream(obj: unknown): obj is Readable {\n    return (\n      typeof obj === 'object' &&\n        obj !== null &&\n        ('pipe' in obj && typeof obj.pipe === 'function') &&\n        ('on' in obj && typeof obj.on === 'function') &&\n        (!('_writableState' in obj) && '_readableState' in obj)\n    );\n  }\n\n  /**\n   * Checks if the provided object is a Node.js stream (`Duplex`, `Readable`, `Writable`, or `Transform`).\n   *\n   * This method checks for the presence of internal properties specific to Node.js streams:\n   * `_readableState` and `_writableState`. These properties are present in Node.js stream\n   * instances, allowing identification of the stream type.\n   *\n   * The `_readableState` property is found in `Readable` and `Duplex` streams (including\n   * `Transform` streams, which are a type of `Duplex` stream), indicating that the stream can be\n   * read from. The `_writableState` property is found in `Writable` and `Duplex` streams,\n   * indicating that the stream can be written to.\n   *\n   * @example\n   * ```ts\n   * const { Readable, Writable, Duplex, Transform } = require('stream');\n   *\n   * const readableStream = new Readable();\n   * console.log(NodeStream.isStream(readableStream)); // Output: true\n   *\n   * const writableStream = new Writable();\n   * console.log(NodeStream.isStream(writableStream)); // Output: true\n   *\n   * const duplexStream = new Duplex();\n   * console.log(NodeStream.isStream(duplexStream)); // Output: true\n   *\n   * const transformStream = new Transform();\n   * console.log(NodeStream.isStream(transformStream)); // Output: true\n   *\n   * const nonStreamObject = {};\n   * console.log(NodeStream.isStream(nonStreamObject)); // Output: false\n   * ```\n   *\n   * @remarks\n   * - This method does not differentiate between the different types of streams (Readable,\n   *   Writable, Duplex, Transform). It simply checks if the object is any kind of Node.js stream.\n   * - While this method can identify standard Node.js streams, it may not recognize custom or\n   *   third-party stream-like objects that do not inherit directly from Node.js's stream classes\n   *   or do not have these internal state properties. This is intentional as many of the methods\n   *   in this library are designed to work with standard Node.js streams.\n   *\n   * @param obj - The object to be checked for being a Node.js stream.\n   * @returns `true` if the object is a Node.js stream (`Duplex`, `Readable`, `Writable`, or `Transform`); otherwise, `false`.\n   */\n  public static isStream(obj: unknown): obj is Duplex | Readable | Writable | Transform  {\n    return (\n      typeof obj === 'object' && obj !== null &&\n      ('_readableState' in obj || '_writableState' in obj)\n    );\n  }\n\n  /**\n   * Converts a Node.js `Readable` stream to a Web `ReadableStream`.\n   *\n   * This method provides a bridge between Node.js streams and the Web Streams API by converting a\n   * Node.js `Readable` stream into a Web `ReadableStream`. It listens for 'data', 'end', and 'error'\n   * events on the Node.js stream and appropriately enqueues data, closes, or errors the Web\n   * `ReadableStream`.\n   *\n   * If the Node.js stream is already destroyed, the method returns an immediately cancelled\n   * Web `ReadableStream`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getNodeReadableStreamSomehow();\n   * const webReadableStream = NodeStream.toWebReadable({ readable: nodeReadable });\n   * ```\n   *\n   * @param readable - The Node.js `Readable` stream to be converted.\n   * @returns A Web `ReadableStream` corresponding to the provided Node.js `Readable` stream.\n   * @throws TypeError if `readable` is not a Node.js `Readable` stream.\n   * @throws Error if the Node.js `Readable` stream is already destroyed.\n   */\n  static toWebReadable({ readable }: { readable: Readable }): ReadableStream {\n    if (!NodeStream.isReadableStream(readable)) {\n      throw new TypeError(`NodeStream.toWebReadable: 'readable' is not a Node Readable stream.`);\n    }\n\n    if (NodeStream.isDestroyed({ stream: readable })) {\n      const readable = new ReadableStream();\n      readable.cancel();\n      return readable;\n    }\n\n    return new ReadableStream({\n      start(controller) {\n        readable.on('data', (chunk) => {\n          controller.enqueue(chunk);\n        });\n\n        readable.on('end', () => {\n          controller.close();\n        });\n\n        readable.on('error', (err) => {\n          controller.error(err);\n        });\n      },\n\n      cancel() {\n        readable.destroy();\n      }\n    });\n  }\n}", "function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`positive integer expected, not ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`boolean expected, not ${b}`);\n}\n\n// copied from utils\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!isBytes(b)) throw new Error('Uint8Array expected');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Uint8Array expected of length ${lengths}, not of length=${b.length}`);\n}\n\ntype Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(h: Hash) {\n  if (typeof h !== 'function' || typeof h.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.wrapConstructor');\n  number(h.outputLen);\n  number(h.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\nfunction output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nexport { number, bool, bytes, hash, exists, output };\n\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n", "// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// See utils.ts for details.\ndeclare const globalThis: Record<string, any> | undefined;\nexport const crypto =\n  typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n", "/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\nimport { bytes as abytes } from './_assert.js';\n// export { isBytes } from './_assert.js';\n// We can't reuse isBytes from _assert, because somehow this causes huge perf issues\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word: number, shift: number) => (word << (32 - shift)) | (word >>> shift);\n// The rotate left (circular left shift) operation for uint32\nexport const rotl = (word: number, shift: number) =>\n  (word << shift) | ((word >>> (32 - shift)) >>> 0);\n\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\n// The byte swap operation for uint32\nexport const byteSwap = (word: number) =>\n  ((word << 24) & 0xff000000) |\n  ((word << 8) & 0xff0000) |\n  ((word >>> 8) & 0xff00) |\n  ((word >>> 24) & 0xff);\n// Conditionally byte swap if on a big-endian platform\nexport const byteSwapIfBE = isLE ? (n: number) => n : (n: number) => byteSwap(n);\n\n// In place byte swap for Uint32Array\nexport function byteSwap32(arr: Uint32Array) {\n  for (let i = 0; i < arr.length; i++) {\n    arr[i] = byteSwap(arr[i]);\n  }\n}\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  abytes(bytes);\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 } as const;\nfunction asciiToBase16(char: number): number | undefined {\n  if (char >= asciis._0 && char <= asciis._9) return char - asciis._0;\n  if (char >= asciis._A && char <= asciis._F) return char - (asciis._A - 10);\n  if (char >= asciis._a && char <= asciis._f) return char - (asciis._a - 10);\n  return;\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2;\n  }\n  return array;\n}\n\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => {};\n\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport type Input = Uint8Array | string;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  abytes(data);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    abytes(a);\n    sum += a.length;\n  }\n  const res = new Uint8Array(sum);\n  for (let i = 0, pad = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n  /**\n   * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n   * when no options are passed.\n   * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n   * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n   * There are no guarantees for clean-up because it's impossible in JS.\n   */\n  abstract _cloneInto(to?: T): T;\n  // Safe version that clones internal state\n  clone(): T {\n    return this._cloneInto();\n  }\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n  xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n  xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\nconst toStr = {}.toString;\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n    throw new Error('Options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport type CHash = ReturnType<typeof wrapConstructor>;\n\nexport function wrapConstructor<T extends Hash<T>>(hashCons: () => Hash<T>) {\n  const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n  const tmp = hashCons();\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = () => hashCons();\n  return hashC;\n}\n\nexport function wrapConstructorWithOpts<H extends Hash<H>, T extends Object>(\n  hashCons: (opts?: T) => Hash<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\nexport function wrapXOFConstructorWithOpts<H extends HashXOF<H>, T extends Object>(\n  hashCons: (opts?: T) => HashXOF<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n", "import { exists, output } from './_assert.js';\nimport { Hash, createView, Input, toBytes } from './utils.js';\n\n// Polyfill for Safari 14\nfunction setBigUint64(view: DataView, byteOffset: number, value: bigint, isLE: boolean): void {\n  if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n  const _32n = BigInt(32);\n  const _u32_max = BigInt(0xffffffff);\n  const wh = Number((value >> _32n) & _u32_max);\n  const wl = Number(value & _u32_max);\n  const h = isLE ? 4 : 0;\n  const l = isLE ? 0 : 4;\n  view.setUint32(byteOffset + h, wh, isLE);\n  view.setUint32(byteOffset + l, wl, isLE);\n}\n\n// Choice: a ? b : c\nexport const Chi = (a: number, b: number, c: number) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nexport const Maj = (a: number, b: number, c: number) => (a & b) ^ (a & c) ^ (b & c);\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> extends Hash<T> {\n  protected abstract process(buf: DataView, offset: number): void;\n  protected abstract get(): number[];\n  protected abstract set(...args: number[]): void;\n  abstract destroy(): void;\n  protected abstract roundClean(): void;\n  // For partial updates less than block size\n  protected buffer: Uint8Array;\n  protected view: DataView;\n  protected finished = false;\n  protected length = 0;\n  protected pos = 0;\n  protected destroyed = false;\n\n  constructor(\n    readonly blockLen: number,\n    public outputLen: number,\n    readonly padOffset: number,\n    readonly isLE: boolean\n  ) {\n    super();\n    this.buffer = new Uint8Array(blockLen);\n    this.view = createView(this.buffer);\n  }\n  update(data: Input): this {\n    exists(this);\n    const { view, buffer, blockLen } = this;\n    data = toBytes(data);\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      // Fast path: we have at least one block in input, cast it to view and process\n      if (take === blockLen) {\n        const dataView = createView(data);\n        for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n        continue;\n      }\n      buffer.set(data.subarray(pos, pos + take), this.pos);\n      this.pos += take;\n      pos += take;\n      if (this.pos === blockLen) {\n        this.process(view, 0);\n        this.pos = 0;\n      }\n    }\n    this.length += data.length;\n    this.roundClean();\n    return this;\n  }\n  digestInto(out: Uint8Array) {\n    exists(this);\n    output(out, this);\n    this.finished = true;\n    // Padding\n    // We can avoid allocation of buffer for padding completely if it\n    // was previously not allocated here. But it won't change performance.\n    const { buffer, view, blockLen, isLE } = this;\n    let { pos } = this;\n    // append the bit '1' to the message\n    buffer[pos++] = 0b10000000;\n    this.buffer.subarray(pos).fill(0);\n    // we have less than padOffset left in buffer, so we cannot put length in\n    // current block, need process it and pad again\n    if (this.padOffset > blockLen - pos) {\n      this.process(view, 0);\n      pos = 0;\n    }\n    // Pad until full block byte with zeros\n    for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n    // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n    // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n    // So we just write lowest 64 bits of that value.\n    setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n    this.process(view, 0);\n    const oview = createView(out);\n    const len = this.outputLen;\n    // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n    if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n    const outLen = len / 4;\n    const state = this.get();\n    if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n    for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n  }\n  digest() {\n    const { buffer, outputLen } = this;\n    this.digestInto(buffer);\n    const res = buffer.slice(0, outputLen);\n    this.destroy();\n    return res;\n  }\n  _cloneInto(to?: T): T {\n    to ||= new (this.constructor as any)() as T;\n    to.set(...this.get());\n    const { blockLen, buffer, length, finished, destroyed, pos } = this;\n    to.length = length;\n    to.pos = pos;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    if (length % blockLen) to.buffer.set(buffer);\n    return to;\n  }\n}\n", "import { HashMD, Chi, Maj } from './_md.js';\nimport { rotr, wrapConstructor } from './utils.js';\n\n// SHA2-256 need to try 2^128 hashes to execute birthday attack.\n// BTC network is doing 2^67 hashes/sec as per early 2023.\n\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ new Uint32Array([\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n// Initial state:\n// first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19\n// prettier-ignore\nconst SHA256_IV = /* @__PURE__ */ new Uint32Array([\n  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends HashMD<SHA256> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  A = SHA256_IV[0] | 0;\n  B = SHA256_IV[1] | 0;\n  C = SHA256_IV[2] | 0;\n  D = SHA256_IV[3] | 0;\n  E = SHA256_IV[4] | 0;\n  F = SHA256_IV[5] | 0;\n  G = SHA256_IV[6] | 0;\n  H = SHA256_IV[7] | 0;\n\n  constructor() {\n    super(64, 32, 8, false);\n  }\n  protected get(): [number, number, number, number, number, number, number, number] {\n    const { A, B, C, D, E, F, G, H } = this;\n    return [A, B, C, D, E, F, G, H];\n  }\n  // prettier-ignore\n  protected set(\n    A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n  ) {\n    this.A = A | 0;\n    this.B = B | 0;\n    this.C = C | 0;\n    this.D = D | 0;\n    this.E = E | 0;\n    this.F = F | 0;\n    this.G = G | 0;\n    this.H = H | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n    for (let i = 16; i < 64; i++) {\n      const W15 = SHA256_W[i - 15];\n      const W2 = SHA256_W[i - 2];\n      const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n      const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n      SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n    }\n    // Compression function main loop, 64 rounds\n    let { A, B, C, D, E, F, G, H } = this;\n    for (let i = 0; i < 64; i++) {\n      const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n      const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n      const T2 = (sigma0 + Maj(A, B, C)) | 0;\n      H = G;\n      G = F;\n      F = E;\n      E = (D + T1) | 0;\n      D = C;\n      C = B;\n      B = A;\n      A = (T1 + T2) | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    A = (A + this.A) | 0;\n    B = (B + this.B) | 0;\n    C = (C + this.C) | 0;\n    D = (D + this.D) | 0;\n    E = (E + this.E) | 0;\n    F = (F + this.F) | 0;\n    G = (G + this.G) | 0;\n    H = (H + this.H) | 0;\n    this.set(A, B, C, D, E, F, G, H);\n  }\n  protected roundClean() {\n    SHA256_W.fill(0);\n  }\n  destroy() {\n    this.set(0, 0, 0, 0, 0, 0, 0, 0);\n    this.buffer.fill(0);\n  }\n}\n// Constants from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\nclass SHA224 extends SHA256 {\n  A = 0xc1059ed8 | 0;\n  B = 0x367cd507 | 0;\n  C = 0x3070dd17 | 0;\n  D = 0xf70e5939 | 0;\n  E = 0xffc00b31 | 0;\n  F = 0x68581511 | 0;\n  G = 0x64f98fa7 | 0;\n  H = 0xbefa4fa4 | 0;\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = /* @__PURE__ */ wrapConstructor(() => new SHA256());\nexport const sha224 = /* @__PURE__ */ wrapConstructor(() => new SHA224());\n", "import { sha256 } from '@noble/hashes/sha256';\n\n/**\n * The `Sha256` class provides an interface for generating SHA-256 hash digests.\n *\n * This class utilizes the '@noble/hashes/sha256' function to generate hash digests\n * of the provided data. The SHA-256 algorithm is widely used in cryptographic\n * applications to produce a fixed-size 256-bit (32-byte) hash.\n *\n * The methods of this class are asynchronous and return Promises. They use the Uint8Array\n * type for input data and the resulting digest, ensuring a consistent interface\n * for binary data processing.\n *\n * @example\n * ```ts\n * const data = new Uint8Array([...]);\n * const hash = await Sha256.digest({ data });\n * ```\n */\nexport class Sha256 {\n  /**\n   * Generates a SHA-256 hash digest for the given data.\n   *\n   * @remarks\n   * This method produces a hash digest using the SHA-256 algorithm. The resultant digest\n   * is deterministic, meaning the same data will always produce the same hash, but\n   * is computationally infeasible to regenerate the original data from the hash.\n   *\n   * @example\n   * ```ts\n   * const data = new Uint8Array([...]);\n   * const hash = await Sha256.digest({ data });\n   * ```\n   *\n   * @param params - The parameters for the hashing operation.\n   * @param params.data - The data to hash, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the SHA-256 hash digest of the provided data as a Uint8Array.\n   */\n  public static async digest({ data }: {\n    data: Uint8Array;\n  }): Promise<Uint8Array> {\n    const hash = sha256(data);\n\n    return hash;\n  }\n}", "/**\n * Base class for all cryptographic algorithm implementations.\n */\nexport abstract class CryptoAlgorithm {}", "import type { Hasher } from '../types/hasher.js';\nimport type { DigestParams } from '../types/params-direct.js';\n\nimport { Sha256 } from '../primitives/sha256.js';\nimport { CryptoAlgorithm } from './crypto-algorithm.js';\n\n/**\n * The `Sha2DigestParams` interface defines the algorithm-specific parameters that should be\n * passed into the `digest()` method when using the SHA-2 algorithm.\n */\nexport interface Sha2DigestParams extends DigestParams {\n  /**\n   * A string defining the name of hash function to use. The value must be one of the following:\n   * - `\"SHA-256\"`: Generates a 256-bit digest.\n   */\n  algorithm: 'SHA-256';\n}\n\n/**\n * The `Sha2Algorithm` class is an implementation of the {@link Hasher | `Hasher`} interface for the\n * SHA-2 family of cryptographic hash functions. The `digest` method takes the algorithm identifier\n * of the hash function and arbitrary data as input and returns the hash digest of the data.\n *\n * This class is typically accessed through implementations that extend the\n * {@link CryptoApi | `CryptoApi`} interface.\n */\nexport class Sha2Algorithm extends CryptoAlgorithm\n  implements Hasher<Sha2DigestParams> {\n\n  /**\n   * Generates a hash digest of the provided data.\n   *\n   * @remarks\n   * A digest is the output of the hash function. It's a fixed-size string of bytes\n   * that uniquely represents the data input into the hash function. The digest is often used for\n   * data integrity checks, as any alteration in the input data results in a significantly\n   * different digest.\n   *\n   * It takes the algorithm identifier of the hash function and data to digest as input and returns\n   * the digest of the data.\n   *\n   * @example\n   * ```ts\n   * const sha2 = new Sha2Algorithm();\n   * const data = new TextEncoder().encode('Messsage');\n   * const digest = await sha2.digest({ data });\n   * ```\n   *\n   * @param params - The parameters for the digest operation.\n   * @param params.algorithm - The name of hash function to use.\n   * @param params.data - The data to digest.\n   *\n   * @returns A Promise which will be fulfilled with the hash digest.\n   */\n  public async digest({ algorithm, data }: Sha2DigestParams): Promise<Uint8Array> {\n    switch (algorithm) {\n\n      case 'SHA-256': {\n        const hash = await Sha256.digest({ data });\n        return hash;\n      }\n    }\n\n  }\n}", "function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`Wrong positive integer: ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`Expected boolean, not ${b}`);\n}\n\n// copied from utils\nfunction isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!isBytes(b)) throw new Error('Expected Uint8Array');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\n\ntype Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(hash: Hash) {\n  if (typeof hash !== 'function' || typeof hash.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.wrapConstructor');\n  number(hash.outputLen);\n  number(hash.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\nfunction output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nexport { number, bool, bytes, hash, exists, output };\n\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n", "// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// See utils.ts for details.\ndeclare const globalThis: Record<string, any> | undefined;\nexport const crypto =\n  typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n", "/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\nfunction isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word: number, shift: number) => (word << (32 - shift)) | (word >>> shift);\n\n// big-endian hardware is rare. Just in case someone still decides to run hashes:\n// early-throw an error because we don't support BE yet.\n// Other libraries would silently corrupt the data instead of throwing an error,\n// when they don't support it.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE) throw new Error('Non little-endian hardware is not supported');\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!isBytes(bytes)) throw new Error('Uint8Array expected');\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 } as const;\nfunction asciiToBase16(char: number): number | undefined {\n  if (char >= asciis._0 && char <= asciis._9) return char - asciis._0;\n  if (char >= asciis._A && char <= asciis._F) return char - (asciis._A - 10);\n  if (char >= asciis._a && char <= asciis._f) return char - (asciis._a - 10);\n  return;\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2;\n  }\n  return array;\n}\n\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => {};\n\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport type Input = Uint8Array | string;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  if (!isBytes(data)) throw new Error(`expected Uint8Array, got ${typeof data}`);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    if (!isBytes(a)) throw new Error('Uint8Array expected');\n    sum += a.length;\n  }\n  const res = new Uint8Array(sum);\n  for (let i = 0, pad = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n  /**\n   * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n   * when no options are passed.\n   * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n   * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n   * There are no guarantees for clean-up because it's impossible in JS.\n   */\n  abstract _cloneInto(to?: T): T;\n  // Safe version that clones internal state\n  clone(): T {\n    return this._cloneInto();\n  }\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n  xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n  xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\nconst toStr = {}.toString;\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n    throw new Error('Options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport type CHash = ReturnType<typeof wrapConstructor>;\n\nexport function wrapConstructor<T extends Hash<T>>(hashCons: () => Hash<T>) {\n  const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n  const tmp = hashCons();\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = () => hashCons();\n  return hashC;\n}\n\nexport function wrapConstructorWithOpts<H extends Hash<H>, T extends Object>(\n  hashCons: (opts?: T) => Hash<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\nexport function wrapXOFConstructorWithOpts<H extends HashXOF<H>, T extends Object>(\n  hashCons: (opts?: T) => HashXOF<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n", "import { exists, output } from './_assert.js';\nimport { Hash, createView, Input, toBytes } from './utils.js';\n\n// Polyfill for Safari 14\nfunction setBigUint64(view: DataView, byteOffset: number, value: bigint, isLE: boolean): void {\n  if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n  const _32n = BigInt(32);\n  const _u32_max = BigInt(0xffffffff);\n  const wh = Number((value >> _32n) & _u32_max);\n  const wl = Number(value & _u32_max);\n  const h = isLE ? 4 : 0;\n  const l = isLE ? 0 : 4;\n  view.setUint32(byteOffset + h, wh, isLE);\n  view.setUint32(byteOffset + l, wl, isLE);\n}\n\n// Base SHA2 class (RFC 6234)\nexport abstract class SHA2<T extends SHA2<T>> extends Hash<T> {\n  protected abstract process(buf: DataView, offset: number): void;\n  protected abstract get(): number[];\n  protected abstract set(...args: number[]): void;\n  abstract destroy(): void;\n  protected abstract roundClean(): void;\n  // For partial updates less than block size\n  protected buffer: Uint8Array;\n  protected view: DataView;\n  protected finished = false;\n  protected length = 0;\n  protected pos = 0;\n  protected destroyed = false;\n\n  constructor(\n    readonly blockLen: number,\n    public outputLen: number,\n    readonly padOffset: number,\n    readonly isLE: boolean\n  ) {\n    super();\n    this.buffer = new Uint8Array(blockLen);\n    this.view = createView(this.buffer);\n  }\n  update(data: Input): this {\n    exists(this);\n    const { view, buffer, blockLen } = this;\n    data = toBytes(data);\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      // Fast path: we have at least one block in input, cast it to view and process\n      if (take === blockLen) {\n        const dataView = createView(data);\n        for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n        continue;\n      }\n      buffer.set(data.subarray(pos, pos + take), this.pos);\n      this.pos += take;\n      pos += take;\n      if (this.pos === blockLen) {\n        this.process(view, 0);\n        this.pos = 0;\n      }\n    }\n    this.length += data.length;\n    this.roundClean();\n    return this;\n  }\n  digestInto(out: Uint8Array) {\n    exists(this);\n    output(out, this);\n    this.finished = true;\n    // Padding\n    // We can avoid allocation of buffer for padding completely if it\n    // was previously not allocated here. But it won't change performance.\n    const { buffer, view, blockLen, isLE } = this;\n    let { pos } = this;\n    // append the bit '1' to the message\n    buffer[pos++] = 0b10000000;\n    this.buffer.subarray(pos).fill(0);\n    // we have less than padOffset left in buffer, so we cannot put length in current block, need process it and pad again\n    if (this.padOffset > blockLen - pos) {\n      this.process(view, 0);\n      pos = 0;\n    }\n    // Pad until full block byte with zeros\n    for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n    // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n    // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n    // So we just write lowest 64 bits of that value.\n    setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n    this.process(view, 0);\n    const oview = createView(out);\n    const len = this.outputLen;\n    // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n    if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n    const outLen = len / 4;\n    const state = this.get();\n    if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n    for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n  }\n  digest() {\n    const { buffer, outputLen } = this;\n    this.digestInto(buffer);\n    const res = buffer.slice(0, outputLen);\n    this.destroy();\n    return res;\n  }\n  _cloneInto(to?: T): T {\n    to ||= new (this.constructor as any)() as T;\n    to.set(...this.get());\n    const { blockLen, buffer, length, finished, destroyed, pos } = this;\n    to.length = length;\n    to.pos = pos;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    if (length % blockLen) to.buffer.set(buffer);\n    return to;\n  }\n}\n", "import { SHA2 } from './_sha2.js';\nimport { rotr, wrapConstructor } from './utils.js';\n\n// SHA2-256 need to try 2^128 hashes to execute birthday attack.\n// BTC network is doing 2^67 hashes/sec as per early 2023.\n\n// Choice: a ? b : c\nconst Chi = (a: number, b: number, c: number) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a: number, b: number, c: number) => (a & b) ^ (a & c) ^ (b & c);\n\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */new Uint32Array([\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n// Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n// prettier-ignore\nconst IV = /* @__PURE__ */new Uint32Array([\n  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends SHA2<SHA256> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  A = IV[0] | 0;\n  B = IV[1] | 0;\n  C = IV[2] | 0;\n  D = IV[3] | 0;\n  E = IV[4] | 0;\n  F = IV[5] | 0;\n  G = IV[6] | 0;\n  H = IV[7] | 0;\n\n  constructor() {\n    super(64, 32, 8, false);\n  }\n  protected get(): [number, number, number, number, number, number, number, number] {\n    const { A, B, C, D, E, F, G, H } = this;\n    return [A, B, C, D, E, F, G, H];\n  }\n  // prettier-ignore\n  protected set(\n    A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n  ) {\n    this.A = A | 0;\n    this.B = B | 0;\n    this.C = C | 0;\n    this.D = D | 0;\n    this.E = E | 0;\n    this.F = F | 0;\n    this.G = G | 0;\n    this.H = H | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n    for (let i = 16; i < 64; i++) {\n      const W15 = SHA256_W[i - 15];\n      const W2 = SHA256_W[i - 2];\n      const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n      const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n      SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n    }\n    // Compression function main loop, 64 rounds\n    let { A, B, C, D, E, F, G, H } = this;\n    for (let i = 0; i < 64; i++) {\n      const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n      const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n      const T2 = (sigma0 + Maj(A, B, C)) | 0;\n      H = G;\n      G = F;\n      F = E;\n      E = (D + T1) | 0;\n      D = C;\n      C = B;\n      B = A;\n      A = (T1 + T2) | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    A = (A + this.A) | 0;\n    B = (B + this.B) | 0;\n    C = (C + this.C) | 0;\n    D = (D + this.D) | 0;\n    E = (E + this.E) | 0;\n    F = (F + this.F) | 0;\n    G = (G + this.G) | 0;\n    H = (H + this.H) | 0;\n    this.set(A, B, C, D, E, F, G, H);\n  }\n  protected roundClean() {\n    SHA256_W.fill(0);\n  }\n  destroy() {\n    this.set(0, 0, 0, 0, 0, 0, 0, 0);\n    this.buffer.fill(0);\n  }\n}\n// Constants from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\nclass SHA224 extends SHA256 {\n  A = 0xc1059ed8 | 0;\n  B = 0x367cd507 | 0;\n  C = 0x3070dd17 | 0;\n  D = 0xf70e5939 | 0;\n  E = 0xffc00b31 | 0;\n  F = 0x68581511 | 0;\n  G = 0x64f98fa7 | 0;\n  H = 0xbefa4fa4 | 0;\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = /* @__PURE__ */ wrapConstructor(() => new SHA256());\nexport const sha224 = /* @__PURE__ */ wrapConstructor(() => new SHA224());\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// 100 lines of code in the file are duplicated from noble-hashes (utils).\n// This is OK: `abstract` directory does not use noble-hashes.\n// User may opt-in into using different hashing library. This way, noble-hashes\n// won't be included into their bundle.\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nexport type Hex = Uint8Array | string; // hex strings are accepted for simplicity\nexport type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve\nexport type CHash = {\n  (message: Uint8Array | string): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array | string) => Uint8Array;\n\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!isBytes(bytes)) throw new Error('Uint8Array expected');\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\nexport function numberToHexUnpadded(num: number | bigint): string {\n  const hex = num.toString(16);\n  return hex.length & 1 ? `0${hex}` : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  // Big Endian\n  return BigInt(hex === '' ? '0' : `0x${hex}`);\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 } as const;\nfunction asciiToBase16(char: number): number | undefined {\n  if (char >= asciis._0 && char <= asciis._9) return char - asciis._0;\n  if (char >= asciis._A && char <= asciis._F) return char - (asciis._A - 10);\n  if (char >= asciis._a && char <= asciis._f) return char - (asciis._a - 10);\n  return;\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2;\n  }\n  return array;\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n  return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n  if (!isBytes(bytes)) throw new Error('Uint8Array expected');\n  return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n  return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n  return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n  return hexToBytes(numberToHexUnpadded(n));\n}\n\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'private key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title: string, hex: Hex, expectedLength?: number): Uint8Array {\n  let res: Uint8Array;\n  if (typeof hex === 'string') {\n    try {\n      res = hexToBytes(hex);\n    } catch (e) {\n      throw new Error(`${title} must be valid hex string, got \"${hex}\". Cause: ${e}`);\n    }\n  } else if (isBytes(hex)) {\n    // Uint8Array.from() instead of hash.slice() because node.js Buffer\n    // is instance of Uint8Array, and its slice() creates **mutable** copy\n    res = Uint8Array.from(hex);\n  } else {\n    throw new Error(`${title} must be hex string or Uint8Array`);\n  }\n  const len = res.length;\n  if (typeof expectedLength === 'number' && len !== expectedLength)\n    throw new Error(`${title} expected ${expectedLength} bytes, got ${len}`);\n  return res;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    if (!isBytes(a)) throw new Error('Uint8Array expected');\n    sum += a.length;\n  }\n  let res = new Uint8Array(sum);\n  let pad = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a: Uint8Array, b: Uint8Array) {\n  if (a.length !== b.length) return false;\n  let diff = 0;\n  for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n  return diff === 0;\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n */\nexport function bitLen(n: bigint) {\n  let len;\n  for (len = 0; n > _0n; n >>= _1n, len += 1);\n  return len;\n}\n\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n: bigint, pos: number) {\n  return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport const bitSet = (n: bigint, pos: number, value: boolean) => {\n  return n | ((value ? _1n : _0n) << BigInt(pos));\n};\n\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n: number) => (_2n << BigInt(n - 1)) - _1n;\n\n// DRBG\n\nconst u8n = (data?: any) => new Uint8Array(data); // creates Uint8Array\nconst u8fr = (arr: any) => Uint8Array.from(arr); // another shortcut\ntype Pred<T> = (v: Uint8Array) => T | undefined;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n *   const drbg = createHmacDRBG<Key>(32, 32, hmac);\n *   drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n  hashLen: number,\n  qByteLen: number,\n  hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n  if (typeof hashLen !== 'number' || hashLen < 2) throw new Error('hashLen must be a number');\n  if (typeof qByteLen !== 'number' || qByteLen < 2) throw new Error('qByteLen must be a number');\n  if (typeof hmacFn !== 'function') throw new Error('hmacFn must be a function');\n  // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n  let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n  let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n  let i = 0; // Iterations counter, will throw when over 1000\n  const reset = () => {\n    v.fill(1);\n    k.fill(0);\n    i = 0;\n  };\n  const h = (...b: Uint8Array[]) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n  const reseed = (seed = u8n()) => {\n    // HMAC-DRBG reseed() function. Steps D-G\n    k = h(u8fr([0x00]), seed); // k = hmac(k || v || 0x00 || seed)\n    v = h(); // v = hmac(k || v)\n    if (seed.length === 0) return;\n    k = h(u8fr([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n    v = h(); // v = hmac(k || v)\n  };\n  const gen = () => {\n    // HMAC-DRBG generate() function\n    if (i++ >= 1000) throw new Error('drbg: tried 1000 values');\n    let len = 0;\n    const out: Uint8Array[] = [];\n    while (len < qByteLen) {\n      v = h();\n      const sl = v.slice();\n      out.push(sl);\n      len += v.length;\n    }\n    return concatBytes(...out);\n  };\n  const genUntil = (seed: Uint8Array, pred: Pred<T>): T => {\n    reset();\n    reseed(seed); // Steps D-G\n    let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n    while (!(res = pred(gen()))) reseed();\n    reset();\n    return res;\n  };\n  return genUntil;\n}\n\n// Validating curves and fields\n\nconst validatorFns = {\n  bigint: (val: any) => typeof val === 'bigint',\n  function: (val: any) => typeof val === 'function',\n  boolean: (val: any) => typeof val === 'boolean',\n  string: (val: any) => typeof val === 'string',\n  stringOrUint8Array: (val: any) => typeof val === 'string' || isBytes(val),\n  isSafeInteger: (val: any) => Number.isSafeInteger(val),\n  array: (val: any) => Array.isArray(val),\n  field: (val: any, object: any) => (object as any).Fp.isValid(val),\n  hash: (val: any) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n} as const;\ntype Validator = keyof typeof validatorFns;\ntype ValMap<T extends Record<string, any>> = { [K in keyof T]?: Validator };\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\n\nexport function validateObject<T extends Record<string, any>>(\n  object: T,\n  validators: ValMap<T>,\n  optValidators: ValMap<T> = {}\n) {\n  const checkField = (fieldName: keyof T, type: Validator, isOptional: boolean) => {\n    const checkVal = validatorFns[type];\n    if (typeof checkVal !== 'function')\n      throw new Error(`Invalid validator \"${type}\", expected function`);\n\n    const val = object[fieldName as keyof typeof object];\n    if (isOptional && val === undefined) return;\n    if (!checkVal(val, object)) {\n      throw new Error(\n        `Invalid param ${String(fieldName)}=${val} (${typeof val}), expected ${type}`\n      );\n    }\n  };\n  for (const [fieldName, type] of Object.entries(validators)) checkField(fieldName, type!, false);\n  for (const [fieldName, type] of Object.entries(optValidators)) checkField(fieldName, type!, true);\n  return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Utilities for modular arithmetics and finite fields\nimport {\n  bitMask,\n  numberToBytesBE,\n  numberToBytesLE,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  ensureBytes,\n  validateObject,\n} from './utils.js';\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _4n = BigInt(4), _5n = BigInt(5), _8n = BigInt(8);\n// prettier-ignore\nconst _9n = BigInt(9), _16n = BigInt(16);\n\n// Calculates a modulo b\nexport function mod(a: bigint, b: bigint): bigint {\n  const result = a % b;\n  return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\n// TODO: use field version && remove\nexport function pow(num: bigint, power: bigint, modulo: bigint): bigint {\n  if (modulo <= _0n || power < _0n) throw new Error('Expected power/modulo > 0');\n  if (modulo === _1n) return _0n;\n  let res = _1n;\n  while (power > _0n) {\n    if (power & _1n) res = (res * num) % modulo;\n    num = (num * num) % modulo;\n    power >>= _1n;\n  }\n  return res;\n}\n\n// Does x ^ (2 ^ power) mod p. pow2(30, 4) == 30 ^ (2 ^ 4)\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n  let res = x;\n  while (power-- > _0n) {\n    res *= res;\n    res %= modulo;\n  }\n  return res;\n}\n\n// Inverses number over modulo\nexport function invert(number: bigint, modulo: bigint): bigint {\n  if (number === _0n || modulo <= _0n) {\n    throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n  }\n  // Euclidean GCD https://brilliant.org/wiki/extended-euclidean-algorithm/\n  // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n  let a = mod(number, modulo);\n  let b = modulo;\n  // prettier-ignore\n  let x = _0n, y = _1n, u = _1n, v = _0n;\n  while (a !== _0n) {\n    // JIT applies optimization if those two lines follow each other\n    const q = b / a;\n    const r = b % a;\n    const m = x - u * q;\n    const n = y - v * q;\n    // prettier-ignore\n    b = a, a = r, x = u, y = v, u = m, v = n;\n  }\n  const gcd = b;\n  if (gcd !== _1n) throw new Error('invert: does not exist');\n  return mod(x, modulo);\n}\n\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * Will start an infinite loop if field order P is not prime.\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P: bigint) {\n  // Legendre constant: used to calculate Legendre symbol (a | p),\n  // which denotes the value of a^((p-1)/2) (mod p).\n  // (a | p) \u2261 1    if a is a square (mod p)\n  // (a | p) \u2261 -1   if a is not a square (mod p)\n  // (a | p) \u2261 0    if a \u2261 0 (mod p)\n  const legendreC = (P - _1n) / _2n;\n\n  let Q: bigint, S: number, Z: bigint;\n  // Step 1: By factoring out powers of 2 from p - 1,\n  // find q and s such that p - 1 = q*(2^s) with q odd\n  for (Q = P - _1n, S = 0; Q % _2n === _0n; Q /= _2n, S++);\n\n  // Step 2: Select a non-square z such that (z | p) \u2261 -1 and set c \u2261 zq\n  for (Z = _2n; Z < P && pow(Z, legendreC, P) !== P - _1n; Z++);\n\n  // Fast-path\n  if (S === 1) {\n    const p1div4 = (P + _1n) / _4n;\n    return function tonelliFast<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Slow-path\n  const Q1div2 = (Q + _1n) / _2n;\n  return function tonelliSlow<T>(Fp: IField<T>, n: T): T {\n    // Step 0: Check that n is indeed a square: (n | p) should not be \u2261 -1\n    if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE)) throw new Error('Cannot find square root');\n    let r = S;\n    // TODO: will fail at Fp2/etc\n    let g = Fp.pow(Fp.mul(Fp.ONE, Z), Q); // will update both x and b\n    let x = Fp.pow(n, Q1div2); // first guess at the square root\n    let b = Fp.pow(n, Q); // first guess at the fudge factor\n\n    while (!Fp.eql(b, Fp.ONE)) {\n      if (Fp.eql(b, Fp.ZERO)) return Fp.ZERO; // https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm (4. If t = 0, return r = 0)\n      // Find m such b^(2^m)==1\n      let m = 1;\n      for (let t2 = Fp.sqr(b); m < r; m++) {\n        if (Fp.eql(t2, Fp.ONE)) break;\n        t2 = Fp.sqr(t2); // t2 *= t2\n      }\n      // NOTE: r-m-1 can be bigger than 32, need to convert to bigint before shift, otherwise there will be overflow\n      const ge = Fp.pow(g, _1n << BigInt(r - m - 1)); // ge = 2^(r-m-1)\n      g = Fp.sqr(ge); // g = ge * ge\n      x = Fp.mul(x, ge); // x *= ge\n      b = Fp.mul(b, g); // b *= g\n      r = m;\n    }\n    return x;\n  };\n}\n\nexport function FpSqrt(P: bigint) {\n  // NOTE: different algorithms can give different roots, it is up to user to decide which one they want.\n  // For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n\n  // P \u2261 3 (mod 4)\n  // \u221An = n^((P+1)/4)\n  if (P % _4n === _3n) {\n    // Not all roots possible!\n    // const ORDER =\n    //   0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabn;\n    // const NUM = 72057594037927816n;\n    const p1div4 = (P + _1n) / _4n;\n    return function sqrt3mod4<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      // Throw if root**2 != n\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Atkin algorithm for q \u2261 5 (mod 8), https://eprint.iacr.org/2012/685.pdf (page 10)\n  if (P % _8n === _5n) {\n    const c1 = (P - _5n) / _8n;\n    return function sqrt5mod8<T>(Fp: IField<T>, n: T) {\n      const n2 = Fp.mul(n, _2n);\n      const v = Fp.pow(n2, c1);\n      const nv = Fp.mul(n, v);\n      const i = Fp.mul(Fp.mul(nv, _2n), v);\n      const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // P \u2261 9 (mod 16)\n  if (P % _16n === _9n) {\n    // NOTE: tonelli is too slow for bls-Fp2 calculations even on start\n    // Means we cannot use sqrt for constants at all!\n    //\n    // const c1 = Fp.sqrt(Fp.negate(Fp.ONE)); //  1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n    // const c2 = Fp.sqrt(c1);                //  2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n    // const c3 = Fp.sqrt(Fp.negate(c1));     //  3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n    // const c4 = (P + _7n) / _16n;           //  4. c4 = (q + 7) / 16        # Integer arithmetic\n    // sqrt = (x) => {\n    //   let tv1 = Fp.pow(x, c4);             //  1. tv1 = x^c4\n    //   let tv2 = Fp.mul(c1, tv1);           //  2. tv2 = c1 * tv1\n    //   const tv3 = Fp.mul(c2, tv1);         //  3. tv3 = c2 * tv1\n    //   let tv4 = Fp.mul(c3, tv1);           //  4. tv4 = c3 * tv1\n    //   const e1 = Fp.equals(Fp.square(tv2), x); //  5.  e1 = (tv2^2) == x\n    //   const e2 = Fp.equals(Fp.square(tv3), x); //  6.  e2 = (tv3^2) == x\n    //   tv1 = Fp.cmov(tv1, tv2, e1); //  7. tv1 = CMOV(tv1, tv2, e1)  # Select tv2 if (tv2^2) == x\n    //   tv2 = Fp.cmov(tv4, tv3, e2); //  8. tv2 = CMOV(tv4, tv3, e2)  # Select tv3 if (tv3^2) == x\n    //   const e3 = Fp.equals(Fp.square(tv2), x); //  9.  e3 = (tv2^2) == x\n    //   return Fp.cmov(tv1, tv2, e3); //  10.  z = CMOV(tv1, tv2, e3)  # Select the sqrt from tv1 and tv2\n    // }\n  }\n\n  // Other cases: Tonelli-Shanks algorithm\n  return tonelliShanks(P);\n}\n\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num: bigint, modulo: bigint) => (mod(num, modulo) & _1n) === _1n;\n\n// Field is not always over prime: for example, Fp2 has ORDER(q)=p^m\nexport interface IField<T> {\n  ORDER: bigint;\n  BYTES: number;\n  BITS: number;\n  MASK: bigint;\n  ZERO: T;\n  ONE: T;\n  // 1-arg\n  create: (num: T) => T;\n  isValid: (num: T) => boolean;\n  is0: (num: T) => boolean;\n  neg(num: T): T;\n  inv(num: T): T;\n  sqrt(num: T): T;\n  sqr(num: T): T;\n  // 2-args\n  eql(lhs: T, rhs: T): boolean;\n  add(lhs: T, rhs: T): T;\n  sub(lhs: T, rhs: T): T;\n  mul(lhs: T, rhs: T | bigint): T;\n  pow(lhs: T, power: bigint): T;\n  div(lhs: T, rhs: T | bigint): T;\n  // N for NonNormalized (for now)\n  addN(lhs: T, rhs: T): T;\n  subN(lhs: T, rhs: T): T;\n  mulN(lhs: T, rhs: T | bigint): T;\n  sqrN(num: T): T;\n\n  // Optional\n  // Should be same as sgn0 function in\n  // [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#section-4.1).\n  // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.\n  isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2\n  // legendre?(num: T): T;\n  pow(lhs: T, power: bigint): T;\n  invertBatch: (lst: T[]) => T[];\n  toBytes(num: T): Uint8Array;\n  fromBytes(bytes: Uint8Array): T;\n  // If c is False, CMOV returns a, otherwise it returns b.\n  cmov(a: T, b: T, c: boolean): T;\n}\n// prettier-ignore\nconst FIELD_FIELDS = [\n  'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n  'eql', 'add', 'sub', 'mul', 'pow', 'div',\n  'addN', 'subN', 'mulN', 'sqrN'\n] as const;\nexport function validateField<T>(field: IField<T>) {\n  const initial = {\n    ORDER: 'bigint',\n    MASK: 'bigint',\n    BYTES: 'isSafeInteger',\n    BITS: 'isSafeInteger',\n  } as Record<string, string>;\n  const opts = FIELD_FIELDS.reduce((map, val: string) => {\n    map[val] = 'function';\n    return map;\n  }, initial);\n  return validateObject(field, opts);\n}\n\n// Generic field functions\n\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nexport function FpPow<T>(f: IField<T>, num: T, power: bigint): T {\n  // Should have same speed as pow for bigints\n  // TODO: benchmark!\n  if (power < _0n) throw new Error('Expected power > 0');\n  if (power === _0n) return f.ONE;\n  if (power === _1n) return num;\n  let p = f.ONE;\n  let d = num;\n  while (power > _0n) {\n    if (power & _1n) p = f.mul(p, d);\n    d = f.sqr(d);\n    power >>= _1n;\n  }\n  return p;\n}\n\n/**\n * Efficiently invert an array of Field elements.\n * `inv(0)` will return `undefined` here: make sure to throw an error.\n */\nexport function FpInvertBatch<T>(f: IField<T>, nums: T[]): T[] {\n  const tmp = new Array(nums.length);\n  // Walk from first to last, multiply them by each other MOD p\n  const lastMultiplied = nums.reduce((acc, num, i) => {\n    if (f.is0(num)) return acc;\n    tmp[i] = acc;\n    return f.mul(acc, num);\n  }, f.ONE);\n  // Invert last element\n  const inverted = f.inv(lastMultiplied);\n  // Walk from last to first, multiply them by inverted each other MOD p\n  nums.reduceRight((acc, num, i) => {\n    if (f.is0(num)) return acc;\n    tmp[i] = f.mul(acc, tmp[i]);\n    return f.mul(acc, num);\n  }, inverted);\n  return tmp;\n}\n\nexport function FpDiv<T>(f: IField<T>, lhs: T, rhs: T | bigint): T {\n  return f.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, f.ORDER) : f.inv(rhs));\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare<T>(f: IField<T>) {\n  const legendreConst = (f.ORDER - _1n) / _2n; // Integer arithmetic\n  return (x: T): boolean => {\n    const p = f.pow(x, legendreConst);\n    return f.eql(p, f.ZERO) || f.eql(p, f.ONE);\n  };\n}\n\n// CURVE.n lengths\nexport function nLength(n: bigint, nBitLength?: number) {\n  // Bit size, byte size of CURVE.n\n  const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n  const nByteLength = Math.ceil(_nBitLength / 8);\n  return { nBitLength: _nBitLength, nByteLength };\n}\n\ntype FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;\n/**\n * Initializes a finite field over prime. **Non-primes are not supported.**\n * Do not init in loop: slow. Very fragile: always run a benchmark on a change.\n * Major performance optimizations:\n * * a) denormalized operations like mulN instead of mul\n * * b) same object shape: never add or remove keys\n * * c) Object.freeze\n * @param ORDER prime positive bigint\n * @param bitLen how many bits the field consumes\n * @param isLE (def: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(\n  ORDER: bigint,\n  bitLen?: number,\n  isLE = false,\n  redef: Partial<IField<bigint>> = {}\n): Readonly<FpField> {\n  if (ORDER <= _0n) throw new Error(`Expected Field ORDER > 0, got ${ORDER}`);\n  const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n  if (BYTES > 2048) throw new Error('Field lengths over 2048 bytes are not supported');\n  const sqrtP = FpSqrt(ORDER);\n  const f: Readonly<FpField> = Object.freeze({\n    ORDER,\n    BITS,\n    BYTES,\n    MASK: bitMask(BITS),\n    ZERO: _0n,\n    ONE: _1n,\n    create: (num) => mod(num, ORDER),\n    isValid: (num) => {\n      if (typeof num !== 'bigint')\n        throw new Error(`Invalid field element: expected bigint, got ${typeof num}`);\n      return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n    },\n    is0: (num) => num === _0n,\n    isOdd: (num) => (num & _1n) === _1n,\n    neg: (num) => mod(-num, ORDER),\n    eql: (lhs, rhs) => lhs === rhs,\n\n    sqr: (num) => mod(num * num, ORDER),\n    add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n    sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n    mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n    pow: (num, power) => FpPow(f, num, power),\n    div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n\n    // Same as above, but doesn't normalize\n    sqrN: (num) => num * num,\n    addN: (lhs, rhs) => lhs + rhs,\n    subN: (lhs, rhs) => lhs - rhs,\n    mulN: (lhs, rhs) => lhs * rhs,\n\n    inv: (num) => invert(num, ORDER),\n    sqrt: redef.sqrt || ((n) => sqrtP(f, n)),\n    invertBatch: (lst) => FpInvertBatch(f, lst),\n    // TODO: do we really need constant cmov?\n    // We don't have const-time bigints anyway, so probably will be not very useful\n    cmov: (a, b, c) => (c ? b : a),\n    toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n    fromBytes: (bytes) => {\n      if (bytes.length !== BYTES)\n        throw new Error(`Fp.fromBytes: expected ${BYTES}, got ${bytes.length}`);\n      return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n    },\n  } as FpField);\n  return Object.freeze(f);\n}\n\nexport function FpSqrtOdd<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) throw new Error(`Field doesn't have isOdd`);\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? root : Fp.neg(root);\n}\n\nexport function FpSqrtEven<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) throw new Error(`Field doesn't have isOdd`);\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use mapKeyToField instead\n */\nexport function hashToPrivateScalar(\n  hash: string | Uint8Array,\n  groupOrder: bigint,\n  isLE = false\n): bigint {\n  hash = ensureBytes('privateHash', hash);\n  const hashLen = hash.length;\n  const minLen = nLength(groupOrder).nByteLength + 8;\n  if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n    throw new Error(`hashToPrivateScalar: expected ${minLen}-1024 bytes of input, got ${hashLen}`);\n  const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n  return mod(num, groupOrder - _1n) + _1n;\n}\n\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder: bigint): number {\n  if (typeof fieldOrder !== 'bigint') throw new Error('field order must be bigint');\n  const bitLength = fieldOrder.toString(2).length;\n  return Math.ceil(bitLength / 8);\n}\n\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder: bigint): number {\n  const length = getFieldBytesLength(fieldOrder);\n  return length + Math.ceil(length / 2);\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key: Uint8Array, fieldOrder: bigint, isLE = false): Uint8Array {\n  const len = key.length;\n  const fieldLen = getFieldBytesLength(fieldOrder);\n  const minLen = getMinHashLength(fieldOrder);\n  // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n  if (len < 16 || len < minLen || len > 1024)\n    throw new Error(`expected ${minLen}-1024 bytes of input, got ${len}`);\n  const num = isLE ? bytesToNumberBE(key) : bytesToNumberLE(key);\n  // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n  const reduced = mod(num, fieldOrder - _1n) + _1n;\n  return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Abelian group utilities\nimport { IField, validateField, nLength } from './modular.js';\nimport { validateObject } from './utils.js';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n\nexport type AffinePoint<T> = {\n  x: T;\n  y: T;\n} & { z?: never; t?: never };\n\nexport interface Group<T extends Group<T>> {\n  double(): T;\n  negate(): T;\n  add(other: T): T;\n  subtract(other: T): T;\n  equals(other: T): boolean;\n  multiply(scalar: bigint): T;\n}\n\nexport type GroupConstructor<T> = {\n  BASE: T;\n  ZERO: T;\n};\nexport type Mapper<T> = (i: T[]) => T[];\n\n// Elliptic curve multiplication of Point by scalar. Fragile.\n// Scalars should always be less than curve order: this should be checked inside of a curve itself.\n// Creates precomputation tables for fast multiplication:\n// - private scalar is split by fixed size windows of W bits\n// - every window point is collected from window's table & added to accumulator\n// - since windows are different, same point inside tables won't be accessed more than once per calc\n// - each multiplication is 'Math.ceil(CURVE_ORDER / \uD835\uDC4A) + 1' point additions (fixed for any scalar)\n// - +1 window is neccessary for wNAF\n// - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n// TODO: Research returning 2d JS array of windows, instead of a single window. This would allow\n// windows to be in different memory locations\nexport function wNAF<T extends Group<T>>(c: GroupConstructor<T>, bits: number) {\n  const constTimeNegate = (condition: boolean, item: T): T => {\n    const neg = item.negate();\n    return condition ? neg : item;\n  };\n  const opts = (W: number) => {\n    const windows = Math.ceil(bits / W) + 1; // +1, because\n    const windowSize = 2 ** (W - 1); // -1 because we skip zero\n    return { windows, windowSize };\n  };\n  return {\n    constTimeNegate,\n    // non-const time multiplication ladder\n    unsafeLadder(elm: T, n: bigint) {\n      let p = c.ZERO;\n      let d: T = elm;\n      while (n > _0n) {\n        if (n & _1n) p = p.add(d);\n        d = d.double();\n        n >>= _1n;\n      }\n      return p;\n    },\n\n    /**\n     * Creates a wNAF precomputation window. Used for caching.\n     * Default window size is set by `utils.precompute()` and is equal to 8.\n     * Number of precomputed points depends on the curve size:\n     * 2^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n     * - \uD835\uDC4A is the window size\n     * - \uD835\uDC5B is the bitlength of the curve order.\n     * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n     * @returns precomputed point tables flattened to a single array\n     */\n    precomputeWindow(elm: T, W: number): Group<T>[] {\n      const { windows, windowSize } = opts(W);\n      const points: T[] = [];\n      let p: T = elm;\n      let base = p;\n      for (let window = 0; window < windows; window++) {\n        base = p;\n        points.push(base);\n        // =1, because we skip zero\n        for (let i = 1; i < windowSize; i++) {\n          base = base.add(p);\n          points.push(base);\n        }\n        p = base.double();\n      }\n      return points;\n    },\n\n    /**\n     * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n     * @param W window size\n     * @param precomputes precomputed tables\n     * @param n scalar (we don't check here, but should be less than curve order)\n     * @returns real and fake (for const-time) points\n     */\n    wNAF(W: number, precomputes: T[], n: bigint): { p: T; f: T } {\n      // TODO: maybe check that scalar is less than group order? wNAF behavious is undefined otherwise\n      // But need to carefully remove other checks before wNAF. ORDER == bits here\n      const { windows, windowSize } = opts(W);\n\n      let p = c.ZERO;\n      let f = c.BASE;\n\n      const mask = BigInt(2 ** W - 1); // Create mask with W ones: 0b1111 for W=4 etc.\n      const maxNumber = 2 ** W;\n      const shiftBy = BigInt(W);\n\n      for (let window = 0; window < windows; window++) {\n        const offset = window * windowSize;\n        // Extract W bits.\n        let wbits = Number(n & mask);\n\n        // Shift number by W bits.\n        n >>= shiftBy;\n\n        // If the bits are bigger than max size, we'll split those.\n        // +224 => 256 - 32\n        if (wbits > windowSize) {\n          wbits -= maxNumber;\n          n += _1n;\n        }\n\n        // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n        // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n        // there is negate now: it is possible that negated element from low value\n        // would be the same as high element, which will create carry into next window.\n        // It's not obvious how this can fail, but still worth investigating later.\n\n        // Check if we're onto Zero point.\n        // Add random point inside current window to f.\n        const offset1 = offset;\n        const offset2 = offset + Math.abs(wbits) - 1; // -1 because we skip zero\n        const cond1 = window % 2 !== 0;\n        const cond2 = wbits < 0;\n        if (wbits === 0) {\n          // The most important part for const-time getPublicKey\n          f = f.add(constTimeNegate(cond1, precomputes[offset1]));\n        } else {\n          p = p.add(constTimeNegate(cond2, precomputes[offset2]));\n        }\n      }\n      // JIT-compiler should not eliminate f here, since it will later be used in normalizeZ()\n      // Even if the variable is still unused, there are some checks which will\n      // throw an exception, so compiler needs to prove they won't happen, which is hard.\n      // At this point there is a way to F be infinity-point even if p is not,\n      // which makes it less const-time: around 1 bigint multiply.\n      return { p, f };\n    },\n\n    wNAFCached(P: T, precomputesMap: Map<T, T[]>, n: bigint, transform: Mapper<T>): { p: T; f: T } {\n      // @ts-ignore\n      const W: number = P._WINDOW_SIZE || 1;\n      // Calculate precomputes on a first run, reuse them after\n      let comp = precomputesMap.get(P);\n      if (!comp) {\n        comp = this.precomputeWindow(P, W) as T[];\n        if (W !== 1) {\n          precomputesMap.set(P, transform(comp));\n        }\n      }\n      return this.wNAF(W, comp, n);\n    },\n  };\n}\n\n// Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok.\n// Though generator can be different (Fp2 / Fp6 for BLS).\nexport type BasicCurve<T> = {\n  Fp: IField<T>; // Field over which we'll do calculations (Fp)\n  n: bigint; // Curve order, total count of valid points in the field\n  nBitLength?: number; // bit length of curve order\n  nByteLength?: number; // byte length of curve order\n  h: bigint; // cofactor. we can assign default=1, but users will just ignore it w/o validation\n  hEff?: bigint; // Number to multiply to clear cofactor\n  Gx: T; // base point X coordinate\n  Gy: T; // base point Y coordinate\n  allowInfinityPoint?: boolean; // bls12-381 requires it. ZERO point is valid, but invalid pubkey\n};\n\nexport function validateBasic<FP, T>(curve: BasicCurve<FP> & T) {\n  validateField(curve.Fp);\n  validateObject(\n    curve,\n    {\n      n: 'bigint',\n      h: 'bigint',\n      Gx: 'field',\n      Gy: 'field',\n    },\n    {\n      nBitLength: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n    }\n  );\n  // Set defaults\n  return Object.freeze({\n    ...nLength(curve.n, curve.nBitLength),\n    ...curve,\n    ...{ p: curve.Fp.ORDER },\n  } as const);\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Short Weierstrass curve. The formula is: y\u00B2 = x\u00B3 + ax + b\nimport * as mod from './modular.js';\nimport * as ut from './utils.js';\nimport { CHash, Hex, PrivKey, ensureBytes } from './utils.js';\nimport { Group, GroupConstructor, wNAF, BasicCurve, validateBasic, AffinePoint } from './curve.js';\n\nexport type { AffinePoint };\ntype HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array;\ntype EndomorphismOpts = {\n  beta: bigint;\n  splitScalar: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\nexport type BasicWCurve<T> = BasicCurve<T> & {\n  // Params: a, b\n  a: T;\n  b: T;\n\n  // Optional params\n  allowedPrivateKeyLengths?: readonly number[]; // for P521\n  wrapPrivateKey?: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n  endo?: EndomorphismOpts; // Endomorphism options for Koblitz curves\n  // When a cofactor != 1, there can be an effective methods to:\n  // 1. Determine whether a point is torsion-free\n  isTorsionFree?: (c: ProjConstructor<T>, point: ProjPointType<T>) => boolean;\n  // 2. Clear torsion component\n  clearCofactor?: (c: ProjConstructor<T>, point: ProjPointType<T>) => ProjPointType<T>;\n};\n\ntype Entropy = Hex | true;\nexport type SignOpts = { lowS?: boolean; extraEntropy?: Entropy; prehash?: boolean };\nexport type VerOpts = { lowS?: boolean; prehash?: boolean };\n\n/**\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n *   `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n *   `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n *   it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance of nominative types in TypeScript and interfaces only check for shape, so it's hard to create unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n *     1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n *     which is hard to debug.\n *     2. Params can be generic and we can't enforce them to be constant value:\n *     if somebody creates curve from non-constant params,\n *     it would be allowed to interact with other curves with non-constant params\n *\n * TODO: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n */\n\n// Instance for 3d XYZ points\nexport interface ProjPointType<T> extends Group<ProjPointType<T>> {\n  readonly px: T;\n  readonly py: T;\n  readonly pz: T;\n  get x(): T;\n  get y(): T;\n  multiply(scalar: bigint): ProjPointType<T>;\n  toAffine(iz?: T): AffinePoint<T>;\n  isTorsionFree(): boolean;\n  clearCofactor(): ProjPointType<T>;\n  assertValidity(): void;\n  hasEvenY(): boolean;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n\n  multiplyUnsafe(scalar: bigint): ProjPointType<T>;\n  multiplyAndAddUnsafe(Q: ProjPointType<T>, a: bigint, b: bigint): ProjPointType<T> | undefined;\n  _setWindowSize(windowSize: number): void;\n}\n// Static methods for 3d XYZ points\nexport interface ProjConstructor<T> extends GroupConstructor<ProjPointType<T>> {\n  new (x: T, y: T, z: T): ProjPointType<T>;\n  fromAffine(p: AffinePoint<T>): ProjPointType<T>;\n  fromHex(hex: Hex): ProjPointType<T>;\n  fromPrivateKey(privateKey: PrivKey): ProjPointType<T>;\n  normalizeZ(points: ProjPointType<T>[]): ProjPointType<T>[];\n}\n\nexport type CurvePointsType<T> = BasicWCurve<T> & {\n  // Bytes\n  fromBytes?: (bytes: Uint8Array) => AffinePoint<T>;\n  toBytes?: (c: ProjConstructor<T>, point: ProjPointType<T>, isCompressed: boolean) => Uint8Array;\n};\n\nfunction validatePointOpts<T>(curve: CurvePointsType<T>) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      a: 'field',\n      b: 'field',\n    },\n    {\n      allowedPrivateKeyLengths: 'array',\n      wrapPrivateKey: 'boolean',\n      isTorsionFree: 'function',\n      clearCofactor: 'function',\n      allowInfinityPoint: 'boolean',\n      fromBytes: 'function',\n      toBytes: 'function',\n    }\n  );\n  const { endo, Fp, a } = opts;\n  if (endo) {\n    if (!Fp.eql(a, Fp.ZERO)) {\n      throw new Error('Endomorphism can only be defined for Koblitz curves that have a=0');\n    }\n    if (\n      typeof endo !== 'object' ||\n      typeof endo.beta !== 'bigint' ||\n      typeof endo.splitScalar !== 'function'\n    ) {\n      throw new Error('Expected endomorphism with beta: bigint and splitScalar: function');\n    }\n  }\n  return Object.freeze({ ...opts } as const);\n}\n\nexport type CurvePointsRes<T> = {\n  CURVE: ReturnType<typeof validatePointOpts<T>>;\n  ProjectivePoint: ProjConstructor<T>;\n  normPrivateKeyToScalar: (key: PrivKey) => bigint;\n  weierstrassEquation: (x: T) => T;\n  isWithinCurveOrder: (num: bigint) => boolean;\n};\n\n// ASN.1 DER encoding utilities\nconst { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;\nexport const DER = {\n  // asn.1 DER encoding utils\n  Err: class DERErr extends Error {\n    constructor(m = '') {\n      super(m);\n    }\n  },\n  _parseInt(data: Uint8Array): { d: bigint; l: Uint8Array } {\n    const { Err: E } = DER;\n    if (data.length < 2 || data[0] !== 0x02) throw new E('Invalid signature integer tag');\n    const len = data[1];\n    const res = data.subarray(2, len + 2);\n    if (!len || res.length !== len) throw new E('Invalid signature integer: wrong length');\n    // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n    // since we always use positive integers here. It must always be empty:\n    // - add zero byte if exists\n    // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n    if (res[0] & 0b10000000) throw new E('Invalid signature integer: negative');\n    if (res[0] === 0x00 && !(res[1] & 0b10000000))\n      throw new E('Invalid signature integer: unnecessary leading zero');\n    return { d: b2n(res), l: data.subarray(len + 2) }; // d is data, l is left\n  },\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint } {\n    // parse DER signature\n    const { Err: E } = DER;\n    const data = typeof hex === 'string' ? h2b(hex) : hex;\n    if (!ut.isBytes(data)) throw new Error('ui8a expected');\n    let l = data.length;\n    if (l < 2 || data[0] != 0x30) throw new E('Invalid signature tag');\n    if (data[1] !== l - 2) throw new E('Invalid signature: incorrect length');\n    const { d: r, l: sBytes } = DER._parseInt(data.subarray(2));\n    const { d: s, l: rBytesLeft } = DER._parseInt(sBytes);\n    if (rBytesLeft.length) throw new E('Invalid signature: left bytes after parsing');\n    return { r, s };\n  },\n  hexFromSig(sig: { r: bigint; s: bigint }): string {\n    // Add leading zero if first byte has negative bit enabled. More details in '_parseInt'\n    const slice = (s: string): string => (Number.parseInt(s[0], 16) & 0b1000 ? '00' + s : s);\n    const h = (num: number | bigint) => {\n      const hex = num.toString(16);\n      return hex.length & 1 ? `0${hex}` : hex;\n    };\n    const s = slice(h(sig.s));\n    const r = slice(h(sig.r));\n    const shl = s.length / 2;\n    const rhl = r.length / 2;\n    const sl = h(shl);\n    const rl = h(rhl);\n    return `30${h(rhl + shl + 4)}02${rl}${r}02${sl}${s}`;\n  },\n};\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\n\nexport function weierstrassPoints<T>(opts: CurvePointsType<T>): CurvePointsRes<T> {\n  const CURVE = validatePointOpts(opts);\n  const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n\n  const toBytes =\n    CURVE.toBytes ||\n    ((_c: ProjConstructor<T>, point: ProjPointType<T>, _isCompressed: boolean) => {\n      const a = point.toAffine();\n      return ut.concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n    });\n  const fromBytes =\n    CURVE.fromBytes ||\n    ((bytes: Uint8Array) => {\n      // const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // if (head !== 0x04) throw new Error('Only non-compressed encoding is supported');\n      const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n      const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n      return { x, y };\n    });\n\n  /**\n   * y\u00B2 = x\u00B3 + ax + b: Short weierstrass curve formula\n   * @returns y\u00B2\n   */\n  function weierstrassEquation(x: T): T {\n    const { a, b } = CURVE;\n    const x2 = Fp.sqr(x); // x * x\n    const x3 = Fp.mul(x2, x); // x2 * x\n    return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x3 + a * x + b\n  }\n  // Validate whether the passed curve params are valid.\n  // We check if curve equation works for generator point.\n  // `assertValidity()` won't work: `isTorsionFree()` is not available at this point in bls12-381.\n  // ProjectivePoint class has not been initialized yet.\n  if (!Fp.eql(Fp.sqr(CURVE.Gy), weierstrassEquation(CURVE.Gx)))\n    throw new Error('bad generator point: equation left != right');\n\n  // Valid group elements reside in range 1..n-1\n  function isWithinCurveOrder(num: bigint): boolean {\n    return typeof num === 'bigint' && _0n < num && num < CURVE.n;\n  }\n  function assertGE(num: bigint) {\n    if (!isWithinCurveOrder(num)) throw new Error('Expected valid bigint: 0 < bigint < curve.n');\n  }\n  // Validates if priv key is valid and converts it to bigint.\n  // Supports options allowedPrivateKeyLengths and wrapPrivateKey.\n  function normPrivateKeyToScalar(key: PrivKey): bigint {\n    const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n } = CURVE;\n    if (lengths && typeof key !== 'bigint') {\n      if (ut.isBytes(key)) key = ut.bytesToHex(key);\n      // Normalize to hex string, pad. E.g. P521 would norm 130-132 char hex to 132-char bytes\n      if (typeof key !== 'string' || !lengths.includes(key.length)) throw new Error('Invalid key');\n      key = key.padStart(nByteLength * 2, '0');\n    }\n    let num: bigint;\n    try {\n      num =\n        typeof key === 'bigint'\n          ? key\n          : ut.bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n    } catch (error) {\n      throw new Error(`private key must be ${nByteLength} bytes, hex or bigint, not ${typeof key}`);\n    }\n    if (wrapPrivateKey) num = mod.mod(num, n); // disabled by default, enabled for BLS\n    assertGE(num); // num in range [1..N-1]\n    return num;\n  }\n\n  const pointPrecomputes = new Map<Point, Point[]>();\n  function assertPrjPoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ProjectivePoint expected');\n  }\n  /**\n   * Projective Point works in 3d / projective (homogeneous) coordinates: (x, y, z) \u220B (x=x/z, y=y/z)\n   * Default Point works in 2d / affine coordinates: (x, y)\n   * We're doing calculations in projective, because its operations don't require costly inversion.\n   */\n  class Point implements ProjPointType<T> {\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n    static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);\n\n    constructor(\n      readonly px: T,\n      readonly py: T,\n      readonly pz: T\n    ) {\n      if (px == null || !Fp.isValid(px)) throw new Error('x required');\n      if (py == null || !Fp.isValid(py)) throw new Error('y required');\n      if (pz == null || !Fp.isValid(pz)) throw new Error('z required');\n    }\n\n    // Does not validate if the point is on-curve.\n    // Use fromHex instead, or call assertValidity() later.\n    static fromAffine(p: AffinePoint<T>): Point {\n      const { x, y } = p || {};\n      if (!p || !Fp.isValid(x) || !Fp.isValid(y)) throw new Error('invalid affine point');\n      if (p instanceof Point) throw new Error('projective point not allowed');\n      const is0 = (i: T) => Fp.eql(i, Fp.ZERO);\n      // fromAffine(x:0, y:0) would produce (x:0, y:0, z:1), but we need (x:0, y:1, z:0)\n      if (is0(x) && is0(y)) return Point.ZERO;\n      return new Point(x, y, Fp.ONE);\n    }\n\n    get x(): T {\n      return this.toAffine().x;\n    }\n    get y(): T {\n      return this.toAffine().y;\n    }\n\n    /**\n     * Takes a bunch of Projective Points but executes only one\n     * inversion on all of them. Inversion is very slow operation,\n     * so this improves performance massively.\n     * Optimization: converts a list of projective points to a list of identical points with Z=1.\n     */\n    static normalizeZ(points: Point[]): Point[] {\n      const toInv = Fp.invertBatch(points.map((p) => p.pz));\n      return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n    }\n\n    /**\n     * Converts hash string or Uint8Array to Point.\n     * @param hex short/long ECDSA hex\n     */\n    static fromHex(hex: Hex): Point {\n      const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n      P.assertValidity();\n      return P;\n    }\n\n    // Multiplies generator point by privateKey.\n    static fromPrivateKey(privateKey: PrivKey) {\n      return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n    }\n\n    // We calculate precomputes for elliptic curve point multiplication\n    // using windowed method. This specifies window size and\n    // stores precomputed values. Usually only base point would be precomputed.\n    _WINDOW_SIZE?: number;\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      this._WINDOW_SIZE = windowSize;\n      pointPrecomputes.delete(this);\n    }\n\n    // A point on curve is valid if it conforms to equation.\n    assertValidity(): void {\n      if (this.is0()) {\n        // (0, 1, 0) aka ZERO is invalid in most contexts.\n        // In BLS, ZERO can be serialized, so we allow it.\n        // (0, 0, 0) is wrong representation of ZERO and is always invalid.\n        if (CURVE.allowInfinityPoint && !Fp.is0(this.py)) return;\n        throw new Error('bad point: ZERO');\n      }\n      // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n      const { x, y } = this.toAffine();\n      // Check if x, y are valid field elements\n      if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not FE');\n      const left = Fp.sqr(y); // y\u00B2\n      const right = weierstrassEquation(x); // x\u00B3 + ax + b\n      if (!Fp.eql(left, right)) throw new Error('bad point: equation left != right');\n      if (!this.isTorsionFree()) throw new Error('bad point: not in prime-order subgroup');\n    }\n    hasEvenY(): boolean {\n      const { y } = this.toAffine();\n      if (Fp.isOdd) return !Fp.isOdd(y);\n      throw new Error(\"Field doesn't support isOdd\");\n    }\n\n    /**\n     * Compare one point to another.\n     */\n    equals(other: Point): boolean {\n      assertPrjPoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n      const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n      return U1 && U2;\n    }\n\n    /**\n     * Flips point to one corresponding to (x, -y) in Affine coordinates.\n     */\n    negate(): Point {\n      return new Point(this.px, Fp.neg(this.py), this.pz);\n    }\n\n    // Renes-Costello-Batina exception-free doubling formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 3\n    // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n    double() {\n      const { a, b } = CURVE;\n      const b3 = Fp.mul(b, _3n);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      let t0 = Fp.mul(X1, X1); // step 1\n      let t1 = Fp.mul(Y1, Y1);\n      let t2 = Fp.mul(Z1, Z1);\n      let t3 = Fp.mul(X1, Y1);\n      t3 = Fp.add(t3, t3); // step 5\n      Z3 = Fp.mul(X1, Z1);\n      Z3 = Fp.add(Z3, Z3);\n      X3 = Fp.mul(a, Z3);\n      Y3 = Fp.mul(b3, t2);\n      Y3 = Fp.add(X3, Y3); // step 10\n      X3 = Fp.sub(t1, Y3);\n      Y3 = Fp.add(t1, Y3);\n      Y3 = Fp.mul(X3, Y3);\n      X3 = Fp.mul(t3, X3);\n      Z3 = Fp.mul(b3, Z3); // step 15\n      t2 = Fp.mul(a, t2);\n      t3 = Fp.sub(t0, t2);\n      t3 = Fp.mul(a, t3);\n      t3 = Fp.add(t3, Z3);\n      Z3 = Fp.add(t0, t0); // step 20\n      t0 = Fp.add(Z3, t0);\n      t0 = Fp.add(t0, t2);\n      t0 = Fp.mul(t0, t3);\n      Y3 = Fp.add(Y3, t0);\n      t2 = Fp.mul(Y1, Z1); // step 25\n      t2 = Fp.add(t2, t2);\n      t0 = Fp.mul(t2, t3);\n      X3 = Fp.sub(X3, t0);\n      Z3 = Fp.mul(t2, t1);\n      Z3 = Fp.add(Z3, Z3); // step 30\n      Z3 = Fp.add(Z3, Z3);\n      return new Point(X3, Y3, Z3);\n    }\n\n    // Renes-Costello-Batina exception-free addition formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 1\n    // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n    add(other: Point): Point {\n      assertPrjPoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      const a = CURVE.a;\n      const b3 = Fp.mul(CURVE.b, _3n);\n      let t0 = Fp.mul(X1, X2); // step 1\n      let t1 = Fp.mul(Y1, Y2);\n      let t2 = Fp.mul(Z1, Z2);\n      let t3 = Fp.add(X1, Y1);\n      let t4 = Fp.add(X2, Y2); // step 5\n      t3 = Fp.mul(t3, t4);\n      t4 = Fp.add(t0, t1);\n      t3 = Fp.sub(t3, t4);\n      t4 = Fp.add(X1, Z1);\n      let t5 = Fp.add(X2, Z2); // step 10\n      t4 = Fp.mul(t4, t5);\n      t5 = Fp.add(t0, t2);\n      t4 = Fp.sub(t4, t5);\n      t5 = Fp.add(Y1, Z1);\n      X3 = Fp.add(Y2, Z2); // step 15\n      t5 = Fp.mul(t5, X3);\n      X3 = Fp.add(t1, t2);\n      t5 = Fp.sub(t5, X3);\n      Z3 = Fp.mul(a, t4);\n      X3 = Fp.mul(b3, t2); // step 20\n      Z3 = Fp.add(X3, Z3);\n      X3 = Fp.sub(t1, Z3);\n      Z3 = Fp.add(t1, Z3);\n      Y3 = Fp.mul(X3, Z3);\n      t1 = Fp.add(t0, t0); // step 25\n      t1 = Fp.add(t1, t0);\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.mul(b3, t4);\n      t1 = Fp.add(t1, t2);\n      t2 = Fp.sub(t0, t2); // step 30\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.add(t4, t2);\n      t0 = Fp.mul(t1, t4);\n      Y3 = Fp.add(Y3, t0);\n      t0 = Fp.mul(t5, t4); // step 35\n      X3 = Fp.mul(t3, X3);\n      X3 = Fp.sub(X3, t0);\n      t0 = Fp.mul(t3, t1);\n      Z3 = Fp.mul(t5, Z3);\n      Z3 = Fp.add(Z3, t0); // step 40\n      return new Point(X3, Y3, Z3);\n    }\n\n    subtract(other: Point) {\n      return this.add(other.negate());\n    }\n\n    private is0() {\n      return this.equals(Point.ZERO);\n    }\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, pointPrecomputes, n, (comp: Point[]) => {\n        const toInv = Fp.invertBatch(comp.map((p) => p.pz));\n        return comp.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n      });\n    }\n\n    /**\n     * Non-constant-time multiplication. Uses double-and-add algorithm.\n     * It's faster, but should only be used when you don't care about\n     * an exposed private key e.g. sig verification, which works over *public* keys.\n     */\n    multiplyUnsafe(n: bigint): Point {\n      const I = Point.ZERO;\n      if (n === _0n) return I;\n      assertGE(n); // Will throw on 0\n      if (n === _1n) return this;\n      const { endo } = CURVE;\n      if (!endo) return wnaf.unsafeLadder(this, n);\n\n      // Apply endomorphism\n      let { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n      let k1p = I;\n      let k2p = I;\n      let d: Point = this;\n      while (k1 > _0n || k2 > _0n) {\n        if (k1 & _1n) k1p = k1p.add(d);\n        if (k2 & _1n) k2p = k2p.add(d);\n        d = d.double();\n        k1 >>= _1n;\n        k2 >>= _1n;\n      }\n      if (k1neg) k1p = k1p.negate();\n      if (k2neg) k2p = k2p.negate();\n      k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n      return k1p.add(k2p);\n    }\n\n    /**\n     * Constant time multiplication.\n     * Uses wNAF method. Windowed method may be 10% faster,\n     * but takes 2x longer to generate and consumes 2x memory.\n     * Uses precomputes when available.\n     * Uses endomorphism for Koblitz curves.\n     * @param scalar by which the point would be multiplied\n     * @returns New point\n     */\n    multiply(scalar: bigint): Point {\n      assertGE(scalar);\n      let n = scalar;\n      let point: Point, fake: Point; // Fake point is used to const-time mult\n      const { endo } = CURVE;\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n        let { p: k1p, f: f1p } = this.wNAF(k1);\n        let { p: k2p, f: f2p } = this.wNAF(k2);\n        k1p = wnaf.constTimeNegate(k1neg, k1p);\n        k2p = wnaf.constTimeNegate(k2neg, k2p);\n        k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n        point = k1p.add(k2p);\n        fake = f1p.add(f2p);\n      } else {\n        const { p, f } = this.wNAF(n);\n        point = p;\n        fake = f;\n      }\n      // Normalize `z` for both points, but return only real one\n      return Point.normalizeZ([point, fake])[0];\n    }\n\n    /**\n     * Efficiently calculate `aP + bQ`. Unsafe, can expose private key, if used incorrectly.\n     * Not using Strauss-Shamir trick: precomputation tables are faster.\n     * The trick could be useful if both P and Q are not G (not in our case).\n     * @returns non-zero affine point\n     */\n    multiplyAndAddUnsafe(Q: Point, a: bigint, b: bigint): Point | undefined {\n      const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n      const mul = (\n        P: Point,\n        a: bigint // Select faster multiply() method\n      ) => (a === _0n || a === _1n || !P.equals(G) ? P.multiplyUnsafe(a) : P.multiply(a));\n      const sum = mul(this, a).add(mul(Q, b));\n      return sum.is0() ? undefined : sum;\n    }\n\n    // Converts Projective point to affine (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    // (x, y, z) \u220B (x=x/z, y=y/z)\n    toAffine(iz?: T): AffinePoint<T> {\n      const { px: x, py: y, pz: z } = this;\n      const is0 = this.is0();\n      // If invZ was 0, we return zero point. However we still want to execute\n      // all operations, so we replace invZ with a random number, 1.\n      if (iz == null) iz = is0 ? Fp.ONE : Fp.inv(z);\n      const ax = Fp.mul(x, iz);\n      const ay = Fp.mul(y, iz);\n      const zz = Fp.mul(z, iz);\n      if (is0) return { x: Fp.ZERO, y: Fp.ZERO };\n      if (!Fp.eql(zz, Fp.ONE)) throw new Error('invZ was invalid');\n      return { x: ax, y: ay };\n    }\n    isTorsionFree(): boolean {\n      const { h: cofactor, isTorsionFree } = CURVE;\n      if (cofactor === _1n) return true; // No subgroups, always torsion-free\n      if (isTorsionFree) return isTorsionFree(Point, this);\n      throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n    }\n    clearCofactor(): Point {\n      const { h: cofactor, clearCofactor } = CURVE;\n      if (cofactor === _1n) return this; // Fast-path\n      if (clearCofactor) return clearCofactor(Point, this) as Point;\n      return this.multiplyUnsafe(CURVE.h);\n    }\n\n    toRawBytes(isCompressed = true): Uint8Array {\n      this.assertValidity();\n      return toBytes(Point, this, isCompressed);\n    }\n\n    toHex(isCompressed = true): string {\n      return ut.bytesToHex(this.toRawBytes(isCompressed));\n    }\n  }\n  const _bits = CURVE.nBitLength;\n  const wnaf = wNAF(Point, CURVE.endo ? Math.ceil(_bits / 2) : _bits);\n  // Validate if generator point is on curve\n  return {\n    CURVE,\n    ProjectivePoint: Point as ProjConstructor<T>,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  };\n}\n\n// Instance\nexport interface SignatureType {\n  readonly r: bigint;\n  readonly s: bigint;\n  readonly recovery?: number;\n  assertValidity(): void;\n  addRecoveryBit(recovery: number): RecoveredSignatureType;\n  hasHighS(): boolean;\n  normalizeS(): SignatureType;\n  recoverPublicKey(msgHash: Hex): ProjPointType<bigint>;\n  toCompactRawBytes(): Uint8Array;\n  toCompactHex(): string;\n  // DER-encoded\n  toDERRawBytes(isCompressed?: boolean): Uint8Array;\n  toDERHex(isCompressed?: boolean): string;\n}\nexport type RecoveredSignatureType = SignatureType & {\n  readonly recovery: number;\n};\n// Static methods\nexport type SignatureConstructor = {\n  new (r: bigint, s: bigint): SignatureType;\n  fromCompact(hex: Hex): SignatureType;\n  fromDER(hex: Hex): SignatureType;\n};\ntype SignatureLike = { r: bigint; s: bigint };\n\nexport type PubKey = Hex | ProjPointType<bigint>;\n\nexport type CurveType = BasicWCurve<bigint> & {\n  hash: CHash; // CHash not FHash because we need outputLen for DRBG\n  hmac: HmacFnSync;\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  lowS?: boolean;\n  bits2int?: (bytes: Uint8Array) => bigint;\n  bits2int_modN?: (bytes: Uint8Array) => bigint;\n};\n\nfunction validateOpts(curve: CurveType) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      hash: 'hash',\n      hmac: 'function',\n      randomBytes: 'function',\n    },\n    {\n      bits2int: 'function',\n      bits2int_modN: 'function',\n      lowS: 'boolean',\n    }\n  );\n  return Object.freeze({ lowS: true, ...opts } as const);\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: PrivKey, isCompressed?: boolean) => Uint8Array;\n  getSharedSecret: (privateA: PrivKey, publicB: Hex, isCompressed?: boolean) => Uint8Array;\n  sign: (msgHash: Hex, privKey: PrivKey, opts?: SignOpts) => RecoveredSignatureType;\n  verify: (signature: Hex | SignatureLike, msgHash: Hex, publicKey: Hex, opts?: VerOpts) => boolean;\n  ProjectivePoint: ProjConstructor<bigint>;\n  Signature: SignatureConstructor;\n  utils: {\n    normPrivateKeyToScalar: (key: PrivKey) => bigint;\n    isValidPrivateKey(privateKey: PrivKey): boolean;\n    randomPrivateKey: () => Uint8Array;\n    precompute: (windowSize?: number, point?: ProjPointType<bigint>) => ProjPointType<bigint>;\n  };\n};\n\nexport function weierstrass(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\n  const { Fp, n: CURVE_ORDER } = CURVE;\n  const compressedLen = Fp.BYTES + 1; // e.g. 33 for 32\n  const uncompressedLen = 2 * Fp.BYTES + 1; // e.g. 65 for 32\n\n  function isValidFieldElement(num: bigint): boolean {\n    return _0n < num && num < Fp.ORDER; // 0 is banned since it's not invertible FE\n  }\n  function modN(a: bigint) {\n    return mod.mod(a, CURVE_ORDER);\n  }\n  function invN(a: bigint) {\n    return mod.invert(a, CURVE_ORDER);\n  }\n\n  const {\n    ProjectivePoint: Point,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  } = weierstrassPoints({\n    ...CURVE,\n    toBytes(_c, point, isCompressed: boolean): Uint8Array {\n      const a = point.toAffine();\n      const x = Fp.toBytes(a.x);\n      const cat = ut.concatBytes;\n      if (isCompressed) {\n        return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n      } else {\n        return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n      }\n    },\n    fromBytes(bytes: Uint8Array) {\n      const len = bytes.length;\n      const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // this.assertValidity() is done inside of fromHex\n      if (len === compressedLen && (head === 0x02 || head === 0x03)) {\n        const x = ut.bytesToNumberBE(tail);\n        if (!isValidFieldElement(x)) throw new Error('Point is not on curve');\n        const y2 = weierstrassEquation(x); // y\u00B2 = x\u00B3 + ax + b\n        let y = Fp.sqrt(y2); // y = y\u00B2 ^ (p+1)/4\n        const isYOdd = (y & _1n) === _1n;\n        // ECDSA\n        const isHeadOdd = (head & 1) === 1;\n        if (isHeadOdd !== isYOdd) y = Fp.neg(y);\n        return { x, y };\n      } else if (len === uncompressedLen && head === 0x04) {\n        const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n        const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n        return { x, y };\n      } else {\n        throw new Error(\n          `Point of length ${len} was invalid. Expected ${compressedLen} compressed bytes or ${uncompressedLen} uncompressed bytes`\n        );\n      }\n    },\n  });\n  const numToNByteStr = (num: bigint): string =>\n    ut.bytesToHex(ut.numberToBytesBE(num, CURVE.nByteLength));\n\n  function isBiggerThanHalfOrder(number: bigint) {\n    const HALF = CURVE_ORDER >> _1n;\n    return number > HALF;\n  }\n\n  function normalizeS(s: bigint) {\n    return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n  }\n  // slice bytes num\n  const slcNum = (b: Uint8Array, from: number, to: number) => ut.bytesToNumberBE(b.slice(from, to));\n\n  /**\n   * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n   */\n  class Signature implements SignatureType {\n    constructor(\n      readonly r: bigint,\n      readonly s: bigint,\n      readonly recovery?: number\n    ) {\n      this.assertValidity();\n    }\n\n    // pair (bytes of r, bytes of s)\n    static fromCompact(hex: Hex) {\n      const l = CURVE.nByteLength;\n      hex = ensureBytes('compactSignature', hex, l * 2);\n      return new Signature(slcNum(hex, 0, l), slcNum(hex, l, 2 * l));\n    }\n\n    // DER encoded ECDSA signature\n    // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n    static fromDER(hex: Hex) {\n      const { r, s } = DER.toSig(ensureBytes('DER', hex));\n      return new Signature(r, s);\n    }\n\n    assertValidity(): void {\n      // can use assertGE here\n      if (!isWithinCurveOrder(this.r)) throw new Error('r must be 0 < r < CURVE.n');\n      if (!isWithinCurveOrder(this.s)) throw new Error('s must be 0 < s < CURVE.n');\n    }\n\n    addRecoveryBit(recovery: number): RecoveredSignature {\n      return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n    }\n\n    recoverPublicKey(msgHash: Hex): typeof Point.BASE {\n      const { r, s, recovery: rec } = this;\n      const h = bits2int_modN(ensureBytes('msgHash', msgHash)); // Truncate hash\n      if (rec == null || ![0, 1, 2, 3].includes(rec)) throw new Error('recovery id invalid');\n      const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n      if (radj >= Fp.ORDER) throw new Error('recovery id 2 or 3 invalid');\n      const prefix = (rec & 1) === 0 ? '02' : '03';\n      const R = Point.fromHex(prefix + numToNByteStr(radj));\n      const ir = invN(radj); // r^-1\n      const u1 = modN(-h * ir); // -hr^-1\n      const u2 = modN(s * ir); // sr^-1\n      const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n      if (!Q) throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n      Q.assertValidity();\n      return Q;\n    }\n\n    // Signatures should be low-s, to prevent malleability.\n    hasHighS(): boolean {\n      return isBiggerThanHalfOrder(this.s);\n    }\n\n    normalizeS() {\n      return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n    }\n\n    // DER-encoded\n    toDERRawBytes() {\n      return ut.hexToBytes(this.toDERHex());\n    }\n    toDERHex() {\n      return DER.hexFromSig({ r: this.r, s: this.s });\n    }\n\n    // padded bytes of r, then padded bytes of s\n    toCompactRawBytes() {\n      return ut.hexToBytes(this.toCompactHex());\n    }\n    toCompactHex() {\n      return numToNByteStr(this.r) + numToNByteStr(this.s);\n    }\n  }\n  type RecoveredSignature = Signature & { recovery: number };\n\n  const utils = {\n    isValidPrivateKey(privateKey: PrivKey) {\n      try {\n        normPrivateKeyToScalar(privateKey);\n        return true;\n      } catch (error) {\n        return false;\n      }\n    },\n    normPrivateKeyToScalar: normPrivateKeyToScalar,\n\n    /**\n     * Produces cryptographically secure private key from random of size\n     * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n     */\n    randomPrivateKey: (): Uint8Array => {\n      const length = mod.getMinHashLength(CURVE.n);\n      return mod.mapHashToField(CURVE.randomBytes(length), CURVE.n);\n    },\n\n    /**\n     * Creates precompute table for an arbitrary EC point. Makes point \"cached\".\n     * Allows to massively speed-up `point.multiply(scalar)`.\n     * @returns cached point\n     * @example\n     * const fast = utils.precompute(8, ProjectivePoint.fromHex(someonesPubKey));\n     * fast.multiply(privKey); // much faster ECDH now\n     */\n    precompute(windowSize = 8, point = Point.BASE): typeof Point.BASE {\n      point._setWindowSize(windowSize);\n      point.multiply(BigInt(3)); // 3 is arbitrary, just need any number here\n      return point;\n    },\n  };\n\n  /**\n   * Computes public key for a private key. Checks for validity of the private key.\n   * @param privateKey private key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns Public key, full when isCompressed=false; short when isCompressed=true\n   */\n  function getPublicKey(privateKey: PrivKey, isCompressed = true): Uint8Array {\n    return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n  }\n\n  /**\n   * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n   */\n  function isProbPub(item: PrivKey | PubKey): boolean {\n    const arr = ut.isBytes(item);\n    const str = typeof item === 'string';\n    const len = (arr || str) && (item as Hex).length;\n    if (arr) return len === compressedLen || len === uncompressedLen;\n    if (str) return len === 2 * compressedLen || len === 2 * uncompressedLen;\n    if (item instanceof Point) return true;\n    return false;\n  }\n\n  /**\n   * ECDH (Elliptic Curve Diffie Hellman).\n   * Computes shared public key from private key and public key.\n   * Checks: 1) private key validity 2) shared key is on-curve.\n   * Does NOT hash the result.\n   * @param privateA private key\n   * @param publicB different public key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns shared public key\n   */\n  function getSharedSecret(privateA: PrivKey, publicB: Hex, isCompressed = true): Uint8Array {\n    if (isProbPub(privateA)) throw new Error('first arg must be private key');\n    if (!isProbPub(publicB)) throw new Error('second arg must be public key');\n    const b = Point.fromHex(publicB); // check for being on-curve\n    return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(isCompressed);\n  }\n\n  // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n  // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n  // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n  // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n  const bits2int =\n    CURVE.bits2int ||\n    function (bytes: Uint8Array): bigint {\n      // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n      // for some cases, since bytes.length * 8 is not actual bitLength.\n      const num = ut.bytesToNumberBE(bytes); // check for == u8 done here\n      const delta = bytes.length * 8 - CURVE.nBitLength; // truncate to nBitLength leftmost bits\n      return delta > 0 ? num >> BigInt(delta) : num;\n    };\n  const bits2int_modN =\n    CURVE.bits2int_modN ||\n    function (bytes: Uint8Array): bigint {\n      return modN(bits2int(bytes)); // can't use bytesToNumberBE here\n    };\n  // NOTE: pads output with zero as per spec\n  const ORDER_MASK = ut.bitMask(CURVE.nBitLength);\n  /**\n   * Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`.\n   */\n  function int2octets(num: bigint): Uint8Array {\n    if (typeof num !== 'bigint') throw new Error('bigint expected');\n    if (!(_0n <= num && num < ORDER_MASK))\n      throw new Error(`bigint expected < 2^${CURVE.nBitLength}`);\n    // works with order, can have different size than numToField!\n    return ut.numberToBytesBE(num, CURVE.nByteLength);\n  }\n\n  // Steps A, D of RFC6979 3.2\n  // Creates RFC6979 seed; converts msg/privKey to numbers.\n  // Used only in sign, not in verify.\n  // NOTE: we cannot assume here that msgHash has same amount of bytes as curve order, this will be wrong at least for P521.\n  // Also it can be bigger for P224 + SHA256\n  function prepSig(msgHash: Hex, privateKey: PrivKey, opts = defaultSigOpts) {\n    if (['recovered', 'canonical'].some((k) => k in opts))\n      throw new Error('sign() legacy options not supported');\n    const { hash, randomBytes } = CURVE;\n    let { lowS, prehash, extraEntropy: ent } = opts; // generates low-s sigs by default\n    if (lowS == null) lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n    msgHash = ensureBytes('msgHash', msgHash);\n    if (prehash) msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n\n    // We can't later call bits2octets, since nested bits2int is broken for curves\n    // with nBitLength % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n    // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n    const h1int = bits2int_modN(msgHash);\n    const d = normPrivateKeyToScalar(privateKey); // validate private key, convert to bigint\n    const seedArgs = [int2octets(d), int2octets(h1int)];\n    // extraEntropy. RFC6979 3.6: additional k' (optional).\n    if (ent != null) {\n      // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n      const e = ent === true ? randomBytes(Fp.BYTES) : ent; // generate random bytes OR pass as-is\n      seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes\n    }\n    const seed = ut.concatBytes(...seedArgs); // Step D of RFC6979 3.2\n    const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n    // Converts signature params into point w r/s, checks result for validity.\n    function k2sig(kBytes: Uint8Array): RecoveredSignature | undefined {\n      // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n      const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n      if (!isWithinCurveOrder(k)) return; // Important: all mod() calls here must be done over N\n      const ik = invN(k); // k^-1 mod n\n      const q = Point.BASE.multiply(k).toAffine(); // q = Gk\n      const r = modN(q.x); // r = q.x mod n\n      if (r === _0n) return;\n      // Can use scalar blinding b^-1(bm + bdr) where b \u2208 [1,q\u22121] according to\n      // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n      // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n      const s = modN(ik * modN(m + r * d)); // Not using blinding here\n      if (s === _0n) return;\n      let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n      let normS = s;\n      if (lowS && isBiggerThanHalfOrder(s)) {\n        normS = normalizeS(s); // if lowS was passed, ensure s is always\n        recovery ^= 1; // // in the bottom half of N\n      }\n      return new Signature(r, normS, recovery) as RecoveredSignature; // use normS, not s\n    }\n    return { seed, k2sig };\n  }\n  const defaultSigOpts: SignOpts = { lowS: CURVE.lowS, prehash: false };\n  const defaultVerOpts: VerOpts = { lowS: CURVE.lowS, prehash: false };\n\n  /**\n   * Signs message hash with a private key.\n   * ```\n   * sign(m, d, k) where\n   *   (x, y) = G \u00D7 k\n   *   r = x mod n\n   *   s = (m + dr)/k mod n\n   * ```\n   * @param msgHash NOT message. msg needs to be hashed to `msgHash`, or use `prehash`.\n   * @param privKey private key\n   * @param opts lowS for non-malleable sigs. extraEntropy for mixing randomness into k. prehash will hash first arg.\n   * @returns signature with recovery param\n   */\n  function sign(msgHash: Hex, privKey: PrivKey, opts = defaultSigOpts): RecoveredSignature {\n    const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n    const C = CURVE;\n    const drbg = ut.createHmacDrbg<RecoveredSignature>(C.hash.outputLen, C.nByteLength, C.hmac);\n    return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n  }\n\n  // Enable precomputes. Slows down first publicKey computation by 20ms.\n  Point.BASE._setWindowSize(8);\n  // utils.precompute(8, ProjectivePoint.BASE)\n\n  /**\n   * Verifies a signature against message hash and public key.\n   * Rejects lowS signatures by default: to override,\n   * specify option `{lowS: false}`. Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n   *\n   * ```\n   * verify(r, s, h, P) where\n   *   U1 = hs^-1 mod n\n   *   U2 = rs^-1 mod n\n   *   R = U1\u22C5G - U2\u22C5P\n   *   mod(R.x, n) == r\n   * ```\n   */\n  function verify(\n    signature: Hex | SignatureLike,\n    msgHash: Hex,\n    publicKey: Hex,\n    opts = defaultVerOpts\n  ): boolean {\n    const sg = signature;\n    msgHash = ensureBytes('msgHash', msgHash);\n    publicKey = ensureBytes('publicKey', publicKey);\n    if ('strict' in opts) throw new Error('options.strict was renamed to lowS');\n    const { lowS, prehash } = opts;\n\n    let _sig: Signature | undefined = undefined;\n    let P: ProjPointType<bigint>;\n    try {\n      if (typeof sg === 'string' || ut.isBytes(sg)) {\n        // Signature can be represented in 2 ways: compact (2*nByteLength) & DER (variable-length).\n        // Since DER can also be 2*nByteLength bytes, we check for it first.\n        try {\n          _sig = Signature.fromDER(sg);\n        } catch (derError) {\n          if (!(derError instanceof DER.Err)) throw derError;\n          _sig = Signature.fromCompact(sg);\n        }\n      } else if (typeof sg === 'object' && typeof sg.r === 'bigint' && typeof sg.s === 'bigint') {\n        const { r, s } = sg;\n        _sig = new Signature(r, s);\n      } else {\n        throw new Error('PARSE');\n      }\n      P = Point.fromHex(publicKey);\n    } catch (error) {\n      if ((error as Error).message === 'PARSE')\n        throw new Error(`signature must be Signature instance, Uint8Array or hex string`);\n      return false;\n    }\n    if (lowS && _sig.hasHighS()) return false;\n    if (prehash) msgHash = CURVE.hash(msgHash);\n    const { r, s } = _sig;\n    const h = bits2int_modN(msgHash); // Cannot use fields methods, since it is group element\n    const is = invN(s); // s^-1\n    const u1 = modN(h * is); // u1 = hs^-1 mod n\n    const u2 = modN(r * is); // u2 = rs^-1 mod n\n    const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2)?.toAffine(); // R = u1\u22C5G + u2\u22C5P\n    if (!R) return false;\n    const v = modN(R.x);\n    return v === r;\n  }\n  return {\n    CURVE,\n    getPublicKey,\n    getSharedSecret,\n    sign,\n    verify,\n    ProjectivePoint: Point,\n    Signature,\n    utils,\n  };\n}\n\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nexport function SWUFpSqrtRatio<T>(Fp: mod.IField<T>, Z: T) {\n  // Generic implementation\n  const q = Fp.ORDER;\n  let l = _0n;\n  for (let o = q - _1n; o % _2n === _0n; o /= _2n) l += _1n;\n  const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n  // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n  // 2n ** c1 == 2n << (c1-1)\n  const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n  const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n  const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1)  # Integer arithmetic\n  const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2            # Integer arithmetic\n  const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1                # Integer arithmetic\n  const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1)                  # Integer arithmetic\n  const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n  const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n  let sqrtRatio = (u: T, v: T): { isValid: boolean; value: T } => {\n    let tv1 = c6; // 1. tv1 = c6\n    let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n    let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n    tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n    let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n    tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n    tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n    tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n    tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n    let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n    tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n    let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n    tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n    tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n    tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n    tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n    // 17. for i in (c1, c1 - 1, ..., 2):\n    for (let i = c1; i > _1n; i--) {\n      let tv5 = i - _2n; // 18.    tv5 = i - 2\n      tv5 = _2n << (tv5 - _1n); // 19.    tv5 = 2^tv5\n      let tvv5 = Fp.pow(tv4, tv5); // 20.    tv5 = tv4^tv5\n      const e1 = Fp.eql(tvv5, Fp.ONE); // 21.    e1 = tv5 == 1\n      tv2 = Fp.mul(tv3, tv1); // 22.    tv2 = tv3 * tv1\n      tv1 = Fp.mul(tv1, tv1); // 23.    tv1 = tv1 * tv1\n      tvv5 = Fp.mul(tv4, tv1); // 24.    tv5 = tv4 * tv1\n      tv3 = Fp.cmov(tv2, tv3, e1); // 25.    tv3 = CMOV(tv2, tv3, e1)\n      tv4 = Fp.cmov(tvv5, tv4, e1); // 26.    tv4 = CMOV(tv5, tv4, e1)\n    }\n    return { isValid: isQR, value: tv3 };\n  };\n  if (Fp.ORDER % _4n === _3n) {\n    // sqrt_ratio_3mod4(u, v)\n    const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4     # Integer arithmetic\n    const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n    sqrtRatio = (u: T, v: T) => {\n      let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n      const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n      tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n      let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n      y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n      const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n      const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n      const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n      let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n      return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n    };\n  }\n  // No curves uses that\n  // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n  return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2\n */\nexport function mapToCurveSimpleSWU<T>(\n  Fp: mod.IField<T>,\n  opts: {\n    A: T;\n    B: T;\n    Z: T;\n  }\n) {\n  mod.validateField(Fp);\n  if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))\n    throw new Error('mapToCurveSimpleSWU: invalid opts');\n  const sqrtRatio = SWUFpSqrtRatio(Fp, opts.Z);\n  if (!Fp.isOdd) throw new Error('Fp.isOdd is not implemented!');\n  // Input: u, an element of F.\n  // Output: (x, y), a point on E.\n  return (u: T): { x: T; y: T } => {\n    // prettier-ignore\n    let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n    tv1 = Fp.sqr(u); // 1.  tv1 = u^2\n    tv1 = Fp.mul(tv1, opts.Z); // 2.  tv1 = Z * tv1\n    tv2 = Fp.sqr(tv1); // 3.  tv2 = tv1^2\n    tv2 = Fp.add(tv2, tv1); // 4.  tv2 = tv2 + tv1\n    tv3 = Fp.add(tv2, Fp.ONE); // 5.  tv3 = tv2 + 1\n    tv3 = Fp.mul(tv3, opts.B); // 6.  tv3 = B * tv3\n    tv4 = Fp.cmov(opts.Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7.  tv4 = CMOV(Z, -tv2, tv2 != 0)\n    tv4 = Fp.mul(tv4, opts.A); // 8.  tv4 = A * tv4\n    tv2 = Fp.sqr(tv3); // 9.  tv2 = tv3^2\n    tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n    tv5 = Fp.mul(tv6, opts.A); // 11. tv5 = A * tv6\n    tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n    tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n    tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n    tv5 = Fp.mul(tv6, opts.B); // 15. tv5 = B * tv6\n    tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n    x = Fp.mul(tv1, tv3); // 17.   x = tv1 * tv3\n    const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n    y = Fp.mul(tv1, u); // 19.   y = tv1 * u  -> Z * u^3 * y1\n    y = Fp.mul(y, value); // 20.   y = y * y1\n    x = Fp.cmov(x, tv3, isValid); // 21.   x = CMOV(x, tv3, is_gx1_square)\n    y = Fp.cmov(y, value, isValid); // 22.   y = CMOV(y, y1, is_gx1_square)\n    const e1 = Fp.isOdd!(u) === Fp.isOdd!(y); // 23.  e1 = sgn0(u) == sgn0(y)\n    y = Fp.cmov(Fp.neg(y), y, e1); // 24.   y = CMOV(-y, y, e1)\n    x = Fp.div(x, tv4); // 25.   x = x / tv4\n    return { x, y };\n  };\n}\n", "import { hash as assertHash, bytes as assertBytes, exists as assertExists } from './_assert.js';\nimport { Hash, CHash, Input, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nexport class HMAC<T extends Hash<T>> extends Hash<HMAC<T>> {\n  oHash: T;\n  iHash: T;\n  blockLen: number;\n  outputLen: number;\n  private finished = false;\n  private destroyed = false;\n\n  constructor(hash: CHash, _key: Input) {\n    super();\n    assertHash(hash);\n    const key = toBytes(_key);\n    this.iHash = hash.create() as T;\n    if (typeof this.iHash.update !== 'function')\n      throw new Error('Expected instance of class which extends utils.Hash');\n    this.blockLen = this.iHash.blockLen;\n    this.outputLen = this.iHash.outputLen;\n    const blockLen = this.blockLen;\n    const pad = new Uint8Array(blockLen);\n    // blockLen can be bigger than outputLen\n    pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n    this.iHash.update(pad);\n    // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n    this.oHash = hash.create() as T;\n    // Undo internal XOR && apply outer XOR\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n    this.oHash.update(pad);\n    pad.fill(0);\n  }\n  update(buf: Input) {\n    assertExists(this);\n    this.iHash.update(buf);\n    return this;\n  }\n  digestInto(out: Uint8Array) {\n    assertExists(this);\n    assertBytes(out, this.outputLen);\n    this.finished = true;\n    this.iHash.digestInto(out);\n    this.oHash.update(out);\n    this.oHash.digestInto(out);\n    this.destroy();\n  }\n  digest() {\n    const out = new Uint8Array(this.oHash.outputLen);\n    this.digestInto(out);\n    return out;\n  }\n  _cloneInto(to?: HMAC<T>): HMAC<T> {\n    // Create new instance without calling constructor since key already in state and we don't know it.\n    to ||= Object.create(Object.getPrototypeOf(this), {});\n    const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n    to = to as this;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    to.blockLen = blockLen;\n    to.outputLen = outputLen;\n    to.oHash = oHash._cloneInto(to.oHash);\n    to.iHash = iHash._cloneInto(to.iHash);\n    return to;\n  }\n  destroy() {\n    this.destroyed = true;\n    this.oHash.destroy();\n    this.iHash.destroy();\n  }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n */\nexport const hmac = (hash: CHash, key: Input, message: Input): Uint8Array =>\n  new HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Input) => new HMAC<any>(hash, key);\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac } from '@noble/hashes/hmac';\nimport { concatBytes, randomBytes } from '@noble/hashes/utils';\nimport { weierstrass, CurveType } from './abstract/weierstrass.js';\nimport { CHash } from './abstract/utils.js';\n\n// connects noble-curves to noble-hashes\nexport function getHash(hash: CHash) {\n  return {\n    hash,\n    hmac: (key: Uint8Array, ...msgs: Uint8Array[]) => hmac(hash, key, concatBytes(...msgs)),\n    randomBytes,\n  };\n}\n// Same API as @noble/hashes, with ability to create curve with custom hash\ntype CurveDef = Readonly<Omit<CurveType, 'hash' | 'hmac' | 'randomBytes'>>;\nexport function createCurve(curveDef: CurveDef, defHash: CHash) {\n  const create = (hash: CHash) => weierstrass({ ...curveDef, ...getHash(hash) });\n  return Object.freeze({ ...create(defHash), create });\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha256';\nimport { randomBytes } from '@noble/hashes/utils';\nimport { Field, mod, pow2 } from './abstract/modular.js';\nimport { ProjPointType as PointType, mapToCurveSimpleSWU } from './abstract/weierstrass.js';\nimport type { Hex, PrivKey } from './abstract/utils.js';\nimport { bytesToNumberBE, concatBytes, ensureBytes, numberToBytesBE } from './abstract/utils.js';\nimport { createHasher, isogenyMap } from './abstract/hash-to-curve.js';\nimport { createCurve } from './_shortw_utils.js';\n\nconst secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');\nconst secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst divNearest = (a: bigint, b: bigint) => (a + b / _2n) / b;\n\n/**\n * \u221An = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.\n * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00]\n */\nfunction sqrtMod(y: bigint): bigint {\n  const P = secp256k1P;\n  // prettier-ignore\n  const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);\n  // prettier-ignore\n  const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);\n  const b2 = (y * y * y) % P; // x^3, 11\n  const b3 = (b2 * b2 * y) % P; // x^7\n  const b6 = (pow2(b3, _3n, P) * b3) % P;\n  const b9 = (pow2(b6, _3n, P) * b3) % P;\n  const b11 = (pow2(b9, _2n, P) * b2) % P;\n  const b22 = (pow2(b11, _11n, P) * b11) % P;\n  const b44 = (pow2(b22, _22n, P) * b22) % P;\n  const b88 = (pow2(b44, _44n, P) * b44) % P;\n  const b176 = (pow2(b88, _88n, P) * b88) % P;\n  const b220 = (pow2(b176, _44n, P) * b44) % P;\n  const b223 = (pow2(b220, _3n, P) * b3) % P;\n  const t1 = (pow2(b223, _23n, P) * b22) % P;\n  const t2 = (pow2(t1, _6n, P) * b2) % P;\n  const root = pow2(t2, _2n, P);\n  if (!Fp.eql(Fp.sqr(root), y)) throw new Error('Cannot find square root');\n  return root;\n}\n\nconst Fp = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });\n\nexport const secp256k1 = createCurve(\n  {\n    a: BigInt(0), // equation params: a, b\n    b: BigInt(7), // Seem to be rigid: bitcointalk.org/index.php?topic=289795.msg3183975#msg3183975\n    Fp, // Field's prime: 2n**256n - 2n**32n - 2n**9n - 2n**8n - 2n**7n - 2n**6n - 2n**4n - 1n\n    n: secp256k1N, // Curve order, total count of valid points in the field\n    // Base point (x, y) aka generator point\n    Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n    Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n    h: BigInt(1), // Cofactor\n    lowS: true, // Allow only low-S signatures by default in sign() and verify()\n    /**\n     * secp256k1 belongs to Koblitz curves: it has efficiently computable endomorphism.\n     * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n     * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n     * Explanation: https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066\n     */\n    endo: {\n      beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n      splitScalar: (k: bigint) => {\n        const n = secp256k1N;\n        const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n        const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n        const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n        const b2 = a1;\n        const POW_2_128 = BigInt('0x100000000000000000000000000000000'); // (2n**128n).toString(16)\n\n        const c1 = divNearest(b2 * k, n);\n        const c2 = divNearest(-b1 * k, n);\n        let k1 = mod(k - c1 * a1 - c2 * a2, n);\n        let k2 = mod(-c1 * b1 - c2 * b2, n);\n        const k1neg = k1 > POW_2_128;\n        const k2neg = k2 > POW_2_128;\n        if (k1neg) k1 = n - k1;\n        if (k2neg) k2 = n - k2;\n        if (k1 > POW_2_128 || k2 > POW_2_128) {\n          throw new Error('splitScalar: Endomorphism failed, k=' + k);\n        }\n        return { k1neg, k1, k2neg, k2 };\n      },\n    },\n  },\n  sha256\n);\n\n// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.\n// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\nconst _0n = BigInt(0);\nconst fe = (x: bigint) => typeof x === 'bigint' && _0n < x && x < secp256k1P;\nconst ge = (x: bigint) => typeof x === 'bigint' && _0n < x && x < secp256k1N;\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES: { [tag: string]: Uint8Array } = {};\nfunction taggedHash(tag: string, ...messages: Uint8Array[]): Uint8Array {\n  let tagP = TAGGED_HASH_PREFIXES[tag];\n  if (tagP === undefined) {\n    const tagH = sha256(Uint8Array.from(tag, (c) => c.charCodeAt(0)));\n    tagP = concatBytes(tagH, tagH);\n    TAGGED_HASH_PREFIXES[tag] = tagP;\n  }\n  return sha256(concatBytes(tagP, ...messages));\n}\n\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point: PointType<bigint>) => point.toRawBytes(true).slice(1);\nconst numTo32b = (n: bigint) => numberToBytesBE(n, 32);\nconst modP = (x: bigint) => mod(x, secp256k1P);\nconst modN = (x: bigint) => mod(x, secp256k1N);\nconst Point = secp256k1.ProjectivePoint;\nconst GmulAdd = (Q: PointType<bigint>, a: bigint, b: bigint) =>\n  Point.BASE.multiplyAndAddUnsafe(Q, a, b);\n\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv: PrivKey) {\n  let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey\n  let p = Point.fromPrivateKey(d_); // P = d'\u22C5G; 0 < d' < n check is done inside\n  const scalar = p.hasEvenY() ? d_ : modN(-d_);\n  return { scalar: scalar, bytes: pointToBytes(p) };\n}\n/**\n * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.\n * @returns valid point checked for being on-curve\n */\nfunction lift_x(x: bigint): PointType<bigint> {\n  if (!fe(x)) throw new Error('bad x: need 0 < x < p'); // Fail if x \u2265 p.\n  const xx = modP(x * x);\n  const c = modP(xx * x + BigInt(7)); // Let c = x\u00B3 + 7 mod p.\n  let y = sqrtMod(c); // Let y = c^(p+1)/4 mod p.\n  if (y % _2n !== _0n) y = modP(-y); // Return the unique point P such that x(P) = x and\n  const p = new Point(x, y, _1n); // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.\n  p.assertValidity();\n  return p;\n}\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args: Uint8Array[]): bigint {\n  return modN(bytesToNumberBE(taggedHash('BIP0340/challenge', ...args)));\n}\n\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(privateKey: Hex): Uint8Array {\n  return schnorrGetExtPubKey(privateKey).bytes; // d'=int(sk). Fail if d'=0 or d'\u2265n. Ret bytes(d'\u22C5G)\n}\n\n/**\n * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.\n * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.\n */\nfunction schnorrSign(\n  message: Hex,\n  privateKey: PrivKey,\n  auxRand: Hex = randomBytes(32)\n): Uint8Array {\n  const m = ensureBytes('message', message);\n  const { bytes: px, scalar: d } = schnorrGetExtPubKey(privateKey); // checks for isWithinCurveOrder\n  const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array\n  const t = numTo32b(d ^ bytesToNumberBE(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)\n  const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)\n  const k_ = modN(bytesToNumberBE(rand)); // Let k' = int(rand) mod n\n  if (k_ === _0n) throw new Error('sign failed: k is zero'); // Fail if k' = 0.\n  const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'\u22C5G.\n  const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.\n  const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).\n  sig.set(rx, 0);\n  sig.set(numTo32b(modN(k + e * d)), 32);\n  // If Verify(bytes(P), m, sig) (see below) returns failure, abort\n  if (!schnorrVerify(sig, m, px)) throw new Error('sign: Invalid signature produced');\n  return sig;\n}\n\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature: Hex, message: Hex, publicKey: Hex): boolean {\n  const sig = ensureBytes('signature', signature, 64);\n  const m = ensureBytes('message', message);\n  const pub = ensureBytes('publicKey', publicKey, 32);\n  try {\n    const P = lift_x(bytesToNumberBE(pub)); // P = lift_x(int(pk)); fail if that fails\n    const r = bytesToNumberBE(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r \u2265 p.\n    if (!fe(r)) return false;\n    const s = bytesToNumberBE(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s \u2265 n.\n    if (!ge(s)) return false;\n    const e = challenge(numTo32b(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n\n    const R = GmulAdd(P, s, modN(-e)); // R = s\u22C5G - e\u22C5P\n    if (!R || !R.hasEvenY() || R.toAffine().x !== r) return false; // -eP == (n-e)P\n    return true; // Fail if is_infinite(R) / not has_even_y(R) / x(R) \u2260 r.\n  } catch (error) {\n    return false;\n  }\n}\n\nexport const schnorr = /* @__PURE__ */ (() => ({\n  getPublicKey: schnorrGetPublicKey,\n  sign: schnorrSign,\n  verify: schnorrVerify,\n  utils: {\n    randomPrivateKey: secp256k1.utils.randomPrivateKey,\n    lift_x,\n    pointToBytes,\n    numberToBytesBE,\n    bytesToNumberBE,\n    taggedHash,\n    mod,\n  },\n}))();\n\nconst isoMap = /* @__PURE__ */ (() =>\n  isogenyMap(\n    Fp,\n    [\n      // xNum\n      [\n        '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',\n        '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',\n        '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',\n        '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',\n      ],\n      // xDen\n      [\n        '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',\n        '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',\n        '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n      ],\n      // yNum\n      [\n        '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',\n        '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',\n        '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',\n        '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',\n      ],\n      // yDen\n      [\n        '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',\n        '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',\n        '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',\n        '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n      ],\n    ].map((i) => i.map((j) => BigInt(j))) as [bigint[], bigint[], bigint[], bigint[]]\n  ))();\nconst mapSWU = /* @__PURE__ */ (() =>\n  mapToCurveSimpleSWU(Fp, {\n    A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n    B: BigInt('1771'),\n    Z: Fp.create(BigInt('-11')),\n  }))();\nconst htf = /* @__PURE__ */ (() =>\n  createHasher(\n    secp256k1.ProjectivePoint,\n    (scalars: bigint[]) => {\n      const { x, y } = mapSWU(Fp.create(scalars[0]));\n      return isoMap(x, y);\n    },\n    {\n      DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n      encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n      p: Fp.ORDER,\n      m: 1,\n      k: 128,\n      expand: 'xmd',\n      hash: sha256,\n    }\n  ))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n", "/**\n * Canonicalizes a given object according to RFC 8785 (https://tools.ietf.org/html/rfc8785),\n * which describes JSON Canonicalization Scheme (JCS). This function sorts the keys of the\n * object and its nested objects alphabetically and then returns a stringified version of it.\n * This method handles nested objects, array values, and null values appropriately.\n *\n * @param obj - The object to canonicalize.\n * @returns The stringified version of the input object with its keys sorted alphabetically\n * per RFC 8785.\n */\nexport function canonicalize(obj: { [key: string]: any }): string {\n  /**\n   * Recursively sorts the keys of an object.\n   *\n   * @param obj - The object whose keys are to be sorted.\n   * @returns A new object with sorted keys.\n   */\n  const sortObjKeys = (obj: { [key: string]: any }): { [key: string]: any } => {\n    if (obj !== null && typeof obj === 'object' && !Array.isArray(obj)) {\n      const sortedKeys = Object.keys(obj).sort();\n      const sortedObj: { [key: string]: any } = {};\n      for (const key of sortedKeys) {\n        // Recursively sort keys of nested objects.\n        sortedObj[key] = sortObjKeys(obj[key]);\n      }\n      return sortedObj;\n    }\n    return obj;\n  };\n\n  // Stringify and return the final sorted object.\n  const sortedObj = sortObjKeys(obj);\n  return JSON.stringify(sortedObj);\n}", "import { Convert, removeUndefinedProperties } from '@web5/common';\n\nimport { canonicalize } from './utils.js';\nimport { Sha256 } from '../primitives/sha256.js';\n\n/**\n * Constant defining the prefix for JSON Web Keys (JWK) key URIs in this library.\n *\n * The prefix 'urn:jwk:' makes it explicit that a string represents a JWK, referenced by a\n * {@link https://datatracker.ietf.org/doc/html/rfc3986 | URI} (Uniform Resource Identifier),\n * which ensures consistent key referencing across all Web5 Key Management System (KMS)\n * implementations.\n *\n * These key URIs take the form `urn:jwk:<JWK thumbprint>`, where the\n * {@link https://datatracker.ietf.org/doc/html/rfc7638 | JWK thumbprint}, derived from the JWK, is\n * unique to the key's material, unaffected by the order or optional properties in the JWK.\n */\nexport const KEY_URI_PREFIX_JWK = 'urn:jwk:';\n\n/**\n * JSON Web Key Operations\n *\n * The \"key_ops\" (key operations) parameter identifies the operation(s)\n * for which the key is intended to be used.  The \"key_ops\" parameter is\n * intended for use cases in which public, private, or symmetric keys\n * may be present.\n *\n * Its value is an array of key operation values.  Values defined by\n * {@link https://www.rfc-editor.org/rfc/rfc7517.html#section-4.3 | RFC 7517 Section 4.3} are:\n *\n * - \"decrypt\"    : Decrypt content and validate decryption, if applicable\n * - \"deriveBits\" : Derive bits not to be used as a key\n * - \"deriveKey\"  : Derive key\n * - \"encrypt\"    : Encrypt content\n * - \"sign\"       : Compute digital signature or MAC\n * - \"unwrapKey\"  : Decrypt key and validate decryption, if applicable\n * - \"verify\"     : Verify digital signature or MAC\n * - \"wrapKey\"    : Encrypt key\n *\n * Other values MAY be used.  The key operation values are case-\n * sensitive strings.  Duplicate key operation values MUST NOT be\n * present in the array.  Use of the \"key_ops\" member is OPTIONAL,\n * unless the application requires its presence.\n *\n * The \"use\" and \"key_ops\" JWK members SHOULD NOT be used together;\n * however, if both are used, the information they convey MUST be\n * consistent.  Applications should specify which of these members they\n * use, if either is to be used by the application.\n */\nexport type JwkOperation = 'encrypt' | 'decrypt' | 'sign' | 'verify' | 'deriveKey' | 'deriveBits' | 'wrapKey' | 'unwrapKey';\n\n/**\n * JSON Web Key Use\n *\n * The \"use\" (public key use) parameter identifies the intended use of\n * the public key.  The \"use\" parameter is employed to indicate whether\n * a public key is used for encrypting data or verifying the signature\n * on data.\n *\n * Values defined by {@link https://datatracker.ietf.org/doc/html/rfc7517#section-4.2 | RFC 7517 Section 4.2} are:\n *\n * - \"sig\" (signature)\n * - \"enc\" (encryption)\n *\n * Other values MAY be used.  The \"use\" value is a case-sensitive\n * string.  Use of the \"use\" member is OPTIONAL, unless the application\n * requires its presence.\n *\n * The \"use\" and \"key_ops\" JWK members SHOULD NOT be used together;\n * however, if both are used, the information they convey MUST be\n * consistent.  Applications should specify which of these members they\n * use, if either is to be used by the application.\n *\n * When a key is used to wrap another key and a public key use\n * designation for the first key is desired, the \"enc\" (encryption) key\n * use value is used, since key wrapping is a kind of encryption.  The\n * \"enc\" value is also to be used for public keys used for key agreement\n * operations.\n */\nexport type JwkUse = 'sig' | 'enc' | string;\n\n/**\n * JSON Web Key Types\n */\nexport type JwkType =\n  /**\n   * Elliptic Curve\n   * Used with Elliptic Curve Digital Signature Algorithm (ECDSA) and Elliptic\n   * Curve Diffie-Hellman (ECDH), including secp256k1, P-256, P-384, and P-521.\n   */\n  | 'EC'\n  /**\n   * RSA\n   * Widely used for encryption and digital signatures. RSA keys are used in\n   * various algorithms like RS256, RS384, RS512, etc.\n   */\n  | 'RSA'\n  /**\n   * Octet sequence\n   * Used with symmetric signing (e.g., HMAC HS256, HS512, etc.) and\n   * symmetric encryption (e.g., A256CBC-HS512, A256GCM, etc.) algorithms.\n   */\n  | 'oct'\n  /**\n   * Octet string key pairs (OKP)\n   * A type of public key that is used with algorithms such as EdDSA (Ed25519 and\n   * Ed448 curves) and ECDH (X25519 and X448 curves).\n   */\n  | 'OKP'\n\n/**\n * JSON Web Key Elliptic Curve\n */\nexport type JwkNamedCurves =\n  // P-256 Curve\n  | 'P-256'\n  // P-384 Curve\n  | 'P-384'\n  // P-521 Curve\n  | 'P-521'\n  // Ed25519 signature algorithm key pairs\n  | 'Ed25519'\n  // Ed448 signature algorithm key pairs\n  | 'Ed448'\n  // X25519 function key pairs\n  | 'X25519'\n  // X448 function key pairs\n  | 'X448'\n  // SECG secp256k1 curve\n  | 'secp256k1';\n\n/**\n * JSON Web Key Parameters\n */\n\n/** Parameters used with any \"kty\" (key type) value. */\nexport type JwkParamsAnyKeyType = {\n  /** JWK Algorithm Parameter. The algorithm intended for use with the key. */\n  alg?: string;\n  /** JWK Extractable Parameter */\n  ext?: 'true' | 'false';\n  /** JWK Key Operations Parameter */\n  key_ops?: JwkOperation[];\n  /** JWK Key ID Parameter */\n  kid?: string;\n  /** JWK Key Type Parameter */\n  kty: JwkType;\n  /** JWK Public Key Use Parameter */\n  use?: JwkUse;\n  /** JWK X.509 Certificate Chain Parameter */\n  x5c?: string;\n  /** JWK X.509 Certificate SHA-1 Thumbprint Parameter */\n  x5t?: string;\n  /** JWK X.509 Certificate SHA-256 Thumbprint Parameter */\n  'x5t#S256'?: string;\n  /** JWK X.509 URL Parameter */\n  x5u?: string;\n}\n\n/** Parameters used with \"EC\" (elliptic curve) public keys. */\nexport type JwkParamsEcPublic = Omit<JwkParamsAnyKeyType, 'alg' | 'kty'> & {\n  /**\n   * The algorithm intended for use with the key.\n   * ES256  : ECDSA using P-256 and SHA-256\n   * ES256K : ECDSA using secp256k1 curve and SHA-256\n   * ES384  : ECDSA using P-384 and SHA-384\n   * ES512  : ECDSA using P-521 and SHA-512\n   */\n  alg?: 'ES256' | 'ES256K' | 'ES384' | 'ES512';\n\n  /**\n   * Elliptic Curve key pair.\n   */\n  kty: 'EC';\n\n  /**\n   * The cryptographic curve used with the key.\n   * MUST be present for all EC public keys.\n   */\n  crv: 'secp256k1' | 'P-256' | 'P-384' | 'P-521';\n\n  /**\n   * The x-coordinate for the Elliptic Curve point.\n   * Represented as the base64url encoding of the octet string\n   * representation of the coordinate.\n   * MUST be present for all EC public keys\n   */\n  x: string;\n\n  /**\n   * The y-coordinate for the Elliptic Curve point.\n   * Represented as the base64url encoding of the octet string\n   * representation of the coordinate.\n   * MUST be present only for secp256k1 public keys.\n   */\n  y?: string;\n}\n\n/** Parameters used with \"EC\" (elliptic curve) private keys. */\nexport type JwkParamsEcPrivate = JwkParamsEcPublic & {\n  /**\n   * The d-coordinate for the Elliptic Curve point.\n   * Represented as the base64url encoding of the octet string\n   * representation of the coordinate.\n   * MUST be present for all EC private keys.\n   */\n  d: string;\n}\n\n/** Parameters used with \"OKP\" (octet key pair) public keys. */\nexport type JwkParamsOkpPublic =\n  Omit<JwkParamsAnyKeyType, 'kty' | 'alg' | 'crv'> &\n  Pick<JwkParamsEcPublic, 'x'> & {\n  /**\n   * The algorithm intended for use with the key.\n   * EdDSA: Edwards Curve Digital Signature Algorithm\n   */\n  alg?: 'EdDSA';\n\n  /**\n   * The cryptographic curve used with the key.\n   * MUST be present for all OKP public keys.\n   */\n  crv: 'Ed25519' | 'Ed448' | 'X25519' | 'X448';\n\n  /**\n   * Key type\n   * OKP (Octet Key Pair) is defined for public key algorithms that use octet\n   * strings as private and public keys.\n   */\n  kty: 'OKP';\n}\n\n/** Parameters used with \"OKP\" (octet key pair) private keys. */\nexport type JwkParamsOkpPrivate = JwkParamsOkpPublic & {\n  /**\n   * The d-coordinate for the Edwards Curve point.\n   * Represented as the base64url encoding of the octet string\n   * representation of the coordinate.\n   * MUST be present for all EC private keys.\n   */\n  d: string;\n};\n\n/** Parameters used with \"oct\" (octet sequence) private keys. */\nexport type JwkParamsOctPrivate = Omit<JwkParamsAnyKeyType, 'alg' | 'kty'> & {\n  /**\n   * The algorithm intended for use with the key.\n   * Used with symmetric signing (e.g., HMAC HS256, etc.) and\n   * symmetric encryption (e.g., A256GCM, etc.) algorithms.\n   */\n  alg?:\n    // AES CBC using 128-bit key\n    | 'A128CBC'\n    // AES CBC using 192-bit key\n    | 'A192CBC'\n    // AES CBC using 256-bit key\n    | 'A256CBC'\n    // AES CTR using 128-bit key\n    | 'A128CTR'\n    // AES CTR using 192-bit key\n    | 'A192CTR'\n    // AES CTR using 256-bit key\n    | 'A256CTR'\n    // AES GCM using a 128-bit key\n    | 'A128GCM'\n    // AES GCM using a 192-bit key\n    | 'A192GCM'\n    // AES GCM using a 256-bit key\n    | 'A256GCM'\n    // HMAC using SHA-256\n    | 'HS256'\n    // HMAC using SHA-384\n    | 'HS384'\n    // HMAC using SHA-512\n    | 'HS512'\n\n  /**\n   * The \"k\" (key value) parameter contains the value of the symmetric\n   * (or other single-valued) key.  It is represented as the base64url\n   * encoding of the octet sequence containing the key value.\n   */\n  k: string;\n\n  /**\n   * Key type\n   * oct (Octet Sequence) is defined for symmetric encryption and\n   * symmetric signature algorithms.\n   */\n  kty: 'oct';\n}\n\n/** Parameters Used with \"RSA\" public keys. */\nexport type JwkParamsRsaPublic = Omit<JwkParamsAnyKeyType, 'kty'> & {\n  /** Public exponent for RSA */\n  e: string;\n\n  /**\n   * Key type\n   * RSA is widely used for encryption and digital signatures.\n   */\n  kty: 'RSA';\n\n  /** Modulus for RSA */\n  n: string;\n};\n\n/** Parameters used with \"RSA\" private keys. */\nexport type JwkParamsRsaPrivate = JwkParamsRsaPublic & {\n  /** Private exponent for RSA */\n  d: string;\n  /** First prime factor for RSA */\n  p?: string;\n  /** Second prime factor for RSA */\n  q?: string;\n  /** First factor's CRT exponent for RSA */\n  dp?: string;\n  /** Second factor's CRT exponent for RSA */\n  dq?: string;\n  /** First CRT coefficient for RSA */\n  qi?: string;\n  /** Other primes information (optional in RFC 7518) */\n  oth?: {\n    /** Other primes' factor */\n    r: string;\n    /** Other primes' CRT exponent */\n    d: string;\n    /** Other primes' CRT coefficient */\n    t: string;\n  }[];\n};\n\n/** Parameters used with public keys in JWK format. */\nexport type PublicKeyJwk = JwkParamsEcPublic | JwkParamsOkpPublic | JwkParamsRsaPublic;\n\n/** Parameters used with private keys in JWK format. */\nexport type PrivateKeyJwk = JwkParamsEcPrivate | JwkParamsOkpPrivate | JwkParamsOctPrivate | JwkParamsRsaPrivate;\n\n/**\n * JSON Web Key ({@link https://datatracker.ietf.org/doc/html/rfc7517 | JWK}).\n * \"RSA\", \"EC\", \"OKP\", and \"oct\" key types are supported.\n */\nexport interface Jwk {\n  // Common properties that apply to all key types.\n\n  /** JWK Algorithm Parameter. The algorithm intended for use with the key. */\n  alg?: string;\n  /** JWK Extractable Parameter */\n  ext?: 'true' | 'false';\n  /** JWK Key Operations Parameter */\n  key_ops?: JwkOperation[];\n  /** JWK Key ID Parameter */\n  kid?: string;\n  /** JWK Key Type Parameter */\n  kty: JwkType;\n  /** JWK Public Key Use Parameter */\n  use?: JwkUse;\n  /** JWK X.509 Certificate Chain Parameter */\n  x5c?: string;\n  /** JWK X.509 Certificate SHA-1 Thumbprint Parameter */\n  x5t?: string;\n  /** JWK X.509 Certificate SHA-256 Thumbprint Parameter */\n  'x5t#S256'?: string;\n  /** JWK X.509 URL Parameter */\n  x5u?: string;\n\n  // Elliptic Curve (EC or OKP) public key properties.\n\n  /** The cryptographic curve used with the key. */\n  crv?: string;\n  /** The x-coordinate for the Elliptic Curve point. */\n  x?: string;\n  /** The y-coordinate for the Elliptic Curve point. */\n  y?: string;\n\n  // Symmetric key properties.\n\n  /** The \"k\" (key value) parameter contains the value of the symmetric (or other single-valued) key. */\n  k?: string;\n\n  // RSA public key properties.\n\n  /** Public exponent for RSA */\n  e?: string;\n  /** Modulus for RSA */\n  n?: string;\n  /** First prime factor for RSA */\n  p?: string;\n  /** Second prime factor for RSA */\n  q?: string;\n  /** First factor's CRT exponent for RSA */\n  dp?: string;\n  /** Second factor's CRT exponent for RSA */\n  dq?: string;\n  /** First CRT coefficient for RSA */\n  qi?: string;\n  /** Other primes information (optional in RFC 7518) */\n  oth?: {\n    /** Other primes' factor */\n    r: string;\n    /** Other primes' CRT exponent */\n    d: string;\n    /** Other primes' CRT coefficient */\n    t: string;\n  }[];\n\n  // Elliptic Curve and RSA private key properties.\n\n  /** Private key component for EC, OKP, or RSA keys. */\n  d?: string;\n\n  // Additional public or private properties.\n  [key: string]: unknown;\n}\n\n/**\n * JSON Web Key Set ({@link https://datatracker.ietf.org/doc/html/rfc7517 | JWK Set})\n *\n * @remarks\n * A JWK Set is a JSON object that represents a set of JWKs. The JSON object MUST have a \"keys\"\n * member, with its value being an array of JWKs.\n *\n * Additional members can be present in the JWK Set but member names MUST be unique. If not\n * understood by implementations encountering them, they MUST be ignored. Parameters for\n * representing additional properties of JWK Sets should either be registered in the IANA\n * \"JSON Web Key Set Parameters\" registry or be a value that contains a Collision-Resistant Name.\n */\nexport interface JwkSet {\n  /** Array of JWKs */\n  keys: Jwk[]\n}\n\n/**\n * Computes the thumbprint of a JSON Web Key (JWK) using the method\n * specified in RFC 7638. This function accepts RSA, EC, OKP, and oct keys\n * and returns the thumbprint as a base64url encoded SHA-256 hash of the\n * JWK's required members, serialized and sorted lexicographically.\n *\n * Purpose:\n * - Uniquely Identifying Keys: The thumbprint allows the unique\n *   identification of a specific JWK within a set of JWKs. It provides a\n *   deterministic way to generate a value that can be used as a key\n *   identifier (kid) or to match a specific key.\n *\n * - Simplifying Key Management: In systems where multiple keys are used,\n *   managing and identifying individual keys can become complex. The\n *   thumbprint method simplifies this by creating a standardized, unique\n *   identifier for each key.\n *\n * - Enabling Interoperability: By standardizing the method to compute a\n *   thumbprint, different systems can compute the same thumbprint value for\n *   a given JWK. This enables interoperability among systems that use JWKs.\n *\n * - Secure Comparison: The thumbprint provides a way to securely compare\n *   JWKs to determine if they are equivalent.\n *\n * @example\n * ```ts\n * const jwk: PublicKeyJwk = {\n *   'kty': 'EC',\n *   'crv': 'secp256k1',\n *   'x': '61iPYuGefxotzBdQZtDvv6cWHZmXrTTscY-u7Y2pFZc',\n *   'y': '88nPCVLfrAY9i-wg5ORcwVbHWC_tbeAd1JE2e0co0lU'\n * };\n *\n * const thumbprint = jwkThumbprint(jwk);\n * console.log(`JWK thumbprint: ${thumbprint}`);\n * ```\n *\n * @see {@link https://datatracker.ietf.org/doc/html/rfc7638 | RFC7638} for\n * the specification of JWK thumbprint computation.\n *\n * @param jwk - The JSON Web Key for which the thumbprint will be computed.\n *              This must be an RSA, EC, OKP, or oct key.\n * @returns The thumbprint as a base64url encoded string.\n * @throws Throws an `Error` if the provided key type is unsupported.\n */\nexport async function computeJwkThumbprint({ jwk }: {\n  jwk: Jwk\n}): Promise<string> {\n  /** Step 1 - Normalization: The JWK is normalized to include only specific\n   * members and in lexicographic order.\n   */\n  const keyType = jwk.kty;\n  let normalizedJwk: Jwk;\n  if (keyType === 'EC') {\n    normalizedJwk = { crv: jwk.crv, kty: jwk.kty, x: jwk.x, y: jwk.y };\n  } else if (keyType === 'oct') {\n    normalizedJwk = { k: jwk.k, kty: jwk.kty };\n  } else if (keyType === 'OKP') {\n    normalizedJwk = { crv: jwk.crv, kty: jwk.kty, x: jwk.x };\n  } else if (keyType === 'RSA') {\n    normalizedJwk = { e: jwk.e, kty: jwk.kty, n: jwk.n };\n  } else {\n    throw new Error(`Unsupported key type: ${keyType}`);\n  }\n  removeUndefinedProperties(normalizedJwk);\n\n  /** Step 2 - Serialization: The normalized JWK is serialized to a UTF-8\n   * representation of its JSON encoding. */\n  const serializedJwk = canonicalize(normalizedJwk);\n\n  /** Step 3 - Digest Calculation: A cryptographic hash function\n   * (SHA-256 is recommended) is applied to the serialized JWK,\n   * resulting in the thumbprint. */\n  const utf8Bytes = Convert.string(serializedJwk).toUint8Array();\n  const digest = await Sha256.digest({ data: utf8Bytes });\n\n  // Encode as Base64Url.\n  const thumbprint = Convert.uint8Array(digest).toBase64Url();\n\n  return thumbprint;\n}\n\n/**\n * Checks if the provided object is a valid elliptic curve private key in JWK format.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid EC private JWK; otherwise, false.\n */\nexport function isEcPrivateJwk(obj: unknown): obj is JwkParamsEcPrivate {\n  if (!obj || typeof obj !== 'object') return false;\n  if (!('kty' in obj && 'crv' in obj && 'x' in obj && 'd' in obj)) return false;\n  if (obj.kty !== 'EC') return false;\n  if (typeof obj.d !== 'string') return false;\n  if (typeof obj.x !== 'string') return false;\n  return true;\n}\n\n/**\n * Checks if the provided object is a valid elliptic curve public key in JWK format.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid EC public JWK; otherwise, false.\n */\nexport function isEcPublicJwk(obj: unknown): obj is JwkParamsEcPublic {\n  if (!obj || typeof obj !== 'object') return false;\n  if (!('kty' in obj && 'crv' in obj && 'x' in obj)) return false;\n  if ('d' in obj) return false;\n  if (obj.kty !== 'EC') return false;\n  if (typeof obj.x !== 'string') return false;\n  return true;\n}\n\n/**\n * Checks if the provided object is a valid octet sequence (symmetric key) in JWK format.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid oct private JWK; otherwise, false.\n */\nexport function isOctPrivateJwk(obj: unknown): obj is JwkParamsOctPrivate {\n  if (!obj || typeof obj !== 'object') return false;\n  if (!('kty' in obj && 'k' in obj)) return false;\n  if (obj.kty !== 'oct') return false;\n  if (typeof obj.k !== 'string') return false;\n  return true;\n}\n\n/**\n * Checks if the provided object is a valid octet key pair private key in JWK format.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid OKP private JWK; otherwise, false.\n */\nexport function isOkpPrivateJwk(obj: unknown): obj is JwkParamsOkpPrivate {\n  if (!obj || typeof obj !== 'object') return false;\n  if (!('kty' in obj && 'crv' in obj && 'x' in obj && 'd' in obj)) return false;\n  if (obj.kty !== 'OKP') return false;\n  if (typeof obj.d !== 'string') return false;\n  if (typeof obj.x !== 'string') return false;\n  return true;\n}\n\n/**\n * Checks if the provided object is a valid octet key pair public key in JWK format.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid OKP public JWK; otherwise, false.\n */\nexport function isOkpPublicJwk(obj: unknown): obj is JwkParamsOkpPublic {\n  if (!obj || typeof obj !== 'object') return false;\n  if ('d' in obj) return false;\n  if (!('kty' in obj && 'crv' in obj && 'x' in obj)) return false;\n  if (obj.kty !== 'OKP') return false;\n  if (typeof obj.x !== 'string') return false;\n  return true;\n}\n\n/**\n * Checks if the provided object is a valid private key in JWK format of any supported type.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid private JWK; otherwise, false.\n */\nexport function isPrivateJwk(obj: unknown): obj is PrivateKeyJwk {\n  if (!obj || typeof obj !== 'object') return false;\n\n  const kty = (obj as { kty: string }).kty;\n\n  switch (kty) {\n    case 'EC':\n    case 'OKP':\n    case 'RSA':\n      return 'd' in obj;\n    case 'oct':\n      return 'k' in obj;\n    default:\n      return false;\n  }\n}\n\n/**\n * Checks if the provided object is a valid public key in JWK format of any supported type.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid public JWK; otherwise, false.\n */\nexport function isPublicJwk(obj: unknown): obj is PublicKeyJwk {\n  if (!obj || typeof obj !== 'object') return false;\n\n  const kty = (obj as { kty: string }).kty;\n\n  switch (kty) {\n    case 'EC':\n    case 'OKP':\n      return 'x' in obj && !('d' in obj);\n    case 'RSA':\n      return 'n' in obj && 'e' in obj && !('d' in obj);\n    default:\n      return false;\n  }\n}", "import type { AffinePoint } from '@noble/curves/abstract/weierstrass';\n\nimport { Convert } from '@web5/common';\nimport { sha256 } from '@noble/hashes/sha256';\nimport { secp256k1 } from '@noble/curves/secp256k1';\nimport { numberToBytesBE } from '@noble/curves/abstract/utils';\n\nimport type { Jwk } from '../jose/jwk.js';\nimport type { ComputePublicKeyParams, GetPublicKeyParams, SignParams, VerifyParams } from '../types/params-direct.js';\n\nimport { computeJwkThumbprint, isEcPrivateJwk, isEcPublicJwk } from '../jose/jwk.js';\n\n/**\n * The `Secp256k1` class provides a comprehensive suite of utilities for working with\n * the secp256k1 elliptic curve, commonly used in blockchain and cryptographic applications.\n * This class includes methods for key generation, conversion, signing, verification, and\n * Elliptic Curve Diffie-Hellman (ECDH) key agreement.\n *\n * The class supports conversions between raw byte formats and JSON Web Key (JWK) formats. It\n * adheres to RFC6979 for ECDSA signing and verification and RFC6090 for ECDH.\n *\n * Key Features:\n * - Key Generation: Generate secp256k1 private keys in JWK format.\n * - Key Conversion: Transform keys between raw byte arrays and JWK formats.\n * - Public Key Derivation: Derive public keys from private keys.\n * - ECDH Shared Secret Computation: Securely derive shared secrets using private and public keys.\n * - ECDSA Signing and Verification: Sign data and verify signatures with secp256k1 keys.\n * - Key Validation: Validate the mathematical correctness of secp256k1 keys.\n *\n * The methods in this class are asynchronous, returning Promises to accommodate various\n * JavaScript environments, and use `Uint8Array` for binary data handling.\n *\n * @example\n * ```ts\n * // Key Generation\n * const privateKey = await Secp256k1.generateKey();\n *\n * // Public Key Derivation\n * const publicKey = await Secp256k1.computePublicKey({ key: privateKey });\n * console.log(publicKey === await Secp256k1.getPublicKey({ key: privateKey })); // Output: true\n *\n * // ECDH Shared Secret Computation\n * const sharedSecret = await Secp256k1.sharedSecret({\n *   privateKeyA: privateKey,\n *   publicKeyB: anotherPublicKey\n * });\n *\n * // ECDSA Signing\n * const signature = await Secp256k1.sign({\n *   key: privateKey,\n *   data: new TextEncoder().encode('Message')\n * });\n *\n * // ECDSA Signature Verification\n * const isValid = await Secp256k1.verify({\n *   key: publicKey,\n *   signature: signature,\n *   data: new TextEncoder().encode('Message')\n * });\n *\n * // Key Conversion\n * const publicKeyBytes = await Secp256k1.publicKeyToBytes({ publicKey });\n * const privateKeyBytes = await Secp256k1.privateKeyToBytes({ privateKey });\n * const compressedPublicKey = await Secp256k1.compressPublicKey({ publicKeyBytes });\n * const uncompressedPublicKey = await Secp256k1.decompressPublicKey({ publicKeyBytes });\n *\n * // Key Validation\n * const isPrivateKeyValid = await Secp256k1.validatePrivateKey({ privateKeyBytes });\n * const isPublicKeyValid = await Secp256k1.validatePublicKey({ publicKeyBytes });\n * ```\n */\nexport class Secp256k1 {\n  /**\n   * Adjusts an ECDSA signature to a normalized, low-S form.\n   *\n   * @remarks\n   * All ECDSA signatures, regardless of the curve, consist of two components, `r` and `s`, both of\n   * which are integers. The curve's order (the total number of points on the curve) is denoted by\n   * `n`. In a valid ECDSA signature, both `r` and `s` must be in the range [1, n-1]. However, due\n   * to the mathematical properties of ECDSA, if `(r, s)` is a valid signature, then `(r, n - s)` is\n   * also a valid signature for the same message and public key. In other words, for every\n   * signature, there's a \"mirror\" signature that's equally valid. For these elliptic curves:\n   *\n   * - Low S Signature: A signature where the `s` component is in the lower half of the range,\n   *                    specifically less than or equal to `n/2`.\n   *\n   * - High S Signature: This is where the `s` component is in the upper half of the range, greater\n   *                     than `n/2`.\n   *\n   * The practical implication is that a third-party can forge a second valid signature for the same\n   * message by negating the `s` component of the original signature, without any knowledge of the\n   * private key. This is known as a \"signature malleability\" attack.\n   *\n   * This type of forgery is not a problem in all systems, but it can be an issue in systems that\n   * rely on digital signature uniqueness to ensure transaction integrity. For example, in Bitcoin,\n   * transaction malleability is an issue because it allows for the modification of transaction\n   * identifiers (and potentially, transactions themselves) after they're signed but before they're\n   * confirmed in a block. By enforcing low `s` values, the Bitcoin network reduces the likelihood of\n   * this occurring, making the system more secure and predictable.\n   *\n   * For this reason, it's common practice to normalize ECDSA signatures to a low-S form. This\n   * form is considered standard and preferable in some systems and is known as the \"normalized\"\n   * form of the signature.\n   *\n   * This method takes a signature, and if it's high-S, returns the normalized low-S form. If the\n   * signature is already low-S, it's returned unmodified. It's important to note that this\n   * method does not change the validity of the signature but makes it compliant with systems that\n   * enforce low-S signatures.\n   *\n   * @example\n   * ```ts\n   * const signature = new Uint8Array([...]); // Your ECDSA signature\n   * const adjustedSignature = await Secp256k1.adjustSignatureToLowS({ signature });\n   * // Now 'adjustedSignature' is in the low-S form.\n   * ```\n   *\n   * @param params - The parameters for the signature adjustment.\n   * @param params.signature - The ECDSA signature as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to the adjusted signature in low-S form as a `Uint8Array`.\n   */\n  public static async adjustSignatureToLowS({ signature }: {\n    signature: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Convert the signature to a `secp256k1.Signature` object.\n    const signatureObject = secp256k1.Signature.fromCompact(signature);\n\n    if (signatureObject.hasHighS()) {\n      // Adjust the signature to low-S format if it's high-S.\n      const adjustedSignatureObject = signatureObject.normalizeS();\n\n      // Convert the adjusted signature object back to a byte array.\n      const adjustedSignature = adjustedSignatureObject.toCompactRawBytes();\n\n      return adjustedSignature;\n\n    } else {\n      // Return the unmodified signature if it is already in low-S format.\n      return signature;\n    }\n  }\n\n  /**\n   * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method takes a private key represented as a byte array (Uint8Array) and\n   * converts it into a JWK object. The conversion involves extracting the\n   * elliptic curve point (x and y coordinates) from the private key and encoding\n   * them into base64url format, alongside other JWK parameters.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'EC' for Elliptic Curve.\n   * - `crv`: Curve Name, set to 'secp256k1'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The x-coordinate of the public key point, base64url-encoded.\n   * - `y`: The y-coordinate of the public key point, base64url-encoded.\n   *\n   * This method is useful for converting raw public keys into a standardized\n   * JSON format, facilitating their use in cryptographic operations and making\n   * them easy to share and store.\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // Replace with actual private key bytes\n   * const privateKey = await Secp256k1.bytesToPrivateKey({ privateKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKeyBytes - The raw private key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the private key in JWK format.\n   */\n  public static async bytesToPrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Get the elliptic curve point (x and y coordinates) for the provided private key.\n    const point = await Secp256k1.getCurvePoint({ keyBytes: privateKeyBytes });\n\n    // Construct the private key in JWK format.\n    const privateKey: Jwk = {\n      kty : 'EC',\n      crv : 'secp256k1',\n      d   : Convert.uint8Array(privateKeyBytes).toBase64Url(),\n      x   : Convert.uint8Array(point.x).toBase64Url(),\n      y   : Convert.uint8Array(point.y).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Converts a raw public key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method accepts a public key in a byte array (Uint8Array) format and\n   * transforms it to a JWK object. It involves decoding the elliptic curve point\n   * (x and y coordinates) from the raw public key bytes and encoding them into\n   * base64url format, along with setting appropriate JWK parameters.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'EC' for Elliptic Curve.\n   * - `crv`: Curve Name, set to 'secp256k1'.\n   * - `x`: The x-coordinate of the public key point, base64url-encoded.\n   * - `y`: The y-coordinate of the public key point, base64url-encoded.\n   *\n   * This method is useful for converting raw public keys into a standardized\n   * JSON format, facilitating their use in cryptographic operations and making\n   * them easy to share and store.\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // Replace with actual public key bytes\n   * const publicKey = await Secp256k1.bytesToPublicKey({ publicKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKeyBytes - The raw public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async bytesToPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Get the elliptic curve point (x and y coordinates) for the provided public key.\n    const point = await Secp256k1.getCurvePoint({ keyBytes: publicKeyBytes });\n\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'EC',\n      crv : 'secp256k1',\n      x   : Convert.uint8Array(point.x).toBase64Url(),\n      y   : Convert.uint8Array(point.y).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts a public key to its compressed form.\n   *\n   * @remarks\n   * This method takes a public key represented as a byte array and compresses it. Public key\n   * compression is a process that reduces the size of the public key by removing the y-coordinate,\n   * making it more efficient for storage and transmission. The compressed key retains the same\n   * level of security as the uncompressed key.\n   *\n   * @example\n   * ```ts\n   * const uncompressedPublicKeyBytes = new Uint8Array([...]); // Replace with actual uncompressed public key bytes\n   * const compressedPublicKey = await Secp256k1.compressPublicKey({\n   *   publicKeyBytes: uncompressedPublicKeyBytes\n   * });\n   * ```\n   *\n   * @param params - The parameters for the public key compression.\n   * @param params.publicKeyBytes - The public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the compressed public key as a Uint8Array.\n   */\n  public static async compressPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Decode Weierstrass points from the public key byte array.\n    const point = secp256k1.ProjectivePoint.fromHex(publicKeyBytes);\n\n    // Return the compressed form of the public key.\n    return point.toRawBytes(true);\n  }\n\n  /**\n   * Derives the public key in JWK format from a given private key.\n   *\n   * @remarks\n   * This method takes a private key in JWK format and derives its corresponding public key,\n   * also in JWK format. The derivation process involves converting the private key to a raw\n   * byte array, then computing the elliptic curve point (x and y coordinates) from this private\n   * key. These coordinates are then encoded into base64url format to construct the public key in\n   * JWK format.\n   *\n   * The process ensures that the derived public key correctly corresponds to the given private key,\n   * adhering to the secp256k1 elliptic curve standards. This method is useful in cryptographic\n   * operations where a public key is needed for operations like signature verification, but only\n   * the private key is available.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing a secp256k1 private key\n   * const publicKey = await Secp256k1.computePublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for the public key derivation.\n   * @param params.key - The private key in JWK format from which to derive the public key.\n   *\n   * @returns A Promise that resolves to the derived public key in JWK format.\n   */\n  public static async computePublicKey({ key }:\n    ComputePublicKeyParams\n  ): Promise<Jwk> {\n    // Convert the provided private key to a byte array.\n    const privateKeyBytes  = await Secp256k1.privateKeyToBytes({ privateKey: key });\n\n    // Get the elliptic curve point (x and y coordinates) for the provided private key.\n    const point = await Secp256k1.getCurvePoint({ keyBytes: privateKeyBytes });\n\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'EC',\n      crv : 'secp256k1',\n      x   : Convert.uint8Array(point.x).toBase64Url(),\n      y   : Convert.uint8Array(point.y).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts an ASN.1 DER encoded ECDSA signature to a compact R+S format.\n   *\n   * @remarks\n   * This method is used for converting an ECDSA signature from the ASN.1 DER encoding to the more\n   * compact R+S format. This conversion is often required when dealing with ECDSA signatures in\n   * certain cryptographic standards such as JWS (JSON Web Signature).\n   *\n   * The method decodes the DER-encoded signature, extracts the R and S values, and concatenates\n   * them into a single byte array. This process involves handling the ASN.1 structure to correctly\n   * parse the R and S values, considering padding and integer encoding specifics of DER.\n   *\n   * @example\n   * ```ts\n   * const derSignature = new Uint8Array([...]); // Replace with your DER-encoded signature\n   * const signature = await Secp256k1.convertDerToCompactSignature({ derSignature });\n   * ```\n   *\n   * @param params - The parameters for the signature conversion.\n   * @param params.derSignature - The signature in ASN.1 DER format as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to the signature in compact R+S format as a `Uint8Array`.\n   */\n  public static async convertDerToCompactSignature({ derSignature }: {\n    derSignature: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Convert the DER-encoded signature into a `secp256k1.Signature` object.\n    // This involves parsing the ASN.1 DER structure to extract the R and S components.\n    const signatureObject = secp256k1.Signature.fromDER(derSignature);\n\n    // Convert the signature object into compact R+S format, which concatenates the R and S values\n    // into a single byte array.\n    const compactSignature = signatureObject.toCompactRawBytes();\n\n    return  compactSignature;\n  }\n\n  /**\n   * Converts a public key to its uncompressed form.\n   *\n   * @remarks\n   * This method takes a compressed public key represented as a byte array and decompresses it.\n   * Public key decompression involves reconstructing the y-coordinate from the x-coordinate,\n   * resulting in the full public key. This method is used when the uncompressed key format is\n   * required for certain cryptographic operations or interoperability.\n   *\n   * @example\n   * ```ts\n   * const compressedPublicKeyBytes = new Uint8Array([...]); // Replace with actual compressed public key bytes\n   * const decompressedPublicKey = await Secp256k1.decompressPublicKey({\n   *   publicKeyBytes: compressedPublicKeyBytes\n   * });\n   * ```\n   *\n   * @param params - The parameters for the public key decompression.\n   * @param params.publicKeyBytes - The public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the uncompressed public key as a Uint8Array.\n   */\n  public static async decompressPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Decode Weierstrass points from the public key byte array.\n    const point = secp256k1.ProjectivePoint.fromHex(publicKeyBytes);\n\n    // Return the uncompressed form of the public key.\n    return point.toRawBytes(false);\n  }\n\n  /**\n   * Generates a secp256k1 private key in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method creates a new private key suitable for use with the secp256k1\n   * elliptic curve. The key is generated using cryptographically secure random\n   * number generation to ensure its uniqueness and security. The resulting\n   * private key adheres to the JWK format, specifically tailored for secp256k1,\n   * making it compatible with common cryptographic standards and easy to use in\n   * various cryptographic processes.\n   *\n   * The private key generated by this method includes the following components:\n   * - `kty`: Key Type, set to 'EC' for Elliptic Curve.\n   * - `crv`: Curve Name, set to 'secp256k1'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The x-coordinate of the public key point, derived from the private key, base64url-encoded.\n   * - `y`: The y-coordinate of the public key point, derived from the private key, base64url-encoded.\n   *\n   * The key is returned in a format suitable for direct use in signin and key agreement operations.\n   *\n   * @example\n   * ```ts\n   * const privateKey = await Secp256k1.generateKey();\n   * ```\n   *\n   * @returns A Promise that resolves to the generated private key in JWK format.\n   */\n  public static async generateKey(): Promise<Jwk> {\n    // Generate a random private key.\n    const privateKeyBytes = secp256k1.utils.randomPrivateKey();\n\n    // Convert private key from bytes to JWK format.\n    const privateKey = await Secp256k1.bytesToPrivateKey({ privateKeyBytes });\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Retrieves the public key properties from a given private key in JWK format.\n   *\n   * @remarks\n   * This method extracts the public key portion from a secp256k1 private key in JWK format. It does\n   * so by removing the private key property 'd' and making a shallow copy, effectively yielding the\n   * public key. The method sets the 'kid' (key ID) property using the JWK thumbprint if it is not\n   * already defined. This approach is used under the assumption that a private key in JWK format\n   * always contains the corresponding public key properties.\n   *\n   * Note: This method offers a significant performance advantage, being about 200 times faster\n   * than `computePublicKey()`. However, it does not mathematically validate the private key, nor\n   * does it derive the public key from the private key. It simply extracts existing public key\n   * properties from the private key object. This makes it suitable for scenarios where speed is\n   * critical and the private key's integrity is already assured.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing a secp256k1 private key\n   * const publicKey = await Secp256k1.getPublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key properties.\n   * @param params.key - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n    // Verify the provided JWK represents an elliptic curve (EC) secp256k1 private key.\n    if (!(isEcPrivateJwk(key) && key.crv === 'secp256k1')) {\n      throw new Error(`Secp256k1: The provided key is not a secp256k1 private JWK.`);\n    }\n\n    // Remove the private key property ('d') and make a shallow copy of the provided key.\n    let { d, ...publicKey } = key;\n\n    // If the key ID is undefined, set it to the JWK thumbprint.\n    publicKey.kid ??= await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts a private key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method takes a private key in JWK format and extracts its raw byte representation.\n   * It specifically focuses on the 'd' parameter of the JWK, which represents the private\n   * key component in base64url encoding. The method decodes this value into a byte array.\n   *\n   * This conversion is essential for operations that require the private key in its raw\n   * binary form, such as certain low-level cryptographic operations or when interfacing\n   * with systems and libraries that expect keys in a byte array format.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // An X25519 private key in JWK format\n   * const privateKeyBytes = await Secp256k1.privateKeyToBytes({ privateKey });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKey - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the private key as a Uint8Array.\n   */\n  public static async privateKeyToBytes({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid EC secp256k1 private key.\n    if (!isEcPrivateJwk(privateKey)) {\n      throw new Error(`Secp256k1: The provided key is not a valid EC private key.`);\n    }\n\n    // Decode the provided private key to bytes.\n    const privateKeyBytes = Convert.base64Url(privateKey.d).toUint8Array();\n\n    return privateKeyBytes;\n  }\n\n  /**\n   * Converts a public key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method accepts a public key in JWK format and converts it into its raw binary\n   * form. The conversion process involves decoding the 'x' and 'y' parameters of the JWK\n   * (which represent the x and y coordinates of the elliptic curve point, respectively)\n   * from base64url format into a byte array. The method then concatenates these values,\n   * along with a prefix indicating the key format, to form the full public key.\n   *\n   * This function is particularly useful for use cases where the public key is needed\n   * in its raw byte format, such as for certain cryptographic operations or when\n   * interfacing with systems that require raw key formats.\n   *\n   * @example\n   * ```ts\n   * const publicKey = { ... }; // A Jwk public key object\n   * const publicKeyBytes = await Secp256k1.publicKeyToBytes({ publicKey });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKey - The public key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key as a Uint8Array.\n   */\n  public static async publicKeyToBytes({ publicKey }: {\n    publicKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid EC secp256k1 public key, which must have a 'y' value.\n    if (!(isEcPublicJwk(publicKey) && publicKey.y)) {\n      throw new Error(`Secp256k1: The provided key is not a valid EC public key.`);\n    }\n\n    // Decode the provided public key to bytes.\n    const prefix = new Uint8Array([0x04]); // Designates an uncompressed key.\n    const x = Convert.base64Url(publicKey.x).toUint8Array();\n    const y = Convert.base64Url(publicKey.y).toUint8Array();\n\n    // Concatenate the prefix, x-coordinate, and y-coordinate as a single byte array.\n    const publicKeyBytes = new Uint8Array([...prefix, ...x, ...y]);\n\n    return publicKeyBytes;\n  }\n\n  /**\n   * Computes an RFC6090-compliant Elliptic Curve Diffie-Hellman (ECDH) shared secret\n   * using secp256k1 private and public keys in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method facilitates the ECDH key agreement protocol, which is a method of securely\n   * deriving a shared secret between two parties based on their private and public keys.\n   * It takes the private key of one party (privateKeyA) and the public key of another\n   * party (publicKeyB) to compute a shared secret. The shared secret is derived from the\n   * x-coordinate of the elliptic curve point resulting from the multiplication of the\n   * public key with the private key.\n   *\n   * Note: When performing Elliptic Curve Diffie-Hellman (ECDH) key agreement,\n   * the resulting shared secret is a point on the elliptic curve, which\n   * consists of an x-coordinate and a y-coordinate. With a 256-bit curve like\n   * secp256k1, each of these coordinates is 32 bytes (256 bits) long. However,\n   * in the ECDH process, it's standard practice to use only the x-coordinate\n   * of the shared secret point as the resulting shared key. This is because\n   * the y-coordinate does not add to the entropy of the key, and both parties\n   * can independently compute the x-coordinate.  Consquently, this implementation\n   * omits the y-coordinate for simplicity and standard compliance.\n   *\n   * @example\n   * ```ts\n   * const privateKeyA = { ... }; // A Jwk private key object for party A\n   * const publicKeyB = { ... }; // A Jwk public key object for party B\n   * const sharedSecret = await Secp256k1.sharedSecret({\n   *   privateKeyA,\n   *   publicKeyB\n   * });\n   * ```\n   *\n   * @param params - The parameters for the shared secret computation.\n   * @param params.privateKeyA - The private key in JWK format of one party.\n   * @param params.publicKeyB - The public key in JWK format of the other party.\n   *\n   * @returns A Promise that resolves to the computed shared secret as a Uint8Array.\n   */\n  public static async sharedSecret({ privateKeyA, publicKeyB }: {\n    privateKeyA: Jwk;\n    publicKeyB: Jwk;\n  }): Promise<Uint8Array> {\n    // Ensure that keys from the same key pair are not specified.\n    if ('x' in privateKeyA && 'x' in publicKeyB && privateKeyA.x === publicKeyB.x) {\n      throw new Error(`Secp256k1: ECDH shared secret cannot be computed from a single key pair's public and private keys.`);\n    }\n\n    // Convert the provided private and public keys to bytes.\n    const privateKeyABytes = await Secp256k1.privateKeyToBytes({ privateKey: privateKeyA });\n    const publicKeyBBytes = await Secp256k1.publicKeyToBytes({ publicKey: publicKeyB });\n\n    // Compute the compact representation shared secret between the public and private keys.\n    const sharedSecret = secp256k1.getSharedSecret(privateKeyABytes, publicKeyBBytes, true);\n\n    // Remove the leading byte that indicates the sign of the y-coordinate\n    // of the point on the elliptic curve.  See note above.\n    return sharedSecret.slice(1);\n  }\n\n  /**\n   * Generates an RFC6979-compliant ECDSA signature of given data using a secp256k1 private key.\n   *\n   * @remarks\n   * This method signs the provided data with a specified private key using the ECDSA\n   * (Elliptic Curve Digital Signature Algorithm) signature algorithm, as defined in RFC6979.\n   * The data to be signed is first hashed using the SHA-256 algorithm, and this hash is then\n   * signed using the private key. The output is a digital signature in the form of a\n   * Uint8Array, which uniquely corresponds to both the data and the private key used for signing.\n   *\n   * This method is commonly used in cryptographic applications to ensure data integrity and\n   * authenticity. The signature can later be verified by parties with access to the corresponding\n   * public key, ensuring that the data has not been tampered with and was indeed signed by the\n   * holder of the private key.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage'); // Data to be signed\n   * const privateKey = { ... }; // A Jwk object representing a secp256k1 private key\n   * const signature = await Secp256k1.sign({\n   *   key: privateKey,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.key - The private key to use for signing, represented in JWK format.\n   * @param params.data - The data to sign, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the signature as a Uint8Array.\n   */\n  public static async sign({ data, key }:\n    SignParams\n  ): Promise<Uint8Array> {\n    // Convert the private key from JWK format to bytes.\n    const privateKeyBytes = await Secp256k1.privateKeyToBytes({ privateKey: key });\n\n    // Generate a digest of the data using the SHA-256 hash function.\n    const digest = sha256(data);\n\n    // Sign the provided data using the ECDSA algorithm.\n    // The `secp256k1.sign` operation returns a signature object with { r, s, recovery } properties.\n    const signatureObject = secp256k1.sign(digest, privateKeyBytes);\n\n    // Convert the signature object to Uint8Array.\n    const signature = signatureObject.toCompactRawBytes();\n\n    return signature;\n  }\n\n  /**\n   * Validates a given private key to ensure its compliance with the secp256k1 curve standards.\n   *\n   * @remarks\n   * This method checks whether a provided private key is a valid 32-byte number and falls within\n   * the range defined by the secp256k1 curve's order. It is essential for ensuring the private\n   * key's mathematical correctness in the context of secp256k1-based cryptographic operations.\n   *\n   * Note that this validation strictly pertains to the key's format and numerical validity; it does\n   * not assess whether the key corresponds to a known entity or its security status (e.g., whether\n   * it has been compromised).\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // A 32-byte private key\n   * const isValid = await Secp256k1.validatePrivateKey({ privateKeyBytes });\n   * console.log(isValid); // true or false based on the key's validity\n   * ```\n   *\n   * @param params - The parameters for the key validation.\n   * @param params.privateKeyBytes - The private key to validate, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating whether the private key is valid.\n   */\n  public static async validatePrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<boolean> {\n    return secp256k1.utils.isValidPrivateKey(privateKeyBytes);\n  }\n\n  /**\n   * Validates a given public key to confirm its mathematical correctness on the secp256k1 curve.\n   *\n   * @remarks\n   * This method checks if the provided public key represents a valid point on the secp256k1 curve.\n   * It decodes the key's Weierstrass points (x and y coordinates) and verifies their validity\n   * against the curve's parameters. A valid point must lie on the curve and meet specific\n   * mathematical criteria defined by the curve's equation.\n   *\n   * It's important to note that this method does not verify the key's ownership or whether it has\n   * been compromised; it solely focuses on the key's adherence to the curve's mathematical\n   * principles.\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // A public key in byte format\n   * const isValid = await Secp256k1.validatePublicKey({ publicKeyBytes });\n   * console.log(isValid); // true if the key is valid on the secp256k1 curve, false otherwise\n   * ```\n   *\n   * @param params - The parameters for the key validation.\n   * @param params.publicKeyBytes - The public key to validate, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating the public key's validity on\n   *          the secp256k1 curve.\n   */\n  public static async validatePublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<boolean> {\n    try {\n      // Decode Weierstrass points from key bytes.\n      const point = secp256k1.ProjectivePoint.fromHex(publicKeyBytes);\n\n      // Check if points are on the Short Weierstrass curve.\n      point.assertValidity();\n\n    } catch(error: any) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Verifies an RFC6979-compliant ECDSA signature against given data and a secp256k1 public key.\n   *\n   * @remarks\n   * This method validates a digital signature to ensure that it was generated by the holder of the\n   * corresponding private key and that the signed data has not been altered. The signature\n   * verification is performed using the ECDSA (Elliptic Curve Digital Signature Algorithm) as\n   * specified in RFC6979. The data to be verified is first hashed using the SHA-256 algorithm, and\n   * this hash is then used along with the public key to verify the signature.\n   *\n   * The method returns a boolean value indicating whether the signature is valid. A valid signature\n   * proves that the signed data was indeed signed by the owner of the private key corresponding to\n   * the provided public key and that the data has not been tampered with since it was signed.\n   *\n   * Note: The verification process does not consider the malleability of low-s signatures, which\n   * may be relevant in certain contexts, such as Bitcoin transactions.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage'); // Data that was signed\n   * const publicKey = { ... }; // Public key in JWK format corresponding to the private key that signed the data\n   * const signature = new Uint8Array([...]); // Signature to verify\n   * const isSignatureValid = await Secp256k1.verify({\n   *   key: publicKey,\n   *   signature,\n   *   data\n   * });\n   * console.log(isSignatureValid); // true if the signature is valid, false otherwise\n   * ```\n   *\n   * @param params - The parameters for the signature verification.\n   * @param params.key - The public key used for verification, represented in JWK format.\n   * @param params.signature - The signature to verify, represented as a Uint8Array.\n   * @param params.data - The data that was signed, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating whether the signature is valid.\n   */\n  public static async verify({ key, signature, data }:\n    VerifyParams\n  ): Promise<boolean> {\n    // Convert the public key from JWK format to bytes.\n    const publicKeyBytes = await Secp256k1.publicKeyToBytes({ publicKey: key });\n\n    // Generate a digest of the data using the SHA-256 hash function.\n    const digest = sha256(data);\n\n    /** Perform the verification of the signature.\n     * This verify operation has the malleability check disabled. Guaranteed support\n     * for low-s signatures across languages is unlikely especially in the context\n     * of SSI. Notable Cloud KMS providers do not natively support it either. It is\n     * also worth noting that low-s signatures are a requirement for Bitcoin. */\n    const isValid = secp256k1.verify(signature, digest, publicKeyBytes, { lowS: false });\n\n    return isValid;\n  }\n\n  /**\n   * Returns the elliptic curve point (x and y coordinates) for a given secp256k1 key.\n   *\n   * @remarks\n   * This method extracts the elliptic curve point from a given secp256k1 key, whether\n   * it's a private or a public key. For a private key, the method first computes the\n   * corresponding public key and then extracts the x and y coordinates. For a public key,\n   * it directly returns these coordinates. The coordinates are represented as Uint8Array.\n   *\n   * The x and y coordinates represent the key's position on the elliptic curve and can be\n   * used in various cryptographic operations, such as digital signatures or key agreement\n   * protocols.\n   *\n   * @example\n   * ```ts\n   * // For a private key\n   * const privateKey = new Uint8Array([...]); // A 32-byte private key\n   * const { x: xFromPrivateKey, y: yFromPrivateKey } = await Secp256k1.getCurvePoint({ keyBytes: privateKey });\n   *\n   * // For a public key\n   * const publicKey = new Uint8Array([...]); // A 33-byte or 65-byte public key\n   * const { x: xFromPublicKey, y: yFromPublicKey } = await Secp256k1.getCurvePoint({ keyBytes: publicKey });\n   * ```\n   *\n   * @param params - The parameters for the curve point decoding operation.\n   * @param params.keyBytes - The key for which to get the elliptic curve point.\n   *                          Can be either a private key or a public key.\n   *                          The key should be passed as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to an object with properties 'x' and 'y',\n   *          each being a Uint8Array representing the x and y coordinates of the key point on the\n   *          elliptic curve.\n   */\n  private static async getCurvePoint({ keyBytes }: {\n    keyBytes: Uint8Array;\n  }): Promise<AffinePoint<Uint8Array>> {\n    // If key is a private key, first compute the public key.\n    if (keyBytes.byteLength === 32) {\n      keyBytes = secp256k1.getPublicKey(keyBytes);\n    }\n\n    // Decode Weierstrass affine point from key bytes.\n    const point = secp256k1.ProjectivePoint.fromHex(keyBytes);\n\n    // Get x- and y-coordinate values and convert to Uint8Array.\n    const x = numberToBytesBE(point.x, 32);\n    const y = numberToBytesBE(point.y, 32);\n\n    return { x, y };\n  }\n}", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { createCurve } from './_shortw_utils.js';\nimport { sha256 } from '@noble/hashes/sha256';\nimport { Field } from './abstract/modular.js';\nimport { mapToCurveSimpleSWU } from './abstract/weierstrass.js';\nimport { createHasher } from './abstract/hash-to-curve.js';\n\n// NIST secp256r1 aka p256\n// https://www.secg.org/sec2-v2.pdf, https://neuromancer.sk/std/nist/P-256\n\nconst Fp = Field(BigInt('0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff'));\nconst CURVE_A = Fp.create(BigInt('-3'));\nconst CURVE_B = BigInt('0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b');\n\n// prettier-ignore\nexport const p256 = createCurve({\n  a: CURVE_A, // Equation params: a, b\n  b: CURVE_B,\n  Fp, // Field: 2n**224n * (2n**32n-1n) + 2n**192n + 2n**96n-1n\n  // Curve order, total count of valid points in the field\n  n: BigInt('0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551'),\n  // Base (generator) point (x, y)\n  Gx: BigInt('0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296'),\n  Gy: BigInt('0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5'),\n  h: BigInt(1),\n  lowS: false,\n} as const, sha256);\nexport const secp256r1 = p256;\n\nconst mapSWU = /* @__PURE__ */ (() =>\n  mapToCurveSimpleSWU(Fp, {\n    A: CURVE_A,\n    B: CURVE_B,\n    Z: Fp.create(BigInt('-10')),\n  }))();\n\nconst htf = /* @__PURE__ */ (() =>\n  createHasher(secp256r1.ProjectivePoint, (scalars: bigint[]) => mapSWU(scalars[0]), {\n    DST: 'P256_XMD:SHA-256_SSWU_RO_',\n    encodeDST: 'P256_XMD:SHA-256_SSWU_NU_',\n    p: Fp.ORDER,\n    m: 1,\n    k: 128,\n    expand: 'xmd',\n    hash: sha256,\n  }))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n", "import type { AffinePoint } from '@noble/curves/abstract/weierstrass';\n\nimport { Convert } from '@web5/common';\nimport { sha256 } from '@noble/hashes/sha256';\nimport { secp256r1 } from '@noble/curves/p256';\nimport { numberToBytesBE } from '@noble/curves/abstract/utils';\n\nimport type { Jwk } from '../jose/jwk.js';\nimport type { ComputePublicKeyParams, GetPublicKeyParams, SignParams, VerifyParams } from '../types/params-direct.js';\n\nimport { computeJwkThumbprint, isEcPrivateJwk, isEcPublicJwk } from '../jose/jwk.js';\n\n/**\n * The `Secp256r1` class provides a comprehensive suite of utilities for working with\n * the secp256r1 (aka P-256) elliptic curve, commonly used in blockchain and cryptographic\n * applications. This class includes methods for key generation, conversion, signing, verification,\n * and Elliptic Curve Diffie-Hellman (ECDH) key agreement.\n *\n * The class supports conversions between raw byte formats and JSON Web Key (JWK) formats. It\n * adheres to RFC6979 for ECDSA signing and verification and RFC6090 for ECDH.\n *\n * Key Features:\n * - Key Generation: Generate secp256r1 private keys in JWK format.\n * - Key Conversion: Transform keys between raw byte arrays and JWK formats.\n * - Public Key Derivation: Derive public keys from private keys.\n * - ECDH Shared Secret Computation: Securely derive shared secrets using private and public keys.\n * - ECDSA Signing and Verification: Sign data and verify signatures with secp256r1 keys.\n * - Key Validation: Validate the mathematical correctness of secp256r1 keys.\n *\n * The methods in this class are asynchronous, returning Promises to accommodate various\n * JavaScript environments, and use `Uint8Array` for binary data handling.\n *\n * @example\n * ```ts\n * // Key Generation\n * const privateKey = await Secp256r1.generateKey();\n *\n * // Public Key Derivation\n * const publicKey = await Secp256r1.computePublicKey({ key: privateKey });\n * console.log(publicKey === await Secp256r1.getPublicKey({ key: privateKey })); // Output: true\n *\n * // ECDH Shared Secret Computation\n * const sharedSecret = await Secp256r1.sharedSecret({\n *   privateKeyA: privateKey,\n *   publicKeyB: anotherPublicKey\n * });\n *\n * // ECDSA Signing\n * const signature = await Secp256r1.sign({\n *   key: privateKey,\n *   data: new TextEncoder().encode('Message')\n * });\n *\n * // ECDSA Signature Verification\n * const isValid = await Secp256r1.verify({\n *   key: publicKey,\n *   signature: signature,\n *   data: new TextEncoder().encode('Message')\n * });\n *\n * // Key Conversion\n * const publicKeyBytes = await Secp256r1.publicKeyToBytes({ publicKey });\n * const privateKeyBytes = await Secp256r1.privateKeyToBytes({ privateKey });\n * const compressedPublicKey = await Secp256r1.compressPublicKey({ publicKeyBytes });\n * const uncompressedPublicKey = await Secp256r1.decompressPublicKey({ publicKeyBytes });\n *\n * // Key Validation\n * const isPrivateKeyValid = await Secp256r1.validatePrivateKey({ privateKeyBytes });\n * const isPublicKeyValid = await Secp256r1.validatePublicKey({ publicKeyBytes });\n * ```\n */\nexport class Secp256r1 {\n/**\n   * Adjusts an ECDSA signature to a normalized, low-S form.\n   *\n   * @remarks\n   * All ECDSA signatures, regardless of the curve, consist of two components, `r` and `s`, both of\n   * which are integers. The curve's order (the total number of points on the curve) is denoted by\n   * `n`. In a valid ECDSA signature, both `r` and `s` must be in the range [1, n-1]. However, due\n   * to the mathematical properties of ECDSA, if `(r, s)` is a valid signature, then `(r, n - s)` is\n   * also a valid signature for the same message and public key. In other words, for every\n   * signature, there's a \"mirror\" signature that's equally valid. For these elliptic curves:\n   *\n   * - Low S Signature: A signature where the `s` component is in the lower half of the range,\n   *                    specifically less than or equal to `n/2`.\n   *\n   * - High S Signature: This is where the `s` component is in the upper half of the range, greater\n   *                     than `n/2`.\n   *\n   * The practical implication is that a third-party can forge a second valid signature for the same\n   * message by negating the `s` component of the original signature, without any knowledge of the\n   * private key. This is known as a \"signature malleability\" attack.\n   *\n   * This type of forgery is not a problem in all systems, but it can be an issue in systems that\n   * rely on digital signature uniqueness to ensure transaction integrity. For example, in Bitcoin,\n   * transaction malleability is an issue because it allows for the modification of transaction\n   * identifiers (and potentially, transactions themselves) after they're signed but before they're\n   * confirmed in a block. By enforcing low `s` values, the Bitcoin network reduces the likelihood of\n   * this occurring, making the system more secure and predictable.\n   *\n   * For this reason, it's common practice to normalize ECDSA signatures to a low-S form. This\n   * form is considered standard and preferable in some systems and is known as the \"normalized\"\n   * form of the signature.\n   *\n   * This method takes a signature, and if it's high-S, returns the normalized low-S form. If the\n   * signature is already low-S, it's returned unmodified. It's important to note that this\n   * method does not change the validity of the signature but makes it compliant with systems that\n   * enforce low-S signatures.\n   *\n   * @example\n   * ```ts\n   * const signature = new Uint8Array([...]); // Your ECDSA signature\n   * const adjustedSignature = await Secp256r1.adjustSignatureToLowS({ signature });\n   * // Now 'adjustedSignature' is in the low-S form.\n   * ```\n   *\n   * @param params - The parameters for the signature adjustment.\n   * @param params.signature - The ECDSA signature as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to the adjusted signature in low-S form as a `Uint8Array`.\n   */\n  public static async adjustSignatureToLowS({ signature }: {\n    signature: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Convert the signature to a `Secp256r1.Signature` object.\n    const signatureObject = secp256r1.Signature.fromCompact(signature);\n\n    if (signatureObject.hasHighS()) {\n      // Adjust the signature to low-S format if it's high-S.\n      const adjustedSignatureObject = signatureObject.normalizeS();\n\n      // Convert the adjusted signature object back to a byte array.\n      const adjustedSignature = adjustedSignatureObject.toCompactRawBytes();\n\n      return adjustedSignature;\n\n    } else {\n      // Return the unmodified signature if it is already in low-S format.\n      return signature;\n    }\n  }\n\n  /**\n   * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method takes a private key represented as a byte array (Uint8Array) and\n   * converts it into a JWK object. The conversion involves extracting the\n   * elliptic curve point (x and y coordinates) from the private key and encoding\n   * them into base64url format, alongside other JWK parameters.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'EC' for Elliptic Curve.\n   * - `crv`: Curve Name, set to 'P-256'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The x-coordinate of the public key point, base64url-encoded.\n   * - `y`: The y-coordinate of the public key point, base64url-encoded.\n   *\n   * This method is useful for converting raw public keys into a standardized\n   * JSON format, facilitating their use in cryptographic operations and making\n   * them easy to share and store.\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // Replace with actual private key bytes\n   * const privateKey = await Secp256r1.bytesToPrivateKey({ privateKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKeyBytes - The raw private key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the private key in JWK format.\n   */\n  public static async bytesToPrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Get the elliptic curve points (x and y coordinates) for the provided private key.\n    const point = await Secp256r1.getCurvePoint({ keyBytes: privateKeyBytes });\n\n    // Construct the private key in JWK format.\n    const privateKey: Jwk = {\n      kty : 'EC',\n      crv : 'P-256',\n      d   : Convert.uint8Array(privateKeyBytes).toBase64Url(),\n      x   : Convert.uint8Array(point.x).toBase64Url(),\n      y   : Convert.uint8Array(point.y).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Converts a raw public key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method accepts a public key in a byte array (Uint8Array) format and\n   * transforms it to a JWK object. It involves decoding the elliptic curve point\n   * (x and y coordinates) from the raw public key bytes and encoding them into\n   * base64url format, along with setting appropriate JWK parameters.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'EC' for Elliptic Curve.\n   * - `crv`: Curve Name, set to 'P-256'.\n   * - `x`: The x-coordinate of the public key point, base64url-encoded.\n   * - `y`: The y-coordinate of the public key point, base64url-encoded.\n   *\n   * This method is useful for converting raw public keys into a standardized\n   * JSON format, facilitating their use in cryptographic operations and making\n   * them easy to share and store.\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // Replace with actual public key bytes\n   * const publicKey = await Secp256r1.bytesToPublicKey({ publicKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKeyBytes - The raw public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async bytesToPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Get the elliptic curve point (x and y coordinates) for the provided public key.\n    const point = await Secp256r1.getCurvePoint({ keyBytes: publicKeyBytes });\n\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'EC',\n      crv : 'P-256',\n      x   : Convert.uint8Array(point.x).toBase64Url(),\n      y   : Convert.uint8Array(point.y).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts a public key to its compressed form.\n   *\n   * @remarks\n   * This method takes a public key represented as a byte array and compresses it. Public key\n   * compression is a process that reduces the size of the public key by removing the y-coordinate,\n   * making it more efficient for storage and transmission. The compressed key retains the same\n   * level of security as the uncompressed key.\n   *\n   * @example\n   * ```ts\n   * const uncompressedPublicKeyBytes = new Uint8Array([...]); // Replace with actual uncompressed public key bytes\n   * const compressedPublicKey = await Secp256r1.compressPublicKey({\n   *   publicKeyBytes: uncompressedPublicKeyBytes\n   * });\n   * ```\n   *\n   * @param params - The parameters for the public key compression.\n   * @param params.publicKeyBytes - The public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the compressed public key as a Uint8Array.\n   */\n  public static async compressPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Decode Weierstrass points from the public key byte array.\n    const point = secp256r1.ProjectivePoint.fromHex(publicKeyBytes);\n\n    // Return the compressed form of the public key.\n    return point.toRawBytes(true);\n  }\n\n  /**\n   * Derives the public key in JWK format from a given private key.\n   *\n   * @remarks\n   * This method takes a private key in JWK format and derives its corresponding public key,\n   * also in JWK format. The derivation process involves converting the private key to a raw\n   * byte array, then computing the elliptic curve point (x and y coordinates) from this private\n   * key. These coordinates are then encoded into base64url format to construct the public key in\n   * JWK format.\n   *\n   * The process ensures that the derived public key correctly corresponds to the given private key,\n   * adhering to the secp256r1 elliptic curve standards. This method is useful in cryptographic\n   * operations where a public key is needed for operations like signature verification, but only\n   * the private key is available.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing a secp256r1 private key\n   * const publicKey = await Secp256r1.computePublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for the public key derivation.\n   * @param params.key - The private key in JWK format from which to derive the public key.\n   *\n   * @returns A Promise that resolves to the derived public key in JWK format.\n   */\n  public static async computePublicKey({ key }:\n    ComputePublicKeyParams\n  ): Promise<Jwk> {\n    // Convert the provided private key to a byte array.\n    const privateKeyBytes  = await Secp256r1.privateKeyToBytes({ privateKey: key });\n\n    // Get the elliptic curve point (x and y coordinates) for the provided private key.\n    const point = await Secp256r1.getCurvePoint({ keyBytes: privateKeyBytes });\n\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'EC',\n      crv : 'P-256',\n      x   : Convert.uint8Array(point.x).toBase64Url(),\n      y   : Convert.uint8Array(point.y).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts an ASN.1 DER encoded ECDSA signature to a compact R+S format.\n   *\n   * @remarks\n   * This method is used for converting an ECDSA signature from the ASN.1 DER encoding to the more\n   * compact R+S format. This conversion is often required when dealing with ECDSA signatures in\n   * certain cryptographic standards such as JWS (JSON Web Signature).\n   *\n   * The method decodes the DER-encoded signature, extracts the R and S values, and concatenates\n   * them into a single byte array. This process involves handling the ASN.1 structure to correctly\n   * parse the R and S values, considering padding and integer encoding specifics of DER.\n   *\n   * @example\n   * ```ts\n   * const derSignature = new Uint8Array([...]); // Replace with your DER-encoded signature\n   * const signature = await Secp256r1.convertDerToCompactSignature({ derSignature });\n   * ```\n   *\n   * @param params - The parameters for the signature conversion.\n   * @param params.derSignature - The signature in ASN.1 DER format as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to the signature in compact R+S format as a `Uint8Array`.\n   */\n  public static async convertDerToCompactSignature({ derSignature }: {\n    derSignature: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Convert the DER-encoded signature into a `Secp256r1.Signature` object.\n    // This involves parsing the ASN.1 DER structure to extract the R and S components.\n    const signatureObject = secp256r1.Signature.fromDER(derSignature);\n\n    // Convert the signature object into compact R+S format, which concatenates the R and S values\n    // into a single byte array.\n    const compactSignature = signatureObject.toCompactRawBytes();\n\n    return  compactSignature;\n  }\n\n  /**\n   * Converts a public key to its uncompressed form.\n   *\n   * @remarks\n   * This method takes a compressed public key represented as a byte array and decompresses it.\n   * Public key decompression involves reconstructing the y-coordinate from the x-coordinate,\n   * resulting in the full public key. This method is used when the uncompressed key format is\n   * required for certain cryptographic operations or interoperability.\n   *\n   * @example\n   * ```ts\n   * const compressedPublicKeyBytes = new Uint8Array([...]); // Replace with actual compressed public key bytes\n   * const decompressedPublicKey = await Secp256r1.decompressPublicKey({\n   *   publicKeyBytes: compressedPublicKeyBytes\n   * });\n   * ```\n   *\n   * @param params - The parameters for the public key decompression.\n   * @param params.publicKeyBytes - The public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the uncompressed public key as a Uint8Array.\n   */\n  public static async decompressPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Decode Weierstrass points from the public key byte array.\n    const point = secp256r1.ProjectivePoint.fromHex(publicKeyBytes);\n\n    // Return the uncompressed form of the public key.\n    return point.toRawBytes(false);\n  }\n\n  /**\n   * Generates a secp256r1 private key in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method creates a new private key suitable for use with the secp256r1\n   * elliptic curve. The key is generated using cryptographically secure random\n   * number generation to ensure its uniqueness and security. The resulting\n   * private key adheres to the JWK format, specifically tailored for secp256r1,\n   * making it compatible with common cryptographic standards and easy to use in\n   * various cryptographic processes.\n   *\n   * The private key generated by this method includes the following components:\n   * - `kty`: Key Type, set to 'EC' for Elliptic Curve.\n   * - `crv`: Curve Name, set to 'P-256'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The x-coordinate of the public key point, derived from the private key, base64url-encoded.\n   * - `y`: The y-coordinate of the public key point, derived from the private key, base64url-encoded.\n   *\n   * The key is returned in a format suitable for direct use in signin and key agreement operations.\n   *\n   * @example\n   * ```ts\n   * const privateKey = await Secp256r1.generateKey();\n   * ```\n   *\n   * @returns A Promise that resolves to the generated private key in JWK format.\n   */\n  public static async generateKey(): Promise<Jwk> {\n    // Generate a random private key.\n    const privateKeyBytes = secp256r1.utils.randomPrivateKey();\n\n    // Convert private key from bytes to JWK format.\n    const privateKey = await Secp256r1.bytesToPrivateKey({ privateKeyBytes });\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Retrieves the public key properties from a given private key in JWK format.\n   *\n   * @remarks\n   * This method extracts the public key portion from a secp256r1 private key in JWK format. It does\n   * so by removing the private key property 'd' and making a shallow copy, effectively yielding the\n   * public key. The method sets the 'kid' (key ID) property using the JWK thumbprint if it is not\n   * already defined. This approach is used under the assumption that a private key in JWK format\n   * always contains the corresponding public key properties.\n   *\n   * Note: This method offers a significant performance advantage, being about 200 times faster\n   * than `computePublicKey()`. However, it does not mathematically validate the private key, nor\n   * does it derive the public key from the private key. It simply extracts existing public key\n   * properties from the private key object. This makes it suitable for scenarios where speed is\n   * critical and the private key's integrity is already assured.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing a secp256r1 private key\n   * const publicKey = await Secp256r1.getPublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key properties.\n   * @param params.key - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n    // Verify the provided JWK represents an elliptic curve (EC) secp256r1 private key.\n    if (!(isEcPrivateJwk(key) && key.crv === 'P-256')) {\n      throw new Error(`Secp256r1: The provided key is not a 'P-256' private JWK.`);\n    }\n\n    // Remove the private key property ('d') and make a shallow copy of the provided key.\n    let { d, ...publicKey } = key;\n\n    // If the key ID is undefined, set it to the JWK thumbprint.\n    publicKey.kid ??= await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts a private key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method takes a private key in JWK format and extracts its raw byte representation.\n   * It specifically focuses on the 'd' parameter of the JWK, which represents the private\n   * key component in base64url encoding. The method decodes this value into a byte array.\n   *\n   * This conversion is essential for operations that require the private key in its raw\n   * binary form, such as certain low-level cryptographic operations or when interfacing\n   * with systems and libraries that expect keys in a byte array format.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // An X25519 private key in JWK format\n   * const privateKeyBytes = await Secp256r1.privateKeyToBytes({ privateKey });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKey - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the private key as a Uint8Array.\n   */\n  public static async privateKeyToBytes({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid EC P-256 private key.\n    if (!isEcPrivateJwk(privateKey)) {\n      throw new Error(`Secp256r1: The provided key is not a valid EC private key.`);\n    }\n\n    // Decode the provided private key to bytes.\n    const privateKeyBytes = Convert.base64Url(privateKey.d).toUint8Array();\n\n    return privateKeyBytes;\n  }\n\n  /**\n   * Converts a public key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method accepts a public key in JWK format and converts it into its raw binary\n   * form. The conversion process involves decoding the 'x' and 'y' parameters of the JWK\n   * (which represent the x and y coordinates of the elliptic curve point, respectively)\n   * from base64url format into a byte array. The method then concatenates these values,\n   * along with a prefix indicating the key format, to form the full public key.\n   *\n   * This function is particularly useful for use cases where the public key is needed\n   * in its raw byte format, such as for certain cryptographic operations or when\n   * interfacing with systems that require raw key formats.\n   *\n   * @example\n   * ```ts\n   * const publicKey = { ... }; // A Jwk public key object\n   * const publicKeyBytes = await Secp256r1.publicKeyToBytes({ publicKey });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKey - The public key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key as a Uint8Array.\n   */\n  public static async publicKeyToBytes({ publicKey }: {\n    publicKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid EC P-256 public key, which must have a 'y' value.\n    if (!(isEcPublicJwk(publicKey) && publicKey.y)) {\n      throw new Error(`Secp256r1: The provided key is not a valid EC public key.`);\n    }\n\n    // Decode the provided public key to bytes.\n    const prefix = new Uint8Array([0x04]); // Designates an uncompressed key.\n    const x = Convert.base64Url(publicKey.x).toUint8Array();\n    const y = Convert.base64Url(publicKey.y).toUint8Array();\n\n    // Concatenate the prefix, x-coordinate, and y-coordinate as a single byte array.\n    const publicKeyBytes = new Uint8Array([...prefix, ...x, ...y]);\n\n    return publicKeyBytes;\n  }\n\n  /**\n   * Computes an RFC6090-compliant Elliptic Curve Diffie-Hellman (ECDH) shared secret\n   * using secp256r1 private and public keys in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method facilitates the ECDH key agreement protocol, which is a method of securely\n   * deriving a shared secret between two parties based on their private and public keys.\n   * It takes the private key of one party (privateKeyA) and the public key of another\n   * party (publicKeyB) to compute a shared secret. The shared secret is derived from the\n   * x-coordinate of the elliptic curve point resulting from the multiplication of the\n   * public key with the private key.\n   *\n   * Note: When performing Elliptic Curve Diffie-Hellman (ECDH) key agreement,\n   * the resulting shared secret is a point on the elliptic curve, which\n   * consists of an x-coordinate and a y-coordinate. With a 256-bit curve like\n   * secp256r1, each of these coordinates is 32 bytes (256 bits) long. However,\n   * in the ECDH process, it's standard practice to use only the x-coordinate\n   * of the shared secret point as the resulting shared key. This is because\n   * the y-coordinate does not add to the entropy of the key, and both parties\n   * can independently compute the x-coordinate.  Consquently, this implementation\n   * omits the y-coordinate for simplicity and standard compliance.\n   *\n   * @example\n   * ```ts\n   * const privateKeyA = { ... }; // A Jwk private key object for party A\n   * const publicKeyB = { ... }; // A Jwk public key object for party B\n   * const sharedSecret = await Secp256r1.sharedSecret({\n   *   privateKeyA,\n   *   publicKeyB\n   * });\n   * ```\n   *\n   * @param params - The parameters for the shared secret computation.\n   * @param params.privateKeyA - The private key in JWK format of one party.\n   * @param params.publicKeyB - The public key in JWK format of the other party.\n   *\n   * @returns A Promise that resolves to the computed shared secret as a Uint8Array.\n   */\n  public static async sharedSecret({ privateKeyA, publicKeyB }: {\n    privateKeyA: Jwk;\n    publicKeyB: Jwk;\n  }): Promise<Uint8Array> {\n    // Ensure that keys from the same key pair are not specified.\n    if ('x' in privateKeyA && 'x' in publicKeyB && privateKeyA.x === publicKeyB.x) {\n      throw new Error(`Secp256r1: ECDH shared secret cannot be computed from a single key pair's public and private keys.`);\n    }\n\n    // Convert the provided private and public keys to bytes.\n    const privateKeyABytes = await Secp256r1.privateKeyToBytes({ privateKey: privateKeyA });\n    const publicKeyBBytes = await Secp256r1.publicKeyToBytes({ publicKey: publicKeyB });\n\n    // Compute the compact representation shared secret between the public and private keys.\n    const sharedSecret = secp256r1.getSharedSecret(privateKeyABytes, publicKeyBBytes, true);\n\n    // Remove the leading byte that indicates the sign of the y-coordinate\n    // of the point on the elliptic curve.  See note above.\n    return sharedSecret.slice(1);\n  }\n\n  /**\n   * Generates an RFC6979-compliant ECDSA signature of given data using a secp256r1 private key.\n   *\n   * @remarks\n   * This method signs the provided data with a specified private key using the ECDSA\n   * (Elliptic Curve Digital Signature Algorithm) signature algorithm, as defined in RFC6979.\n   * The data to be signed is first hashed using the SHA-256 algorithm, and this hash is then\n   * signed using the private key. The output is a digital signature in the form of a\n   * Uint8Array, which uniquely corresponds to both the data and the private key used for signing.\n   *\n   * This method is commonly used in cryptographic applications to ensure data integrity and\n   * authenticity. The signature can later be verified by parties with access to the corresponding\n   * public key, ensuring that the data has not been tampered with and was indeed signed by the\n   * holder of the private key.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage'); // Data to be signed\n   * const privateKey = { ... }; // A Jwk object representing a secp256r1 private key\n   * const signature = await Secp256r1.sign({\n   *   key: privateKey,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.key - The private key to use for signing, represented in JWK format.\n   * @param params.data - The data to sign, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the signature as a Uint8Array.\n   */\n  public static async sign({ data, key }:\n    SignParams\n  ): Promise<Uint8Array> {\n    // Convert the private key from JWK format to bytes.\n    const privateKeyBytes = await Secp256r1.privateKeyToBytes({ privateKey: key });\n\n    // Generate a digest of the data using the SHA-256 hash function.\n    const digest = sha256(data);\n\n    // Sign the provided data using the ECDSA algorithm.\n    // The `Secp256r1.sign` operation returns a signature object with { r, s, recovery } properties.\n    const signatureObject = secp256r1.sign(digest, privateKeyBytes);\n\n    // Convert the signature object to Uint8Array.\n    const signature = signatureObject.toCompactRawBytes();\n\n    return signature;\n  }\n\n  /**\n   * Validates a given private key to ensure its compliance with the secp256r1 curve standards.\n   *\n   * @remarks\n   * This method checks whether a provided private key is a valid 32-byte number and falls within\n   * the range defined by the secp256r1 curve's order. It is essential for ensuring the private\n   * key's mathematical correctness in the context of secp256r1-based cryptographic operations.\n   *\n   * Note that this validation strictly pertains to the key's format and numerical validity; it does\n   * not assess whether the key corresponds to a known entity or its security status (e.g., whether\n   * it has been compromised).\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // A 32-byte private key\n   * const isValid = await Secp256r1.validatePrivateKey({ privateKeyBytes });\n   * console.log(isValid); // true or false based on the key's validity\n   * ```\n   *\n   * @param params - The parameters for the key validation.\n   * @param params.privateKeyBytes - The private key to validate, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating whether the private key is valid.\n   */\n  public static async validatePrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<boolean> {\n    return secp256r1.utils.isValidPrivateKey(privateKeyBytes);\n  }\n\n  /**\n   * Validates a given public key to confirm its mathematical correctness on the secp256r1 curve.\n   *\n   * @remarks\n   * This method checks if the provided public key represents a valid point on the secp256r1 curve.\n   * It decodes the key's Weierstrass points (x and y coordinates) and verifies their validity\n   * against the curve's parameters. A valid point must lie on the curve and meet specific\n   * mathematical criteria defined by the curve's equation.\n   *\n   * It's important to note that this method does not verify the key's ownership or whether it has\n   * been compromised; it solely focuses on the key's adherence to the curve's mathematical\n   * principles.\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // A public key in byte format\n   * const isValid = await Secp256r1.validatePublicKey({ publicKeyBytes });\n   * console.log(isValid); // true if the key is valid on the secp256r1 curve, false otherwise\n   * ```\n   *\n   * @param params - The parameters for the key validation.\n   * @param params.publicKeyBytes - The public key to validate, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating the public key's validity on\n   *          the secp256r1 curve.\n   */\n  public static async validatePublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<boolean> {\n    try {\n      // Decode Weierstrass points from key bytes.\n      const point = secp256r1.ProjectivePoint.fromHex(publicKeyBytes);\n\n      // Check if points are on the Short Weierstrass curve.\n      point.assertValidity();\n\n    } catch(error: any) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Verifies an RFC6979-compliant ECDSA signature against given data and a secp256r1 public key.\n   *\n   * @remarks\n   * This method validates a digital signature to ensure that it was generated by the holder of the\n   * corresponding private key and that the signed data has not been altered. The signature\n   * verification is performed using the ECDSA (Elliptic Curve Digital Signature Algorithm) as\n   * specified in RFC6979. The data to be verified is first hashed using the SHA-256 algorithm, and\n   * this hash is then used along with the public key to verify the signature.\n   *\n   * The method returns a boolean value indicating whether the signature is valid. A valid signature\n   * proves that the signed data was indeed signed by the owner of the private key corresponding to\n   * the provided public key and that the data has not been tampered with since it was signed.\n   *\n   * Note: The verification process does not consider the malleability of low-s signatures, which\n   * may be relevant in certain contexts, such as Bitcoin transactions.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage'); // Data that was signed\n   * const publicKey = { ... }; // Public key in JWK format corresponding to the private key that signed the data\n   * const signature = new Uint8Array([...]); // Signature to verify\n   * const isSignatureValid = await Secp256r1.verify({\n   *   key: publicKey,\n   *   signature,\n   *   data\n   * });\n   * console.log(isSignatureValid); // true if the signature is valid, false otherwise\n   * ```\n   *\n   * @param params - The parameters for the signature verification.\n   * @param params.key - The public key used for verification, represented in JWK format.\n   * @param params.signature - The signature to verify, represented as a Uint8Array.\n   * @param params.data - The data that was signed, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating whether the signature is valid.\n   */\n  public static async verify({ key, signature, data }:\n    VerifyParams\n  ): Promise<boolean> {\n    // Convert the public key from JWK format to bytes.\n    const publicKeyBytes = await Secp256r1.publicKeyToBytes({ publicKey: key });\n\n    // Generate a digest of the data using the SHA-256 hash function.\n    const digest = sha256(data);\n\n    /** Perform the verification of the signature.\n     * This verify operation has the malleability check disabled. Guaranteed support\n     * for low-s signatures across languages is unlikely especially in the context\n     * of SSI. Notable Cloud KMS providers do not natively support it either. It is\n     * also worth noting that low-s signatures are a requirement for Bitcoin. */\n    const isValid = secp256r1.verify(signature, digest, publicKeyBytes, { lowS: false });\n\n    return isValid;\n  }\n\n  /**\n   * Returns the elliptic curve point (x and y coordinates) for a given secp256r1 key.\n   *\n   * @remarks\n   * This method extracts the elliptic curve point from a given secp256r1 key, whether\n   * it's a private or a public key. For a private key, the method first computes the\n   * corresponding public key and then extracts the x and y coordinates. For a public key,\n   * it directly returns these coordinates. The coordinates are represented as Uint8Array.\n   *\n   * The x and y coordinates represent the key's position on the elliptic curve and can be\n   * used in various cryptographic operations, such as digital signatures or key agreement\n   * protocols.\n   *\n   * @example\n   * ```ts\n   * // For a private key\n   * const privateKey = new Uint8Array([...]); // A 32-byte private key\n   * const { x: xFromPrivateKey, y: yFromPrivateKey } = await Secp256r1.getCurvePoint({ keyBytes: privateKey });\n   *\n   * // For a public key\n   * const publicKey = new Uint8Array([...]); // A 33-byte or 65-byte public key\n   * const { x: xFromPublicKey, y: yFromPublicKey } = await Secp256r1.getCurvePoint({ keyBytes: publicKey });\n   * ```\n   *\n   * @param params - The parameters for the curve point decoding operation.\n   * @param params.keyBytes - The key for which to get the elliptic curve point.\n   *                          Can be either a private key or a public key.\n   *                          The key should be passed as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to an object with properties 'x' and 'y',\n   *          each being a Uint8Array representing the x and y coordinates of the key point on the\n   *          elliptic curve.\n   */\n  private static async getCurvePoint({ keyBytes }: {\n    keyBytes: Uint8Array;\n  }): Promise<AffinePoint<Uint8Array>> {\n    // If key is a private key, first compute the public key.\n    if (keyBytes.byteLength === 32) {\n      keyBytes = secp256r1.getPublicKey(keyBytes);\n    }\n\n    // Decode Weierstrass affine point from key bytes.\n    const point = secp256r1.ProjectivePoint.fromHex(keyBytes);\n\n    // Get x- and y-coordinate values and convert to Uint8Array.\n    const x = numberToBytesBE(point.x, 32);\n    const y = numberToBytesBE(point.y, 32);\n\n    return { x, y };\n  }\n}\n\nexport { Secp256r1 as P256 };", "import type { Jwk } from '../jose/jwk.js';\nimport type { Signer } from '../types/signer.js';\nimport type { AsymmetricKeyGenerator } from '../types/key-generator.js';\nimport type { ComputePublicKeyParams, GenerateKeyParams, GetPublicKeyParams, SignParams, VerifyParams } from '../types/params-direct.js';\n\nimport { Secp256k1 } from '../primitives/secp256k1.js';\nimport { Secp256r1 } from '../primitives/secp256r1.js';\nimport { CryptoAlgorithm } from './crypto-algorithm.js';\nimport { isEcPrivateJwk, isEcPublicJwk } from '../jose/jwk.js';\n\n/**\n * The `EcdsaGenerateKeyParams` interface defines the algorithm-specific parameters that should be\n * passed into the `generateKey()` method when using the ECDSA algorithm.\n */\nexport interface EcdsaGenerateKeyParams extends GenerateKeyParams {\n  /**\n   * A string defining the type of key to generate. The value must be one of the following:\n   * - `\"ES256\"`: ECDSA using the secp256r1 (P-256) curve and SHA-256.\n   * - `\"ES256K\"`: ECDSA using the secp256k1 curve and SHA-256.\n   * - `\"secp256k1\"`: ECDSA using the secp256k1 curve and SHA-256.\n   * - `\"secp256r1\"`: ECDSA using the secp256r1 (P-256) curve and SHA-256.\n   */\n  algorithm: 'ES256' | 'ES256K' | 'secp256k1' | 'secp256r1';\n}\n\n/**\n * The `EcdsaAlgorithm` class provides a concrete implementation for cryptographic operations using\n * the Elliptic Curve Digital Signature Algorithm (ECDSA). This class implements both\n * {@link Signer | `Signer`} and { @link AsymmetricKeyGenerator | `AsymmetricKeyGenerator`}\n * interfaces, providing private key generation, public key derivation, and creation/verification\n * of signatures.\n *\n * This class is typically accessed through implementations that extend the\n * {@link CryptoApi | `CryptoApi`} interface.\n */\nexport class EcdsaAlgorithm extends CryptoAlgorithm\n  implements AsymmetricKeyGenerator<EcdsaGenerateKeyParams, Jwk, GetPublicKeyParams>,\n             Signer<SignParams, VerifyParams> {\n\n  /**\n   * Derives the public key in JWK format from a given private key.\n   *\n   * @remarks\n   * This method takes a private key in JWK format and derives its corresponding public key,\n   * also in JWK format. The process ensures that the derived public key correctly corresponds to\n   * the given private key.\n   *\n   * @example\n   * ```ts\n   * const ecdsa = new EcdsaAlgorithm();\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const publicKey = await ecdsa.computePublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for the public key derivation.\n   * @param params.key - The private key in JWK format from which to derive the public key.\n   *\n   * @returns A Promise that resolves to the derived public key in JWK format.\n   */\n  public async computePublicKey({ key }:\n    ComputePublicKeyParams\n  ): Promise<Jwk> {\n    if (!isEcPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an elliptic curve (EC) private key.');\n\n    switch (key.crv) {\n\n      case 'secp256k1': {\n        const publicKey = await Secp256k1.computePublicKey({ key });\n        publicKey.alg = 'ES256K';\n        return publicKey;\n      }\n\n      case 'P-256': {\n        const publicKey = await Secp256r1.computePublicKey({ key });\n        publicKey.alg = 'ES256';\n        return publicKey;\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Generates a new private key with the specified algorithm in JSON Web Key (JWK) format.\n   *\n   * @example\n   * ```ts\n   * const ecdsa = new EcdsaAlgorithm();\n   * const privateKey = await ecdsa.generateKey({ algorithm: 'ES256K' });\n   * ```\n   *\n   * @param params - The parameters for key generation.\n   * @param params.algorithm - The algorithm to use for key generation.\n   *\n   * @returns A Promise that resolves to the generated private key in JWK format.\n   */\n  public async generateKey({ algorithm }:\n    EcdsaGenerateKeyParams\n  ): Promise<Jwk> {\n    switch (algorithm) {\n\n      case 'ES256K':\n      case 'secp256k1': {\n        const privateKey = await Secp256k1.generateKey();\n        privateKey.alg = 'ES256K';\n        return privateKey;\n      }\n\n      case 'ES256':\n      case 'secp256r1': {\n        const privateKey = await Secp256r1.generateKey();\n        privateKey.alg = 'ES256';\n        return privateKey;\n      }\n    }\n  }\n\n  /**\n   * Retrieves the public key properties from a given private key in JWK format.\n   *\n   * @remarks\n   * This method extracts the public key portion from an ECDSA private key in JWK format. It does\n   * so by removing the private key property 'd' and making a shallow copy, effectively yielding the\n   * public key.\n   *\n   * Note: This method offers a significant performance advantage, being about 200 times faster\n   * than `computePublicKey()`. However, it does not mathematically validate the private key, nor\n   * does it derive the public key from the private key. It simply extracts existing public key\n   * properties from the private key object. This makes it suitable for scenarios where speed is\n   * critical and the private key's integrity is already assured.\n   *\n   * @example\n   * ```ts\n   * const ecdsa = new EcdsaAlgorithm();\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const publicKey = await ecdsa.getPublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key properties.\n   * @param params.key - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n    if (!isEcPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an elliptic curve (EC) private key.');\n\n    switch (key.crv) {\n\n      case 'secp256k1': {\n        const publicKey = await Secp256k1.getPublicKey({ key });\n        publicKey.alg = 'ES256K';\n        return publicKey;\n      }\n\n      case 'P-256': {\n        const publicKey = await Secp256r1.getPublicKey({ key });\n        publicKey.alg = 'ES256';\n        return publicKey;\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Generates an ECDSA signature of given data using a private key.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the given `algorithm` to sign the\n   * provided data.\n   *\n   * The signature can later be verified by parties with access to the corresponding\n   * public key, ensuring that the data has not been tampered with and was indeed signed by the\n   * holder of the private key.\n   *\n   * @example\n   * ```ts\n   * const ecdsa = new EcdsaAlgorithm();\n   * const data = new TextEncoder().encode('Message');\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const signature = await ecdsa.sign({\n   *   key: privateKey,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.key - The private key to use for signing, represented in JWK format.\n   * @param params.data - The data to sign.\n   *\n   * @returns A Promise resolving to the digital signature as a `Uint8Array`.\n   */\n  public async sign({ key, data }:\n    SignParams\n  ): Promise<Uint8Array> {\n    if (!isEcPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an elliptic curve (EC) private key.');\n\n    switch (key.crv) {\n\n      case 'secp256k1': {\n        return await Secp256k1.sign({ key, data });\n      }\n\n      case 'P-256': {\n        return await Secp256r1.sign({ key, data });\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Verifies an ECDSA signature associated with the provided data using the provided key.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the `crv` property of the provided key\n   * to check the validity of a digital signature against the original data. It confirms whether the\n   * signature was created by the holder of the corresponding private key and that the data has not\n   * been tampered with.\n   *s\n   * @example\n   * ```ts\n   * const ecdsa = new EcdsaAlgorithm();\n   * const publicKey = { ... }; // Public key in JWK format corresponding to the private key that signed the data\n   * const signature = new Uint8Array([...]); // Signature to verify\n   * const data = new TextEncoder().encode('Message');\n   * const isValid = await ecdsa.verify({\n   *   key: publicKey,\n   *   signature,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the verification operation.\n   * @param params.key - The key to use for verification.\n   * @param params.signature - The signature to verify.\n   * @param params.data - The data to verify.\n   *\n   * @returns A Promise resolving to a boolean indicating whether the signature is valid.\n   */\n  public async verify({ key, signature, data }:\n    VerifyParams\n  ): Promise<boolean> {\n    if (!isEcPublicJwk(key)) throw new TypeError('Invalid key provided. Must be an elliptic curve (EC) public key.');\n\n    switch (key.crv) {\n\n      case 'secp256k1': {\n        return await Secp256k1.verify({ key, signature, data });\n      }\n\n      case 'P-256': {\n        return await Secp256r1.verify({ key, signature, data });\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n}", "const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nfunction fromBig(n: bigint, le = false) {\n  if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n  return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false) {\n  let Ah = new Uint32Array(lst.length);\n  let Al = new Uint32Array(lst.length);\n  for (let i = 0; i < lst.length; i++) {\n    const { h, l } = fromBig(lst[i], le);\n    [Ah[i], Al[i]] = [h, l];\n  }\n  return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number) => h >>> s;\nconst shrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number) => l;\nconst rotr32L = (h: number, _l: number) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number) => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah: number, Al: number, Bh: number, Bl: number) {\n  const l = (Al >>> 0) + (Bl >>> 0);\n  return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number) =>\n  (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number) =>\n  (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) =>\n  (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\n// prettier-ignore\nconst u64 = {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n", "import { SHA2 } from './_sha2.js';\nimport u64 from './_u64.js';\nimport { wrapConstructor } from './utils.js';\n\n// Round contants (first 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409):\n// prettier-ignore\nconst [SHA512_Kh, SHA512_Kl] = /* @__PURE__ */ (() => u64.split([\n  '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n  '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n  '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n  '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n  '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n  '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n  '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n  '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n  '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n  '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n  '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n  '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n  '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n  '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n  '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n  '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n  '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n  '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n  '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n  '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\n\n// Temporary buffer, not used to store anything between runs\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nexport class SHA512 extends SHA2<SHA512> {\n  // We cannot use array here since array allows indexing by variable which means optimizer/compiler cannot use registers.\n  // Also looks cleaner and easier to verify with spec.\n  // Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0x6a09e667 | 0;\n  Al = 0xf3bcc908 | 0;\n  Bh = 0xbb67ae85 | 0;\n  Bl = 0x84caa73b | 0;\n  Ch = 0x3c6ef372 | 0;\n  Cl = 0xfe94f82b | 0;\n  Dh = 0xa54ff53a | 0;\n  Dl = 0x5f1d36f1 | 0;\n  Eh = 0x510e527f | 0;\n  El = 0xade682d1 | 0;\n  Fh = 0x9b05688c | 0;\n  Fl = 0x2b3e6c1f | 0;\n  Gh = 0x1f83d9ab | 0;\n  Gl = 0xfb41bd6b | 0;\n  Hh = 0x5be0cd19 | 0;\n  Hl = 0x137e2179 | 0;\n\n  constructor() {\n    super(128, 64, 16, false);\n  }\n  // prettier-ignore\n  protected get(): [\n    number, number, number, number, number, number, number, number,\n    number, number, number, number, number, number, number, number\n  ] {\n    const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n    return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n  }\n  // prettier-ignore\n  protected set(\n    Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n    Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n  ) {\n    this.Ah = Ah | 0;\n    this.Al = Al | 0;\n    this.Bh = Bh | 0;\n    this.Bl = Bl | 0;\n    this.Ch = Ch | 0;\n    this.Cl = Cl | 0;\n    this.Dh = Dh | 0;\n    this.Dl = Dl | 0;\n    this.Eh = Eh | 0;\n    this.El = El | 0;\n    this.Fh = Fh | 0;\n    this.Fl = Fl | 0;\n    this.Gh = Gh | 0;\n    this.Gl = Gl | 0;\n    this.Hh = Hh | 0;\n    this.Hl = Hl | 0;\n  }\n  protected process(view: DataView, offset: number) {\n    // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) {\n      SHA512_W_H[i] = view.getUint32(offset);\n      SHA512_W_L[i] = view.getUint32((offset += 4));\n    }\n    for (let i = 16; i < 80; i++) {\n      // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n      const W15h = SHA512_W_H[i - 15] | 0;\n      const W15l = SHA512_W_L[i - 15] | 0;\n      const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n      const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n      // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n      const W2h = SHA512_W_H[i - 2] | 0;\n      const W2l = SHA512_W_L[i - 2] | 0;\n      const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n      const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n      // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n      const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n      const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n      SHA512_W_H[i] = SUMh | 0;\n      SHA512_W_L[i] = SUMl | 0;\n    }\n    let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n    // Compression function main loop, 80 rounds\n    for (let i = 0; i < 80; i++) {\n      // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n      const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n      const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n      //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n      const CHIl = (El & Fl) ^ (~El & Gl);\n      // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n      // prettier-ignore\n      const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n      const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n      const T1l = T1ll | 0;\n      // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n      const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n      const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n      const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n      const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n      Hh = Gh | 0;\n      Hl = Gl | 0;\n      Gh = Fh | 0;\n      Gl = Fl | 0;\n      Fh = Eh | 0;\n      Fl = El | 0;\n      ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n      Dh = Ch | 0;\n      Dl = Cl | 0;\n      Ch = Bh | 0;\n      Cl = Bl | 0;\n      Bh = Ah | 0;\n      Bl = Al | 0;\n      const All = u64.add3L(T1l, sigma0l, MAJl);\n      Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n      Al = All | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n    ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n    ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n    ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n    ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n    ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n    ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n    ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n    this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n  }\n  protected roundClean() {\n    SHA512_W_H.fill(0);\n    SHA512_W_L.fill(0);\n  }\n  destroy() {\n    this.buffer.fill(0);\n    this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n  }\n}\n\nclass SHA512_224 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0x8c3d37c8 | 0;\n  Al = 0x19544da2 | 0;\n  Bh = 0x73e19966 | 0;\n  Bl = 0x89dcd4d6 | 0;\n  Ch = 0x1dfab7ae | 0;\n  Cl = 0x32ff9c82 | 0;\n  Dh = 0x679dd514 | 0;\n  Dl = 0x582f9fcf | 0;\n  Eh = 0x0f6d2b69 | 0;\n  El = 0x7bd44da8 | 0;\n  Fh = 0x77e36f73 | 0;\n  Fl = 0x04c48942 | 0;\n  Gh = 0x3f9d85a8 | 0;\n  Gl = 0x6a1d36c8 | 0;\n  Hh = 0x1112e6ad | 0;\n  Hl = 0x91d692a1 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\nclass SHA512_256 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0x22312194 | 0;\n  Al = 0xfc2bf72c | 0;\n  Bh = 0x9f555fa3 | 0;\n  Bl = 0xc84c64c2 | 0;\n  Ch = 0x2393b86b | 0;\n  Cl = 0x6f53b151 | 0;\n  Dh = 0x96387719 | 0;\n  Dl = 0x5940eabd | 0;\n  Eh = 0x96283ee2 | 0;\n  El = 0xa88effe3 | 0;\n  Fh = 0xbe5e1e25 | 0;\n  Fl = 0x53863992 | 0;\n  Gh = 0x2b0199fc | 0;\n  Gl = 0x2c85b8aa | 0;\n  Hh = 0x0eb72ddc | 0;\n  Hl = 0x81c52ca2 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 32;\n  }\n}\n\nclass SHA384 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0xcbbb9d5d | 0;\n  Al = 0xc1059ed8 | 0;\n  Bh = 0x629a292a | 0;\n  Bl = 0x367cd507 | 0;\n  Ch = 0x9159015a | 0;\n  Cl = 0x3070dd17 | 0;\n  Dh = 0x152fecd8 | 0;\n  Dl = 0xf70e5939 | 0;\n  Eh = 0x67332667 | 0;\n  El = 0xffc00b31 | 0;\n  Fh = 0x8eb44a87 | 0;\n  Fl = 0x68581511 | 0;\n  Gh = 0xdb0c2e0d | 0;\n  Gl = 0x64f98fa7 | 0;\n  Hh = 0x47b5481d | 0;\n  Hl = 0xbefa4fa4 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 48;\n  }\n}\n\nexport const sha512 = /* @__PURE__ */ wrapConstructor(() => new SHA512());\nexport const sha512_224 = /* @__PURE__ */ wrapConstructor(() => new SHA512_224());\nexport const sha512_256 = /* @__PURE__ */ wrapConstructor(() => new SHA512_256());\nexport const sha384 = /* @__PURE__ */ wrapConstructor(() => new SHA384());\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Twisted Edwards curve. The formula is: ax\u00B2 + y\u00B2 = 1 + dx\u00B2y\u00B2\nimport { mod } from './modular.js';\nimport * as ut from './utils.js';\nimport { ensureBytes, FHash, Hex } from './utils.js';\nimport { Group, GroupConstructor, wNAF, BasicCurve, validateBasic, AffinePoint } from './curve.js';\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _8n = BigInt(8);\n\n// Edwards curves must declare params a & d.\nexport type CurveType = BasicCurve<bigint> & {\n  a: bigint; // curve param a\n  d: bigint; // curve param d\n  hash: FHash; // Hashing\n  randomBytes: (bytesLength?: number) => Uint8Array; // CSPRNG\n  adjustScalarBytes?: (bytes: Uint8Array) => Uint8Array; // clears bits to get valid field elemtn\n  domain?: (data: Uint8Array, ctx: Uint8Array, phflag: boolean) => Uint8Array; // Used for hashing\n  uvRatio?: (u: bigint, v: bigint) => { isValid: boolean; value: bigint }; // Ratio \u221A(u/v)\n  prehash?: FHash; // RFC 8032 pre-hashing of messages to sign() / verify()\n  mapToCurve?: (scalar: bigint[]) => AffinePoint<bigint>; // for hash-to-curve standard\n};\n\n// verification rule is either zip215 or rfc8032 / nist186-5. Consult fromHex:\nconst VERIFY_DEFAULT = { zip215: true };\n\nfunction validateOpts(curve: CurveType) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    curve,\n    {\n      hash: 'function',\n      a: 'bigint',\n      d: 'bigint',\n      randomBytes: 'function',\n    },\n    {\n      adjustScalarBytes: 'function',\n      domain: 'function',\n      uvRatio: 'function',\n      mapToCurve: 'function',\n    }\n  );\n  // Set defaults\n  return Object.freeze({ ...opts } as const);\n}\n\n// Instance of Extended Point with coordinates in X, Y, Z, T\nexport interface ExtPointType extends Group<ExtPointType> {\n  readonly ex: bigint;\n  readonly ey: bigint;\n  readonly ez: bigint;\n  readonly et: bigint;\n  get x(): bigint;\n  get y(): bigint;\n  assertValidity(): void;\n  multiply(scalar: bigint): ExtPointType;\n  multiplyUnsafe(scalar: bigint): ExtPointType;\n  isSmallOrder(): boolean;\n  isTorsionFree(): boolean;\n  clearCofactor(): ExtPointType;\n  toAffine(iz?: bigint): AffinePoint<bigint>;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n}\n// Static methods of Extended Point with coordinates in X, Y, Z, T\nexport interface ExtPointConstructor extends GroupConstructor<ExtPointType> {\n  new (x: bigint, y: bigint, z: bigint, t: bigint): ExtPointType;\n  fromAffine(p: AffinePoint<bigint>): ExtPointType;\n  fromHex(hex: Hex): ExtPointType;\n  fromPrivateKey(privateKey: Hex): ExtPointType;\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: Hex) => Uint8Array;\n  sign: (message: Hex, privateKey: Hex, options?: { context?: Hex }) => Uint8Array;\n  verify: (\n    sig: Hex,\n    message: Hex,\n    publicKey: Hex,\n    options?: { context?: Hex; zip215: boolean }\n  ) => boolean;\n  ExtendedPoint: ExtPointConstructor;\n  utils: {\n    randomPrivateKey: () => Uint8Array;\n    getExtendedPublicKey: (key: Hex) => {\n      head: Uint8Array;\n      prefix: Uint8Array;\n      scalar: bigint;\n      point: ExtPointType;\n      pointBytes: Uint8Array;\n    };\n  };\n};\n\n// It is not generic twisted curve for now, but ed25519/ed448 generic implementation\nexport function twistedEdwards(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\n  const {\n    Fp,\n    n: CURVE_ORDER,\n    prehash: prehash,\n    hash: cHash,\n    randomBytes,\n    nByteLength,\n    h: cofactor,\n  } = CURVE;\n  const MASK = _2n << (BigInt(nByteLength * 8) - _1n);\n  const modP = Fp.create; // Function overrides\n\n  // sqrt(u/v)\n  const uvRatio =\n    CURVE.uvRatio ||\n    ((u: bigint, v: bigint) => {\n      try {\n        return { isValid: true, value: Fp.sqrt(u * Fp.inv(v)) };\n      } catch (e) {\n        return { isValid: false, value: _0n };\n      }\n    });\n  const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes: Uint8Array) => bytes); // NOOP\n  const domain =\n    CURVE.domain ||\n    ((data: Uint8Array, ctx: Uint8Array, phflag: boolean) => {\n      if (ctx.length || phflag) throw new Error('Contexts/pre-hash are not supported');\n      return data;\n    }); // NOOP\n  const inBig = (n: bigint) => typeof n === 'bigint' && _0n < n; // n in [1..]\n  const inRange = (n: bigint, max: bigint) => inBig(n) && inBig(max) && n < max; // n in [1..max-1]\n  const in0MaskRange = (n: bigint) => n === _0n || inRange(n, MASK); // n in [0..MASK-1]\n  function assertInRange(n: bigint, max: bigint) {\n    // n in [1..max-1]\n    if (inRange(n, max)) return n;\n    throw new Error(`Expected valid scalar < ${max}, got ${typeof n} ${n}`);\n  }\n  function assertGE0(n: bigint) {\n    // n in [0..CURVE_ORDER-1]\n    return n === _0n ? n : assertInRange(n, CURVE_ORDER); // GE = prime subgroup, not full group\n  }\n  const pointPrecomputes = new Map<Point, Point[]>();\n  function isPoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ExtendedPoint expected');\n  }\n  // Extended Point works in extended coordinates: (x, y, z, t) \u220B (x=x/z, y=y/z, t=xy).\n  // https://en.wikipedia.org/wiki/Twisted_Edwards_curve#Extended_coordinates\n  class Point implements ExtPointType {\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, _1n, modP(CURVE.Gx * CURVE.Gy));\n    static readonly ZERO = new Point(_0n, _1n, _1n, _0n); // 0, 1, 1, 0\n\n    constructor(\n      readonly ex: bigint,\n      readonly ey: bigint,\n      readonly ez: bigint,\n      readonly et: bigint\n    ) {\n      if (!in0MaskRange(ex)) throw new Error('x required');\n      if (!in0MaskRange(ey)) throw new Error('y required');\n      if (!in0MaskRange(ez)) throw new Error('z required');\n      if (!in0MaskRange(et)) throw new Error('t required');\n    }\n\n    get x(): bigint {\n      return this.toAffine().x;\n    }\n    get y(): bigint {\n      return this.toAffine().y;\n    }\n\n    static fromAffine(p: AffinePoint<bigint>): Point {\n      if (p instanceof Point) throw new Error('extended point not allowed');\n      const { x, y } = p || {};\n      if (!in0MaskRange(x) || !in0MaskRange(y)) throw new Error('invalid affine point');\n      return new Point(x, y, _1n, modP(x * y));\n    }\n    static normalizeZ(points: Point[]): Point[] {\n      const toInv = Fp.invertBatch(points.map((p) => p.ez));\n      return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n    }\n\n    // We calculate precomputes for elliptic curve point multiplication\n    // using windowed method. This specifies window size and\n    // stores precomputed values. Usually only base point would be precomputed.\n    _WINDOW_SIZE?: number;\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      this._WINDOW_SIZE = windowSize;\n      pointPrecomputes.delete(this);\n    }\n    // Not required for fromHex(), which always creates valid points.\n    // Could be useful for fromAffine().\n    assertValidity(): void {\n      const { a, d } = CURVE;\n      if (this.is0()) throw new Error('bad point: ZERO'); // TODO: optimize, with vars below?\n      // Equation in affine coordinates: ax\u00B2 + y\u00B2 = 1 + dx\u00B2y\u00B2\n      // Equation in projective coordinates (X/Z, Y/Z, Z):  (aX\u00B2 + Y\u00B2)Z\u00B2 = Z\u2074 + dX\u00B2Y\u00B2\n      const { ex: X, ey: Y, ez: Z, et: T } = this;\n      const X2 = modP(X * X); // X\u00B2\n      const Y2 = modP(Y * Y); // Y\u00B2\n      const Z2 = modP(Z * Z); // Z\u00B2\n      const Z4 = modP(Z2 * Z2); // Z\u2074\n      const aX2 = modP(X2 * a); // aX\u00B2\n      const left = modP(Z2 * modP(aX2 + Y2)); // (aX\u00B2 + Y\u00B2)Z\u00B2\n      const right = modP(Z4 + modP(d * modP(X2 * Y2))); // Z\u2074 + dX\u00B2Y\u00B2\n      if (left !== right) throw new Error('bad point: equation left != right (1)');\n      // In Extended coordinates we also have T, which is x*y=T/Z: check X*Y == Z*T\n      const XY = modP(X * Y);\n      const ZT = modP(Z * T);\n      if (XY !== ZT) throw new Error('bad point: equation left != right (2)');\n    }\n\n    // Compare one point to another.\n    equals(other: Point): boolean {\n      isPoint(other);\n      const { ex: X1, ey: Y1, ez: Z1 } = this;\n      const { ex: X2, ey: Y2, ez: Z2 } = other;\n      const X1Z2 = modP(X1 * Z2);\n      const X2Z1 = modP(X2 * Z1);\n      const Y1Z2 = modP(Y1 * Z2);\n      const Y2Z1 = modP(Y2 * Z1);\n      return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n    }\n\n    protected is0(): boolean {\n      return this.equals(Point.ZERO);\n    }\n\n    negate(): Point {\n      // Flips point sign to a negative one (-x, y in affine coords)\n      return new Point(modP(-this.ex), this.ey, this.ez, modP(-this.et));\n    }\n\n    // Fast algo for doubling Extended Point.\n    // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n    // Cost: 4M + 4S + 1*a + 6add + 1*2.\n    double(): Point {\n      const { a } = CURVE;\n      const { ex: X1, ey: Y1, ez: Z1 } = this;\n      const A = modP(X1 * X1); // A = X12\n      const B = modP(Y1 * Y1); // B = Y12\n      const C = modP(_2n * modP(Z1 * Z1)); // C = 2*Z12\n      const D = modP(a * A); // D = a*A\n      const x1y1 = X1 + Y1;\n      const E = modP(modP(x1y1 * x1y1) - A - B); // E = (X1+Y1)2-A-B\n      const G = D + B; // G = D+B\n      const F = G - C; // F = G-C\n      const H = D - B; // H = D-B\n      const X3 = modP(E * F); // X3 = E*F\n      const Y3 = modP(G * H); // Y3 = G*H\n      const T3 = modP(E * H); // T3 = E*H\n      const Z3 = modP(F * G); // Z3 = F*G\n      return new Point(X3, Y3, Z3, T3);\n    }\n\n    // Fast algo for adding 2 Extended Points.\n    // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#addition-add-2008-hwcd\n    // Cost: 9M + 1*a + 1*d + 7add.\n    add(other: Point) {\n      isPoint(other);\n      const { a, d } = CURVE;\n      const { ex: X1, ey: Y1, ez: Z1, et: T1 } = this;\n      const { ex: X2, ey: Y2, ez: Z2, et: T2 } = other;\n      // Faster algo for adding 2 Extended Points when curve's a=-1.\n      // http://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-4\n      // Cost: 8M + 8add + 2*2.\n      // Note: It does not check whether the `other` point is valid.\n      if (a === BigInt(-1)) {\n        const A = modP((Y1 - X1) * (Y2 + X2));\n        const B = modP((Y1 + X1) * (Y2 - X2));\n        const F = modP(B - A);\n        if (F === _0n) return this.double(); // Same point. Tests say it doesn't affect timing\n        const C = modP(Z1 * _2n * T2);\n        const D = modP(T1 * _2n * Z2);\n        const E = D + C;\n        const G = B + A;\n        const H = D - C;\n        const X3 = modP(E * F);\n        const Y3 = modP(G * H);\n        const T3 = modP(E * H);\n        const Z3 = modP(F * G);\n        return new Point(X3, Y3, Z3, T3);\n      }\n      const A = modP(X1 * X2); // A = X1*X2\n      const B = modP(Y1 * Y2); // B = Y1*Y2\n      const C = modP(T1 * d * T2); // C = T1*d*T2\n      const D = modP(Z1 * Z2); // D = Z1*Z2\n      const E = modP((X1 + Y1) * (X2 + Y2) - A - B); // E = (X1+Y1)*(X2+Y2)-A-B\n      const F = D - C; // F = D-C\n      const G = D + C; // G = D+C\n      const H = modP(B - a * A); // H = B-a*A\n      const X3 = modP(E * F); // X3 = E*F\n      const Y3 = modP(G * H); // Y3 = G*H\n      const T3 = modP(E * H); // T3 = E*H\n      const Z3 = modP(F * G); // Z3 = F*G\n\n      return new Point(X3, Y3, Z3, T3);\n    }\n\n    subtract(other: Point): Point {\n      return this.add(other.negate());\n    }\n\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, pointPrecomputes, n, Point.normalizeZ);\n    }\n\n    // Constant-time multiplication.\n    multiply(scalar: bigint): Point {\n      const { p, f } = this.wNAF(assertInRange(scalar, CURVE_ORDER));\n      return Point.normalizeZ([p, f])[0];\n    }\n\n    // Non-constant-time multiplication. Uses double-and-add algorithm.\n    // It's faster, but should only be used when you don't care about\n    // an exposed private key e.g. sig verification.\n    // Does NOT allow scalars higher than CURVE.n.\n    multiplyUnsafe(scalar: bigint): Point {\n      let n = assertGE0(scalar); // 0 <= scalar < CURVE.n\n      if (n === _0n) return I;\n      if (this.equals(I) || n === _1n) return this;\n      if (this.equals(G)) return this.wNAF(n).p;\n      return wnaf.unsafeLadder(this, n);\n    }\n\n    // Checks if point is of small order.\n    // If you add something to small order point, you will have \"dirty\"\n    // point with torsion component.\n    // Multiplies point by cofactor and checks if the result is 0.\n    isSmallOrder(): boolean {\n      return this.multiplyUnsafe(cofactor).is0();\n    }\n\n    // Multiplies point by curve order and checks if the result is 0.\n    // Returns `false` is the point is dirty.\n    isTorsionFree(): boolean {\n      return wnaf.unsafeLadder(this, CURVE_ORDER).is0();\n    }\n\n    // Converts Extended point to default (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    toAffine(iz?: bigint): AffinePoint<bigint> {\n      const { ex: x, ey: y, ez: z } = this;\n      const is0 = this.is0();\n      if (iz == null) iz = is0 ? _8n : (Fp.inv(z) as bigint); // 8 was chosen arbitrarily\n      const ax = modP(x * iz);\n      const ay = modP(y * iz);\n      const zz = modP(z * iz);\n      if (is0) return { x: _0n, y: _1n };\n      if (zz !== _1n) throw new Error('invZ was invalid');\n      return { x: ax, y: ay };\n    }\n\n    clearCofactor(): Point {\n      const { h: cofactor } = CURVE;\n      if (cofactor === _1n) return this;\n      return this.multiplyUnsafe(cofactor);\n    }\n\n    // Converts hash string or Uint8Array to Point.\n    // Uses algo from RFC8032 5.1.3.\n    static fromHex(hex: Hex, zip215 = false): Point {\n      const { d, a } = CURVE;\n      const len = Fp.BYTES;\n      hex = ensureBytes('pointHex', hex, len); // copy hex to a new array\n      const normed = hex.slice(); // copy again, we'll manipulate it\n      const lastByte = hex[len - 1]; // select last byte\n      normed[len - 1] = lastByte & ~0x80; // clear last bit\n      const y = ut.bytesToNumberLE(normed);\n      if (y === _0n) {\n        // y=0 is allowed\n      } else {\n        // RFC8032 prohibits >= p, but ZIP215 doesn't\n        if (zip215) assertInRange(y, MASK); // zip215=true [1..P-1] (2^255-19-1 for ed25519)\n        else assertInRange(y, Fp.ORDER); // zip215=false [1..MASK-1] (2^256-1 for ed25519)\n      }\n\n      // Ed25519: x\u00B2 = (y\u00B2-1)/(dy\u00B2+1) mod p. Ed448: x\u00B2 = (y\u00B2-1)/(dy\u00B2-1) mod p. Generic case:\n      // ax\u00B2+y\u00B2=1+dx\u00B2y\u00B2 => y\u00B2-1=dx\u00B2y\u00B2-ax\u00B2 => y\u00B2-1=x\u00B2(dy\u00B2-a) => x\u00B2=(y\u00B2-1)/(dy\u00B2-a)\n      const y2 = modP(y * y); // denominator is always non-0 mod p.\n      const u = modP(y2 - _1n); // u = y\u00B2 - 1\n      const v = modP(d * y2 - a); // v = d y\u00B2 + 1.\n      let { isValid, value: x } = uvRatio(u, v); // \u221A(u/v)\n      if (!isValid) throw new Error('Point.fromHex: invalid y coordinate');\n      const isXOdd = (x & _1n) === _1n; // There are 2 square roots. Use x_0 bit to select proper\n      const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit\n      if (!zip215 && x === _0n && isLastByteOdd)\n        // if x=0 and x_0 = 1, fail\n        throw new Error('Point.fromHex: x=0 and x_0=1');\n      if (isLastByteOdd !== isXOdd) x = modP(-x); // if x_0 != x mod 2, set x = p-x\n      return Point.fromAffine({ x, y });\n    }\n    static fromPrivateKey(privKey: Hex) {\n      return getExtendedPublicKey(privKey).point;\n    }\n    toRawBytes(): Uint8Array {\n      const { x, y } = this.toAffine();\n      const bytes = ut.numberToBytesLE(y, Fp.BYTES); // each y has 2 x values (x, -y)\n      bytes[bytes.length - 1] |= x & _1n ? 0x80 : 0; // when compressing, it's enough to store y\n      return bytes; // and use the last byte to encode sign of x\n    }\n    toHex(): string {\n      return ut.bytesToHex(this.toRawBytes()); // Same as toRawBytes, but returns string.\n    }\n  }\n  const { BASE: G, ZERO: I } = Point;\n  const wnaf = wNAF(Point, nByteLength * 8);\n\n  function modN(a: bigint) {\n    return mod(a, CURVE_ORDER);\n  }\n  // Little-endian SHA512 with modulo n\n  function modN_LE(hash: Uint8Array): bigint {\n    return modN(ut.bytesToNumberLE(hash));\n  }\n\n  /** Convenience method that creates public key and other stuff. RFC8032 5.1.5 */\n  function getExtendedPublicKey(key: Hex) {\n    const len = nByteLength;\n    key = ensureBytes('private key', key, len);\n    // Hash private key with curve's hash function to produce uniformingly random input\n    // Check byte lengths: ensure(64, h(ensure(32, key)))\n    const hashed = ensureBytes('hashed private key', cHash(key), 2 * len);\n    const head = adjustScalarBytes(hashed.slice(0, len)); // clear first half bits, produce FE\n    const prefix = hashed.slice(len, 2 * len); // second half is called key prefix (5.1.6)\n    const scalar = modN_LE(head); // The actual private scalar\n    const point = G.multiply(scalar); // Point on Edwards curve aka public key\n    const pointBytes = point.toRawBytes(); // Uint8Array representation\n    return { head, prefix, scalar, point, pointBytes };\n  }\n\n  // Calculates EdDSA pub key. RFC8032 5.1.5. Privkey is hashed. Use first half with 3 bits cleared\n  function getPublicKey(privKey: Hex): Uint8Array {\n    return getExtendedPublicKey(privKey).pointBytes;\n  }\n\n  // int('LE', SHA512(dom2(F, C) || msgs)) mod N\n  function hashDomainToScalar(context: Hex = new Uint8Array(), ...msgs: Uint8Array[]) {\n    const msg = ut.concatBytes(...msgs);\n    return modN_LE(cHash(domain(msg, ensureBytes('context', context), !!prehash)));\n  }\n\n  /** Signs message with privateKey. RFC8032 5.1.6 */\n  function sign(msg: Hex, privKey: Hex, options: { context?: Hex } = {}): Uint8Array {\n    msg = ensureBytes('message', msg);\n    if (prehash) msg = prehash(msg); // for ed25519ph etc.\n    const { prefix, scalar, pointBytes } = getExtendedPublicKey(privKey);\n    const r = hashDomainToScalar(options.context, prefix, msg); // r = dom2(F, C) || prefix || PH(M)\n    const R = G.multiply(r).toRawBytes(); // R = rG\n    const k = hashDomainToScalar(options.context, R, pointBytes, msg); // R || A || PH(M)\n    const s = modN(r + k * scalar); // S = (r + k * s) mod L\n    assertGE0(s); // 0 <= s < l\n    const res = ut.concatBytes(R, ut.numberToBytesLE(s, Fp.BYTES));\n    return ensureBytes('result', res, nByteLength * 2); // 64-byte signature\n  }\n\n  const verifyOpts: { context?: Hex; zip215?: boolean } = VERIFY_DEFAULT;\n  function verify(sig: Hex, msg: Hex, publicKey: Hex, options = verifyOpts): boolean {\n    const { context, zip215 } = options;\n    const len = Fp.BYTES; // Verifies EdDSA signature against message and public key. RFC8032 5.1.7.\n    sig = ensureBytes('signature', sig, 2 * len); // An extended group equation is checked.\n    msg = ensureBytes('message', msg);\n    if (prehash) msg = prehash(msg); // for ed25519ph, etc\n\n    const s = ut.bytesToNumberLE(sig.slice(len, 2 * len));\n    // zip215: true is good for consensus-critical apps and allows points < 2^256\n    // zip215: false follows RFC8032 / NIST186-5 and restricts points to CURVE.p\n    let A, R, SB;\n    try {\n      A = Point.fromHex(publicKey, zip215);\n      R = Point.fromHex(sig.slice(0, len), zip215);\n      SB = G.multiplyUnsafe(s); // 0 <= s < l is done inside\n    } catch (error) {\n      return false;\n    }\n    if (!zip215 && A.isSmallOrder()) return false;\n\n    const k = hashDomainToScalar(context, R.toRawBytes(), A.toRawBytes(), msg);\n    const RkA = R.add(A.multiplyUnsafe(k));\n    // [8][S]B = [8]R + [8][k]A'\n    return RkA.subtract(SB).clearCofactor().equals(Point.ZERO);\n  }\n\n  G._setWindowSize(8); // Enable precomputes. Slows down first publicKey computation by 20ms.\n\n  const utils = {\n    getExtendedPublicKey,\n    // ed25519 private keys are uniform 32b. No need to check for modulo bias, like in secp256k1.\n    randomPrivateKey: (): Uint8Array => randomBytes(Fp.BYTES),\n\n    /**\n     * We're doing scalar multiplication (used in getPublicKey etc) with precomputed BASE_POINT\n     * values. This slows down first getPublicKey() by milliseconds (see Speed section),\n     * but allows to speed-up subsequent getPublicKey() calls up to 20x.\n     * @param windowSize 2, 4, 8, 16\n     */\n    precompute(windowSize = 8, point = Point.BASE): typeof Point.BASE {\n      point._setWindowSize(windowSize);\n      point.multiply(BigInt(3));\n      return point;\n    },\n  };\n\n  return {\n    CURVE,\n    getPublicKey,\n    sign,\n    verify,\n    ExtendedPoint: Point,\n    utils,\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { mod, pow } from './modular.js';\nimport { bytesToNumberLE, ensureBytes, numberToBytesLE, validateObject } from './utils.js';\n\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\ntype Hex = string | Uint8Array;\n\nexport type CurveType = {\n  P: bigint; // finite field prime\n  nByteLength: number;\n  adjustScalarBytes?: (bytes: Uint8Array) => Uint8Array;\n  domain?: (data: Uint8Array, ctx: Uint8Array, phflag: boolean) => Uint8Array;\n  a: bigint;\n  montgomeryBits: number;\n  powPminus2?: (x: bigint) => bigint;\n  xyToU?: (x: bigint, y: bigint) => bigint;\n  Gu: bigint;\n  randomBytes?: (bytesLength?: number) => Uint8Array;\n};\nexport type CurveFn = {\n  scalarMult: (scalar: Hex, u: Hex) => Uint8Array;\n  scalarMultBase: (scalar: Hex) => Uint8Array;\n  getSharedSecret: (privateKeyA: Hex, publicKeyB: Hex) => Uint8Array;\n  getPublicKey: (privateKey: Hex) => Uint8Array;\n  utils: { randomPrivateKey: () => Uint8Array };\n  GuBytes: Uint8Array;\n};\n\nfunction validateOpts(curve: CurveType) {\n  validateObject(\n    curve,\n    {\n      a: 'bigint',\n    },\n    {\n      montgomeryBits: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n      adjustScalarBytes: 'function',\n      domain: 'function',\n      powPminus2: 'function',\n      Gu: 'bigint',\n    }\n  );\n  // Set defaults\n  return Object.freeze({ ...curve } as const);\n}\n\n// NOTE: not really montgomery curve, just bunch of very specific methods for X25519/X448 (RFC 7748, https://www.rfc-editor.org/rfc/rfc7748)\n// Uses only one coordinate instead of two\nexport function montgomery(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef);\n  const { P } = CURVE;\n  const modP = (n: bigint) => mod(n, P);\n  const montgomeryBits = CURVE.montgomeryBits;\n  const montgomeryBytes = Math.ceil(montgomeryBits / 8);\n  const fieldLen = CURVE.nByteLength;\n  const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes: Uint8Array) => bytes);\n  const powPminus2 = CURVE.powPminus2 || ((x: bigint) => pow(x, P - BigInt(2), P));\n\n  // cswap from RFC7748. But it is not from RFC7748!\n  /*\n    cswap(swap, x_2, x_3):\n         dummy = mask(swap) AND (x_2 XOR x_3)\n         x_2 = x_2 XOR dummy\n         x_3 = x_3 XOR dummy\n         Return (x_2, x_3)\n  Where mask(swap) is the all-1 or all-0 word of the same length as x_2\n   and x_3, computed, e.g., as mask(swap) = 0 - swap.\n  */\n  function cswap(swap: bigint, x_2: bigint, x_3: bigint): [bigint, bigint] {\n    const dummy = modP(swap * (x_2 - x_3));\n    x_2 = modP(x_2 - dummy);\n    x_3 = modP(x_3 + dummy);\n    return [x_2, x_3];\n  }\n\n  // Accepts 0 as well\n  function assertFieldElement(n: bigint): bigint {\n    if (typeof n === 'bigint' && _0n <= n && n < P) return n;\n    throw new Error('Expected valid scalar 0 < scalar < CURVE.P');\n  }\n\n  // x25519 from 4\n  // The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519\n  const a24 = (CURVE.a - BigInt(2)) / BigInt(4);\n  /**\n   *\n   * @param pointU u coordinate (x) on Montgomery Curve 25519\n   * @param scalar by which the point would be multiplied\n   * @returns new Point on Montgomery curve\n   */\n  function montgomeryLadder(pointU: bigint, scalar: bigint): bigint {\n    const u = assertFieldElement(pointU);\n    // Section 5: Implementations MUST accept non-canonical values and process them as\n    // if they had been reduced modulo the field prime.\n    const k = assertFieldElement(scalar);\n    const x_1 = u;\n    let x_2 = _1n;\n    let z_2 = _0n;\n    let x_3 = u;\n    let z_3 = _1n;\n    let swap = _0n;\n    let sw: [bigint, bigint];\n    for (let t = BigInt(montgomeryBits - 1); t >= _0n; t--) {\n      const k_t = (k >> t) & _1n;\n      swap ^= k_t;\n      sw = cswap(swap, x_2, x_3);\n      x_2 = sw[0];\n      x_3 = sw[1];\n      sw = cswap(swap, z_2, z_3);\n      z_2 = sw[0];\n      z_3 = sw[1];\n      swap = k_t;\n\n      const A = x_2 + z_2;\n      const AA = modP(A * A);\n      const B = x_2 - z_2;\n      const BB = modP(B * B);\n      const E = AA - BB;\n      const C = x_3 + z_3;\n      const D = x_3 - z_3;\n      const DA = modP(D * A);\n      const CB = modP(C * B);\n      const dacb = DA + CB;\n      const da_cb = DA - CB;\n      x_3 = modP(dacb * dacb);\n      z_3 = modP(x_1 * modP(da_cb * da_cb));\n      x_2 = modP(AA * BB);\n      z_2 = modP(E * (AA + modP(a24 * E)));\n    }\n    // (x_2, x_3) = cswap(swap, x_2, x_3)\n    sw = cswap(swap, x_2, x_3);\n    x_2 = sw[0];\n    x_3 = sw[1];\n    // (z_2, z_3) = cswap(swap, z_2, z_3)\n    sw = cswap(swap, z_2, z_3);\n    z_2 = sw[0];\n    z_3 = sw[1];\n    // z_2^(p - 2)\n    const z2 = powPminus2(z_2);\n    // Return x_2 * (z_2^(p - 2))\n    return modP(x_2 * z2);\n  }\n\n  function encodeUCoordinate(u: bigint): Uint8Array {\n    return numberToBytesLE(modP(u), montgomeryBytes);\n  }\n\n  function decodeUCoordinate(uEnc: Hex): bigint {\n    // Section 5: When receiving such an array, implementations of X25519\n    // MUST mask the most significant bit in the final byte.\n    const u = ensureBytes('u coordinate', uEnc, montgomeryBytes);\n    if (fieldLen === 32) u[31] &= 127; // 0b0111_1111\n    return bytesToNumberLE(u);\n  }\n  function decodeScalar(n: Hex): bigint {\n    const bytes = ensureBytes('scalar', n);\n    const len = bytes.length;\n    if (len !== montgomeryBytes && len !== fieldLen)\n      throw new Error(`Expected ${montgomeryBytes} or ${fieldLen} bytes, got ${len}`);\n    return bytesToNumberLE(adjustScalarBytes(bytes));\n  }\n  function scalarMult(scalar: Hex, u: Hex): Uint8Array {\n    const pointU = decodeUCoordinate(u);\n    const _scalar = decodeScalar(scalar);\n    const pu = montgomeryLadder(pointU, _scalar);\n    // The result was not contributory\n    // https://cr.yp.to/ecdh.html#validate\n    if (pu === _0n) throw new Error('Invalid private or public key received');\n    return encodeUCoordinate(pu);\n  }\n  // Computes public key from private. By doing scalar multiplication of base point.\n  const GuBytes = encodeUCoordinate(CURVE.Gu);\n  function scalarMultBase(scalar: Hex): Uint8Array {\n    return scalarMult(scalar, GuBytes);\n  }\n\n  return {\n    scalarMult,\n    scalarMultBase,\n    getSharedSecret: (privateKey: Hex, publicKey: Hex) => scalarMult(privateKey, publicKey),\n    getPublicKey: (privateKey: Hex): Uint8Array => scalarMultBase(privateKey),\n    utils: { randomPrivateKey: () => CURVE.randomBytes!(CURVE.nByteLength) },\n    GuBytes: GuBytes,\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha512 } from '@noble/hashes/sha512';\nimport { concatBytes, randomBytes, utf8ToBytes } from '@noble/hashes/utils';\nimport { ExtPointType, twistedEdwards } from './abstract/edwards.js';\nimport { montgomery } from './abstract/montgomery.js';\nimport { Field, FpSqrtEven, isNegativeLE, mod, pow2 } from './abstract/modular.js';\nimport {\n  bytesToHex,\n  bytesToNumberLE,\n  ensureBytes,\n  equalBytes,\n  Hex,\n  numberToBytesLE,\n} from './abstract/utils.js';\nimport { createHasher, htfBasicOpts, expand_message_xmd } from './abstract/hash-to-curve.js';\nimport { AffinePoint, Group } from './abstract/curve.js';\n\n/**\n * ed25519 Twisted Edwards curve with following addons:\n * - X25519 ECDH\n * - Ristretto cofactor elimination\n * - Elligator hash-to-group / point indistinguishability\n */\n\nconst ED25519_P = BigInt(\n  '57896044618658097711785492504343953926634992332820282019728792003956564819949'\n);\n// \u221A(-1) aka \u221A(a) aka 2^((p-1)/4)\nconst ED25519_SQRT_M1 = BigInt(\n  '19681161376707505956807079304988542015446066515923890162744021073123829784752'\n);\n\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _5n = BigInt(5);\n// prettier-ignore\nconst _10n = BigInt(10), _20n = BigInt(20), _40n = BigInt(40), _80n = BigInt(80);\n\nfunction ed25519_pow_2_252_3(x: bigint) {\n  const P = ED25519_P;\n  const x2 = (x * x) % P;\n  const b2 = (x2 * x) % P; // x^3, 11\n  const b4 = (pow2(b2, _2n, P) * b2) % P; // x^15, 1111\n  const b5 = (pow2(b4, _1n, P) * x) % P; // x^31\n  const b10 = (pow2(b5, _5n, P) * b5) % P;\n  const b20 = (pow2(b10, _10n, P) * b10) % P;\n  const b40 = (pow2(b20, _20n, P) * b20) % P;\n  const b80 = (pow2(b40, _40n, P) * b40) % P;\n  const b160 = (pow2(b80, _80n, P) * b80) % P;\n  const b240 = (pow2(b160, _80n, P) * b80) % P;\n  const b250 = (pow2(b240, _10n, P) * b10) % P;\n  const pow_p_5_8 = (pow2(b250, _2n, P) * x) % P;\n  // ^ To pow to (p+3)/8, multiply it by x.\n  return { pow_p_5_8, b2 };\n}\n\nfunction adjustScalarBytes(bytes: Uint8Array): Uint8Array {\n  // Section 5: For X25519, in order to decode 32 random bytes as an integer scalar,\n  // set the three least significant bits of the first byte\n  bytes[0] &= 248; // 0b1111_1000\n  // and the most significant bit of the last to zero,\n  bytes[31] &= 127; // 0b0111_1111\n  // set the second most significant bit of the last byte to 1\n  bytes[31] |= 64; // 0b0100_0000\n  return bytes;\n}\n\n// sqrt(u/v)\nfunction uvRatio(u: bigint, v: bigint): { isValid: boolean; value: bigint } {\n  const P = ED25519_P;\n  const v3 = mod(v * v * v, P); // v\u00B3\n  const v7 = mod(v3 * v3 * v, P); // v\u2077\n  // (p+3)/8 and (p-5)/8\n  const pow = ed25519_pow_2_252_3(u * v7).pow_p_5_8;\n  let x = mod(u * v3 * pow, P); // (uv\u00B3)(uv\u2077)^(p-5)/8\n  const vx2 = mod(v * x * x, P); // vx\u00B2\n  const root1 = x; // First root candidate\n  const root2 = mod(x * ED25519_SQRT_M1, P); // Second root candidate\n  const useRoot1 = vx2 === u; // If vx\u00B2 = u (mod p), x is a square root\n  const useRoot2 = vx2 === mod(-u, P); // If vx\u00B2 = -u, set x <-- x * 2^((p-1)/4)\n  const noRoot = vx2 === mod(-u * ED25519_SQRT_M1, P); // There is no valid root, vx\u00B2 = -u\u221A(-1)\n  if (useRoot1) x = root1;\n  if (useRoot2 || noRoot) x = root2; // We return root2 anyway, for const-time\n  if (isNegativeLE(x, P)) x = mod(-x, P);\n  return { isValid: useRoot1 || useRoot2, value: x };\n}\n\n// Just in case\nexport const ED25519_TORSION_SUBGROUP = [\n  '0100000000000000000000000000000000000000000000000000000000000000',\n  'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a',\n  '0000000000000000000000000000000000000000000000000000000000000080',\n  '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05',\n  'ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f',\n  '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc85',\n  '0000000000000000000000000000000000000000000000000000000000000000',\n  'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac03fa',\n];\n\nconst Fp = Field(ED25519_P, undefined, true);\n\nconst ed25519Defaults = {\n  // Param: a\n  a: BigInt(-1), // Fp.create(-1) is proper; our way still works and is faster\n  // d is equal to -121665/121666 over finite field.\n  // Negative number is P - number, and division is invert(number, P)\n  d: BigInt('37095705934669439343138083508754565189542113879843219016388785533085940283555'),\n  // Finite field \uD835\uDD3Dp over which we'll do calculations; 2n**255n - 19n\n  Fp,\n  // Subgroup order: how many points curve has\n  // 2n**252n + 27742317777372353535851937790883648493n;\n  n: BigInt('7237005577332262213973186563042994240857116359379907606001950938285454250989'),\n  // Cofactor\n  h: BigInt(8),\n  // Base point (x, y) aka generator point\n  Gx: BigInt('15112221349535400772501151409588531511454012693041857206046113283949847762202'),\n  Gy: BigInt('46316835694926478169428394003475163141307993866256225615783033603165251855960'),\n  hash: sha512,\n  randomBytes,\n  adjustScalarBytes,\n  // dom2\n  // Ratio of u to v. Allows us to combine inversion and square root. Uses algo from RFC8032 5.1.3.\n  // Constant-time, u/\u221Av\n  uvRatio,\n} as const;\n\nexport const ed25519 = /* @__PURE__ */ twistedEdwards(ed25519Defaults);\n\nfunction ed25519_domain(data: Uint8Array, ctx: Uint8Array, phflag: boolean) {\n  if (ctx.length > 255) throw new Error('Context is too big');\n  return concatBytes(\n    utf8ToBytes('SigEd25519 no Ed25519 collisions'),\n    new Uint8Array([phflag ? 1 : 0, ctx.length]),\n    ctx,\n    data\n  );\n}\n\nexport const ed25519ctx = /* @__PURE__ */ twistedEdwards({\n  ...ed25519Defaults,\n  domain: ed25519_domain,\n});\nexport const ed25519ph = /* @__PURE__ */ twistedEdwards({\n  ...ed25519Defaults,\n  domain: ed25519_domain,\n  prehash: sha512,\n});\n\nexport const x25519 = /* @__PURE__ */ (() =>\n  montgomery({\n    P: ED25519_P,\n    a: BigInt(486662),\n    montgomeryBits: 255, // n is 253 bits\n    nByteLength: 32,\n    Gu: BigInt(9),\n    powPminus2: (x: bigint): bigint => {\n      const P = ED25519_P;\n      // x^(p-2) aka x^(2^255-21)\n      const { pow_p_5_8, b2 } = ed25519_pow_2_252_3(x);\n      return mod(pow2(pow_p_5_8, BigInt(3), P) * b2, P);\n    },\n    adjustScalarBytes,\n    randomBytes,\n  }))();\n\n/**\n * Converts ed25519 public key to x25519 public key. Uses formula:\n * * `(u, v) = ((1+y)/(1-y), sqrt(-486664)*u/x)`\n * * `(x, y) = (sqrt(-486664)*u/v, (u-1)/(u+1))`\n * @example\n *   const someonesPub = ed25519.getPublicKey(ed25519.utils.randomPrivateKey());\n *   const aPriv = x25519.utils.randomPrivateKey();\n *   x25519.getSharedSecret(aPriv, edwardsToMontgomeryPub(someonesPub))\n */\nexport function edwardsToMontgomeryPub(edwardsPub: Hex): Uint8Array {\n  const { y } = ed25519.ExtendedPoint.fromHex(edwardsPub);\n  const _1n = BigInt(1);\n  return Fp.toBytes(Fp.create((_1n + y) * Fp.inv(_1n - y)));\n}\nexport const edwardsToMontgomery = edwardsToMontgomeryPub; // deprecated\n\n/**\n * Converts ed25519 secret key to x25519 secret key.\n * @example\n *   const someonesPub = x25519.getPublicKey(x25519.utils.randomPrivateKey());\n *   const aPriv = ed25519.utils.randomPrivateKey();\n *   x25519.getSharedSecret(edwardsToMontgomeryPriv(aPriv), someonesPub)\n */\nexport function edwardsToMontgomeryPriv(edwardsPriv: Uint8Array): Uint8Array {\n  const hashed = ed25519Defaults.hash(edwardsPriv.subarray(0, 32));\n  return ed25519Defaults.adjustScalarBytes(hashed).subarray(0, 32);\n}\n\n// Hash To Curve Elligator2 Map (NOTE: different from ristretto255 elligator)\n// NOTE: very important part is usage of FpSqrtEven for ELL2_C1_EDWARDS, since\n// SageMath returns different root first and everything falls apart\n\nconst ELL2_C1 = (Fp.ORDER + BigInt(3)) / BigInt(8); // 1. c1 = (q + 3) / 8       # Integer arithmetic\n\nconst ELL2_C2 = Fp.pow(_2n, ELL2_C1); // 2. c2 = 2^c1\nconst ELL2_C3 = Fp.sqrt(Fp.neg(Fp.ONE)); // 3. c3 = sqrt(-1)\nconst ELL2_C4 = (Fp.ORDER - BigInt(5)) / BigInt(8); // 4. c4 = (q - 5) / 8       # Integer arithmetic\nconst ELL2_J = BigInt(486662);\n\n// prettier-ignore\nfunction map_to_curve_elligator2_curve25519(u: bigint) {\n  let tv1 = Fp.sqr(u);       //  1.  tv1 = u^2\n  tv1 = Fp.mul(tv1, _2n);       //  2.  tv1 = 2 * tv1\n  let xd = Fp.add(tv1, Fp.ONE); //  3.   xd = tv1 + 1         # Nonzero: -1 is square (mod p), tv1 is not\n  let x1n = Fp.neg(ELL2_J);  //  4.  x1n = -J              # x1 = x1n / xd = -J / (1 + 2 * u^2)\n  let tv2 = Fp.sqr(xd);      //  5.  tv2 = xd^2\n  let gxd = Fp.mul(tv2, xd);    //  6.  gxd = tv2 * xd        # gxd = xd^3\n  let gx1 = Fp.mul(tv1, ELL2_J); //  7.  gx1 = J * tv1         # x1n + J * xd\n  gx1 = Fp.mul(gx1, x1n);       //  8.  gx1 = gx1 * x1n       # x1n^2 + J * x1n * xd\n  gx1 = Fp.add(gx1, tv2);       //  9.  gx1 = gx1 + tv2       # x1n^2 + J * x1n * xd + xd^2\n  gx1 = Fp.mul(gx1, x1n);       //  10. gx1 = gx1 * x1n       # x1n^3 + J * x1n^2 * xd + x1n * xd^2\n  let tv3 = Fp.sqr(gxd);     //  11. tv3 = gxd^2\n  tv2 = Fp.sqr(tv3);         //  12. tv2 = tv3^2           # gxd^4\n  tv3 = Fp.mul(tv3, gxd);       //  13. tv3 = tv3 * gxd       # gxd^3\n  tv3 = Fp.mul(tv3, gx1);       //  14. tv3 = tv3 * gx1       # gx1 * gxd^3\n  tv2 = Fp.mul(tv2, tv3);       //  15. tv2 = tv2 * tv3       # gx1 * gxd^7\n  let y11 = Fp.pow(tv2, ELL2_C4); //  16. y11 = tv2^c4        # (gx1 * gxd^7)^((p - 5) / 8)\n  y11 = Fp.mul(y11, tv3);       //  17. y11 = y11 * tv3       # gx1*gxd^3*(gx1*gxd^7)^((p-5)/8)\n  let y12 = Fp.mul(y11, ELL2_C3); //  18. y12 = y11 * c3\n  tv2 = Fp.sqr(y11);         //  19. tv2 = y11^2\n  tv2 = Fp.mul(tv2, gxd);       //  20. tv2 = tv2 * gxd\n  let e1 = Fp.eql(tv2, gx1); //  21.  e1 = tv2 == gx1\n  let y1 = Fp.cmov(y12, y11, e1); //  22.  y1 = CMOV(y12, y11, e1)  # If g(x1) is square, this is its sqrt\n  let x2n = Fp.mul(x1n, tv1);   //  23. x2n = x1n * tv1       # x2 = x2n / xd = 2 * u^2 * x1n / xd\n  let y21 = Fp.mul(y11, u);     //  24. y21 = y11 * u\n  y21 = Fp.mul(y21, ELL2_C2);   //  25. y21 = y21 * c2\n  let y22 = Fp.mul(y21, ELL2_C3); //  26. y22 = y21 * c3\n  let gx2 = Fp.mul(gx1, tv1);   //  27. gx2 = gx1 * tv1       # g(x2) = gx2 / gxd = 2 * u^2 * g(x1)\n  tv2 = Fp.sqr(y21);         //  28. tv2 = y21^2\n  tv2 = Fp.mul(tv2, gxd);       //  29. tv2 = tv2 * gxd\n  let e2 = Fp.eql(tv2, gx2); //  30.  e2 = tv2 == gx2\n  let y2 = Fp.cmov(y22, y21, e2); //  31.  y2 = CMOV(y22, y21, e2)  # If g(x2) is square, this is its sqrt\n  tv2 = Fp.sqr(y1);          //  32. tv2 = y1^2\n  tv2 = Fp.mul(tv2, gxd);       //  33. tv2 = tv2 * gxd\n  let e3 = Fp.eql(tv2, gx1); //  34.  e3 = tv2 == gx1\n  let xn = Fp.cmov(x2n, x1n, e3); //  35.  xn = CMOV(x2n, x1n, e3)  # If e3, x = x1, else x = x2\n  let y = Fp.cmov(y2, y1, e3);  //  36.   y = CMOV(y2, y1, e3)    # If e3, y = y1, else y = y2\n  let e4 = Fp.isOdd(y);         //  37.  e4 = sgn0(y) == 1        # Fix sign of y\n  y = Fp.cmov(y, Fp.neg(y), e3 !== e4); //  38.   y = CMOV(y, -y, e3 XOR e4)\n  return { xMn: xn, xMd: xd, yMn: y, yMd: _1n }; //  39. return (xn, xd, y, 1)\n}\n\nconst ELL2_C1_EDWARDS = FpSqrtEven(Fp, Fp.neg(BigInt(486664))); // sgn0(c1) MUST equal 0\nfunction map_to_curve_elligator2_edwards25519(u: bigint) {\n  const { xMn, xMd, yMn, yMd } = map_to_curve_elligator2_curve25519(u); //  1.  (xMn, xMd, yMn, yMd) =\n  // map_to_curve_elligator2_curve25519(u)\n  let xn = Fp.mul(xMn, yMd); //  2.  xn = xMn * yMd\n  xn = Fp.mul(xn, ELL2_C1_EDWARDS); //  3.  xn = xn * c1\n  let xd = Fp.mul(xMd, yMn); //  4.  xd = xMd * yMn    # xn / xd = c1 * xM / yM\n  let yn = Fp.sub(xMn, xMd); //  5.  yn = xMn - xMd\n  let yd = Fp.add(xMn, xMd); //  6.  yd = xMn + xMd    # (n / d - 1) / (n / d + 1) = (n - d) / (n + d)\n  let tv1 = Fp.mul(xd, yd); //  7. tv1 = xd * yd\n  let e = Fp.eql(tv1, Fp.ZERO); //  8.   e = tv1 == 0\n  xn = Fp.cmov(xn, Fp.ZERO, e); //  9.  xn = CMOV(xn, 0, e)\n  xd = Fp.cmov(xd, Fp.ONE, e); //  10. xd = CMOV(xd, 1, e)\n  yn = Fp.cmov(yn, Fp.ONE, e); //  11. yn = CMOV(yn, 1, e)\n  yd = Fp.cmov(yd, Fp.ONE, e); //  12. yd = CMOV(yd, 1, e)\n\n  const inv = Fp.invertBatch([xd, yd]); // batch division\n  return { x: Fp.mul(xn, inv[0]), y: Fp.mul(yn, inv[1]) }; //  13. return (xn, xd, yn, yd)\n}\n\nconst htf = /* @__PURE__ */ (() =>\n  createHasher(\n    ed25519.ExtendedPoint,\n    (scalars: bigint[]) => map_to_curve_elligator2_edwards25519(scalars[0]),\n    {\n      DST: 'edwards25519_XMD:SHA-512_ELL2_RO_',\n      encodeDST: 'edwards25519_XMD:SHA-512_ELL2_NU_',\n      p: Fp.ORDER,\n      m: 1,\n      k: 128,\n      expand: 'xmd',\n      hash: sha512,\n    }\n  ))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n\nfunction assertRstPoint(other: unknown) {\n  if (!(other instanceof RistPoint)) throw new Error('RistrettoPoint expected');\n}\n\n// \u221A(-1) aka \u221A(a) aka 2^((p-1)/4)\nconst SQRT_M1 = ED25519_SQRT_M1;\n// \u221A(ad - 1)\nconst SQRT_AD_MINUS_ONE = BigInt(\n  '25063068953384623474111414158702152701244531502492656460079210482610430750235'\n);\n// 1 / \u221A(a-d)\nconst INVSQRT_A_MINUS_D = BigInt(\n  '54469307008909316920995813868745141605393597292927456921205312896311721017578'\n);\n// 1-d\u00B2\nconst ONE_MINUS_D_SQ = BigInt(\n  '1159843021668779879193775521855586647937357759715417654439879720876111806838'\n);\n// (d-1)\u00B2\nconst D_MINUS_ONE_SQ = BigInt(\n  '40440834346308536858101042469323190826248399146238708352240133220865137265952'\n);\n// Calculates 1/\u221A(number)\nconst invertSqrt = (number: bigint) => uvRatio(_1n, number);\n\nconst MAX_255B = BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');\nconst bytes255ToNumberLE = (bytes: Uint8Array) =>\n  ed25519.CURVE.Fp.create(bytesToNumberLE(bytes) & MAX_255B);\n\ntype ExtendedPoint = ExtPointType;\n\n// Computes Elligator map for Ristretto\n// https://ristretto.group/formulas/elligator.html\nfunction calcElligatorRistrettoMap(r0: bigint): ExtendedPoint {\n  const { d } = ed25519.CURVE;\n  const P = ed25519.CURVE.Fp.ORDER;\n  const mod = ed25519.CURVE.Fp.create;\n  const r = mod(SQRT_M1 * r0 * r0); // 1\n  const Ns = mod((r + _1n) * ONE_MINUS_D_SQ); // 2\n  let c = BigInt(-1); // 3\n  const D = mod((c - d * r) * mod(r + d)); // 4\n  let { isValid: Ns_D_is_sq, value: s } = uvRatio(Ns, D); // 5\n  let s_ = mod(s * r0); // 6\n  if (!isNegativeLE(s_, P)) s_ = mod(-s_);\n  if (!Ns_D_is_sq) s = s_; // 7\n  if (!Ns_D_is_sq) c = r; // 8\n  const Nt = mod(c * (r - _1n) * D_MINUS_ONE_SQ - D); // 9\n  const s2 = s * s;\n  const W0 = mod((s + s) * D); // 10\n  const W1 = mod(Nt * SQRT_AD_MINUS_ONE); // 11\n  const W2 = mod(_1n - s2); // 12\n  const W3 = mod(_1n + s2); // 13\n  return new ed25519.ExtendedPoint(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2));\n}\n\n/**\n * Each ed25519/ExtendedPoint has 8 different equivalent points. This can be\n * a source of bugs for protocols like ring signatures. Ristretto was created to solve this.\n * Ristretto point operates in X:Y:Z:T extended coordinates like ExtendedPoint,\n * but it should work in its own namespace: do not combine those two.\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-ristretto255-decaf448\n */\nclass RistPoint implements Group<RistPoint> {\n  static BASE: RistPoint;\n  static ZERO: RistPoint;\n  // Private property to discourage combining ExtendedPoint + RistrettoPoint\n  // Always use Ristretto encoding/decoding instead.\n  constructor(private readonly ep: ExtendedPoint) {}\n\n  static fromAffine(ap: AffinePoint<bigint>) {\n    return new RistPoint(ed25519.ExtendedPoint.fromAffine(ap));\n  }\n\n  /**\n   * Takes uniform output of 64-byte hash function like sha512 and converts it to `RistrettoPoint`.\n   * The hash-to-group operation applies Elligator twice and adds the results.\n   * **Note:** this is one-way map, there is no conversion from point to hash.\n   * https://ristretto.group/formulas/elligator.html\n   * @param hex 64-byte output of a hash function\n   */\n  static hashToCurve(hex: Hex): RistPoint {\n    hex = ensureBytes('ristrettoHash', hex, 64);\n    const r1 = bytes255ToNumberLE(hex.slice(0, 32));\n    const R1 = calcElligatorRistrettoMap(r1);\n    const r2 = bytes255ToNumberLE(hex.slice(32, 64));\n    const R2 = calcElligatorRistrettoMap(r2);\n    return new RistPoint(R1.add(R2));\n  }\n\n  /**\n   * Converts ristretto-encoded string to ristretto point.\n   * https://ristretto.group/formulas/decoding.html\n   * @param hex Ristretto-encoded 32 bytes. Not every 32-byte string is valid ristretto encoding\n   */\n  static fromHex(hex: Hex): RistPoint {\n    hex = ensureBytes('ristrettoHex', hex, 32);\n    const { a, d } = ed25519.CURVE;\n    const P = ed25519.CURVE.Fp.ORDER;\n    const mod = ed25519.CURVE.Fp.create;\n    const emsg = 'RistrettoPoint.fromHex: the hex is not valid encoding of RistrettoPoint';\n    const s = bytes255ToNumberLE(hex);\n    // 1. Check that s_bytes is the canonical encoding of a field element, or else abort.\n    // 3. Check that s is non-negative, or else abort\n    if (!equalBytes(numberToBytesLE(s, 32), hex) || isNegativeLE(s, P)) throw new Error(emsg);\n    const s2 = mod(s * s);\n    const u1 = mod(_1n + a * s2); // 4 (a is -1)\n    const u2 = mod(_1n - a * s2); // 5\n    const u1_2 = mod(u1 * u1);\n    const u2_2 = mod(u2 * u2);\n    const v = mod(a * d * u1_2 - u2_2); // 6\n    const { isValid, value: I } = invertSqrt(mod(v * u2_2)); // 7\n    const Dx = mod(I * u2); // 8\n    const Dy = mod(I * Dx * v); // 9\n    let x = mod((s + s) * Dx); // 10\n    if (isNegativeLE(x, P)) x = mod(-x); // 10\n    const y = mod(u1 * Dy); // 11\n    const t = mod(x * y); // 12\n    if (!isValid || isNegativeLE(t, P) || y === _0n) throw new Error(emsg);\n    return new RistPoint(new ed25519.ExtendedPoint(x, y, _1n, t));\n  }\n\n  /**\n   * Encodes ristretto point to Uint8Array.\n   * https://ristretto.group/formulas/encoding.html\n   */\n  toRawBytes(): Uint8Array {\n    let { ex: x, ey: y, ez: z, et: t } = this.ep;\n    const P = ed25519.CURVE.Fp.ORDER;\n    const mod = ed25519.CURVE.Fp.create;\n    const u1 = mod(mod(z + y) * mod(z - y)); // 1\n    const u2 = mod(x * y); // 2\n    // Square root always exists\n    const u2sq = mod(u2 * u2);\n    const { value: invsqrt } = invertSqrt(mod(u1 * u2sq)); // 3\n    const D1 = mod(invsqrt * u1); // 4\n    const D2 = mod(invsqrt * u2); // 5\n    const zInv = mod(D1 * D2 * t); // 6\n    let D: bigint; // 7\n    if (isNegativeLE(t * zInv, P)) {\n      let _x = mod(y * SQRT_M1);\n      let _y = mod(x * SQRT_M1);\n      x = _x;\n      y = _y;\n      D = mod(D1 * INVSQRT_A_MINUS_D);\n    } else {\n      D = D2; // 8\n    }\n    if (isNegativeLE(x * zInv, P)) y = mod(-y); // 9\n    let s = mod((z - y) * D); // 10 (check footer's note, no sqrt(-a))\n    if (isNegativeLE(s, P)) s = mod(-s);\n    return numberToBytesLE(s, 32); // 11\n  }\n\n  toHex(): string {\n    return bytesToHex(this.toRawBytes());\n  }\n\n  toString(): string {\n    return this.toHex();\n  }\n\n  // Compare one point to another.\n  equals(other: RistPoint): boolean {\n    assertRstPoint(other);\n    const { ex: X1, ey: Y1 } = this.ep;\n    const { ex: X2, ey: Y2 } = other.ep;\n    const mod = ed25519.CURVE.Fp.create;\n    // (x1 * y2 == y1 * x2) | (y1 * y2 == x1 * x2)\n    const one = mod(X1 * Y2) === mod(Y1 * X2);\n    const two = mod(Y1 * Y2) === mod(X1 * X2);\n    return one || two;\n  }\n\n  add(other: RistPoint): RistPoint {\n    assertRstPoint(other);\n    return new RistPoint(this.ep.add(other.ep));\n  }\n\n  subtract(other: RistPoint): RistPoint {\n    assertRstPoint(other);\n    return new RistPoint(this.ep.subtract(other.ep));\n  }\n\n  multiply(scalar: bigint): RistPoint {\n    return new RistPoint(this.ep.multiply(scalar));\n  }\n\n  multiplyUnsafe(scalar: bigint): RistPoint {\n    return new RistPoint(this.ep.multiplyUnsafe(scalar));\n  }\n\n  double(): RistPoint {\n    return new RistPoint(this.ep.double());\n  }\n\n  negate(): RistPoint {\n    return new RistPoint(this.ep.negate());\n  }\n}\nexport const RistrettoPoint = /* @__PURE__ */ (() => {\n  if (!RistPoint.BASE) RistPoint.BASE = new RistPoint(ed25519.ExtendedPoint.BASE);\n  if (!RistPoint.ZERO) RistPoint.ZERO = new RistPoint(ed25519.ExtendedPoint.ZERO);\n  return RistPoint;\n})();\n\n// Hashing to ristretto255. https://www.rfc-editor.org/rfc/rfc9380#appendix-B\nexport const hashToRistretto255 = (msg: Uint8Array, options: htfBasicOpts) => {\n  const d = options.DST;\n  const DST = typeof d === 'string' ? utf8ToBytes(d) : d;\n  const uniform_bytes = expand_message_xmd(msg, DST, 64, sha512);\n  const P = RistPoint.hashToCurve(uniform_bytes);\n  return P;\n};\nexport const hash_to_ristretto255 = hashToRistretto255; // legacy\n", "import { Convert } from '@web5/common';\nimport { ed25519, edwardsToMontgomeryPub, edwardsToMontgomeryPriv, x25519 } from '@noble/curves/ed25519';\n\nimport type { Jwk } from '../jose/jwk.js';\nimport type { ComputePublicKeyParams, GetPublicKeyParams, SignParams, VerifyParams } from '../types/params-direct.js';\n\nimport { computeJwkThumbprint, isOkpPrivateJwk, isOkpPublicJwk } from '../jose/jwk.js';\n\n/**\n * The `Ed25519` class provides a comprehensive suite of utilities for working with the Ed25519\n * elliptic curve, widely used in modern cryptographic applications. This class includes methods for\n * key generation, conversion, signing, verification, and public key derivation.\n *\n * The class supports conversions between raw byte formats and JSON Web Key (JWK) formats. It\n * follows the guidelines and specifications outlined in RFC8032 for EdDSA (Edwards-curve Digital\n * Signature Algorithm) operations.\n *\n * Key Features:\n * - Key Generation: Generate Ed25519 private keys in JWK format.\n * - Key Conversion: Transform keys between raw byte arrays and JWK formats.\n * - Public Key Derivation: Derive public keys from private keys.\n * - Signing and Verification: Sign data and verify signatures with Ed25519 keys.\n * - Key Validation: Validate the mathematical correctness of Ed25519 keys.\n *\n * The methods in this class are asynchronous, returning Promises to accommodate various\n * JavaScript environments, and use `Uint8Array` for binary data handling.\n *\n * @example\n * ```ts\n * // Key Generation\n * const privateKey = await Ed25519.generateKey();\n *\n * // Public Key Derivation\n * const publicKey = await Ed25519.computePublicKey({ key: privateKey });\n * console.log(publicKey === await Ed25519.getPublicKey({ key: privateKey })); // Output: true\n *\n * // EdDSA Signing\n * const signature = await Ed25519.sign({\n *   key: privateKey,\n *   data: new TextEncoder().encode('Message')\n * });\n *\n * // EdDSA Signature Verification\n * const isValid = await Ed25519.verify({\n *   key: publicKey,\n *   signature: signature,\n *   data: new TextEncoder().encode('Message')\n * });\n *\n * // Key Conversion\n * const privateKeyBytes = await Ed25519.privateKeyToBytes({ privateKey });\n * const publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey });\n *\n * // Key Validation\n * const isPublicKeyValid = await Ed25519.validatePublicKey({ publicKeyBytes });\n * ```\n */\nexport class Ed25519 {\n  /**\n   * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method accepts a private key as a byte array (Uint8Array) for the Curve25519 curve in\n   * Twisted Edwards form and transforms it into a JWK object. The process involves first deriving\n   * the public key from the private key, then encoding both the private and public keys into\n   * base64url format.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'OKP' for Octet Key Pair.\n   * - `crv`: Curve Name, set to 'Ed25519'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The computed public key, base64url-encoded.\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // Replace with actual private key bytes\n   * const privateKey = await Ed25519.bytesToPrivateKey({ privateKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKeyBytes - The raw private key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the private key in JWK format.\n   */\n  public static async bytesToPrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Derive the public key from the private key.\n    const publicKeyBytes  = ed25519.getPublicKey(privateKeyBytes);\n\n    // Construct the private key in JWK format.\n    const privateKey: Jwk = {\n      crv : 'Ed25519',\n      d   : Convert.uint8Array(privateKeyBytes).toBase64Url(),\n      kty : 'OKP',\n      x   : Convert.uint8Array(publicKeyBytes).toBase64Url(),\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method accepts a public key as a byte array (Uint8Array) for the Curve25519 curve in\n   * Twisted Edwards form and transforms it into a JWK object. The process involves encoding the\n   * public key bytes into base64url format.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'OKP' for Octet Key Pair.\n   * - `crv`: Curve Name, set to 'X25519'.\n   * - `x`: The public key, base64url-encoded.\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // Replace with actual public key bytes\n   * const publicKey = await X25519.bytesToPublicKey({ publicKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKeyBytes - The raw public key as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async bytesToPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'OKP',\n      crv : 'Ed25519',\n      x   : Convert.uint8Array(publicKeyBytes).toBase64Url(),\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Derives the public key in JWK format from a given Ed25519 private key.\n   *\n   * @remarks\n   * This method takes a private key in JWK format and derives its corresponding public key,\n   * also in JWK format.  The derivation process involves converting the private key to a\n   * raw byte array and then computing the corresponding public key on the Curve25519 curve in\n   * Twisted Edwards form. The public key is then encoded into base64url format to construct\n   * a JWK representation.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing an Ed25519 private key\n   * const publicKey = await Ed25519.computePublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for the public key derivation.\n   * @param params.key - The private key in JWK format from which to derive the public key.\n   *\n   * @returns A Promise that resolves to the computed public key in JWK format.\n   */\n  public static async computePublicKey({ key }:\n    ComputePublicKeyParams\n  ): Promise<Jwk> {\n    // Convert the provided private key to a byte array.\n    const privateKeyBytes  = await Ed25519.privateKeyToBytes({ privateKey: key });\n\n    // Derive the public key from the private key.\n    const publicKeyBytes  = ed25519.getPublicKey(privateKeyBytes);\n\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'OKP',\n      crv : 'Ed25519',\n      x   : Convert.uint8Array(publicKeyBytes).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts an Ed25519 private key to its X25519 counterpart.\n   *\n   * @remarks\n   * This method enables the use of the same key pair for both digital signature (Ed25519)\n   * and key exchange (X25519) operations. It takes an Ed25519 private key and converts it\n   * to the corresponding X25519 format, facilitating interoperability between signing\n   * and encryption protocols.\n   *\n   * @example\n   * ```ts\n   * const ed25519PrivateKey = { ... }; // An Ed25519 private key in JWK format\n   * const x25519PrivateKey = await Ed25519.convertPrivateKeyToX25519({\n   *   privateKey: ed25519PrivateKey\n   * });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKey - The Ed25519 private key to convert, in JWK format.\n   *\n   * @returns A Promise that resolves to the X25519 private key in JWK format.\n   */\n  public static async convertPrivateKeyToX25519({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Jwk> {\n    // Convert the provided Ed25519 private key to bytes.\n    const ed25519PrivateKeyBytes = await Ed25519.privateKeyToBytes({ privateKey });\n\n    // Convert the Ed25519 private key to an X25519 private key.\n    const x25519PrivateKeyBytes = edwardsToMontgomeryPriv(ed25519PrivateKeyBytes);\n\n    // Derive the X25519 public key from the X25519 private key.\n    const x25519PublicKeyBytes = x25519.getPublicKey(x25519PrivateKeyBytes);\n\n    // Construct the X25519 private key in JWK format.\n    const x25519PrivateKey: Jwk = {\n      kty : 'OKP',\n      crv : 'X25519',\n      d   : Convert.uint8Array(x25519PrivateKeyBytes).toBase64Url(),\n      x   : Convert.uint8Array(x25519PublicKeyBytes).toBase64Url(),\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    x25519PrivateKey.kid = await computeJwkThumbprint({ jwk: x25519PrivateKey });\n\n    return x25519PrivateKey;\n  }\n\n  /**\n   * Converts an Ed25519 public key to its X25519 counterpart.\n   *\n   * @remarks\n   * This method enables the use of the same key pair for both digital signature (Ed25519)\n   * and key exchange (X25519) operations. It takes an Ed25519 public key and converts it\n   * to the corresponding X25519 format, facilitating interoperability between signing\n   * and encryption protocols.\n   *\n   * @example\n   * ```ts\n   * const ed25519PublicKey = { ... }; // An Ed25519 public key in JWK format\n   * const x25519PublicKey = await Ed25519.convertPublicKeyToX25519({\n   *   publicKey: ed25519PublicKey\n   * });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKey - The Ed25519 public key to convert, in JWK format.\n   *\n   * @returns A Promise that resolves to the X25519 public key in JWK format.\n   */\n  public static async convertPublicKeyToX25519({ publicKey }: {\n    publicKey: Jwk;\n  }): Promise<Jwk> {\n    // Convert the provided private key to a byte array.\n    const ed25519PublicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey });\n\n    // Verify Edwards public key is valid.\n    const isValid = await Ed25519.validatePublicKey({ publicKeyBytes: ed25519PublicKeyBytes });\n    if (!isValid) {\n      throw new Error('Ed25519: Invalid public key.');\n    }\n\n    // Convert the Ed25519 public key to an X25519 private key.\n    const x25519PublicKeyBytes = edwardsToMontgomeryPub(ed25519PublicKeyBytes);\n\n    // Construct the X25519 private key in JWK format.\n    const x25519PublicKey: Jwk = {\n      kty : 'OKP',\n      crv : 'X25519',\n      x   : Convert.uint8Array(x25519PublicKeyBytes).toBase64Url(),\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    x25519PublicKey.kid = await computeJwkThumbprint({ jwk: x25519PublicKey });\n\n    return x25519PublicKey;\n  }\n\n  /**\n   * Generates an Ed25519 private key in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method creates a new private key suitable for use with the Curve25519 elliptic curve in\n   * Twisted Edwards form. The key generation process involves using cryptographically secure\n   * random number generation to ensure the uniqueness and security of the key. The resulting\n   * private key adheres to the JWK format making it compatible with common cryptographic\n   * standards and easy to use in various cryptographic processes.\n   *\n   * The generated private key in JWK format includes the following components:\n   * - `kty`: Key Type, set to 'OKP' for Octet Key Pair.\n   * - `crv`: Curve Name, set to 'Ed25519'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The derived public key, base64url-encoded.\n   *\n   * @example\n   * ```ts\n   * const privateKey = await Ed25519.generateKey();\n   * ```\n   *\n   * @returns A Promise that resolves to the generated private key in JWK format.\n   */\n  public static async generateKey(): Promise<Jwk> {\n    // Generate a random private key.\n    const privateKeyBytes = ed25519.utils.randomPrivateKey();\n\n    // Convert private key from bytes to JWK format.\n    const privateKey = await Ed25519.bytesToPrivateKey({ privateKeyBytes });\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Retrieves the public key properties from a given private key in JWK format.\n   *\n   * @remarks\n   * This method extracts the public key portion from an Ed25519 private key in JWK format. It does\n   * so by removing the private key property 'd' and making a shallow copy, effectively yielding the\n   * public key. The method sets the 'kid' (key ID) property using the JWK thumbprint if it is not\n   * already defined. This approach is used under the assumption that a private key in JWK format\n   * always contains the corresponding public key properties.\n   *\n   * Note: This method offers a significant performance advantage, being about 100 times faster\n   * than `computePublicKey()`. However, it does not mathematically validate the private key, nor\n   * does it derive the public key from the private key. It simply extracts existing public key\n   * properties from the private key object. This makes it suitable for scenarios where speed is\n   * critical and the private key's integrity is already assured.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing an Ed25519 private key\n   * const publicKey = await Ed25519.getPublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key properties.\n   * @param params.key - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n  // Verify the provided JWK represents an octet key pair (OKP) Ed25519 private key.\n    if (!(isOkpPrivateJwk(key) && key.crv === 'Ed25519')) {\n      throw new Error(`Ed25519: The provided key is not an Ed25519 private JWK.`);\n    }\n\n    // Remove the private key property ('d') and make a shallow copy of the provided key.\n    let { d, ...publicKey } = key;\n\n    // If the key ID is undefined, set it to the JWK thumbprint.\n    publicKey.kid ??= await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts a private key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method accepts a private key in JWK format and extracts its raw byte representation.\n   *\n   * This method accepts a public key in JWK format and converts it into its raw binary\n   * form. The conversion process involves decoding the 'd' parameter of the JWK\n   * from base64url format into a byte array.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // An Ed25519 private key in JWK format\n   * const privateKeyBytes = await Ed25519.privateKeyToBytes({ privateKey });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKey - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the private key as a Uint8Array.\n   */\n  public static async privateKeyToBytes({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid OKP private key.\n    if (!isOkpPrivateJwk(privateKey)) {\n      throw new Error(`Ed25519: The provided key is not a valid OKP private key.`);\n    }\n\n    // Decode the provided private key to bytes.\n    const privateKeyBytes = Convert.base64Url(privateKey.d).toUint8Array();\n\n    return privateKeyBytes;\n  }\n\n  /**\n   * Converts a public key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method accepts a public key in JWK format and converts it into its raw binary form.\n   * The conversion process involves decoding the 'x' parameter of the JWK (which represent the\n   * x coordinate of the elliptic curve point) from base64url format into a byte array.\n   *\n   * @example\n   * ```ts\n   * const publicKey = { ... }; // An Ed25519 public key in JWK format\n   * const publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKey - The public key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key as a Uint8Array.\n   */\n  public static async publicKeyToBytes({ publicKey }: {\n    publicKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid OKP public key.\n    if (!isOkpPublicJwk(publicKey)) {\n      throw new Error(`Ed25519: The provided key is not a valid OKP public key.`);\n    }\n\n    // Decode the provided public key to bytes.\n    const publicKeyBytes = Convert.base64Url(publicKey.x).toUint8Array();\n\n    return publicKeyBytes;\n  }\n\n  /**\n   * Generates an RFC8032-compliant EdDSA signature of given data using an Ed25519 private key.\n   *\n   * @remarks\n   * This method signs the provided data with a specified private key using the EdDSA\n   * (Edwards-curve Digital Signature Algorithm) as defined in RFC8032. It\n   * involves converting the private key from JWK format to a byte array and then employing\n   * the Ed25519 algorithm to sign the data. The output is a digital signature in the form\n   * of a Uint8Array, uniquely corresponding to both the data and the private key used for\n   * signing.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage'); // Data to be signed\n   * const privateKey = { ... }; // A Jwk object representing an Ed25519 private key\n   * const signature = await Ed25519.sign({ key: privateKey, data });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.key - The private key to use for signing, represented in JWK format.\n   * @param params.data - The data to sign, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the signature as a Uint8Array.\n   */\n  public static async sign({ key, data }:\n    SignParams\n  ): Promise<Uint8Array> {\n    // Convert the private key from JWK format to bytes.\n    const privateKeyBytes = await Ed25519.privateKeyToBytes({ privateKey: key });\n\n    // Sign the provided data using the EdDSA algorithm.\n    const signature = ed25519.sign(data, privateKeyBytes);\n\n    return signature;\n  }\n\n  /**\n   * Validates a given public key to confirm its mathematical correctness on the Edwards curve.\n   *\n   * @remarks\n   * This method decodes the Edwards points from the key bytes and asserts their validity on the\n   * Curve25519 curve in Twisted Edwards form. If the points are not valid, the method returns\n   * false. If the points are valid, the method returns true.\n   *\n   * Note that this validation strictly pertains to the key's format and numerical validity; it does\n   * not assess whether the key corresponds to a known entity or its security status (e.g., whether\n   * it has been compromised).\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // A public key in byte format\n   * const isValid = await Ed25519.validatePublicKey({ publicKeyBytes });\n   * console.log(isValid); // true if the key is valid on the Edwards curve, false otherwise\n   * ```\n   *\n   * @param params - The parameters for the public key validation.\n   * @param params.publicKeyBytes - The public key to validate, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating whether the key\n   *          corresponds to a valid point on the Edwards curve.\n   */\n  public static async validatePublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<boolean> {\n    try {\n    // Decode Edwards points from key bytes.\n      const point = ed25519.ExtendedPoint.fromHex(publicKeyBytes);\n\n      // Check if points are on the Twisted Edwards curve.\n      point.assertValidity();\n\n    } catch(error: any) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Verifies an RFC8032-compliant EdDSA signature against given data using an Ed25519 public key.\n   *\n   * @remarks\n   * This method validates a digital signature to ensure its authenticity and integrity.\n   * It uses the EdDSA (Edwards-curve Digital Signature Algorithm) as specified in RFC8032.\n   * The verification process involves converting the public key from JWK format to a raw\n   * byte array and using the Ed25519 algorithm to validate the signature against the provided data.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage'); // Data that was signed\n   * const publicKey = { ... }; // A Jwk object representing an Ed25519 public key\n   * const signature = new Uint8Array([...]); // Signature to verify\n   * const isValid = await Ed25519.verify({ key: publicKey, signature, data });\n   * console.log(isValid); // true if the signature is valid, false otherwise\n   * ```\n   *\n   * @param params - The parameters for the signature verification.\n   * @param params.key - The public key in JWK format used for verification.\n   * @param params.signature - The signature to verify, represented as a Uint8Array.\n   * @param params.data - The data that was signed, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating whether the signature is valid.\n   */\n  public static async verify({ key, signature, data }:\n    VerifyParams\n  ): Promise<boolean> {\n    // Convert the public key from JWK format to bytes.\n    const publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey: key });\n\n    // Perform the verification of the signature.\n    const isValid = ed25519.verify(signature, data, publicKeyBytes);\n\n    return isValid;\n  }\n}", "import type { Jwk } from '../jose/jwk.js';\nimport type { Signer } from '../types/signer.js';\nimport type { AsymmetricKeyGenerator } from '../types/key-generator.js';\nimport type {\n  SignParams,\n  VerifyParams,\n  GenerateKeyParams,\n  GetPublicKeyParams,\n  ComputePublicKeyParams,\n} from '../types/params-direct.js';\n\nimport { Ed25519 } from '../primitives/ed25519.js';\nimport { CryptoAlgorithm } from './crypto-algorithm.js';\nimport { isOkpPrivateJwk, isOkpPublicJwk } from '../jose/jwk.js';\n\n/**\n * The `EdDsaGenerateKeyParams` interface defines the algorithm-specific parameters that should be\n * passed into the `generateKey()` method when using the EdDSA algorithm.\n */\nexport interface EdDsaGenerateKeyParams extends GenerateKeyParams {\n  /**\n   * A string defining the type of key to generate. The value must be one of the following:\n   * - `\"Ed25519\"`: EdDSA using the Ed25519 curve.\n   */\n  algorithm: 'Ed25519';\n}\n\n/**\n * The `EdDsaAlgorithm` class provides a concrete implementation for cryptographic operations using\n * the Edwards-curve Digital Signature Algorithm (EdDSA). This class implements both\n * {@link Signer | `Signer`} and { @link AsymmetricKeyGenerator | `AsymmetricKeyGenerator`}\n * interfaces, providing private key generation, public key derivation, and creation/verification\n * of signatures.\n *\n * This class is typically accessed through implementations that extend the\n * {@link CryptoApi | `CryptoApi`} interface.\n */\nexport class EdDsaAlgorithm extends CryptoAlgorithm\n  implements AsymmetricKeyGenerator<EdDsaGenerateKeyParams, Jwk, GetPublicKeyParams>,\n             Signer<SignParams, VerifyParams> {\n\n  /**\n   * Derives the public key in JWK format from a given private key.\n   *\n   * @remarks\n   * This method takes a private key in JWK format and derives its corresponding public key,\n   * also in JWK format. The process ensures that the derived public key correctly corresponds to\n   * the given private key.\n   *\n   * @example\n   * ```ts\n   * const eddsa = new EdDsaAlgorithm();\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const publicKey = await eddsa.computePublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for the public key derivation.\n   * @param params.key - The private key in JWK format from which to derive the public key.\n   *\n   * @returns A Promise that resolves to the derived public key in JWK format.\n   */\n  public async computePublicKey({ key }:\n    ComputePublicKeyParams\n  ): Promise<Jwk> {\n    if (!isOkpPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an octet key pair (OKP) private key.');\n\n    switch (key.crv) {\n\n      case 'Ed25519': {\n        const publicKey = await Ed25519.computePublicKey({ key });\n        publicKey.alg = 'EdDSA';\n        return publicKey;\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Generates a new private key with the specified algorithm in JSON Web Key (JWK) format.\n   *\n   * @example\n   * ```ts\n   * const eddsa = new EdDsaAlgorithm();\n   * const privateKey = await eddsa.generateKey({ algorithm: 'Ed25519' });\n   * ```\n   *\n   * @param params - The parameters for key generation.\n   * @param params.algorithm - The algorithm to use for key generation.\n   *\n   * @returns A Promise that resolves to the generated private key in JWK format.\n   */\n  async generateKey({ algorithm }:\n    EdDsaGenerateKeyParams\n  ): Promise<Jwk> {\n    switch (algorithm) {\n\n      case 'Ed25519': {\n        const privateKey = await Ed25519.generateKey();\n        privateKey.alg = 'EdDSA';\n        return privateKey;\n      }\n    }\n  }\n\n  /**\n   * Retrieves the public key properties from a given private key in JWK format.\n   *\n   * @remarks\n   * This method extracts the public key portion from an EdDSA private key in JWK format. It does\n   * so by removing the private key property 'd' and making a shallow copy, effectively yielding the\n   * public key.\n   *\n   * Note: This method offers a significant performance advantage, being about 100 times faster\n   * than `computePublicKey()`. However, it does not mathematically validate the private key, nor\n   * does it derive the public key from the private key. It simply extracts existing public key\n   * properties from the private key object. This makes it suitable for scenarios where speed is\n   * critical and the private key's integrity is already assured.\n   *\n   * @example\n   * ```ts\n   * const eddsa = new EdDsaAlgorithm();\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const publicKey = await eddsa.getPublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key properties.\n   * @param params.key - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n    if (!isOkpPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an octet key pair (OKP) private key.');\n\n    switch (key.crv) {\n\n      case 'Ed25519': {\n        const publicKey = await Ed25519.getPublicKey({ key });\n        publicKey.alg = 'EdDSA';\n        return publicKey;\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Generates an EdDSA signature of given data using a private key.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the given `algorithm` to sign the\n   * provided data.\n   *\n   * The signature can later be verified by parties with access to the corresponding\n   * public key, ensuring that the data has not been tampered with and was indeed signed by the\n   * holder of the private key.\n   *\n   * @example\n   * ```ts\n   * const eddsa = new EdDsaAlgorithm();\n   * const data = new TextEncoder().encode('Message');\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const signature = await eddsa.sign({\n   *   key: privateKey,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.key - The private key to use for signing, represented in JWK format.\n   * @param params.data - The data to sign.\n   *\n   * @returns A Promise resolving to the digital signature as a `Uint8Array`.\n   */\n  public async sign({ key, data }:\n    SignParams\n  ): Promise<Uint8Array> {\n    if (!isOkpPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an octet key pair (OKP) private key.');\n\n    switch (key.crv) {\n\n      case 'Ed25519': {\n        return await Ed25519.sign({ key, data });\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Verifies an EdDSA signature associated with the provided data using the provided key.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the `crv` property of the provided key\n   * to check the validity of a digital signature against the original data. It confirms whether the\n   * signature was created by the holder of the corresponding private key and that the data has not\n   * been tampered with.\n   *s\n   * @example\n   * ```ts\n   * const eddsa = new EdDsaAlgorithm();\n   * const publicKey = { ... }; // Public key in JWK format corresponding to the private key that signed the data\n   * const signature = new Uint8Array([...]); // Signature to verify\n   * const data = new TextEncoder().encode('Message');\n   * const isValid = await eddsa.verify({\n   *   key: publicKey,\n   *   signature,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the verification operation.\n   * @param params.key - The key to use for verification.\n   * @param params.signature - The signature to verify.\n   * @param params.data - The data to verify.\n   *\n   * @returns A Promise resolving to a boolean indicating whether the signature is valid.\n   */\n  public async verify({ key, signature, data }:\n    VerifyParams\n  ): Promise<boolean> {\n    if (!isOkpPublicJwk(key)) throw new TypeError('Invalid key provided. Must be an octet key pair (OKP) public key.');\n\n    switch (key.crv) {\n\n      case 'Ed25519': {\n        return await Ed25519.verify({ key, signature, data });\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n}", "import { KeyValueStore, MemoryStore } from '@web5/common';\n\nimport type { Jwk } from './jose/jwk.js';\nimport type { Hasher } from './types/hasher.js';\nimport type { Signer } from './types/signer.js';\nimport type { CryptoApi } from './types/crypto-api.js';\nimport type { KeyIdentifier } from './types/identifier.js';\nimport type { KeyImporterExporter } from './types/key-io.js';\nimport type { KeyGenerator, AsymmetricKeyGenerator } from './types/key-generator.js';\nimport type { GetPublicKeyParams, SignParams, VerifyParams } from './types/params-direct.js';\nimport type {\n  KmsSignParams,\n  KmsDigestParams,\n  KmsVerifyParams,\n  KmsExportKeyParams,\n  KmsGetKeyUriParams,\n  KmsImportKeyParams,\n  KmsGenerateKeyParams,\n  KmsGetPublicKeyParams,\n} from './types/params-kms.js';\n\nimport { Sha2Algorithm } from './algorithms/sha-2.js';\nimport { EcdsaAlgorithm } from './algorithms/ecdsa.js';\nimport { EdDsaAlgorithm } from './algorithms/eddsa.js';\nimport { CryptoAlgorithm } from './algorithms/crypto-algorithm.js';\nimport { computeJwkThumbprint, isPrivateJwk, KEY_URI_PREFIX_JWK } from './jose/jwk.js';\n\n/**\n * `supportedAlgorithms` is an object mapping algorithm names to their respective implementations\n * Each entry in this map specifies the algorithm name and its associated properties, including the\n * implementation class and any relevant names or identifiers for the algorithm. This structure\n * allows for easy retrieval and instantiation of algorithm implementations based on the algorithm\n * name or key specification. It facilitates the support of multiple algorithms within the\n * `LocalKeyManager` class.\n */\nconst supportedAlgorithms = {\n  'Ed25519': {\n    implementation : EdDsaAlgorithm,\n    names          : ['Ed25519'],\n  },\n  'secp256k1': {\n    implementation : EcdsaAlgorithm,\n    names          : ['ES256K', 'secp256k1'],\n  },\n  'secp256r1': {\n    implementation : EcdsaAlgorithm,\n    names          : ['ES256', 'secp256r1'],\n  },\n  'SHA-256': {\n    implementation : Sha2Algorithm,\n    names          : ['SHA-256']\n  }\n} satisfies {\n  [key: string]: {\n    implementation : typeof CryptoAlgorithm;\n    names          : string[];\n  }\n};\n\n/* Helper type for `supportedAlgorithms`. */\ntype SupportedAlgorithm = keyof typeof supportedAlgorithms;\n\n/* Helper type for `supportedAlgorithms` implementations. */\ntype AlgorithmConstructor = typeof supportedAlgorithms[SupportedAlgorithm]['implementation'];\n\n/**\n * The `LocalKeyManagerParams` interface specifies the parameters for initializing an instance of\n * `LocalKeyManager`. It allows the optional inclusion of a `KeyValueStore` instance for key\n * management. If not provided, a default `MemoryStore` instance will be used for storing keys in\n * memory. Note that the `MemoryStore` is not persistent and will be cleared when the application\n * exits.\n */\nexport type LocalKeyManagerParams = {\n  /**\n   * An optional property to specify a custom `KeyValueStore` instance for key management. If not\n   * provided, {@link LocalKeyManager | `LocalKeyManager`} uses a default `MemoryStore` instance.\n   * This store is responsible for managing cryptographic keys, allowing them to be retrieved,\n   * stored, and managed during cryptographic operations.\n   */\n  keyStore?: KeyValueStore<KeyIdentifier, Jwk>;\n};\n\n/**\n * The `LocalKeyManagerDigestParams` interface defines the algorithm-specific parameters that should\n * be passed into the {@link LocalKeyManager.digest | `LocalKeyManager.digest()`} method.\n */\nexport interface LocalKeyManagerDigestParams extends KmsDigestParams {\n  /**\n   * A string defining the name of hash function to use. The value must be one of the following:\n   * - `\"SHA-256\"`: Generates a 256-bit digest.\n   */\n  algorithm: 'SHA-256';\n}\n\n/**\n * The `LocalKeyManagerGenerateKeyParams` interface defines the algorithm-specific parameters that\n * should be passed into the {@link LocalKeyManager.generateKey | `LocalKeyManager.generateKey()`}\n * method when generating a key in the local KMS.\n */\nexport interface LocalKeyManagerGenerateKeyParams extends KmsGenerateKeyParams {\n  /**\n   * A string defining the type of key to generate. The value must be one of the following:\n   * - `\"Ed25519\"`\n   * - `\"secp256k1\"`\n   */\n  algorithm: 'Ed25519' | 'secp256k1' | 'secp256r1';\n}\n\nexport class LocalKeyManager implements\n    CryptoApi,\n    KeyImporterExporter<KmsImportKeyParams, KeyIdentifier, KmsExportKeyParams> {\n\n  /**\n   * A private map that stores instances of cryptographic algorithm implementations. Each key in\n   * this map is an `AlgorithmConstructor`, and its corresponding value is an instance of a class\n   * that implements a specific cryptographic algorithm. This map is used to cache and reuse\n   * instances for performance optimization, ensuring that each algorithm is instantiated only once.\n   */\n  private _algorithmInstances: Map<AlgorithmConstructor, InstanceType<typeof CryptoAlgorithm>> = new Map();\n\n  /**\n   * The `_keyStore` private variable in `LocalKeyManager` is a `KeyValueStore` instance used for\n   * storing and managing cryptographic keys. It allows the `LocalKeyManager` class to save,\n   * retrieve, and handle keys efficiently within the local Key Management System (KMS) context.\n   * This variable can be configured to use different storage backends, like in-memory storage or\n   * persistent storage, providing flexibility in key management according to the application's\n   * requirements.\n   */\n  private _keyStore: KeyValueStore<KeyIdentifier, Jwk>;\n\n  constructor(params?: LocalKeyManagerParams) {\n    this._keyStore = params?.keyStore ?? new MemoryStore<KeyIdentifier, Jwk>();\n  }\n\n  /**\n   * Generates a hash digest of the provided data.\n   *\n   * @remarks\n   * A digest is the output of the hash function. It's a fixed-size string of bytes\n   * that uniquely represents the data input into the hash function. The digest is often used for\n   * data integrity checks, as any alteration in the input data results in a significantly\n   * different digest.\n   *\n   * It takes the algorithm identifier of the hash function and data to digest as input and returns\n   * the digest of the data.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const data = new Uint8Array([...]);\n   * const digest = await keyManager.digest({ algorithm: 'SHA-256', data });\n   * ```\n   *\n   * @param params - The parameters for the digest operation.\n   * @param params.algorithm - The name of hash function to use.\n   * @param params.data - The data to digest.\n   *\n   * @returns A Promise which will be fulfilled with the hash digest.\n   */\n  public async digest({ algorithm, data }:\n    LocalKeyManagerDigestParams\n  ): Promise<Uint8Array> {\n    // Get the hash function implementation based on the specified `algorithm` parameter.\n    const hasher = this.getAlgorithm({ algorithm }) as Hasher<KmsDigestParams>;\n\n    // Compute the hash.\n    const hash = await hasher.digest({ algorithm, data });\n\n    return hash;\n  }\n\n  /**\n   * Exports a private key identified by the provided key URI from the local KMS.\n   *\n   * @remarks\n   * This method retrieves the key from the key store and returns it. It is primarily used\n   * for extracting keys for backup or transfer purposes.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * const privateKey = await keyManager.exportKey({ keyUri });\n   * ```\n   *\n   * @param params - Parameters for exporting the key.\n   * @param params.keyUri - The key URI identifying the key to export.\n   *\n   * @returns A Promise resolving to the JWK representation of the exported key.\n   */\n  public async exportKey({ keyUri }:\n    KmsExportKeyParams\n  ): Promise<Jwk> {\n    // Get the private key from the key store.\n    const privateKey = await this.getPrivateKey({ keyUri });\n\n    return privateKey;\n  }\n\n  /**\n   * Generates a new cryptographic key in the local KMS with the specified algorithm and returns a\n   * unique key URI which can be used to reference the key in subsequent operations.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * console.log(keyUri); // Outputs the key URI\n   * ```\n   *\n   * @param params - The parameters for key generation.\n   * @param params.algorithm - The algorithm to use for key generation, defined in `SupportedAlgorithm`.\n   *\n   * @returns A Promise that resolves to the key URI, a unique identifier for the generated key.\n   */\n  public async generateKey({ algorithm }:\n    LocalKeyManagerGenerateKeyParams\n  ): Promise<KeyIdentifier> {\n    // Get the key generator implementation based on the specified `algorithm` parameter.\n    const keyGenerator = this.getAlgorithm({ algorithm }) as KeyGenerator<LocalKeyManagerGenerateKeyParams, Jwk>;\n\n    // Generate the key.\n    const key = await keyGenerator.generateKey({ algorithm });\n\n    if (key?.kid === undefined) {\n      throw new Error('Generated key is missing a required property: kid');\n    }\n\n    // Construct the key URI.\n    const keyUri = `${KEY_URI_PREFIX_JWK}${key.kid}`;\n\n    // Store the key in the key store.\n    await this._keyStore.set(keyUri, key);\n\n    return keyUri;\n  }\n\n  /**\n   * Computes the Key URI for a given public JWK (JSON Web Key).\n   *\n   * @remarks\n   * This method generates a {@link https://datatracker.ietf.org/doc/html/rfc3986 | URI}\n   * (Uniform Resource Identifier) for the given JWK, which uniquely identifies the key across all\n   * `CryptoApi` implementations. The key URI is constructed by appending the\n   * {@link https://datatracker.ietf.org/doc/html/rfc7638 | JWK thumbprint} to the prefix\n   * `urn:jwk:`. The JWK thumbprint is deterministically computed from the JWK and is consistent\n   * regardless of property order or optional property inclusion in the JWK. This ensures that the\n   * same key material represented as a JWK will always yield the same thumbprint, and therefore,\n   * the same key URI.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * const publicKey = await keyManager.getPublicKey({ keyUri });\n   * const keyUriFromPublicKey = await keyManager.getKeyUri({ key: publicKey });\n   * console.log(keyUri === keyUriFromPublicKey); // Outputs `true`\n   * ```\n   *\n   * @param params - The parameters for getting the key URI.\n   * @param params.key - The JWK for which to compute the key URI.\n   *\n   * @returns A Promise that resolves to the key URI as a string.\n   */\n  public async getKeyUri({ key }:\n    KmsGetKeyUriParams\n  ): Promise<KeyIdentifier> {\n    // Compute the JWK thumbprint.\n    const jwkThumbprint = await computeJwkThumbprint({ jwk: key });\n\n    // Construct the key URI by appending the JWK thumbprint to the key URI prefix.\n    const keyUri = `${KEY_URI_PREFIX_JWK}${jwkThumbprint}`;\n\n    return keyUri;\n  }\n\n  /**\n   * Retrieves the public key associated with a previously generated private key, identified by\n   * the provided key URI.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * const publicKey = await keyManager.getPublicKey({ keyUri });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key.\n   * @param params.keyUri - The key URI of the private key to retrieve the public key for.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public async getPublicKey({ keyUri }:\n    KmsGetPublicKeyParams\n  ): Promise<Jwk> {\n    // Get the private key from the key store.\n    const privateKey = await this.getPrivateKey({ keyUri });\n\n    // Determine the algorithm name based on the JWK's `alg` and `crv` properties.\n    const algorithm = this.getAlgorithmName({ key: privateKey });\n\n    // Get the key generator based on the algorithm name.\n    const keyGenerator = this.getAlgorithm({ algorithm }) as AsymmetricKeyGenerator<LocalKeyManagerGenerateKeyParams, Jwk, GetPublicKeyParams>;\n\n    // Get the public key properties from the private JWK.\n    const publicKey = await keyGenerator.getPublicKey({ key: privateKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Imports a private key into the local KMS.\n   *\n   * @remarks\n   * This method stores the provided JWK in the key store, making it available for subsequent\n   * cryptographic operations. It is particularly useful for initializing the KMS with pre-existing\n   * keys or for restoring keys from backups.\n   *\n   * Note that, if defined, the `kid` (key ID) property of the JWK is used as the key URI for the\n   * imported key. If the `kid` property is not provided, the key URI is computed from the JWK\n   * thumbprint of the key.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const privateKey = { ... } // A private key in JWK format\n   * const keyUri = await keyManager.importKey({ key: privateKey });\n   * ```\n   *\n   * @param params - Parameters for importing the key.\n   * @param params.key - The private key to import to in JWK format.\n   *\n   * @returns A Promise resolving to the key URI, uniquely identifying the imported key.\n   */\n  public async importKey({ key }:\n    KmsImportKeyParams\n  ): Promise<KeyIdentifier> {\n    if (!isPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be a private key in JWK format.');\n\n    // Make a deep copy of the key to avoid mutating the original.\n    const privateKey = structuredClone(key);\n\n    // If the key ID is undefined, set it to the JWK thumbprint.\n    privateKey.kid ??= await computeJwkThumbprint({ jwk: privateKey });\n\n    // Compute the key URI for the key.\n    const keyUri = await this.getKeyUri({ key: privateKey });\n\n    // Store the key in the key store.\n    await this._keyStore.set(keyUri, privateKey);\n\n    return keyUri;\n  }\n\n  /**\n   * Signs the provided data using the private key identified by the provided key URI.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the `alg` and/or `crv` properties of the\n   * private key identified by the provided key URI to sign the provided data. The signature can\n   * later be verified by parties with access to the corresponding public key, ensuring that the\n   * data has not been tampered with and was indeed signed by the holder of the private key.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * const data = new TextEncoder().encode('Message to sign');\n   * const signature = await keyManager.sign({ keyUri, data });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.keyUri - The key URI of the private key to use for signing.\n   * @param params.data - The data to sign.\n   *\n   * @returns A Promise resolving to the digital signature as a `Uint8Array`.\n   */\n  public async sign({ keyUri, data }:\n    KmsSignParams\n  ): Promise<Uint8Array> {\n    // Get the private key from the key store.\n    const privateKey = await this.getPrivateKey({ keyUri });\n\n    // Determine the algorithm name based on the JWK's `alg` and `crv` properties.\n    const algorithm = this.getAlgorithmName({ key: privateKey });\n\n    // Get the signature algorithm based on the algorithm name.\n    const signer = this.getAlgorithm({ algorithm }) as Signer<SignParams, VerifyParams>;\n\n    // Sign the data.\n    const signature = signer.sign({ data, key: privateKey });\n\n    return signature;\n  }\n\n  /**\n   * Verifies a digital signature associated the provided data using the provided key.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the `alg` and/or `crv` properties of the\n   * provided key to check the validity of a digital signature against the original data. It\n   * confirms whether the signature was created by the holder of the corresponding private key and\n   * that the data has not been tampered with.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * const data = new TextEncoder().encode('Message to sign');\n   * const signature = await keyManager.sign({ keyUri, data });\n   * const isSignatureValid = await keyManager.verify({ keyUri, data, signature });\n   * ```\n   *\n   * @param params - The parameters for the verification operation.\n   * @param params.key - The key to use for verification.\n   * @param params.signature - The signature to verify.\n   * @param params.data - The data to verify.\n   *\n   * @returns A Promise resolving to a boolean indicating whether the signature is valid.\n   */\n  public async verify({ key, signature, data }:\n    KmsVerifyParams\n  ): Promise<boolean> {\n    // Determine the algorithm name based on the JWK's `alg` and `crv` properties.\n    const algorithm = this.getAlgorithmName({ key });\n\n    // Get the signature algorithm based on the algorithm name.\n    const signer = this.getAlgorithm({ algorithm }) as Signer<SignParams, VerifyParams>;\n\n    // Verify the signature.\n    const isSignatureValid = signer.verify({ key, signature, data });\n\n    return isSignatureValid;\n  }\n\n  /**\n   * Retrieves an algorithm implementation instance based on the provided algorithm name.\n   *\n   * @remarks\n   * This method checks if the requested algorithm is supported and returns a cached instance\n   * if available. If an instance does not exist, it creates and caches a new one. This approach\n   * optimizes performance by reusing algorithm instances across cryptographic operations.\n   *\n   * @example\n   * ```ts\n   * const signer = this.getAlgorithm({ algorithm: 'Ed25519' });\n   * ```\n   *\n   * @param params - The parameters for retrieving the algorithm implementation.\n   * @param params.algorithm - The name of the algorithm to retrieve.\n   *\n   * @returns An instance of the requested algorithm implementation.\n   *\n   * @throws Error if the requested algorithm is not supported.\n   */\n  private getAlgorithm({ algorithm }: {\n    algorithm: SupportedAlgorithm;\n  }): InstanceType<typeof CryptoAlgorithm> {\n    // Check if algorithm is supported.\n    const AlgorithmImplementation = supportedAlgorithms[algorithm]?.['implementation'];\n    if (!AlgorithmImplementation) {\n      throw new Error(`Algorithm not supported: ${algorithm}`);\n    }\n\n    // Check if instance already exists for the `AlgorithmImplementation`.\n    if (!this._algorithmInstances.has(AlgorithmImplementation)) {\n    // If not, create a new instance and store it in the cache\n      this._algorithmInstances.set(AlgorithmImplementation, new AlgorithmImplementation());\n    }\n\n    // Return the cached instance\n    return this._algorithmInstances.get(AlgorithmImplementation)!;\n  }\n\n  /**\n   * Determines the name of the algorithm based on the key's properties.\n   *\n   * @remarks\n   * This method facilitates the identification of the correct algorithm for cryptographic\n   * operations based on the `alg` or `crv` properties of a {@link Jwk | JWK}.\n   *\n   * @example\n   * ```ts\n   * const publicKey = { ... }; // Public key in JWK format\n   * const algorithm = this.getAlgorithmName({ key: publicKey });\n   * ```\n   *\n   * @param params - The parameters for determining the algorithm name.\n   * @param params.key - A JWK containing the `alg` or `crv` properties.\n   *\n   * @returns The name of the algorithm associated with the key.\n   *\n   * @throws Error if the algorithm cannot be determined from the provided input.\n   */\n  private getAlgorithmName({ key }: {\n    key: { alg?: string, crv?: string };\n  }): SupportedAlgorithm {\n    const algProperty = key.alg;\n    const crvProperty = key.crv;\n\n    for (const algName in supportedAlgorithms) {\n      const algorithmInfo = supportedAlgorithms[algName as SupportedAlgorithm];\n      if (algProperty && algorithmInfo.names.includes(algProperty)) {\n        return algName as SupportedAlgorithm;\n      } else if (crvProperty && algorithmInfo.names.includes(crvProperty)) {\n        return algName as SupportedAlgorithm;\n      }\n    }\n\n    throw new Error(`Unable to determine algorithm based on provided input: alg=${algProperty}, crv=${crvProperty}`);\n  }\n\n  /**\n   * Retrieves a private key from the key store based on the provided key URI.\n   *\n   * @example\n   * ```ts\n   * const privateKey = this.getPrivateKey({ keyUri: 'urn:jwk:...' });\n   * ```\n   *\n   * @param params - Parameters for retrieving the private key.\n   * @param params.keyUri - The key URI identifying the private key to retrieve.\n   *\n   * @returns A Promise resolving to the JWK representation of the private key.\n   *\n   * @throws Error if the key is not found in the key store.\n   */\n  private async getPrivateKey({ keyUri }: {\n    keyUri: KeyIdentifier;\n  }): Promise<Jwk> {\n    // Get the private key from the key store.\n    const privateKey = await this._keyStore.get(keyUri);\n\n    if (!privateKey) {\n      throw new Error(`Key not found: ${keyUri}`);\n    }\n\n    return privateKey;\n  }\n}", "import type { Jwk } from './jose/jwk.js';\n\nimport { crypto } from '@noble/hashes/crypto';\nimport { randomBytes as nobleRandomBytes } from '@noble/hashes/utils';\n\n/**\n * A collection of cryptographic utility methods.\n */\nexport class CryptoUtils {\n\n  /**\n   * Determines the JOSE algorithm identifier of the digital signature algorithm based on the `alg` or\n   * `crv` property of a {@link Jwk | JWK}.\n   *\n   * If the `alg` property is present, its value takes precedence and is returned. Otherwise, the\n   * `crv` property is used to determine the algorithm.\n   *\n   * @memberof CryptoUtils\n   * @see {@link https://www.iana.org/assignments/jose/jose.xhtml#web-signature-encryption-algorithms | JOSE Algorithms}\n   * @see {@link https://datatracker.ietf.org/doc/draft-ietf-jose-fully-specified-algorithms/ | Fully-Specified Algorithms for JOSE and COSE}\n   *\n   * @example\n   * ```ts\n   * const publicKey: Jwk = {\n   *   \"kty\": \"OKP\",\n   *   \"crv\": \"Ed25519\",\n   *   \"x\": \"FEJG7OakZi500EydXxuE8uMc8uaAzEJkmQeG8khXANw\"\n   * }\n   * const algorithm = getJoseSignatureAlgorithmFromPublicKey(publicKey);\n   * console.log(algorithm); // Output: \"EdDSA\"\n   * ```\n   * @param publicKey - A JWK containing the `alg` and/or `crv` properties.\n   * @returns The name of the algorithm associated with the key.\n   * @throws Error if the algorithm cannot be determined from the provided input.\n   */\n  static getJoseSignatureAlgorithmFromPublicKey(publicKey: Jwk): string {\n    const curveToJoseAlgorithm: Record<string, string> = {\n      'Ed25519'   : 'EdDSA',\n      'P-256'     : 'ES256',\n      'P-384'     : 'ES384',\n      'P-521'     : 'ES512',\n      'secp256k1' : 'ES256K',\n    };\n\n    // If the key contains an `alg` property that matches a JOSE registered algorithm identifier,\n    // return its value.\n    if (publicKey.alg && Object.values(curveToJoseAlgorithm).includes(publicKey.alg)) {\n      return publicKey.alg;\n    }\n\n    // If the key contains a `crv` property, return the corresponding algorithm.\n    if (publicKey.crv && Object.keys(curveToJoseAlgorithm).includes(publicKey.crv)) {\n      return curveToJoseAlgorithm[publicKey.crv];\n    }\n\n    throw new Error(\n      `Unable to determine algorithm based on provided input: alg=${publicKey.alg}, crv=${publicKey.crv}. ` +\n      `Supported 'alg' values: ${Object.values(curveToJoseAlgorithm).join(', ')}. ` +\n      `Supported 'crv' values: ${Object.keys(curveToJoseAlgorithm).join(', ')}.`\n    );\n  }\n\n  /**\n   * Generates secure pseudorandom values of the specified length using\n   * `crypto.getRandomValues`, which defers to the operating system.\n   *\n   * @memberof CryptoUtils\n   * @remarks\n   * This function is a wrapper around `randomBytes` from the '@noble/hashes'\n   * package. It's designed to be cryptographically strong, suitable for\n   * generating initialization vectors, nonces, and other random values.\n   *\n   * @see {@link https://www.npmjs.com/package/@noble/hashes | @noble/hashes on NPM} for more\n   * information about the underlying implementation.\n   *\n   * @example\n   * ```ts\n   * const bytes = randomBytes(32); // Generates 32 random bytes\n   * ```\n   *\n   * @param bytesLength - The number of bytes to generate.\n   * @returns A Uint8Array containing the generated random bytes.\n   */\n  static randomBytes(bytesLength: number): Uint8Array {\n    return nobleRandomBytes(bytesLength);\n  }\n\n  /**\n   * Generates a UUID (Universally Unique Identifier) using a\n   * cryptographically strong random number generator following\n   * the version 4 format, as specified in RFC 4122.\n   *\n   * A version 4 UUID is a randomly generated UUID. The 13th character\n   * is set to '4' to denote version 4, and the 17th character is one\n   * of '8', '9', 'A', or 'B' to comply with the variant 1 format of\n   * UUIDs (the high bits are set to '10').\n   *\n   * The UUID is a 36 character string, including hyphens, and looks like this:\n   * xxxxxxxx-xxxx-4xxx-axxx-xxxxxxxxxxxx\n   *\n   * Note that while UUIDs are not guaranteed to be unique, they are\n   * practically unique\" given the large number of possible UUIDs and\n   * the randomness of generation.\n   * @memberof CryptoUtils\n   * @example\n   * ```ts\n   * const uuid = randomUuid();\n   * console.log(uuid); // Outputs a version 4 UUID, e.g., '123e4567-e89b-12d3-a456-426655440000'\n   * ```\n   *\n   * @returns A string containing a randomly generated, 36 character long v4 UUID.\n   */\n  static randomUuid(): string {\n    const uuid = crypto.randomUUID();\n\n    return uuid;\n  }\n\n\n  /**\n   * Generates a secure random PIN (Personal Identification Number) of a\n   * specified length.\n   *\n   * This function ensures that the generated PIN is cryptographically secure and\n   * uniformly distributed by using rejection sampling. It repeatedly generates\n   * random numbers until it gets one in the desired range [0, max]. This avoids\n   * bias introduced by simply taking the modulus or truncating the number.\n   *\n   * Note: The function can generate PINs of 3 to 10 digits in length.\n   * Any request for a PIN outside this range will result in an error.\n   *\n   * Example usage:\n   *\n   * ```ts\n   * const pin = randomPin({ length: 4 });\n   * console.log(pin); // Outputs a 4-digit PIN, e.g., \"0231\"\n   * ```\n   * @memberof CryptoUtils\n   * @param options - The options object containing the desired length of the generated PIN.\n   * @param options.length - The desired length of the generated PIN. The value should be\n   *                         an integer between 3 and 8 inclusive.\n   *\n   * @returns A string representing the generated PIN. The PIN will be zero-padded\n   *          to match the specified length, if necessary.\n   *\n   * @throws Will throw an error if the requested PIN length is less than 3 or greater than 8.\n   */\n  static randomPin({ length }: { length: number }): string {\n    if (3 > length || length > 10) {\n      throw new Error('randomPin() can securely generate a PIN between 3 to 10 digits.');\n    }\n\n    const max = Math.pow(10, length) - 1;\n\n    let pin;\n\n    if (length <= 6) {\n      const rejectionRange = Math.pow(10, length);\n      do {\n        // Adjust the byte generation based on length.\n        const randomBuffer = CryptoUtils.randomBytes(Math.ceil(length / 2) );  // 2 digits per byte.\n        const view = new DataView(randomBuffer.buffer);\n        // Convert the buffer to integer and take modulus based on length.\n        pin = view.getUint16(0, false) % rejectionRange;\n      } while (pin > max);\n    } else {\n      const rejectionRange = Math.pow(10, 10); // For max 10 digit number.\n      do {\n      // Generates 4 random bytes.\n        const randomBuffer = CryptoUtils.randomBytes(4);\n        // Create a DataView to read from the randomBuffer.\n        const view = new DataView(randomBuffer.buffer);\n        // Transform bytes to number (big endian).\n        pin = view.getUint32(0, false) % rejectionRange;\n      } while (pin > max);  // Reject if the number is outside the desired range.\n    }\n\n    // Pad the PIN with leading zeros to the desired length.\n    return pin.toString().padStart(length, '0');\n  }\n}\n", "// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// See utils.ts for details.\ndeclare const globalThis: Record<string, any> | undefined;\nconst cr = typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (cr && typeof cr.getRandomValues === 'function')\n    return cr.getRandomValues(new Uint8Array(bytesLength));\n  throw new Error('crypto.getRandomValues must be defined');\n}\n\nexport function getWebcryptoSubtle() {\n  if (cr && typeof cr.subtle === 'object' && cr.subtle != null) return cr.subtle;\n  throw new Error('crypto.subtle must be defined');\n}\n", "import { Convert } from '@web5/common';\nimport { getWebcryptoSubtle } from '@noble/ciphers/crypto';\n\nimport type { Jwk } from '../jose/jwk.js';\n\nimport { computeJwkThumbprint, isOctPrivateJwk } from '../jose/jwk.js';\n\n/**\n * Constant defining the AES block size in bits.\n *\n * @remarks\n * In AES Counter (CTR) mode, the counter length must match the block size of the AES algorithm,\n * which is 128 bits. NIST publication 800-38A, which provides guidelines for block cipher modes of\n * operation, specifies this requirement. Maintaining a counter length of 128 bits is essential for\n * the correct operation and security of AES-CTR.\n *\n * This implementation does not support counter lengths that are different from the value defined by\n * this constant.\n *\n * @see {@link https://doi.org/10.6028/NIST.SP.800-38A | NIST SP 800-38A}\n */\nconst AES_BLOCK_SIZE = 128;\n\n/**\n * Constant defining the AES key length values in bits.\n *\n * @remarks\n * NIST publication FIPS 197 states:\n * > The AES algorithm is capable of using cryptographic keys of 128, 192, and 256 bits to encrypt\n * > and decrypt data in blocks of 128 bits.\n *\n * This implementation does not support key lengths that are different from the three values\n * defined by this constant.\n *\n * @see {@link https://doi.org/10.6028/NIST.FIPS.197-upd1 | NIST FIPS 197}\n */\nconst AES_KEY_LENGTHS = [128, 192, 256] as const;\n\n/**\n * Constant defining the maximum length of the counter in bits.\n *\n * @remarks\n * The rightmost bits of the counter block are used as the actual counter value, while the leftmost\n * bits are used as the nonce. The maximum length of the counter is 128 bits, which is the same as\n * the AES block size.\n */\nconst COUNTER_MAX_LENGTH = AES_BLOCK_SIZE;\n\n/**\n * The `AesCtr` class provides a comprehensive set of utilities for cryptographic operations\n * using the Advanced Encryption Standard (AES) in Counter (CTR) mode. This class includes\n * methods for key generation, encryption, decryption, and conversions between raw byte arrays\n * and JSON Web Key (JWK) formats. It is designed to support AES-CTR, a symmetric key algorithm\n * that is widely used in various cryptographic applications for its efficiency and security.\n *\n * AES-CTR mode operates as a stream cipher using a block cipher (AES) and is well-suited for\n * scenarios where parallel processing is beneficial or where the same key is required to\n * encrypt multiple data blocks. The class adheres to standard cryptographic practices, ensuring\n * compatibility and security in its implementations.\n *\n * Key Features:\n * - Key Generation: Generate AES symmetric keys in JWK format.\n * - Key Conversion: Transform keys between raw byte arrays and JWK formats.\n * - Encryption: Encrypt data using AES-CTR with the provided symmetric key.\n * - Decryption: Decrypt data encrypted with AES-CTR using the corresponding symmetric key.\n *\n * The methods in this class are asynchronous, returning Promises to accommodate various\n * JavaScript environments.\n *\n * @example\n * ```ts\n * // Key Generation\n * const length = 256; // Length of the key in bits (e.g., 128, 192, 256)\n * const privateKey = await AesCtr.generateKey({ length });\n *\n * // Encryption\n * const data = new TextEncoder().encode('Messsage');\n * const counter = new Uint8Array(16); // 16-byte (128-bit) counter block\n * const encryptedData = await AesCtr.encrypt({\n *   data,\n *   counter,\n *   key: privateKey,\n *   length: 64 // Length of the counter in bits\n * });\n *\n * // Decryption\n * const decryptedData = await AesCtr.decrypt({\n *   data: encryptedData,\n *   counter,\n *   key: privateKey,\n *   length: 64 // Length of the counter in bits\n * });\n *\n * // Key Conversion\n * const privateKeyBytes = await AesCtr.privateKeyToBytes({ privateKey });\n * ```\n */\nexport class AesCtr {\n  /**\n   * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method takes a symmetric key represented as a byte array (Uint8Array) and\n   * converts it into a JWK object for use with AES (Advanced Encryption Standard)\n   * in Counter (CTR) mode. The conversion process involves encoding the key into\n   * base64url format and setting the appropriate JWK parameters.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'oct' for Octet Sequence (representing a symmetric key).\n   * - `k`: The symmetric key, base64url-encoded.\n   * - `kid`: Key ID, generated based on the JWK thumbprint.\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // Replace with actual symmetric key bytes\n   * const privateKey = await AesCtr.bytesToPrivateKey({ privateKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the symmetric key conversion.\n   * @param params.privateKeyBytes - The raw symmetric key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the symmetric key in JWK format.\n   */\n  public static async bytesToPrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Construct the private key in JWK format.\n    const privateKey: Jwk = {\n      k   : Convert.uint8Array(privateKeyBytes).toBase64Url(),\n      kty : 'oct'\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Decrypts the provided data using AES in Counter (CTR) mode.\n   *\n   * @remarks\n   * This method performs AES-CTR decryption on the given encrypted data using the specified key.\n   * Similar to the encryption process, it requires an initial counter block and the length\n   * of the counter block, along with the encrypted data and the decryption key. The method\n   * returns the decrypted data as a Uint8Array.\n   *\n   * @example\n   * ```ts\n   * const encryptedData = new Uint8Array([...]); // Encrypted data\n   * const counter = new Uint8Array(16); // 16-byte (128-bit) counter block used during encryption\n   * const key = { ... }; // A Jwk object representing the same AES key used for encryption\n   * const decryptedData = await AesCtr.decrypt({\n   *   data: encryptedData,\n   *   counter,\n   *   key,\n   *   length: 64 // Length of the counter in bits\n   * });\n   * ```\n   *\n   * @param params - The parameters for the decryption operation.\n   * @param params.key - The key to use for decryption, represented in JWK format.\n   * @param params.data - The encrypted data to decrypt, as a Uint8Array.\n   * @param params.counter - The initial value of the counter block.\n   * @param params.length - The number of bits in the counter block that are used for the actual counter.\n   *\n   * @returns A Promise that resolves to the decrypted data as a Uint8Array.\n   */\n  public static async decrypt({ key, data, counter, length }: {\n    key: Jwk;\n    data: Uint8Array;\n    counter: Uint8Array;\n    length: number;\n  }): Promise<Uint8Array> {\n    // Validate the initial counter block length matches the AES block size.\n    if (counter.byteLength !== AES_BLOCK_SIZE / 8) {\n      throw new TypeError(`The counter must be ${AES_BLOCK_SIZE} bits in length`);\n    }\n\n    // Validate the length of the counter.\n    if (length === 0 || length > COUNTER_MAX_LENGTH) {\n      throw new TypeError(`The 'length' property must be in the range 1 to ${COUNTER_MAX_LENGTH}`);\n    }\n\n    // Get the Web Crypto API interface.\n    const webCrypto = getWebcryptoSubtle();\n\n    // Import the JWK into the Web Crypto API to use for the decrypt operation.\n    const webCryptoKey = await webCrypto.importKey('jwk', key, { name: 'AES-CTR' }, true, ['decrypt']);\n\n    // Decrypt the data.\n    const plaintextBuffer = await webCrypto.decrypt(\n      { name: 'AES-CTR', counter, length },\n      webCryptoKey,\n      data\n    );\n\n    // Convert from ArrayBuffer to Uint8Array.\n    const plaintext = new Uint8Array(plaintextBuffer);\n\n    return plaintext;\n  }\n\n  /**\n   * Encrypts the provided data using AES in Counter (CTR) mode.\n   *\n   * @remarks\n   * This method performs AES-CTR encryption on the given data using the specified key.\n   * It requires the initial counter block and the length of the counter block, alongside\n   * the data and key. The method is designed to work asynchronously and returns the\n   * encrypted data as a Uint8Array.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage');\n   * const counter = new Uint8Array(16); // 16-byte (128-bit) counter block\n   * const key = { ... }; // A Jwk object representing an AES key\n   * const encryptedData = await AesCtr.encrypt({\n   *   data,\n   *   counter,\n   *   key,\n   *   length: 64 // Length of the counter in bits\n   * });\n   * ```\n   *\n   * @param params - The parameters for the encryption operation.\n   * @param params.key - The key to use for encryption, represented in JWK format.\n   * @param params.data - The data to encrypt, represented as a Uint8Array.\n   * @param params.counter - The initial value of the counter block.\n   * @param params.length - The number of bits in the counter block that are used for the actual counter.\n   *\n   * @returns A Promise that resolves to the encrypted data as a Uint8Array.\n   */\n  public static async encrypt({ key, data, counter, length }: {\n    key: Jwk;\n    data: Uint8Array;\n    counter: Uint8Array;\n    length: number;\n  }): Promise<Uint8Array> {\n    // Validate the initial counter block value length.\n    if (counter.byteLength !== AES_BLOCK_SIZE / 8) {\n      throw new TypeError(`The counter must be ${AES_BLOCK_SIZE} bits in length`);\n    }\n\n    // Validate the length of the counter.\n    if (length === 0 || length > COUNTER_MAX_LENGTH) {\n      throw new TypeError(`The 'length' property must be in the range 1 to ${COUNTER_MAX_LENGTH}`);\n    }\n\n    // Get the Web Crypto API interface.\n    const webCrypto = getWebcryptoSubtle();\n\n    // Import the JWK into the Web Crypto API to use for the encrypt operation.\n    const webCryptoKey = await webCrypto.importKey('jwk', key, { name: 'AES-CTR' }, true, ['encrypt', 'decrypt']);\n\n    // Encrypt the data.\n    const ciphertextBuffer = await webCrypto.encrypt(\n      { name: 'AES-CTR', counter, length },\n      webCryptoKey,\n      data\n    );\n\n    // Convert from ArrayBuffer to Uint8Array.\n    const ciphertext = new Uint8Array(ciphertextBuffer);\n\n    return ciphertext;\n  }\n\n  /**\n   * Generates a symmetric key for AES in Counter (CTR) mode in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method creates a new symmetric key of a specified length suitable for use with\n   * AES-CTR encryption. It uses cryptographically secure random number generation to\n   * ensure the uniqueness and security of the key. The generated key adheres to the JWK\n   * format, making it compatible with common cryptographic standards and easy to use in\n   * various cryptographic processes.\n   *\n   * The generated key includes the following components:\n   * - `kty`: Key Type, set to 'oct' for Octet Sequence.\n   * - `k`: The symmetric key component, base64url-encoded.\n   * - `kid`: Key ID, generated based on the JWK thumbprint.\n   *\n   * @example\n   * ```ts\n   * const length = 256; // Length of the key in bits (e.g., 128, 192, 256)\n   * const privateKey = await AesCtr.generateKey({ length });\n   * ```\n   *\n   * @param params - The parameters for the key generation.\n   * @param params.length - The length of the key in bits. Common lengths are 128, 192, and 256 bits.\n   *\n   * @returns A Promise that resolves to the generated symmetric key in JWK format.\n   */\n  public static async generateKey({ length }: {\n    length: typeof AES_KEY_LENGTHS[number];\n  }): Promise<Jwk> {\n    // Validate the key length.\n    if (!AES_KEY_LENGTHS.includes(length as any)) {\n      throw new RangeError(`The key length is invalid: Must be ${AES_KEY_LENGTHS.join(', ')} bits`);\n    }\n\n    // Get the Web Crypto API interface.\n    const webCrypto = getWebcryptoSubtle();\n\n    // Generate a random private key.\n    // See https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#usage_notes for\n    // an explanation for why Web Crypto generateKey() is used instead of getRandomValues().\n    const webCryptoKey = await webCrypto.generateKey( { name: 'AES-CTR', length }, true, ['encrypt']);\n\n    // Export the private key in JWK format.\n    const { ext, key_ops, ...privateKey } = await webCrypto.exportKey('jwk', webCryptoKey);\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Converts a private key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method takes a symmetric key in JWK format and extracts its raw byte representation.\n   * It decodes the 'k' parameter of the JWK value, which represents the symmetric key in base64url\n   * encoding, into a byte array.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A symmetric key in JWK format\n   * const privateKeyBytes = await AesCtr.privateKeyToBytes({ privateKey });\n   * ```\n   *\n   * @param params - The parameters for the symmetric key conversion.\n   * @param params.privateKey - The symmetric key in JWK format.\n   *\n   * @returns A Promise that resolves to the symmetric key as a Uint8Array.\n   */\n  public static async privateKeyToBytes({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid oct private key.\n    if (!isOctPrivateJwk(privateKey)) {\n      throw new Error(`AesCtr: The provided key is not a valid oct private key.`);\n    }\n\n    // Decode the provided private key to bytes.\n    const privateKeyBytes = Convert.base64Url(privateKey.k).toUint8Array();\n\n    return privateKeyBytes;\n  }\n}", "import type { Jwk } from '../jose/jwk.js';\nimport type { Cipher } from '../types/cipher.js';\nimport type { KeyGenerator } from '../types/key-generator.js';\nimport type { DecryptParams, EncryptParams, GenerateKeyParams } from '../types/params-direct.js';\n\nimport { AesCtr } from '../primitives/aes-ctr.js';\nimport { CryptoAlgorithm } from './crypto-algorithm.js';\n\n/**\n * The `AesCtrGenerateKeyParams` interface defines the algorithm-specific parameters that should be\n * passed into the `generateKey()` method when using the AES-CTR algorithm.\n */\nexport interface AesCtrGenerateKeyParams extends GenerateKeyParams {\n  /** Specifies the algorithm variant for key generation in AES-CTR mode.\n   * The value determines the length of the key to be generated and must be one of the following:\n   * - `\"A128CTR\"`: Generates a 128-bit key.\n   * - `\"A192CTR\"`: Generates a 192-bit key.\n   * - `\"A256CTR\"`: Generates a 256-bit key.\n   */\n  algorithm: 'A128CTR' | 'A192CTR' | 'A256CTR';\n}\n\n/**\n * The `AesCtrParams` interface defines the algorithm-specific parameters that should be passed\n * into the `encrypt()` and `decrypt()` methods when using the AES-CTR algorithm.\n */\nexport interface AesCtrParams {\n  /** The initial value of the counter block. */\n  counter: Uint8Array;\n\n  /** The number of bits in the counter block that are used for the actual counter. */\n  length: number;\n}\n\n/**\n * The `AesCtrAlgorithm` class provides a concrete implementation for cryptographic operations using\n * the AES algorithm in Counter (CTR) mode. This class implements both {@link Cipher | `Cipher`} and\n * { @link KeyGenerator | `KeyGenerator`} interfaces, providing key generation, encryption, and\n * decryption features.\n *\n * This class is typically accessed through implementations that extend the\n * {@link CryptoApi | `CryptoApi`} interface.\n */\nexport class AesCtrAlgorithm extends CryptoAlgorithm\n  implements Cipher<EncryptParams & AesCtrParams, DecryptParams & AesCtrParams>,\n             KeyGenerator<AesCtrGenerateKeyParams, Jwk> {\n\n  /**\n   * Decrypts the provided data using AES-CTR.\n   *\n   * @remarks\n   * This method performs AES-CTR decryption on the given encrypted data using the specified key.\n   * Similar to the encryption process, it requires an initial counter block and the length\n   * of the counter block, along with the encrypted data and the decryption key. The method\n   * returns the decrypted data as a Uint8Array.\n   *\n   * @example\n   * ```ts\n   * const aesCtr = new AesCtrAlgorithm();\n   * const encryptedData = new Uint8Array([...]); // Encrypted data\n   * const counter = new Uint8Array(16); // 16-byte (128-bit) counter block used during encryption\n   * const key = { ... }; // A Jwk object representing the same AES key used for encryption\n   * const decryptedData = await aesCtr.decrypt({\n   *   data: encryptedData,\n   *   counter,\n   *   key,\n   *   length: 128 // Length of the counter in bits\n   * });\n   * ```\n   *\n   * @param params - The parameters for the decryption operation.\n   *\n   * @returns A Promise that resolves to the decrypted data as a Uint8Array.\n   */\n  public async decrypt(params:\n    DecryptParams & AesCtrParams\n  ): Promise<Uint8Array> {\n    const plaintext = AesCtr.decrypt(params);\n\n    return plaintext;\n  }\n\n  /**\n   * Encrypts the provided data using AES-CTR.\n   *\n   * @remarks\n   * This method performs AES-CTR encryption on the given data using the specified key.\n   * It requires the initial counter block and the length of the counter block, alongside\n   * the data and key. The method is designed to work asynchronously and returns the\n   * encrypted data as a Uint8Array.\n   *\n   * @example\n   * ```ts\n   * const aesCtr = new AesCtrAlgorithm();\n   * const data = new TextEncoder().encode('Messsage');\n   * const counter = new Uint8Array(16); // 16-byte (128-bit) counter block\n   * const key = { ... }; // A Jwk object representing an AES key\n   * const encryptedData = await aesCtr.encrypt({\n   *   data,\n   *   counter,\n   *   key,\n   *   length: 128 // Length of the counter in bits\n   * });\n   * ```\n   *\n   * @param params - The parameters for the encryption operation.\n   *\n   * @returns A Promise that resolves to the encrypted data as a Uint8Array.\n   */\n  public async encrypt(params:\n    EncryptParams & AesCtrParams\n  ): Promise<Uint8Array> {\n    const ciphertext = AesCtr.encrypt(params);\n\n    return ciphertext;\n  }\n\n  /**\n   * Generates a symmetric key for AES in Counter (CTR) mode in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method generates a symmetric AES key for use in CTR mode, based on the specified\n   * `algorithm` parameter which determines the key length. It uses cryptographically secure random\n   * number generation to ensure the uniqueness and security of the key. The key is returned in JWK\n   * format.\n   *\n   * The generated key includes the following components:\n   * - `kty`: Key Type, set to 'oct' for Octet Sequence.\n   * - `k`: The symmetric key component, base64url-encoded.\n   * - `kid`: Key ID, generated based on the JWK thumbprint.\n   *\n   * @example\n   * ```ts\n   * const aesCtr = new AesCtrAlgorithm();\n   * const privateKey = await aesCtr.generateKey({ algorithm: 'A256CTR' });\n   * ```\n   *\n   * @param params - The parameters for the key generation.\n   *\n   * @returns A Promise that resolves to the generated symmetric key in JWK format.\n   */\n  public async generateKey({ algorithm }:\n    AesCtrGenerateKeyParams\n  ): Promise<Jwk> {\n    // Map algorithm name to key length.\n    const length = { A128CTR: 128, A192CTR: 192, A256CTR: 256 }[algorithm] as 128 | 192 | 256;\n\n    // Generate a random private key.\n    const privateKey = await AesCtr.generateKey({ length });\n\n    // Set the `alg` property based on the specified algorithm.\n    privateKey.alg = algorithm;\n\n    return privateKey;\n  }\n}", "function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`positive integer expected, not ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`boolean expected, not ${b}`);\n}\n\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!isBytes(b)) throw new Error('Uint8Array expected');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Uint8Array expected of length ${lengths}, not of length=${b.length}`);\n}\n\nexport type Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(hash: Hash) {\n  if (typeof hash !== 'function' || typeof hash.create !== 'function')\n    throw new Error('hash must be wrapped by utils.wrapConstructor');\n  number(hash.outputLen);\n  number(hash.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\nfunction output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nexport { number, bool, bytes, hash, exists, output };\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n", "/*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) */\nimport { bytes as abytes, isBytes } from './_assert.js';\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u16 = (arr: TypedArray) =>\n  new Uint16Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 2));\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// big-endian hardware is rare. Just in case someone still decides to run ciphers:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE) throw new Error('Non little-endian hardware is not supported');\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  abytes(bytes);\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 } as const;\nfunction asciiToBase16(char: number): number | undefined {\n  if (char >= asciis._0 && char <= asciis._9) return char - asciis._0;\n  if (char >= asciis._A && char <= asciis._F) return char - (asciis._A - 10);\n  if (char >= asciis._a && char <= asciis._f) return char - (asciis._a - 10);\n  return;\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2;\n  }\n  return array;\n}\n\nexport function hexToNumber(hex: string): bigint {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  // Big Endian\n  return BigInt(hex === '' ? '0' : `0x${hex}`);\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n  return hexToNumber(bytesToHex(bytes));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n  return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\n\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => {};\n\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`string expected, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/**\n * @example bytesToUtf8(new Uint8Array([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes: Uint8Array): string {\n  return new TextDecoder().decode(bytes);\n}\n\nexport type Input = Uint8Array | string;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  else if (isBytes(data)) data = data.slice();\n  else throw new Error(`Uint8Array expected, got ${typeof data}`);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    abytes(a);\n    sum += a.length;\n  }\n  const res = new Uint8Array(sum);\n  for (let i = 0, pad = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts: T2\n): T1 & T2 {\n  if (opts == null || typeof opts !== 'object') throw new Error('options must be defined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a: Uint8Array, b: Uint8Array) {\n  if (a.length !== b.length) return false;\n  let diff = 0;\n  for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n  return diff === 0;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n}\n\n// This will allow to re-use with composable things like packed & base encoders\n// Also, we probably can make tags composable\nexport type Cipher = {\n  encrypt(plaintext: Uint8Array): Uint8Array;\n  decrypt(ciphertext: Uint8Array): Uint8Array;\n};\n\nexport type AsyncCipher = {\n  encrypt(plaintext: Uint8Array): Promise<Uint8Array>;\n  decrypt(ciphertext: Uint8Array): Promise<Uint8Array>;\n};\n\nexport type CipherWithOutput = Cipher & {\n  encrypt(plaintext: Uint8Array, output?: Uint8Array): Uint8Array;\n  decrypt(ciphertext: Uint8Array, output?: Uint8Array): Uint8Array;\n};\n\n// Params is outside return type, so it is accessible before calling constructor\n// If function support multiple nonceLength's, we return best one\nexport type CipherParams = { blockSize: number; nonceLength?: number; tagLength?: number };\nexport type CipherCons<T extends any[]> = (key: Uint8Array, ...args: T) => Cipher;\n/**\n * @__NO_SIDE_EFFECTS__\n */\nexport const wrapCipher = <C extends CipherCons<any>, P extends CipherParams>(\n  params: P,\n  c: C\n): C & P => {\n  Object.assign(c, params);\n  return c as C & P;\n};\n\nexport type XorStream = (\n  key: Uint8Array,\n  nonce: Uint8Array,\n  data: Uint8Array,\n  output?: Uint8Array,\n  counter?: number\n) => Uint8Array;\n\n// Polyfill for Safari 14\nexport function setBigUint64(\n  view: DataView,\n  byteOffset: number,\n  value: bigint,\n  isLE: boolean\n): void {\n  if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n  const _32n = BigInt(32);\n  const _u32_max = BigInt(0xffffffff);\n  const wh = Number((value >> _32n) & _u32_max);\n  const wl = Number(value & _u32_max);\n  const h = isLE ? 4 : 0;\n  const l = isLE ? 0 : 4;\n  view.setUint32(byteOffset + h, wh, isLE);\n  view.setUint32(byteOffset + l, wl, isLE);\n}\n\nexport function u64Lengths(ciphertext: Uint8Array, AAD?: Uint8Array) {\n  const num = new Uint8Array(16);\n  const view = createView(num);\n  setBigUint64(view, 0, BigInt(AAD ? AAD.length : 0), true);\n  setBigUint64(view, 8, BigInt(ciphertext.length), true);\n  return num;\n}\n", "// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.js on#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated, we can just drop the import.\n//\n// Use full path so that Node.js can rewrite it to `cryptoNode.js`.\nimport { randomBytes, getWebcryptoSubtle } from '@noble/ciphers/crypto';\nimport { AsyncCipher, Cipher, concatBytes } from './utils.js';\nimport { number, bytes as abytes } from './_assert.js';\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport { randomBytes, getWebcryptoSubtle };\n\ntype RemoveNonceInner<T extends any[], Ret> = ((...args: T) => Ret) extends (\n  arg0: any,\n  arg1: any,\n  ...rest: infer R\n) => any\n  ? (key: Uint8Array, ...args: R) => Ret\n  : never;\n\ntype RemoveNonce<T extends (...args: any) => any> = RemoveNonceInner<Parameters<T>, ReturnType<T>>;\ntype CipherWithNonce = ((key: Uint8Array, nonce: Uint8Array, ...args: any[]) => Cipher) & {\n  nonceLength: number;\n};\n\n// Uses CSPRG for nonce, nonce injected in ciphertext\nexport function managedNonce<T extends CipherWithNonce>(fn: T): RemoveNonce<T> {\n  number(fn.nonceLength);\n  return ((key: Uint8Array, ...args: any[]): any => ({\n    encrypt: (plaintext: Uint8Array, ...argsEnc: any[]) => {\n      const { nonceLength } = fn;\n      const nonce = randomBytes(nonceLength);\n      const ciphertext = (fn(key, nonce, ...args).encrypt as any)(plaintext, ...argsEnc);\n      const out = concatBytes(nonce, ciphertext);\n      ciphertext.fill(0);\n      return out;\n    },\n    decrypt: (ciphertext: Uint8Array, ...argsDec: any[]) => {\n      const { nonceLength } = fn;\n      const nonce = ciphertext.subarray(0, nonceLength);\n      const data = ciphertext.subarray(nonceLength);\n      return (fn(key, nonce, ...args).decrypt as any)(data, ...argsDec);\n    },\n  })) as RemoveNonce<T>;\n}\n\n// Overridable\nexport const utils = {\n  async encrypt(key: Uint8Array, keyParams: any, cryptParams: any, plaintext: Uint8Array) {\n    const cr = getWebcryptoSubtle();\n    const iKey = await cr.importKey('raw', key, keyParams, true, ['encrypt']);\n    const ciphertext = await cr.encrypt(cryptParams, iKey, plaintext);\n    return new Uint8Array(ciphertext);\n  },\n  async decrypt(key: Uint8Array, keyParams: any, cryptParams: any, ciphertext: Uint8Array) {\n    const cr = getWebcryptoSubtle();\n    const iKey = await cr.importKey('raw', key, keyParams, true, ['decrypt']);\n    const plaintext = await cr.decrypt(cryptParams, iKey, ciphertext);\n    return new Uint8Array(plaintext);\n  },\n};\n\nconst mode = {\n  CBC: 'AES-CBC',\n  CTR: 'AES-CTR',\n  GCM: 'AES-GCM',\n} as const;\ntype BlockMode = (typeof mode)[keyof typeof mode];\n\nfunction getCryptParams(algo: BlockMode, nonce: Uint8Array, AAD?: Uint8Array) {\n  if (algo === mode.CBC) return { name: mode.CBC, iv: nonce };\n  if (algo === mode.CTR) return { name: mode.CTR, counter: nonce, length: 64 };\n  if (algo === mode.GCM) {\n    if (AAD) return { name: mode.GCM, iv: nonce, additionalData: AAD };\n    else return { name: mode.GCM, iv: nonce };\n  }\n\n  throw new Error('unknown aes block mode');\n}\n\nfunction generate(algo: BlockMode) {\n  return (key: Uint8Array, nonce: Uint8Array, AAD?: Uint8Array): AsyncCipher => {\n    abytes(key);\n    abytes(nonce);\n    const keyParams = { name: algo, length: key.length * 8 };\n    const cryptParams = getCryptParams(algo, nonce, AAD);\n    return {\n      // keyLength,\n      encrypt(plaintext: Uint8Array) {\n        abytes(plaintext);\n        return utils.encrypt(key, keyParams, cryptParams, plaintext);\n      },\n      decrypt(ciphertext: Uint8Array) {\n        abytes(ciphertext);\n        return utils.decrypt(key, keyParams, cryptParams, ciphertext);\n      },\n    };\n  };\n}\n\nexport const cbc = generate(mode.CBC);\nexport const ctr = generate(mode.CTR);\nexport const gcm = generate(mode.GCM);\n\n// // Type tests\n// import { siv, gcm, ctr, ecb, cbc } from '../aes.js';\n// import { xsalsa20poly1305 } from '../salsa.js';\n// import { chacha20poly1305, xchacha20poly1305 } from '../chacha.js';\n\n// const wsiv = managedNonce(siv);\n// const wgcm = managedNonce(gcm);\n// const wctr = managedNonce(ctr);\n// const wcbc = managedNonce(cbc);\n// const wsalsapoly = managedNonce(xsalsa20poly1305);\n// const wchacha = managedNonce(chacha20poly1305);\n// const wxchacha = managedNonce(xchacha20poly1305);\n\n// // should fail\n// const wcbc2 = managedNonce(managedNonce(cbc));\n// const wecb = managedNonce(ecb);\n", "import { Convert } from '@web5/common';\nimport { getWebcryptoSubtle } from '@noble/ciphers/webcrypto';\n\nimport type { Jwk } from '../jose/jwk.js';\n\nimport { computeJwkThumbprint, isOctPrivateJwk } from '../jose/jwk.js';\n\n/**\n * Const defining the AES-GCM initialization vector (IV) length in bits.\n *\n * @remarks\n * NIST Special Publication 800-38D, Section 5.2.1.1 states that the IV length:\n * > For IVs, it is recommended that implementations restrict support to the length of 96 bits, to\n * > promote interoperability, efficiency, and simplicity of design.\n *\n * This implementation does not support IV lengths that are different from the value defined by\n * this constant.\n *\n * @see {@link https://doi.org/10.6028/NIST.SP.800-38D | NIST SP 800-38D}\n */\nconst AES_GCM_IV_LENGTH = 96;\n\n/**\n * Constant defining the AES key length values in bits.\n *\n * @remarks\n * NIST publication FIPS 197 states:\n * > The AES algorithm is capable of using cryptographic keys of 128, 192, and 256 bits to encrypt\n * > and decrypt data in blocks of 128 bits.\n *\n * This implementation does not support key lengths that are different from the three values\n * defined by this constant.\n *\n * @see {@link https://doi.org/10.6028/NIST.FIPS.197-upd1 | NIST FIPS 197}\n */\nconst AES_KEY_LENGTHS = [128, 192, 256] as const;\n\n/**\n * Constant defining the AES-GCM tag length values in bits.\n *\n * @remarks\n * NIST Special Publication 800-38D, Section 5.2.1.2 states that the tag length:\n * > may be any one of the following five values: 128, 120, 112, 104, or 96\n *\n * Although the NIST specification allows for tag lengths of 32 or 64 bits in certain applications,\n * the use of shorter tag lengths can be problematic for GCM due to targeted forgery attacks. As a\n * precaution, this implementation does not support tag lengths that are different from the five\n * values defined by this constant. See Appendix C of the NIST SP 800-38D specification for\n * additional guidance and details.\n *\n * @see {@link https://doi.org/10.6028/NIST.SP.800-38D | NIST SP 800-38D}\n */\nexport const AES_GCM_TAG_LENGTHS = [96, 104, 112, 120, 128] as const;\n\n/**\n * The `AesGcm` class provides a comprehensive set of utilities for cryptographic operations\n * using the Advanced Encryption Standard (AES) in Galois/Counter Mode (GCM). This class includes\n * methods for key generation, encryption, decryption, and conversions between raw byte arrays\n * and JSON Web Key (JWK) formats. It is designed to support AES-GCM, a symmetric key algorithm\n * that is widely used for its efficiency, security, and provision of authenticated encryption.\n *\n * AES-GCM is particularly favored for scenarios that require both confidentiality and integrity\n * of data. It integrates the counter mode of encryption with the Galois mode of authentication,\n * offering high performance and parallel processing capabilities.\n *\n * Key Features:\n * - Key Generation: Generate AES symmetric keys in JWK format.\n * - Key Conversion: Transform keys between raw byte arrays and JWK formats.\n * - Encryption: Encrypt data using AES-GCM with the provided symmetric key.\n * - Decryption: Decrypt data encrypted with AES-GCM using the corresponding symmetric key.\n *\n * The methods in this class are asynchronous, returning Promises to accommodate various\n * JavaScript environments.\n *\n * @example\n * ```ts\n * // Key Generation\n * const length = 256; // Length of the key in bits (e.g., 128, 192, 256)\n * const privateKey = await AesGcm.generateKey({ length });\n *\n * // Encryption\n * const data = new TextEncoder().encode('Messsage');\n * const iv = new Uint8Array(12); // 12-byte initialization vector\n * const encryptedData = await AesGcm.encrypt({\n *   data,\n *   iv,\n *   key: privateKey\n * });\n *\n * // Decryption\n * const decryptedData = await AesGcm.decrypt({\n *   data: encryptedData,\n *   iv,\n *   key: privateKey\n * });\n *\n * // Key Conversion\n * const privateKeyBytes = await AesGcm.privateKeyToBytes({ privateKey });\n * ```\n */\nexport class AesGcm {\n  /**\n * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n *\n * @remarks\n * This method accepts a symmetric key represented as a byte array (Uint8Array) and\n * converts it into a JWK object for use with AES-GCM (Advanced Encryption Standard -\n * Galois/Counter Mode). The conversion process involves encoding the key into\n * base64url format and setting the appropriate JWK parameters.\n *\n * The resulting JWK object includes the following properties:\n * - `kty`: Key Type, set to 'oct' for Octet Sequence (representing a symmetric key).\n * - `k`: The symmetric key, base64url-encoded.\n * - `kid`: Key ID, generated based on the JWK thumbprint.\n *\n * @example\n * ```ts\n * const privateKeyBytes = new Uint8Array([...]); // Replace with actual symmetric key bytes\n * const privateKey = await AesGcm.bytesToPrivateKey({ privateKeyBytes });\n * ```\n *\n * @param params - The parameters for the symmetric key conversion.\n * @param params.privateKeyBytes - The raw symmetric key as a Uint8Array.\n *\n * @returns A Promise that resolves to the symmetric key in JWK format.\n */\n  public static async bytesToPrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Construct the private key in JWK format.\n    const privateKey: Jwk = {\n      k   : Convert.uint8Array(privateKeyBytes).toBase64Url(),\n      kty : 'oct'\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Decrypts the provided data using AES-GCM.\n   *\n   * @remarks\n   * This method performs AES-GCM decryption on the given encrypted data using the specified key.\n   * It requires an initialization vector (IV), the encrypted data along with the decryption key,\n   * and optionally, additional authenticated data (AAD). The method returns the decrypted data as a\n   * Uint8Array. The optional `tagLength` parameter specifies the size in bits of the authentication\n   * tag used when encrypting the data. If not specified, the default tag length of 128 bits is\n   * used.\n   *\n   * @example\n   * ```ts\n   * const encryptedData = new Uint8Array([...]); // Encrypted data\n   * const iv = new Uint8Array([...]); // Initialization vector used during encryption\n   * const additionalData = new Uint8Array([...]); // Optional additional authenticated data\n   * const key = { ... }; // A Jwk object representing the AES key\n   * const decryptedData = await AesGcm.decrypt({\n   *   data: encryptedData,\n   *   iv,\n   *   additionalData,\n   *   key,\n   *   tagLength: 128 // Optional tag length in bits\n   * });\n   * ```\n   *\n   * @param params - The parameters for the decryption operation.\n   * @param params.key - The key to use for decryption, represented in JWK format.\n   * @param params.data - The encrypted data to decrypt, represented as a Uint8Array.\n   * @param params.iv - The initialization vector, represented as a Uint8Array.\n   * @param params.additionalData - Optional additional authenticated data. Optional.\n   * @param params.tagLength - The length of the authentication tag in bits. Optional.\n   *\n   * @returns A Promise that resolves to the decrypted data as a Uint8Array.\n   */\n  public static async decrypt({ key, data, iv, additionalData, tagLength }: {\n    key: Jwk;\n    data: Uint8Array;\n    iv: Uint8Array;\n    additionalData?: Uint8Array;\n    tagLength?: typeof AES_GCM_TAG_LENGTHS[number];\n  }): Promise<Uint8Array> {\n    // Validate the initialization vector length.\n    if (iv.byteLength !== AES_GCM_IV_LENGTH / 8) {\n      throw new TypeError(`The initialization vector must be ${AES_GCM_IV_LENGTH} bits in length`);\n    }\n\n    // Validate the tag length.\n    if (tagLength && !AES_GCM_TAG_LENGTHS.includes(tagLength as any)) {\n      throw new RangeError(`The tag length is invalid: Must be ${AES_GCM_TAG_LENGTHS.join(', ')} bits`);\n    }\n\n    // Get the Web Crypto API interface.\n    const webCrypto = getWebcryptoSubtle();\n\n    // Import the JWK into the Web Crypto API to use for the decrypt operation.\n    const webCryptoKey = await webCrypto.importKey('jwk', key, { name: 'AES-GCM' }, true, ['decrypt']);\n\n    // Note: Some browser implementations of the Web Crypto API throw an error if additionalData or\n    // tagLength are undefined, so only include them in the algorithm object if they are defined.\n    const algorithm = {\n      name: 'AES-GCM',\n      iv,\n      ...(tagLength && { tagLength }),\n      ...(additionalData && { additionalData})\n    };\n\n    // Decrypt the data.\n    const plaintextBuffer = await webCrypto.decrypt(algorithm, webCryptoKey, data);\n\n    // Convert from ArrayBuffer to Uint8Array.\n    const plaintext = new Uint8Array(plaintextBuffer);\n\n    return plaintext;\n  }\n\n  /**\n   * Encrypts the provided data using AES-GCM.\n   *\n   * @remarks\n   * This method performs AES-GCM encryption on the given data using the specified key.\n   * It requires an initialization vector (IV), the encrypted data along with the decryption key,\n   * and optionally, additional authenticated data (AAD). The method returns the encrypted data as a\n   * Uint8Array. The optional `tagLength` parameter specifies the size in bits of the authentication\n   * tag generated in the encryption operation and used for authentication in the corresponding\n   * decryption. If not specified, the default tag length of 128 bits is used.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage');\n   * const iv = new Uint8Array([...]); // Initialization vector\n   * const additionalData = new Uint8Array([...]); // Optional additional authenticated data\n   * const key = { ... }; // A Jwk object representing an AES key\n   * const encryptedData = await AesGcm.encrypt({\n   *   data,\n   *   iv,\n   *   additionalData,\n   *   key,\n   *   tagLength: 128 // Optional tag length in bits\n   * });\n   * ```\n   *\n   * @param params - The parameters for the encryption operation.\n   * @param params.key - The key to use for encryption, represented in JWK format.\n   * @param params.data - The data to encrypt, represented as a Uint8Array.\n   * @param params.iv - The initialization vector, represented as a Uint8Array.\n   * @param params.additionalData - Optional additional authenticated data. Optional.\n   * @param params.tagLength - The length of the authentication tag in bits. Optional.\n   *\n   * @returns A Promise that resolves to the encrypted data as a Uint8Array.\n   */\n  public static async encrypt({ data, iv, key, additionalData, tagLength }: {\n    key: Jwk;\n    data: Uint8Array;\n    iv: Uint8Array;\n    additionalData?: Uint8Array;\n    tagLength?: typeof AES_GCM_TAG_LENGTHS[number];\n  }): Promise<Uint8Array> {\n    // Validate the initialization vector length.\n    if (iv.byteLength !== AES_GCM_IV_LENGTH / 8) {\n      throw new TypeError(`The initialization vector must be ${AES_GCM_IV_LENGTH} bits in length`);\n    }\n\n    // Validate the tag length.\n    if (tagLength && !AES_GCM_TAG_LENGTHS.includes(tagLength as any)) {\n      throw new RangeError(`The tag length is invalid: Must be ${AES_GCM_TAG_LENGTHS.join(', ')} bits`);\n    }\n\n    // Get the Web Crypto API interface.\n    const webCrypto = getWebcryptoSubtle();\n\n    // Import the JWK into the Web Crypto API to use for the encrypt operation.\n    const webCryptoKey = await webCrypto.importKey('jwk', key, { name: 'AES-GCM' }, true, ['encrypt']);\n\n    // Note: Some browser implementations of the Web Crypto API throw an error if additionalData or\n    // tagLength are undefined, so only include them in the algorithm object if they are defined.\n    const algorithm = {\n      name: 'AES-GCM',\n      iv,\n      ...(tagLength && { tagLength }),\n      ...(additionalData && { additionalData})\n    };\n\n    // Encrypt the data.\n    const ciphertextBuffer = await webCrypto.encrypt(algorithm, webCryptoKey, data);\n\n    // Convert from ArrayBuffer to Uint8Array.\n    const ciphertext = new Uint8Array(ciphertextBuffer);\n\n    return ciphertext;\n  }\n\n  /**\n   * Generates a symmetric key for AES in Galois/Counter Mode (GCM) in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method creates a new symmetric key of a specified length suitable for use with\n   * AES-GCM encryption. It leverages cryptographically secure random number generation\n   * to ensure the uniqueness and security of the key. The generated key adheres to the JWK\n   * format, facilitating compatibility with common cryptographic standards and ease of use\n   * in various cryptographic applications.\n   *\n   * The generated key includes these components:\n   * - `kty`: Key Type, set to 'oct' for Octet Sequence, indicating a symmetric key.\n   * - `k`: The symmetric key component, base64url-encoded.\n   * - `kid`: Key ID, generated based on the JWK thumbprint, providing a unique identifier.\n   *\n   * @example\n   * ```ts\n   * const length = 256; // Length of the key in bits (e.g., 128, 192, 256)\n   * const privateKey = await AesGcm.generateKey({ length });\n   * ```\n   *\n   * @param params - The parameters for the key generation.\n   * @param params.length - The length of the key in bits. Common lengths are 128, 192, and 256 bits.\n   *\n   * @returns A Promise that resolves to the generated symmetric key in JWK format.\n   */\n  public static async generateKey({ length }: {\n    length: typeof AES_KEY_LENGTHS[number];\n  }): Promise<Jwk> {\n    // Validate the key length.\n    if (!AES_KEY_LENGTHS.includes(length as any)) {\n      throw new RangeError(`The key length is invalid: Must be ${AES_KEY_LENGTHS.join(', ')} bits`);\n    }\n\n    // Get the Web Crypto API interface.\n    const webCrypto = getWebcryptoSubtle();\n\n    // Generate a random private key.\n    // See https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#usage_notes for\n    // an explanation for why Web Crypto generateKey() is used instead of getRandomValues().\n    const webCryptoKey = await webCrypto.generateKey( { name: 'AES-GCM', length }, true, ['encrypt']);\n\n    // Export the private key in JWK format.\n    const { ext, key_ops, ...privateKey } = await webCrypto.exportKey('jwk', webCryptoKey);\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Converts a private key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method takes a symmetric key in JWK format and extracts its raw byte representation.\n   * It focuses on the 'k' parameter of the JWK, which represents the symmetric key component\n   * in base64url encoding. The method decodes this value into a byte array, providing\n   * the symmetric key in its raw binary form.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A symmetric key in JWK format\n   * const privateKeyBytes = await AesGcm.privateKeyToBytes({ privateKey });\n   * ```\n   *\n   * @param params - The parameters for the symmetric key conversion.\n   * @param params.privateKey - The symmetric key in JWK format.\n   *\n   * @returns A Promise that resolves to the symmetric key as a Uint8Array.\n   */\n  public static async privateKeyToBytes({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid oct private key.\n    if (!isOctPrivateJwk(privateKey)) {\n      throw new Error(`AesGcm: The provided key is not a valid oct private key.`);\n    }\n\n    // Decode the provided private key to bytes.\n    const privateKeyBytes = Convert.base64Url(privateKey.k).toUint8Array();\n\n    return privateKeyBytes;\n  }\n}", "import type { Jwk } from '../jose/jwk.js';\nimport type { Cipher } from '../types/cipher.js';\nimport type { KeyGenerator } from '../types/key-generator.js';\nimport type { DecryptParams, EncryptParams, GenerateKeyParams } from '../types/params-direct.js';\n\nimport { CryptoAlgorithm } from './crypto-algorithm.js';\nimport { AesGcm, AES_GCM_TAG_LENGTHS } from '../primitives/aes-gcm.js';\n\n/**\n * The `AesGcmGenerateKeyParams` interface defines the algorithm-specific parameters that should be\n * passed into the `generateKey()` method when using the AES-GCM algorithm.\n */\nexport interface AesGcmGenerateKeyParams extends GenerateKeyParams {\n  /** Specifies the algorithm variant for key generation in AES-GCM mode.\n   * The value determines the length of the key to be generated and must be one of the following:\n   * - `\"A128GCM\"`: Generates a 128-bit key.\n   * - `\"A192GCM\"`: Generates a 192-bit key.\n   * - `\"A256GCM\"`: Generates a 256-bit key.\n   */\n  algorithm: 'A128GCM' | 'A192GCM' | 'A256GCM';\n}\n\n/**\n * The `AesGcmParams` interface defines the algorithm-specific parameters that should be passed\n * into the `encrypt()` and `decrypt()` methods when using the AES-GCM algorithm.\n */\nexport interface AesGcmParams {\n  /**\n   * The `additionalData` property is used for authentication alongside encrypted data but isn't\n   * encrypted itself. It must match in both encryption and decryption; a mismatch will cause\n   * decryption to fail. This feature allows for the authentication of data without encrypting it.\n   *\n   * The `additionalData` property is optional and omitting it does not compromise encryption\n   * security.\n   */\n  additionalData?: Uint8Array;\n\n  /**\n   * The initialization vector (IV) must be unique for every encryption operation carried out with a\n   * given key. The IV need not be secret, but it must be unpredictable: that is, the IV must not be\n   * reused with the same key. The IV must be 12 bytes (96 bits) in length in accordance with the\n   * AES-GCM specification recommendedation to promote interoperability and efficiency.\n   *\n   * Note: It is OK to transmit the IV in the clear with the encrypted message.\n   */\n  iv: Uint8Array;\n\n  /**\n   * This property determines the size in bits of the authentication tag generated in the encryption\n   * operation and used for authentication in the corresponding decryption. In accordance with the\n   * AES-GCM specification, the tag length must be 96, 104, 112, 120 or 128.\n   *\n   * The `tagLength` property is optional and defaults to 128 bits if omitted.\n   */\n  tagLength?: typeof AES_GCM_TAG_LENGTHS[number];\n}\n\n/**\n * The `AesGcmAlgorithm` class provides a concrete implementation for cryptographic operations using\n * the AES algorithm in Galois/Counter Mode (GCM). This class implements both\n * {@link Cipher | `Cipher`} and { @link KeyGenerator | `KeyGenerator`} interfaces, providing\n * key generation, encryption, and decryption features.\n *\n * This class is typically accessed through implementations that extend the\n * {@link CryptoApi | `CryptoApi`} interface.\n */\nexport class AesGcmAlgorithm extends CryptoAlgorithm\n  implements Cipher<AesGcmParams, AesGcmParams>,\n             KeyGenerator<AesGcmGenerateKeyParams, Jwk> {\n\n  /**\n   * Decrypts the provided data using AES-GCM.\n   *\n   * @remarks\n   * This method performs AES-GCM decryption on the given encrypted data using the specified key.\n   * It requires an initialization vector (IV), the encrypted data along with the decryption key,\n   * and optionally, additional authenticated data (AAD). The method returns the decrypted data as a\n   * Uint8Array. The optional `tagLength` parameter specifies the size in bits of the authentication\n   * tag used when encrypting the data. If not specified, the default tag length of 128 bits is\n   * used.\n   *\n   * @example\n   * ```ts\n   * const aesGcm = new AesGcmAlgorithm();\n   * const encryptedData = new Uint8Array([...]); // Encrypted data\n   * const iv = new Uint8Array([...]); // Initialization vector used during encryption\n   * const additionalData = new Uint8Array([...]); // Optional additional authenticated data\n   * const key = { ... }; // A Jwk object representing the AES key\n   * const decryptedData = await aesGcm.decrypt({\n   *   data: encryptedData,\n   *   iv,\n   *   additionalData,\n   *   key,\n   *   tagLength: 128 // Optional tag length in bits\n   * });\n   * ```\n   *\n   * @param params - The parameters for the decryption operation.\n   *\n   * @returns A Promise that resolves to the decrypted data as a Uint8Array.\n   */\n  public async decrypt(params:\n    DecryptParams & AesGcmParams\n  ): Promise<Uint8Array> {\n    const plaintext = AesGcm.decrypt(params);\n\n    return plaintext;\n  }\n\n  /**\n   * Encrypts the provided data using AES-GCM.\n   *\n   * @remarks\n   * This method performs AES-GCM encryption on the given data using the specified key.\n   * It requires an initialization vector (IV), the encrypted data along with the decryption key,\n   * and optionally, additional authenticated data (AAD). The method returns the encrypted data as a\n   * Uint8Array. The optional `tagLength` parameter specifies the size in bits of the authentication\n   * tag generated in the encryption operation and used for authentication in the corresponding\n   * decryption. If not specified, the default tag length of 128 bits is used.\n   *\n   * @example\n   * ```ts\n   * const aesGcm = new AesGcmAlgorithm();\n   * const data = new TextEncoder().encode('Messsage');\n   * const iv = new Uint8Array([...]); // Initialization vector\n   * const additionalData = new Uint8Array([...]); // Optional additional authenticated data\n   * const key = { ... }; // A Jwk object representing an AES key\n   * const encryptedData = await aesGcm.encrypt({\n   *   data,\n   *   iv,\n   *   additionalData,\n   *   key,\n   *   tagLength: 128 // Optional tag length in bits\n   * });\n   * ```\n   *\n   * @param params - The parameters for the encryption operation.\n   *\n   * @returns A Promise that resolves to the encrypted data as a Uint8Array.\n   */\n  public async encrypt(params:\n    EncryptParams & AesGcmParams\n  ): Promise<Uint8Array> {\n    const ciphertext = AesGcm.encrypt(params);\n\n    return ciphertext;\n  }\n\n  /**\n   * Generates a symmetric key for AES in Galois/Counter Mode (GCM) in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method generates a symmetric AES key for use in GCM mode, based on the specified\n   * `algorithm` parameter which determines the key length. It uses cryptographically secure random\n   * number generation to ensure the uniqueness and security of the key. The key is returned in JWK\n   * format.\n   *\n   * The generated key includes the following components:\n   * - `kty`: Key Type, set to 'oct' for Octet Sequence.\n   * - `k`: The symmetric key component, base64url-encoded.\n   * - `kid`: Key ID, generated based on the JWK thumbprint.\n   *\n   * @example\n   * ```ts\n   * const aesGcm = new AesGcmAlgorithm();\n   * const privateKey = await aesGcm.generateKey({ algorithm: 'A256GCM' });\n   * ```\n   *\n   * @param params - The parameters for the key generation.\n   *\n   * @returns A Promise that resolves to the generated symmetric key in JWK format.\n   */\n  public async generateKey({ algorithm }:\n    AesGcmGenerateKeyParams\n  ): Promise<Jwk> {\n    // Map algorithm name to key length.\n    const length = { A128GCM: 128, A192GCM: 192, A256GCM: 256 }[algorithm] as 128 | 192 | 256;\n\n    // Generate a random private key.\n    const privateKey = await AesGcm.generateKey({ length });\n\n    // Set the `alg` property based on the specified algorithm.\n    privateKey.alg = algorithm;\n\n    return privateKey;\n  }\n}", "import { sha256 } from '@noble/hashes/sha256';\nimport { Convert, universalTypeOf } from '@web5/common';\nimport { TypedArray, concatBytes } from '@noble/hashes/utils';\n\n/**\n * ConcatKDF FixedInfo Parameters.\n *\n * This implementation follows the recommended format for `FixedInfo` specified in section 5.8.2\n * of the NIST.800-56A publication.\n *\n * @see {@link https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf | NIST.800-56A}\n * @see {@link https://datatracker.ietf.org/doc/html/rfc7518#section-4.6.2 | RFC 7518, Section 4.6.2}\n */\nexport type ConcatKdfFixedInfo = {\n  /**\n   * The algorithm the derived secret keying material will be used with.\n   */\n  algorithmId: string;\n\n  /**\n   * Information related to party U (initiator) involved in the key agreement\n   * transaction. It could be a public key, identifier, or any other data.\n   */\n  partyUInfo: string | TypedArray;\n\n  /**\n   * Information related to party V (receiver) involved in the key\n   * agreement transaction. Similar to partyUInfo, it could be a\n   * public key, identifier, etc.\n   */\n  partyVInfo: string | TypedArray;\n\n  /**\n   * Optional field. It is usually used to ensure the uniqueness of the\n   * derived keying material when the input keying material is used in\n   * multiple key-derivation key-agreement transactions. It is usually\n   * a public value such as the keyDataLen.\n   */\n  suppPubInfo?: number;\n\n  /**\n   * Optional field. It is used when it is desired to secretively\n   * bind additional information into the derived keying material.\n   * It is a secret value agreed upon by the entities who are party\n   * to the key agreement.\n   */\n  suppPrivInfo?: string | TypedArray;\n}\n\n/**\n * An implementation of the Concatenation Key Derivation Function (ConcatKDF)\n * as specified in NIST.800-56A, a single-step key-derivation function (SSKDF).\n * ConcatKDF produces a derived key from a secret key (like a shared secret\n * from ECDH), and other optional public information. This implementation\n * specifically uses SHA-256 as the pseudorandom function (PRF).\n *\n * Note: This implementation allows for only a single round / repetition using the function\n *       `K(1) = H(counter || Z || FixedInfo)`, where:\n *   - `K(1)` is the derived key material after one round\n *   - `H` is the SHA-256 hashing function\n *   - `counter` is a 32-bit, big-endian bit string counter set to 0x00000001\n *   - `Z` is the shared secret value obtained from a key agreement protocol\n *   - `FixedInfo` is a bit string used to ensure that the derived keying material is adequately\n *     \"bound\" to the key-agreement transaction.\n *\n * @example\n * ```ts\n * // Key Derivation\n * const derivedKeyingMaterial = await ConcatKdf.deriveKey({\n *   sharedSecret: utils.randomBytes(32),\n *   keyDataLen: 128,\n *   fixedInfo: {\n *     algorithmId: \"A128GCM\",\n *     partyUInfo: \"Alice\",\n *     partyVInfo: \"Bob\",\n *     suppPubInfo: 128,\n *   },\n * });\n * ```\n *\n * Additional Information:\n *\n * `Z`, or \"shared secret\":\n *   The shared secret value obtained from a key agreement protocol, such as\n *   Diffie-Hellman, ECDH (Elliptic Curve Diffie-Hellman). Importantly, this\n *   shared secret is not directly used as the encryption or authentication\n *   key, but as an input to a key derivation function (KDF), such as Concat\n *   KDF, to generate the actual key. This adds an extra layer of security, as\n *   even if the shared secret gets compromised, the actual  encryption or\n *   authentication key stays safe. This shared secret `Z` value is kept\n *   confidential between the two parties in the key agreement protocol.\n *\n * @see {@link https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf | NIST.800-56A}\n * @see {@link https://datatracker.ietf.org/doc/html/rfc7518#section-4.6.2 | RFC 7518, Section 4.6.2}\n */\nexport class ConcatKdf {\n  /**\n   * Derives a key of a specified length from the input parameters.\n   *\n   * @example\n   * ```ts\n   * // Key Derivation\n   * const derivedKeyingMaterial = await ConcatKdf.deriveKey({\n   *   sharedSecret: utils.randomBytes(32),\n   *   keyDataLen: 128,\n   *   fixedInfo: {\n   *     algorithmId: \"A128GCM\",\n   *     partyUInfo: \"Alice\",\n   *     partyVInfo: \"Bob\",\n   *     suppPubInfo: 128,\n   *   },\n   * });\n   * ```\n   *\n   * @param params - Input parameters for key derivation.\n   * @param params.keyDataLen - The desired length of the derived key in bits.\n   * @param params.sharedSecret - The shared secret key to derive from.\n   * @param params.fixedInfo - Additional public information to use in key derivation.\n   * @returns The derived key as a Uint8Array.\n   *\n   * @throws {Error} If the `keyDataLen` would require multiple rounds.\n   */\n  public static async deriveKey({ keyDataLen, fixedInfo, sharedSecret }: {\n    keyDataLen: number;\n    fixedInfo: ConcatKdfFixedInfo;\n    sharedSecret: Uint8Array;\n  }): Promise<Uint8Array> {\n    // RFC 7518 Section 4.6.2 specifies using SHA-256 for ECDH key agreement:\n    // \"Key derivation is performed using the Concat KDF, as defined in\n    // Section 5.8.1 of [NIST.800-56A], where the Digest Method is SHA-256.\"\n    // Reference: https://tools.ietf.org/html/rfc7518#section-4.6.2\n    const hashLen = 256;\n\n    // This implementation only supports single round Concat KDF.\n    const roundCount = Math.ceil(keyDataLen / hashLen);\n    if (roundCount !== 1) {\n      throw new Error(`Concat KDF with ${roundCount} rounds not supported.`);\n    }\n\n    // Initialize a 32-bit, big-endian bit string counter as 0x00000001.\n    const counter = new Uint8Array(4);\n    new DataView(counter.buffer).setUint32(0, roundCount);\n\n    // Compute the FixedInfo bit-string.\n    const fixedInfoBytes = ConcatKdf.computeFixedInfo(fixedInfo);\n\n    // Compute K(i) = H(counter || Z || FixedInfo)\n    // return concatBytes(counter, sharedSecretZ, fixedInfo);\n    const derivedKeyingMaterial = sha256(concatBytes(counter, sharedSecret, fixedInfoBytes));\n\n    // Return the bit string of derived keying material of length keyDataLen bits.\n    return derivedKeyingMaterial.slice(0, keyDataLen / 8);\n  }\n\n  /**\n   * Computes the `FixedInfo` parameter for Concat KDF, which binds the derived key material to the\n   * context of the key agreement transaction.\n   *\n   * @remarks\n   * This implementation follows the recommended format for `FixedInfo` specified in section\n   * 5.8.1.2.1 of the NIST.800-56A publication.\n   *\n   * `FixedInfo` is a bit string equal to the following concatenation:\n   * `AlgorithmID || PartyUInfo || PartyVInfo {|| SuppPubInfo }{|| SuppPrivInfo }`.\n   *\n   * `SuppPubInfo` is the key length in bits, big endian encoded as a 32-bit number. For example,\n   * 128 would be [0, 0, 0, 128] and 256 would be [0, 0, 1, 0].\n   *\n   * @param params - Input data to construct FixedInfo.\n   * @returns FixedInfo as a Uint8Array.\n   */\n  private static computeFixedInfo(params:\n    ConcatKdfFixedInfo\n  ): Uint8Array {\n    // Required sub-fields.\n    const algorithmId = ConcatKdf.toDataLenData({ data: params.algorithmId });\n    const partyUInfo = ConcatKdf.toDataLenData({ data: params.partyUInfo });\n    const partyVInfo = ConcatKdf.toDataLenData({ data: params.partyVInfo });\n    // Optional sub-fields.\n    const suppPubInfo = ConcatKdf.toDataLenData({ data: params.suppPubInfo, variableLength: false });\n    const suppPrivInfo = ConcatKdf.toDataLenData({ data: params.suppPrivInfo });\n\n    // Concatenate AlgorithmID || PartyUInfo || PartyVInfo || SuppPubInfo || SuppPrivInfo.\n    const fixedInfo = concatBytes(algorithmId, partyUInfo, partyVInfo, suppPubInfo, suppPrivInfo);\n\n    return fixedInfo;\n  }\n\n  /**\n   * Encodes input data as a length-prefixed byte string, or\n   * as a fixed-length bit string if specified.\n   *\n   * If variableLength = true, return the data in the form Datalen || Data,\n   * where Data is a variable-length string of zero or more (eight-bit)\n   * bytes, and Datalen is a fixed-length, big-endian counter that\n   * indicates the length (in bytes) of Data.\n   *\n   * If variableLength = false, return the data formatted as a\n   * fixed-length bit string.\n   *\n   * @param params - Input data and options for the conversion.\n   * @param params.data - The input data to encode. Must be a type convertible to Uint8Array by the Convert class.\n   * @param params.variableLength - Whether to output the data as variable length. Default is true.\n   *\n   * @returns The input data encoded as a Uint8Array.\n   *\n   * @throws {TypeError} If fixed-length data is not a number.\n   */\n  private static toDataLenData({ data, variableLength = true }: {\n    data: unknown;\n    variableLength?: boolean;\n  }): Uint8Array {\n    let encodedData: Uint8Array;\n    const dataType = universalTypeOf(data);\n\n    // Return an emtpy octet sequence if data is not specified.\n    if (dataType === 'Undefined') {\n      return new Uint8Array(0);\n    }\n\n    if (variableLength) {\n      const dataU8A = (dataType === 'Uint8Array')\n        ? data as Uint8Array\n        : new Convert(data, dataType).toUint8Array();\n      const bufferLength = dataU8A.length;\n      encodedData = new Uint8Array(4 + bufferLength);\n      new DataView(encodedData.buffer).setUint32(0, bufferLength);\n      encodedData.set(dataU8A, 4);\n\n    } else {\n      if (typeof data !== 'number') {\n        throw TypeError('Fixed length input must be a number.');\n      }\n      encodedData = new Uint8Array(4);\n      new DataView(encodedData.buffer).setUint32(0, data);\n    }\n\n    return encodedData;\n  }\n}", "import { crypto } from '@noble/hashes/crypto';\n\n/**\n * The object that should be passed into `Pbkdf2.deriveKey()`, when using the PBKDF2 algorithm.\n */\nexport type Pbkdf2DeriveKeyParams = {\n  /**\n   * A string representing the digest algorithm to use. This may be one of:\n   * - 'SHA-256'\n   * - 'SHA-384'\n   * - 'SHA-512'\n   */\n  hash: 'SHA-256' | 'SHA-384' | 'SHA-512';\n\n  /**\n   * The password from which to derive the key, represented as a Uint8Array.\n   */\n  password: Uint8Array;\n\n  /**\n   * The salt value to use in the derivation process, as a Uint8Array. This should be a random or\n   * pseudo-random value of at least 16 bytes. Unlike the `password`, `salt` does not need to be\n   * kept secret.\n   */\n  salt: Uint8Array;\n\n  /**\n   * A `Number` representing the number of iterations the hash function will be executed in\n   * `deriveKey()`. This impacts the computational cost of the `deriveKey()` operation, making it\n   * more resistant to dictionary attacks. The higher the number, the more secure, but also slower,\n   * the operation. Choose a value that balances security needs and performance for your\n   * application.\n   */\n  iterations: number;\n\n  /**\n   * The desired length of the derived key in bits. To be compatible with all browsers, the number\n   * should be a multiple of 8.\n   */\n  length: number;\n};\n\n/**\n * The `Pbkdf2` class provides a secure way to derive cryptographic keys from a password\n * using the PBKDF2 (Password-Based Key Derivation Function 2) algorithm.\n *\n * The PBKDF2 algorithm is widely used for generating keys from passwords, as it applies\n * a pseudorandom function to the input password along with a salt value and iterates the\n * process multiple times to increase the key's resistance to brute-force attacks.\n *\n * This class offers a single static method `deriveKey` to perform key derivation.\n *\n * @example\n * ```ts\n * // Key Derivation\n * const derivedKey = await Pbkdf2.deriveKey({\n *   hash: 'SHA-256', // The hash function to use ('SHA-256', 'SHA-384', 'SHA-512')\n *   password: new TextEncoder().encode('password'), // The password as a Uint8Array\n *   salt: new Uint8Array([...]), // The salt value\n *   iterations: 1000, // The number of iterations\n *   length: 256 // The length of the derived key in bits\n * });\n * ```\n *\n * @remarks\n * This class relies on the availability of the Web Crypto API.\n */\nexport class Pbkdf2 {\n  /**\n   * Derives a cryptographic key from a password using the PBKDF2 algorithm.\n   *\n   * @remarks\n   * This method applies the PBKDF2 algorithm to the provided password along with\n   * a salt value and iterates the process a specified number of times. It uses\n   * a cryptographic hash function to enhance security and produce a key of the\n   * desired length. The method is capable of utilizing either the Web Crypto API\n   * or the Node.js Crypto module, depending on the environment's support.\n   *\n   * @example\n   * ```ts\n   * const derivedKey = await Pbkdf2.deriveKey({\n   *   hash: 'SHA-256',\n   *   password: new TextEncoder().encode('password'),\n   *   salt: new Uint8Array([...]),\n   *   iterations: 1000,\n   *   length: 256\n   * });\n   * ```\n   *\n   * @param params - The parameters for key derivation.\n   * @param params.hash - The hash function to use, such as 'SHA-256', 'SHA-384', or 'SHA-512'.\n   * @param params.password - The password from which to derive the key, represented as a Uint8Array.\n   * @param params.salt - The salt value to use in the derivation process, as a Uint8Array.\n   * @param params.iterations - The number of iterations to apply in the PBKDF2 algorithm.\n   * @param params.length - The desired length of the derived key in bits.\n   *\n   * @returns A Promise that resolves to the derived key as a Uint8Array.\n   */\n  public static async deriveKey({ hash, password, salt, iterations, length }:\n    Pbkdf2DeriveKeyParams\n  ): Promise<Uint8Array> {\n    // Import the password as a raw key for use with the Web Crypto API.\n    const webCryptoKey = await crypto.subtle.importKey(\n      'raw',\n      password,\n      { name: 'PBKDF2' },\n      false,\n      ['deriveBits']\n    );\n\n    const derivedKeyBuffer = await crypto.subtle.deriveBits(\n      { name: 'PBKDF2', hash, salt, iterations },\n      webCryptoKey,\n      length\n    );\n\n    // Convert from ArrayBuffer to Uint8Array.\n    const derivedKey = new Uint8Array(derivedKeyBuffer);\n\n    return derivedKey;\n  }\n}", "import { Convert } from '@web5/common';\nimport { x25519 } from '@noble/curves/ed25519';\n\nimport type { Jwk } from '../jose/jwk.js';\nimport type { ComputePublicKeyParams, GetPublicKeyParams } from '../types/params-direct.js';\n\nimport { computeJwkThumbprint, isOkpPrivateJwk, isOkpPublicJwk } from '../jose/jwk.js';\n\n/**\n * The `X25519` class provides a comprehensive suite of utilities for working with the X25519\n * elliptic curve, widely used for key agreement protocols and cryptographic applications. It\n * provides methods for key generation, conversion, and Elliptic Curve Diffie-Hellman (ECDH)\n * key agreement,  all aligned with standard cryptographic practices.\n *\n * The class supports conversions between raw byte formats and JSON Web Key (JWK) formats,\n * making it versatile for various cryptographic tasks. It adheres to RFC6090 for ECDH, ensuring\n * secure and effective handling of keys and cryptographic operations.\n *\n * Key Features:\n * - Key Generation: Generate X25519 private keys in JWK format.\n * - Key Conversion: Transform keys between raw byte arrays and JWK formats.\n * - Public Key Derivation: Derive public keys from private keys.\n * - ECDH Shared Secret Computation: Securely derive shared secrets using private and public keys.\n *\n * The methods in this class are asynchronous, returning Promises to accommodate various\n * JavaScript environments.\n *\n * @example\n * ```ts\n * // Key Generation\n * const privateKey = await X25519.generateKey();\n *\n * // Public Key Derivation\n * const publicKey = await X25519.computePublicKey({ key: privateKey });\n * console.log(publicKey === await X25519.getPublicKey({ key: privateKey })); // Output: true\n *\n * // ECDH Shared Secret Computation\n * const sharedSecret = await X25519.sharedSecret({\n *   privateKeyA: privateKey,\n *   publicKeyB: anotherPublicKey\n * });\n *\n * // Key Conversion\n * const publicKeyBytes = await X25519.publicKeyToBytes({ publicKey });\n * const privateKeyBytes = await X25519.privateKeyToBytes({ privateKey });\n * ```\n */\nexport class X25519 {\n  /**\n   * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method accepts a private key as a byte array (Uint8Array) for the X25519 elliptic curve\n   * and transforms it into a JWK object. The process involves first deriving the public key from\n   * the private key, then encoding both the private and public keys into base64url format.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'OKP' for Octet Key Pair.\n   * - `crv`: Curve Name, set to 'X25519'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The derived public key, base64url-encoded.\n   *\n   * This method is useful for converting raw public keys into a standardized\n   * JSON format, facilitating their use in cryptographic operations and making\n   * them easy to share and store.\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // Replace with actual private key bytes\n   * const privateKey = await X25519.bytesToPrivateKey({ privateKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKeyBytes - The raw private key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the private key in JWK format.\n   */\n  public static async bytesToPrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Derive the public key from the private key.\n    const publicKeyBytes  = x25519.getPublicKey(privateKeyBytes);\n\n    // Construct the private key in JWK format.\n    const privateKey: Jwk = {\n      kty : 'OKP',\n      crv : 'X25519',\n      d   : Convert.uint8Array(privateKeyBytes).toBase64Url(),\n      x   : Convert.uint8Array(publicKeyBytes).toBase64Url(),\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Converts a raw public key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method accepts a public key as a byte array (Uint8Array) for the X25519 elliptic curve\n   * and transforms it into a JWK object. The conversion process involves encoding the public\n   * key bytes into base64url format.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'OKP' for Octet Key Pair.\n   * - `crv`: Curve Name, set to 'X25519'.\n   * - `x`: The public key, base64url-encoded.\n   *\n   * This method is useful for converting raw public keys into a standardized\n   * JSON format, facilitating their use in cryptographic operations and making\n   * them easy to share and store.\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // Replace with actual public key bytes\n   * const publicKey = await X25519.bytesToPublicKey({ publicKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKeyBytes - The raw public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async bytesToPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'OKP',\n      crv : 'X25519',\n      x   : Convert.uint8Array(publicKeyBytes).toBase64Url(),\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Derives the public key in JWK format from a given X25519 private key.\n   *\n   * @remarks\n   * This method takes a private key in JWK format and derives its corresponding public key,\n   * also in JWK format.  The derivation process involves converting the private key to a\n   * raw byte array and then computing the corresponding public key on the Curve25519 curve.\n   * The public key is then encoded into base64url format to construct a JWK representation.\n   *\n   * The process ensures that the derived public key correctly corresponds to the given private key,\n   * adhering to the Curve25519 elliptic curve in Twisted Edwards form standards. This method is\n   * useful in cryptographic operations where a public key is needed for operations like signature\n   * verification, but only the private key is available.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing an X25519 private key\n   * const publicKey = await X25519.computePublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for the public key derivation.\n   * @param params.key - The private key in JWK format from which to derive the public key.\n   *\n   * @returns A Promise that resolves to the derived public key in JWK format.\n   */\n  public static async computePublicKey({ key }:\n    ComputePublicKeyParams\n  ): Promise<Jwk> {\n    // Convert the provided private key to a byte array.\n    const privateKeyBytes  = await X25519.privateKeyToBytes({ privateKey: key });\n\n    // Derive the public key from the private key.\n    const publicKeyBytes = x25519.getPublicKey(privateKeyBytes);\n\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'OKP',\n      crv : 'X25519',\n      x   : Convert.uint8Array(publicKeyBytes).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Generates an X25519 private key in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method creates a new private key suitable for use with the X25519 elliptic curve.\n   * The key generation process involves using cryptographically secure random number generation\n   * to ensure the uniqueness and security of the key. The resulting private key adheres to the\n   * JWK format making it compatible with common cryptographic standards and easy to use in various\n   * cryptographic processes.\n   *\n   * The generated private key in JWK format includes the following components:\n   * - `kty`: Key Type, set to 'OKP' for Octet Key Pair.\n   * - `crv`: Curve Name, set to 'X25519'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The derived public key, base64url-encoded.\n   *\n   * The key is returned in a format suitable for direct use in key agreement operations.\n   *\n   * @example\n   * ```ts\n   * const privateKey = await X25519.generateKey();\n   * ```\n   *\n   * @returns A Promise that resolves to the generated private key in JWK format.\n   */\n  public static async generateKey(): Promise<Jwk> {\n    // Generate a random private key.\n    const privateKeyBytes = x25519.utils.randomPrivateKey();\n\n    // Convert private key from bytes to JWK format.\n    const privateKey = await X25519.bytesToPrivateKey({ privateKeyBytes });\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Retrieves the public key properties from a given private key in JWK format.\n   *\n   * @remarks\n   * This method extracts the public key portion from an X25519 private key in JWK format. It does\n   * so by removing the private key property 'd' and making a shallow copy, effectively yielding the\n   * public key. The method sets the 'kid' (key ID) property using the JWK thumbprint if it is not\n   * already defined. This approach is used under the assumption that a private key in JWK format\n   * always contains the corresponding public key properties.\n   *\n   * Note: This method offers a significant performance advantage, being about 500 times faster\n   * than `computePublicKey()`. However, it does not mathematically validate the private key, nor\n   * does it derive the public key from the private key. It simply extracts existing public key\n   * properties from the private key object. This makes it suitable for scenarios where speed is\n   * critical and the private key's integrity is already assured.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing an X25519 private key\n   * const publicKey = await X25519.getPublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key properties.\n   * @param params.key - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n  // Verify the provided JWK represents an octet key pair (OKP) X25519 private key.\n    if (!(isOkpPrivateJwk(key) && key.crv === 'X25519')) {\n      throw new Error(`X25519: The provided key is not an X25519 private JWK.`);\n    }\n\n    // Remove the private key property ('d') and make a shallow copy of the provided key.\n    let { d, ...publicKey } = key;\n\n    // If the key ID is undefined, set it to the JWK thumbprint.\n    publicKey.kid ??= await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts a private key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method accepts a private key in JWK format and extracts its raw byte representation.\n   *\n   * This method accepts a public key in JWK format and converts it into its raw binary\n   * form. The conversion process involves decoding the 'd' parameter of the JWK\n   * from base64url format into a byte array.\n   *\n   * This conversion is essential for operations that require the private key in its raw\n   * binary form, such as certain low-level cryptographic operations or when interfacing\n   * with systems and libraries that expect keys in a byte array format.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // An X25519 private key in JWK format\n   * const privateKeyBytes = await X25519.privateKeyToBytes({ privateKey });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKey - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the private key as a Uint8Array.\n   */\n  public static async privateKeyToBytes({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid OKP private key.\n    if (!isOkpPrivateJwk(privateKey)) {\n      throw new Error(`X25519: The provided key is not a valid OKP private key.`);\n    }\n\n    // Decode the provided private key to bytes.\n    const privateKeyBytes = Convert.base64Url(privateKey.d).toUint8Array();\n\n    return privateKeyBytes;\n  }\n\n  /**\n   * Converts a public key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method accepts a public key in JWK format and converts it into its raw binary form.\n   * The conversion process involves decoding the 'x' parameter of the JWK (which represent the\n   * x coordinate of the elliptic curve point) from base64url format into a byte array.\n   *\n   * This conversion is essential for operations that require the public key in its raw\n   * binary form, such as certain low-level cryptographic operations or when interfacing\n   * with systems and libraries that expect keys in a byte array format.\n   *\n   * @example\n   * ```ts\n   * const publicKey = { ... }; // An X25519 public key in JWK format\n   * const publicKeyBytes = await X25519.publicKeyToBytes({ publicKey });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKey - The public key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key as a Uint8Array.\n   */\n  public static async publicKeyToBytes({ publicKey }: {\n    publicKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid OKP public key.\n    if (!isOkpPublicJwk(publicKey)) {\n      throw new Error(`X25519: The provided key is not a valid OKP public key.`);\n    }\n\n    // Decode the provided public key to bytes.\n    const publicKeyBytes = Convert.base64Url(publicKey.x).toUint8Array();\n\n    return publicKeyBytes;\n  }\n\n  /**\n   * Computes an RFC6090-compliant Elliptic Curve Diffie-Hellman (ECDH) shared secret\n   * using secp256k1 private and public keys in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method facilitates the ECDH key agreement protocol, which is a method of securely\n   * deriving a shared secret between two parties based on their private and public keys.\n   * It takes the private key of one party (privateKeyA) and the public key of another\n   * party (publicKeyB) to compute a shared secret. The shared secret is derived from the\n   * x-coordinate of the elliptic curve point resulting from the multiplication of the\n   * public key with the private key.\n   *\n   * Note: When performing Elliptic Curve Diffie-Hellman (ECDH) key agreement,\n   * the resulting shared secret is a point on the elliptic curve, which\n   * consists of an x-coordinate and a y-coordinate. With a 256-bit curve like\n   * secp256k1, each of these coordinates is 32 bytes (256 bits) long. However,\n   * in the ECDH process, it's standard practice to use only the x-coordinate\n   * of the shared secret point as the resulting shared key. This is because\n   * the y-coordinate does not add to the entropy of the key, and both parties\n   * can independently compute the x-coordinate.  Consquently, this implementation\n   * omits the y-coordinate for simplicity and standard compliance.\n   *\n   * @example\n   * ```ts\n   * const privateKeyA = { ... }; // A Jwk object for party A\n   * const publicKeyB = { ... }; // A PublicKeyJwk object for party B\n   * const sharedSecret = await Secp256k1.sharedSecret({\n   *   privateKeyA,\n   *   publicKeyB\n   * });\n   * ```\n   *\n   * @param params - The parameters for the shared secret computation.\n   * @param params.privateKeyA - The private key in JWK format of one party.\n   * @param params.publicKeyB - The public key in JWK format of the other party.\n   *\n   * @returns A Promise that resolves to the computed shared secret as a Uint8Array.\n   */\n  public static async sharedSecret({ privateKeyA, publicKeyB }: {\n    privateKeyA: Jwk;\n    publicKeyB: Jwk;\n  }): Promise<Uint8Array> {\n    // Ensure that keys from the same key pair are not specified.\n    if ('x' in privateKeyA && 'x' in publicKeyB && privateKeyA.x === publicKeyB.x) {\n      throw new Error(`X25519: ECDH shared secret cannot be computed from a single key pair's public and private keys.`);\n    }\n\n    // Convert the provided private and public keys to bytes.\n    const privateKeyABytes = await X25519.privateKeyToBytes({ privateKey: privateKeyA });\n    const publicKeyBBytes = await X25519.publicKeyToBytes({ publicKey: publicKeyB });\n\n    // Compute the shared secret between the public and private keys.\n    const sharedSecret = x25519.getSharedSecret(privateKeyABytes, publicKeyBBytes);\n\n    return sharedSecret;\n  }\n}", "import { exists as aexists, bytes as abytes, output as aoutput } from './_assert.js';\nimport { Input, toBytes, Hash } from './utils.js';\n\n// Poly1305 is a fast and parallel secret-key message-authentication code.\n// https://cr.yp.to/mac.html, https://cr.yp.to/mac/poly1305-20050329.pdf\n// https://datatracker.ietf.org/doc/html/rfc8439\n\n// Based on Public Domain poly1305-donna https://github.com/floodyberry/poly1305-donna\nconst u8to16 = (a: Uint8Array, i: number) => (a[i++] & 0xff) | ((a[i++] & 0xff) << 8);\nclass Poly1305 implements Hash<Poly1305> {\n  readonly blockLen = 16;\n  readonly outputLen = 16;\n  private buffer = new Uint8Array(16);\n  private r = new Uint16Array(10);\n  private h = new Uint16Array(10);\n  private pad = new Uint16Array(8);\n  private pos = 0;\n  protected finished = false;\n\n  constructor(key: Input) {\n    key = toBytes(key);\n    abytes(key, 32);\n    const t0 = u8to16(key, 0);\n    const t1 = u8to16(key, 2);\n    const t2 = u8to16(key, 4);\n    const t3 = u8to16(key, 6);\n    const t4 = u8to16(key, 8);\n    const t5 = u8to16(key, 10);\n    const t6 = u8to16(key, 12);\n    const t7 = u8to16(key, 14);\n\n    // https://github.com/floodyberry/poly1305-donna/blob/e6ad6e091d30d7f4ec2d4f978be1fcfcbce72781/poly1305-donna-16.h#L47\n    this.r[0] = t0 & 0x1fff;\n    this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n    this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n    this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n    this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n    this.r[5] = (t4 >>> 1) & 0x1ffe;\n    this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n    this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n    this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n    this.r[9] = (t7 >>> 5) & 0x007f;\n    for (let i = 0; i < 8; i++) this.pad[i] = u8to16(key, 16 + 2 * i);\n  }\n\n  private process(data: Uint8Array, offset: number, isLast = false) {\n    const hibit = isLast ? 0 : 1 << 11;\n    const { h, r } = this;\n    const r0 = r[0];\n    const r1 = r[1];\n    const r2 = r[2];\n    const r3 = r[3];\n    const r4 = r[4];\n    const r5 = r[5];\n    const r6 = r[6];\n    const r7 = r[7];\n    const r8 = r[8];\n    const r9 = r[9];\n\n    const t0 = u8to16(data, offset + 0);\n    const t1 = u8to16(data, offset + 2);\n    const t2 = u8to16(data, offset + 4);\n    const t3 = u8to16(data, offset + 6);\n    const t4 = u8to16(data, offset + 8);\n    const t5 = u8to16(data, offset + 10);\n    const t6 = u8to16(data, offset + 12);\n    const t7 = u8to16(data, offset + 14);\n\n    let h0 = h[0] + (t0 & 0x1fff);\n    let h1 = h[1] + (((t0 >>> 13) | (t1 << 3)) & 0x1fff);\n    let h2 = h[2] + (((t1 >>> 10) | (t2 << 6)) & 0x1fff);\n    let h3 = h[3] + (((t2 >>> 7) | (t3 << 9)) & 0x1fff);\n    let h4 = h[4] + (((t3 >>> 4) | (t4 << 12)) & 0x1fff);\n    let h5 = h[5] + ((t4 >>> 1) & 0x1fff);\n    let h6 = h[6] + (((t4 >>> 14) | (t5 << 2)) & 0x1fff);\n    let h7 = h[7] + (((t5 >>> 11) | (t6 << 5)) & 0x1fff);\n    let h8 = h[8] + (((t6 >>> 8) | (t7 << 8)) & 0x1fff);\n    let h9 = h[9] + ((t7 >>> 5) | hibit);\n\n    let c = 0;\n\n    let d0 = c + h0 * r0 + h1 * (5 * r9) + h2 * (5 * r8) + h3 * (5 * r7) + h4 * (5 * r6);\n    c = d0 >>> 13;\n    d0 &= 0x1fff;\n    d0 += h5 * (5 * r5) + h6 * (5 * r4) + h7 * (5 * r3) + h8 * (5 * r2) + h9 * (5 * r1);\n    c += d0 >>> 13;\n    d0 &= 0x1fff;\n\n    let d1 = c + h0 * r1 + h1 * r0 + h2 * (5 * r9) + h3 * (5 * r8) + h4 * (5 * r7);\n    c = d1 >>> 13;\n    d1 &= 0x1fff;\n    d1 += h5 * (5 * r6) + h6 * (5 * r5) + h7 * (5 * r4) + h8 * (5 * r3) + h9 * (5 * r2);\n    c += d1 >>> 13;\n    d1 &= 0x1fff;\n\n    let d2 = c + h0 * r2 + h1 * r1 + h2 * r0 + h3 * (5 * r9) + h4 * (5 * r8);\n    c = d2 >>> 13;\n    d2 &= 0x1fff;\n    d2 += h5 * (5 * r7) + h6 * (5 * r6) + h7 * (5 * r5) + h8 * (5 * r4) + h9 * (5 * r3);\n    c += d2 >>> 13;\n    d2 &= 0x1fff;\n\n    let d3 = c + h0 * r3 + h1 * r2 + h2 * r1 + h3 * r0 + h4 * (5 * r9);\n    c = d3 >>> 13;\n    d3 &= 0x1fff;\n    d3 += h5 * (5 * r8) + h6 * (5 * r7) + h7 * (5 * r6) + h8 * (5 * r5) + h9 * (5 * r4);\n    c += d3 >>> 13;\n    d3 &= 0x1fff;\n\n    let d4 = c + h0 * r4 + h1 * r3 + h2 * r2 + h3 * r1 + h4 * r0;\n    c = d4 >>> 13;\n    d4 &= 0x1fff;\n    d4 += h5 * (5 * r9) + h6 * (5 * r8) + h7 * (5 * r7) + h8 * (5 * r6) + h9 * (5 * r5);\n    c += d4 >>> 13;\n    d4 &= 0x1fff;\n\n    let d5 = c + h0 * r5 + h1 * r4 + h2 * r3 + h3 * r2 + h4 * r1;\n    c = d5 >>> 13;\n    d5 &= 0x1fff;\n    d5 += h5 * r0 + h6 * (5 * r9) + h7 * (5 * r8) + h8 * (5 * r7) + h9 * (5 * r6);\n    c += d5 >>> 13;\n    d5 &= 0x1fff;\n\n    let d6 = c + h0 * r6 + h1 * r5 + h2 * r4 + h3 * r3 + h4 * r2;\n    c = d6 >>> 13;\n    d6 &= 0x1fff;\n    d6 += h5 * r1 + h6 * r0 + h7 * (5 * r9) + h8 * (5 * r8) + h9 * (5 * r7);\n    c += d6 >>> 13;\n    d6 &= 0x1fff;\n\n    let d7 = c + h0 * r7 + h1 * r6 + h2 * r5 + h3 * r4 + h4 * r3;\n    c = d7 >>> 13;\n    d7 &= 0x1fff;\n    d7 += h5 * r2 + h6 * r1 + h7 * r0 + h8 * (5 * r9) + h9 * (5 * r8);\n    c += d7 >>> 13;\n    d7 &= 0x1fff;\n\n    let d8 = c + h0 * r8 + h1 * r7 + h2 * r6 + h3 * r5 + h4 * r4;\n    c = d8 >>> 13;\n    d8 &= 0x1fff;\n    d8 += h5 * r3 + h6 * r2 + h7 * r1 + h8 * r0 + h9 * (5 * r9);\n    c += d8 >>> 13;\n    d8 &= 0x1fff;\n\n    let d9 = c + h0 * r9 + h1 * r8 + h2 * r7 + h3 * r6 + h4 * r5;\n    c = d9 >>> 13;\n    d9 &= 0x1fff;\n    d9 += h5 * r4 + h6 * r3 + h7 * r2 + h8 * r1 + h9 * r0;\n    c += d9 >>> 13;\n    d9 &= 0x1fff;\n\n    c = ((c << 2) + c) | 0;\n    c = (c + d0) | 0;\n    d0 = c & 0x1fff;\n    c = c >>> 13;\n    d1 += c;\n\n    h[0] = d0;\n    h[1] = d1;\n    h[2] = d2;\n    h[3] = d3;\n    h[4] = d4;\n    h[5] = d5;\n    h[6] = d6;\n    h[7] = d7;\n    h[8] = d8;\n    h[9] = d9;\n  }\n\n  private finalize() {\n    const { h, pad } = this;\n    const g = new Uint16Array(10);\n    let c = h[1] >>> 13;\n    h[1] &= 0x1fff;\n    for (let i = 2; i < 10; i++) {\n      h[i] += c;\n      c = h[i] >>> 13;\n      h[i] &= 0x1fff;\n    }\n    h[0] += c * 5;\n    c = h[0] >>> 13;\n    h[0] &= 0x1fff;\n    h[1] += c;\n    c = h[1] >>> 13;\n    h[1] &= 0x1fff;\n    h[2] += c;\n\n    g[0] = h[0] + 5;\n    c = g[0] >>> 13;\n    g[0] &= 0x1fff;\n    for (let i = 1; i < 10; i++) {\n      g[i] = h[i] + c;\n      c = g[i] >>> 13;\n      g[i] &= 0x1fff;\n    }\n    g[9] -= 1 << 13;\n\n    let mask = (c ^ 1) - 1;\n    for (let i = 0; i < 10; i++) g[i] &= mask;\n    mask = ~mask;\n    for (let i = 0; i < 10; i++) h[i] = (h[i] & mask) | g[i];\n    h[0] = (h[0] | (h[1] << 13)) & 0xffff;\n    h[1] = ((h[1] >>> 3) | (h[2] << 10)) & 0xffff;\n    h[2] = ((h[2] >>> 6) | (h[3] << 7)) & 0xffff;\n    h[3] = ((h[3] >>> 9) | (h[4] << 4)) & 0xffff;\n    h[4] = ((h[4] >>> 12) | (h[5] << 1) | (h[6] << 14)) & 0xffff;\n    h[5] = ((h[6] >>> 2) | (h[7] << 11)) & 0xffff;\n    h[6] = ((h[7] >>> 5) | (h[8] << 8)) & 0xffff;\n    h[7] = ((h[8] >>> 8) | (h[9] << 5)) & 0xffff;\n\n    let f = h[0] + pad[0];\n    h[0] = f & 0xffff;\n    for (let i = 1; i < 8; i++) {\n      f = (((h[i] + pad[i]) | 0) + (f >>> 16)) | 0;\n      h[i] = f & 0xffff;\n    }\n  }\n  update(data: Input): this {\n    aexists(this);\n    const { buffer, blockLen } = this;\n    data = toBytes(data);\n    const len = data.length;\n\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      // Fast path: we have at least one block in input\n      if (take === blockLen) {\n        for (; blockLen <= len - pos; pos += blockLen) this.process(data, pos);\n        continue;\n      }\n      buffer.set(data.subarray(pos, pos + take), this.pos);\n      this.pos += take;\n      pos += take;\n      if (this.pos === blockLen) {\n        this.process(buffer, 0, false);\n        this.pos = 0;\n      }\n    }\n    return this;\n  }\n  destroy() {\n    this.h.fill(0);\n    this.r.fill(0);\n    this.buffer.fill(0);\n    this.pad.fill(0);\n  }\n  digestInto(out: Uint8Array) {\n    aexists(this);\n    aoutput(out, this);\n    this.finished = true;\n    const { buffer, h } = this;\n    let { pos } = this;\n    if (pos) {\n      buffer[pos++] = 1;\n      // buffer.subarray(pos).fill(0);\n      for (; pos < 16; pos++) buffer[pos] = 0;\n      this.process(buffer, 0, true);\n    }\n    this.finalize();\n    let opos = 0;\n    for (let i = 0; i < 8; i++) {\n      out[opos++] = h[i] >>> 0;\n      out[opos++] = h[i] >>> 8;\n    }\n    return out;\n  }\n  digest(): Uint8Array {\n    const { buffer, outputLen } = this;\n    this.digestInto(buffer);\n    const res = buffer.slice(0, outputLen);\n    this.destroy();\n    return res;\n  }\n}\n\nexport type CHash = ReturnType<typeof wrapConstructorWithKey>;\nexport function wrapConstructorWithKey<H extends Hash<H>>(hashCons: (key: Input) => Hash<H>) {\n  const hashC = (msg: Input, key: Input): Uint8Array => hashCons(key).update(toBytes(msg)).digest();\n  const tmp = hashCons(new Uint8Array(32));\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (key: Input) => hashCons(key);\n  return hashC;\n}\n\nexport const poly1305 = wrapConstructorWithKey((key) => new Poly1305(key));\n", "// Basic utils for ARX (add-rotate-xor) salsa and chacha ciphers.\nimport { number as anumber, bytes as abytes, bool as abool } from './_assert.js';\nimport { XorStream, checkOpts, u32 } from './utils.js';\n\n/*\nRFC8439 requires multi-step cipher stream, where\nauthKey starts with counter: 0, actual msg with counter: 1.\n\nFor this, we need a way to re-use nonce / counter:\n\n    const counter = new Uint8Array(4);\n    chacha(..., counter, ...); // counter is now 1\n    chacha(..., counter, ...); // counter is now 2\n\nThis is complicated:\n\n- 32-bit counters are enough, no need for 64-bit: max ArrayBuffer size in JS is 4GB\n- Original papers don't allow mutating counters\n- Counter overflow is undefined [^1]\n- Idea A: allow providing (nonce | counter) instead of just nonce, re-use it\n- Caveat: Cannot be re-used through all cases:\n- * chacha has (counter | nonce)\n- * xchacha has (nonce16 | counter | nonce16)\n- Idea B: separate nonce / counter and provide separate API for counter re-use\n- Caveat: there are different counter sizes depending on an algorithm.\n- salsa & chacha also differ in structures of key & sigma:\n  salsa20:      s[0] | k(4) | s[1] | nonce(2) | ctr(2) | s[2] | k(4) | s[3]\n  chacha:       s(4) | k(8) | ctr(1) | nonce(3)\n  chacha20orig: s(4) | k(8) | ctr(2) | nonce(2)\n- Idea C: helper method such as `setSalsaState(key, nonce, sigma, data)`\n- Caveat: we can't re-use counter array\n\nxchacha [^2] uses the subkey and remaining 8 byte nonce with ChaCha20 as normal\n(prefixed by 4 NUL bytes, since [RFC8439] specifies a 12-byte nonce).\n\n[^1]: https://mailarchive.ietf.org/arch/msg/cfrg/gsOnTJzcbgG6OqD8Sc0GO5aR_tU/\n[^2]: https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha#appendix-A.2\n*/\n\n// We can't make top-level var depend on utils.utf8ToBytes\n// because it's not present in all envs. Creating a similar fn here\nconst _utf8ToBytes = (str: string) => Uint8Array.from(str.split('').map((c) => c.charCodeAt(0)));\nconst sigma16 = _utf8ToBytes('expand 16-byte k');\nconst sigma32 = _utf8ToBytes('expand 32-byte k');\nconst sigma16_32 = u32(sigma16);\nconst sigma32_32 = u32(sigma32);\nexport const sigma = sigma32_32.slice();\n\nexport function rotl(a: number, b: number): number {\n  return (a << b) | (a >>> (32 - b));\n}\n\nexport type CipherCoreFn = (\n  sigma: Uint32Array,\n  key: Uint32Array,\n  nonce: Uint32Array,\n  output: Uint32Array,\n  counter: number,\n  rounds?: number\n) => void;\n\nexport type ExtendNonceFn = (\n  sigma: Uint32Array,\n  key: Uint32Array,\n  input: Uint32Array,\n  output: Uint32Array\n) => void;\n\nexport type CipherOpts = {\n  allowShortKeys?: boolean; // Original salsa / chacha allow 16-byte keys\n  extendNonceFn?: ExtendNonceFn;\n  counterLength?: number;\n  counterRight?: boolean; // right: nonce|counter; left: counter|nonce\n  rounds?: number;\n};\n\n// Is byte array aligned to 4 byte offset (u32)?\nfunction isAligned32(b: Uint8Array) {\n  return b.byteOffset % 4 === 0;\n}\n\n// Salsa and Chacha block length is always 512-bit\nconst BLOCK_LEN = 64;\nconst BLOCK_LEN32 = 16;\n\n// new Uint32Array([2**32])   // => Uint32Array(1) [ 0 ]\n// new Uint32Array([2**32-1]) // => Uint32Array(1) [ 4294967295 ]\nconst MAX_COUNTER = 2 ** 32 - 1;\n\nconst U32_EMPTY = new Uint32Array();\nfunction runCipher(\n  core: CipherCoreFn,\n  sigma: Uint32Array,\n  key: Uint32Array,\n  nonce: Uint32Array,\n  data: Uint8Array,\n  output: Uint8Array,\n  counter: number,\n  rounds: number\n): void {\n  const len = data.length;\n  const block = new Uint8Array(BLOCK_LEN);\n  const b32 = u32(block);\n  // Make sure that buffers aligned to 4 bytes\n  const isAligned = isAligned32(data) && isAligned32(output);\n  const d32 = isAligned ? u32(data) : U32_EMPTY;\n  const o32 = isAligned ? u32(output) : U32_EMPTY;\n  for (let pos = 0; pos < len; counter++) {\n    core(sigma, key, nonce, b32, counter, rounds);\n    if (counter >= MAX_COUNTER) throw new Error('arx: counter overflow');\n    const take = Math.min(BLOCK_LEN, len - pos);\n    // aligned to 4 bytes\n    if (isAligned && take === BLOCK_LEN) {\n      const pos32 = pos / 4;\n      if (pos % 4 !== 0) throw new Error('arx: invalid block position');\n      for (let j = 0, posj: number; j < BLOCK_LEN32; j++) {\n        posj = pos32 + j;\n        o32[posj] = d32[posj] ^ b32[j];\n      }\n      pos += BLOCK_LEN;\n      continue;\n    }\n    for (let j = 0, posj; j < take; j++) {\n      posj = pos + j;\n      output[posj] = data[posj] ^ block[j];\n    }\n    pos += take;\n  }\n}\n\nexport function createCipher(core: CipherCoreFn, opts: CipherOpts): XorStream {\n  const { allowShortKeys, extendNonceFn, counterLength, counterRight, rounds } = checkOpts(\n    { allowShortKeys: false, counterLength: 8, counterRight: false, rounds: 20 },\n    opts\n  );\n  if (typeof core !== 'function') throw new Error('core must be a function');\n  anumber(counterLength);\n  anumber(rounds);\n  abool(counterRight);\n  abool(allowShortKeys);\n  return (\n    key: Uint8Array,\n    nonce: Uint8Array,\n    data: Uint8Array,\n    output?: Uint8Array,\n    counter = 0\n  ): Uint8Array => {\n    abytes(key);\n    abytes(nonce);\n    abytes(data);\n    const len = data.length;\n    if (!output) output = new Uint8Array(len);\n    abytes(output);\n    anumber(counter);\n    if (counter < 0 || counter >= MAX_COUNTER) throw new Error('arx: counter overflow');\n    if (output.length < len)\n      throw new Error(`arx: output (${output.length}) is shorter than data (${len})`);\n    const toClean = [];\n\n    // Key & sigma\n    // key=16 -> sigma16, k=key|key\n    // key=32 -> sigma32, k=key\n    let l = key.length,\n      k: Uint8Array,\n      sigma: Uint32Array;\n    if (l === 32) {\n      k = key.slice();\n      toClean.push(k);\n      sigma = sigma32_32;\n    } else if (l === 16 && allowShortKeys) {\n      k = new Uint8Array(32);\n      k.set(key);\n      k.set(key, 16);\n      sigma = sigma16_32;\n      toClean.push(k);\n    } else {\n      throw new Error(`arx: invalid 32-byte key, got length=${l}`);\n    }\n\n    // Nonce\n    // salsa20:      8   (8-byte counter)\n    // chacha20orig: 8   (8-byte counter)\n    // chacha20:     12  (4-byte counter)\n    // xsalsa20:     24  (16 -> hsalsa,  8 -> old nonce)\n    // xchacha20:    24  (16 -> hchacha, 8 -> old nonce)\n    // Align nonce to 4 bytes\n    if (!isAligned32(nonce)) {\n      nonce = nonce.slice();\n      toClean.push(nonce);\n    }\n\n    const k32 = u32(k);\n    // hsalsa & hchacha: handle extended nonce\n    if (extendNonceFn) {\n      if (nonce.length !== 24) throw new Error(`arx: extended nonce must be 24 bytes`);\n      extendNonceFn(sigma, k32, u32(nonce.subarray(0, 16)), k32);\n      nonce = nonce.subarray(16);\n    }\n\n    // Handle nonce counter\n    const nonceNcLen = 16 - counterLength;\n    if (nonceNcLen !== nonce.length)\n      throw new Error(`arx: nonce must be ${nonceNcLen} or 16 bytes`);\n\n    // Pad counter when nonce is 64 bit\n    if (nonceNcLen !== 12) {\n      const nc = new Uint8Array(12);\n      nc.set(nonce, counterRight ? 0 : 12 - nonce.length);\n      nonce = nc;\n      toClean.push(nonce);\n    }\n    const n32 = u32(nonce);\n    runCipher(core, sigma, k32, n32, data, output, counter, rounds);\n    while (toClean.length > 0) toClean.pop()!.fill(0);\n    return output;\n  };\n}\n", "// prettier-ignore\nimport {\n  wrapCipher, CipherWithOutput, XorStream, createView, equalBytes, setBigUint64,\n} from './utils.js';\nimport { poly1305 } from './_poly1305.js';\nimport { createCipher, rotl } from './_arx.js';\nimport { bytes as abytes } from './_assert.js';\n\n// ChaCha20 stream cipher was released in 2008. ChaCha aims to increase\n// the diffusion per round, but had slightly less cryptanalysis.\n// https://cr.yp.to/chacha.html, http://cr.yp.to/chacha/chacha-20080128.pdf\n\n/**\n * ChaCha core function.\n */\n// prettier-ignore\nfunction chachaCore(\n  s: Uint32Array, k: Uint32Array, n: Uint32Array, out: Uint32Array, cnt: number, rounds = 20\n): void {\n  let y00 = s[0], y01 = s[1], y02 = s[2], y03 = s[3], // \"expa\"   \"nd 3\"  \"2-by\"  \"te k\"\n      y04 = k[0], y05 = k[1], y06 = k[2], y07 = k[3], // Key      Key     Key     Key\n      y08 = k[4], y09 = k[5], y10 = k[6], y11 = k[7], // Key      Key     Key     Key\n      y12 = cnt,  y13 = n[0], y14 = n[1], y15 = n[2]; // Counter  Counter\tNonce   Nonce\n  // Save state to temporary variables\n  let x00 = y00, x01 = y01, x02 = y02, x03 = y03,\n      x04 = y04, x05 = y05, x06 = y06, x07 = y07,\n      x08 = y08, x09 = y09, x10 = y10, x11 = y11,\n      x12 = y12, x13 = y13, x14 = y14, x15 = y15;\n  for (let r = 0; r < rounds; r += 2) {\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 16);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 12);\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 8);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 7);\n\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 16);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 12);\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 8);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 7);\n\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^ x02, 16);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 12);\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^x02, 8);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 7);\n\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 16);\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 12);\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 8)\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 7);\n\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 16);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 12);\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 8);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 7);\n\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 16);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 12);\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 8);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 7);\n\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 16);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 12);\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 8);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 7);\n\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 16)\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 12);\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 8);\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 7);\n  }\n  // Write output\n  let oi = 0;\n  out[oi++] = (y00 + x00) | 0; out[oi++] = (y01 + x01) | 0;\n  out[oi++] = (y02 + x02) | 0; out[oi++] = (y03 + x03) | 0;\n  out[oi++] = (y04 + x04) | 0; out[oi++] = (y05 + x05) | 0;\n  out[oi++] = (y06 + x06) | 0; out[oi++] = (y07 + x07) | 0;\n  out[oi++] = (y08 + x08) | 0; out[oi++] = (y09 + x09) | 0;\n  out[oi++] = (y10 + x10) | 0; out[oi++] = (y11 + x11) | 0;\n  out[oi++] = (y12 + x12) | 0; out[oi++] = (y13 + x13) | 0;\n  out[oi++] = (y14 + x14) | 0; out[oi++] = (y15 + x15) | 0;\n}\n/**\n * hchacha helper method, used primarily in xchacha, to hash\n * key and nonce into key' and nonce'.\n * Same as chachaCore, but there doesn't seem to be a way to move the block\n * out without 25% performance hit.\n */\n// prettier-ignore\nexport function hchacha(\n  s: Uint32Array, k: Uint32Array, i: Uint32Array, o32: Uint32Array\n) {\n  let x00 = s[0], x01 = s[1], x02 = s[2], x03 = s[3],\n      x04 = k[0], x05 = k[1], x06 = k[2], x07 = k[3],\n      x08 = k[4], x09 = k[5], x10 = k[6], x11 = k[7],\n      x12 = i[0], x13 = i[1], x14 = i[2], x15 = i[3];\n  for (let r = 0; r < 20; r += 2) {\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 16);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 12);\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 8);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 7);\n\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 16);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 12);\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 8);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 7);\n\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^ x02, 16);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 12);\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^ x02, 8);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 7);\n\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 16);\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 12);\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 8)\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 7);\n\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 16);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 12);\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 8);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 7);\n\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 16);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 12);\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 8);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 7);\n\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 16);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 12);\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 8);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 7);\n\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 16)\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 12);\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 8);\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 7);\n  }\n  let oi = 0;\n  o32[oi++] = x00; o32[oi++] = x01;\n  o32[oi++] = x02; o32[oi++] = x03;\n  o32[oi++] = x12; o32[oi++] = x13;\n  o32[oi++] = x14; o32[oi++] = x15;\n}\n/**\n * Original, non-RFC chacha20 from DJB. 8-byte nonce, 8-byte counter.\n */\nexport const chacha20orig = /* @__PURE__ */ createCipher(chachaCore, {\n  counterRight: false,\n  counterLength: 8,\n  allowShortKeys: true,\n});\n/**\n * ChaCha stream cipher. Conforms to RFC 8439 (IETF, TLS). 12-byte nonce, 4-byte counter.\n * With 12-byte nonce, it's not safe to use fill it with random (CSPRNG), due to collision chance.\n */\nexport const chacha20 = /* @__PURE__ */ createCipher(chachaCore, {\n  counterRight: false,\n  counterLength: 4,\n  allowShortKeys: false,\n});\n\n/**\n * XChaCha eXtended-nonce ChaCha. 24-byte nonce.\n * With 24-byte nonce, it's safe to use fill it with random (CSPRNG).\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha\n */\nexport const xchacha20 = /* @__PURE__ */ createCipher(chachaCore, {\n  counterRight: false,\n  counterLength: 8,\n  extendNonceFn: hchacha,\n  allowShortKeys: false,\n});\n\n/**\n * Reduced 8-round chacha, described in original paper.\n */\nexport const chacha8 = /* @__PURE__ */ createCipher(chachaCore, {\n  counterRight: false,\n  counterLength: 4,\n  rounds: 8,\n});\n\n/**\n * Reduced 12-round chacha, described in original paper.\n */\nexport const chacha12 = /* @__PURE__ */ createCipher(chachaCore, {\n  counterRight: false,\n  counterLength: 4,\n  rounds: 12,\n});\n\nconst ZEROS16 = /* @__PURE__ */ new Uint8Array(16);\n// Pad to digest size with zeros\nconst updatePadded = (h: ReturnType<typeof poly1305.create>, msg: Uint8Array) => {\n  h.update(msg);\n  const left = msg.length % 16;\n  if (left) h.update(ZEROS16.subarray(left));\n};\n\nconst ZEROS32 = /* @__PURE__ */ new Uint8Array(32);\nfunction computeTag(\n  fn: XorStream,\n  key: Uint8Array,\n  nonce: Uint8Array,\n  data: Uint8Array,\n  AAD?: Uint8Array\n): Uint8Array {\n  const authKey = fn(key, nonce, ZEROS32);\n  const h = poly1305.create(authKey);\n  if (AAD) updatePadded(h, AAD);\n  updatePadded(h, data);\n  const num = new Uint8Array(16);\n  const view = createView(num);\n  setBigUint64(view, 0, BigInt(AAD ? AAD.length : 0), true);\n  setBigUint64(view, 8, BigInt(data.length), true);\n  h.update(num);\n  const res = h.digest();\n  authKey.fill(0);\n  return res;\n}\n\n/**\n * AEAD algorithm from RFC 8439.\n * Salsa20 and chacha (RFC 8439) use poly1305 differently.\n * We could have composed them similar to:\n * https://github.com/paulmillr/scure-base/blob/b266c73dde977b1dd7ef40ef7a23cc15aab526b3/index.ts#L250\n * But it's hard because of authKey:\n * In salsa20, authKey changes position in salsa stream.\n * In chacha, authKey can't be computed inside computeTag, it modifies the counter.\n */\nexport const _poly1305_aead =\n  (xorStream: XorStream) =>\n  (key: Uint8Array, nonce: Uint8Array, AAD?: Uint8Array): CipherWithOutput => {\n    const tagLength = 16;\n    abytes(key, 32);\n    abytes(nonce);\n    return {\n      encrypt: (plaintext: Uint8Array, output?: Uint8Array) => {\n        const plength = plaintext.length;\n        const clength = plength + tagLength;\n        if (output) {\n          abytes(output, clength);\n        } else {\n          output = new Uint8Array(clength);\n        }\n        xorStream(key, nonce, plaintext, output, 1);\n        const tag = computeTag(xorStream, key, nonce, output.subarray(0, -tagLength), AAD);\n        output.set(tag, plength); // append tag\n        return output;\n      },\n      decrypt: (ciphertext: Uint8Array, output?: Uint8Array) => {\n        const clength = ciphertext.length;\n        const plength = clength - tagLength;\n        if (clength < tagLength)\n          throw new Error(`encrypted data must be at least ${tagLength} bytes`);\n        if (output) {\n          abytes(output, plength);\n        } else {\n          output = new Uint8Array(plength);\n        }\n        const data = ciphertext.subarray(0, -tagLength);\n        const passedTag = ciphertext.subarray(-tagLength);\n        const tag = computeTag(xorStream, key, nonce, data, AAD);\n        if (!equalBytes(passedTag, tag)) throw new Error('invalid tag');\n        xorStream(key, nonce, data, output, 1);\n        return output;\n      },\n    };\n  };\n\n/**\n * ChaCha20-Poly1305 from RFC 8439.\n * With 12-byte nonce, it's not safe to use fill it with random (CSPRNG), due to collision chance.\n */\nexport const chacha20poly1305 = /* @__PURE__ */ wrapCipher(\n  { blockSize: 64, nonceLength: 12, tagLength: 16 },\n  _poly1305_aead(chacha20)\n);\n/**\n * XChaCha20-Poly1305 extended-nonce chacha.\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha\n * With 24-byte nonce, it's safe to use fill it with random (CSPRNG).\n */\nexport const xchacha20poly1305 = /* @__PURE__ */ wrapCipher(\n  { blockSize: 64, nonceLength: 24, tagLength: 16 },\n  _poly1305_aead(xchacha20)\n);\n", "import { Convert } from '@web5/common';\nimport { xchacha20 } from '@noble/ciphers/chacha';\nimport { getWebcryptoSubtle } from '@noble/ciphers/webcrypto';\n\nimport type { Jwk } from '../jose/jwk.js';\n\nimport { computeJwkThumbprint, isOctPrivateJwk } from '../jose/jwk.js';\n\n/**\n * The `XChaCha20` class provides a comprehensive suite of utilities for cryptographic operations\n * using the XChaCha20 symmetric encryption algorithm. This class includes methods for key\n * generation, encryption, decryption, and conversions between raw byte arrays and JSON Web Key\n * (JWK) formats. XChaCha20 is an extended nonce variant of ChaCha20, a stream cipher designed for\n * high-speed encryption with substantial security margins.\n *\n * The XChaCha20 algorithm is particularly well-suited for encrypting large volumes of data or\n * data streams, especially where random access is required. The class adheres to standard\n * cryptographic practices, ensuring robustness and security in its implementations.\n *\n * Key Features:\n * - Key Generation: Generate XChaCha20 symmetric keys in JWK format.\n * - Key Conversion: Transform keys between raw byte arrays and JWK formats.\n * - Encryption: Encrypt data using XChaCha20 with the provided symmetric key.\n * - Decryption: Decrypt data encrypted with XChaCha20 using the corresponding symmetric key.\n *\n * The methods in this class are asynchronous, returning Promises to accommodate various\n * JavaScript environments.\n *\n * @example\n * ```ts\n * // Key Generation\n * const privateKey = await XChaCha20.generateKey();\n *\n * // Encryption\n * const data = new TextEncoder().encode('Messsage');\n * const nonce = utils.randomBytes(24); // 24-byte nonce for XChaCha20\n * const encryptedData = await XChaCha20.encrypt({\n *   data,\n *   nonce,\n *   key: privateKey\n * });\n *\n * // Decryption\n * const decryptedData = await XChaCha20.decrypt({\n *   data: encryptedData,\n *   nonce,\n *   key: privateKey\n * });\n *\n * // Key Conversion\n * const privateKeyBytes = await XChaCha20.privateKeyToBytes({ privateKey });\n * ```\n */\nexport class XChaCha20 {\n  /**\n   * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method takes a symmetric key represented as a byte array (Uint8Array) and\n   * converts it into a JWK object for use with the XChaCha20 symmetric encryption algorithm. The\n   * conversion process involves encoding the key into base64url format and setting the appropriate\n   * JWK parameters.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'oct' for Octet Sequence (representing a symmetric key).\n   * - `k`: The symmetric key, base64url-encoded.\n   * - `kid`: Key ID, generated based on the JWK thumbprint.\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // Replace with actual symmetric key bytes\n   * const privateKey = await XChaCha20.bytesToPrivateKey({ privateKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the symmetric key conversion.\n   * @param params.privateKeyBytes - The raw symmetric key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the symmetric key in JWK format.\n   */\n  public static async bytesToPrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Construct the private key in JWK format.\n    const privateKey: Jwk = {\n      k   : Convert.uint8Array(privateKeyBytes).toBase64Url(),\n      kty : 'oct'\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Decrypts the provided data using XChaCha20.\n   *\n   * @remarks\n   * This method performs XChaCha20 decryption on the given encrypted data using the specified key\n   * and nonce. The nonce should be the same as used in the encryption process and must be 24 bytes\n   * long. The method returns the decrypted data as a Uint8Array.\n   *\n   * @example\n   * ```ts\n   * const encryptedData = new Uint8Array([...]); // Encrypted data\n   * const nonce = new Uint8Array(24); // 24-byte nonce used during encryption\n   * const key = { ... }; // A Jwk object representing the XChaCha20 key\n   * const decryptedData = await XChaCha20.decrypt({\n   *   data: encryptedData,\n   *   nonce,\n   *   key\n   * });\n   * ```\n   *\n   * @param params - The parameters for the decryption operation.\n   * @param params.data - The encrypted data to decrypt, represented as a Uint8Array.\n   * @param params.key - The key to use for decryption, represented in JWK format.\n   * @param params.nonce - The nonce used during the encryption process.\n   *\n   * @returns A Promise that resolves to the decrypted data as a Uint8Array.\n   */\n  public static async decrypt({ data, key, nonce }: {\n    data: Uint8Array;\n    key: Jwk;\n    nonce: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Convert the private key from JWK format to bytes.\n    const privateKeyBytes = await XChaCha20.privateKeyToBytes({ privateKey: key });\n\n    const ciphertext = xchacha20(privateKeyBytes, nonce, data);\n\n    return ciphertext;\n  }\n\n  /**\n   * Encrypts the provided data using XChaCha20.\n   *\n   * @remarks\n   * This method performs XChaCha20 encryption on the given data using the specified key and nonce.\n   * The nonce must be 24 bytes long, ensuring a high level of security through a vast nonce space,\n   * reducing the risks associated with nonce reuse. The method returns the encrypted data as a\n   * Uint8Array.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage');\n   * const nonce = utils.randomBytes(24); // 24-byte nonce for XChaCha20\n   * const key = { ... }; // A Jwk object representing an XChaCha20 key\n   * const encryptedData = await XChaCha20.encrypt({\n   *   data,\n   *   nonce,\n   *   key\n   * });\n   * ```\n   *\n   * @param params - The parameters for the encryption operation.\n   * @param params.data - The data to encrypt, represented as a Uint8Array.\n   * @param params.key - The key to use for encryption, represented in JWK format.\n   * @param params.nonce - A 24-byte nonce for the encryption process.\n   *\n   * @returns A Promise that resolves to the encrypted data as a Uint8Array.\n   */\n  public static async encrypt({ data, key, nonce }: {\n    data: Uint8Array;\n    key: Jwk;\n    nonce: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Convert the private key from JWK format to bytes.\n    const privateKeyBytes = await XChaCha20.privateKeyToBytes({ privateKey: key });\n\n    const plaintext = xchacha20(privateKeyBytes, nonce, data);\n\n    return plaintext;\n  }\n\n  /**\n   * Generates a symmetric key for XChaCha20 in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method creates a new symmetric key suitable for use with the XChaCha20 encryption\n   * algorithm. The key is generated using cryptographically secure random number generation\n   * to ensure its uniqueness and security. The XChaCha20 algorithm requires a 256-bit key\n   * (32 bytes), and this method adheres to that specification.\n   *\n   * Key components included in the JWK:\n   * - `kty`: Key Type, set to 'oct' for Octet Sequence.\n   * - `k`: The symmetric key component, base64url-encoded.\n   * - `kid`: Key ID, generated based on the JWK thumbprint.\n   *\n   * @example\n   * ```ts\n   * const privateKey = await XChaCha20.generateKey();\n   * ```\n   *\n   * @returns A Promise that resolves to the generated symmetric key in JWK format.\n   */\n  public static async generateKey(): Promise<Jwk> {\n    // Get the Web Crypto API interface.\n    const webCrypto = getWebcryptoSubtle();\n\n    // Generate a random private key.\n    // See https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#usage_notes for\n    // an explanation for why Web Crypto generateKey() is used instead of getRandomValues().\n    const webCryptoKey = await webCrypto.generateKey( { name: 'AES-CTR', length: 256 }, true, ['encrypt']);\n\n    // Export the private key in JWK format.\n    const { alg, ext, key_ops, ...privateKey } = await webCrypto.exportKey('jwk', webCryptoKey);\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Converts a private key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method takes a symmetric key in JWK format and extracts its raw byte representation.\n   * It decodes the 'k' parameter of the JWK value, which represents the symmetric key in base64url\n   * encoding, into a byte array.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A symmetric key in JWK format\n   * const privateKeyBytes = await XChaCha20.privateKeyToBytes({ privateKey });\n   * ```\n   *\n   * @param params - The parameters for the symmetric key conversion.\n   * @param params.privateKey - The symmetric key in JWK format.\n   *\n   * @returns A Promise that resolves to the symmetric key as a Uint8Array.\n   */\n  public static async privateKeyToBytes({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid oct private key.\n    if (!isOctPrivateJwk(privateKey)) {\n      throw new Error(`XChaCha20: The provided key is not a valid oct private key.`);\n    }\n\n    // Decode the provided private key to bytes.\n    const privateKeyBytes = Convert.base64Url(privateKey.k).toUint8Array();\n\n    return privateKeyBytes;\n  }\n}", "import { Convert } from '@web5/common';\nimport { xchacha20poly1305 } from '@noble/ciphers/chacha';\nimport { getWebcryptoSubtle } from '@noble/ciphers/webcrypto';\n\nimport type { Jwk } from '../jose/jwk.js';\n\nimport { computeJwkThumbprint, isOctPrivateJwk } from '../jose/jwk.js';\n\n/**\n * Constant defining the length of the authentication tag in bytes for XChaCha20-Poly1305.\n *\n * @remarks\n * The `POLY1305_TAG_LENGTH` is set to 16 bytes (128 bits), which is the standard size for the\n * Poly1305 authentication tag in XChaCha20-Poly1305 encryption. This tag length ensures\n * a strong level of security for message authentication, verifying the integrity and\n * authenticity of the data during decryption.\n */\nexport const POLY1305_TAG_LENGTH = 16;\n\n/**\n * The `XChaCha20Poly1305` class provides a suite of utilities for cryptographic operations\n * using the XChaCha20-Poly1305 algorithm, a combination of the XChaCha20 stream cipher and the\n * Poly1305 message authentication code (MAC). This class encompasses methods for key generation,\n * encryption, decryption, and conversions between raw byte arrays and JSON Web Key (JWK) formats.\n *\n * XChaCha20-Poly1305 is renowned for its high security and efficiency, especially in scenarios\n * involving large data volumes or where data integrity and confidentiality are paramount. The\n * extended nonce size of XChaCha20 reduces the risks of nonce reuse, while Poly1305 provides\n * a strong MAC ensuring data integrity.\n *\n * Key Features:\n * - Key Generation: Generate XChaCha20-Poly1305 symmetric keys in JWK format.\n * - Key Conversion: Transform keys between raw byte arrays and JWK formats.\n * - Encryption: Encrypt data using XChaCha20-Poly1305, returning both ciphertext and MAC tag.\n * - Decryption: Decrypt data and verify integrity using the XChaCha20-Poly1305 algorithm.\n *\n * The methods in this class are asynchronous, returning Promises to accommodate various\n * JavaScript environments.\n *\n * @example\n * ```ts\n * // Key Generation\n * const privateKey = await XChaCha20Poly1305.generateKey();\n *\n * // Encryption\n * const data = new TextEncoder().encode('Messsage');\n * const nonce = utils.randomBytes(24); // 24-byte nonce\n * const additionalData = new TextEncoder().encode('Associated data');\n * const { ciphertext, tag } = await XChaCha20Poly1305.encrypt({\n *   data,\n *   nonce,\n *   additionalData,\n *   key: privateKey\n * });\n *\n * // Decryption\n * const decryptedData = await XChaCha20Poly1305.decrypt({\n *   data: ciphertext,\n *   nonce,\n *   tag,\n *   additionalData,\n *   key: privateKey\n * });\n *\n * // Key Conversion\n * const privateKeyBytes = await XChaCha20Poly1305.privateKeyToBytes({ privateKey });\n * ```\n */\nexport class XChaCha20Poly1305 {\n  /**\n   * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method takes a symmetric key represented as a byte array (Uint8Array) and converts it into\n   * a JWK object for use with the XChaCha20-Poly1305 algorithm. The process involves encoding the\n   * key into base64url format and setting the appropriate JWK parameters.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'oct' for Octet Sequence (representing a symmetric key).\n   * - `k`: The symmetric key, base64url-encoded.\n   * - `kid`: Key ID, generated based on the JWK thumbprint.\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // Replace with actual symmetric key bytes\n   * const privateKey = await XChaCha20Poly1305.bytesToPrivateKey({ privateKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the symmetric key conversion.\n   * @param params.privateKeyBytes - The raw symmetric key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the symmetric key in JWK format.\n   */\n  public static async bytesToPrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Construct the private key in JWK format.\n    const privateKey: Jwk = {\n      k   : Convert.uint8Array(privateKeyBytes).toBase64Url(),\n      kty : 'oct'\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Decrypts the provided data using XChaCha20-Poly1305.\n   *\n   * @remarks\n   * This method performs XChaCha20-Poly1305 decryption on the given encrypted data using the\n   * specified key, nonce, and authentication tag. It supports optional additional authenticated\n   * data (AAD) for enhanced security. The nonce must be 24 bytes long, consistent with XChaCha20's\n   * specifications.\n   *\n   * @example\n   * ```ts\n   * const encryptedData = new Uint8Array([...]); // Encrypted data\n   * const nonce = new Uint8Array(24); // 24-byte nonce\n   * const additionalData = new Uint8Array([...]); // Optional AAD\n   * const key = { ... }; // A Jwk object representing the XChaCha20-Poly1305 key\n   * const decryptedData = await XChaCha20Poly1305.decrypt({\n   *   data: encryptedData,\n   *   nonce,\n   *   additionalData,\n   *   key\n   * });\n   * ```\n   *\n   * @param params - The parameters for the decryption operation.\n   * @param params.data - The encrypted data to decrypt including the authentication tag,\n   *                      represented as a Uint8Array.\n   * @param params.key - The key to use for decryption, represented in JWK format.\n   * @param params.nonce - The nonce used during the encryption process.\n   * @param params.additionalData - Optional additional authenticated data.\n   *\n   * @returns A Promise that resolves to the decrypted data as a Uint8Array.\n   */\n  public static async decrypt({ data, key, nonce, additionalData }: {\n    additionalData?: Uint8Array;\n    data: Uint8Array;\n    key: Jwk;\n    nonce: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Convert the private key from JWK format to bytes.\n    const privateKeyBytes = await XChaCha20Poly1305.privateKeyToBytes({ privateKey: key });\n\n    const xc20p = xchacha20poly1305(privateKeyBytes, nonce, additionalData);\n    const plaintext = xc20p.decrypt(data);\n\n    return plaintext;\n  }\n\n  /**\n   * Encrypts the provided data using XChaCha20-Poly1305.\n   *\n   * @remarks\n   * This method performs XChaCha20-Poly1305 encryption on the given data using the specified key\n   * and nonce. It supports optional additional authenticated data (AAD) for enhanced security. The\n   * nonce must be 24 bytes long, as per XChaCha20's specifications. The method returns the\n   * encrypted data along with an authentication tag as a Uint8Array, ensuring both confidentiality\n   * and integrity of the data.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage');\n   * const nonce = utils.randomBytes(24); // 24-byte nonce\n   * const additionalData = new TextEncoder().encode('Associated data'); // Optional AAD\n   * const key = { ... }; // A Jwk object representing an XChaCha20-Poly1305 key\n   * const encryptedData = await XChaCha20Poly1305.encrypt({\n   *   data,\n   *   nonce,\n   *   additionalData,\n   *   key\n   * });\n   * ```\n   *\n   * @param params - The parameters for the encryption operation.\n   * @param params.data - The data to encrypt, represented as a Uint8Array.\n   * @param params.key - The key to use for encryption, represented in JWK format.\n   * @param params.nonce - A 24-byte nonce for the encryption process.\n   * @param params.additionalData - Optional additional authenticated data.\n   *\n   * @returns A Promise that resolves to a byte array containing the encrypted data and the\n   *          authentication tag.\n   */\n  public static async encrypt({ data, key, nonce, additionalData}: {\n    additionalData?: Uint8Array;\n    data: Uint8Array;\n    key: Jwk;\n    nonce: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Convert the private key from JWK format to bytes.\n    const privateKeyBytes = await XChaCha20Poly1305.privateKeyToBytes({ privateKey: key });\n\n    const xc20p = xchacha20poly1305(privateKeyBytes, nonce, additionalData);\n    const ciphertext = xc20p.encrypt(data);\n\n    return ciphertext;\n  }\n\n  /**\n   * Generates a symmetric key for XChaCha20-Poly1305 in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method creates a new symmetric key suitable for use with the XChaCha20-Poly1305 algorithm.\n   * The key is generated using cryptographically secure random number generation to ensure its\n   * uniqueness and security. The XChaCha20-Poly1305 algorithm requires a 256-bit key (32 bytes),\n   * and this method adheres to that specification.\n   *\n   * Key components included in the JWK:\n   * - `kty`: Key Type, set to 'oct' for Octet Sequence.\n   * - `k`: The symmetric key component, base64url-encoded.\n   * - `kid`: Key ID, generated based on the JWK thumbprint.\n   *\n   * @example\n   * ```ts\n   * const privateKey = await XChaCha20Poly1305.generateKey();\n   * ```\n   *\n   * @returns A Promise that resolves to the generated symmetric key in JWK format.\n   */\n  public static async generateKey(): Promise<Jwk> {\n    // Get the Web Crypto API interface.\n    const webCrypto = getWebcryptoSubtle();\n\n    // Generate a random private key.\n    // See https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#usage_notes for\n    // an explanation for why Web Crypto generateKey() is used instead of getRandomValues().\n    const webCryptoKey = await webCrypto.generateKey( { name: 'AES-CTR', length: 256 }, true, ['encrypt']);\n\n    // Export the private key in JWK format.\n    const { alg, ext, key_ops, ...privateKey } = await webCrypto.exportKey('jwk', webCryptoKey);\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Converts a private key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * This method takes a symmetric key in JWK format and extracts its raw byte representation.\n   * It decodes the 'k' parameter of the JWK value, which represents the symmetric key in base64url\n   * encoding, into a byte array.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A symmetric key in JWK format\n   * const privateKeyBytes = await XChaCha20Poly1305.privateKeyToBytes({ privateKey });\n   * ```\n   *\n   * @param params - The parameters for the symmetric key conversion.\n   * @param params.privateKey - The symmetric key in JWK format.\n   *\n   * @returns A Promise that resolves to the symmetric key as a Uint8Array.\n   */\n  public static async privateKeyToBytes({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid oct private key.\n    if (!isOctPrivateJwk(privateKey)) {\n      throw new Error(`XChaCha20Poly1305: The provided key is not a valid oct private key.`);\n    }\n\n    // Decode the provided private key to bytes.\n    const privateKeyBytes = Convert.base64Url(privateKey.k).toUint8Array();\n\n    return privateKeyBytes;\n  }\n}"],
  "mappings": "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",
  "names": ["require_ttlcache", "__commonJSMin", "exports", "module", "perf", "now", "isPosInt", "n", "isPosIntOrInf", "TTLCache", "_TTLCache", "max", "ttl", "updateAgeOnGet", "checkAgeOnGet", "noUpdateTTL", "dispose", "noDisposeOnSet", "expiration", "t", "exp", "entries", "key", "val", "current", "k", "oldValue", "_", "__", "value", "keys", "s", "require_level_supports", "__commonJSMin", "exports", "manifests", "manifest", "acc", "m", "require_module_error", "__commonJSMin", "exports", "module", "message", "options", "require_base64_js", "__commonJSMin", "exports", "byteLength", "toByteArray", "fromByteArray", "lookup", "revLookup", "Arr", "code", "i", "len", "getLens", "b64", "validLen", "placeHoldersLen", "lens", "_byteLength", "tmp", "arr", "curByte", "tripletToBase64", "num", "encodeChunk", "uint8", "start", "end", "output", "extraBytes", "parts", "maxChunkLength", "len2", "require_ieee754", "__commonJSMin", "exports", "buffer", "offset", "isLE", "mLen", "nBytes", "e", "m", "eLen", "eMax", "eBias", "nBits", "i", "d", "s", "value", "rt", "require_buffer", "__commonJSMin", "exports", "base64", "ieee754", "customInspectSymbol", "Buffer", "SlowBuffer", "K_MAX_LENGTH", "typedArraySupport", "arr", "proto", "createBuffer", "length", "buf", "arg", "encodingOrOffset", "allocUnsafe", "from", "value", "fromString", "fromArrayView", "isInstance", "fromArrayBuffer", "valueOf", "b", "fromObject", "assertSize", "size", "alloc", "fill", "encoding", "checked", "string", "byteLength", "actual", "fromArrayLike", "array", "i", "arrayView", "copy", "byteOffset", "obj", "len", "numberIsNaN", "a", "x", "y", "list", "buffer", "pos", "mustMatch", "loweredCase", "utf8ToBytes", "base64ToBytes", "slowToString", "start", "end", "hexSlice", "utf8Slice", "asciiSlice", "latin1Slice", "base64Slice", "utf16leSlice", "swap", "n", "m", "str", "max", "target", "thisStart", "thisEnd", "thisCopy", "targetCopy", "bidirectionalIndexOf", "val", "dir", "arrayIndexOf", "indexSize", "arrLength", "valLength", "read", "foundIndex", "found", "j", "hexWrite", "offset", "remaining", "strLen", "parsed", "utf8Write", "blitBuffer", "asciiWrite", "asciiToBytes", "base64Write", "ucs2Write", "utf16leToBytes", "res", "firstByte", "codePoint", "bytesPerSequence", "secondByte", "thirdByte", "fourthByte", "tempCodePoint", "decodeCodePointsArray", "MAX_ARGUMENTS_LENGTH", "codePoints", "ret", "out", "hexSliceLookupTable", "bytes", "newBuf", "checkOffset", "ext", "noAssert", "mul", "defineBigIntMethod", "validateNumber", "first", "last", "boundsError", "lo", "hi", "checkInt", "min", "maxBytes", "wrtBigUInt64LE", "checkIntBI", "wrtBigUInt64BE", "limit", "sub", "checkIEEE754", "writeFloat", "littleEndian", "writeDouble", "targetStart", "code", "errors", "E", "sym", "getMessage", "Base", "name", "range", "input", "msg", "received", "addNumericalSeparator", "checkBounds", "type", "INVALID_BASE64_RE", "base64clean", "units", "leadSurrogate", "byteArray", "c", "src", "dst", "alphabet", "table", "i16", "fn", "BufferBigIntNotDefined", "require_text_endec", "__commonJSMin", "exports", "module", "lazy", "require_encoding", "__commonJSMin", "exports", "ModuleError", "formats", "Encoding", "options", "require_formats", "__commonJSMin", "exports", "Buffer", "Encoding", "textEndec", "BufferFormat", "options", "ViewFormat", "data", "view", "UTF8Format", "textEncoder", "textDecoder", "require_encodings", "__commonJSMin", "exports", "Buffer", "textEncoder", "textDecoder", "BufferFormat", "ViewFormat", "UTF8Format", "identity", "v", "data", "buffer", "require_level_transcoder", "__commonJSMin", "exports", "ModuleError", "encodings", "Encoding", "BufferFormat", "ViewFormat", "UTF8Format", "kFormats", "kEncodings", "validFormats", "Transcoder", "formats", "f", "k", "err", "encoding", "resolved", "lookup", "from", "name", "format", "options", "maybeType", "anonymousCount", "detectFormat", "aliases", "require_events", "__commonJSMin", "exports", "module", "R", "ReflectApply", "target", "receiver", "args", "ReflectOwnKeys", "ProcessEmitWarning", "warning", "NumberIsNaN", "value", "EventEmitter", "once", "defaultMaxListeners", "checkListener", "listener", "arg", "n", "_getMaxListeners", "that", "type", "i", "doError", "events", "er", "err", "handler", "len", "listeners", "arrayClone", "_addListener", "prepend", "m", "existing", "w", "onceWrapper", "_onceWrap", "state", "wrapped", "list", "position", "originalListener", "spliceOne", "keys", "key", "_listeners", "unwrap", "evlistener", "unwrapListeners", "emitter", "listenerCount", "arr", "copy", "index", "ret", "name", "resolve", "reject", "errorListener", "resolver", "eventTargetAgnosticAddListener", "addErrorHandlerIfEventEmitter", "flags", "wrapListener", "require_next_tick_browser", "__commonJSMin", "exports", "module", "fn", "require_catering", "__commonJSMin", "exports", "nextTick", "callback", "symbol", "promise", "resolve", "reject", "err", "res", "require_common", "__commonJSMin", "exports", "options", "callback", "def", "require_abstract_iterator", "__commonJSMin", "exports", "fromCallback", "ModuleError", "getOptions", "getCallback", "kPromise", "kCallback", "kWorking", "kHandleOne", "kHandleMany", "kAutoClose", "kFinishWork", "kReturnMany", "kClosing", "kHandleClose", "kClosed", "kCloseCallbacks", "kKeyEncoding", "kValueEncoding", "kAbortOnClose", "kLegacy", "kKeys", "kValues", "kLimit", "kCount", "emptyOptions", "noop", "warnedEnd", "CommonIterator", "db", "options", "legacy", "hint", "callback", "promise", "resolve", "reject", "err", "key", "value", "size", "acc", "onnext", "count", "nextv", "onnextv", "items", "cb", "target", "keyEncoding", "keyFormat", "mapped", "callbacks", "item", "AbstractIterator", "IteratorDecodeError", "entries", "entry", "AbstractKeyIterator", "keys", "AbstractValueIterator", "values", "subject", "cause", "k", "require_default_kv_iterator", "__commonJSMin", "exports", "AbstractKeyIterator", "AbstractValueIterator", "kIterator", "kCallback", "kHandleOne", "kHandleMany", "DefaultKeyIterator", "db", "options", "DefaultValueIterator", "Iterator", "keys", "mapEntry", "entry", "callback", "err", "key", "value", "size", "entries", "target", "require_deferred_iterator", "__commonJSMin", "exports", "AbstractIterator", "AbstractKeyIterator", "AbstractValueIterator", "ModuleError", "kNut", "kUndefer", "kFactory", "DeferredIterator", "db", "options", "DeferredKeyIterator", "DeferredValueIterator", "Iterator", "callback", "size", "target", "require_abstract_chained_batch", "__commonJSMin", "exports", "fromCallback", "ModuleError", "getCallback", "getOptions", "kPromise", "kStatus", "kOperations", "kFinishClose", "kCloseCallbacks", "AbstractChainedBatch", "db", "hint", "key", "value", "options", "err", "original", "keyEncoding", "valueEncoding", "keyFormat", "mappedKey", "mappedValue", "callback", "callbacks", "cb", "require_default_chained_batch", "__commonJSMin", "exports", "AbstractChainedBatch", "ModuleError", "kEncoded", "DefaultChainedBatch", "db", "key", "value", "options", "callback", "require_range_options", "__commonJSMin", "exports", "module", "ModuleError", "hasOwnProperty", "rangeOptions", "options", "keyEncoding", "result", "k", "require_queue_microtask", "__commonJSMin", "exports", "module", "promise", "cb", "err", "require_next_tick_browser", "__commonJSMin", "exports", "module", "queueMicrotask", "fn", "args", "require_abstract_sublevel_iterator", "__commonJSMin", "exports", "AbstractIterator", "AbstractKeyIterator", "AbstractValueIterator", "kUnfix", "kIterator", "kHandleOne", "kHandleMany", "kCallback", "AbstractSublevelIterator", "db", "options", "iterator", "unfix", "err", "key", "value", "callback", "entries", "entry", "AbstractSublevelKeyIterator", "keys", "AbstractSublevelValueIterator", "Iterator", "size", "target", "require_abstract_sublevel", "__commonJSMin", "exports", "module", "ModuleError", "Buffer", "AbstractSublevelIterator", "AbstractSublevelKeyIterator", "AbstractSublevelValueIterator", "kPrefix", "kUpperBound", "kPrefixRange", "kParent", "kUnfix", "textEncoder", "defaults", "AbstractLevel", "AbstractSublevel", "options", "db", "name", "separator", "manifest", "forward", "trim", "reserved", "parent", "x", "mergeManifests", "prefix", "upperBound", "MultiFormat", "Unfixer", "key", "keyFormat", "view", "result", "buffer", "range", "callback", "value", "keys", "operations", "iterator", "unfix", "supportsEncoding", "encoding", "prefixLength", "str", "char", "start", "end", "require_abstract_level", "__commonJSMin", "exports", "supports", "Transcoder", "EventEmitter", "fromCallback", "ModuleError", "AbstractIterator", "DefaultKeyIterator", "DefaultValueIterator", "DeferredIterator", "DeferredKeyIterator", "DeferredValueIterator", "DefaultChainedBatch", "getCallback", "getOptions", "rangeOptions", "kPromise", "kLanded", "kResources", "kCloseResources", "kOperations", "kUndefer", "kDeferOpen", "kOptions", "kStatus", "kDefaultOptions", "kTranscoder", "kKeyEncoding", "kValueEncoding", "noop", "AbstractLevel", "manifest", "options", "keyEncoding", "valueEncoding", "passive", "forward", "formats", "encoding", "callback", "maybeOpened", "err", "maybeClosed", "cancel", "pending", "sync", "next", "resource", "key", "maybeError", "keyFormat", "valueFormat", "value", "keys", "mappedKeys", "i", "values", "mappedKey", "mappedValue", "operations", "mapped", "ke", "ve", "op", "db", "valueErr", "name", "AbstractSublevel", "original", "fn", "k", "require_abstract_level", "__commonJSMin", "exports", "require_run_parallel_limit", "__commonJSMin", "exports", "module", "runParallelLimit", "queueMicrotask", "tasks", "limit", "cb", "results", "len", "pending", "keys", "isErrored", "isSync", "next", "done", "err", "end", "each", "i", "result", "key", "task", "require_key_range", "__commonJSMin", "exports", "module", "options", "lower", "upper", "lowerExclusive", "upperExclusive", "require_deserialize", "__commonJSMin", "exports", "module", "textEncoder", "data", "require_iterator", "__commonJSMin", "exports", "AbstractIterator", "createKeyRange", "deserialize", "kCache", "kFinished", "kOptions", "kCurrentOptions", "kPosition", "kLocation", "kFirst", "emptyOptions", "Iterator", "db", "location", "options", "size", "callback", "keyRange", "transaction", "store", "entries", "method", "ev", "cursor", "key", "value", "maybeCommit", "keys", "values", "complete", "length", "i", "err", "cache", "target", "require_clear", "__commonJSMin", "exports", "module", "db", "location", "keyRange", "options", "callback", "transaction", "store", "count", "method", "direction", "ev", "cursor", "require_browser_level", "__commonJSMin", "exports", "AbstractLevel", "ModuleError", "parallel", "fromCallback", "Iterator", "deserialize", "clear", "createKeyRange", "DEFAULT_PREFIX", "kIDB", "kNamePrefix", "kLocation", "kVersion", "kStore", "kOnComplete", "kPromise", "BrowserLevel", "location", "options", "_", "prefix", "version", "forward", "callback", "req", "ev", "db", "mode", "request", "transaction", "key", "store", "err", "value", "keys", "tasks", "next", "operations", "index", "error", "loop", "op", "keyRange", "require_browser", "__commonJSMin", "exports", "require_primordials", "__commonJSMin", "exports", "module", "self", "el", "sep", "fn", "start", "end", "thisArgs", "args", "instance", "props", "name", "prop", "obj", "target", "proto", "thenFn", "catchFn", "err", "val", "value", "buf", "len", "require_browser", "__commonJSMin", "exports", "module", "AbortController", "AbortSignal", "require_util", "__commonJSMin", "exports", "module", "bufferModule", "kResistStopPropagation", "SymbolDispose", "AbortSignal", "AbortController", "AsyncFunction", "Blob", "isBlob", "b", "validateAbortSignal", "signal", "name", "validateFunction", "value", "AggregateError", "errors", "message", "i", "callback", "called", "args", "resolve", "reject", "res", "rej", "fn", "err", "format", "_unused", "type", "replacement", "arr", "listener", "removeEventListener", "_removeEventListener", "signals", "ac", "abort", "require_errors", "__commonJSMin", "exports", "module", "format", "inspect", "CustomAggregateError", "AggregateError", "kIsNodeError", "kTypes", "classRegExp", "nodeInternalPrefix", "codes", "assert", "value", "message", "addNumericalSeparator", "val", "res", "i", "start", "getMessage", "key", "msg", "args", "expectedLength", "E", "code", "Base", "NodeError", "hideStackFrames", "fn", "hidden", "aggregateTwoErrors", "innerError", "outerError", "err", "AbortError", "options", "name", "expected", "actual", "types", "instances", "other", "pos", "last", "_actual$constructor", "inspected", "reason", "input", "_value$constructor", "type", "len", "a", "str", "range", "received", "require_validators", "__commonJSMin", "exports", "module", "ArrayIsArray", "ArrayPrototypeIncludes", "ArrayPrototypeJoin", "ArrayPrototypeMap", "NumberIsInteger", "NumberIsNaN", "NumberMAX_SAFE_INTEGER", "NumberMIN_SAFE_INTEGER", "NumberParseInt", "ObjectPrototypeHasOwnProperty", "RegExpPrototypeExec", "String", "StringPrototypeToUpperCase", "StringPrototypeTrim", "hideStackFrames", "ERR_SOCKET_BAD_PORT", "ERR_INVALID_ARG_TYPE", "ERR_INVALID_ARG_VALUE", "ERR_OUT_OF_RANGE", "ERR_UNKNOWN_SIGNAL", "normalizeEncoding", "isAsyncFunction", "isArrayBufferView", "signals", "isInt32", "value", "isUint32", "octalReg", "modeDesc", "parseFileMode", "name", "def", "validateUint32", "validateInteger", "min", "max", "validateInt32", "positive", "validateString", "validateNumber", "validateOneOf", "oneOf", "reason", "v", "validateBoolean", "getOwnPropertyValueOrDefault", "options", "key", "defaultValue", "validateObject", "allowArray", "allowFunction", "validateDictionary", "validateArray", "minLength", "validateStringArray", "i", "validateBooleanArray", "validateAbortSignalArray", "signal", "indexedName", "validateAbortSignal", "validateSignalName", "validateBuffer", "buffer", "validateEncoding", "data", "encoding", "normalizedEncoding", "length", "validatePort", "port", "allowZero", "validateFunction", "validatePlainFunction", "validateUndefined", "validateUnion", "union", "linkValueRegExp", "validateLinkHeaderFormat", "validateLinkHeaderValue", "hints", "hintsLength", "result", "link", "require_browser", "__commonJSMin", "exports", "module", "process", "cachedSetTimeout", "cachedClearTimeout", "defaultSetTimout", "defaultClearTimeout", "runTimeout", "fun", "runClearTimeout", "marker", "queue", "draining", "currentQueue", "queueIndex", "cleanUpNextTick", "drainQueue", "timeout", "len", "args", "i", "Item", "array", "noop", "name", "dir", "require_utils", "__commonJSMin", "exports", "module", "SymbolAsyncIterator", "SymbolIterator", "SymbolFor", "kIsDestroyed", "kIsErrored", "kIsReadable", "kIsWritable", "kIsDisturbed", "kIsClosedPromise", "kControllerErrorFunction", "isReadableNodeStream", "obj", "strict", "_obj$_readableState", "isWritableNodeStream", "_obj$_writableState", "isDuplexNodeStream", "isNodeStream", "isReadableStream", "isWritableStream", "isTransformStream", "isWebStream", "isIterable", "isAsync", "isDestroyed", "stream", "wState", "rState", "state", "isWritableEnded", "isWritableFinished", "isReadableEnded", "isReadableFinished", "isReadable", "isWritable", "isFinished", "opts", "isWritableErrored", "_stream$_writableStat", "_stream$_writableStat2", "isReadableErrored", "_stream$_readableStat", "_stream$_readableStat2", "isClosed", "isOutgoingMessage", "isServerResponse", "isServerRequest", "_stream$req", "willEmitClose", "isDisturbed", "_stream$kIsDisturbed", "isErrored", "_ref", "_ref2", "_ref3", "_ref4", "_ref5", "_stream$kIsErrored", "_stream$_readableStat3", "_stream$_writableStat3", "_stream$_readableStat4", "_stream$_writableStat4", "require_end_of_stream", "__commonJSMin", "exports", "module", "process", "AbortError", "codes", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_PREMATURE_CLOSE", "kEmptyObject", "once", "validateAbortSignal", "validateFunction", "validateObject", "validateBoolean", "Promise", "PromisePrototypeThen", "SymbolDispose", "isClosed", "isReadable", "isReadableNodeStream", "isReadableStream", "isReadableFinished", "isReadableErrored", "isWritable", "isWritableNodeStream", "isWritableStream", "isWritableFinished", "isWritableErrored", "isNodeStream", "_willEmitClose", "kIsClosedPromise", "addAbortListener", "isRequest", "stream", "nop", "eos", "options", "callback", "_options$readable", "_options$writable", "eosWeb", "readable", "writable", "wState", "rState", "onlegacyfinish", "onfinish", "willEmitClose", "writableFinished", "readableFinished", "onend", "onerror", "err", "closed", "onclose", "errored", "onclosed", "onrequest", "cleanup", "abort", "endCallback", "disposable", "originalCallback", "args", "isAborted", "resolverFn", "finished", "opts", "_opts", "autoCleanup", "resolve", "reject", "require_destroy", "__commonJSMin", "exports", "module", "process", "aggregateTwoErrors", "ERR_MULTIPLE_CALLBACK", "AbortError", "Symbol", "kIsDestroyed", "isDestroyed", "isFinished", "isServerRequest", "kDestroy", "kConstruct", "checkError", "err", "w", "destroy", "cb", "s", "_destroy", "er", "self", "called", "onDestroy", "r", "emitErrorCloseNT", "emitCloseNT", "emitErrorNT", "undestroy", "errorOrDestroy", "stream", "sync", "construct", "constructNT", "onConstruct", "emitConstructNT", "isRequest", "emitCloseLegacy", "emitErrorCloseLegacy", "destroyer", "require_legacy", "__commonJSMin", "exports", "module", "ArrayIsArray", "ObjectSetPrototypeOf", "EE", "Stream", "opts", "dest", "options", "source", "ondata", "chunk", "ondrain", "onend", "onclose", "didOnEnd", "onerror", "er", "cleanup", "prependListener", "emitter", "event", "fn", "require_add_abort_signal", "__commonJSMin", "exports", "module", "SymbolDispose", "AbortError", "codes", "isNodeStream", "isWebStream", "kControllerErrorFunction", "eos", "ERR_INVALID_ARG_TYPE", "addAbortListener", "validateAbortSignal", "signal", "name", "stream", "onAbort", "disposable", "require_buffer_list", "__commonJSMin", "exports", "module", "StringPrototypeSlice", "SymbolIterator", "TypedArrayPrototypeSet", "Uint8Array", "Buffer", "inspect", "v", "entry", "ret", "s", "p", "n", "hasStrings", "data", "slice", "c", "str", "retLen", "buf", "_", "options", "require_state", "__commonJSMin", "exports", "module", "MathFloor", "NumberIsInteger", "validateInteger", "ERR_INVALID_ARG_VALUE", "defaultHighWaterMarkBytes", "defaultHighWaterMarkObjectMode", "highWaterMarkFrom", "options", "isDuplex", "duplexKey", "getDefaultHighWaterMark", "objectMode", "setDefaultHighWaterMark", "value", "getHighWaterMark", "state", "hwm", "name", "require_safe_buffer", "__commonJSMin", "exports", "module", "buffer", "Buffer", "copyProps", "src", "dst", "key", "SafeBuffer", "arg", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_string_decoder", "__commonJSMin", "exports", "Buffer", "isEncoding", "encoding", "_normalizeEncoding", "enc", "retried", "normalizeEncoding", "nenc", "StringDecoder", "nb", "utf16Text", "utf16End", "utf8FillLast", "base64Text", "base64End", "simpleWrite", "simpleEnd", "buf", "r", "i", "utf8End", "utf8Text", "utf8CheckByte", "byte", "utf8CheckIncomplete", "self", "j", "utf8CheckExtraBytes", "p", "total", "end", "c", "n", "require_from", "__commonJSMin", "exports", "module", "process", "PromisePrototypeThen", "SymbolAsyncIterator", "SymbolIterator", "Buffer", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_NULL_VALUES", "from", "Readable", "iterable", "opts", "iterator", "isAsync", "readable", "reading", "next", "error", "cb", "close", "e", "hadError", "hasThrow", "value", "done", "res", "err", "require_readable", "__commonJSMin", "exports", "module", "process", "ArrayPrototypeIndexOf", "NumberIsInteger", "NumberIsNaN", "NumberParseInt", "ObjectDefineProperties", "ObjectKeys", "ObjectSetPrototypeOf", "Promise", "SafeSet", "SymbolAsyncDispose", "SymbolAsyncIterator", "Symbol", "Readable", "ReadableState", "EE", "Stream", "prependListener", "Buffer", "addAbortSignal", "eos", "debug", "fn", "BufferList", "destroyImpl", "getHighWaterMark", "getDefaultHighWaterMark", "aggregateTwoErrors", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_OUT_OF_RANGE", "ERR_STREAM_PUSH_AFTER_EOF", "ERR_STREAM_UNSHIFT_AFTER_END_EVENT", "AbortError", "validateObject", "kPaused", "StringDecoder", "from", "nop", "errorOrDestroy", "kObjectMode", "kEnded", "kEndEmitted", "kReading", "kConstructed", "kSync", "kNeedReadable", "kEmittedReadable", "kReadableListening", "kResumeScheduled", "kErrorEmitted", "kEmitClose", "kAutoDestroy", "kDestroyed", "kClosed", "kCloseEmitted", "kMultiAwaitDrain", "kReadingMore", "kDataEmitted", "makeBitMapDescriptor", "bit", "value", "options", "stream", "isDuplex", "maybeReadMore", "err", "cb", "error", "resolve", "reject", "chunk", "encoding", "readableAddChunk", "addToFront", "state", "onEofChunk", "addChunk", "emitReadable", "enc", "decoder", "buffer", "content", "data", "MAX_HWM", "computeNewHighWaterMark", "n", "howMuchToRead", "nOrig", "endReadable", "doRead", "ret", "fromList", "emitReadable_", "flow", "maybeReadMore_", "len", "dest", "pipeOpts", "src", "endFn", "onend", "unpipe", "onunpipe", "readable", "unpipeInfo", "cleanup", "ondrain", "cleanedUp", "onclose", "onfinish", "onerror", "ondata", "pause", "pipeOnDrain", "er", "s", "dests", "i", "index", "ev", "res", "nReadingNextTick", "updateReadableListening", "self", "resume", "resume_", "paused", "streamKeys", "j", "streamToAsyncIterator", "iter", "createAsyncIterator", "callback", "next", "r", "val", "endReadableNT", "endWritableNT", "wState", "iterable", "opts", "webStreamsAdapters", "lazyWebStreams", "readableStream", "streamReadable", "_ref", "_src$readableObjectMo", "require_writable", "__commonJSMin", "exports", "module", "process", "ArrayPrototypeSlice", "Error", "FunctionPrototypeSymbolHasInstance", "ObjectDefineProperty", "ObjectDefineProperties", "ObjectSetPrototypeOf", "StringPrototypeToLowerCase", "Symbol", "SymbolHasInstance", "Writable", "WritableState", "EE", "Stream", "Buffer", "destroyImpl", "addAbortSignal", "getHighWaterMark", "getDefaultHighWaterMark", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_STREAM_CANNOT_PIPE", "ERR_STREAM_DESTROYED", "ERR_STREAM_ALREADY_FINISHED", "ERR_STREAM_NULL_VALUES", "ERR_STREAM_WRITE_AFTER_END", "ERR_UNKNOWN_ENCODING", "errorOrDestroy", "nop", "kOnFinished", "options", "stream", "isDuplex", "noDecode", "onwrite", "resetBuffer", "state", "clearBuffer", "finishMaybe", "object", "_write", "chunk", "encoding", "cb", "err", "writeOrBuffer", "callback", "len", "ret", "doWrite", "writev", "onwriteError", "er", "errorBuffer", "sync", "afterWriteTick", "afterWrite", "count", "n", "_state$errored", "onfinishCallbacks", "_state$errored2", "buffered", "bufferedIndex", "objectMode", "bufferedLength", "i", "chunks", "needFinish", "callFinal", "called", "onFinish", "finish", "prefinish", "rState", "value", "w", "val", "wState", "destroy", "webStreamsAdapters", "lazyWebStreams", "writableStream", "streamWritable", "require_duplexify", "__commonJSMin", "exports", "module", "process", "bufferModule", "isReadable", "isWritable", "isIterable", "isNodeStream", "isReadableNodeStream", "isWritableNodeStream", "isDuplexNodeStream", "isReadableStream", "isWritableStream", "eos", "AbortError", "ERR_INVALID_ARG_TYPE", "ERR_INVALID_RETURN_VALUE", "destroyer", "Duplex", "Readable", "Writable", "createDeferredPromise", "from", "Blob", "isBlob", "b", "AbortController", "FunctionPrototypeCall", "Duplexify", "options", "duplexify", "body", "name", "_duplexify", "value", "write", "final", "destroy", "fromAsyncGen", "then", "d", "promise", "val", "err", "cb", "readable", "writable", "fn", "resolve", "ac", "signal", "_promise", "chunk", "done", "encoding", "_resolve", "pair", "r", "w", "ondrain", "onfinish", "onreadable", "onclose", "onfinished", "callback", "buf", "require_duplex", "__commonJSMin", "exports", "module", "ObjectDefineProperties", "ObjectGetOwnPropertyDescriptor", "ObjectKeys", "ObjectSetPrototypeOf", "Duplex", "Readable", "Writable", "keys", "i", "method", "options", "value", "webStreamsAdapters", "lazyWebStreams", "pair", "duplex", "duplexify", "body", "require_transform", "__commonJSMin", "exports", "module", "ObjectSetPrototypeOf", "Symbol", "Transform", "ERR_METHOD_NOT_IMPLEMENTED", "Duplex", "getHighWaterMark", "kCallback", "options", "readableHighWaterMark", "prefinish", "final", "cb", "er", "data", "chunk", "encoding", "callback", "rState", "wState", "length", "err", "val", "require_passthrough", "__commonJSMin", "exports", "module", "ObjectSetPrototypeOf", "PassThrough", "Transform", "options", "chunk", "encoding", "cb", "require_pipeline", "__commonJSMin", "exports", "module", "process", "ArrayIsArray", "Promise", "SymbolAsyncIterator", "SymbolDispose", "eos", "once", "destroyImpl", "Duplex", "aggregateTwoErrors", "ERR_INVALID_ARG_TYPE", "ERR_INVALID_RETURN_VALUE", "ERR_MISSING_ARGS", "ERR_STREAM_DESTROYED", "ERR_STREAM_PREMATURE_CLOSE", "AbortError", "validateFunction", "validateAbortSignal", "isIterable", "isReadable", "isReadableNodeStream", "isNodeStream", "isTransformStream", "isWebStream", "isReadableStream", "isReadableFinished", "AbortController", "PassThrough", "Readable", "addAbortListener", "destroyer", "stream", "reading", "writing", "finished", "cleanup", "err", "popCallback", "streams", "makeAsyncIterable", "val", "fromReadable", "pumpToNode", "iterable", "writable", "finish", "end", "error", "onresolve", "resume", "callback", "wait", "resolve", "reject", "chunk", "pumpToWeb", "readable", "writer", "pipeline", "pipelineImpl", "opts", "ac", "signal", "outerSignal", "lastStreamCleanup", "abort", "finishImpl", "disposable", "value", "destroys", "finishCount", "final", "_disposable", "fn", "ret", "i", "isLastStream", "onError", "destroy", "_ret", "_ret2", "pt", "then", "toRead", "pipe", "src", "dst", "ended", "endFn", "rState", "require_compose", "__commonJSMin", "exports", "module", "pipeline", "Duplex", "destroyer", "isNodeStream", "isReadable", "isWritable", "isWebStream", "isTransformStream", "isWritableStream", "isReadableStream", "AbortError", "ERR_INVALID_ARG_VALUE", "ERR_MISSING_ARGS", "eos", "streams", "orgStreams", "idx", "n", "ondrain", "onfinish", "onreadable", "onclose", "d", "onfinished", "err", "cb", "readable", "writable", "head", "tail", "chunk", "encoding", "callback", "writer", "toRead", "buf", "reader", "value", "done", "require_operators", "__commonJSMin", "exports", "module", "AbortController", "ERR_INVALID_ARG_VALUE", "ERR_INVALID_ARG_TYPE", "ERR_MISSING_ARGS", "ERR_OUT_OF_RANGE", "AbortError", "validateAbortSignal", "validateInteger", "validateObject", "kWeakHandler", "kResistStopPropagation", "finished", "staticCompose", "addAbortSignalNoValidate", "isWritable", "isNodeStream", "deprecate", "ArrayPrototypePush", "Boolean", "MathFloor", "Number", "NumberIsNaN", "Promise", "PromiseReject", "PromiseResolve", "PromisePrototypeThen", "Symbol", "kEmpty", "kEof", "compose", "stream", "options", "composedStream", "map", "fn", "concurrency", "highWaterMark", "signal", "queue", "signalOpt", "next", "resume", "done", "cnt", "onCatch", "afterItemProcessed", "maybeResume", "pump", "val", "err", "resolve", "asIndexedPairs", "index", "_options$signal", "some", "unused", "filter", "every", "args", "find", "result", "forEach", "forEachFn", "value", "filterFn", "ReduceAwareErrMissingArgs", "reduce", "reducer", "initialValue", "_options$signal2", "hasInitialValue", "ac", "opts", "gotAnyItemFromStream", "_options$signal3", "toArray", "_options$signal4", "flatMap", "values", "toIntegerOrInfinity", "number", "drop", "_options$signal5", "_options$signal6", "take", "_options$signal7", "_options$signal8", "require_promises", "__commonJSMin", "exports", "module", "ArrayPrototypePop", "Promise", "isIterable", "isNodeStream", "isWebStream", "pl", "finished", "pipeline", "streams", "resolve", "reject", "signal", "end", "lastArg", "options", "err", "value", "require_stream", "__commonJSMin", "exports", "module", "Buffer", "ObjectDefineProperty", "ObjectKeys", "ReflectApply", "customPromisify", "streamReturningOperators", "promiseReturningOperators", "ERR_ILLEGAL_CONSTRUCTOR", "compose", "setDefaultHighWaterMark", "getDefaultHighWaterMark", "pipeline", "destroyer", "eos", "promises", "utils", "Stream", "key", "fn", "args", "op", "addAbortSignal", "value", "chunk", "require_browser", "__commonJSMin", "exports", "module", "CustomStream", "promises", "originalDestroy", "import_ttlcache", "empty", "equals", "aa", "bb", "ii", "coerce", "o", "base", "ALPHABET", "name", "BASE_MAP", "j", "x", "xc", "BASE", "LEADER", "FACTOR", "iFACTOR", "encode", "source", "zeroes", "length", "pbegin", "pend", "size", "b58", "carry", "i", "it1", "it2", "str", "decodeUnsafe", "psz", "b256", "it3", "it4", "vch", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "Encoder", "name", "prefix", "baseEncode", "bytes", "Decoder", "baseDecode", "text", "decoder", "or", "ComposedDecoder", "decoders", "input", "left", "right", "Codec", "from", "encode", "decode", "baseX", "alphabet", "base_x_default", "coerce", "string", "bitsPerChar", "codes", "i", "end", "out", "bits", "buffer", "written", "value", "data", "pad", "mask", "rfc4648", "base32", "rfc4648", "base32upper", "base32pad", "base32padupper", "base32hex", "base32hexupper", "base32hexpad", "base32hexpadupper", "base32z", "base58btc", "baseX", "base58flickr", "base64", "rfc4648", "base64pad", "base64url", "base64urlpad", "isArrayBufferSlice", "arrayBufferView", "isAsyncIterable", "obj", "universalTypeOf", "value", "match", "_", "type", "textEncoder", "textDecoder", "Convert", "_Convert", "data", "format", "isAsyncIterable", "base58btc", "base64url", "universalTypeOf", "isArrayBufferSlice", "base32z", "u8a", "string", "chunks", "_d", "_e", "__asyncValues", "_f", "_a", "_c", "chunk", "hexes", "v", "i", "hex", "text", "str", "dataType", "byteValue", "arrayBuffer", "Web5LogLevel", "Web5Logger", "logLevel", "message", "logger", "varint_exports", "__export", "decode", "encodeTo", "encodingLength", "encode_1", "encode", "MSB", "REST", "MSBALL", "INT", "num", "out", "offset", "oldOffset", "decode", "read", "MSB$1", "REST$1", "buf", "res", "shift", "counter", "b", "l", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "length", "value", "varint", "_brrp_varint", "varint_default", "decode", "data", "offset", "varint_default", "encodeTo", "int", "target", "encodingLength", "create", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "Digest", "decode", "multihash", "coerce", "equals", "a", "b", "data", "format", "link", "base", "bytes", "version", "toStringV0", "baseCache", "base58btc", "toStringV1", "base32", "cache", "baseCache", "cid", "CID", "_CID", "version", "code", "multihash", "bytes", "DAG_PB_CODE", "SHA_256_CODE", "digest", "create", "other", "self", "unknown", "equals", "base", "format", "input", "value", "encodeCID", "cidSymbol", "decode", "remainder", "specs", "prefixSize", "multihashBytes", "coerce", "digestBytes", "Digest", "initialBytes", "offset", "next", "i", "length", "codec", "multihashCode", "digestSize", "size", "multihashSize", "source", "prefix", "parseCIDtoBytes", "decoder", "base58btc", "base32", "toStringV0", "toStringV1", "codeOffset", "encodingLength", "hashOffset", "encodeTo", "Multicodec", "_Multicodec", "options", "code", "data", "name", "_a", "prefixLength", "varint_exports", "dataWithPrefix", "prefixedData", "_", "codec", "codeByteLength", "removeUndefinedProperties", "obj", "key", "import_level", "MemoryStore", "id", "key", "import_readable_stream", "import_readable_stream", "isBytes", "a", "bytes", "b", "lengths", "exists", "instance", "checkFinished", "output", "out", "bytes", "min", "crypto", "createView", "arr", "rotr", "word", "shift", "isLE", "utf8ToBytes", "str", "toBytes", "data", "bytes", "concatBytes", "arrays", "sum", "i", "a", "res", "pad", "Hash", "toStr", "wrapConstructor", "hashCons", "hashC", "msg", "toBytes", "tmp", "randomBytes", "bytesLength", "crypto", "setBigUint64", "view", "byteOffset", "value", "isLE", "_32n", "_u32_max", "wh", "wl", "h", "l", "Chi", "a", "b", "c", "Maj", "HashMD", "Hash", "blockLen", "outputLen", "padOffset", "createView", "data", "exists", "buffer", "toBytes", "len", "pos", "take", "dataView", "out", "output", "i", "oview", "outLen", "state", "res", "to", "length", "finished", "destroyed", "SHA256_K", "SHA256_IV", "SHA256_W", "SHA256", "HashMD", "A", "B", "C", "D", "E", "F", "G", "H", "view", "offset", "i", "W15", "W2", "s0", "rotr", "s1", "sigma1", "T1", "Chi", "T2", "Maj", "sha256", "wrapConstructor", "SHA256", "Sha256", "data", "sha256", "CryptoAlgorithm", "Sha2Algorithm", "CryptoAlgorithm", "algorithm", "data", "Sha256", "number", "n", "isBytes", "a", "bytes", "b", "lengths", "hash", "number", "exists", "instance", "checkFinished", "output", "out", "min", "crypto", "isBytes", "a", "createView", "arr", "rotr", "word", "shift", "isLE", "utf8ToBytes", "str", "toBytes", "data", "isBytes", "concatBytes", "arrays", "sum", "i", "a", "res", "pad", "Hash", "toStr", "wrapConstructor", "hashCons", "hashC", "msg", "toBytes", "tmp", "randomBytes", "bytesLength", "crypto", "setBigUint64", "view", "byteOffset", "value", "isLE", "_32n", "_u32_max", "wh", "wl", "h", "l", "SHA2", "Hash", "blockLen", "outputLen", "padOffset", "createView", "data", "exists", "buffer", "toBytes", "len", "pos", "take", "dataView", "out", "output", "i", "oview", "outLen", "state", "res", "to", "length", "finished", "destroyed", "Chi", "a", "b", "c", "Maj", "SHA256_K", "IV", "SHA256_W", "SHA256", "SHA2", "A", "B", "C", "D", "E", "F", "G", "H", "view", "offset", "i", "W15", "W2", "s0", "rotr", "s1", "sigma1", "T1", "T2", "sha256", "wrapConstructor", "SHA256", "utils_exports", "__export", "bitGet", "bitLen", "bitMask", "bitSet", "bytesToHex", "bytesToNumberBE", "bytesToNumberLE", "concatBytes", "createHmacDrbg", "ensureBytes", "equalBytes", "hexToBytes", "hexToNumber", "isBytes", "numberToBytesBE", "numberToBytesLE", "numberToHexUnpadded", "numberToVarBytesBE", "utf8ToBytes", "validateObject", "_0n", "_1n", "_2n", "a", "hexes", "_", "i", "bytes", "hex", "num", "asciis", "asciiToBase16", "char", "hl", "al", "array", "ai", "hi", "n1", "n2", "n", "len", "title", "expectedLength", "res", "e", "arrays", "sum", "pad", "b", "diff", "str", "pos", "value", "u8n", "data", "u8fr", "arr", "hashLen", "qByteLen", "hmacFn", "v", "k", "reset", "h", "reseed", "seed", "gen", "out", "sl", "pred", "validatorFns", "val", "object", "validators", "optValidators", "checkField", "fieldName", "type", "isOptional", "checkVal", "_0n", "_1n", "_2n", "_3n", "_4n", "_5n", "_8n", "_9n", "_16n", "mod", "a", "b", "result", "pow", "num", "power", "modulo", "res", "pow2", "x", "invert", "number", "y", "u", "v", "q", "r", "m", "n", "tonelliShanks", "P", "legendreC", "Q", "S", "Z", "p1div4", "Fp", "root", "Q1div2", "g", "t2", "ge", "FpSqrt", "c1", "n2", "nv", "i", "isNegativeLE", "FIELD_FIELDS", "validateField", "field", "initial", "opts", "map", "val", "validateObject", "FpPow", "f", "p", "d", "FpInvertBatch", "nums", "tmp", "lastMultiplied", "acc", "inverted", "nLength", "n", "nBitLength", "_nBitLength", "nByteLength", "Field", "ORDER", "bitLen", "isLE", "redef", "_0n", "BITS", "BYTES", "sqrtP", "FpSqrt", "f", "bitMask", "_1n", "num", "mod", "lhs", "rhs", "power", "FpPow", "invert", "lst", "FpInvertBatch", "a", "b", "c", "numberToBytesLE", "numberToBytesBE", "bytes", "bytesToNumberLE", "bytesToNumberBE", "FpSqrtEven", "Fp", "elm", "root", "getFieldBytesLength", "fieldOrder", "bitLength", "getMinHashLength", "length", "mapHashToField", "key", "isLE", "len", "fieldLen", "minLen", "num", "bytesToNumberBE", "bytesToNumberLE", "reduced", "mod", "_1n", "numberToBytesLE", "numberToBytesBE", "_0n", "_1n", "wNAF", "c", "bits", "constTimeNegate", "condition", "item", "neg", "opts", "W", "windows", "windowSize", "elm", "n", "p", "d", "points", "base", "window", "i", "precomputes", "f", "mask", "maxNumber", "shiftBy", "offset", "wbits", "offset1", "offset2", "cond1", "cond2", "P", "precomputesMap", "transform", "comp", "validateBasic", "curve", "validateField", "validateObject", "nLength", "validatePointOpts", "curve", "opts", "validateBasic", "validateObject", "endo", "Fp", "a", "b2n", "h2b", "utils_exports", "DER", "m", "data", "E", "len", "res", "hex", "isBytes", "l", "r", "sBytes", "rBytesLeft", "sig", "slice", "s", "h", "num", "shl", "rhl", "sl", "rl", "_0n", "_1n", "_2n", "_3n", "_4n", "weierstrassPoints", "CURVE", "toBytes", "_c", "point", "_isCompressed", "concatBytes", "fromBytes", "bytes", "tail", "x", "y", "weierstrassEquation", "b", "x2", "x3", "isWithinCurveOrder", "assertGE", "normPrivateKeyToScalar", "key", "lengths", "nByteLength", "wrapPrivateKey", "n", "bytesToHex", "bytesToNumberBE", "ensureBytes", "mod", "pointPrecomputes", "assertPrjPoint", "other", "Point", "px", "py", "pz", "p", "is0", "i", "points", "toInv", "P", "privateKey", "windowSize", "left", "right", "X1", "Y1", "Z1", "X2", "Y2", "Z2", "U1", "U2", "b3", "X3", "Y3", "Z3", "t0", "t1", "t2", "t3", "t4", "t5", "wnaf", "comp", "I", "k1neg", "k1", "k2neg", "k2", "k1p", "k2p", "d", "scalar", "fake", "f1p", "f2p", "f", "Q", "G", "mul", "sum", "iz", "z", "ax", "ay", "zz", "cofactor", "isTorsionFree", "clearCofactor", "isCompressed", "_bits", "wNAF", "validateOpts", "weierstrass", "curveDef", "CURVE_ORDER", "compressedLen", "uncompressedLen", "isValidFieldElement", "modN", "invN", "invert", "cat", "head", "y2", "isYOdd", "numToNByteStr", "numberToBytesBE", "isBiggerThanHalfOrder", "number", "HALF", "normalizeS", "slcNum", "from", "to", "Signature", "recovery", "msgHash", "rec", "bits2int_modN", "radj", "prefix", "R", "ir", "u1", "u2", "hexToBytes", "utils", "length", "getMinHashLength", "mapHashToField", "getPublicKey", "isProbPub", "item", "arr", "str", "getSharedSecret", "privateA", "publicB", "bits2int", "delta", "ORDER_MASK", "bitMask", "int2octets", "prepSig", "defaultSigOpts", "k", "hash", "randomBytes", "lowS", "prehash", "ent", "h1int", "seedArgs", "e", "seed", "k2sig", "kBytes", "ik", "q", "normS", "defaultVerOpts", "sign", "privKey", "C", "createHmacDrbg", "verify", "signature", "publicKey", "sg", "_sig", "derError", "error", "is", "HMAC", "Hash", "hash", "_key", "key", "toBytes", "blockLen", "pad", "i", "buf", "exists", "out", "bytes", "to", "oHash", "iHash", "finished", "destroyed", "outputLen", "hmac", "message", "getHash", "hash", "key", "msgs", "hmac", "concatBytes", "randomBytes", "createCurve", "curveDef", "defHash", "create", "weierstrass", "secp256k1P", "secp256k1N", "_1n", "_2n", "divNearest", "a", "b", "sqrtMod", "y", "P", "_3n", "_6n", "_11n", "_22n", "_23n", "_44n", "_88n", "b2", "b3", "b6", "pow2", "b9", "b11", "b22", "b44", "b88", "b176", "b220", "b223", "t1", "t2", "root", "Fp", "Field", "secp256k1", "createCurve", "k", "n", "a1", "b1", "a2", "POW_2_128", "c1", "c2", "k1", "mod", "k2", "k1neg", "k2neg", "sha256", "_0n", "Point", "secp256k1", "canonicalize", "obj", "sortObjKeys", "sortedKeys", "sortedObj", "key", "KEY_URI_PREFIX_JWK", "computeJwkThumbprint", "jwk", "keyType", "normalizedJwk", "removeUndefinedProperties", "serializedJwk", "canonicalize", "utf8Bytes", "Convert", "digest", "Sha256", "isEcPrivateJwk", "obj", "isEcPublicJwk", "isOctPrivateJwk", "isOkpPrivateJwk", "isOkpPublicJwk", "isPrivateJwk", "isPublicJwk", "Secp256k1", "_Secp256k1", "signature", "signatureObject", "secp256k1", "privateKeyBytes", "point", "privateKey", "Convert", "computeJwkThumbprint", "publicKeyBytes", "publicKey", "key", "derSignature", "isEcPrivateJwk", "d", "isEcPublicJwk", "prefix", "x", "y", "privateKeyA", "publicKeyB", "privateKeyABytes", "publicKeyBBytes", "data", "digest", "sha256", "keyBytes", "numberToBytesBE", "Fp", "Field", "CURVE_A", "CURVE_B", "p256", "createCurve", "sha256", "secp256r1", "Secp256r1", "_Secp256r1", "signature", "signatureObject", "secp256r1", "privateKeyBytes", "point", "privateKey", "Convert", "computeJwkThumbprint", "publicKeyBytes", "publicKey", "key", "derSignature", "isEcPrivateJwk", "d", "isEcPublicJwk", "prefix", "x", "y", "privateKeyA", "publicKeyB", "privateKeyABytes", "publicKeyBBytes", "data", "digest", "sha256", "keyBytes", "numberToBytesBE", "EcdsaAlgorithm", "CryptoAlgorithm", "key", "isEcPrivateJwk", "publicKey", "Secp256k1", "Secp256r1", "algorithm", "privateKey", "data", "signature", "isEcPublicJwk", "U32_MASK64", "_32n", "fromBig", "n", "le", "split", "lst", "Ah", "Al", "h", "l", "toBig", "shrSH", "_l", "s", "shrSL", "rotrSH", "rotrSL", "rotrBH", "rotrBL", "rotr32H", "_h", "rotr32L", "rotlSH", "rotlSL", "rotlBH", "rotlBL", "add", "Bh", "Bl", "add3L", "Cl", "add3H", "low", "Ch", "add4L", "Dl", "add4H", "Dh", "add5L", "El", "add5H", "Eh", "u64", "fromBig", "split", "toBig", "shrSH", "shrSL", "rotrSH", "rotrSL", "rotrBH", "rotrBL", "rotr32H", "rotr32L", "rotlSH", "rotlSL", "rotlBH", "rotlBL", "add", "add3L", "add3H", "add4L", "add4H", "add5H", "add5L", "u64_default", "SHA512_Kh", "SHA512_Kl", "u64_default", "n", "SHA512_W_H", "SHA512_W_L", "SHA512", "SHA2", "Ah", "Al", "Bh", "Bl", "Ch", "Cl", "Dh", "Dl", "Eh", "El", "Fh", "Fl", "Gh", "Gl", "Hh", "Hl", "view", "offset", "i", "W15h", "W15l", "s0h", "s0l", "W2h", "W2l", "s1h", "s1l", "SUMl", "SUMh", "sigma1h", "sigma1l", "CHIh", "CHIl", "T1ll", "T1h", "T1l", "sigma0h", "sigma0l", "MAJh", "MAJl", "All", "sha512", "wrapConstructor", "SHA512", "_0n", "_1n", "_2n", "_8n", "VERIFY_DEFAULT", "validateOpts", "curve", "opts", "validateBasic", "validateObject", "twistedEdwards", "curveDef", "CURVE", "Fp", "CURVE_ORDER", "prehash", "cHash", "randomBytes", "nByteLength", "cofactor", "MASK", "modP", "uvRatio", "u", "v", "adjustScalarBytes", "bytes", "domain", "data", "ctx", "phflag", "inBig", "n", "inRange", "max", "in0MaskRange", "assertInRange", "assertGE0", "pointPrecomputes", "isPoint", "other", "Point", "ex", "ey", "ez", "et", "p", "x", "y", "points", "toInv", "i", "windowSize", "a", "d", "X", "Y", "Z", "T", "X2", "Y2", "Z2", "Z4", "aX2", "left", "right", "XY", "ZT", "X1", "Y1", "Z1", "X1Z2", "X2Z1", "Y1Z2", "Y2Z1", "A", "B", "C", "D", "x1y1", "E", "G", "F", "H", "X3", "Y3", "T3", "Z3", "T1", "T2", "wnaf", "scalar", "f", "I", "iz", "z", "is0", "ax", "ay", "zz", "hex", "zip215", "len", "ensureBytes", "normed", "lastByte", "bytesToNumberLE", "y2", "isValid", "isXOdd", "isLastByteOdd", "privKey", "getExtendedPublicKey", "numberToBytesLE", "bytesToHex", "wNAF", "modN", "mod", "modN_LE", "hash", "key", "hashed", "head", "prefix", "point", "pointBytes", "getPublicKey", "hashDomainToScalar", "context", "msgs", "msg", "concatBytes", "sign", "options", "r", "R", "k", "s", "res", "verifyOpts", "verify", "sig", "publicKey", "SB", "_0n", "_1n", "validateOpts", "curve", "validateObject", "montgomery", "curveDef", "CURVE", "P", "modP", "n", "mod", "montgomeryBits", "montgomeryBytes", "fieldLen", "adjustScalarBytes", "bytes", "powPminus2", "x", "pow", "cswap", "swap", "x_2", "x_3", "dummy", "assertFieldElement", "a24", "montgomeryLadder", "pointU", "scalar", "u", "k", "x_1", "z_2", "z_3", "sw", "t", "k_t", "A", "AA", "B", "BB", "E", "C", "D", "DA", "CB", "dacb", "da_cb", "z2", "encodeUCoordinate", "numberToBytesLE", "decodeUCoordinate", "uEnc", "ensureBytes", "bytesToNumberLE", "decodeScalar", "len", "scalarMult", "_scalar", "pu", "GuBytes", "scalarMultBase", "privateKey", "publicKey", "ED25519_P", "ED25519_SQRT_M1", "_0n", "_1n", "_2n", "_5n", "_10n", "_20n", "_40n", "_80n", "ed25519_pow_2_252_3", "x", "P", "b2", "b4", "pow2", "b5", "b10", "b20", "b40", "b80", "b160", "b240", "b250", "adjustScalarBytes", "bytes", "uvRatio", "u", "v", "v3", "mod", "v7", "pow", "vx2", "root1", "root2", "useRoot1", "useRoot2", "noRoot", "isNegativeLE", "Fp", "Field", "ED25519_P", "ed25519Defaults", "sha512", "randomBytes", "adjustScalarBytes", "uvRatio", "ed25519", "twistedEdwards", "ed25519_domain", "data", "ctx", "phflag", "concatBytes", "utf8ToBytes", "ed25519ctx", "ed25519ph", "x25519", "montgomery", "x", "P", "pow_p_5_8", "b2", "ed25519_pow_2_252_3", "mod", "pow2", "edwardsToMontgomeryPub", "edwardsPub", "y", "_1n", "edwardsToMontgomeryPriv", "edwardsPriv", "hashed", "ed25519Defaults", "ELL2_C1", "Fp", "ELL2_C2", "_2n", "ELL2_C3", "ELL2_C4", "ELL2_J", "ELL2_C1_EDWARDS", "FpSqrtEven", "Fp", "SQRT_AD_MINUS_ONE", "INVSQRT_A_MINUS_D", "ONE_MINUS_D_SQ", "D_MINUS_ONE_SQ", "MAX_255B", "Ed25519", "_Ed25519", "privateKeyBytes", "publicKeyBytes", "ed25519", "privateKey", "Convert", "computeJwkThumbprint", "publicKey", "key", "ed25519PrivateKeyBytes", "x25519PrivateKeyBytes", "edwardsToMontgomeryPriv", "x25519PublicKeyBytes", "x25519", "x25519PrivateKey", "ed25519PublicKeyBytes", "edwardsToMontgomeryPub", "x25519PublicKey", "isOkpPrivateJwk", "d", "isOkpPublicJwk", "data", "signature", "EdDsaAlgorithm", "CryptoAlgorithm", "key", "isOkpPrivateJwk", "publicKey", "Ed25519", "algorithm", "privateKey", "data", "signature", "isOkpPublicJwk", "supportedAlgorithms", "EdDsaAlgorithm", "EcdsaAlgorithm", "Sha2Algorithm", "LocalKeyManager", "params", "MemoryStore", "algorithm", "data", "keyUri", "key", "KEY_URI_PREFIX_JWK", "jwkThumbprint", "computeJwkThumbprint", "privateKey", "isPrivateJwk", "signature", "AlgorithmImplementation", "algProperty", "crvProperty", "algName", "algorithmInfo", "CryptoUtils", "_CryptoUtils", "publicKey", "curveToJoseAlgorithm", "bytesLength", "randomBytes", "crypto", "length", "max", "pin", "rejectionRange", "randomBuffer", "cr", "getWebcryptoSubtle", "cr", "AES_BLOCK_SIZE", "AES_KEY_LENGTHS", "COUNTER_MAX_LENGTH", "AesCtr", "privateKeyBytes", "privateKey", "Convert", "computeJwkThumbprint", "key", "data", "counter", "length", "webCrypto", "getWebcryptoSubtle", "webCryptoKey", "plaintextBuffer", "ciphertextBuffer", "ext", "key_ops", "isOctPrivateJwk", "AesCtrAlgorithm", "CryptoAlgorithm", "params", "AesCtr", "algorithm", "length", "privateKey", "number", "n", "bool", "b", "isBytes", "a", "bytes", "lengths", "exists", "instance", "checkFinished", "output", "out", "bytes", "min", "u32", "arr", "createView", "isLE", "utf8ToBytes", "str", "toBytes", "data", "utf8ToBytes", "isBytes", "checkOpts", "defaults", "opts", "equalBytes", "a", "b", "diff", "i", "wrapCipher", "params", "c", "setBigUint64", "view", "byteOffset", "value", "isLE", "_32n", "_u32_max", "wh", "wl", "h", "l", "utils", "key", "keyParams", "cryptParams", "plaintext", "cr", "getWebcryptoSubtle", "iKey", "ciphertext", "mode", "getCryptParams", "algo", "nonce", "AAD", "generate", "bytes", "cbc", "ctr", "gcm", "AES_GCM_IV_LENGTH", "AES_KEY_LENGTHS", "AES_GCM_TAG_LENGTHS", "AesGcm", "privateKeyBytes", "privateKey", "Convert", "computeJwkThumbprint", "key", "data", "iv", "additionalData", "tagLength", "webCrypto", "getWebcryptoSubtle", "webCryptoKey", "algorithm", "plaintextBuffer", "ciphertextBuffer", "length", "ext", "key_ops", "isOctPrivateJwk", "AesGcmAlgorithm", "CryptoAlgorithm", "params", "AesGcm", "algorithm", "length", "privateKey", "ConcatKdf", "_ConcatKdf", "keyDataLen", "fixedInfo", "sharedSecret", "roundCount", "counter", "fixedInfoBytes", "sha256", "concatBytes", "params", "algorithmId", "partyUInfo", "partyVInfo", "suppPubInfo", "suppPrivInfo", "data", "variableLength", "encodedData", "dataType", "universalTypeOf", "dataU8A", "Convert", "bufferLength", "Pbkdf2", "hash", "password", "salt", "iterations", "length", "webCryptoKey", "crypto", "derivedKeyBuffer", "X25519", "_X25519", "privateKeyBytes", "publicKeyBytes", "x25519", "privateKey", "Convert", "computeJwkThumbprint", "publicKey", "key", "isOkpPrivateJwk", "d", "isOkpPublicJwk", "privateKeyA", "publicKeyB", "privateKeyABytes", "publicKeyBBytes", "u8to16", "a", "i", "Poly1305", "key", "toBytes", "bytes", "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "data", "offset", "isLast", "hibit", "h", "r", "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "h0", "h1", "h2", "h3", "h4", "h5", "h6", "h7", "h8", "h9", "c", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "pad", "g", "mask", "f", "exists", "buffer", "blockLen", "len", "pos", "take", "out", "output", "opos", "outputLen", "res", "wrapConstructorWithKey", "hashCons", "hashC", "msg", "tmp", "poly1305", "_utf8ToBytes", "str", "c", "sigma16", "sigma32", "sigma16_32", "u32", "sigma32_32", "sigma", "rotl", "a", "b", "isAligned32", "BLOCK_LEN", "BLOCK_LEN32", "MAX_COUNTER", "U32_EMPTY", "runCipher", "core", "key", "nonce", "data", "output", "counter", "rounds", "len", "block", "b32", "isAligned", "d32", "o32", "pos", "take", "pos32", "j", "posj", "createCipher", "opts", "allowShortKeys", "extendNonceFn", "counterLength", "counterRight", "checkOpts", "number", "bool", "bytes", "toClean", "l", "k", "k32", "nonceNcLen", "nc", "n32", "chachaCore", "s", "k", "n", "out", "cnt", "rounds", "y00", "y01", "y02", "y03", "y04", "y05", "y06", "y07", "y08", "y09", "y10", "y11", "y12", "y13", "y14", "y15", "x00", "x01", "x02", "x03", "x04", "x05", "x06", "x07", "x08", "x09", "x10", "x11", "x12", "x13", "x14", "x15", "r", "rotl", "oi", "hchacha", "i", "o32", "chacha20", "createCipher", "chachaCore", "xchacha20", "hchacha", "ZEROS16", "updatePadded", "h", "msg", "left", "ZEROS32", "computeTag", "fn", "key", "nonce", "data", "AAD", "authKey", "poly1305", "num", "view", "createView", "setBigUint64", "res", "_poly1305_aead", "xorStream", "bytes", "plaintext", "output", "plength", "clength", "tag", "ciphertext", "passedTag", "equalBytes", "chacha20poly1305", "wrapCipher", "chacha20", "xchacha20poly1305", "xchacha20", "XChaCha20", "_XChaCha20", "privateKeyBytes", "privateKey", "Convert", "computeJwkThumbprint", "data", "key", "nonce", "xchacha20", "webCrypto", "getWebcryptoSubtle", "webCryptoKey", "alg", "ext", "key_ops", "isOctPrivateJwk", "POLY1305_TAG_LENGTH", "XChaCha20Poly1305", "_XChaCha20Poly1305", "privateKeyBytes", "privateKey", "Convert", "computeJwkThumbprint", "data", "key", "nonce", "additionalData", "xchacha20poly1305", "webCrypto", "getWebcryptoSubtle", "webCryptoKey", "alg", "ext", "key_ops", "isOctPrivateJwk"]
}
