{
  "version": 3,
  "sources": ["../../../node_modules/base64-js/index.js", "../../../node_modules/ieee754/index.js", "../../../node_modules/node-stdlib-browser/node_modules/buffer/index.js", "../../../node_modules/process/browser.js", "../../../node_modules/node-stdlib-browser/helpers/esbuild/shim.js", "../../../node_modules/ms/index.js", "../../../node_modules/err-code/index.js", "../../../node_modules/@protobufjs/aspromise/index.js", "../../../node_modules/@protobufjs/base64/index.js", "../../../node_modules/@protobufjs/eventemitter/index.js", "../../../node_modules/@protobufjs/float/index.js", "../../../node_modules/@protobufjs/inquire/index.js", "../../../node_modules/@protobufjs/utf8/index.js", "../../../node_modules/@protobufjs/pool/index.js", "../../../node_modules/protobufjs/src/util/longbits.js", "../../../node_modules/protobufjs/src/util/minimal.js", "../../../node_modules/protobufjs/src/reader.js", "../../../node_modules/protobufjs/src/reader_buffer.js", "../../../node_modules/protobufjs/src/writer.js", "../../../node_modules/protobufjs/src/writer_buffer.js", "../../../node_modules/murmurhash3js-revisited/lib/murmurHash3js.js", "../../../node_modules/murmurhash3js-revisited/index.js", "../../../node_modules/sparse-array/index.js", "../../../node_modules/jsbi/tsc-out/jsbi.mjs", "../../../node_modules/level-supports/index.js", "../../../node_modules/module-error/index.js", "../../../node_modules/level-transcoder/lib/text-endec.js", "../../../node_modules/level-transcoder/lib/encoding.js", "../../../node_modules/level-transcoder/lib/formats.js", "../../../node_modules/level-transcoder/lib/encodings.js", "../../../node_modules/level-transcoder/index.js", "../../../node_modules/events/events.js", "../../../node_modules/catering/next-tick-browser.js", "../../../node_modules/catering/index.js", "../../../node_modules/abstract-level/lib/common.js", "../../../node_modules/abstract-level/abstract-iterator.js", "../../../node_modules/abstract-level/lib/default-kv-iterator.js", "../../../node_modules/abstract-level/lib/deferred-iterator.js", "../../../node_modules/abstract-level/abstract-chained-batch.js", "../../../node_modules/abstract-level/lib/default-chained-batch.js", "../../../node_modules/abstract-level/lib/range-options.js", "../../../node_modules/queue-microtask/index.js", "../../../node_modules/abstract-level/lib/next-tick-browser.js", "../../../node_modules/abstract-level/lib/abstract-sublevel-iterator.js", "../../../node_modules/abstract-level/lib/abstract-sublevel.js", "../../../node_modules/abstract-level/abstract-level.js", "../../../node_modules/abstract-level/index.js", "../../../node_modules/run-parallel-limit/index.js", "../../../node_modules/browser-level/util/key-range.js", "../../../node_modules/browser-level/util/deserialize.js", "../../../node_modules/browser-level/iterator.js", "../../../node_modules/browser-level/util/clear.js", "../../../node_modules/browser-level/index.js", "../../../node_modules/level/browser.js", "../../../node_modules/eventemitter3/index.js", "../../../node_modules/readable-stream/lib/ours/primordials.js", "../../../node_modules/readable-stream/lib/ours/util.js", "../../../node_modules/abort-controller/browser.js", "../../../node_modules/readable-stream/lib/ours/errors.js", "../../../node_modules/readable-stream/lib/internal/validators.js", "../../../node_modules/readable-stream/lib/internal/streams/utils.js", "../../../node_modules/readable-stream/lib/internal/streams/end-of-stream.js", "../../../node_modules/readable-stream/lib/internal/streams/destroy.js", "../../../node_modules/readable-stream/lib/internal/streams/legacy.js", "../../../node_modules/readable-stream/lib/internal/streams/add-abort-signal.js", "../../../node_modules/readable-stream/lib/internal/streams/buffer_list.js", "../../../node_modules/readable-stream/lib/internal/streams/state.js", "../../../node_modules/string_decoder/node_modules/safe-buffer/index.js", "../../../node_modules/string_decoder/lib/string_decoder.js", "../../../node_modules/readable-stream/lib/internal/streams/from.js", "../../../node_modules/readable-stream/lib/internal/streams/readable.js", "../../../node_modules/readable-stream/lib/internal/streams/writable.js", "../../../node_modules/readable-stream/lib/internal/streams/duplexify.js", "../../../node_modules/readable-stream/lib/internal/streams/duplex.js", "../../../node_modules/readable-stream/lib/internal/streams/transform.js", "../../../node_modules/readable-stream/lib/internal/streams/passthrough.js", "../../../node_modules/readable-stream/lib/internal/streams/pipeline.js", "../../../node_modules/readable-stream/lib/internal/streams/compose.js", "../../../node_modules/readable-stream/lib/internal/streams/operators.js", "../../../node_modules/inherits/inherits_browser.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/stream-browser.js", "../../../node_modules/has-symbols/shams.js", "../../../node_modules/has-tostringtag/shams.js", "../../../node_modules/has-symbols/index.js", "../../../node_modules/has-proto/index.js", "../../../node_modules/function-bind/implementation.js", "../../../node_modules/function-bind/index.js", "../../../node_modules/has/src/index.js", "../../../node_modules/get-intrinsic/index.js", "../../../node_modules/call-bind/index.js", "../../../node_modules/call-bind/callBound.js", "../../../node_modules/is-arguments/index.js", "../../../node_modules/is-generator-function/index.js", "../../../node_modules/is-callable/index.js", "../../../node_modules/for-each/index.js", "../../../node_modules/available-typed-arrays/index.js", "../../../node_modules/gopd/index.js", "../../../node_modules/is-typed-array/index.js", "../../../node_modules/which-typed-array/index.js", "../../../node_modules/util/support/types.js", "../../../node_modules/util/support/isBufferBrowser.js", "../../../node_modules/util/util.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/buffer_list.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/destroy.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/errors-browser.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/state.js", "../../../node_modules/util-deprecate/browser.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_writable.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_duplex.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/end-of-stream.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/async_iterator.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/from-browser.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_readable.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_transform.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_passthrough.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/pipeline.js", "../../../node_modules/stream-browserify/index.js", "../../../node_modules/readable-stream/lib/stream/promises.js", "../../../node_modules/readable-stream/lib/stream.js", "../../../node_modules/readable-stream/lib/ours/browser.js", "../../../node_modules/secp256k1/lib/index.js", "../../../node_modules/elliptic/package.json", "../../../node_modules/bn.js/lib/bn.js", "../../../node_modules/minimalistic-assert/index.js", "../../../node_modules/minimalistic-crypto-utils/lib/utils.js", "../../../node_modules/elliptic/lib/elliptic/utils.js", "../../../node_modules/safe-buffer/index.js", "../../../node_modules/randombytes/browser.js", "../../../node_modules/hash-base/node_modules/safe-buffer/index.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream-browser.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/buffer_list.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/destroy.js", "../../../node_modules/hash-base/node_modules/readable-stream/errors-browser.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/state.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/_stream_writable.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/_stream_duplex.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/end-of-stream.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/async_iterator.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from-browser.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/_stream_readable.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/_stream_transform.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/_stream_passthrough.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/pipeline.js", "../../../node_modules/hash-base/node_modules/readable-stream/readable-browser.js", "../../../node_modules/hash-base/index.js", "../../../node_modules/md5.js/index.js", "../../../node_modules/ripemd160/index.js", "../../../node_modules/sha.js/hash.js", "../../../node_modules/sha.js/sha.js", "../../../node_modules/sha.js/sha1.js", "../../../node_modules/sha.js/sha256.js", "../../../node_modules/sha.js/sha224.js", "../../../node_modules/sha.js/sha512.js", "../../../node_modules/sha.js/sha384.js", "../../../node_modules/sha.js/index.js", "../../../node_modules/cipher-base/index.js", "../../../node_modules/create-hash/browser.js", "../../../node_modules/create-hmac/legacy.js", "../../../node_modules/create-hash/md5.js", "../../../node_modules/create-hmac/browser.js", "../../../node_modules/browserify-sign/browser/algorithms.json", "../../../node_modules/browserify-sign/algos.js", "../../../node_modules/pbkdf2/lib/precondition.js", "../../../node_modules/pbkdf2/lib/default-encoding.js", "../../../node_modules/pbkdf2/lib/to-buffer.js", "../../../node_modules/pbkdf2/lib/sync-browser.js", "../../../node_modules/pbkdf2/lib/async.js", "../../../node_modules/pbkdf2/browser.js", "../../../node_modules/des.js/lib/des/utils.js", "../../../node_modules/des.js/lib/des/cipher.js", "../../../node_modules/des.js/lib/des/des.js", "../../../node_modules/des.js/lib/des/cbc.js", "../../../node_modules/des.js/lib/des/ede.js", "../../../node_modules/des.js/lib/des.js", "../../../node_modules/browserify-des/index.js", "../../../node_modules/browserify-aes/modes/ecb.js", "../../../node_modules/buffer-xor/index.js", "../../../node_modules/browserify-aes/modes/cbc.js", "../../../node_modules/browserify-aes/modes/cfb.js", "../../../node_modules/browserify-aes/modes/cfb8.js", "../../../node_modules/browserify-aes/modes/cfb1.js", "../../../node_modules/browserify-aes/modes/ofb.js", "../../../node_modules/browserify-aes/incr32.js", "../../../node_modules/browserify-aes/modes/ctr.js", "../../../node_modules/browserify-aes/modes/list.json", "../../../node_modules/browserify-aes/modes/index.js", "../../../node_modules/browserify-aes/aes.js", "../../../node_modules/browserify-aes/ghash.js", "../../../node_modules/browserify-aes/authCipher.js", "../../../node_modules/browserify-aes/streamCipher.js", "../../../node_modules/evp_bytestokey/index.js", "../../../node_modules/browserify-aes/encrypter.js", "../../../node_modules/browserify-aes/decrypter.js", "../../../node_modules/browserify-aes/browser.js", "../../../node_modules/browserify-des/modes.js", "../../../node_modules/browserify-cipher/browser.js", "../../../node_modules/miller-rabin/lib/mr.js", "../../../node_modules/diffie-hellman/lib/generatePrime.js", "../../../node_modules/diffie-hellman/lib/primes.json", "../../../node_modules/diffie-hellman/lib/dh.js", "../../../node_modules/diffie-hellman/browser.js", "../../../node_modules/browserify-sign/node_modules/safe-buffer/index.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/buffer_list.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/errors-browser.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/state.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/end-of-stream.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/async_iterator.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/from-browser.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/pipeline.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js", "../../../node_modules/browserify-rsa/node_modules/bn.js/lib/bn.js", "../../../node_modules/browserify-rsa/index.js", "../../../node_modules/browserify-sign/node_modules/bn.js/lib/bn.js", "../../../node_modules/safer-buffer/safer.js", "../../../node_modules/asn1.js/lib/asn1/base/reporter.js", "../../../node_modules/asn1.js/lib/asn1/base/buffer.js", "../../../node_modules/asn1.js/lib/asn1/base/node.js", "../../../node_modules/asn1.js/lib/asn1/constants/der.js", "../../../node_modules/asn1.js/lib/asn1/encoders/der.js", "../../../node_modules/asn1.js/lib/asn1/encoders/pem.js", "../../../node_modules/asn1.js/lib/asn1/encoders/index.js", "../../../node_modules/asn1.js/lib/asn1/decoders/der.js", "../../../node_modules/asn1.js/lib/asn1/decoders/pem.js", "../../../node_modules/asn1.js/lib/asn1/decoders/index.js", "../../../node_modules/asn1.js/lib/asn1/api.js", "../../../node_modules/asn1.js/lib/asn1/base/index.js", "../../../node_modules/asn1.js/lib/asn1/constants/index.js", "../../../node_modules/asn1.js/lib/asn1.js", "../../../node_modules/parse-asn1/certificate.js", "../../../node_modules/parse-asn1/asn1.js", "../../../node_modules/parse-asn1/aesid.json", "../../../node_modules/parse-asn1/fixProc.js", "../../../node_modules/parse-asn1/index.js", "../../../node_modules/browserify-sign/browser/curves.json", "../../../node_modules/browserify-sign/browser/sign.js", "../../../node_modules/browserify-sign/browser/verify.js", "../../../node_modules/browserify-sign/browser/index.js", "../../../node_modules/create-ecdh/browser.js", "../../../node_modules/public-encrypt/mgf.js", "../../../node_modules/public-encrypt/xor.js", "../../../node_modules/public-encrypt/withPublic.js", "../../../node_modules/public-encrypt/publicEncrypt.js", "../../../node_modules/public-encrypt/privateDecrypt.js", "../../../node_modules/public-encrypt/browser.js", "../../../node_modules/randomfill/browser.js", "../../../node_modules/crypto-browserify/index.js", "../../../node_modules/brorand/index.js", "../../../node_modules/elliptic/lib/elliptic/curve/base.js", "../../../node_modules/elliptic/lib/elliptic/curve/short.js", "../../../node_modules/elliptic/lib/elliptic/curve/mont.js", "../../../node_modules/elliptic/lib/elliptic/curve/edwards.js", "../../../node_modules/elliptic/lib/elliptic/curve/index.js", "../../../node_modules/hash.js/lib/hash/utils.js", "../../../node_modules/hash.js/lib/hash/common.js", "../../../node_modules/hash.js/lib/hash/sha/common.js", "../../../node_modules/hash.js/lib/hash/sha/1.js", "../../../node_modules/hash.js/lib/hash/sha/256.js", "../../../node_modules/hash.js/lib/hash/sha/224.js", "../../../node_modules/hash.js/lib/hash/sha/512.js", "../../../node_modules/hash.js/lib/hash/sha/384.js", "../../../node_modules/hash.js/lib/hash/sha.js", "../../../node_modules/hash.js/lib/hash/ripemd.js", "../../../node_modules/hash.js/lib/hash/hmac.js", "../../../node_modules/hash.js/lib/hash.js", "../../../node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js", "../../../node_modules/elliptic/lib/elliptic/curves.js", "../../../node_modules/hmac-drbg/lib/hmac-drbg.js", "../../../node_modules/elliptic/lib/elliptic/ec/key.js", "../../../node_modules/elliptic/lib/elliptic/ec/signature.js", "../../../node_modules/elliptic/lib/elliptic/ec/index.js", "../../../node_modules/elliptic/lib/elliptic/eddsa/key.js", "../../../node_modules/elliptic/lib/elliptic/eddsa/signature.js", "../../../node_modules/elliptic/lib/elliptic/eddsa/index.js", "../../../node_modules/elliptic/lib/elliptic.js", "../../../node_modules/secp256k1/lib/elliptic.js", "../../../node_modules/secp256k1/elliptic.js", "../../../node_modules/lodash/_freeGlobal.js", "../../../node_modules/lodash/_root.js", "../../../node_modules/lodash/_Symbol.js", "../../../node_modules/lodash/_getRawTag.js", "../../../node_modules/lodash/_objectToString.js", "../../../node_modules/lodash/_baseGetTag.js", "../../../node_modules/lodash/_overArg.js", "../../../node_modules/lodash/_getPrototype.js", "../../../node_modules/lodash/isObjectLike.js", "../../../node_modules/lodash/isPlainObject.js", "../../../node_modules/flat/index.js", "../../../node_modules/varint/encode.js", "../../../node_modules/varint/decode.js", "../../../node_modules/varint/length.js", "../../../node_modules/varint/index.js", "../../../node_modules/@tbd54566975/dwn-sdk-js/node_modules/cross-fetch/dist/browser-ponyfill.js", "../../../node_modules/eciesjs/dist/consts.js", "../../../node_modules/@noble/hashes/src/_assert.ts", "../../../node_modules/@noble/hashes/src/crypto.ts", "../../../node_modules/@noble/hashes/src/utils.ts", "../../../node_modules/@noble/hashes/src/_sha2.ts", "../../../node_modules/@noble/hashes/src/sha256.ts", "../../../node_modules/@noble/curves/src/abstract/utils.ts", "../../../node_modules/@noble/curves/src/abstract/modular.ts", "../../../node_modules/@noble/curves/src/abstract/curve.ts", "../../../node_modules/@noble/curves/src/abstract/weierstrass.ts", "../../../node_modules/@noble/curves/src/abstract/hash-to-curve.ts", "../../../node_modules/@noble/hashes/src/hmac.ts", "../../../node_modules/@noble/curves/src/_shortw_utils.ts", "../../../node_modules/@noble/curves/src/secp256k1.ts", "../../../node_modules/@noble/hashes/src/hkdf.ts", "../../../node_modules/eciesjs/dist/utils.js", "../../../node_modules/eciesjs/dist/keys/PublicKey.js", "../../../node_modules/eciesjs/dist/keys/PrivateKey.js", "../../../node_modules/eciesjs/dist/keys/index.js", "../../../node_modules/eciesjs/dist/index.js", "../../../node_modules/uri-js/src/index.ts", "../../../node_modules/uri-js/src/schemes/urn-uuid.ts", "../../../node_modules/uri-js/src/schemes/urn.ts", "../../../node_modules/uri-js/src/schemes/mailto.ts", "../../../node_modules/uri-js/src/schemes/wss.ts", "../../../node_modules/uri-js/src/schemes/ws.ts", "../../../node_modules/uri-js/src/schemes/https.ts", "../../../node_modules/uri-js/src/schemes/http.ts", "../../../node_modules/uri-js/src/uri.ts", "../../../node_modules/uri-js/node_modules/punycode/punycode.es6.js", "../../../node_modules/uri-js/src/regexps-iri.ts", "../../../node_modules/uri-js/src/regexps-uri.ts", "../../../node_modules/uri-js/src/util.ts", "../../../node_modules/canonicalize/lib/canonicalize.js", "../../../node_modules/@multiformats/base-x/src/index.js", "../../../node_modules/multibase/src/util.js", "../../../node_modules/multibase/src/base.js", "../../../node_modules/multibase/src/rfc4648.js", "../../../node_modules/multibase/src/constants.js", "../../../node_modules/multibase/src/index.js", "../../../node_modules/multihashes/node_modules/varint/encode.js", "../../../node_modules/multihashes/node_modules/varint/decode.js", "../../../node_modules/multihashes/node_modules/varint/length.js", "../../../node_modules/multihashes/node_modules/varint/index.js", "../../../node_modules/multihashes/src/constants.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/vendor/base-x.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bytes.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/base.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/identity.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/base2.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/base8.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/base10.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/base16.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/base32.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/base36.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/base58.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/base64.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/base256emoji.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/vendor/varint.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/varint.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/hashes/digest.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/hashes/hasher.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/hashes/sha2-browser.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/hashes/identity.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/codecs/raw.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/codecs/json.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/cid.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/index.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/basics.js", "../../../node_modules/multihashes/node_modules/uint8arrays/esm/src/util/as-uint8array.js", "../../../node_modules/multihashes/node_modules/uint8arrays/esm/src/alloc.js", "../../../node_modules/multihashes/node_modules/uint8arrays/esm/src/util/bases.js", "../../../node_modules/multihashes/node_modules/uint8arrays/esm/src/to-string.js", "../../../node_modules/multihashes/node_modules/uint8arrays/esm/src/from-string.js", "../../../node_modules/multihashes/node_modules/uint8arrays/esm/src/concat.js", "../../../node_modules/multihashes/src/index.js", "../../../node_modules/@decentralized-identity/ion-tools/node_modules/cross-fetch/dist/browser-ponyfill.js", "../../../node_modules/cross-fetch/dist/browser-ponyfill.js", "../../../node_modules/hash-wasm/dist/index.umd.js", "../../../node_modules/buffer/index.js", "../../../node_modules/@decentralized-identity/ion-pow-sdk/src/index.js", "../../../node_modules/tweetnacl/nacl-fast.js", "../../../node_modules/ed2curve/ed2curve.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/internal/streams/stream-browser.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/internal/streams/buffer_list.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/internal/streams/destroy.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/errors-browser.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/internal/streams/state.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/_stream_writable.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/_stream_duplex.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/internal/streams/end-of-stream.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/internal/streams/async_iterator.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/internal/streams/from-browser.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/_stream_readable.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/_stream_transform.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/_stream_passthrough.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/internal/streams/pipeline.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/readable-browser.js", "../../../node_modules/readable-web-to-node-stream/lib/index.js", "../src/main.ts", "../src/web5.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/index.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/core/tenant-gate.ts", "../../../node_modules/@ipld/dag-cbor/src/index.js", "../../../node_modules/cborg/esm/cborg.js", "../../../node_modules/cborg/esm/lib/encode.js", "../../../node_modules/cborg/esm/lib/is.js", "../../../node_modules/cborg/esm/lib/token.js", "../../../node_modules/cborg/esm/lib/bl.js", "../../../node_modules/cborg/esm/lib/byte-utils.js", "../../../node_modules/cborg/esm/lib/common.js", "../../../node_modules/cborg/esm/lib/jump.js", "../../../node_modules/cborg/esm/lib/0uint.js", "../../../node_modules/cborg/esm/lib/1negint.js", "../../../node_modules/cborg/esm/lib/2bytes.js", "../../../node_modules/cborg/esm/lib/3string.js", "../../../node_modules/cborg/esm/lib/4array.js", "../../../node_modules/cborg/esm/lib/5map.js", "../../../node_modules/cborg/esm/lib/6tag.js", "../../../node_modules/cborg/esm/lib/7float.js", "../../../node_modules/cborg/esm/lib/decode.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/src/cid.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/src/varint.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/vendor/varint.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/src/hashes/digest.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/src/bytes.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/src/bases/base58.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/src/bases/base.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/vendor/base-x.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/src/bases/interface.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/src/bases/base32.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/src/link/interface.js", "../../../node_modules/multiformats/src/cid.js", "../../../node_modules/multiformats/src/varint.js", "../../../node_modules/multiformats/vendor/varint.js", "../../../node_modules/multiformats/src/hashes/digest.js", "../../../node_modules/multiformats/src/bytes.js", "../../../node_modules/multiformats/src/bases/base58.js", "../../../node_modules/multiformats/src/bases/base.js", "../../../node_modules/multiformats/vendor/base-x.js", "../../../node_modules/multiformats/src/bases/interface.js", "../../../node_modules/multiformats/src/bases/base32.js", "../../../node_modules/multiformats/src/link/interface.js", "../../../node_modules/ipfs-unixfs-importer/src/index.ts", "../../../node_modules/it-first/src/index.ts", "../../../node_modules/it-parallel-batch/src/index.ts", "../../../node_modules/it-batch/src/index.ts", "../../../node_modules/ipfs-unixfs-importer/src/chunker/fixed-size.ts", "../../../node_modules/uint8arraylist/src/index.ts", "../../../node_modules/uint8arrays/src/concat.ts", "../../../node_modules/uint8arrays/src/alloc.ts", "../../../node_modules/uint8arrays/src/util/as-uint8array.ts", "../../../node_modules/uint8arrays/src/equals.ts", "../../../node_modules/ipfs-unixfs-importer/src/dag-builder/buffer-importer.ts", "../../../node_modules/@ipld/dag-pb/src/index.js", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/src/cid.js", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/src/varint.js", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/vendor/varint.js", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/src/hashes/digest.js", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/src/bytes.js", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/src/bases/base58.js", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/src/bases/base.js", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/vendor/base-x.js", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/src/bases/interface.js", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/src/bases/base32.js", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/src/link/interface.js", "../../../node_modules/@ipld/dag-pb/src/pb-decode.js", "../../../node_modules/@ipld/dag-pb/src/pb-encode.js", "../../../node_modules/@ipld/dag-pb/src/util.js", "../../../node_modules/ipfs-unixfs/src/index.ts", "../../../node_modules/ipfs-unixfs/src/unixfs.ts", "../../../node_modules/protons-runtime/src/index.ts", "../../../node_modules/protons-runtime/src/decode.ts", "../../../node_modules/protons-runtime/src/utils.ts", "../../../node_modules/protons-runtime/src/encode.ts", "../../../node_modules/protons-runtime/src/codecs/enum.ts", "../../../node_modules/protons-runtime/src/codec.ts", "../../../node_modules/protons-runtime/src/codecs/message.ts", "../../../node_modules/multiformats/src/codecs/raw.js", "../../../node_modules/progress-events/src/index.ts", "../../../node_modules/ipfs-unixfs-importer/src/utils/persist.ts", "../../../node_modules/multiformats/src/hashes/sha2-browser.js", "../../../node_modules/multiformats/src/hashes/hasher.js", "../../../node_modules/ipfs-unixfs-importer/src/dag-builder/index.ts", "../../../node_modules/ipfs-unixfs-importer/src/dag-builder/dir.ts", "../../../node_modules/ipfs-unixfs-importer/src/dag-builder/file.ts", "../../../node_modules/ipfs-unixfs-importer/src/dag-builder/validate-chunks.ts", "../../../node_modules/uint8arrays/src/from-string.ts", "../../../node_modules/uint8arrays/src/util/bases.ts", "../../../node_modules/multiformats/src/basics.js", "../../../node_modules/multiformats/src/bases/identity.js", "../../../node_modules/multiformats/src/bases/base2.js", "../../../node_modules/multiformats/src/bases/base8.js", "../../../node_modules/multiformats/src/bases/base10.js", "../../../node_modules/multiformats/src/bases/base16.js", "../../../node_modules/multiformats/src/bases/base36.js", "../../../node_modules/multiformats/src/bases/base64.js", "../../../node_modules/multiformats/src/bases/base256emoji.js", "../../../node_modules/multiformats/src/hashes/identity.js", "../../../node_modules/multiformats/src/codecs/json.js", "../../../node_modules/multiformats/src/index.js", "../../../node_modules/multiformats/src/interface.js", "../../../node_modules/ipfs-unixfs-importer/src/layout/index.ts", "../../../node_modules/ipfs-unixfs-importer/src/layout/balanced.ts", "../../../node_modules/ipfs-unixfs-importer/src/layout/flat.ts", "../../../node_modules/it-all/src/index.ts", "../../../node_modules/ipfs-unixfs-importer/src/layout/trickle.ts", "../../../node_modules/ipfs-unixfs-importer/src/tree-builder.ts", "../../../node_modules/ipfs-unixfs-importer/src/dir-flat.ts", "../../../node_modules/ipfs-unixfs-importer/src/dir.ts", "../../../node_modules/ipfs-unixfs-importer/src/flat-to-shard.ts", "../../../node_modules/ipfs-unixfs-importer/src/dir-sharded.ts", "../../../node_modules/@multiformats/murmur3/src/index.js", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/index.js", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/cid.js", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/varint.js", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/vendor/varint.js", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/hashes/digest.js", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/bytes.js", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/bases/base58.js", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/bases/base.js", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/vendor/base-x.js", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/bases/interface.js", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/bases/base32.js", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/link/interface.js", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/hashes/hasher.js", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/interface.js", "../../../node_modules/hamt-sharding/src/index.ts", "../../../node_modules/hamt-sharding/src/bucket.ts", "../../../node_modules/hamt-sharding/src/consumable-hash.ts", "../../../node_modules/hamt-sharding/src/consumable-buffer.ts", "../../../node_modules/ipfs-unixfs-importer/src/utils/to-path-components.ts", "../../../node_modules/blockstore-core/src/index.ts", "../../../node_modules/blockstore-core/src/errors.ts", "../../../node_modules/blockstore-core/src/base.ts", "../../../node_modules/blockstore-core/src/memory.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/cid.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/abort.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/time.ts", "../../../node_modules/@js-temporal/polyfill/lib/intrinsicclass.ts", "../../../node_modules/@js-temporal/polyfill/lib/slots.ts", "../../../node_modules/@js-temporal/polyfill/lib/regex.ts", "../../../node_modules/@js-temporal/polyfill/lib/ecmascript.ts", "../../../node_modules/@js-temporal/polyfill/lib/intl.ts", "../../../node_modules/@js-temporal/polyfill/lib/instant.ts", "../../../node_modules/@js-temporal/polyfill/lib/calendar.ts", "../../../node_modules/@js-temporal/polyfill/lib/plaindate.ts", "../../../node_modules/@js-temporal/polyfill/lib/plaindatetime.ts", "../../../node_modules/@js-temporal/polyfill/lib/duration.ts", "../../../node_modules/@js-temporal/polyfill/lib/plainmonthday.ts", "../../../node_modules/@js-temporal/polyfill/lib/now.ts", "../../../node_modules/@js-temporal/polyfill/lib/plaintime.ts", "../../../node_modules/@js-temporal/polyfill/lib/timezone.ts", "../../../node_modules/@js-temporal/polyfill/lib/plainyearmonth.ts", "../../../node_modules/@js-temporal/polyfill/lib/zoneddatetime.ts", "../../../node_modules/@js-temporal/polyfill/lib/legacydate.ts", "../../../node_modules/@js-temporal/polyfill/lib/index.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/store/level-wrapper.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/store/blockstore-level.ts", "../../../node_modules/ipfs-unixfs-exporter/src/index.ts", "../../../node_modules/it-last/src/index.ts", "../../../node_modules/ipfs-unixfs-exporter/src/resolvers/index.ts", "../../../node_modules/ipfs-unixfs-exporter/src/resolvers/dag-cbor.ts", "../../../node_modules/ipfs-unixfs-exporter/src/resolvers/identity.ts", "../../../node_modules/ipfs-unixfs-exporter/src/utils/extract-data-from-block.ts", "../../../node_modules/ipfs-unixfs-exporter/src/utils/validate-offset-and-length.ts", "../../../node_modules/ipfs-unixfs-exporter/src/resolvers/raw.ts", "../../../node_modules/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/index.ts", "../../../node_modules/ipfs-unixfs-exporter/src/utils/find-cid-in-shard.ts", "../../../node_modules/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/directory.ts", "../../../node_modules/it-filter/src/index.ts", "../../../node_modules/it-peekable/src/index.ts", "../../../node_modules/it-map/src/index.ts", "../../../node_modules/it-parallel/src/index.ts", "../../../node_modules/p-defer/index.js", "../../../node_modules/it-pipe/src/index.ts", "../../../node_modules/it-pushable/src/index.ts", "../../../node_modules/it-pushable/src/fifo.ts", "../../../node_modules/it-merge/src/index.ts", "../../../node_modules/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/file.ts", "../../../node_modules/p-queue/dist/index.js", "../../../node_modules/p-timeout/index.js", "../../../node_modules/p-queue/dist/priority-queue.js", "../../../node_modules/p-queue/dist/lower-bound.js", "../../../node_modules/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/hamt-sharded-directory.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/store/data-store-level.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/encoder.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/jose/algorithms/signing/signers.ts", "../../../node_modules/@noble/ed25519/index.js", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/jose/algorithms/signing/ed25519.ts", "../../../node_modules/@noble/secp256k1/index.js", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/secp256k1.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/core/dwn-error.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/jose/jws/general/signer.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/jws.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/string.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/schema-validator.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/generated/precompiled-validators.js", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/core/message.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/object.ts", "../../../node_modules/lru-cache/src/index.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/memory-cache.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/jose/jws/general/verifier.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/core/auth.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/url.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/records-query.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/data-stream.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/hd-key.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/did/did-key-resolver.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/did/did.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/did/did-ion-resolver.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/did/did-resolver.ts", "../../../node_modules/ulid/dist/index.esm.js", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/event-log/event-log-level.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/events-get.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/core/message-reply.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/events-get.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/core/dwn-constant.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/messages-get.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/messages-get.ts", "../../../node_modules/multiformats/src/block.js", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/store/index-level.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/store/message-store-level.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/permissions-grant.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/permissions-grant.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/permissions-request.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/permissions-request.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/protocols-configure.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/protocols-configure.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/protocols-query.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/protocols-query.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/records-delete.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/encryption.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/types/protocols-types.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/core/protocol-authorization.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/records.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/records-write.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/records-write.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/store/storage-controller.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/records-delete.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/records-query.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/records-read.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/records-read.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/dwn.ts", "../../../node_modules/@decentralized-identity/ion-tools/dist/esm/index.js", "../../../node_modules/@decentralized-identity/ion-tools/dist/esm/did.js", "../../../node_modules/@decentralized-identity/ion-sdk/lib/index.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/Encoder.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/ErrorCode.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/IonError.ts", "../../../node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats/src/bases/base64.js", "../../../node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats/src/bases/base.js", "../../../node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats/vendor/base-x.js", "../../../node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats/src/bytes.js", "../../../node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats/src/bases/interface.js", "../../../node_modules/@decentralized-identity/ion-sdk/lib/IonRequest.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/InputValidator.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/enums/OperationKeyType.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/IonSdkConfig.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/JsonCanonicalizer.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/Multihash.ts", "../../../node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats/src/hashes/sha2-browser.js", "../../../node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats/src/hashes/hasher.js", "../../../node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats/src/hashes/digest.js", "../../../node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats/src/varint.js", "../../../node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats/vendor/varint.js", "../../../node_modules/@decentralized-identity/ion-sdk/lib/enums/OperationType.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/enums/PatchAction.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/IonDid.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/IonKey.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/enums/IonNetwork.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/enums/IonPublicKeyPurpose.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/LocalSigner.ts", "../../../node_modules/@decentralized-identity/ion-tools/dist/esm/utils.js", "../../../node_modules/@decentralized-identity/ion-tools/node_modules/multiformats/src/bases/base64.js", "../../../node_modules/@decentralized-identity/ion-tools/node_modules/multiformats/src/bases/base.js", "../../../node_modules/@decentralized-identity/ion-tools/node_modules/multiformats/vendor/base-x.js", "../../../node_modules/@decentralized-identity/ion-tools/node_modules/multiformats/src/bytes.js", "../../../node_modules/@decentralized-identity/ion-tools/node_modules/multiformats/src/bases/interface.js", "../../../node_modules/@decentralized-identity/ion-tools/node_modules/multiformats/src/hashes/sha2-browser.js", "../../../node_modules/@decentralized-identity/ion-tools/node_modules/multiformats/src/hashes/hasher.js", "../../../node_modules/@decentralized-identity/ion-tools/node_modules/multiformats/src/hashes/digest.js", "../../../node_modules/@decentralized-identity/ion-tools/node_modules/multiformats/src/varint.js", "../../../node_modules/@decentralized-identity/ion-tools/node_modules/multiformats/vendor/varint.js", "../../crypto/src/ed25519.ts", "../../crypto/src/utils.ts", "../../dids/src/did-ion.ts", "../../dids/src/did-key.ts", "../../dids/src/utils.ts", "../../dids/src/nop-cache.ts", "../../dids/src/did-resolver.ts", "../../web5-user-agent/src/web5-user-agent.ts", "../../web5-user-agent/src/profile-store.ts", "../../web5-user-agent/src/profile-index.ts", "../../web5-user-agent/src/profile-api.ts", "../../web5-user-agent/src/dwn-rpc-client.ts", "../../web5-user-agent/src/utils.ts", "../../web5-user-agent/src/sync-api.ts", "../../../node_modules/uuid/dist/esm-browser/index.js", "../../../node_modules/uuid/dist/esm-browser/rng.js", "../../../node_modules/uuid/dist/esm-browser/stringify.js", "../../../node_modules/uuid/dist/esm-browser/v4.js", "../../../node_modules/uuid/dist/esm-browser/native.js", "../../web5-agent/src/json-rpc.ts", "../src/vc-api.ts", "../src/dwn-api.ts", "../src/record.ts", "../src/utils.ts", "../src/protocol.ts", "../src/did-api.ts", "../src/app-storage.ts", "../src/did-resolution-cache.ts"],
  "sourcesContent": ["'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\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar 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\nvar 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    var arr = new Uint8Array(1)\n    var 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  var 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  var valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  var 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(\n      value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n    )\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  var length = byteLength(string, encoding) | 0\n  var buf = createBuffer(length)\n\n  var 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  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  var buf = createBuffer(length)\n  for (var 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    var 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  var 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    var len = checked(obj.length) | 0\n    var 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  var x = a.length\n  var y = b.length\n\n  for (var 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  var 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  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      if (pos + buf.length > buffer.length) {\n        Buffer.from(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  var len = string.length\n  var mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var 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  var 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  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var 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  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var 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  var 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  var str = ''\n  var 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  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var 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  var indexSize = 1\n  var arrLength = arr.length\n  var 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  var i\n  if (dir) {\n    var 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      var found = true\n      for (var 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  var 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  var strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var 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  var 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  var 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  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF)\n      ? 4\n      : (firstByte > 0xDF)\n          ? 3\n          : (firstByte > 0xBF)\n              ? 2\n              : 1\n\n    if (i + bytesPerSequence <= end) {\n      var 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\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var 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  var res = ''\n  var 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  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]]\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n  for (var 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  var 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  var 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  var val = this[offset]\n  var mul = 1\n  var 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  var val = this[offset + --byteLength]\n  var 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.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var 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  var i = byteLength\n  var mul = 1\n  var 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  var 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  var 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.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    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var 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    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var 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\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    var limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var 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    var limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var 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\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  var 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      var 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  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    var 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// HELPER FUNCTIONS\n// ================\n\nvar 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  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var 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  var byteArray = []\n  for (var 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  var c, hi, lo\n  var byteArray = []\n  for (var 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  for (var 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\nvar hexSliceLookupTable = (function () {\n  var alphabet = '0123456789abcdef'\n  var table = new Array(256)\n  for (var i = 0; i < 16; ++i) {\n    var i16 = i * 16\n    for (var j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j]\n    }\n  }\n  return table\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", "var _globalThis = function (Object) {\n  function get() {\n    var _global = this || self;\n\n    delete Object.prototype.__magic__;\n    return _global;\n  }\n\n  if (typeof globalThis === \"object\") {\n    return globalThis;\n  }\n\n  if (this) {\n    return get();\n  } else {\n    Object.defineProperty(Object.prototype, \"__magic__\", {\n      configurable: true,\n      get: get\n    });\n    var _global = __magic__;\n    return _global;\n  }\n}(Object);\n\nimport { Buffer } from 'buffer';\nimport process from 'process';\nvar _global = _globalThis;\nexport { Buffer, process, _global as global };\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n", "'use strict';\n\n/**\n * @typedef {{ [key: string]: any }} Extensions\n * @typedef {Error} Err\n * @property {string} message\n */\n\n/**\n *\n * @param {Error} obj\n * @param {Extensions} props\n * @returns {Error & Extensions}\n */\nfunction assign(obj, props) {\n    for (const key in props) {\n        Object.defineProperty(obj, key, {\n            value: props[key],\n            enumerable: true,\n            configurable: true,\n        });\n    }\n\n    return obj;\n}\n\n/**\n *\n * @param {any} err - An Error\n * @param {string|Extensions} code - A string code or props to set on the error\n * @param {Extensions} [props] - Props to set on the error\n * @returns {Error & Extensions}\n */\nfunction createError(err, code, props) {\n    if (!err || typeof err === 'string') {\n        throw new TypeError('Please pass an Error to err-code');\n    }\n\n    if (!props) {\n        props = {};\n    }\n\n    if (typeof code === 'object') {\n        props = code;\n        code = '';\n    }\n\n    if (code) {\n        props.code = code;\n    }\n\n    try {\n        return assign(err, props);\n    } catch (_) {\n        props.message = err.message;\n        props.stack = err.stack;\n\n        const ErrClass = function () {};\n\n        ErrClass.prototype = Object.create(Object.getPrototypeOf(err));\n\n        // @ts-ignore\n        const output = assign(new ErrClass(), props);\n\n        return output;\n    }\n}\n\nmodule.exports = createError;\n", "\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n    var params  = new Array(arguments.length - 1),\r\n        offset  = 0,\r\n        index   = 2,\r\n        pending = true;\r\n    while (index < arguments.length)\r\n        params[offset++] = arguments[index++];\r\n    return new Promise(function executor(resolve, reject) {\r\n        params[offset] = function callback(err/*, varargs */) {\r\n            if (pending) {\r\n                pending = false;\r\n                if (err)\r\n                    reject(err);\r\n                else {\r\n                    var params = new Array(arguments.length - 1),\r\n                        offset = 0;\r\n                    while (offset < params.length)\r\n                        params[offset++] = arguments[offset];\r\n                    resolve.apply(null, params);\r\n                }\r\n            }\r\n        };\r\n        try {\r\n            fn.apply(ctx || null, params);\r\n        } catch (err) {\r\n            if (pending) {\r\n                pending = false;\r\n                reject(err);\r\n            }\r\n        }\r\n    });\r\n}\r\n", "\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n    var p = string.length;\r\n    if (!p)\r\n        return 0;\r\n    var n = 0;\r\n    while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n        ++n;\r\n    return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n    s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n    var parts = null,\r\n        chunk = [];\r\n    var i = 0, // output index\r\n        j = 0, // goto index\r\n        t;     // temporary\r\n    while (start < end) {\r\n        var b = buffer[start++];\r\n        switch (j) {\r\n            case 0:\r\n                chunk[i++] = b64[b >> 2];\r\n                t = (b & 3) << 4;\r\n                j = 1;\r\n                break;\r\n            case 1:\r\n                chunk[i++] = b64[t | b >> 4];\r\n                t = (b & 15) << 2;\r\n                j = 2;\r\n                break;\r\n            case 2:\r\n                chunk[i++] = b64[t | b >> 6];\r\n                chunk[i++] = b64[b & 63];\r\n                j = 0;\r\n                break;\r\n        }\r\n        if (i > 8191) {\r\n            (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n            i = 0;\r\n        }\r\n    }\r\n    if (j) {\r\n        chunk[i++] = b64[t];\r\n        chunk[i++] = 61;\r\n        if (j === 1)\r\n            chunk[i++] = 61;\r\n    }\r\n    if (parts) {\r\n        if (i)\r\n            parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n        return parts.join(\"\");\r\n    }\r\n    return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n    var start = offset;\r\n    var j = 0, // goto index\r\n        t;     // temporary\r\n    for (var i = 0; i < string.length;) {\r\n        var c = string.charCodeAt(i++);\r\n        if (c === 61 && j > 1)\r\n            break;\r\n        if ((c = s64[c]) === undefined)\r\n            throw Error(invalidEncoding);\r\n        switch (j) {\r\n            case 0:\r\n                t = c;\r\n                j = 1;\r\n                break;\r\n            case 1:\r\n                buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n                t = c;\r\n                j = 2;\r\n                break;\r\n            case 2:\r\n                buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n                t = c;\r\n                j = 3;\r\n                break;\r\n            case 3:\r\n                buffer[offset++] = (t & 3) << 6 | c;\r\n                j = 0;\r\n                break;\r\n        }\r\n    }\r\n    if (j === 1)\r\n        throw Error(invalidEncoding);\r\n    return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n    return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n", "\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n    /**\r\n     * Registered listeners.\r\n     * @type {Object.<string,*>}\r\n     * @private\r\n     */\r\n    this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n    (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n        fn  : fn,\r\n        ctx : ctx || this\r\n    });\r\n    return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n    if (evt === undefined)\r\n        this._listeners = {};\r\n    else {\r\n        if (fn === undefined)\r\n            this._listeners[evt] = [];\r\n        else {\r\n            var listeners = this._listeners[evt];\r\n            for (var i = 0; i < listeners.length;)\r\n                if (listeners[i].fn === fn)\r\n                    listeners.splice(i, 1);\r\n                else\r\n                    ++i;\r\n        }\r\n    }\r\n    return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n    var listeners = this._listeners[evt];\r\n    if (listeners) {\r\n        var args = [],\r\n            i = 1;\r\n        for (; i < arguments.length;)\r\n            args.push(arguments[i++]);\r\n        for (i = 0; i < listeners.length;)\r\n            listeners[i].fn.apply(listeners[i++].ctx, args);\r\n    }\r\n    return this;\r\n};\r\n", "\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n    // float: typed array\r\n    if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n        var f32 = new Float32Array([ -0 ]),\r\n            f8b = new Uint8Array(f32.buffer),\r\n            le  = f8b[3] === 128;\r\n\r\n        function writeFloat_f32_cpy(val, buf, pos) {\r\n            f32[0] = val;\r\n            buf[pos    ] = f8b[0];\r\n            buf[pos + 1] = f8b[1];\r\n            buf[pos + 2] = f8b[2];\r\n            buf[pos + 3] = f8b[3];\r\n        }\r\n\r\n        function writeFloat_f32_rev(val, buf, pos) {\r\n            f32[0] = val;\r\n            buf[pos    ] = f8b[3];\r\n            buf[pos + 1] = f8b[2];\r\n            buf[pos + 2] = f8b[1];\r\n            buf[pos + 3] = f8b[0];\r\n        }\r\n\r\n        /* istanbul ignore next */\r\n        exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n        /* istanbul ignore next */\r\n        exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n        function readFloat_f32_cpy(buf, pos) {\r\n            f8b[0] = buf[pos    ];\r\n            f8b[1] = buf[pos + 1];\r\n            f8b[2] = buf[pos + 2];\r\n            f8b[3] = buf[pos + 3];\r\n            return f32[0];\r\n        }\r\n\r\n        function readFloat_f32_rev(buf, pos) {\r\n            f8b[3] = buf[pos    ];\r\n            f8b[2] = buf[pos + 1];\r\n            f8b[1] = buf[pos + 2];\r\n            f8b[0] = buf[pos + 3];\r\n            return f32[0];\r\n        }\r\n\r\n        /* istanbul ignore next */\r\n        exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n        /* istanbul ignore next */\r\n        exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n    // float: ieee754\r\n    })(); else (function() {\r\n\r\n        function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n            var sign = val < 0 ? 1 : 0;\r\n            if (sign)\r\n                val = -val;\r\n            if (val === 0)\r\n                writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n            else if (isNaN(val))\r\n                writeUint(2143289344, buf, pos);\r\n            else if (val > 3.4028234663852886e+38) // +-Infinity\r\n                writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n            else if (val < 1.1754943508222875e-38) // denormal\r\n                writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n            else {\r\n                var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n                    mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n                writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n            }\r\n        }\r\n\r\n        exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n        exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n        function readFloat_ieee754(readUint, buf, pos) {\r\n            var uint = readUint(buf, pos),\r\n                sign = (uint >> 31) * 2 + 1,\r\n                exponent = uint >>> 23 & 255,\r\n                mantissa = uint & 8388607;\r\n            return exponent === 255\r\n                ? mantissa\r\n                ? NaN\r\n                : sign * Infinity\r\n                : exponent === 0 // denormal\r\n                ? sign * 1.401298464324817e-45 * mantissa\r\n                : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n        }\r\n\r\n        exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n        exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n    })();\r\n\r\n    // double: typed array\r\n    if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n        var f64 = new Float64Array([-0]),\r\n            f8b = new Uint8Array(f64.buffer),\r\n            le  = f8b[7] === 128;\r\n\r\n        function writeDouble_f64_cpy(val, buf, pos) {\r\n            f64[0] = val;\r\n            buf[pos    ] = f8b[0];\r\n            buf[pos + 1] = f8b[1];\r\n            buf[pos + 2] = f8b[2];\r\n            buf[pos + 3] = f8b[3];\r\n            buf[pos + 4] = f8b[4];\r\n            buf[pos + 5] = f8b[5];\r\n            buf[pos + 6] = f8b[6];\r\n            buf[pos + 7] = f8b[7];\r\n        }\r\n\r\n        function writeDouble_f64_rev(val, buf, pos) {\r\n            f64[0] = val;\r\n            buf[pos    ] = f8b[7];\r\n            buf[pos + 1] = f8b[6];\r\n            buf[pos + 2] = f8b[5];\r\n            buf[pos + 3] = f8b[4];\r\n            buf[pos + 4] = f8b[3];\r\n            buf[pos + 5] = f8b[2];\r\n            buf[pos + 6] = f8b[1];\r\n            buf[pos + 7] = f8b[0];\r\n        }\r\n\r\n        /* istanbul ignore next */\r\n        exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n        /* istanbul ignore next */\r\n        exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n        function readDouble_f64_cpy(buf, pos) {\r\n            f8b[0] = buf[pos    ];\r\n            f8b[1] = buf[pos + 1];\r\n            f8b[2] = buf[pos + 2];\r\n            f8b[3] = buf[pos + 3];\r\n            f8b[4] = buf[pos + 4];\r\n            f8b[5] = buf[pos + 5];\r\n            f8b[6] = buf[pos + 6];\r\n            f8b[7] = buf[pos + 7];\r\n            return f64[0];\r\n        }\r\n\r\n        function readDouble_f64_rev(buf, pos) {\r\n            f8b[7] = buf[pos    ];\r\n            f8b[6] = buf[pos + 1];\r\n            f8b[5] = buf[pos + 2];\r\n            f8b[4] = buf[pos + 3];\r\n            f8b[3] = buf[pos + 4];\r\n            f8b[2] = buf[pos + 5];\r\n            f8b[1] = buf[pos + 6];\r\n            f8b[0] = buf[pos + 7];\r\n            return f64[0];\r\n        }\r\n\r\n        /* istanbul ignore next */\r\n        exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n        /* istanbul ignore next */\r\n        exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n    // double: ieee754\r\n    })(); else (function() {\r\n\r\n        function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n            var sign = val < 0 ? 1 : 0;\r\n            if (sign)\r\n                val = -val;\r\n            if (val === 0) {\r\n                writeUint(0, buf, pos + off0);\r\n                writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n            } else if (isNaN(val)) {\r\n                writeUint(0, buf, pos + off0);\r\n                writeUint(2146959360, buf, pos + off1);\r\n            } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n                writeUint(0, buf, pos + off0);\r\n                writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n            } else {\r\n                var mantissa;\r\n                if (val < 2.2250738585072014e-308) { // denormal\r\n                    mantissa = val / 5e-324;\r\n                    writeUint(mantissa >>> 0, buf, pos + off0);\r\n                    writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n                } else {\r\n                    var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n                    if (exponent === 1024)\r\n                        exponent = 1023;\r\n                    mantissa = val * Math.pow(2, -exponent);\r\n                    writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n                    writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n                }\r\n            }\r\n        }\r\n\r\n        exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n        exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n        function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n            var lo = readUint(buf, pos + off0),\r\n                hi = readUint(buf, pos + off1);\r\n            var sign = (hi >> 31) * 2 + 1,\r\n                exponent = hi >>> 20 & 2047,\r\n                mantissa = 4294967296 * (hi & 1048575) + lo;\r\n            return exponent === 2047\r\n                ? mantissa\r\n                ? NaN\r\n                : sign * Infinity\r\n                : exponent === 0 // denormal\r\n                ? sign * 5e-324 * mantissa\r\n                : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n        }\r\n\r\n        exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n        exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n    })();\r\n\r\n    return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n    buf[pos    ] =  val        & 255;\r\n    buf[pos + 1] =  val >>> 8  & 255;\r\n    buf[pos + 2] =  val >>> 16 & 255;\r\n    buf[pos + 3] =  val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n    buf[pos    ] =  val >>> 24;\r\n    buf[pos + 1] =  val >>> 16 & 255;\r\n    buf[pos + 2] =  val >>> 8  & 255;\r\n    buf[pos + 3] =  val        & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n    return (buf[pos    ]\r\n          | buf[pos + 1] << 8\r\n          | buf[pos + 2] << 16\r\n          | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n    return (buf[pos    ] << 24\r\n          | buf[pos + 1] << 16\r\n          | buf[pos + 2] << 8\r\n          | buf[pos + 3]) >>> 0;\r\n}\r\n", "\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n    try {\r\n        var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n        if (mod && (mod.length || Object.keys(mod).length))\r\n            return mod;\r\n    } catch (e) {} // eslint-disable-line no-empty\r\n    return null;\r\n}\r\n", "\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n    var len = 0,\r\n        c = 0;\r\n    for (var i = 0; i < string.length; ++i) {\r\n        c = string.charCodeAt(i);\r\n        if (c < 128)\r\n            len += 1;\r\n        else if (c < 2048)\r\n            len += 2;\r\n        else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n            ++i;\r\n            len += 4;\r\n        } else\r\n            len += 3;\r\n    }\r\n    return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n    var len = end - start;\r\n    if (len < 1)\r\n        return \"\";\r\n    var parts = null,\r\n        chunk = [],\r\n        i = 0, // char offset\r\n        t;     // temporary\r\n    while (start < end) {\r\n        t = buffer[start++];\r\n        if (t < 128)\r\n            chunk[i++] = t;\r\n        else if (t > 191 && t < 224)\r\n            chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n        else if (t > 239 && t < 365) {\r\n            t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n            chunk[i++] = 0xD800 + (t >> 10);\r\n            chunk[i++] = 0xDC00 + (t & 1023);\r\n        } else\r\n            chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n        if (i > 8191) {\r\n            (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n            i = 0;\r\n        }\r\n    }\r\n    if (parts) {\r\n        if (i)\r\n            parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n        return parts.join(\"\");\r\n    }\r\n    return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n    var start = offset,\r\n        c1, // character 1\r\n        c2; // character 2\r\n    for (var i = 0; i < string.length; ++i) {\r\n        c1 = string.charCodeAt(i);\r\n        if (c1 < 128) {\r\n            buffer[offset++] = c1;\r\n        } else if (c1 < 2048) {\r\n            buffer[offset++] = c1 >> 6       | 192;\r\n            buffer[offset++] = c1       & 63 | 128;\r\n        } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n            c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n            ++i;\r\n            buffer[offset++] = c1 >> 18      | 240;\r\n            buffer[offset++] = c1 >> 12 & 63 | 128;\r\n            buffer[offset++] = c1 >> 6  & 63 | 128;\r\n            buffer[offset++] = c1       & 63 | 128;\r\n        } else {\r\n            buffer[offset++] = c1 >> 12      | 224;\r\n            buffer[offset++] = c1 >> 6  & 63 | 128;\r\n            buffer[offset++] = c1       & 63 | 128;\r\n        }\r\n    }\r\n    return offset - start;\r\n};\r\n", "\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n    var SIZE   = size || 8192;\r\n    var MAX    = SIZE >>> 1;\r\n    var slab   = null;\r\n    var offset = SIZE;\r\n    return function pool_alloc(size) {\r\n        if (size < 1 || size > MAX)\r\n            return alloc(size);\r\n        if (offset + size > SIZE) {\r\n            slab = alloc(SIZE);\r\n            offset = 0;\r\n        }\r\n        var buf = slice.call(slab, offset, offset += size);\r\n        if (offset & 7) // align to 32 bit\r\n            offset = (offset | 7) + 1;\r\n        return buf;\r\n    };\r\n}\r\n", "\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n    // note that the casts below are theoretically unnecessary as of today, but older statically\n    // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n    /**\n     * Low bits.\n     * @type {number}\n     */\n    this.lo = lo >>> 0;\n\n    /**\n     * High bits.\n     * @type {number}\n     */\n    this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n    if (value === 0)\n        return zero;\n    var sign = value < 0;\n    if (sign)\n        value = -value;\n    var lo = value >>> 0,\n        hi = (value - lo) / 4294967296 >>> 0;\n    if (sign) {\n        hi = ~hi >>> 0;\n        lo = ~lo >>> 0;\n        if (++lo > 4294967295) {\n            lo = 0;\n            if (++hi > 4294967295)\n                hi = 0;\n        }\n    }\n    return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n    if (typeof value === \"number\")\n        return LongBits.fromNumber(value);\n    if (util.isString(value)) {\n        /* istanbul ignore else */\n        if (util.Long)\n            value = util.Long.fromString(value);\n        else\n            return LongBits.fromNumber(parseInt(value, 10));\n    }\n    return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n    if (!unsigned && this.hi >>> 31) {\n        var lo = ~this.lo + 1 >>> 0,\n            hi = ~this.hi     >>> 0;\n        if (!lo)\n            hi = hi + 1 >>> 0;\n        return -(lo + hi * 4294967296);\n    }\n    return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n    return util.Long\n        ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n        /* istanbul ignore next */\n        : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n    if (hash === zeroHash)\n        return zero;\n    return new LongBits(\n        ( charCodeAt.call(hash, 0)\n        | charCodeAt.call(hash, 1) << 8\n        | charCodeAt.call(hash, 2) << 16\n        | charCodeAt.call(hash, 3) << 24) >>> 0\n    ,\n        ( charCodeAt.call(hash, 4)\n        | charCodeAt.call(hash, 5) << 8\n        | charCodeAt.call(hash, 6) << 16\n        | charCodeAt.call(hash, 7) << 24) >>> 0\n    );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n    return String.fromCharCode(\n        this.lo        & 255,\n        this.lo >>> 8  & 255,\n        this.lo >>> 16 & 255,\n        this.lo >>> 24      ,\n        this.hi        & 255,\n        this.hi >>> 8  & 255,\n        this.hi >>> 16 & 255,\n        this.hi >>> 24\n    );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n    var mask =   this.hi >> 31;\n    this.hi  = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n    this.lo  = ( this.lo << 1                   ^ mask) >>> 0;\n    return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n    var mask = -(this.lo & 1);\n    this.lo  = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n    this.hi  = ( this.hi >>> 1                  ^ mask) >>> 0;\n    return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n    var part0 =  this.lo,\n        part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n        part2 =  this.hi >>> 24;\n    return part2 === 0\n         ? part1 === 0\n           ? part0 < 16384\n             ? part0 < 128 ? 1 : 2\n             : part0 < 2097152 ? 3 : 4\n           : part1 < 16384\n             ? part1 < 128 ? 5 : 6\n             : part1 < 2097152 ? 7 : 8\n         : part2 < 128 ? 9 : 10;\n};\n", "\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n                   && global\n                   && global.process\n                   && global.process.versions\n                   && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n           || typeof window !== \"undefined\" && window\n           || typeof self   !== \"undefined\" && self\n           || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n    return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n    return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n    return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n    var value = obj[prop];\n    if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n        return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n    return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor<Buffer>}\n */\nutil.Buffer = (function() {\n    try {\n        var Buffer = util.inquire(\"buffer\").Buffer;\n        // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n        return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n    } catch (e) {\n        /* istanbul ignore next */\n        return null;\n    }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n    /* istanbul ignore next */\n    return typeof sizeOrArray === \"number\"\n        ? util.Buffer\n            ? util._Buffer_allocUnsafe(sizeOrArray)\n            : new util.Array(sizeOrArray)\n        : util.Buffer\n            ? util._Buffer_from(sizeOrArray)\n            : typeof Uint8Array === \"undefined\"\n                ? sizeOrArray\n                : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor<Uint8Array>}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor<Long>}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n         || /* istanbul ignore next */ util.global.Long\n         || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n    return value\n        ? util.LongBits.from(value).toHash()\n        : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n    var bits = util.LongBits.fromHash(hash);\n    if (util.Long)\n        return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n    return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.<string,*>} dst Destination object\n * @param {Object.<string,*>} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n    for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n        if (dst[keys[i]] === undefined || !ifNotSet)\n            dst[keys[i]] = src[keys[i]];\n    return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n    return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor<Error>} Custom error constructor\n */\nfunction newError(name) {\n\n    function CustomError(message, properties) {\n\n        if (!(this instanceof CustomError))\n            return new CustomError(message, properties);\n\n        // Error.call(this, message);\n        // ^ just returns a new error instance because the ctor can be called as a function\n\n        Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n        /* istanbul ignore next */\n        if (Error.captureStackTrace) // node\n            Error.captureStackTrace(this, CustomError);\n        else\n            Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n        if (properties)\n            merge(this, properties);\n    }\n\n    CustomError.prototype = Object.create(Error.prototype, {\n        constructor: {\n            value: CustomError,\n            writable: true,\n            enumerable: false,\n            configurable: true,\n        },\n        name: {\n            get: function get() { return name; },\n            set: undefined,\n            enumerable: false,\n            // configurable: false would accurately preserve the behavior of\n            // the original, but I'm guessing that was not intentional.\n            // For an actual error subclass, this property would\n            // be configurable.\n            configurable: true,\n        },\n        toString: {\n            value: function value() { return this.name + \": \" + this.message; },\n            writable: true,\n            enumerable: false,\n            configurable: true,\n        },\n    });\n\n    return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message<T>\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>} [properties] Additional properties\n * @example\n * try {\n *     MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n *     if (e instanceof ProtocolError && e.instance)\n *         console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message<T>}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n    var fieldMap = {};\n    for (var i = 0; i < fieldNames.length; ++i)\n        fieldMap[fieldNames[i]] = 1;\n\n    /**\n     * @returns {string|undefined} Set field name, if any\n     * @this Object\n     * @ignore\n     */\n    return function() { // eslint-disable-line consistent-return\n        for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n            if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n                return keys[i];\n    };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n    /**\n     * @param {string} name Field name\n     * @returns {undefined}\n     * @this Object\n     * @ignore\n     */\n    return function(name) {\n        for (var i = 0; i < fieldNames.length; ++i)\n            if (fieldNames[i] !== name)\n                delete this[fieldNames[i]];\n    };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n    longs: String,\n    enums: String,\n    bytes: String,\n    json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n    var Buffer = util.Buffer;\n    /* istanbul ignore if */\n    if (!Buffer) {\n        util._Buffer_from = util._Buffer_allocUnsafe = null;\n        return;\n    }\n    // because node 4.x buffers are incompatible & immutable\n    // see: https://github.com/dcodeIO/protobuf.js/pull/665\n    util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n        /* istanbul ignore next */\n        function Buffer_from(value, encoding) {\n            return new Buffer(value, encoding);\n        };\n    util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n        /* istanbul ignore next */\n        function Buffer_allocUnsafe(size) {\n            return new Buffer(size);\n        };\n};\n", "\"use strict\";\nmodule.exports = Reader;\n\nvar util      = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits  = util.LongBits,\n    utf8      = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n    return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n    /**\n     * Read buffer.\n     * @type {Uint8Array}\n     */\n    this.buf = buffer;\n\n    /**\n     * Read buffer position.\n     * @type {number}\n     */\n    this.pos = 0;\n\n    /**\n     * Read buffer length.\n     * @type {number}\n     */\n    this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n    ? function create_typed_array(buffer) {\n        if (buffer instanceof Uint8Array || Array.isArray(buffer))\n            return new Reader(buffer);\n        throw Error(\"illegal buffer\");\n    }\n    /* istanbul ignore next */\n    : function create_array(buffer) {\n        if (Array.isArray(buffer))\n            return new Reader(buffer);\n        throw Error(\"illegal buffer\");\n    };\n\nvar create = function create() {\n    return util.Buffer\n        ? function create_buffer_setup(buffer) {\n            return (Reader.create = function create_buffer(buffer) {\n                return util.Buffer.isBuffer(buffer)\n                    ? new BufferReader(buffer)\n                    /* istanbul ignore next */\n                    : create_array(buffer);\n            })(buffer);\n        }\n        /* istanbul ignore next */\n        : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n    var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n    return function read_uint32() {\n        value = (         this.buf[this.pos] & 127       ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n        value = (value | (this.buf[this.pos] & 127) <<  7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n        value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n        value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n        value = (value | (this.buf[this.pos] &  15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n        /* istanbul ignore if */\n        if ((this.pos += 5) > this.len) {\n            this.pos = this.len;\n            throw indexOutOfRange(this, 10);\n        }\n        return value;\n    };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n    return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n    var value = this.uint32();\n    return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n    // tends to deopt with local vars for octet etc.\n    var bits = new LongBits(0, 0);\n    var i = 0;\n    if (this.len - this.pos > 4) { // fast route (lo)\n        for (; i < 4; ++i) {\n            // 1st..4th\n            bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n        // 5th\n        bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n        bits.hi = (bits.hi | (this.buf[this.pos] & 127) >>  4) >>> 0;\n        if (this.buf[this.pos++] < 128)\n            return bits;\n        i = 0;\n    } else {\n        for (; i < 3; ++i) {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n            // 1st..3th\n            bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n        // 4th\n        bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n        return bits;\n    }\n    if (this.len - this.pos > 4) { // fast route (hi)\n        for (; i < 5; ++i) {\n            // 6th..10th\n            bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n    } else {\n        for (; i < 5; ++i) {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n            // 6th..10th\n            bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n    }\n    /* istanbul ignore next */\n    throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n    return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n    return (buf[end - 4]\n          | buf[end - 3] << 8\n          | buf[end - 2] << 16\n          | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n    /* istanbul ignore if */\n    if (this.pos + 8 > this.len)\n        throw indexOutOfRange(this, 8);\n\n    return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    var value = util.float.readFloatLE(this.buf, this.pos);\n    this.pos += 4;\n    return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n    /* istanbul ignore if */\n    if (this.pos + 8 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    var value = util.float.readDoubleLE(this.buf, this.pos);\n    this.pos += 8;\n    return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n    var length = this.uint32(),\n        start  = this.pos,\n        end    = this.pos + length;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw indexOutOfRange(this, length);\n\n    this.pos += length;\n    if (Array.isArray(this.buf)) // plain array\n        return this.buf.slice(start, end);\n    return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n        ? new this.buf.constructor(0)\n        : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n    var bytes = this.bytes();\n    return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n    if (typeof length === \"number\") {\n        /* istanbul ignore if */\n        if (this.pos + length > this.len)\n            throw indexOutOfRange(this, length);\n        this.pos += length;\n    } else {\n        do {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n        } while (this.buf[this.pos++] & 128);\n    }\n    return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n    switch (wireType) {\n        case 0:\n            this.skip();\n            break;\n        case 1:\n            this.skip(8);\n            break;\n        case 2:\n            this.skip(this.uint32());\n            break;\n        case 3:\n            while ((wireType = this.uint32() & 7) !== 4) {\n                this.skipType(wireType);\n            }\n            break;\n        case 5:\n            this.skip(4);\n            break;\n\n        /* istanbul ignore next */\n        default:\n            throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n    }\n    return this;\n};\n\nReader._configure = function(BufferReader_) {\n    BufferReader = BufferReader_;\n    Reader.create = create();\n    BufferReader._configure();\n\n    var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n    util.merge(Reader.prototype, {\n\n        int64: function read_int64() {\n            return readLongVarint.call(this)[fn](false);\n        },\n\n        uint64: function read_uint64() {\n            return readLongVarint.call(this)[fn](true);\n        },\n\n        sint64: function read_sint64() {\n            return readLongVarint.call(this).zzDecode()[fn](false);\n        },\n\n        fixed64: function read_fixed64() {\n            return readFixed64.call(this)[fn](true);\n        },\n\n        sfixed64: function read_sfixed64() {\n            return readFixed64.call(this)[fn](false);\n        }\n\n    });\n};\n", "\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n    Reader.call(this, buffer);\n\n    /**\n     * Read buffer.\n     * @name BufferReader#buf\n     * @type {Buffer}\n     */\n}\n\nBufferReader._configure = function () {\n    /* istanbul ignore else */\n    if (util.Buffer)\n        BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n    var len = this.uint32(); // modifies pos\n    return this.buf.utf8Slice\n        ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n        : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n", "\"use strict\";\nmodule.exports = Writer;\n\nvar util      = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits  = util.LongBits,\n    base64    = util.base64,\n    utf8      = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n    /**\n     * Function to call.\n     * @type {function(Uint8Array, number, *)}\n     */\n    this.fn = fn;\n\n    /**\n     * Value byte length.\n     * @type {number}\n     */\n    this.len = len;\n\n    /**\n     * Next operation.\n     * @type {Writer.Op|undefined}\n     */\n    this.next = undefined;\n\n    /**\n     * Value to write.\n     * @type {*}\n     */\n    this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n    /**\n     * Current head.\n     * @type {Writer.Op}\n     */\n    this.head = writer.head;\n\n    /**\n     * Current tail.\n     * @type {Writer.Op}\n     */\n    this.tail = writer.tail;\n\n    /**\n     * Current buffer length.\n     * @type {number}\n     */\n    this.len = writer.len;\n\n    /**\n     * Next state.\n     * @type {State|null}\n     */\n    this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n    /**\n     * Current length.\n     * @type {number}\n     */\n    this.len = 0;\n\n    /**\n     * Operations head.\n     * @type {Object}\n     */\n    this.head = new Op(noop, 0, 0);\n\n    /**\n     * Operations tail\n     * @type {Object}\n     */\n    this.tail = this.head;\n\n    /**\n     * Linked forked states.\n     * @type {Object|null}\n     */\n    this.states = null;\n\n    // When a value is written, the writer calculates its byte length and puts it into a linked\n    // list of operations to perform when finish() is called. This both allows us to allocate\n    // buffers of the exact required size and reduces the amount of work we have to do compared\n    // to first calculating over objects and then encoding over objects. In our case, the encoding\n    // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n    return util.Buffer\n        ? function create_buffer_setup() {\n            return (Writer.create = function create_buffer() {\n                return new BufferWriter();\n            })();\n        }\n        /* istanbul ignore next */\n        : function create_array() {\n            return new Writer();\n        };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n    return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n    Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n    this.tail = this.tail.next = new Op(fn, len, val);\n    this.len += len;\n    return this;\n};\n\nfunction writeByte(val, buf, pos) {\n    buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n    while (val > 127) {\n        buf[pos++] = val & 127 | 128;\n        val >>>= 7;\n    }\n    buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n    this.len = len;\n    this.next = undefined;\n    this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n    // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n    // uint32 is by far the most frequently used operation and benefits significantly from this.\n    this.len += (this.tail = this.tail.next = new VarintOp(\n        (value = value >>> 0)\n                < 128       ? 1\n        : value < 16384     ? 2\n        : value < 2097152   ? 3\n        : value < 268435456 ? 4\n        :                     5,\n    value)).len;\n    return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n    return value < 0\n        ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n        : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n    return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n    while (val.hi) {\n        buf[pos++] = val.lo & 127 | 128;\n        val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n        val.hi >>>= 7;\n    }\n    while (val.lo > 127) {\n        buf[pos++] = val.lo & 127 | 128;\n        val.lo = val.lo >>> 7;\n    }\n    buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n    var bits = LongBits.from(value);\n    return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n    var bits = LongBits.from(value).zzEncode();\n    return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n    return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n    buf[pos    ] =  val         & 255;\n    buf[pos + 1] =  val >>> 8   & 255;\n    buf[pos + 2] =  val >>> 16  & 255;\n    buf[pos + 3] =  val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n    return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n    var bits = LongBits.from(value);\n    return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n    return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n    return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n    ? function writeBytes_set(val, buf, pos) {\n        buf.set(val, pos); // also works for plain array values\n    }\n    /* istanbul ignore next */\n    : function writeBytes_for(val, buf, pos) {\n        for (var i = 0; i < val.length; ++i)\n            buf[pos + i] = val[i];\n    };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n    var len = value.length >>> 0;\n    if (!len)\n        return this._push(writeByte, 1, 0);\n    if (util.isString(value)) {\n        var buf = Writer.alloc(len = base64.length(value));\n        base64.decode(value, buf, 0);\n        value = buf;\n    }\n    return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n    var len = utf8.length(value);\n    return len\n        ? this.uint32(len)._push(utf8.write, len, value)\n        : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n    this.states = new State(this);\n    this.head = this.tail = new Op(noop, 0, 0);\n    this.len = 0;\n    return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n    if (this.states) {\n        this.head   = this.states.head;\n        this.tail   = this.states.tail;\n        this.len    = this.states.len;\n        this.states = this.states.next;\n    } else {\n        this.head = this.tail = new Op(noop, 0, 0);\n        this.len  = 0;\n    }\n    return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n    var head = this.head,\n        tail = this.tail,\n        len  = this.len;\n    this.reset().uint32(len);\n    if (len) {\n        this.tail.next = head.next; // skip noop\n        this.tail = tail;\n        this.len += len;\n    }\n    return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n    var head = this.head.next, // skip noop\n        buf  = this.constructor.alloc(this.len),\n        pos  = 0;\n    while (head) {\n        head.fn(head.val, buf, pos);\n        pos += head.len;\n        head = head.next;\n    }\n    // this.head = this.tail = null;\n    return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n    BufferWriter = BufferWriter_;\n    Writer.create = create();\n    BufferWriter._configure();\n};\n", "\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n    Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n    /**\n     * Allocates a buffer of the specified size.\n     * @function\n     * @param {number} size Buffer size\n     * @returns {Buffer} Buffer\n     */\n    BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n    BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n        ? function writeBytesBuffer_set(val, buf, pos) {\n          buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n          // also works for plain array values\n        }\n        /* istanbul ignore next */\n        : function writeBytesBuffer_copy(val, buf, pos) {\n          if (val.copy) // Buffer values\n            val.copy(buf, pos, 0, val.length);\n          else for (var i = 0; i < val.length;) // plain array values\n            buf[pos++] = val[i++];\n        };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n    if (util.isString(value))\n        value = util._Buffer_from(value, \"base64\");\n    var len = value.length >>> 0;\n    this.uint32(len);\n    if (len)\n        this._push(BufferWriter.writeBytesBuffer, len, value);\n    return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n    if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n        util.utf8.write(val, buf, pos);\n    else if (buf.utf8Write)\n        buf.utf8Write(val, pos);\n    else\n        buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n    var len = util.Buffer.byteLength(value);\n    this.uint32(len);\n    if (len)\n        this._push(writeStringBuffer, len, value);\n    return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n", "/* jshint -W086: true */\n// +----------------------------------------------------------------------+\n// | murmurHash3js.js v3.0.1 // https://github.com/pid/murmurHash3js\n// | A javascript implementation of MurmurHash3's x86 hashing algorithms. |\n// |----------------------------------------------------------------------|\n// | Copyright (c) 2012-2015 Karan Lyons                                       |\n// | https://github.com/karanlyons/murmurHash3.js/blob/c1778f75792abef7bdd74bc85d2d4e1a3d25cfe9/murmurHash3.js |\n// | Freely distributable under the MIT license.                          |\n// +----------------------------------------------------------------------+\n\n;(function (root, undefined) {\n    'use strict';\n\n    // Create a local object that'll be exported or referenced globally.\n    var library = {\n        'version': '3.0.0',\n        'x86': {},\n        'x64': {},\n        'inputValidation': true\n    };\n\n    // PRIVATE FUNCTIONS\n    // -----------------\n\n    function _validBytes(bytes) {\n        // check the input is an array or a typed array\n        if (!Array.isArray(bytes) && !ArrayBuffer.isView(bytes)) {\n            return false;\n        }\n\n        // check all bytes are actually bytes\n        for (var i = 0; i < bytes.length; i++) {\n            if (!Number.isInteger(bytes[i]) || bytes[i] < 0 || bytes[i] > 255) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function _x86Multiply(m, n) {\n        //\n        // Given two 32bit ints, returns the two multiplied together as a\n        // 32bit int.\n        //\n\n        return ((m & 0xffff) * n) + ((((m >>> 16) * n) & 0xffff) << 16);\n    }\n\n    function _x86Rotl(m, n) {\n        //\n        // Given a 32bit int and an int representing a number of bit positions,\n        // returns the 32bit int rotated left by that number of positions.\n        //\n\n        return (m << n) | (m >>> (32 - n));\n    }\n\n    function _x86Fmix(h) {\n        //\n        // Given a block, returns murmurHash3's final x86 mix of that block.\n        //\n\n        h ^= h >>> 16;\n        h = _x86Multiply(h, 0x85ebca6b);\n        h ^= h >>> 13;\n        h = _x86Multiply(h, 0xc2b2ae35);\n        h ^= h >>> 16;\n\n        return h;\n    }\n\n    function _x64Add(m, n) {\n        //\n        // Given two 64bit ints (as an array of two 32bit ints) returns the two\n        // added together as a 64bit int (as an array of two 32bit ints).\n        //\n\n        m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff];\n        n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff];\n        var o = [0, 0, 0, 0];\n\n        o[3] += m[3] + n[3];\n        o[2] += o[3] >>> 16;\n        o[3] &= 0xffff;\n\n        o[2] += m[2] + n[2];\n        o[1] += o[2] >>> 16;\n        o[2] &= 0xffff;\n\n        o[1] += m[1] + n[1];\n        o[0] += o[1] >>> 16;\n        o[1] &= 0xffff;\n\n        o[0] += m[0] + n[0];\n        o[0] &= 0xffff;\n\n        return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]];\n    }\n\n    function _x64Multiply(m, n) {\n        //\n        // Given two 64bit ints (as an array of two 32bit ints) returns the two\n        // multiplied together as a 64bit int (as an array of two 32bit ints).\n        //\n\n        m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff];\n        n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff];\n        var o = [0, 0, 0, 0];\n\n        o[3] += m[3] * n[3];\n        o[2] += o[3] >>> 16;\n        o[3] &= 0xffff;\n\n        o[2] += m[2] * n[3];\n        o[1] += o[2] >>> 16;\n        o[2] &= 0xffff;\n\n        o[2] += m[3] * n[2];\n        o[1] += o[2] >>> 16;\n        o[2] &= 0xffff;\n\n        o[1] += m[1] * n[3];\n        o[0] += o[1] >>> 16;\n        o[1] &= 0xffff;\n\n        o[1] += m[2] * n[2];\n        o[0] += o[1] >>> 16;\n        o[1] &= 0xffff;\n\n        o[1] += m[3] * n[1];\n        o[0] += o[1] >>> 16;\n        o[1] &= 0xffff;\n\n        o[0] += (m[0] * n[3]) + (m[1] * n[2]) + (m[2] * n[1]) + (m[3] * n[0]);\n        o[0] &= 0xffff;\n\n        return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]];\n    }\n\n    function _x64Rotl(m, n) {\n        //\n        // Given a 64bit int (as an array of two 32bit ints) and an int\n        // representing a number of bit positions, returns the 64bit int (as an\n        // array of two 32bit ints) rotated left by that number of positions.\n        //\n\n        n %= 64;\n\n        if (n === 32) {\n            return [m[1], m[0]];\n        } else if (n < 32) {\n            return [(m[0] << n) | (m[1] >>> (32 - n)), (m[1] << n) | (m[0] >>> (32 - n))];\n        } else {\n            n -= 32;\n            return [(m[1] << n) | (m[0] >>> (32 - n)), (m[0] << n) | (m[1] >>> (32 - n))];\n        }\n    }\n\n    function _x64LeftShift(m, n) {\n        //\n        // Given a 64bit int (as an array of two 32bit ints) and an int\n        // representing a number of bit positions, returns the 64bit int (as an\n        // array of two 32bit ints) shifted left by that number of positions.\n        //\n\n        n %= 64;\n\n        if (n === 0) {\n            return m;\n        } else if (n < 32) {\n            return [(m[0] << n) | (m[1] >>> (32 - n)), m[1] << n];\n        } else {\n            return [m[1] << (n - 32), 0];\n        }\n    }\n\n    function _x64Xor(m, n) {\n        //\n        // Given two 64bit ints (as an array of two 32bit ints) returns the two\n        // xored together as a 64bit int (as an array of two 32bit ints).\n        //\n\n        return [m[0] ^ n[0], m[1] ^ n[1]];\n    }\n\n    function _x64Fmix(h) {\n        //\n        // Given a block, returns murmurHash3's final x64 mix of that block.\n        // (`[0, h[0] >>> 1]` is a 33 bit unsigned right shift. This is the\n        // only place where we need to right shift 64bit ints.)\n        //\n\n        h = _x64Xor(h, [0, h[0] >>> 1]);\n        h = _x64Multiply(h, [0xff51afd7, 0xed558ccd]);\n        h = _x64Xor(h, [0, h[0] >>> 1]);\n        h = _x64Multiply(h, [0xc4ceb9fe, 0x1a85ec53]);\n        h = _x64Xor(h, [0, h[0] >>> 1]);\n\n        return h;\n    }\n\n    // PUBLIC FUNCTIONS\n    // ----------------\n\n    library.x86.hash32 = function (bytes, seed) {\n        //\n        // Given a string and an optional seed as an int, returns a 32 bit hash\n        // using the x86 flavor of MurmurHash3, as an unsigned int.\n        //\n        if (library.inputValidation && !_validBytes(bytes)) {\n            return undefined;\n        }\n        seed = seed || 0;\n\n        var remainder = bytes.length % 4;\n        var blocks = bytes.length - remainder;\n\n        var h1 = seed;\n\n        var k1 = 0;\n\n        var c1 = 0xcc9e2d51;\n        var c2 = 0x1b873593;\n\n        for (var i = 0; i < blocks; i = i + 4) {\n            k1 = (bytes[i]) | (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24);\n\n            k1 = _x86Multiply(k1, c1);\n            k1 = _x86Rotl(k1, 15);\n            k1 = _x86Multiply(k1, c2);\n\n            h1 ^= k1;\n            h1 = _x86Rotl(h1, 13);\n            h1 = _x86Multiply(h1, 5) + 0xe6546b64;\n        }\n\n        k1 = 0;\n\n        switch (remainder) {\n            case 3:\n                k1 ^= bytes[i + 2] << 16;\n\n            case 2:\n                k1 ^= bytes[i + 1] << 8;\n\n            case 1:\n                k1 ^= bytes[i];\n                k1 = _x86Multiply(k1, c1);\n                k1 = _x86Rotl(k1, 15);\n                k1 = _x86Multiply(k1, c2);\n                h1 ^= k1;\n        }\n\n        h1 ^= bytes.length;\n        h1 = _x86Fmix(h1);\n\n        return h1 >>> 0;\n    };\n\n    library.x86.hash128 = function (bytes, seed) {\n        //\n        // Given a string and an optional seed as an int, returns a 128 bit\n        // hash using the x86 flavor of MurmurHash3, as an unsigned hex.\n        //\n        if (library.inputValidation && !_validBytes(bytes)) {\n            return undefined;\n        }\n\n        seed = seed || 0;\n        var remainder = bytes.length % 16;\n        var blocks = bytes.length - remainder;\n\n        var h1 = seed;\n        var h2 = seed;\n        var h3 = seed;\n        var h4 = seed;\n\n        var k1 = 0;\n        var k2 = 0;\n        var k3 = 0;\n        var k4 = 0;\n\n        var c1 = 0x239b961b;\n        var c2 = 0xab0e9789;\n        var c3 = 0x38b34ae5;\n        var c4 = 0xa1e38b93;\n\n        for (var i = 0; i < blocks; i = i + 16) {\n            k1 = (bytes[i]) | (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24);\n            k2 = (bytes[i + 4]) | (bytes[i + 5] << 8) | (bytes[i + 6] << 16) | (bytes[i + 7] << 24);\n            k3 = (bytes[i + 8]) | (bytes[i + 9] << 8) | (bytes[i + 10] << 16) | (bytes[i + 11] << 24);\n            k4 = (bytes[i + 12]) | (bytes[i + 13] << 8) | (bytes[i + 14] << 16) | (bytes[i + 15] << 24);\n\n            k1 = _x86Multiply(k1, c1);\n            k1 = _x86Rotl(k1, 15);\n            k1 = _x86Multiply(k1, c2);\n            h1 ^= k1;\n\n            h1 = _x86Rotl(h1, 19);\n            h1 += h2;\n            h1 = _x86Multiply(h1, 5) + 0x561ccd1b;\n\n            k2 = _x86Multiply(k2, c2);\n            k2 = _x86Rotl(k2, 16);\n            k2 = _x86Multiply(k2, c3);\n            h2 ^= k2;\n\n            h2 = _x86Rotl(h2, 17);\n            h2 += h3;\n            h2 = _x86Multiply(h2, 5) + 0x0bcaa747;\n\n            k3 = _x86Multiply(k3, c3);\n            k3 = _x86Rotl(k3, 17);\n            k3 = _x86Multiply(k3, c4);\n            h3 ^= k3;\n\n            h3 = _x86Rotl(h3, 15);\n            h3 += h4;\n            h3 = _x86Multiply(h3, 5) + 0x96cd1c35;\n\n            k4 = _x86Multiply(k4, c4);\n            k4 = _x86Rotl(k4, 18);\n            k4 = _x86Multiply(k4, c1);\n            h4 ^= k4;\n\n            h4 = _x86Rotl(h4, 13);\n            h4 += h1;\n            h4 = _x86Multiply(h4, 5) + 0x32ac3b17;\n        }\n\n        k1 = 0;\n        k2 = 0;\n        k3 = 0;\n        k4 = 0;\n\n        switch (remainder) {\n            case 15:\n                k4 ^= bytes[i + 14] << 16;\n\n            case 14:\n                k4 ^= bytes[i + 13] << 8;\n\n            case 13:\n                k4 ^= bytes[i + 12];\n                k4 = _x86Multiply(k4, c4);\n                k4 = _x86Rotl(k4, 18);\n                k4 = _x86Multiply(k4, c1);\n                h4 ^= k4;\n\n            case 12:\n                k3 ^= bytes[i + 11] << 24;\n\n            case 11:\n                k3 ^= bytes[i + 10] << 16;\n\n            case 10:\n                k3 ^= bytes[i + 9] << 8;\n\n            case 9:\n                k3 ^= bytes[i + 8];\n                k3 = _x86Multiply(k3, c3);\n                k3 = _x86Rotl(k3, 17);\n                k3 = _x86Multiply(k3, c4);\n                h3 ^= k3;\n\n            case 8:\n                k2 ^= bytes[i + 7] << 24;\n\n            case 7:\n                k2 ^= bytes[i + 6] << 16;\n\n            case 6:\n                k2 ^= bytes[i + 5] << 8;\n\n            case 5:\n                k2 ^= bytes[i + 4];\n                k2 = _x86Multiply(k2, c2);\n                k2 = _x86Rotl(k2, 16);\n                k2 = _x86Multiply(k2, c3);\n                h2 ^= k2;\n\n            case 4:\n                k1 ^= bytes[i + 3] << 24;\n\n            case 3:\n                k1 ^= bytes[i + 2] << 16;\n\n            case 2:\n                k1 ^= bytes[i + 1] << 8;\n\n            case 1:\n                k1 ^= bytes[i];\n                k1 = _x86Multiply(k1, c1);\n                k1 = _x86Rotl(k1, 15);\n                k1 = _x86Multiply(k1, c2);\n                h1 ^= k1;\n        }\n\n        h1 ^= bytes.length;\n        h2 ^= bytes.length;\n        h3 ^= bytes.length;\n        h4 ^= bytes.length;\n\n        h1 += h2;\n        h1 += h3;\n        h1 += h4;\n        h2 += h1;\n        h3 += h1;\n        h4 += h1;\n\n        h1 = _x86Fmix(h1);\n        h2 = _x86Fmix(h2);\n        h3 = _x86Fmix(h3);\n        h4 = _x86Fmix(h4);\n\n        h1 += h2;\n        h1 += h3;\n        h1 += h4;\n        h2 += h1;\n        h3 += h1;\n        h4 += h1;\n\n        return (\"00000000\" + (h1 >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h2 >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h3 >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h4 >>> 0).toString(16)).slice(-8);\n    };\n\n    library.x64.hash128 = function (bytes, seed) {\n        //\n        // Given a string and an optional seed as an int, returns a 128 bit\n        // hash using the x64 flavor of MurmurHash3, as an unsigned hex.\n        //\n        if (library.inputValidation && !_validBytes(bytes)) {\n            return undefined;\n        }\n        seed = seed || 0;\n\n        var remainder = bytes.length % 16;\n        var blocks = bytes.length - remainder;\n\n        var h1 = [0, seed];\n        var h2 = [0, seed];\n\n        var k1 = [0, 0];\n        var k2 = [0, 0];\n\n        var c1 = [0x87c37b91, 0x114253d5];\n        var c2 = [0x4cf5ad43, 0x2745937f];\n\n        for (var i = 0; i < blocks; i = i + 16) {\n            k1 = [(bytes[i + 4]) | (bytes[i + 5] << 8) | (bytes[i + 6] << 16) | (bytes[i + 7] << 24), (bytes[i]) |\n                (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24)];\n            k2 = [(bytes[i + 12]) | (bytes[i + 13] << 8) | (bytes[i + 14] << 16) | (bytes[i + 15] << 24), (bytes[i + 8]) |\n                (bytes[i + 9] << 8) | (bytes[i + 10] << 16) | (bytes[i + 11] << 24)];\n\n            k1 = _x64Multiply(k1, c1);\n            k1 = _x64Rotl(k1, 31);\n            k1 = _x64Multiply(k1, c2);\n            h1 = _x64Xor(h1, k1);\n\n            h1 = _x64Rotl(h1, 27);\n            h1 = _x64Add(h1, h2);\n            h1 = _x64Add(_x64Multiply(h1, [0, 5]), [0, 0x52dce729]);\n\n            k2 = _x64Multiply(k2, c2);\n            k2 = _x64Rotl(k2, 33);\n            k2 = _x64Multiply(k2, c1);\n            h2 = _x64Xor(h2, k2);\n\n            h2 = _x64Rotl(h2, 31);\n            h2 = _x64Add(h2, h1);\n            h2 = _x64Add(_x64Multiply(h2, [0, 5]), [0, 0x38495ab5]);\n        }\n\n        k1 = [0, 0];\n        k2 = [0, 0];\n\n        switch (remainder) {\n            case 15:\n                k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 14]], 48));\n\n            case 14:\n                k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 13]], 40));\n\n            case 13:\n                k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 12]], 32));\n\n            case 12:\n                k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 11]], 24));\n\n            case 11:\n                k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 10]], 16));\n\n            case 10:\n                k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 9]], 8));\n\n            case 9:\n                k2 = _x64Xor(k2, [0, bytes[i + 8]]);\n                k2 = _x64Multiply(k2, c2);\n                k2 = _x64Rotl(k2, 33);\n                k2 = _x64Multiply(k2, c1);\n                h2 = _x64Xor(h2, k2);\n\n            case 8:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 7]], 56));\n\n            case 7:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 6]], 48));\n\n            case 6:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 5]], 40));\n\n            case 5:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 4]], 32));\n\n            case 4:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 3]], 24));\n\n            case 3:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 2]], 16));\n\n            case 2:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 1]], 8));\n\n            case 1:\n                k1 = _x64Xor(k1, [0, bytes[i]]);\n                k1 = _x64Multiply(k1, c1);\n                k1 = _x64Rotl(k1, 31);\n                k1 = _x64Multiply(k1, c2);\n                h1 = _x64Xor(h1, k1);\n        }\n\n        h1 = _x64Xor(h1, [0, bytes.length]);\n        h2 = _x64Xor(h2, [0, bytes.length]);\n\n        h1 = _x64Add(h1, h2);\n        h2 = _x64Add(h2, h1);\n\n        h1 = _x64Fmix(h1);\n        h2 = _x64Fmix(h2);\n\n        h1 = _x64Add(h1, h2);\n        h2 = _x64Add(h2, h1);\n\n        return (\"00000000\" + (h1[0] >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h1[1] >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h2[0] >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h2[1] >>> 0).toString(16)).slice(-8);\n    };\n\n    // INITIALIZATION\n    // --------------\n\n    // Export murmurHash3 for CommonJS, either as an AMD module or just as part\n    // of the global object.\n    if (typeof exports !== 'undefined') {\n\n        if (typeof module !== 'undefined' && module.exports) {\n            exports = module.exports = library;\n        }\n\n        exports.murmurHash3 = library;\n\n    } else if (typeof define === 'function' && define.amd) {\n\n        define([], function () {\n            return library;\n        });\n    } else {\n\n        // Use murmurHash3.noConflict to restore `murmurHash3` back to its\n        // original value. Returns a reference to the library object, to allow\n        // it to be used under a different name.\n        library._murmurHash3 = root.murmurHash3;\n\n        library.noConflict = function () {\n            root.murmurHash3 = library._murmurHash3;\n            library._murmurHash3 = undefined;\n            library.noConflict = undefined;\n\n            return library;\n        };\n\n        root.murmurHash3 = library;\n    }\n})(this);\n", "module.exports = require('./lib/murmurHash3js');\n", "'use strict'\n\n// JS treats subjects of bitwise operators as SIGNED 32 bit numbers,\n// which means the maximum amount of bits we can store inside each byte\n// is 7..\nconst BITS_PER_BYTE = 7\n\nmodule.exports = class SparseArray {\n  constructor () {\n    this._bitArrays = []\n    this._data = []\n    this._length = 0\n    this._changedLength = false\n    this._changedData = false\n  }\n\n  set (index, value) {\n    let pos = this._internalPositionFor(index, false)\n    if (value === undefined) {\n      // unsetting\n      if (pos !== -1) {\n        // remove item from bit array and array itself\n        this._unsetInternalPos(pos)\n        this._unsetBit(index)\n        this._changedLength = true\n        this._changedData = true\n      }\n    } else {\n      let needsSort = false\n      if (pos === -1) {\n        pos = this._data.length\n        this._setBit(index)\n        this._changedData = true\n      } else {\n        needsSort = true\n      }\n      this._setInternalPos(pos, index, value, needsSort)\n      this._changedLength = true\n    }\n  }\n\n  unset (index) {\n    this.set(index, undefined)\n  }\n\n  get (index) {\n    this._sortData()\n    const pos = this._internalPositionFor(index, true)\n    if (pos === -1) {\n      return undefined\n    }\n    return this._data[pos][1]\n  }\n\n  push (value) {\n    this.set(this.length, value)\n    return this.length\n  }\n\n  get length () {\n    this._sortData()\n    if (this._changedLength) {\n      const last = this._data[this._data.length - 1]\n      this._length = last ? last[0] + 1 : 0\n      this._changedLength = false\n    }\n    return this._length\n  }\n\n  forEach (iterator) {\n    let i = 0\n    while(i < this.length) {\n      iterator(this.get(i), i, this)\n      i++\n    }\n  }\n\n  map (iterator) {\n    let i = 0\n    let mapped = new Array(this.length)\n    while(i < this.length) {\n      mapped[i] = iterator(this.get(i), i, this)\n      i++\n    }\n    return mapped\n  }\n\n  reduce (reducer, initialValue) {\n    let i = 0\n    let acc = initialValue\n    while(i < this.length) {\n      const value = this.get(i)\n      acc = reducer(acc, value, i)\n      i++\n    }\n    return acc\n  }\n\n  find (finder) {\n    let i = 0, found, last\n    while ((i < this.length) && !found) {\n      last = this.get(i)\n      found = finder(last)\n      i++\n    }\n    return found ? last : undefined\n  }\n\n  _internalPositionFor (index, noCreate) {\n    const bytePos = this._bytePosFor(index, noCreate)\n    if (bytePos >= this._bitArrays.length) {\n      return -1\n    }\n    const byte = this._bitArrays[bytePos]\n    const bitPos = index - bytePos * BITS_PER_BYTE\n    const exists = (byte & (1 << bitPos)) > 0\n    if (!exists) {\n      return -1\n    }\n    const previousPopCount = this._bitArrays.slice(0, bytePos).reduce(popCountReduce, 0)\n\n    const mask = ~(0xffffffff << (bitPos + 1))\n    const bytePopCount = popCount(byte & mask)\n    const arrayPos = previousPopCount + bytePopCount - 1\n    return arrayPos\n  }\n\n  _bytePosFor (index, noCreate) {\n    const bytePos = Math.floor(index / BITS_PER_BYTE)\n    const targetLength = bytePos + 1\n    while (!noCreate && this._bitArrays.length < targetLength) {\n      this._bitArrays.push(0)\n    }\n    return bytePos\n  }\n\n  _setBit (index) {\n    const bytePos = this._bytePosFor(index, false)\n    this._bitArrays[bytePos] |= (1 << (index - (bytePos * BITS_PER_BYTE)))\n  }\n\n  _unsetBit(index) {\n    const bytePos = this._bytePosFor(index, false)\n    this._bitArrays[bytePos] &= ~(1 << (index - (bytePos * BITS_PER_BYTE)))\n  }\n\n  _setInternalPos(pos, index, value, needsSort) {\n    const data =this._data\n    const elem = [index, value]\n    if (needsSort) {\n      this._sortData()\n      data[pos] = elem\n    } else {\n      // new element. just shove it into the array\n      // but be nice about where we shove it\n      // in order to make sorting it later easier\n      if (data.length) {\n        if (data[data.length - 1][0] >= index) {\n          data.push(elem)\n        } else if (data[0][0] <= index) {\n          data.unshift(elem)\n        } else {\n          const randomIndex = Math.round(data.length / 2)\n          this._data = data.slice(0, randomIndex).concat(elem).concat(data.slice(randomIndex))\n        }\n      } else {\n        this._data.push(elem)\n      }\n      this._changedData = true\n      this._changedLength = true\n    }\n  }\n\n  _unsetInternalPos (pos) {\n    this._data.splice(pos, 1)\n  }\n\n  _sortData () {\n    if (this._changedData) {\n      this._data.sort(sortInternal)\n    }\n\n    this._changedData = false\n  }\n\n  bitField () {\n    const bytes = []\n    let pendingBitsForResultingByte = 8\n    let pendingBitsForNewByte = 0\n    let resultingByte = 0\n    let newByte\n    const pending = this._bitArrays.slice()\n    while (pending.length || pendingBitsForNewByte) {\n      if (pendingBitsForNewByte === 0) {\n        newByte = pending.shift()\n        pendingBitsForNewByte = 7\n      }\n\n      const usingBits = Math.min(pendingBitsForNewByte, pendingBitsForResultingByte)\n      const mask = ~(0b11111111 << usingBits)\n      const masked = newByte & mask\n      resultingByte |= masked << (8 - pendingBitsForResultingByte)\n      newByte = newByte >>> usingBits\n      pendingBitsForNewByte -= usingBits\n      pendingBitsForResultingByte -= usingBits\n\n      if (!pendingBitsForResultingByte || (!pendingBitsForNewByte && !pending.length)) {\n        bytes.push(resultingByte)\n        resultingByte = 0\n        pendingBitsForResultingByte = 8\n      }\n    }\n\n    // remove trailing zeroes\n    for(var i = bytes.length - 1; i > 0; i--) {\n      const value = bytes[i]\n      if (value === 0) {\n        bytes.pop()\n      } else {\n        break\n      }\n    }\n\n    return bytes\n  }\n\n  compactArray () {\n    this._sortData()\n    return this._data.map(valueOnly)\n  }\n}\n\nfunction popCountReduce (count, byte) {\n  return count + popCount(byte)\n}\n\nfunction popCount(_v) {\n  let v = _v\n  v = v - ((v >> 1) & 0x55555555)                    // reuse input as temporary\n  v = (v & 0x33333333) + ((v >> 2) & 0x33333333)     // temp\n  return ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24\n}\n\nfunction sortInternal (a, b) {\n  return a[0] - b[0]\n}\n\nfunction valueOnly (elem) {\n  return elem[1]\n}", "// Copyright 2018 Google Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the “License”);\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// <https://apache.org/licenses/LICENSE-2.0>.\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an “AS IS” BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nclass JSBI extends Array {\n    constructor(length, sign) {\n        super(length);\n        this.sign = sign;\n        // Explicitly set the prototype as per\n        // https://github.com/Microsoft/TypeScript-wiki/blob/main/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n        Object.setPrototypeOf(this, JSBI.prototype);\n        if (length > JSBI.__kMaxLength) {\n            throw new RangeError('Maximum BigInt size exceeded');\n        }\n    }\n    static BigInt(arg) {\n        if (typeof arg === 'number') {\n            if (arg === 0)\n                return JSBI.__zero();\n            if (JSBI.__isOneDigitInt(arg)) {\n                if (arg < 0) {\n                    return JSBI.__oneDigit(-arg, true);\n                }\n                return JSBI.__oneDigit(arg, false);\n            }\n            if (!Number.isFinite(arg) || Math.floor(arg) !== arg) {\n                throw new RangeError('The number ' + arg + ' cannot be converted to ' +\n                    'BigInt because it is not an integer');\n            }\n            return JSBI.__fromDouble(arg);\n        }\n        else if (typeof arg === 'string') {\n            const result = JSBI.__fromString(arg);\n            if (result === null) {\n                throw new SyntaxError('Cannot convert ' + arg + ' to a BigInt');\n            }\n            return result;\n        }\n        else if (typeof arg === 'boolean') {\n            if (arg === true) {\n                return JSBI.__oneDigit(1, false);\n            }\n            return JSBI.__zero();\n        }\n        else if (typeof arg === 'object') {\n            if (arg.constructor === JSBI)\n                return arg;\n            const primitive = JSBI.__toPrimitive(arg);\n            return JSBI.BigInt(primitive);\n        }\n        throw new TypeError('Cannot convert ' + arg + ' to a BigInt');\n    }\n    toDebugString() {\n        const result = ['BigInt['];\n        for (const digit of this) {\n            result.push((digit ? (digit >>> 0).toString(16) : digit) + ', ');\n        }\n        result.push(']');\n        return result.join('');\n    }\n    toString(radix = 10) {\n        if (radix < 2 || radix > 36) {\n            throw new RangeError('toString() radix argument must be between 2 and 36');\n        }\n        if (this.length === 0)\n            return '0';\n        if ((radix & (radix - 1)) === 0) {\n            return JSBI.__toStringBasePowerOfTwo(this, radix);\n        }\n        return JSBI.__toStringGeneric(this, radix, false);\n    }\n    valueOf() {\n        throw new Error('Convert JSBI instances to native numbers using `toNumber`.');\n    }\n    // Equivalent of \"Number(my_bigint)\" in the native implementation.\n    // TODO: add more tests\n    static toNumber(x) {\n        const xLength = x.length;\n        if (xLength === 0)\n            return 0;\n        if (xLength === 1) {\n            const value = x.__unsignedDigit(0);\n            return x.sign ? -value : value;\n        }\n        const xMsd = x.__digit(xLength - 1);\n        const msdLeadingZeros = JSBI.__clz30(xMsd);\n        const xBitLength = xLength * 30 - msdLeadingZeros;\n        if (xBitLength > 1024)\n            return x.sign ? -Infinity : Infinity;\n        let exponent = xBitLength - 1;\n        let currentDigit = xMsd;\n        let digitIndex = xLength - 1;\n        const shift = msdLeadingZeros + 3;\n        let mantissaHigh = (shift === 32) ? 0 : currentDigit << shift;\n        mantissaHigh >>>= 12;\n        const mantissaHighBitsUnset = shift - 12;\n        let mantissaLow = (shift >= 12) ? 0 : (currentDigit << (20 + shift));\n        let mantissaLowBitsUnset = 20 + shift;\n        if (mantissaHighBitsUnset > 0 && digitIndex > 0) {\n            digitIndex--;\n            currentDigit = x.__digit(digitIndex);\n            mantissaHigh |= (currentDigit >>> (30 - mantissaHighBitsUnset));\n            mantissaLow = currentDigit << mantissaHighBitsUnset + 2;\n            mantissaLowBitsUnset = mantissaHighBitsUnset + 2;\n        }\n        while (mantissaLowBitsUnset > 0 && digitIndex > 0) {\n            digitIndex--;\n            currentDigit = x.__digit(digitIndex);\n            if (mantissaLowBitsUnset >= 30) {\n                mantissaLow |= (currentDigit << (mantissaLowBitsUnset - 30));\n            }\n            else {\n                mantissaLow |= (currentDigit >>> (30 - mantissaLowBitsUnset));\n            }\n            mantissaLowBitsUnset -= 30;\n        }\n        const rounding = JSBI.__decideRounding(x, mantissaLowBitsUnset, digitIndex, currentDigit);\n        if (rounding === 1 || (rounding === 0 && (mantissaLow & 1) === 1)) {\n            mantissaLow = (mantissaLow + 1) >>> 0;\n            if (mantissaLow === 0) {\n                // Incrementing mantissaLow overflowed.\n                mantissaHigh++;\n                if ((mantissaHigh >>> 20) !== 0) {\n                    // Incrementing mantissaHigh overflowed.\n                    mantissaHigh = 0;\n                    exponent++;\n                    if (exponent > 1023) {\n                        // Incrementing the exponent overflowed.\n                        return x.sign ? -Infinity : Infinity;\n                    }\n                }\n            }\n        }\n        const signBit = x.sign ? (1 << 31) : 0;\n        exponent = (exponent + 0x3FF) << 20;\n        JSBI.__kBitConversionInts[1] = signBit | exponent | mantissaHigh;\n        JSBI.__kBitConversionInts[0] = mantissaLow;\n        return JSBI.__kBitConversionDouble[0];\n    }\n    // Operations.\n    static unaryMinus(x) {\n        if (x.length === 0)\n            return x;\n        const result = x.__copy();\n        result.sign = !x.sign;\n        return result;\n    }\n    static bitwiseNot(x) {\n        if (x.sign) {\n            // ~(-x) == ~(~(x-1)) == x-1\n            return JSBI.__absoluteSubOne(x).__trim();\n        }\n        // ~x == -x-1 == -(x+1)\n        return JSBI.__absoluteAddOne(x, true);\n    }\n    static exponentiate(x, y) {\n        if (y.sign) {\n            throw new RangeError('Exponent must be positive');\n        }\n        if (y.length === 0) {\n            return JSBI.__oneDigit(1, false);\n        }\n        if (x.length === 0)\n            return x;\n        if (x.length === 1 && x.__digit(0) === 1) {\n            // (-1) ** even_number == 1.\n            if (x.sign && (y.__digit(0) & 1) === 0) {\n                return JSBI.unaryMinus(x);\n            }\n            // (-1) ** odd_number == -1, 1 ** anything == 1.\n            return x;\n        }\n        // For all bases >= 2, very large exponents would lead to unrepresentable\n        // results.\n        if (y.length > 1)\n            throw new RangeError('BigInt too big');\n        let expValue = y.__unsignedDigit(0);\n        if (expValue === 1)\n            return x;\n        if (expValue >= JSBI.__kMaxLengthBits) {\n            throw new RangeError('BigInt too big');\n        }\n        if (x.length === 1 && x.__digit(0) === 2) {\n            // Fast path for 2^n.\n            const neededDigits = 1 + ((expValue / 30) | 0);\n            const sign = x.sign && ((expValue & 1) !== 0);\n            const result = new JSBI(neededDigits, sign);\n            result.__initializeDigits();\n            // All bits are zero. Now set the n-th bit.\n            const msd = 1 << (expValue % 30);\n            result.__setDigit(neededDigits - 1, msd);\n            return result;\n        }\n        let result = null;\n        let runningSquare = x;\n        // This implicitly sets the result's sign correctly.\n        if ((expValue & 1) !== 0)\n            result = x;\n        expValue >>= 1;\n        for (; expValue !== 0; expValue >>= 1) {\n            runningSquare = JSBI.multiply(runningSquare, runningSquare);\n            if ((expValue & 1) !== 0) {\n                if (result === null) {\n                    result = runningSquare;\n                }\n                else {\n                    result = JSBI.multiply(result, runningSquare);\n                }\n            }\n        }\n        // TODO see if there's a way for tsc to infer this will always happen?\n        return result;\n    }\n    static multiply(x, y) {\n        if (x.length === 0)\n            return x;\n        if (y.length === 0)\n            return y;\n        let resultLength = x.length + y.length;\n        if (x.__clzmsd() + y.__clzmsd() >= 30) {\n            resultLength--;\n        }\n        const result = new JSBI(resultLength, x.sign !== y.sign);\n        result.__initializeDigits();\n        for (let i = 0; i < x.length; i++) {\n            JSBI.__multiplyAccumulate(y, x.__digit(i), result, i);\n        }\n        return result.__trim();\n    }\n    static divide(x, y) {\n        if (y.length === 0)\n            throw new RangeError('Division by zero');\n        if (JSBI.__absoluteCompare(x, y) < 0)\n            return JSBI.__zero();\n        const resultSign = x.sign !== y.sign;\n        const divisor = y.__unsignedDigit(0);\n        let quotient;\n        if (y.length === 1 && divisor <= 0x7FFF) {\n            if (divisor === 1) {\n                return resultSign === x.sign ? x : JSBI.unaryMinus(x);\n            }\n            quotient = JSBI.__absoluteDivSmall(x, divisor, null);\n        }\n        else {\n            quotient = JSBI.__absoluteDivLarge(x, y, true, false);\n        }\n        quotient.sign = resultSign;\n        return quotient.__trim();\n    }\n    static remainder(x, y) {\n        if (y.length === 0)\n            throw new RangeError('Division by zero');\n        if (JSBI.__absoluteCompare(x, y) < 0)\n            return x;\n        const divisor = y.__unsignedDigit(0);\n        if (y.length === 1 && divisor <= 0x7FFF) {\n            if (divisor === 1)\n                return JSBI.__zero();\n            const remainderDigit = JSBI.__absoluteModSmall(x, divisor);\n            if (remainderDigit === 0)\n                return JSBI.__zero();\n            return JSBI.__oneDigit(remainderDigit, x.sign);\n        }\n        const remainder = JSBI.__absoluteDivLarge(x, y, false, true);\n        remainder.sign = x.sign;\n        return remainder.__trim();\n    }\n    static add(x, y) {\n        const sign = x.sign;\n        if (sign === y.sign) {\n            // x + y == x + y\n            // -x + -y == -(x + y)\n            return JSBI.__absoluteAdd(x, y, sign);\n        }\n        // x + -y == x - y == -(y - x)\n        // -x + y == y - x == -(x - y)\n        if (JSBI.__absoluteCompare(x, y) >= 0) {\n            return JSBI.__absoluteSub(x, y, sign);\n        }\n        return JSBI.__absoluteSub(y, x, !sign);\n    }\n    static subtract(x, y) {\n        const sign = x.sign;\n        if (sign !== y.sign) {\n            // x - (-y) == x + y\n            // (-x) - y == -(x + y)\n            return JSBI.__absoluteAdd(x, y, sign);\n        }\n        // x - y == -(y - x)\n        // (-x) - (-y) == y - x == -(x - y)\n        if (JSBI.__absoluteCompare(x, y) >= 0) {\n            return JSBI.__absoluteSub(x, y, sign);\n        }\n        return JSBI.__absoluteSub(y, x, !sign);\n    }\n    static leftShift(x, y) {\n        if (y.length === 0 || x.length === 0)\n            return x;\n        if (y.sign)\n            return JSBI.__rightShiftByAbsolute(x, y);\n        return JSBI.__leftShiftByAbsolute(x, y);\n    }\n    static signedRightShift(x, y) {\n        if (y.length === 0 || x.length === 0)\n            return x;\n        if (y.sign)\n            return JSBI.__leftShiftByAbsolute(x, y);\n        return JSBI.__rightShiftByAbsolute(x, y);\n    }\n    static unsignedRightShift() {\n        throw new TypeError('BigInts have no unsigned right shift; use >> instead');\n    }\n    static lessThan(x, y) {\n        return JSBI.__compareToBigInt(x, y) < 0;\n    }\n    static lessThanOrEqual(x, y) {\n        return JSBI.__compareToBigInt(x, y) <= 0;\n    }\n    static greaterThan(x, y) {\n        return JSBI.__compareToBigInt(x, y) > 0;\n    }\n    static greaterThanOrEqual(x, y) {\n        return JSBI.__compareToBigInt(x, y) >= 0;\n    }\n    static equal(x, y) {\n        if (x.sign !== y.sign)\n            return false;\n        if (x.length !== y.length)\n            return false;\n        for (let i = 0; i < x.length; i++) {\n            if (x.__digit(i) !== y.__digit(i))\n                return false;\n        }\n        return true;\n    }\n    static notEqual(x, y) {\n        return !JSBI.equal(x, y);\n    }\n    static bitwiseAnd(x, y) {\n        if (!x.sign && !y.sign) {\n            return JSBI.__absoluteAnd(x, y).__trim();\n        }\n        else if (x.sign && y.sign) {\n            const resultLength = Math.max(x.length, y.length) + 1;\n            // (-x) & (-y) == ~(x-1) & ~(y-1) == ~((x-1) | (y-1))\n            // == -(((x-1) | (y-1)) + 1)\n            let result = JSBI.__absoluteSubOne(x, resultLength);\n            const y1 = JSBI.__absoluteSubOne(y);\n            result = JSBI.__absoluteOr(result, y1, result);\n            return JSBI.__absoluteAddOne(result, true, result).__trim();\n        }\n        // Assume that x is the positive BigInt.\n        if (x.sign) {\n            [x, y] = [y, x];\n        }\n        // x & (-y) == x & ~(y-1) == x &~ (y-1)\n        return JSBI.__absoluteAndNot(x, JSBI.__absoluteSubOne(y)).__trim();\n    }\n    static bitwiseXor(x, y) {\n        if (!x.sign && !y.sign) {\n            return JSBI.__absoluteXor(x, y).__trim();\n        }\n        else if (x.sign && y.sign) {\n            // (-x) ^ (-y) == ~(x-1) ^ ~(y-1) == (x-1) ^ (y-1)\n            const resultLength = Math.max(x.length, y.length);\n            const result = JSBI.__absoluteSubOne(x, resultLength);\n            const y1 = JSBI.__absoluteSubOne(y);\n            return JSBI.__absoluteXor(result, y1, result).__trim();\n        }\n        const resultLength = Math.max(x.length, y.length) + 1;\n        // Assume that x is the positive BigInt.\n        if (x.sign) {\n            [x, y] = [y, x];\n        }\n        // x ^ (-y) == x ^ ~(y-1) == ~(x ^ (y-1)) == -((x ^ (y-1)) + 1)\n        let result = JSBI.__absoluteSubOne(y, resultLength);\n        result = JSBI.__absoluteXor(result, x, result);\n        return JSBI.__absoluteAddOne(result, true, result).__trim();\n    }\n    static bitwiseOr(x, y) {\n        const resultLength = Math.max(x.length, y.length);\n        if (!x.sign && !y.sign) {\n            return JSBI.__absoluteOr(x, y).__trim();\n        }\n        else if (x.sign && y.sign) {\n            // (-x) | (-y) == ~(x-1) | ~(y-1) == ~((x-1) & (y-1))\n            // == -(((x-1) & (y-1)) + 1)\n            let result = JSBI.__absoluteSubOne(x, resultLength);\n            const y1 = JSBI.__absoluteSubOne(y);\n            result = JSBI.__absoluteAnd(result, y1, result);\n            return JSBI.__absoluteAddOne(result, true, result).__trim();\n        }\n        // Assume that x is the positive BigInt.\n        if (x.sign) {\n            [x, y] = [y, x];\n        }\n        // x | (-y) == x | ~(y-1) == ~((y-1) &~ x) == -(((y-1) ~& x) + 1)\n        let result = JSBI.__absoluteSubOne(y, resultLength);\n        result = JSBI.__absoluteAndNot(result, x, result);\n        return JSBI.__absoluteAddOne(result, true, result).__trim();\n    }\n    static asIntN(n, x) {\n        if (x.length === 0)\n            return x;\n        n = Math.floor(n);\n        if (n < 0) {\n            throw new RangeError('Invalid value: not (convertible to) a safe integer');\n        }\n        if (n === 0)\n            return JSBI.__zero();\n        // If {x} has less than {n} bits, return it directly.\n        if (n >= JSBI.__kMaxLengthBits)\n            return x;\n        const neededLength = ((n + 29) / 30) | 0;\n        if (x.length < neededLength)\n            return x;\n        const topDigit = x.__unsignedDigit(neededLength - 1);\n        const compareDigit = 1 << ((n - 1) % 30);\n        if (x.length === neededLength && topDigit < compareDigit)\n            return x;\n        // Otherwise truncate and simulate two's complement.\n        const hasBit = (topDigit & compareDigit) === compareDigit;\n        if (!hasBit)\n            return JSBI.__truncateToNBits(n, x);\n        if (!x.sign)\n            return JSBI.__truncateAndSubFromPowerOfTwo(n, x, true);\n        if ((topDigit & (compareDigit - 1)) === 0) {\n            for (let i = neededLength - 2; i >= 0; i--) {\n                if (x.__digit(i) !== 0) {\n                    return JSBI.__truncateAndSubFromPowerOfTwo(n, x, false);\n                }\n            }\n            if (x.length === neededLength && topDigit === compareDigit)\n                return x;\n            return JSBI.__truncateToNBits(n, x);\n        }\n        return JSBI.__truncateAndSubFromPowerOfTwo(n, x, false);\n    }\n    static asUintN(n, x) {\n        if (x.length === 0)\n            return x;\n        n = Math.floor(n);\n        if (n < 0) {\n            throw new RangeError('Invalid value: not (convertible to) a safe integer');\n        }\n        if (n === 0)\n            return JSBI.__zero();\n        // If {x} is negative, simulate two's complement representation.\n        if (x.sign) {\n            if (n > JSBI.__kMaxLengthBits) {\n                throw new RangeError('BigInt too big');\n            }\n            return JSBI.__truncateAndSubFromPowerOfTwo(n, x, false);\n        }\n        // If {x} is positive and has up to {n} bits, return it directly.\n        if (n >= JSBI.__kMaxLengthBits)\n            return x;\n        const neededLength = ((n + 29) / 30) | 0;\n        if (x.length < neededLength)\n            return x;\n        const bitsInTopDigit = n % 30;\n        if (x.length == neededLength) {\n            if (bitsInTopDigit === 0)\n                return x;\n            const topDigit = x.__digit(neededLength - 1);\n            if ((topDigit >>> bitsInTopDigit) === 0)\n                return x;\n        }\n        // Otherwise, truncate.\n        return JSBI.__truncateToNBits(n, x);\n    }\n    // Operators.\n    static ADD(x, y) {\n        x = JSBI.__toPrimitive(x);\n        y = JSBI.__toPrimitive(y);\n        if (typeof x === 'string') {\n            if (typeof y !== 'string')\n                y = y.toString();\n            return x + y;\n        }\n        if (typeof y === 'string') {\n            return x.toString() + y;\n        }\n        x = JSBI.__toNumeric(x);\n        y = JSBI.__toNumeric(y);\n        if (JSBI.__isBigInt(x) && JSBI.__isBigInt(y)) {\n            return JSBI.add(x, y);\n        }\n        if (typeof x === 'number' && typeof y === 'number') {\n            return x + y;\n        }\n        throw new TypeError('Cannot mix BigInt and other types, use explicit conversions');\n    }\n    static LT(x, y) {\n        return JSBI.__compare(x, y, 0);\n    }\n    static LE(x, y) {\n        return JSBI.__compare(x, y, 1);\n    }\n    static GT(x, y) {\n        return JSBI.__compare(x, y, 2);\n    }\n    static GE(x, y) {\n        return JSBI.__compare(x, y, 3);\n    }\n    static EQ(x, y) {\n        while (true) {\n            if (JSBI.__isBigInt(x)) {\n                if (JSBI.__isBigInt(y))\n                    return JSBI.equal(x, y);\n                return JSBI.EQ(y, x);\n            }\n            else if (typeof x === 'number') {\n                if (JSBI.__isBigInt(y))\n                    return JSBI.__equalToNumber(y, x);\n                if (typeof y !== 'object')\n                    return x == y;\n                y = JSBI.__toPrimitive(y);\n            }\n            else if (typeof x === 'string') {\n                if (JSBI.__isBigInt(y)) {\n                    x = JSBI.__fromString(x);\n                    if (x === null)\n                        return false;\n                    return JSBI.equal(x, y);\n                }\n                if (typeof y !== 'object')\n                    return x == y;\n                y = JSBI.__toPrimitive(y);\n            }\n            else if (typeof x === 'boolean') {\n                if (JSBI.__isBigInt(y))\n                    return JSBI.__equalToNumber(y, +x);\n                if (typeof y !== 'object')\n                    return x == y;\n                y = JSBI.__toPrimitive(y);\n            }\n            else if (typeof x === 'symbol') {\n                if (JSBI.__isBigInt(y))\n                    return false;\n                if (typeof y !== 'object')\n                    return x == y;\n                y = JSBI.__toPrimitive(y);\n            }\n            else if (typeof x === 'object') {\n                if (typeof y === 'object' && y.constructor !== JSBI)\n                    return x == y;\n                x = JSBI.__toPrimitive(x);\n            }\n            else {\n                return x == y;\n            }\n        }\n    }\n    static NE(x, y) {\n        return !JSBI.EQ(x, y);\n    }\n    // DataView-related functionality.\n    static DataViewGetBigInt64(dataview, byteOffset, littleEndian = false) {\n        return JSBI.asIntN(64, JSBI.DataViewGetBigUint64(dataview, byteOffset, littleEndian));\n    }\n    static DataViewGetBigUint64(dataview, byteOffset, littleEndian = false) {\n        const [h, l] = littleEndian ? [4, 0] : [0, 4];\n        const high = dataview.getUint32(byteOffset + h, littleEndian);\n        const low = dataview.getUint32(byteOffset + l, littleEndian);\n        const result = new JSBI(3, false);\n        result.__setDigit(0, low & 0x3FFFFFFF);\n        result.__setDigit(1, ((high & 0xFFFFFFF) << 2) | (low >>> 30));\n        result.__setDigit(2, high >>> 28);\n        return result.__trim();\n    }\n    static DataViewSetBigInt64(dataview, byteOffset, value, littleEndian = false) {\n        JSBI.DataViewSetBigUint64(dataview, byteOffset, value, littleEndian);\n    }\n    static DataViewSetBigUint64(dataview, byteOffset, value, littleEndian = false) {\n        value = JSBI.asUintN(64, value);\n        let high = 0;\n        let low = 0;\n        if (value.length > 0) {\n            low = value.__digit(0);\n            if (value.length > 1) {\n                const d1 = value.__digit(1);\n                low = low | d1 << 30;\n                high = d1 >>> 2;\n                if (value.length > 2) {\n                    high = high | (value.__digit(2) << 28);\n                }\n            }\n        }\n        const [h, l] = littleEndian ? [4, 0] : [0, 4];\n        dataview.setUint32(byteOffset + h, high, littleEndian);\n        dataview.setUint32(byteOffset + l, low, littleEndian);\n    }\n    // Helpers.\n    static __zero() {\n        return new JSBI(0, false);\n    }\n    static __oneDigit(value, sign) {\n        const result = new JSBI(1, sign);\n        result.__setDigit(0, value);\n        return result;\n    }\n    __copy() {\n        const result = new JSBI(this.length, this.sign);\n        for (let i = 0; i < this.length; i++) {\n            result[i] = this[i];\n        }\n        return result;\n    }\n    __trim() {\n        let newLength = this.length;\n        let last = this[newLength - 1];\n        while (last === 0) {\n            newLength--;\n            last = this[newLength - 1];\n            this.pop();\n        }\n        if (newLength === 0)\n            this.sign = false;\n        return this;\n    }\n    __initializeDigits() {\n        for (let i = 0; i < this.length; i++) {\n            this[i] = 0;\n        }\n    }\n    static __decideRounding(x, mantissaBitsUnset, digitIndex, currentDigit) {\n        if (mantissaBitsUnset > 0)\n            return -1;\n        let topUnconsumedBit;\n        if (mantissaBitsUnset < 0) {\n            topUnconsumedBit = -mantissaBitsUnset - 1;\n        }\n        else {\n            // {currentDigit} fit the mantissa exactly; look at the next digit.\n            if (digitIndex === 0)\n                return -1;\n            digitIndex--;\n            currentDigit = x.__digit(digitIndex);\n            topUnconsumedBit = 29;\n        }\n        // If the most significant remaining bit is 0, round down.\n        let mask = 1 << topUnconsumedBit;\n        if ((currentDigit & mask) === 0)\n            return -1;\n        // If any other remaining bit is set, round up.\n        mask -= 1;\n        if ((currentDigit & mask) !== 0)\n            return 1;\n        while (digitIndex > 0) {\n            digitIndex--;\n            if (x.__digit(digitIndex) !== 0)\n                return 1;\n        }\n        return 0;\n    }\n    static __fromDouble(value) {\n        const sign = value < 0;\n        JSBI.__kBitConversionDouble[0] = value;\n        const rawExponent = (JSBI.__kBitConversionInts[1] >>> 20) & 0x7FF;\n        const exponent = rawExponent - 0x3FF;\n        const digits = ((exponent / 30) | 0) + 1;\n        const result = new JSBI(digits, sign);\n        const kHiddenBit = 0x00100000;\n        let mantissaHigh = (JSBI.__kBitConversionInts[1] & 0xFFFFF) | kHiddenBit;\n        let mantissaLow = JSBI.__kBitConversionInts[0];\n        const kMantissaHighTopBit = 20;\n        // 0-indexed position of most significant bit in most significant digit.\n        const msdTopBit = exponent % 30;\n        // Number of unused bits in the mantissa. We'll keep them shifted to the\n        // left (i.e. most significant part).\n        let remainingMantissaBits = 0;\n        // Next digit under construction.\n        let digit;\n        // First, build the MSD by shifting the mantissa appropriately.\n        if (msdTopBit < kMantissaHighTopBit) {\n            const shift = kMantissaHighTopBit - msdTopBit;\n            remainingMantissaBits = shift + 32;\n            digit = mantissaHigh >>> shift;\n            mantissaHigh = (mantissaHigh << (32 - shift)) | (mantissaLow >>> shift);\n            mantissaLow = mantissaLow << (32 - shift);\n        }\n        else if (msdTopBit === kMantissaHighTopBit) {\n            remainingMantissaBits = 32;\n            digit = mantissaHigh;\n            mantissaHigh = mantissaLow;\n            mantissaLow = 0;\n        }\n        else {\n            const shift = msdTopBit - kMantissaHighTopBit;\n            remainingMantissaBits = 32 - shift;\n            digit = (mantissaHigh << shift) | (mantissaLow >>> (32 - shift));\n            mantissaHigh = mantissaLow << shift;\n            mantissaLow = 0;\n        }\n        result.__setDigit(digits - 1, digit);\n        // Then fill in the rest of the digits.\n        for (let digitIndex = digits - 2; digitIndex >= 0; digitIndex--) {\n            if (remainingMantissaBits > 0) {\n                remainingMantissaBits -= 30;\n                digit = mantissaHigh >>> 2;\n                mantissaHigh = (mantissaHigh << 30) | (mantissaLow >>> 2);\n                mantissaLow = (mantissaLow << 30);\n            }\n            else {\n                digit = 0;\n            }\n            result.__setDigit(digitIndex, digit);\n        }\n        return result.__trim();\n    }\n    static __isWhitespace(c) {\n        if (c <= 0x0D && c >= 0x09)\n            return true;\n        if (c <= 0x9F)\n            return c === 0x20;\n        if (c <= 0x01FFFF) {\n            return c === 0xA0 || c === 0x1680;\n        }\n        if (c <= 0x02FFFF) {\n            c &= 0x01FFFF;\n            return c <= 0x0A || c === 0x28 || c === 0x29 || c === 0x2F ||\n                c === 0x5F || c === 0x1000;\n        }\n        return c === 0xFEFF;\n    }\n    static __fromString(string, radix = 0) {\n        let sign = 0;\n        let leadingZero = false;\n        const length = string.length;\n        let cursor = 0;\n        if (cursor === length)\n            return JSBI.__zero();\n        let current = string.charCodeAt(cursor);\n        // Skip whitespace.\n        while (JSBI.__isWhitespace(current)) {\n            if (++cursor === length)\n                return JSBI.__zero();\n            current = string.charCodeAt(cursor);\n        }\n        // Detect radix.\n        if (current === 0x2B) { // '+'\n            if (++cursor === length)\n                return null;\n            current = string.charCodeAt(cursor);\n            sign = 1;\n        }\n        else if (current === 0x2D) { // '-'\n            if (++cursor === length)\n                return null;\n            current = string.charCodeAt(cursor);\n            sign = -1;\n        }\n        if (radix === 0) {\n            radix = 10;\n            if (current === 0x30) { // '0'\n                if (++cursor === length)\n                    return JSBI.__zero();\n                current = string.charCodeAt(cursor);\n                if (current === 0x58 || current === 0x78) { // 'X' or 'x'\n                    radix = 16;\n                    if (++cursor === length)\n                        return null;\n                    current = string.charCodeAt(cursor);\n                }\n                else if (current === 0x4F || current === 0x6F) { // 'O' or 'o'\n                    radix = 8;\n                    if (++cursor === length)\n                        return null;\n                    current = string.charCodeAt(cursor);\n                }\n                else if (current === 0x42 || current === 0x62) { // 'B' or 'b'\n                    radix = 2;\n                    if (++cursor === length)\n                        return null;\n                    current = string.charCodeAt(cursor);\n                }\n                else {\n                    leadingZero = true;\n                }\n            }\n        }\n        else if (radix === 16) {\n            if (current === 0x30) { // '0'\n                // Allow \"0x\" prefix.\n                if (++cursor === length)\n                    return JSBI.__zero();\n                current = string.charCodeAt(cursor);\n                if (current === 0x58 || current === 0x78) { // 'X' or 'x'\n                    if (++cursor === length)\n                        return null;\n                    current = string.charCodeAt(cursor);\n                }\n                else {\n                    leadingZero = true;\n                }\n            }\n        }\n        if (sign !== 0 && radix !== 10)\n            return null;\n        // Skip leading zeros.\n        while (current === 0x30) {\n            leadingZero = true;\n            if (++cursor === length)\n                return JSBI.__zero();\n            current = string.charCodeAt(cursor);\n        }\n        // Allocate result.\n        const chars = length - cursor;\n        let bitsPerChar = JSBI.__kMaxBitsPerChar[radix];\n        let roundup = JSBI.__kBitsPerCharTableMultiplier - 1;\n        if (chars > (1 << 30) / bitsPerChar)\n            return null;\n        const bitsMin = (bitsPerChar * chars + roundup) >>> JSBI.__kBitsPerCharTableShift;\n        const resultLength = ((bitsMin + 29) / 30) | 0;\n        const result = new JSBI(resultLength, false);\n        // Parse.\n        const limDigit = radix < 10 ? radix : 10;\n        const limAlpha = radix > 10 ? radix - 10 : 0;\n        if ((radix & (radix - 1)) === 0) {\n            // Power-of-two radix.\n            bitsPerChar >>= JSBI.__kBitsPerCharTableShift;\n            const parts = [];\n            const partsBits = [];\n            let done = false;\n            do {\n                let part = 0;\n                let bits = 0;\n                while (true) {\n                    let d;\n                    if (((current - 48) >>> 0) < limDigit) {\n                        d = current - 48;\n                    }\n                    else if ((((current | 32) - 97) >>> 0) < limAlpha) {\n                        d = (current | 32) - 87;\n                    }\n                    else {\n                        done = true;\n                        break;\n                    }\n                    bits += bitsPerChar;\n                    part = (part << bitsPerChar) | d;\n                    if (++cursor === length) {\n                        done = true;\n                        break;\n                    }\n                    current = string.charCodeAt(cursor);\n                    if (bits + bitsPerChar > 30)\n                        break;\n                }\n                parts.push(part);\n                partsBits.push(bits);\n            } while (!done);\n            JSBI.__fillFromParts(result, parts, partsBits);\n        }\n        else {\n            result.__initializeDigits();\n            let done = false;\n            let charsSoFar = 0;\n            do {\n                let part = 0;\n                let multiplier = 1;\n                while (true) {\n                    let d;\n                    if (((current - 48) >>> 0) < limDigit) {\n                        d = current - 48;\n                    }\n                    else if ((((current | 32) - 97) >>> 0) < limAlpha) {\n                        d = (current | 32) - 87;\n                    }\n                    else {\n                        done = true;\n                        break;\n                    }\n                    const m = multiplier * radix;\n                    if (m > 0x3FFFFFFF)\n                        break;\n                    multiplier = m;\n                    part = part * radix + d;\n                    charsSoFar++;\n                    if (++cursor === length) {\n                        done = true;\n                        break;\n                    }\n                    current = string.charCodeAt(cursor);\n                }\n                roundup = JSBI.__kBitsPerCharTableMultiplier * 30 - 1;\n                const digitsSoFar = (((bitsPerChar * charsSoFar + roundup) >>>\n                    JSBI.__kBitsPerCharTableShift) / 30) | 0;\n                result.__inplaceMultiplyAdd(multiplier, part, digitsSoFar);\n            } while (!done);\n        }\n        if (cursor !== length) {\n            if (!JSBI.__isWhitespace(current))\n                return null;\n            for (cursor++; cursor < length; cursor++) {\n                current = string.charCodeAt(cursor);\n                if (!JSBI.__isWhitespace(current))\n                    return null;\n            }\n        }\n        // Get result.\n        result.sign = (sign === -1);\n        return result.__trim();\n    }\n    static __fillFromParts(result, parts, partsBits) {\n        let digitIndex = 0;\n        let digit = 0;\n        let bitsInDigit = 0;\n        for (let i = parts.length - 1; i >= 0; i--) {\n            const part = parts[i];\n            const partBits = partsBits[i];\n            digit |= (part << bitsInDigit);\n            bitsInDigit += partBits;\n            if (bitsInDigit === 30) {\n                result.__setDigit(digitIndex++, digit);\n                bitsInDigit = 0;\n                digit = 0;\n            }\n            else if (bitsInDigit > 30) {\n                result.__setDigit(digitIndex++, digit & 0x3FFFFFFF);\n                bitsInDigit -= 30;\n                digit = part >>> (partBits - bitsInDigit);\n            }\n        }\n        if (digit !== 0) {\n            if (digitIndex >= result.length)\n                throw new Error('implementation bug');\n            result.__setDigit(digitIndex++, digit);\n        }\n        for (; digitIndex < result.length; digitIndex++) {\n            result.__setDigit(digitIndex, 0);\n        }\n    }\n    static __toStringBasePowerOfTwo(x, radix) {\n        const length = x.length;\n        let bits = radix - 1;\n        bits = ((bits >>> 1) & 0x55) + (bits & 0x55);\n        bits = ((bits >>> 2) & 0x33) + (bits & 0x33);\n        bits = ((bits >>> 4) & 0x0F) + (bits & 0x0F);\n        const bitsPerChar = bits;\n        const charMask = radix - 1;\n        const msd = x.__digit(length - 1);\n        const msdLeadingZeros = JSBI.__clz30(msd);\n        const bitLength = length * 30 - msdLeadingZeros;\n        let charsRequired = ((bitLength + bitsPerChar - 1) / bitsPerChar) | 0;\n        if (x.sign)\n            charsRequired++;\n        if (charsRequired > (1 << 28))\n            throw new Error('string too long');\n        const result = new Array(charsRequired);\n        let pos = charsRequired - 1;\n        let digit = 0;\n        let availableBits = 0;\n        for (let i = 0; i < length - 1; i++) {\n            const newDigit = x.__digit(i);\n            const current = (digit | (newDigit << availableBits)) & charMask;\n            result[pos--] = JSBI.__kConversionChars[current];\n            const consumedBits = bitsPerChar - availableBits;\n            digit = newDigit >>> consumedBits;\n            availableBits = 30 - consumedBits;\n            while (availableBits >= bitsPerChar) {\n                result[pos--] = JSBI.__kConversionChars[digit & charMask];\n                digit >>>= bitsPerChar;\n                availableBits -= bitsPerChar;\n            }\n        }\n        const current = (digit | (msd << availableBits)) & charMask;\n        result[pos--] = JSBI.__kConversionChars[current];\n        digit = msd >>> (bitsPerChar - availableBits);\n        while (digit !== 0) {\n            result[pos--] = JSBI.__kConversionChars[digit & charMask];\n            digit >>>= bitsPerChar;\n        }\n        if (x.sign)\n            result[pos--] = '-';\n        if (pos !== -1)\n            throw new Error('implementation bug');\n        return result.join('');\n    }\n    static __toStringGeneric(x, radix, isRecursiveCall) {\n        const length = x.length;\n        if (length === 0)\n            return '';\n        if (length === 1) {\n            let result = x.__unsignedDigit(0).toString(radix);\n            if (isRecursiveCall === false && x.sign) {\n                result = '-' + result;\n            }\n            return result;\n        }\n        const bitLength = length * 30 - JSBI.__clz30(x.__digit(length - 1));\n        const maxBitsPerChar = JSBI.__kMaxBitsPerChar[radix];\n        const minBitsPerChar = maxBitsPerChar - 1;\n        let charsRequired = bitLength * JSBI.__kBitsPerCharTableMultiplier;\n        charsRequired += minBitsPerChar - 1;\n        charsRequired = (charsRequired / minBitsPerChar) | 0;\n        const secondHalfChars = (charsRequired + 1) >> 1;\n        // Divide-and-conquer: split by a power of {radix} that's approximately\n        // the square root of {x}, then recurse.\n        const conqueror = JSBI.exponentiate(JSBI.__oneDigit(radix, false), JSBI.__oneDigit(secondHalfChars, false));\n        let quotient;\n        let secondHalf;\n        const divisor = conqueror.__unsignedDigit(0);\n        if (conqueror.length === 1 && divisor <= 0x7FFF) {\n            quotient = new JSBI(x.length, false);\n            quotient.__initializeDigits();\n            let remainder = 0;\n            for (let i = x.length * 2 - 1; i >= 0; i--) {\n                const input = (remainder << 15) | x.__halfDigit(i);\n                quotient.__setHalfDigit(i, (input / divisor) | 0);\n                remainder = (input % divisor) | 0;\n            }\n            secondHalf = remainder.toString(radix);\n        }\n        else {\n            const divisionResult = JSBI.__absoluteDivLarge(x, conqueror, true, true);\n            quotient = divisionResult.quotient;\n            const remainder = divisionResult.remainder.__trim();\n            secondHalf = JSBI.__toStringGeneric(remainder, radix, true);\n        }\n        quotient.__trim();\n        let firstHalf = JSBI.__toStringGeneric(quotient, radix, true);\n        while (secondHalf.length < secondHalfChars) {\n            secondHalf = '0' + secondHalf;\n        }\n        if (isRecursiveCall === false && x.sign) {\n            firstHalf = '-' + firstHalf;\n        }\n        return firstHalf + secondHalf;\n    }\n    static __unequalSign(leftNegative) {\n        return leftNegative ? -1 : 1;\n    }\n    static __absoluteGreater(bothNegative) {\n        return bothNegative ? -1 : 1;\n    }\n    static __absoluteLess(bothNegative) {\n        return bothNegative ? 1 : -1;\n    }\n    static __compareToBigInt(x, y) {\n        const xSign = x.sign;\n        if (xSign !== y.sign)\n            return JSBI.__unequalSign(xSign);\n        const result = JSBI.__absoluteCompare(x, y);\n        if (result > 0)\n            return JSBI.__absoluteGreater(xSign);\n        if (result < 0)\n            return JSBI.__absoluteLess(xSign);\n        return 0;\n    }\n    static __compareToNumber(x, y) {\n        if (JSBI.__isOneDigitInt(y)) {\n            const xSign = x.sign;\n            const ySign = (y < 0);\n            if (xSign !== ySign)\n                return JSBI.__unequalSign(xSign);\n            if (x.length === 0) {\n                if (ySign)\n                    throw new Error('implementation bug');\n                return y === 0 ? 0 : -1;\n            }\n            // Any multi-digit BigInt is bigger than an int32.\n            if (x.length > 1)\n                return JSBI.__absoluteGreater(xSign);\n            const yAbs = Math.abs(y);\n            const xDigit = x.__unsignedDigit(0);\n            if (xDigit > yAbs)\n                return JSBI.__absoluteGreater(xSign);\n            if (xDigit < yAbs)\n                return JSBI.__absoluteLess(xSign);\n            return 0;\n        }\n        return JSBI.__compareToDouble(x, y);\n    }\n    static __compareToDouble(x, y) {\n        if (y !== y)\n            return y; // NaN.\n        if (y === Infinity)\n            return -1;\n        if (y === -Infinity)\n            return 1;\n        const xSign = x.sign;\n        const ySign = (y < 0);\n        if (xSign !== ySign)\n            return JSBI.__unequalSign(xSign);\n        if (y === 0) {\n            throw new Error('implementation bug: should be handled elsewhere');\n        }\n        if (x.length === 0)\n            return -1;\n        JSBI.__kBitConversionDouble[0] = y;\n        const rawExponent = (JSBI.__kBitConversionInts[1] >>> 20) & 0x7FF;\n        if (rawExponent === 0x7FF) {\n            throw new Error('implementation bug: handled elsewhere');\n        }\n        const exponent = rawExponent - 0x3FF;\n        if (exponent < 0) {\n            // The absolute value of y is less than 1. Only 0n has an absolute\n            // value smaller than that, but we've already covered that case.\n            return JSBI.__absoluteGreater(xSign);\n        }\n        const xLength = x.length;\n        let xMsd = x.__digit(xLength - 1);\n        const msdLeadingZeros = JSBI.__clz30(xMsd);\n        const xBitLength = xLength * 30 - msdLeadingZeros;\n        const yBitLength = exponent + 1;\n        if (xBitLength < yBitLength)\n            return JSBI.__absoluteLess(xSign);\n        if (xBitLength > yBitLength)\n            return JSBI.__absoluteGreater(xSign);\n        // Same sign, same bit length. Shift mantissa to align with x and compare\n        // bit for bit.\n        const kHiddenBit = 0x00100000;\n        let mantissaHigh = (JSBI.__kBitConversionInts[1] & 0xFFFFF) | kHiddenBit;\n        let mantissaLow = JSBI.__kBitConversionInts[0];\n        const kMantissaHighTopBit = 20;\n        const msdTopBit = 29 - msdLeadingZeros;\n        if (msdTopBit !== (((xBitLength - 1) % 30) | 0)) {\n            throw new Error('implementation bug');\n        }\n        let compareMantissa; // Shifted chunk of mantissa.\n        let remainingMantissaBits = 0;\n        // First, compare most significant digit against beginning of mantissa.\n        if (msdTopBit < kMantissaHighTopBit) {\n            const shift = kMantissaHighTopBit - msdTopBit;\n            remainingMantissaBits = shift + 32;\n            compareMantissa = mantissaHigh >>> shift;\n            mantissaHigh = (mantissaHigh << (32 - shift)) | (mantissaLow >>> shift);\n            mantissaLow = mantissaLow << (32 - shift);\n        }\n        else if (msdTopBit === kMantissaHighTopBit) {\n            remainingMantissaBits = 32;\n            compareMantissa = mantissaHigh;\n            mantissaHigh = mantissaLow;\n            mantissaLow = 0;\n        }\n        else {\n            const shift = msdTopBit - kMantissaHighTopBit;\n            remainingMantissaBits = 32 - shift;\n            compareMantissa =\n                (mantissaHigh << shift) | (mantissaLow >>> (32 - shift));\n            mantissaHigh = mantissaLow << shift;\n            mantissaLow = 0;\n        }\n        xMsd = xMsd >>> 0;\n        compareMantissa = compareMantissa >>> 0;\n        if (xMsd > compareMantissa)\n            return JSBI.__absoluteGreater(xSign);\n        if (xMsd < compareMantissa)\n            return JSBI.__absoluteLess(xSign);\n        // Then, compare additional digits against remaining mantissa bits.\n        for (let digitIndex = xLength - 2; digitIndex >= 0; digitIndex--) {\n            if (remainingMantissaBits > 0) {\n                remainingMantissaBits -= 30;\n                compareMantissa = mantissaHigh >>> 2;\n                mantissaHigh = (mantissaHigh << 30) | (mantissaLow >>> 2);\n                mantissaLow = (mantissaLow << 30);\n            }\n            else {\n                compareMantissa = 0;\n            }\n            const digit = x.__unsignedDigit(digitIndex);\n            if (digit > compareMantissa)\n                return JSBI.__absoluteGreater(xSign);\n            if (digit < compareMantissa)\n                return JSBI.__absoluteLess(xSign);\n        }\n        // Integer parts are equal; check whether {y} has a fractional part.\n        if (mantissaHigh !== 0 || mantissaLow !== 0) {\n            if (remainingMantissaBits === 0)\n                throw new Error('implementation bug');\n            return JSBI.__absoluteLess(xSign);\n        }\n        return 0;\n    }\n    static __equalToNumber(x, y) {\n        if (JSBI.__isOneDigitInt(y)) {\n            if (y === 0)\n                return x.length === 0;\n            // Any multi-digit BigInt is bigger than an int32.\n            return (x.length === 1) && (x.sign === (y < 0)) &&\n                (x.__unsignedDigit(0) === Math.abs(y));\n        }\n        return JSBI.__compareToDouble(x, y) === 0;\n    }\n    // Comparison operations, chosen such that \"op ^ 2\" reverses direction:\n    // 0 - lessThan\n    // 1 - lessThanOrEqual\n    // 2 - greaterThan\n    // 3 - greaterThanOrEqual\n    static __comparisonResultToBool(result, op) {\n        switch (op) {\n            case 0: return result < 0;\n            case 1: return result <= 0;\n            case 2: return result > 0;\n            case 3: return result >= 0;\n        }\n    }\n    static __compare(x, y, op) {\n        x = JSBI.__toPrimitive(x);\n        y = JSBI.__toPrimitive(y);\n        if (typeof x === 'string' && typeof y === 'string') {\n            switch (op) {\n                case 0: return x < y;\n                case 1: return x <= y;\n                case 2: return x > y;\n                case 3: return x >= y;\n            }\n        }\n        if (JSBI.__isBigInt(x) && typeof y === 'string') {\n            y = JSBI.__fromString(y);\n            if (y === null)\n                return false;\n            return JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(x, y), op);\n        }\n        if (typeof x === 'string' && JSBI.__isBigInt(y)) {\n            x = JSBI.__fromString(x);\n            if (x === null)\n                return false;\n            return JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(x, y), op);\n        }\n        x = JSBI.__toNumeric(x);\n        y = JSBI.__toNumeric(y);\n        if (JSBI.__isBigInt(x)) {\n            if (JSBI.__isBigInt(y)) {\n                return JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(x, y), op);\n            }\n            if (typeof y !== 'number')\n                throw new Error('implementation bug');\n            return JSBI.__comparisonResultToBool(JSBI.__compareToNumber(x, y), op);\n        }\n        if (typeof x !== 'number')\n            throw new Error('implementation bug');\n        if (JSBI.__isBigInt(y)) {\n            // Note that \"op ^ 2\" reverses the op's direction.\n            return JSBI.__comparisonResultToBool(JSBI.__compareToNumber(y, x), (op ^ 2));\n        }\n        if (typeof y !== 'number')\n            throw new Error('implementation bug');\n        switch (op) {\n            case 0: return x < y;\n            case 1: return x <= y;\n            case 2: return x > y;\n            case 3: return x >= y;\n        }\n    }\n    __clzmsd() {\n        return JSBI.__clz30(this.__digit(this.length - 1));\n    }\n    static __absoluteAdd(x, y, resultSign) {\n        if (x.length < y.length)\n            return JSBI.__absoluteAdd(y, x, resultSign);\n        if (x.length === 0)\n            return x;\n        if (y.length === 0)\n            return x.sign === resultSign ? x : JSBI.unaryMinus(x);\n        let resultLength = x.length;\n        if (x.__clzmsd() === 0 || (y.length === x.length && y.__clzmsd() === 0)) {\n            resultLength++;\n        }\n        const result = new JSBI(resultLength, resultSign);\n        let carry = 0;\n        let i = 0;\n        for (; i < y.length; i++) {\n            const r = x.__digit(i) + y.__digit(i) + carry;\n            carry = r >>> 30;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        for (; i < x.length; i++) {\n            const r = x.__digit(i) + carry;\n            carry = r >>> 30;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        if (i < result.length) {\n            result.__setDigit(i, carry);\n        }\n        return result.__trim();\n    }\n    static __absoluteSub(x, y, resultSign) {\n        if (x.length === 0)\n            return x;\n        if (y.length === 0)\n            return x.sign === resultSign ? x : JSBI.unaryMinus(x);\n        const result = new JSBI(x.length, resultSign);\n        let borrow = 0;\n        let i = 0;\n        for (; i < y.length; i++) {\n            const r = x.__digit(i) - y.__digit(i) - borrow;\n            borrow = (r >>> 30) & 1;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        for (; i < x.length; i++) {\n            const r = x.__digit(i) - borrow;\n            borrow = (r >>> 30) & 1;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        return result.__trim();\n    }\n    static __absoluteAddOne(x, sign, result = null) {\n        const inputLength = x.length;\n        if (result === null) {\n            result = new JSBI(inputLength, sign);\n        }\n        else {\n            result.sign = sign;\n        }\n        let carry = 1;\n        for (let i = 0; i < inputLength; i++) {\n            const r = x.__digit(i) + carry;\n            carry = r >>> 30;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        if (carry !== 0) {\n            result.__setDigitGrow(inputLength, 1);\n        }\n        return result;\n    }\n    static __absoluteSubOne(x, resultLength) {\n        const length = x.length;\n        resultLength = resultLength || length;\n        const result = new JSBI(resultLength, false);\n        let borrow = 1;\n        for (let i = 0; i < length; i++) {\n            const r = x.__digit(i) - borrow;\n            borrow = (r >>> 30) & 1;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        if (borrow !== 0)\n            throw new Error('implementation bug');\n        for (let i = length; i < resultLength; i++) {\n            result.__setDigit(i, 0);\n        }\n        return result;\n    }\n    static __absoluteAnd(x, y, result = null) {\n        let xLength = x.length;\n        let yLength = y.length;\n        let numPairs = yLength;\n        if (xLength < yLength) {\n            numPairs = xLength;\n            const tmp = x;\n            const tmpLength = xLength;\n            x = y;\n            xLength = yLength;\n            y = tmp;\n            yLength = tmpLength;\n        }\n        let resultLength = numPairs;\n        if (result === null) {\n            result = new JSBI(resultLength, false);\n        }\n        else {\n            resultLength = result.length;\n        }\n        let i = 0;\n        for (; i < numPairs; i++) {\n            result.__setDigit(i, x.__digit(i) & y.__digit(i));\n        }\n        for (; i < resultLength; i++) {\n            result.__setDigit(i, 0);\n        }\n        return result;\n    }\n    static __absoluteAndNot(x, y, result = null) {\n        const xLength = x.length;\n        const yLength = y.length;\n        let numPairs = yLength;\n        if (xLength < yLength) {\n            numPairs = xLength;\n        }\n        let resultLength = xLength;\n        if (result === null) {\n            result = new JSBI(resultLength, false);\n        }\n        else {\n            resultLength = result.length;\n        }\n        let i = 0;\n        for (; i < numPairs; i++) {\n            result.__setDigit(i, x.__digit(i) & ~y.__digit(i));\n        }\n        for (; i < xLength; i++) {\n            result.__setDigit(i, x.__digit(i));\n        }\n        for (; i < resultLength; i++) {\n            result.__setDigit(i, 0);\n        }\n        return result;\n    }\n    static __absoluteOr(x, y, result = null) {\n        let xLength = x.length;\n        let yLength = y.length;\n        let numPairs = yLength;\n        if (xLength < yLength) {\n            numPairs = xLength;\n            const tmp = x;\n            const tmpLength = xLength;\n            x = y;\n            xLength = yLength;\n            y = tmp;\n            yLength = tmpLength;\n        }\n        let resultLength = xLength;\n        if (result === null) {\n            result = new JSBI(resultLength, false);\n        }\n        else {\n            resultLength = result.length;\n        }\n        let i = 0;\n        for (; i < numPairs; i++) {\n            result.__setDigit(i, x.__digit(i) | y.__digit(i));\n        }\n        for (; i < xLength; i++) {\n            result.__setDigit(i, x.__digit(i));\n        }\n        for (; i < resultLength; i++) {\n            result.__setDigit(i, 0);\n        }\n        return result;\n    }\n    static __absoluteXor(x, y, result = null) {\n        let xLength = x.length;\n        let yLength = y.length;\n        let numPairs = yLength;\n        if (xLength < yLength) {\n            numPairs = xLength;\n            const tmp = x;\n            const tmpLength = xLength;\n            x = y;\n            xLength = yLength;\n            y = tmp;\n            yLength = tmpLength;\n        }\n        let resultLength = xLength;\n        if (result === null) {\n            result = new JSBI(resultLength, false);\n        }\n        else {\n            resultLength = result.length;\n        }\n        let i = 0;\n        for (; i < numPairs; i++) {\n            result.__setDigit(i, x.__digit(i) ^ y.__digit(i));\n        }\n        for (; i < xLength; i++) {\n            result.__setDigit(i, x.__digit(i));\n        }\n        for (; i < resultLength; i++) {\n            result.__setDigit(i, 0);\n        }\n        return result;\n    }\n    static __absoluteCompare(x, y) {\n        const diff = x.length - y.length;\n        if (diff !== 0)\n            return diff;\n        let i = x.length - 1;\n        while (i >= 0 && x.__digit(i) === y.__digit(i))\n            i--;\n        if (i < 0)\n            return 0;\n        return x.__unsignedDigit(i) > y.__unsignedDigit(i) ? 1 : -1;\n    }\n    static __multiplyAccumulate(multiplicand, multiplier, accumulator, accumulatorIndex) {\n        if (multiplier === 0)\n            return;\n        const m2Low = multiplier & 0x7FFF;\n        const m2High = multiplier >>> 15;\n        let carry = 0;\n        let high = 0;\n        for (let i = 0; i < multiplicand.length; i++, accumulatorIndex++) {\n            let acc = accumulator.__digit(accumulatorIndex);\n            const m1 = multiplicand.__digit(i);\n            const m1Low = m1 & 0x7FFF;\n            const m1High = m1 >>> 15;\n            const rLow = JSBI.__imul(m1Low, m2Low);\n            const rMid1 = JSBI.__imul(m1Low, m2High);\n            const rMid2 = JSBI.__imul(m1High, m2Low);\n            const rHigh = JSBI.__imul(m1High, m2High);\n            acc += high + rLow + carry;\n            carry = acc >>> 30;\n            acc &= 0x3FFFFFFF;\n            acc += ((rMid1 & 0x7FFF) << 15) + ((rMid2 & 0x7FFF) << 15);\n            carry += acc >>> 30;\n            high = rHigh + (rMid1 >>> 15) + (rMid2 >>> 15);\n            accumulator.__setDigit(accumulatorIndex, acc & 0x3FFFFFFF);\n        }\n        for (; carry !== 0 || high !== 0; accumulatorIndex++) {\n            let acc = accumulator.__digit(accumulatorIndex);\n            acc += carry + high;\n            high = 0;\n            carry = acc >>> 30;\n            accumulator.__setDigit(accumulatorIndex, acc & 0x3FFFFFFF);\n        }\n    }\n    static __internalMultiplyAdd(source, factor, summand, n, result) {\n        let carry = summand;\n        let high = 0;\n        for (let i = 0; i < n; i++) {\n            const digit = source.__digit(i);\n            const rx = JSBI.__imul(digit & 0x7FFF, factor);\n            const ry = JSBI.__imul(digit >>> 15, factor);\n            const r = rx + ((ry & 0x7FFF) << 15) + high + carry;\n            carry = r >>> 30;\n            high = ry >>> 15;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        if (result.length > n) {\n            result.__setDigit(n++, carry + high);\n            while (n < result.length) {\n                result.__setDigit(n++, 0);\n            }\n        }\n        else {\n            if (carry + high !== 0)\n                throw new Error('implementation bug');\n        }\n    }\n    __inplaceMultiplyAdd(multiplier, summand, length) {\n        if (length > this.length)\n            length = this.length;\n        const mLow = multiplier & 0x7FFF;\n        const mHigh = multiplier >>> 15;\n        let carry = 0;\n        let high = summand;\n        for (let i = 0; i < length; i++) {\n            const d = this.__digit(i);\n            const dLow = d & 0x7FFF;\n            const dHigh = d >>> 15;\n            const pLow = JSBI.__imul(dLow, mLow);\n            const pMid1 = JSBI.__imul(dLow, mHigh);\n            const pMid2 = JSBI.__imul(dHigh, mLow);\n            const pHigh = JSBI.__imul(dHigh, mHigh);\n            let result = high + pLow + carry;\n            carry = result >>> 30;\n            result &= 0x3FFFFFFF;\n            result += ((pMid1 & 0x7FFF) << 15) + ((pMid2 & 0x7FFF) << 15);\n            carry += result >>> 30;\n            high = pHigh + (pMid1 >>> 15) + (pMid2 >>> 15);\n            this.__setDigit(i, result & 0x3FFFFFFF);\n        }\n        if (carry !== 0 || high !== 0) {\n            throw new Error('implementation bug');\n        }\n    }\n    static __absoluteDivSmall(x, divisor, quotient = null) {\n        if (quotient === null)\n            quotient = new JSBI(x.length, false);\n        let remainder = 0;\n        for (let i = x.length * 2 - 1; i >= 0; i -= 2) {\n            let input = ((remainder << 15) | x.__halfDigit(i)) >>> 0;\n            const upperHalf = (input / divisor) | 0;\n            remainder = (input % divisor) | 0;\n            input = ((remainder << 15) | x.__halfDigit(i - 1)) >>> 0;\n            const lowerHalf = (input / divisor) | 0;\n            remainder = (input % divisor) | 0;\n            quotient.__setDigit(i >>> 1, (upperHalf << 15) | lowerHalf);\n        }\n        return quotient;\n    }\n    static __absoluteModSmall(x, divisor) {\n        let remainder = 0;\n        for (let i = x.length * 2 - 1; i >= 0; i--) {\n            const input = ((remainder << 15) | x.__halfDigit(i)) >>> 0;\n            remainder = (input % divisor) | 0;\n        }\n        return remainder;\n    }\n    static __absoluteDivLarge(dividend, divisor, wantQuotient, wantRemainder) {\n        const n = divisor.__halfDigitLength();\n        const n2 = divisor.length;\n        const m = dividend.__halfDigitLength() - n;\n        let q = null;\n        if (wantQuotient) {\n            q = new JSBI((m + 2) >>> 1, false);\n            q.__initializeDigits();\n        }\n        const qhatv = new JSBI((n + 2) >>> 1, false);\n        qhatv.__initializeDigits();\n        // D1.\n        const shift = JSBI.__clz15(divisor.__halfDigit(n - 1));\n        if (shift > 0) {\n            divisor = JSBI.__specialLeftShift(divisor, shift, 0 /* add no digits*/);\n        }\n        const u = JSBI.__specialLeftShift(dividend, shift, 1 /* add one digit */);\n        // D2.\n        const vn1 = divisor.__halfDigit(n - 1);\n        let halfDigitBuffer = 0;\n        for (let j = m; j >= 0; j--) {\n            // D3.\n            let qhat = 0x7FFF;\n            const ujn = u.__halfDigit(j + n);\n            if (ujn !== vn1) {\n                const input = ((ujn << 15) | u.__halfDigit(j + n - 1)) >>> 0;\n                qhat = (input / vn1) | 0;\n                let rhat = (input % vn1) | 0;\n                const vn2 = divisor.__halfDigit(n - 2);\n                const ujn2 = u.__halfDigit(j + n - 2);\n                while ((JSBI.__imul(qhat, vn2) >>> 0) > (((rhat << 16) | ujn2) >>> 0)) {\n                    qhat--;\n                    rhat += vn1;\n                    if (rhat > 0x7FFF)\n                        break;\n                }\n            }\n            // D4.\n            JSBI.__internalMultiplyAdd(divisor, qhat, 0, n2, qhatv);\n            let c = u.__inplaceSub(qhatv, j, n + 1);\n            if (c !== 0) {\n                c = u.__inplaceAdd(divisor, j, n);\n                u.__setHalfDigit(j + n, (u.__halfDigit(j + n) + c) & 0x7FFF);\n                qhat--;\n            }\n            if (wantQuotient) {\n                if (j & 1) {\n                    halfDigitBuffer = qhat << 15;\n                }\n                else {\n                    // TODO make this statically determinable\n                    q.__setDigit(j >>> 1, halfDigitBuffer | qhat);\n                }\n            }\n        }\n        if (wantRemainder) {\n            u.__inplaceRightShift(shift);\n            if (wantQuotient) {\n                return { quotient: q, remainder: u };\n            }\n            return u;\n        }\n        if (wantQuotient)\n            return q;\n        // TODO find a way to make this statically unreachable?\n        throw new Error('unreachable');\n    }\n    static __clz15(value) {\n        return JSBI.__clz30(value) - 15;\n    }\n    // TODO: work on full digits, like __inplaceSub?\n    __inplaceAdd(summand, startIndex, halfDigits) {\n        let carry = 0;\n        for (let i = 0; i < halfDigits; i++) {\n            const sum = this.__halfDigit(startIndex + i) +\n                summand.__halfDigit(i) +\n                carry;\n            carry = sum >>> 15;\n            this.__setHalfDigit(startIndex + i, sum & 0x7FFF);\n        }\n        return carry;\n    }\n    __inplaceSub(subtrahend, startIndex, halfDigits) {\n        const fullSteps = (halfDigits - 1) >>> 1;\n        let borrow = 0;\n        if (startIndex & 1) {\n            // this:   [..][..][..]\n            // subtr.:   [..][..]\n            startIndex >>= 1;\n            let current = this.__digit(startIndex);\n            let r0 = current & 0x7FFF;\n            let i = 0;\n            for (; i < fullSteps; i++) {\n                const sub = subtrahend.__digit(i);\n                const r15 = (current >>> 15) - (sub & 0x7FFF) - borrow;\n                borrow = (r15 >>> 15) & 1;\n                this.__setDigit(startIndex + i, ((r15 & 0x7FFF) << 15) | (r0 & 0x7FFF));\n                current = this.__digit(startIndex + i + 1);\n                r0 = (current & 0x7FFF) - (sub >>> 15) - borrow;\n                borrow = (r0 >>> 15) & 1;\n            }\n            // Unrolling the last iteration gives a 5% performance benefit!\n            const sub = subtrahend.__digit(i);\n            const r15 = (current >>> 15) - (sub & 0x7FFF) - borrow;\n            borrow = (r15 >>> 15) & 1;\n            this.__setDigit(startIndex + i, ((r15 & 0x7FFF) << 15) | (r0 & 0x7FFF));\n            const subTop = sub >>> 15;\n            if (startIndex + i + 1 >= this.length) {\n                throw new RangeError('out of bounds');\n            }\n            if ((halfDigits & 1) === 0) {\n                current = this.__digit(startIndex + i + 1);\n                r0 = (current & 0x7FFF) - subTop - borrow;\n                borrow = (r0 >>> 15) & 1;\n                this.__setDigit(startIndex + subtrahend.length, (current & 0x3FFF8000) | (r0 & 0x7FFF));\n            }\n        }\n        else {\n            startIndex >>= 1;\n            let i = 0;\n            for (; i < subtrahend.length - 1; i++) {\n                const current = this.__digit(startIndex + i);\n                const sub = subtrahend.__digit(i);\n                const r0 = (current & 0x7FFF) - (sub & 0x7FFF) - borrow;\n                borrow = (r0 >>> 15) & 1;\n                const r15 = (current >>> 15) - (sub >>> 15) - borrow;\n                borrow = (r15 >>> 15) & 1;\n                this.__setDigit(startIndex + i, ((r15 & 0x7FFF) << 15) | (r0 & 0x7FFF));\n            }\n            const current = this.__digit(startIndex + i);\n            const sub = subtrahend.__digit(i);\n            const r0 = (current & 0x7FFF) - (sub & 0x7FFF) - borrow;\n            borrow = (r0 >>> 15) & 1;\n            let r15 = 0;\n            if ((halfDigits & 1) === 0) {\n                r15 = (current >>> 15) - (sub >>> 15) - borrow;\n                borrow = (r15 >>> 15) & 1;\n            }\n            this.__setDigit(startIndex + i, ((r15 & 0x7FFF) << 15) | (r0 & 0x7FFF));\n        }\n        return borrow;\n    }\n    __inplaceRightShift(shift) {\n        if (shift === 0)\n            return;\n        let carry = this.__digit(0) >>> shift;\n        const last = this.length - 1;\n        for (let i = 0; i < last; i++) {\n            const d = this.__digit(i + 1);\n            this.__setDigit(i, ((d << (30 - shift)) & 0x3FFFFFFF) | carry);\n            carry = d >>> shift;\n        }\n        this.__setDigit(last, carry);\n    }\n    static __specialLeftShift(x, shift, addDigit) {\n        const n = x.length;\n        const resultLength = n + addDigit;\n        const result = new JSBI(resultLength, false);\n        if (shift === 0) {\n            for (let i = 0; i < n; i++)\n                result.__setDigit(i, x.__digit(i));\n            if (addDigit > 0)\n                result.__setDigit(n, 0);\n            return result;\n        }\n        let carry = 0;\n        for (let i = 0; i < n; i++) {\n            const d = x.__digit(i);\n            result.__setDigit(i, ((d << shift) & 0x3FFFFFFF) | carry);\n            carry = d >>> (30 - shift);\n        }\n        if (addDigit > 0) {\n            result.__setDigit(n, carry);\n        }\n        return result;\n    }\n    static __leftShiftByAbsolute(x, y) {\n        const shift = JSBI.__toShiftAmount(y);\n        if (shift < 0)\n            throw new RangeError('BigInt too big');\n        const digitShift = (shift / 30) | 0;\n        const bitsShift = shift % 30;\n        const length = x.length;\n        const grow = bitsShift !== 0 &&\n            (x.__digit(length - 1) >>> (30 - bitsShift)) !== 0;\n        const resultLength = length + digitShift + (grow ? 1 : 0);\n        const result = new JSBI(resultLength, x.sign);\n        if (bitsShift === 0) {\n            let i = 0;\n            for (; i < digitShift; i++)\n                result.__setDigit(i, 0);\n            for (; i < resultLength; i++) {\n                result.__setDigit(i, x.__digit(i - digitShift));\n            }\n        }\n        else {\n            let carry = 0;\n            for (let i = 0; i < digitShift; i++)\n                result.__setDigit(i, 0);\n            for (let i = 0; i < length; i++) {\n                const d = x.__digit(i);\n                result.__setDigit(i + digitShift, ((d << bitsShift) & 0x3FFFFFFF) | carry);\n                carry = d >>> (30 - bitsShift);\n            }\n            if (grow) {\n                result.__setDigit(length + digitShift, carry);\n            }\n            else {\n                if (carry !== 0)\n                    throw new Error('implementation bug');\n            }\n        }\n        return result.__trim();\n    }\n    static __rightShiftByAbsolute(x, y) {\n        const length = x.length;\n        const sign = x.sign;\n        const shift = JSBI.__toShiftAmount(y);\n        if (shift < 0)\n            return JSBI.__rightShiftByMaximum(sign);\n        const digitShift = (shift / 30) | 0;\n        const bitsShift = shift % 30;\n        let resultLength = length - digitShift;\n        if (resultLength <= 0)\n            return JSBI.__rightShiftByMaximum(sign);\n        // For negative numbers, round down if any bit was shifted out (so that\n        // e.g. -5n >> 1n == -3n and not -2n). Check now whether this will happen\n        // and whether itc an cause overflow into a new digit. If we allocate the\n        // result large enough up front, it avoids having to do grow it later.\n        let mustRoundDown = false;\n        if (sign) {\n            const mask = (1 << bitsShift) - 1;\n            if ((x.__digit(digitShift) & mask) !== 0) {\n                mustRoundDown = true;\n            }\n            else {\n                for (let i = 0; i < digitShift; i++) {\n                    if (x.__digit(i) !== 0) {\n                        mustRoundDown = true;\n                        break;\n                    }\n                }\n            }\n        }\n        // If bitsShift is non-zero, it frees up bits, preventing overflow.\n        if (mustRoundDown && bitsShift === 0) {\n            // Overflow cannot happen if the most significant digit has unset bits.\n            const msd = x.__digit(length - 1);\n            const roundingCanOverflow = ~msd === 0;\n            if (roundingCanOverflow)\n                resultLength++;\n        }\n        let result = new JSBI(resultLength, sign);\n        if (bitsShift === 0) {\n            // Zero out any overflow digit (see \"roundingCanOverflow\" above).\n            result.__setDigit(resultLength - 1, 0);\n            for (let i = digitShift; i < length; i++) {\n                result.__setDigit(i - digitShift, x.__digit(i));\n            }\n        }\n        else {\n            let carry = x.__digit(digitShift) >>> bitsShift;\n            const last = length - digitShift - 1;\n            for (let i = 0; i < last; i++) {\n                const d = x.__digit(i + digitShift + 1);\n                result.__setDigit(i, ((d << (30 - bitsShift)) & 0x3FFFFFFF) | carry);\n                carry = d >>> bitsShift;\n            }\n            result.__setDigit(last, carry);\n        }\n        if (mustRoundDown) {\n            // Since the result is negative, rounding down means adding one to its\n            // absolute value. This cannot overflow.\n            result = JSBI.__absoluteAddOne(result, true, result);\n        }\n        return result.__trim();\n    }\n    static __rightShiftByMaximum(sign) {\n        if (sign) {\n            return JSBI.__oneDigit(1, true);\n        }\n        return JSBI.__zero();\n    }\n    static __toShiftAmount(x) {\n        if (x.length > 1)\n            return -1;\n        const value = x.__unsignedDigit(0);\n        if (value > JSBI.__kMaxLengthBits)\n            return -1;\n        return value;\n    }\n    static __toPrimitive(obj, hint = 'default') {\n        if (typeof obj !== 'object')\n            return obj;\n        if (obj.constructor === JSBI)\n            return obj;\n        if (typeof Symbol !== 'undefined' &&\n            typeof Symbol.toPrimitive === 'symbol') {\n            const exoticToPrim = obj[Symbol.toPrimitive];\n            if (exoticToPrim) {\n                const primitive = exoticToPrim(hint);\n                if (typeof primitive !== 'object')\n                    return primitive;\n                throw new TypeError('Cannot convert object to primitive value');\n            }\n        }\n        const valueOf = obj.valueOf;\n        if (valueOf) {\n            const primitive = valueOf.call(obj);\n            if (typeof primitive !== 'object')\n                return primitive;\n        }\n        const toString = obj.toString;\n        if (toString) {\n            const primitive = toString.call(obj);\n            if (typeof primitive !== 'object')\n                return primitive;\n        }\n        throw new TypeError('Cannot convert object to primitive value');\n    }\n    static __toNumeric(value) {\n        if (JSBI.__isBigInt(value))\n            return value;\n        return +value;\n    }\n    static __isBigInt(value) {\n        return typeof value === 'object' && value !== null &&\n            value.constructor === JSBI;\n    }\n    static __truncateToNBits(n, x) {\n        const neededDigits = ((n + 29) / 30) | 0;\n        const result = new JSBI(neededDigits, x.sign);\n        const last = neededDigits - 1;\n        for (let i = 0; i < last; i++) {\n            result.__setDigit(i, x.__digit(i));\n        }\n        let msd = x.__digit(last);\n        if ((n % 30) !== 0) {\n            const drop = 32 - (n % 30);\n            msd = (msd << drop) >>> drop;\n        }\n        result.__setDigit(last, msd);\n        return result.__trim();\n    }\n    static __truncateAndSubFromPowerOfTwo(n, x, resultSign) {\n        const neededDigits = ((n + 29) / 30) | 0;\n        const result = new JSBI(neededDigits, resultSign);\n        let i = 0;\n        const last = neededDigits - 1;\n        let borrow = 0;\n        const limit = Math.min(last, x.length);\n        for (; i < limit; i++) {\n            const r = 0 - x.__digit(i) - borrow;\n            borrow = (r >>> 30) & 1;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        for (; i < last; i++) {\n            result.__setDigit(i, (-borrow & 0x3FFFFFFF) | 0);\n        }\n        let msd = last < x.length ? x.__digit(last) : 0;\n        const msdBitsConsumed = n % 30;\n        let resultMsd;\n        if (msdBitsConsumed === 0) {\n            resultMsd = 0 - msd - borrow;\n            resultMsd &= 0x3FFFFFFF;\n        }\n        else {\n            const drop = 32 - msdBitsConsumed;\n            msd = (msd << drop) >>> drop;\n            const minuendMsd = 1 << (32 - drop);\n            resultMsd = minuendMsd - msd - borrow;\n            resultMsd &= (minuendMsd - 1);\n        }\n        result.__setDigit(last, resultMsd);\n        return result.__trim();\n    }\n    // Digit helpers.\n    __digit(i) {\n        return this[i];\n    }\n    __unsignedDigit(i) {\n        return this[i] >>> 0;\n    }\n    __setDigit(i, digit) {\n        this[i] = digit | 0;\n    }\n    __setDigitGrow(i, digit) {\n        this[i] = digit | 0;\n    }\n    __halfDigitLength() {\n        const len = this.length;\n        if (this.__unsignedDigit(len - 1) <= 0x7FFF)\n            return len * 2 - 1;\n        return len * 2;\n    }\n    __halfDigit(i) {\n        return (this[i >>> 1] >>> ((i & 1) * 15)) & 0x7FFF;\n    }\n    __setHalfDigit(i, value) {\n        const digitIndex = i >>> 1;\n        const previous = this.__digit(digitIndex);\n        const updated = (i & 1) ? (previous & 0x7FFF) | (value << 15)\n            : (previous & 0x3FFF8000) | (value & 0x7FFF);\n        this.__setDigit(digitIndex, updated);\n    }\n    static __digitPow(base, exponent) {\n        let result = 1;\n        while (exponent > 0) {\n            if (exponent & 1)\n                result *= base;\n            exponent >>>= 1;\n            base *= base;\n        }\n        return result;\n    }\n    static __isOneDigitInt(x) {\n        return (x & 0x3FFFFFFF) === x;\n    }\n}\nJSBI.__kMaxLength = 1 << 25;\nJSBI.__kMaxLengthBits = JSBI.__kMaxLength << 5;\n// Lookup table for the maximum number of bits required per character of a\n// base-N string representation of a number. To increase accuracy, the array\n// value is the actual value multiplied by 32. To generate this table:\n//\n// for (let i = 0; i <= 36; i++) {\n//   console.log(Math.ceil(Math.log2(i) * 32) + ',');\n// }\nJSBI.__kMaxBitsPerChar = [\n    0, 0, 32, 51, 64, 75, 83, 90, 96,\n    102, 107, 111, 115, 119, 122, 126, 128,\n    131, 134, 136, 139, 141, 143, 145, 147,\n    149, 151, 153, 154, 156, 158, 159, 160,\n    162, 163, 165, 166, // 33..36\n];\nJSBI.__kBitsPerCharTableShift = 5;\nJSBI.__kBitsPerCharTableMultiplier = 1 << JSBI.__kBitsPerCharTableShift;\nJSBI.__kConversionChars = '0123456789abcdefghijklmnopqrstuvwxyz'.split('');\nJSBI.__kBitConversionBuffer = new ArrayBuffer(8);\nJSBI.__kBitConversionDouble = new Float64Array(JSBI.__kBitConversionBuffer);\nJSBI.__kBitConversionInts = new Int32Array(JSBI.__kBitConversionBuffer);\n// For IE11 compatibility.\n// Note that the custom replacements are tailored for JSBI's needs, and as\n// such are not reusable as general-purpose polyfills.\nJSBI.__clz30 = Math.clz32 ? function (x) {\n    return Math.clz32(x) - 2;\n} : function (x) {\n    if (x === 0)\n        return 30;\n    return 29 - (Math.log(x >>> 0) / Math.LN2 | 0) | 0;\n};\nJSBI.__imul = Math.imul || function (a, b) {\n    return (a * b) | 0;\n};\nexport default JSBI;\n//# sourceMappingURL=jsbi.js.map", "'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\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\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('The listener must be a function');\n  }\n\n  var listener = new EE(fn, context || emitter, once)\n    , evt = prefix ? prefix + event : event;\n\n  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n  else emitter._events[evt] = [emitter._events[evt], listener];\n\n  return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n  if (--emitter._eventsCount === 0) emitter._events = new Events();\n  else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n  var evt = prefix ? prefix + event : event\n    , handlers = this._events[evt];\n\n  if (!handlers) return [];\n  if (handlers.fn) return [handlers.fn];\n\n  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n    ee[i] = handlers[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n  var evt = prefix ? prefix + event : event\n    , listeners = this._events[evt];\n\n  if (!listeners) return 0;\n  if (listeners.fn) return 1;\n  return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    clearEvent(this, evt);\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n      listeners.fn === fn &&\n      (!once || listeners.once) &&\n      (!context || listeners.context === context)\n    ) {\n      clearEvent(this, evt);\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n        listeners[i].fn !== fn ||\n        (once && !listeners[i].once) ||\n        (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else clearEvent(this, evt);\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) clearEvent(this, evt);\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\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  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  TypedArrayPrototypeSet(self, buf, len) {\n    return self.set(buf, len)\n  },\n  Uint8Array\n}\n", "'use strict'\n\nconst bufferModule = require('buffer')\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\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}\nmodule.exports.promisify.custom = Symbol.for('nodejs.util.promisify.custom')\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 { 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 *\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 * @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  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", "'use strict'\n\nconst { Symbol, SymbolAsyncIterator, SymbolIterator, SymbolFor } = require('../../ours/primordials')\nconst kDestroyed = Symbol('kDestroyed')\nconst kIsErrored = Symbol('kIsErrored')\nconst kIsReadable = Symbol('kIsReadable')\nconst kIsDisturbed = Symbol('kIsDisturbed')\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[kDestroyed] || (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 (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  kDestroyed,\n  isDisturbed,\n  kIsDisturbed,\n  isErrored,\n  kIsErrored,\n  isReadable,\n  kIsReadable,\n  kIsClosedPromise,\n  kControllerErrorFunction,\n  isClosed,\n  isDestroyed,\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 } = 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')\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      const originalCallback = callback\n      callback = once((...args) => {\n        options.signal.removeEventListener('abort', abort)\n        originalCallback.apply(stream, args)\n      })\n      options.signal.addEventListener('abort', abort)\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      const originalCallback = callback\n      callback = once((...args) => {\n        options.signal.removeEventListener('abort', abort)\n        originalCallback.apply(stream, args)\n      })\n      options.signal.addEventListener('abort', abort)\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 { kDestroyed, 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[kDestroyed] = 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 { AbortError, codes } = require('../../ours/errors')\nconst { isNodeStream, isWebStream, kControllerErrorFunction } = require('./utils')\nconst eos = require('./end-of-stream')\nconst { ERR_INVALID_ARG_TYPE } = codes\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    signal.addEventListener('abort', onAbort)\n    eos(stream, () => signal.removeEventListener('abort', onAbort))\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 { ERR_INVALID_ARG_VALUE } = require('../../ours/errors').codes\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null\n}\nfunction getDefaultHighWaterMark(objectMode) {\n  return objectMode ? 16 : 16 * 1024\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}\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  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} = 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\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  // Object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away.\n  this.objectMode = !!(options && options.objectMode)\n  if (isDuplex) this.objectMode = this.objectMode || !!(options && options.readableObjectMode)\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.ended = false\n  this.endEmitted = false\n  this.reading = false\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  // 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  this.sync = true\n\n  // Whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false\n  this.emittedReadable = false\n  this.readableListening = false\n  this.resumeScheduled = false\n  this[kPaused] = null\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 'end' (and potentially 'finish').\n  this.autoDestroy = !options || options.autoDestroy !== false\n\n  // Has it been destroyed.\n  this.destroyed = false\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  // 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\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.multiAwaitDrain = false\n\n  // If true, a maybeReadMore has been scheduled.\n  this.readingMore = false\n  this.dataEmitted = false\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}\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.objectMode) {\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.reading = false\n    onEofChunk(stream, state)\n  } else if (state.objectMode || (chunk && chunk.length > 0)) {\n    if (addToFront) {\n      if (state.endEmitted) 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.reading = false\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.reading = false\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.multiAwaitDrain) {\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.needReadable) 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.objectMode) 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.emittedReadable = false\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.needReadable\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.reading = true\n    state.sync = true\n    // If the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true\n\n    // Call internal read method\n    try {\n      this._read(state.highWaterMark)\n    } catch (err) {\n      errorOrDestroy(this, err)\n    }\n    state.sync = false\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    if (state.flowing) {\n      pause()\n    }\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} = 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 { 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\n  // TODO: Webstreams\n  // if (isReadableStream(body)) {\n  //   return _duplexify({ readable: Readable.fromWeb(body) });\n  // }\n\n  // TODO: Webstreams\n  // if (isWritableStream(body)) {\n  //   return _duplexify({ 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\n  // TODO: Webstreams.\n  // if (\n  //   isReadableStream(body?.readable) &&\n  //   isWritableStream(body?.writable)\n  // ) {\n  //   return Duplexify.fromWeb(body);\n  // }\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 } = 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  isReadableEnded\n} = require('./utils')\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nlet PassThrough\nlet Readable\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    }\n    await wait()\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  outerSignal === null || outerSignal === undefined ? undefined : outerSignal.addEventListener('abort', abort)\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    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    outerSignal === null || outerSignal === undefined ? undefined : outerSignal.removeEventListener('abort', abort)\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 (isReadableEnded(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.writableObjectMode),\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 { finished } = require('./end-of-stream')\nconst staticCompose = require('./compose')\nconst { addAbortSignalNoValidate } = require('./add-abort-signal')\nconst { isWritable, isNodeStream } = require('./utils')\nconst {\n  ArrayPrototypePush,\n  MathFloor,\n  Number,\n  NumberIsNaN,\n  Promise,\n  PromiseReject,\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  validateInteger(concurrency, 'concurrency', 1)\n  return async function* map() {\n    var _options$signal, _options$signal2\n    const ac = new AbortController()\n    const stream = this\n    const queue = []\n    const signal = ac.signal\n    const signalOpt = {\n      signal\n    }\n    const abort = () => ac.abort()\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal = options.signal) !== null &&\n      _options$signal !== undefined &&\n      _options$signal.aborted\n    ) {\n      abort()\n    }\n    options === null || options === undefined\n      ? undefined\n      : (_options$signal2 = options.signal) === null || _options$signal2 === undefined\n      ? undefined\n      : _options$signal2.addEventListener('abort', abort)\n    let next\n    let resume\n    let done = false\n    function onDone() {\n      done = true\n    }\n    async function pump() {\n      try {\n        for await (let val of stream) {\n          var _val\n          if (done) {\n            return\n          }\n          if (signal.aborted) {\n            throw new AbortError()\n          }\n          try {\n            val = fn(val, signalOpt)\n          } catch (err) {\n            val = PromiseReject(err)\n          }\n          if (val === kEmpty) {\n            continue\n          }\n          if (typeof ((_val = val) === null || _val === undefined ? undefined : _val.catch) === 'function') {\n            val.catch(onDone)\n          }\n          queue.push(val)\n          if (next) {\n            next()\n            next = null\n          }\n          if (!done && queue.length && queue.length >= 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, undefined, onDone)\n        queue.push(val)\n      } finally {\n        var _options$signal3\n        done = true\n        if (next) {\n          next()\n          next = null\n        }\n        options === null || options === undefined\n          ? undefined\n          : (_options$signal3 = options.signal) === null || _options$signal3 === undefined\n          ? undefined\n          : _options$signal3.removeEventListener('abort', abort)\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          if (resume) {\n            resume()\n            resume = null\n          }\n        }\n        await new Promise((resolve) => {\n          next = resolve\n        })\n      }\n    } finally {\n      ac.abort()\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$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({\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$signal5\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$signal5 = options.signal) !== null &&\n    _options$signal5 !== undefined &&\n    _options$signal5.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    }\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$signal6\n      gotAnyItemFromStream = true\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 (!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$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(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$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    for await (const val of this) {\n      var _options$signal9\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal9 = options.signal) !== null &&\n        _options$signal9 !== undefined &&\n        _options$signal9.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$signal10\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal10 = options.signal) !== null &&\n      _options$signal10 !== undefined &&\n      _options$signal10.aborted\n    ) {\n      throw new AbortError()\n    }\n    for await (const val of this) {\n      var _options$signal11\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal11 = options.signal) !== null &&\n        _options$signal11 !== undefined &&\n        _options$signal11.aborted\n      ) {\n        throw new AbortError()\n      }\n      if (number-- > 0) {\n        yield val\n      } else {\n        return\n      }\n    }\n  }.call(this)\n}\nmodule.exports.streamReturningOperators = {\n  asIndexedPairs,\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", "if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n", "module.exports = require('events').EventEmitter;\n", "'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n", "'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n", "'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n", "'use strict';\n\nvar test = {\n\tfoo: {}\n};\n\nvar $Object = Object;\n\nmodule.exports = function hasProto() {\n\treturn { __proto__: test }.foo === test.foo && !({ __proto__: null } instanceof $Object);\n};\n", "'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slice.call(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                args.concat(slice.call(arguments))\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        } else {\n            return target.apply(\n                that,\n                args.concat(slice.call(arguments))\n            );\n        }\n    };\n\n    var boundLength = Math.max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs.push('$' + i);\n    }\n\n    bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n", "'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n", "'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n", "'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\nvar hasProto = require('has-proto')();\n\nvar getProto = Object.getPrototypeOf || (\n\thasProto\n\t\t? function (x) { return x.__proto__; } // eslint-disable-line no-proto\n\t\t: null\n);\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n", "'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n", "'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n", "'use strict';\n\nvar toStr = Object.prototype.toString;\nvar fnToStr = Function.prototype.toString;\nvar isFnRegex = /^\\s*(?:function)?\\*/;\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar getProto = Object.getPrototypeOf;\nvar getGeneratorFunc = function () { // eslint-disable-line consistent-return\n\tif (!hasToStringTag) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn Function('return function*() {}')();\n\t} catch (e) {\n\t}\n};\nvar GeneratorFunction;\n\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex.test(fnToStr.call(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr.call(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tif (typeof GeneratorFunction === 'undefined') {\n\t\tvar generatorFunc = getGeneratorFunc();\n\t\tGeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;\n\t}\n\treturn getProto(fn) === GeneratorFunction;\n};\n", "'use strict';\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar objectClass = '[object Object]';\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar ddaClass = '[object HTMLAllCollection]'; // IE 11\nvar ddaClass2 = '[object HTML document.all class]';\nvar ddaClass3 = '[object HTMLCollection]'; // IE 9-10\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n\nvar isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing\n\nvar isDDA = function isDocumentDotAll() { return false; };\nif (typeof document === 'object') {\n\t// Firefox 3 canonicalizes DDA to undefined when it's not accessed directly\n\tvar all = document.all;\n\tif (toStr.call(all) === toStr.call(document.all)) {\n\t\tisDDA = function isDocumentDotAll(value) {\n\t\t\t/* globals document: false */\n\t\t\t// in IE 6-8, typeof document.all is \"object\" and it's truthy\n\t\t\tif ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) {\n\t\t\t\ttry {\n\t\t\t\t\tvar str = toStr.call(value);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tstr === ddaClass\n\t\t\t\t\t\t|| str === ddaClass2\n\t\t\t\t\t\t|| str === ddaClass3 // opera 12.16\n\t\t\t\t\t\t|| str === objectClass // IE 6-8\n\t\t\t\t\t) && value('') == null; // eslint-disable-line eqeqeq\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value) && tryFunctionObject(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\tif (strClass !== fnClass && strClass !== genClass && !(/^\\[object HTML/).test(strClass)) { return false; }\n\t\treturn tryFunctionObject(value);\n\t};\n", "'use strict';\n\nvar isCallable = require('is-callable');\n\nvar toStr = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar forEachArray = function forEachArray(array, iterator, receiver) {\n    for (var i = 0, len = array.length; i < len; i++) {\n        if (hasOwnProperty.call(array, i)) {\n            if (receiver == null) {\n                iterator(array[i], i, array);\n            } else {\n                iterator.call(receiver, array[i], i, array);\n            }\n        }\n    }\n};\n\nvar forEachString = function forEachString(string, iterator, receiver) {\n    for (var i = 0, len = string.length; i < len; i++) {\n        // no such thing as a sparse string.\n        if (receiver == null) {\n            iterator(string.charAt(i), i, string);\n        } else {\n            iterator.call(receiver, string.charAt(i), i, string);\n        }\n    }\n};\n\nvar forEachObject = function forEachObject(object, iterator, receiver) {\n    for (var k in object) {\n        if (hasOwnProperty.call(object, k)) {\n            if (receiver == null) {\n                iterator(object[k], k, object);\n            } else {\n                iterator.call(receiver, object[k], k, object);\n            }\n        }\n    }\n};\n\nvar forEach = function forEach(list, iterator, thisArg) {\n    if (!isCallable(iterator)) {\n        throw new TypeError('iterator must be a function');\n    }\n\n    var receiver;\n    if (arguments.length >= 3) {\n        receiver = thisArg;\n    }\n\n    if (toStr.call(list) === '[object Array]') {\n        forEachArray(list, iterator, receiver);\n    } else if (typeof list === 'string') {\n        forEachString(list, iterator, receiver);\n    } else {\n        forEachObject(list, iterator, receiver);\n    }\n};\n\nmodule.exports = forEach;\n", "'use strict';\n\nvar possibleNames = [\n\t'BigInt64Array',\n\t'BigUint64Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Int8Array',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray'\n];\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\n\nmodule.exports = function availableTypedArrays() {\n\tvar out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n", "'use strict';\n\nvar forEach = require('for-each');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar gOPD = require('gopd');\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr) {\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar anyTrue = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!anyTrue) {\n\t\t\ttry {\n\t\t\t\tanyTrue = getter.call(value) === typedArray;\n\t\t\t} catch (e) { /**/ }\n\t\t}\n\t});\n\treturn anyTrue;\n};\n\nmodule.exports = function isTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\treturn $indexOf(typedArrays, tag) > -1;\n\t}\n\tif (!gOPD) { return false; }\n\treturn tryTypedArrays(value);\n};\n", "'use strict';\n\nvar forEach = require('for-each');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\nvar gOPD = require('gopd');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tif (typeof g[typedArray] === 'function') {\n\t\t\tvar arr = new g[typedArray]();\n\t\t\tif (Symbol.toStringTag in arr) {\n\t\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\t\tif (!descriptor) {\n\t\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t\t}\n\t\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t\t}\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar foundName = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!foundName) {\n\t\t\ttry {\n\t\t\t\tvar name = getter.call(value);\n\t\t\t\tif (name === typedArray) {\n\t\t\t\t\tfoundName = name;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\t});\n\treturn foundName;\n};\n\nvar isTypedArray = require('is-typed-array');\n\nmodule.exports = function whichTypedArray(value) {\n\tif (!isTypedArray(value)) { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) { return $slice($toString(value), 8, -1); }\n\treturn tryTypedArrays(value);\n};\n", "// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nvar isArgumentsObject = require('is-arguments');\nvar isGeneratorFunction = require('is-generator-function');\nvar whichTypedArray = require('which-typed-array');\nvar isTypedArray = require('is-typed-array');\n\nfunction uncurryThis(f) {\n  return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n  var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n  var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n  if (typeof value !== 'object') {\n    return false;\n  }\n  try {\n    prototypeValueOf(value);\n    return true;\n  } catch(e) {\n    return false;\n  }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n  if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n    return ArrayBuffer.isView(value);\n  }\n\n  return (\n    isTypedArray(value) ||\n    isDataView(value)\n  );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n  return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n  return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n  return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n  return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n  return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n  return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n  return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n  return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n  return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n  return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n  return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n  return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n  typeof Map !== 'undefined' &&\n  isMapToString(new Map())\n);\n\nfunction isMap(value) {\n  if (typeof Map === 'undefined') {\n    return false;\n  }\n\n  return isMapToString.working\n    ? isMapToString(value)\n    : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n  return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n  typeof Set !== 'undefined' &&\n  isSetToString(new Set())\n);\nfunction isSet(value) {\n  if (typeof Set === 'undefined') {\n    return false;\n  }\n\n  return isSetToString.working\n    ? isSetToString(value)\n    : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n  return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n  typeof WeakMap !== 'undefined' &&\n  isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n  if (typeof WeakMap === 'undefined') {\n    return false;\n  }\n\n  return isWeakMapToString.working\n    ? isWeakMapToString(value)\n    : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n  return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n  typeof WeakSet !== 'undefined' &&\n  isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n  return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n  return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n  typeof ArrayBuffer !== 'undefined' &&\n  isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n  if (typeof ArrayBuffer === 'undefined') {\n    return false;\n  }\n\n  return isArrayBufferToString.working\n    ? isArrayBufferToString(value)\n    : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n  return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n  typeof ArrayBuffer !== 'undefined' &&\n  typeof DataView !== 'undefined' &&\n  isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n  if (typeof DataView === 'undefined') {\n    return false;\n  }\n\n  return isDataViewToString.working\n    ? isDataViewToString(value)\n    : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n  return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n  if (typeof SharedArrayBufferCopy === 'undefined') {\n    return false;\n  }\n\n  if (typeof isSharedArrayBufferToString.working === 'undefined') {\n    isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n  }\n\n  return isSharedArrayBufferToString.working\n    ? isSharedArrayBufferToString(value)\n    : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n  return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n  return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n  return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n  return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n  return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n  return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n  return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n  return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n  return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n  return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n  return (\n    isNumberObject(value) ||\n    isStringObject(value) ||\n    isBooleanObject(value) ||\n    isBigIntObject(value) ||\n    isSymbolObject(value)\n  );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n  return typeof Uint8Array !== 'undefined' && (\n    isArrayBuffer(value) ||\n    isSharedArrayBuffer(value)\n  );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n  Object.defineProperty(exports, method, {\n    enumerable: false,\n    value: function() {\n      throw new Error(method + ' is not supported in userland');\n    }\n  });\n});\n", "module.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\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\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n  function getOwnPropertyDescriptors(obj) {\n    var keys = Object.keys(obj);\n    var descriptors = {};\n    for (var i = 0; i < keys.length; i++) {\n      descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n    }\n    return descriptors;\n  };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n  if (typeof process !== 'undefined' && process.noDeprecation === true) {\n    return fn;\n  }\n\n  // Allow for deprecating things in the process of starting up.\n  if (typeof process === 'undefined') {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n  var debugEnv = process.env.NODE_DEBUG;\n  debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n    .replace(/\\*/g, '.*')\n    .replace(/,/g, '$|^')\n    .toUpperCase();\n  debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (debugEnvRegex.test(set)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n  // default options\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  // legacy...\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    // legacy...\n    ctx.showHidden = opts;\n  } else if (opts) {\n    // got an \"options\" object\n    exports._extend(ctx, opts);\n  }\n  // set default options\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  // \"name\": intentionally not styling\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== exports.inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // Look up the keys of the object.\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n\n  // IE doesn't make error fields non-enumerable\n  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n\n  // Some type of object without properties can be shortcutted.\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  // For some reason typeof null is \"object\", so special case here.\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').slice(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.slice(1, -1);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = require('./support/types');\n\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n *     prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n  // Don't do anything if add isn't an object\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n  if (typeof original !== 'function')\n    throw new TypeError('The \"original\" argument must be of type Function');\n\n  if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n    var fn = original[kCustomPromisifiedSymbol];\n    if (typeof fn !== 'function') {\n      throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n    }\n    Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n      value: fn, enumerable: false, writable: false, configurable: true\n    });\n    return fn;\n  }\n\n  function fn() {\n    var promiseResolve, promiseReject;\n    var promise = new Promise(function (resolve, reject) {\n      promiseResolve = resolve;\n      promiseReject = reject;\n    });\n\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n    args.push(function (err, value) {\n      if (err) {\n        promiseReject(err);\n      } else {\n        promiseResolve(value);\n      }\n    });\n\n    try {\n      original.apply(this, args);\n    } catch (err) {\n      promiseReject(err);\n    }\n\n    return promise;\n  }\n\n  Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n  if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n    value: fn, enumerable: false, writable: false, configurable: true\n  });\n  return Object.defineProperties(\n    fn,\n    getOwnPropertyDescriptors(original)\n  );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n  // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n  // Because `null` is a special error value in callbacks which means \"no error\n  // occurred\", we error-wrap so the callback consumer can distinguish between\n  // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n  if (!reason) {\n    var newReason = new Error('Promise was rejected with a falsy value');\n    newReason.reason = reason;\n    reason = newReason;\n  }\n  return cb(reason);\n}\n\nfunction callbackify(original) {\n  if (typeof original !== 'function') {\n    throw new TypeError('The \"original\" argument must be of type Function');\n  }\n\n  // We DO NOT return the promise as it gives the user a false sense that\n  // the promise is actually somehow related to the callback's execution\n  // and that the callback throwing will reject the promise.\n  function callbackified() {\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n\n    var maybeCb = args.pop();\n    if (typeof maybeCb !== 'function') {\n      throw new TypeError('The last argument must be of type Function');\n    }\n    var self = this;\n    var cb = function() {\n      return maybeCb.apply(self, arguments);\n    };\n    // In true node style we process the callback on `nextTick` with all the\n    // implications (stack, `uncaughtException`, `async_hooks`)\n    original.apply(this, args)\n      .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n            function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n  }\n\n  Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n  Object.defineProperties(callbackified,\n                          getOwnPropertyDescriptors(original));\n  return callbackified;\n}\nexports.callbackify = callbackify;\n", "'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n  Buffer = _require.Buffer;\nvar _require2 = require('util'),\n  inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n  Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n  _createClass(BufferList, [{\n    key: \"push\",\n    value: function push(v) {\n      var entry = {\n        data: v,\n        next: null\n      };\n      if (this.length > 0) this.tail.next = entry;else this.head = entry;\n      this.tail = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"unshift\",\n    value: function unshift(v) {\n      var 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  }, {\n    key: \"shift\",\n    value: function shift() {\n      if (this.length === 0) return;\n      var ret = this.head.data;\n      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n      --this.length;\n      return ret;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.head = this.tail = null;\n      this.length = 0;\n    }\n  }, {\n    key: \"join\",\n    value: function join(s) {\n      if (this.length === 0) return '';\n      var p = this.head;\n      var ret = '' + p.data;\n      while (p = p.next) ret += s + p.data;\n      return ret;\n    }\n  }, {\n    key: \"concat\",\n    value: function concat(n) {\n      if (this.length === 0) return Buffer.alloc(0);\n      var ret = Buffer.allocUnsafe(n >>> 0);\n      var p = this.head;\n      var i = 0;\n      while (p) {\n        copyBuffer(p.data, ret, 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  }, {\n    key: \"consume\",\n    value: function consume(n, hasStrings) {\n      var ret;\n      if (n < this.head.data.length) {\n        // `slice` is the same for buffers and strings.\n        ret = this.head.data.slice(0, n);\n        this.head.data = this.head.data.slice(n);\n      } else if (n === this.head.data.length) {\n        // First chunk is a perfect match.\n        ret = this.shift();\n      } else {\n        // Result spans more than one buffer.\n        ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n      }\n      return ret;\n    }\n  }, {\n    key: \"first\",\n    value: function first() {\n      return this.head.data;\n    }\n\n    // Consumes a specified amount of characters from the buffered data.\n  }, {\n    key: \"_getString\",\n    value: function _getString(n) {\n      var p = this.head;\n      var c = 1;\n      var ret = p.data;\n      n -= ret.length;\n      while (p = p.next) {\n        var str = p.data;\n        var nb = n > str.length ? str.length : n;\n        if (nb === str.length) ret += str;else ret += str.slice(0, n);\n        n -= nb;\n        if (n === 0) {\n          if (nb === str.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = str.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes from the buffered data.\n  }, {\n    key: \"_getBuffer\",\n    value: function _getBuffer(n) {\n      var ret = Buffer.allocUnsafe(n);\n      var p = this.head;\n      var c = 1;\n      p.data.copy(ret);\n      n -= p.data.length;\n      while (p = p.next) {\n        var buf = p.data;\n        var nb = n > buf.length ? buf.length : n;\n        buf.copy(ret, ret.length - n, 0, nb);\n        n -= nb;\n        if (n === 0) {\n          if (nb === buf.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = buf.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Make sure the linked list only shows the minimal necessary information.\n  }, {\n    key: custom,\n    value: function value(_, options) {\n      return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n        // Only inspect one level.\n        depth: 0,\n        // It should not recurse.\n        customInspect: false\n      }));\n    }\n  }]);\n  return BufferList;\n}();", "'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        process.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorNT, this, err);\n      }\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\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else {\n        process.nextTick(emitCloseNT, _this);\n      }\n    } else if (cb) {\n      process.nextTick(emitCloseNT, _this);\n      cb(err);\n    } else {\n      process.nextTick(emitCloseNT, _this);\n    }\n  });\n  return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n  emitErrorNT(self, err);\n  emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n  if (self._writableState && !self._writableState.emitClose) return;\n  if (self._readableState && !self._readableState.emitClose) return;\n  self.emit('close');\n}\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\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  var rState = stream._readableState;\n  var wState = stream._writableState;\n  if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy,\n  errorOrDestroy: errorOrDestroy\n};", "'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error;\n  }\n\n  function getMessage(arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message;\n    } else {\n      return message(arg1, arg2, arg3);\n    }\n  }\n\n  var NodeError =\n  /*#__PURE__*/\n  function (_Base) {\n    _inheritsLoose(NodeError, _Base);\n\n    function NodeError(arg1, arg2, arg3) {\n      return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n    }\n\n    return NodeError;\n  }(Base);\n\n  NodeError.prototype.name = Base.name;\n  NodeError.prototype.code = code;\n  codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    var len = expected.length;\n    expected = expected.map(function (i) {\n      return String(i);\n    });\n\n    if (len > 2) {\n      return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n    } else if (len === 2) {\n      return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n    } else {\n      return \"of \".concat(thing, \" \").concat(expected[0]);\n    }\n  } else {\n    return \"of \".concat(thing, \" \").concat(String(expected));\n  }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n\n  return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n  return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  // determiner: 'must be' or 'must not be'\n  var determiner;\n\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n\n  var msg;\n\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } else {\n    var type = includes(name, '.') ? 'property' : 'argument';\n    msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  }\n\n  msg += \". Received type \".concat(typeof actual);\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n  return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n  return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n  return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n", "'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n  if (hwm != null) {\n    if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n      var name = isDuplex ? duplexKey : 'highWaterMark';\n      throw new ERR_INVALID_OPT_VALUE(name, hwm);\n    }\n    return Math.floor(hwm);\n  }\n\n  // Default value\n  return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n  getHighWaterMark: getHighWaterMark\n};", "\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n  if (config('noDeprecation')) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (config('throwDeprecation')) {\n        throw new Error(msg);\n      } else if (config('traceDeprecation')) {\n        console.trace(msg);\n      } else {\n        console.warn(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n  // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n  try {\n    if (!global.localStorage) return false;\n  } catch (_) {\n    return false;\n  }\n  var val = global.localStorage[name];\n  if (null == val) return false;\n  return String(val).toLowerCase() === 'true';\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 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';\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n  ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n  ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n  ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\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 Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!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 = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\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  var noDecode = 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.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 = function (er) {\n    onwrite(stream, er);\n  };\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  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\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  // 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.emitClose !== false;\n\n  // Should .destroy() be called after 'finish' (and potentially 'end')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function writableStateBufferGetter() {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function value(object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function realHasInstance(object) {\n    return object instanceof this;\n  };\n}\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\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  var isDuplex = this instanceof Duplex;\n  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n  this._writableState = new WritableState(options, this, isDuplex);\n\n  // legacy.\n  this.writable = true;\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  }\n  Stream.call(this);\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 writeAfterEnd(stream, cb) {\n  var er = new ERR_STREAM_WRITE_AFTER_END();\n  // TODO: defer error events consistently everywhere, not just the cb\n  errorOrDestroy(stream, er);\n  process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var er;\n  if (chunk === null) {\n    er = new ERR_STREAM_NULL_VALUES();\n  } else if (typeof chunk !== 'string' && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n  }\n  if (er) {\n    errorOrDestroy(stream, er);\n    process.nextTick(cb, er);\n    return false;\n  }\n  return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n  if (typeof cb !== 'function') cb = nop;\n  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n  return ret;\n};\nWritable.prototype.cork = function () {\n  this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n  if (state.corked) {\n    state.corked--;\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\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, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n  state.length += len;\n  var 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) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n  return ret;\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'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    process.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    process.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n  onwriteStateUpdate(state);\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state) || stream.destroyed;\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n    if (sync) {\n      process.nextTick(afterWrite, stream, state, finished, cb);\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var 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  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      errorOrDestroy(stream, err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.pendingcb++;\n      state.finalCalled = true;\n      process.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\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        var rState = stream._readableState;\n        if (!rState || rState.autoDestroy && rState.endEmitted) {\n          stream.destroy();\n        }\n      }\n    }\n  }\n  return need;\n}\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  cb(err);\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 prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n  // Allow the keys array to be GC'ed.\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\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  this.allowHalfOpen = true;\n  if (options) {\n    if (options.readable === false) this.readable = false;\n    if (options.writable === false) this.writable = false;\n    if (options.allowHalfOpen === false) {\n      this.allowHalfOpen = false;\n      this.once('end', onend);\n    }\n  }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // If the writable side ended, then we're ok.\n  if (this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n  self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});", "// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    callback.apply(this, args);\n  };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n  if (typeof opts === 'function') return eos(stream, null, opts);\n  if (!opts) opts = {};\n  callback = once(callback || noop);\n  var readable = opts.readable || opts.readable !== false && stream.readable;\n  var writable = opts.writable || opts.writable !== false && stream.writable;\n  var onlegacyfinish = function onlegacyfinish() {\n    if (!stream.writable) onfinish();\n  };\n  var writableEnded = stream._writableState && stream._writableState.finished;\n  var onfinish = function onfinish() {\n    writable = false;\n    writableEnded = true;\n    if (!readable) callback.call(stream);\n  };\n  var readableEnded = stream._readableState && stream._readableState.endEmitted;\n  var onend = function onend() {\n    readable = false;\n    readableEnded = true;\n    if (!writable) callback.call(stream);\n  };\n  var onerror = function onerror(err) {\n    callback.call(stream, err);\n  };\n  var onclose = function onclose() {\n    var err;\n    if (readable && !readableEnded) {\n      if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n    if (writable && !writableEnded) {\n      if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n  };\n  var onrequest = function onrequest() {\n    stream.req.on('finish', onfinish);\n  };\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish);\n    stream.on('abort', onclose);\n    if (stream.req) onrequest();else stream.on('request', onrequest);\n  } else if (writable && !stream._writableState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish);\n    stream.on('close', onlegacyfinish);\n  }\n  stream.on('end', onend);\n  stream.on('finish', onfinish);\n  if (opts.error !== false) stream.on('error', onerror);\n  stream.on('close', onclose);\n  return function () {\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}\nmodule.exports = eos;", "'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n  return {\n    value: value,\n    done: done\n  };\n}\nfunction readAndResolve(iter) {\n  var resolve = iter[kLastResolve];\n  if (resolve !== null) {\n    var data = iter[kStream].read();\n    // we defer if data is null\n    // we can be expecting either 'end' or\n    // 'error'\n    if (data !== null) {\n      iter[kLastPromise] = null;\n      iter[kLastResolve] = null;\n      iter[kLastReject] = null;\n      resolve(createIterResult(data, false));\n    }\n  }\n}\nfunction onReadable(iter) {\n  // we wait for the next tick, because it might\n  // emit an error with process.nextTick\n  process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n  return function (resolve, reject) {\n    lastPromise.then(function () {\n      if (iter[kEnded]) {\n        resolve(createIterResult(undefined, true));\n        return;\n      }\n      iter[kHandlePromise](resolve, reject);\n    }, reject);\n  };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n  get stream() {\n    return this[kStream];\n  },\n  next: function next() {\n    var _this = this;\n    // if we have detected an error in the meanwhile\n    // reject straight away\n    var error = this[kError];\n    if (error !== null) {\n      return Promise.reject(error);\n    }\n    if (this[kEnded]) {\n      return Promise.resolve(createIterResult(undefined, true));\n    }\n    if (this[kStream].destroyed) {\n      // We need to defer via nextTick because if .destroy(err) is\n      // called, the error will be emitted via nextTick, and\n      // we cannot guarantee that there is no error lingering around\n      // waiting to be emitted.\n      return new Promise(function (resolve, reject) {\n        process.nextTick(function () {\n          if (_this[kError]) {\n            reject(_this[kError]);\n          } else {\n            resolve(createIterResult(undefined, true));\n          }\n        });\n      });\n    }\n\n    // if we have multiple next() calls\n    // we will wait for the previous Promise to finish\n    // this logic is optimized to support for await loops,\n    // where next() is only called once at a time\n    var lastPromise = this[kLastPromise];\n    var promise;\n    if (lastPromise) {\n      promise = new Promise(wrapForNext(lastPromise, this));\n    } else {\n      // fast path needed to support multiple this.push()\n      // without triggering the next() queue\n      var data = this[kStream].read();\n      if (data !== null) {\n        return Promise.resolve(createIterResult(data, false));\n      }\n      promise = new Promise(this[kHandlePromise]);\n    }\n    this[kLastPromise] = promise;\n    return promise;\n  }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n  return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n  var _this2 = this;\n  // destroy(err, cb) is a private API\n  // we can guarantee we have that here, because we control the\n  // Readable class this is attached to\n  return new Promise(function (resolve, reject) {\n    _this2[kStream].destroy(null, function (err) {\n      if (err) {\n        reject(err);\n        return;\n      }\n      resolve(createIterResult(undefined, true));\n    });\n  });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n  var _Object$create;\n  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n    value: stream,\n    writable: true\n  }), _defineProperty(_Object$create, kLastResolve, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kLastReject, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kError, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kEnded, {\n    value: stream._readableState.endEmitted,\n    writable: true\n  }), _defineProperty(_Object$create, kHandlePromise, {\n    value: function value(resolve, reject) {\n      var data = iterator[kStream].read();\n      if (data) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        resolve(createIterResult(data, false));\n      } else {\n        iterator[kLastResolve] = resolve;\n        iterator[kLastReject] = reject;\n      }\n    },\n    writable: true\n  }), _Object$create));\n  iterator[kLastPromise] = null;\n  finished(stream, function (err) {\n    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n      var reject = iterator[kLastReject];\n      // reject if we are waiting for data in the Promise\n      // returned by next() and store the error\n      if (reject !== null) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        reject(err);\n      }\n      iterator[kError] = err;\n      return;\n    }\n    var resolve = iterator[kLastResolve];\n    if (resolve !== null) {\n      iterator[kLastPromise] = null;\n      iterator[kLastResolve] = null;\n      iterator[kLastReject] = null;\n      resolve(createIterResult(undefined, true));\n    }\n    iterator[kEnded] = true;\n  });\n  stream.on('readable', onReadable.bind(null, iterator));\n  return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;", "module.exports = function () {\n  throw new Error('Readable.from is not available in the browser')\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\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function debug() {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\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);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\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 Duplex;\n\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  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\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 = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\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 = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\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  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n  this.paused = true;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'end' (and potentially 'finish')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // has it been destroyed\n  this.destroyed = false;\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.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\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  var isDuplex = this instanceof Duplex;\n  this._readableState = new ReadableState(options, this, isDuplex);\n\n  // legacy\n  this.readable = true;\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n  Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function 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});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  cb(err);\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  var state = this._readableState;\n  var skipChunkCheck;\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  debug('readableAddChunk', chunk);\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      errorOrDestroy(stream, er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n      if (addToFront) {\n        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());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) {\n        return false;\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n      maybeReadMore(stream, state);\n    }\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) {\n    state.awaitDrain = 0;\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);else state.buffer.push(chunk);\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n  }\n  return er;\n}\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  var 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\n  // Iterate over current buffer to convert already stored Buffers:\n  var p = this._readableState.buffer.head;\n  var content = '';\n  while (p !== null) {\n    content += decoder.write(p.data);\n    p = p.next;\n  }\n  this._readableState.buffer.clear();\n  if (content !== '') this._readableState.buffer.push(content);\n  this._readableState.length = content.length;\n  return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n    n = MAX_HWM;\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.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\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 <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\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  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n  if (n !== 0) state.emittedReadable = false;\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 === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);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  var doRead = state.needReadable;\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, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\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  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark;\n    n = 0;\n  } else {\n    state.length -= n;\n    state.awaitDrain = 0;\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) this.emit('data', ret);\n  return ret;\n};\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk');\n  if (state.ended) return;\n  if (state.decoder) {\n    var 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    if (!state.emittedReadable) {\n      state.emittedReadable = true;\n      emitReadable_(stream);\n    }\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  var 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  var state = stream._readableState;\n  debug('emitReadable_', state.destroyed, state.length, state.ended);\n  if (!state.destroyed && (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) {\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 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 (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n    var 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  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) process.nextTick(endFn);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\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  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n  var 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    dest.removeListener('drain', ondrain);\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 (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    var ret = dest.write(chunk);\n    debug('dest.write', ret);\n    if (ret === false) {\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 ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n      }\n      src.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 (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\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  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n  return dest;\n};\nfunction pipeOnDrain(src) {\n  return function pipeOnDrainFunctionResult() {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = {\n    hasUnpiped: false\n  };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n      hasUnpiped: false\n    });\n    return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\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  var res = Stream.prototype.on.call(this, ev, fn);\n  var 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  var 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.removeAllListeners = function (ev) {\n  var 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  var state = self._readableState;\n  state.readableListening = self.listenerCount('readable') > 0;\n  if (state.resumeScheduled && !state.paused) {\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  }\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  var 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.paused = 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.paused = true;\n  return this;\n};\nfunction flow(stream) {\n  var 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  var _this = this;\n  var state = this._readableState;\n  var paused = false;\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n    _this.push(null);\n  });\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function methodWrap(method) {\n        return function methodWrapReturnFunction() {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n  return this;\n};\nif (typeof Symbol === 'function') {\n  Readable.prototype[Symbol.asyncIterator] = function () {\n    if (createReadableStreamAsyncIterator === undefined) {\n      createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n    }\n    return createReadableStreamAsyncIterator(this);\n  };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.highWaterMark;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState && this._readableState.buffer;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.flowing;\n  },\n  set: function set(state) {\n    if (this._readableState) {\n      this._readableState.flowing = state;\n    }\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.length;\n  }\n});\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  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();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  var 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.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n    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      var wState = stream._writableState;\n      if (!wState || wState.autoDestroy && wState.finished) {\n        stream.destroy();\n      }\n    }\n  }\n}\nif (typeof Symbol === 'function') {\n  Readable.from = function (iterable, opts) {\n    if (from === undefined) {\n      from = require('./internal/streams/from');\n    }\n    return from(Readable, iterable, opts);\n  };\n}\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\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\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n  ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n  var cb = ts.writecb;\n  if (cb === null) {\n    return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n  }\n  ts.writechunk = null;\n  ts.writecb = null;\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    this.push(data);\n  cb(er);\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n  Duplex.call(this, options);\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\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  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  this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n  var _this = this;\n  if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n  if (ts.writechunk !== null && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\nTransform.prototype._destroy = function (err, cb) {\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n  });\n};\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // TODO(BridgeAR): Write a test for these two error cases\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n  return stream.push(null);\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\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(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};", "// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    callback.apply(void 0, arguments);\n  };\n}\nvar _require$codes = require('../../../errors').codes,\n  ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n  // Rethrow the error if it exists to avoid swallowing it\n  if (err) throw err;\n}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n  callback = once(callback);\n  var closed = false;\n  stream.on('close', function () {\n    closed = true;\n  });\n  if (eos === undefined) eos = require('./end-of-stream');\n  eos(stream, {\n    readable: reading,\n    writable: writing\n  }, function (err) {\n    if (err) return callback(err);\n    closed = true;\n    callback();\n  });\n  var destroyed = false;\n  return function (err) {\n    if (closed) return;\n    if (destroyed) return;\n    destroyed = true;\n\n    // request.destroy just do .end - .abort is what we want\n    if (isRequest(stream)) return stream.abort();\n    if (typeof stream.destroy === 'function') return stream.destroy();\n    callback(err || new ERR_STREAM_DESTROYED('pipe'));\n  };\n}\nfunction call(fn) {\n  fn();\n}\nfunction pipe(from, to) {\n  return from.pipe(to);\n}\nfunction popCallback(streams) {\n  if (!streams.length) return noop;\n  if (typeof streams[streams.length - 1] !== 'function') return noop;\n  return streams.pop();\n}\nfunction pipeline() {\n  for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n    streams[_key] = arguments[_key];\n  }\n  var callback = popCallback(streams);\n  if (Array.isArray(streams[0])) streams = streams[0];\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams');\n  }\n  var error;\n  var destroys = streams.map(function (stream, i) {\n    var reading = i < streams.length - 1;\n    var writing = i > 0;\n    return destroyer(stream, reading, writing, function (err) {\n      if (!error) error = err;\n      if (err) destroys.forEach(call);\n      if (reading) return;\n      destroys.forEach(call);\n      callback(error);\n    });\n  });\n  return streams.reduce(pipe);\n}\nmodule.exports = pipeline;", "// 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\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/lib/_stream_readable.js');\nStream.Writable = require('readable-stream/lib/_stream_writable.js');\nStream.Duplex = require('readable-stream/lib/_stream_duplex.js');\nStream.Transform = require('readable-stream/lib/_stream_transform.js');\nStream.PassThrough = require('readable-stream/lib/_stream_passthrough.js');\nStream.finished = require('readable-stream/lib/internal/streams/end-of-stream.js')\nStream.pipeline = require('readable-stream/lib/internal/streams/pipeline.js')\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams.  Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n  EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n  var source = this;\n\n  function ondata(chunk) {\n    if (dest.writable) {\n      if (false === dest.write(chunk) && source.pause) {\n        source.pause();\n      }\n    }\n  }\n\n  source.on('data', ondata);\n\n  function ondrain() {\n    if (source.readable && source.resume) {\n      source.resume();\n    }\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\n  var didOnEnd = false;\n  function onend() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    dest.end();\n  }\n\n\n  function onclose() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\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      throw er; // Unhandled stream error in pipe.\n    }\n  }\n\n  source.on('error', onerror);\n  dest.on('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\n    source.removeListener('end', onend);\n    source.removeListener('close', onclose);\n\n    source.removeListener('error', onerror);\n    dest.removeListener('error', onerror);\n\n    source.removeListener('end', cleanup);\n    source.removeListener('close', cleanup);\n\n    dest.removeListener('close', cleanup);\n  }\n\n  source.on('end', cleanup);\n  source.on('close', cleanup);\n\n  dest.on('close', cleanup);\n\n  dest.emit('pipe', source);\n\n  // Allow for unix-like usage: A.pipe(B).pipe(C)\n  return dest;\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('stream')\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 { 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.isDisturbed = utils.isDisturbed\nStream.isErrored = utils.isErrored\nStream.isReadable = utils.isReadable\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\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", "const errors = {\n  IMPOSSIBLE_CASE: 'Impossible case. Please create issue.',\n  TWEAK_ADD:\n    'The tweak was out of range or the resulted private key is invalid',\n  TWEAK_MUL: 'The tweak was out of range or equal to zero',\n  CONTEXT_RANDOMIZE_UNKNOW: 'Unknow error on context randomization',\n  SECKEY_INVALID: 'Private Key is invalid',\n  PUBKEY_PARSE: 'Public Key could not be parsed',\n  PUBKEY_SERIALIZE: 'Public Key serialization error',\n  PUBKEY_COMBINE: 'The sum of the public keys is not valid',\n  SIG_PARSE: 'Signature could not be parsed',\n  SIGN: 'The nonce generation function failed, or the private key was invalid',\n  RECOVER: 'Public key could not be recover',\n  ECDH: 'Scalar was invalid (zero or overflow)'\n}\n\nfunction assert (cond, msg) {\n  if (!cond) throw new Error(msg)\n}\n\nfunction isUint8Array (name, value, length) {\n  assert(value instanceof Uint8Array, `Expected ${name} to be an Uint8Array`)\n\n  if (length !== undefined) {\n    if (Array.isArray(length)) {\n      const numbers = length.join(', ')\n      const msg = `Expected ${name} to be an Uint8Array with length [${numbers}]`\n      assert(length.includes(value.length), msg)\n    } else {\n      const msg = `Expected ${name} to be an Uint8Array with length ${length}`\n      assert(value.length === length, msg)\n    }\n  }\n}\n\nfunction isCompressed (value) {\n  assert(toTypeString(value) === 'Boolean', 'Expected compressed to be a Boolean')\n}\n\nfunction getAssertedOutput (output = (len) => new Uint8Array(len), length) {\n  if (typeof output === 'function') output = output(length)\n  isUint8Array('output', output, length)\n  return output\n}\n\nfunction toTypeString (value) {\n  return Object.prototype.toString.call(value).slice(8, -1)\n}\n\nmodule.exports = (secp256k1) => {\n  return {\n    contextRandomize (seed) {\n      assert(\n        seed === null || seed instanceof Uint8Array,\n        'Expected seed to be an Uint8Array or null'\n      )\n      if (seed !== null) isUint8Array('seed', seed, 32)\n\n      switch (secp256k1.contextRandomize(seed)) {\n        case 1:\n          throw new Error(errors.CONTEXT_RANDOMIZE_UNKNOW)\n      }\n    },\n\n    privateKeyVerify (seckey) {\n      isUint8Array('private key', seckey, 32)\n\n      return secp256k1.privateKeyVerify(seckey) === 0\n    },\n\n    privateKeyNegate (seckey) {\n      isUint8Array('private key', seckey, 32)\n\n      switch (secp256k1.privateKeyNegate(seckey)) {\n        case 0:\n          return seckey\n        case 1:\n          throw new Error(errors.IMPOSSIBLE_CASE)\n      }\n    },\n\n    privateKeyTweakAdd (seckey, tweak) {\n      isUint8Array('private key', seckey, 32)\n      isUint8Array('tweak', tweak, 32)\n\n      switch (secp256k1.privateKeyTweakAdd(seckey, tweak)) {\n        case 0:\n          return seckey\n        case 1:\n          throw new Error(errors.TWEAK_ADD)\n      }\n    },\n\n    privateKeyTweakMul (seckey, tweak) {\n      isUint8Array('private key', seckey, 32)\n      isUint8Array('tweak', tweak, 32)\n\n      switch (secp256k1.privateKeyTweakMul(seckey, tweak)) {\n        case 0:\n          return seckey\n        case 1:\n          throw new Error(errors.TWEAK_MUL)\n      }\n    },\n\n    publicKeyVerify (pubkey) {\n      isUint8Array('public key', pubkey, [33, 65])\n\n      return secp256k1.publicKeyVerify(pubkey) === 0\n    },\n\n    publicKeyCreate (seckey, compressed = true, output) {\n      isUint8Array('private key', seckey, 32)\n      isCompressed(compressed)\n      output = getAssertedOutput(output, compressed ? 33 : 65)\n\n      switch (secp256k1.publicKeyCreate(output, seckey)) {\n        case 0:\n          return output\n        case 1:\n          throw new Error(errors.SECKEY_INVALID)\n        case 2:\n          throw new Error(errors.PUBKEY_SERIALIZE)\n      }\n    },\n\n    publicKeyConvert (pubkey, compressed = true, output) {\n      isUint8Array('public key', pubkey, [33, 65])\n      isCompressed(compressed)\n      output = getAssertedOutput(output, compressed ? 33 : 65)\n\n      switch (secp256k1.publicKeyConvert(output, pubkey)) {\n        case 0:\n          return output\n        case 1:\n          throw new Error(errors.PUBKEY_PARSE)\n        case 2:\n          throw new Error(errors.PUBKEY_SERIALIZE)\n      }\n    },\n\n    publicKeyNegate (pubkey, compressed = true, output) {\n      isUint8Array('public key', pubkey, [33, 65])\n      isCompressed(compressed)\n      output = getAssertedOutput(output, compressed ? 33 : 65)\n\n      switch (secp256k1.publicKeyNegate(output, pubkey)) {\n        case 0:\n          return output\n        case 1:\n          throw new Error(errors.PUBKEY_PARSE)\n        case 2:\n          throw new Error(errors.IMPOSSIBLE_CASE)\n        case 3:\n          throw new Error(errors.PUBKEY_SERIALIZE)\n      }\n    },\n\n    publicKeyCombine (pubkeys, compressed = true, output) {\n      assert(Array.isArray(pubkeys), 'Expected public keys to be an Array')\n      assert(pubkeys.length > 0, 'Expected public keys array will have more than zero items')\n      for (const pubkey of pubkeys) {\n        isUint8Array('public key', pubkey, [33, 65])\n      }\n      isCompressed(compressed)\n      output = getAssertedOutput(output, compressed ? 33 : 65)\n\n      switch (secp256k1.publicKeyCombine(output, pubkeys)) {\n        case 0:\n          return output\n        case 1:\n          throw new Error(errors.PUBKEY_PARSE)\n        case 2:\n          throw new Error(errors.PUBKEY_COMBINE)\n        case 3:\n          throw new Error(errors.PUBKEY_SERIALIZE)\n      }\n    },\n\n    publicKeyTweakAdd (pubkey, tweak, compressed = true, output) {\n      isUint8Array('public key', pubkey, [33, 65])\n      isUint8Array('tweak', tweak, 32)\n      isCompressed(compressed)\n      output = getAssertedOutput(output, compressed ? 33 : 65)\n\n      switch (secp256k1.publicKeyTweakAdd(output, pubkey, tweak)) {\n        case 0:\n          return output\n        case 1:\n          throw new Error(errors.PUBKEY_PARSE)\n        case 2:\n          throw new Error(errors.TWEAK_ADD)\n      }\n    },\n\n    publicKeyTweakMul (pubkey, tweak, compressed = true, output) {\n      isUint8Array('public key', pubkey, [33, 65])\n      isUint8Array('tweak', tweak, 32)\n      isCompressed(compressed)\n      output = getAssertedOutput(output, compressed ? 33 : 65)\n\n      switch (secp256k1.publicKeyTweakMul(output, pubkey, tweak)) {\n        case 0:\n          return output\n        case 1:\n          throw new Error(errors.PUBKEY_PARSE)\n        case 2:\n          throw new Error(errors.TWEAK_MUL)\n      }\n    },\n\n    signatureNormalize (sig) {\n      isUint8Array('signature', sig, 64)\n\n      switch (secp256k1.signatureNormalize(sig)) {\n        case 0:\n          return sig\n        case 1:\n          throw new Error(errors.SIG_PARSE)\n      }\n    },\n\n    signatureExport (sig, output) {\n      isUint8Array('signature', sig, 64)\n      output = getAssertedOutput(output, 72)\n\n      const obj = { output, outputlen: 72 }\n      switch (secp256k1.signatureExport(obj, sig)) {\n        case 0:\n          return output.slice(0, obj.outputlen)\n        case 1:\n          throw new Error(errors.SIG_PARSE)\n        case 2:\n          throw new Error(errors.IMPOSSIBLE_CASE)\n      }\n    },\n\n    signatureImport (sig, output) {\n      isUint8Array('signature', sig)\n      output = getAssertedOutput(output, 64)\n\n      switch (secp256k1.signatureImport(output, sig)) {\n        case 0:\n          return output\n        case 1:\n          throw new Error(errors.SIG_PARSE)\n        case 2:\n          throw new Error(errors.IMPOSSIBLE_CASE)\n      }\n    },\n\n    ecdsaSign (msg32, seckey, options = {}, output) {\n      isUint8Array('message', msg32, 32)\n      isUint8Array('private key', seckey, 32)\n      assert(toTypeString(options) === 'Object', 'Expected options to be an Object')\n      if (options.data !== undefined) isUint8Array('options.data', options.data)\n      if (options.noncefn !== undefined) assert(toTypeString(options.noncefn) === 'Function', 'Expected options.noncefn to be a Function')\n      output = getAssertedOutput(output, 64)\n\n      const obj = { signature: output, recid: null }\n      switch (secp256k1.ecdsaSign(obj, msg32, seckey, options.data, options.noncefn)) {\n        case 0:\n          return obj\n        case 1:\n          throw new Error(errors.SIGN)\n        case 2:\n          throw new Error(errors.IMPOSSIBLE_CASE)\n      }\n    },\n\n    ecdsaVerify (sig, msg32, pubkey) {\n      isUint8Array('signature', sig, 64)\n      isUint8Array('message', msg32, 32)\n      isUint8Array('public key', pubkey, [33, 65])\n\n      switch (secp256k1.ecdsaVerify(sig, msg32, pubkey)) {\n        case 0:\n          return true\n        case 3:\n          return false\n        case 1:\n          throw new Error(errors.SIG_PARSE)\n        case 2:\n          throw new Error(errors.PUBKEY_PARSE)\n      }\n    },\n\n    ecdsaRecover (sig, recid, msg32, compressed = true, output) {\n      isUint8Array('signature', sig, 64)\n      assert(\n        toTypeString(recid) === 'Number' &&\n          recid >= 0 &&\n          recid <= 3,\n        'Expected recovery id to be a Number within interval [0, 3]'\n      )\n      isUint8Array('message', msg32, 32)\n      isCompressed(compressed)\n      output = getAssertedOutput(output, compressed ? 33 : 65)\n\n      switch (secp256k1.ecdsaRecover(output, sig, recid, msg32)) {\n        case 0:\n          return output\n        case 1:\n          throw new Error(errors.SIG_PARSE)\n        case 2:\n          throw new Error(errors.RECOVER)\n        case 3:\n          throw new Error(errors.IMPOSSIBLE_CASE)\n      }\n    },\n\n    ecdh (pubkey, seckey, options = {}, output) {\n      isUint8Array('public key', pubkey, [33, 65])\n      isUint8Array('private key', seckey, 32)\n      assert(toTypeString(options) === 'Object', 'Expected options to be an Object')\n      if (options.data !== undefined) isUint8Array('options.data', options.data)\n      if (options.hashfn !== undefined) {\n        assert(toTypeString(options.hashfn) === 'Function', 'Expected options.hashfn to be a Function')\n        if (options.xbuf !== undefined) isUint8Array('options.xbuf', options.xbuf, 32)\n        if (options.ybuf !== undefined) isUint8Array('options.ybuf', options.ybuf, 32)\n        isUint8Array('output', output)\n      } else {\n        output = getAssertedOutput(output, 32)\n      }\n\n      switch (secp256k1.ecdh(output, pubkey, seckey, options.data, options.hashfn, options.xbuf, options.ybuf)) {\n        case 0:\n          return output\n        case 1:\n          throw new Error(errors.PUBKEY_PARSE)\n        case 2:\n          throw new Error(errors.ECDH)\n      }\n    }\n  }\n}\n", "{\n  \"name\": \"elliptic\",\n  \"version\": \"6.5.4\",\n  \"description\": \"EC cryptography\",\n  \"main\": \"lib/elliptic.js\",\n  \"files\": [\n    \"lib\"\n  ],\n  \"scripts\": {\n    \"lint\": \"eslint lib test\",\n    \"lint:fix\": \"npm run lint -- --fix\",\n    \"unit\": \"istanbul test _mocha --reporter=spec test/index.js\",\n    \"test\": \"npm run lint && npm run unit\",\n    \"version\": \"grunt dist && git add dist/\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git@github.com:indutny/elliptic\"\n  },\n  \"keywords\": [\n    \"EC\",\n    \"Elliptic\",\n    \"curve\",\n    \"Cryptography\"\n  ],\n  \"author\": \"Fedor Indutny <fedor@indutny.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/indutny/elliptic/issues\"\n  },\n  \"homepage\": \"https://github.com/indutny/elliptic\",\n  \"devDependencies\": {\n    \"brfs\": \"^2.0.2\",\n    \"coveralls\": \"^3.1.0\",\n    \"eslint\": \"^7.6.0\",\n    \"grunt\": \"^1.2.1\",\n    \"grunt-browserify\": \"^5.3.0\",\n    \"grunt-cli\": \"^1.3.2\",\n    \"grunt-contrib-connect\": \"^3.0.0\",\n    \"grunt-contrib-copy\": \"^1.0.0\",\n    \"grunt-contrib-uglify\": \"^5.0.0\",\n    \"grunt-mocha-istanbul\": \"^5.0.2\",\n    \"grunt-saucelabs\": \"^9.0.1\",\n    \"istanbul\": \"^0.4.5\",\n    \"mocha\": \"^8.0.1\"\n  },\n  \"dependencies\": {\n    \"bn.js\": \"^4.11.9\",\n    \"brorand\": \"^1.1.0\",\n    \"hash.js\": \"^1.0.0\",\n    \"hmac-drbg\": \"^1.0.1\",\n    \"inherits\": \"^2.0.4\",\n    \"minimalistic-assert\": \"^1.0.1\",\n    \"minimalistic-crypto-utils\": \"^1.0.1\"\n  }\n}\n", "(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n", "module.exports = assert;\n\nfunction assert(val, msg) {\n  if (!val)\n    throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n  if (l != r)\n    throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n", "'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg))\n    return msg.slice();\n  if (!msg)\n    return [];\n  var res = [];\n  if (typeof msg !== 'string') {\n    for (var i = 0; i < msg.length; i++)\n      res[i] = msg[i] | 0;\n    return res;\n  }\n  if (enc === 'hex') {\n    msg = msg.replace(/[^a-z0-9]+/ig, '');\n    if (msg.length % 2 !== 0)\n      msg = '0' + msg;\n    for (var i = 0; i < msg.length; i += 2)\n      res.push(parseInt(msg[i] + msg[i + 1], 16));\n  } else {\n    for (var i = 0; i < msg.length; i++) {\n      var c = msg.charCodeAt(i);\n      var hi = c >> 8;\n      var lo = c & 0xff;\n      if (hi)\n        res.push(hi, lo);\n      else\n        res.push(lo);\n    }\n  }\n  return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n  if (word.length === 1)\n    return '0' + word;\n  else\n    return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++)\n    res += zero2(msg[i].toString(16));\n  return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n  if (enc === 'hex')\n    return toHex(arr);\n  else\n    return arr;\n};\n", "'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n  var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n  naf.fill(0);\n\n  var ws = 1 << (w + 1);\n  var k = num.clone();\n\n  for (var i = 0; i < naf.length; i++) {\n    var z;\n    var mod = k.andln(ws - 1);\n    if (k.isOdd()) {\n      if (mod > (ws >> 1) - 1)\n        z = (ws >> 1) - mod;\n      else\n        z = mod;\n      k.isubn(z);\n    } else {\n      z = 0;\n    }\n\n    naf[i] = z;\n    k.iushrn(1);\n  }\n\n  return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n  var jsf = [\n    [],\n    [],\n  ];\n\n  k1 = k1.clone();\n  k2 = k2.clone();\n  var d1 = 0;\n  var d2 = 0;\n  var m8;\n  while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n    // First phase\n    var m14 = (k1.andln(3) + d1) & 3;\n    var m24 = (k2.andln(3) + d2) & 3;\n    if (m14 === 3)\n      m14 = -1;\n    if (m24 === 3)\n      m24 = -1;\n    var u1;\n    if ((m14 & 1) === 0) {\n      u1 = 0;\n    } else {\n      m8 = (k1.andln(7) + d1) & 7;\n      if ((m8 === 3 || m8 === 5) && m24 === 2)\n        u1 = -m14;\n      else\n        u1 = m14;\n    }\n    jsf[0].push(u1);\n\n    var u2;\n    if ((m24 & 1) === 0) {\n      u2 = 0;\n    } else {\n      m8 = (k2.andln(7) + d2) & 7;\n      if ((m8 === 3 || m8 === 5) && m14 === 2)\n        u2 = -m24;\n      else\n        u2 = m24;\n    }\n    jsf[1].push(u2);\n\n    // Second phase\n    if (2 * d1 === u1 + 1)\n      d1 = 1 - d1;\n    if (2 * d2 === u2 + 1)\n      d2 = 1 - d2;\n    k1.iushrn(1);\n    k2.iushrn(1);\n  }\n\n  return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n  var key = '_' + name;\n  obj.prototype[name] = function cachedProperty() {\n    return this[key] !== undefined ? this[key] :\n      this[key] = computer.call(this);\n  };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n  return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n    bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n  return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\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\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", "'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n  throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n  module.exports = randomBytes\n} else {\n  module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n  // phantomjs needs to throw\n  if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n  var bytes = Buffer.allocUnsafe(size)\n\n  if (size > 0) {  // getRandomValues fails on IE if size == 0\n    if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n      // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n      for (var generated = 0; generated < size; generated += MAX_BYTES) {\n        // buffer.slice automatically checks if the end is past the end of\n        // the buffer so we don't have to here\n        crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n      }\n    } else {\n      crypto.getRandomValues(bytes)\n    }\n  }\n\n  if (typeof cb === 'function') {\n    return process.nextTick(function () {\n      cb(null, bytes)\n    })\n  }\n\n  return bytes\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", "module.exports = require('events').EventEmitter;\n", "'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n  Buffer = _require.Buffer;\nvar _require2 = require('util'),\n  inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n  Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n  _createClass(BufferList, [{\n    key: \"push\",\n    value: function push(v) {\n      var entry = {\n        data: v,\n        next: null\n      };\n      if (this.length > 0) this.tail.next = entry;else this.head = entry;\n      this.tail = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"unshift\",\n    value: function unshift(v) {\n      var 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  }, {\n    key: \"shift\",\n    value: function shift() {\n      if (this.length === 0) return;\n      var ret = this.head.data;\n      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n      --this.length;\n      return ret;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.head = this.tail = null;\n      this.length = 0;\n    }\n  }, {\n    key: \"join\",\n    value: function join(s) {\n      if (this.length === 0) return '';\n      var p = this.head;\n      var ret = '' + p.data;\n      while (p = p.next) ret += s + p.data;\n      return ret;\n    }\n  }, {\n    key: \"concat\",\n    value: function concat(n) {\n      if (this.length === 0) return Buffer.alloc(0);\n      var ret = Buffer.allocUnsafe(n >>> 0);\n      var p = this.head;\n      var i = 0;\n      while (p) {\n        copyBuffer(p.data, ret, 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  }, {\n    key: \"consume\",\n    value: function consume(n, hasStrings) {\n      var ret;\n      if (n < this.head.data.length) {\n        // `slice` is the same for buffers and strings.\n        ret = this.head.data.slice(0, n);\n        this.head.data = this.head.data.slice(n);\n      } else if (n === this.head.data.length) {\n        // First chunk is a perfect match.\n        ret = this.shift();\n      } else {\n        // Result spans more than one buffer.\n        ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n      }\n      return ret;\n    }\n  }, {\n    key: \"first\",\n    value: function first() {\n      return this.head.data;\n    }\n\n    // Consumes a specified amount of characters from the buffered data.\n  }, {\n    key: \"_getString\",\n    value: function _getString(n) {\n      var p = this.head;\n      var c = 1;\n      var ret = p.data;\n      n -= ret.length;\n      while (p = p.next) {\n        var str = p.data;\n        var nb = n > str.length ? str.length : n;\n        if (nb === str.length) ret += str;else ret += str.slice(0, n);\n        n -= nb;\n        if (n === 0) {\n          if (nb === str.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = str.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes from the buffered data.\n  }, {\n    key: \"_getBuffer\",\n    value: function _getBuffer(n) {\n      var ret = Buffer.allocUnsafe(n);\n      var p = this.head;\n      var c = 1;\n      p.data.copy(ret);\n      n -= p.data.length;\n      while (p = p.next) {\n        var buf = p.data;\n        var nb = n > buf.length ? buf.length : n;\n        buf.copy(ret, ret.length - n, 0, nb);\n        n -= nb;\n        if (n === 0) {\n          if (nb === buf.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = buf.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Make sure the linked list only shows the minimal necessary information.\n  }, {\n    key: custom,\n    value: function value(_, options) {\n      return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n        // Only inspect one level.\n        depth: 0,\n        // It should not recurse.\n        customInspect: false\n      }));\n    }\n  }]);\n  return BufferList;\n}();", "'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        process.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorNT, this, err);\n      }\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\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else {\n        process.nextTick(emitCloseNT, _this);\n      }\n    } else if (cb) {\n      process.nextTick(emitCloseNT, _this);\n      cb(err);\n    } else {\n      process.nextTick(emitCloseNT, _this);\n    }\n  });\n  return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n  emitErrorNT(self, err);\n  emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n  if (self._writableState && !self._writableState.emitClose) return;\n  if (self._readableState && !self._readableState.emitClose) return;\n  self.emit('close');\n}\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\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  var rState = stream._readableState;\n  var wState = stream._writableState;\n  if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy,\n  errorOrDestroy: errorOrDestroy\n};", "'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error;\n  }\n\n  function getMessage(arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message;\n    } else {\n      return message(arg1, arg2, arg3);\n    }\n  }\n\n  var NodeError =\n  /*#__PURE__*/\n  function (_Base) {\n    _inheritsLoose(NodeError, _Base);\n\n    function NodeError(arg1, arg2, arg3) {\n      return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n    }\n\n    return NodeError;\n  }(Base);\n\n  NodeError.prototype.name = Base.name;\n  NodeError.prototype.code = code;\n  codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    var len = expected.length;\n    expected = expected.map(function (i) {\n      return String(i);\n    });\n\n    if (len > 2) {\n      return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n    } else if (len === 2) {\n      return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n    } else {\n      return \"of \".concat(thing, \" \").concat(expected[0]);\n    }\n  } else {\n    return \"of \".concat(thing, \" \").concat(String(expected));\n  }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n\n  return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n  return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  // determiner: 'must be' or 'must not be'\n  var determiner;\n\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n\n  var msg;\n\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } else {\n    var type = includes(name, '.') ? 'property' : 'argument';\n    msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  }\n\n  msg += \". Received type \".concat(typeof actual);\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n  return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n  return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n  return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n", "'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n  if (hwm != null) {\n    if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n      var name = isDuplex ? duplexKey : 'highWaterMark';\n      throw new ERR_INVALID_OPT_VALUE(name, hwm);\n    }\n    return Math.floor(hwm);\n  }\n\n  // Default value\n  return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n  getHighWaterMark: getHighWaterMark\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';\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n  ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n  ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n  ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\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 Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!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 = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\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  var noDecode = 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.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 = function (er) {\n    onwrite(stream, er);\n  };\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  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\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  // 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.emitClose !== false;\n\n  // Should .destroy() be called after 'finish' (and potentially 'end')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function writableStateBufferGetter() {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function value(object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function realHasInstance(object) {\n    return object instanceof this;\n  };\n}\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\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  var isDuplex = this instanceof Duplex;\n  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n  this._writableState = new WritableState(options, this, isDuplex);\n\n  // legacy.\n  this.writable = true;\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  }\n  Stream.call(this);\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 writeAfterEnd(stream, cb) {\n  var er = new ERR_STREAM_WRITE_AFTER_END();\n  // TODO: defer error events consistently everywhere, not just the cb\n  errorOrDestroy(stream, er);\n  process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var er;\n  if (chunk === null) {\n    er = new ERR_STREAM_NULL_VALUES();\n  } else if (typeof chunk !== 'string' && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n  }\n  if (er) {\n    errorOrDestroy(stream, er);\n    process.nextTick(cb, er);\n    return false;\n  }\n  return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n  if (typeof cb !== 'function') cb = nop;\n  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n  return ret;\n};\nWritable.prototype.cork = function () {\n  this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n  if (state.corked) {\n    state.corked--;\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\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, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n  state.length += len;\n  var 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) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n  return ret;\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'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    process.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    process.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n  onwriteStateUpdate(state);\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state) || stream.destroyed;\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n    if (sync) {\n      process.nextTick(afterWrite, stream, state, finished, cb);\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var 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  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      errorOrDestroy(stream, err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.pendingcb++;\n      state.finalCalled = true;\n      process.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\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        var rState = stream._readableState;\n        if (!rState || rState.autoDestroy && rState.endEmitted) {\n          stream.destroy();\n        }\n      }\n    }\n  }\n  return need;\n}\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  cb(err);\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 prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n  // Allow the keys array to be GC'ed.\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\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  this.allowHalfOpen = true;\n  if (options) {\n    if (options.readable === false) this.readable = false;\n    if (options.writable === false) this.writable = false;\n    if (options.allowHalfOpen === false) {\n      this.allowHalfOpen = false;\n      this.once('end', onend);\n    }\n  }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // If the writable side ended, then we're ok.\n  if (this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n  self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});", "// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    callback.apply(this, args);\n  };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n  if (typeof opts === 'function') return eos(stream, null, opts);\n  if (!opts) opts = {};\n  callback = once(callback || noop);\n  var readable = opts.readable || opts.readable !== false && stream.readable;\n  var writable = opts.writable || opts.writable !== false && stream.writable;\n  var onlegacyfinish = function onlegacyfinish() {\n    if (!stream.writable) onfinish();\n  };\n  var writableEnded = stream._writableState && stream._writableState.finished;\n  var onfinish = function onfinish() {\n    writable = false;\n    writableEnded = true;\n    if (!readable) callback.call(stream);\n  };\n  var readableEnded = stream._readableState && stream._readableState.endEmitted;\n  var onend = function onend() {\n    readable = false;\n    readableEnded = true;\n    if (!writable) callback.call(stream);\n  };\n  var onerror = function onerror(err) {\n    callback.call(stream, err);\n  };\n  var onclose = function onclose() {\n    var err;\n    if (readable && !readableEnded) {\n      if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n    if (writable && !writableEnded) {\n      if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n  };\n  var onrequest = function onrequest() {\n    stream.req.on('finish', onfinish);\n  };\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish);\n    stream.on('abort', onclose);\n    if (stream.req) onrequest();else stream.on('request', onrequest);\n  } else if (writable && !stream._writableState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish);\n    stream.on('close', onlegacyfinish);\n  }\n  stream.on('end', onend);\n  stream.on('finish', onfinish);\n  if (opts.error !== false) stream.on('error', onerror);\n  stream.on('close', onclose);\n  return function () {\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}\nmodule.exports = eos;", "'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n  return {\n    value: value,\n    done: done\n  };\n}\nfunction readAndResolve(iter) {\n  var resolve = iter[kLastResolve];\n  if (resolve !== null) {\n    var data = iter[kStream].read();\n    // we defer if data is null\n    // we can be expecting either 'end' or\n    // 'error'\n    if (data !== null) {\n      iter[kLastPromise] = null;\n      iter[kLastResolve] = null;\n      iter[kLastReject] = null;\n      resolve(createIterResult(data, false));\n    }\n  }\n}\nfunction onReadable(iter) {\n  // we wait for the next tick, because it might\n  // emit an error with process.nextTick\n  process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n  return function (resolve, reject) {\n    lastPromise.then(function () {\n      if (iter[kEnded]) {\n        resolve(createIterResult(undefined, true));\n        return;\n      }\n      iter[kHandlePromise](resolve, reject);\n    }, reject);\n  };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n  get stream() {\n    return this[kStream];\n  },\n  next: function next() {\n    var _this = this;\n    // if we have detected an error in the meanwhile\n    // reject straight away\n    var error = this[kError];\n    if (error !== null) {\n      return Promise.reject(error);\n    }\n    if (this[kEnded]) {\n      return Promise.resolve(createIterResult(undefined, true));\n    }\n    if (this[kStream].destroyed) {\n      // We need to defer via nextTick because if .destroy(err) is\n      // called, the error will be emitted via nextTick, and\n      // we cannot guarantee that there is no error lingering around\n      // waiting to be emitted.\n      return new Promise(function (resolve, reject) {\n        process.nextTick(function () {\n          if (_this[kError]) {\n            reject(_this[kError]);\n          } else {\n            resolve(createIterResult(undefined, true));\n          }\n        });\n      });\n    }\n\n    // if we have multiple next() calls\n    // we will wait for the previous Promise to finish\n    // this logic is optimized to support for await loops,\n    // where next() is only called once at a time\n    var lastPromise = this[kLastPromise];\n    var promise;\n    if (lastPromise) {\n      promise = new Promise(wrapForNext(lastPromise, this));\n    } else {\n      // fast path needed to support multiple this.push()\n      // without triggering the next() queue\n      var data = this[kStream].read();\n      if (data !== null) {\n        return Promise.resolve(createIterResult(data, false));\n      }\n      promise = new Promise(this[kHandlePromise]);\n    }\n    this[kLastPromise] = promise;\n    return promise;\n  }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n  return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n  var _this2 = this;\n  // destroy(err, cb) is a private API\n  // we can guarantee we have that here, because we control the\n  // Readable class this is attached to\n  return new Promise(function (resolve, reject) {\n    _this2[kStream].destroy(null, function (err) {\n      if (err) {\n        reject(err);\n        return;\n      }\n      resolve(createIterResult(undefined, true));\n    });\n  });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n  var _Object$create;\n  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n    value: stream,\n    writable: true\n  }), _defineProperty(_Object$create, kLastResolve, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kLastReject, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kError, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kEnded, {\n    value: stream._readableState.endEmitted,\n    writable: true\n  }), _defineProperty(_Object$create, kHandlePromise, {\n    value: function value(resolve, reject) {\n      var data = iterator[kStream].read();\n      if (data) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        resolve(createIterResult(data, false));\n      } else {\n        iterator[kLastResolve] = resolve;\n        iterator[kLastReject] = reject;\n      }\n    },\n    writable: true\n  }), _Object$create));\n  iterator[kLastPromise] = null;\n  finished(stream, function (err) {\n    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n      var reject = iterator[kLastReject];\n      // reject if we are waiting for data in the Promise\n      // returned by next() and store the error\n      if (reject !== null) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        reject(err);\n      }\n      iterator[kError] = err;\n      return;\n    }\n    var resolve = iterator[kLastResolve];\n    if (resolve !== null) {\n      iterator[kLastPromise] = null;\n      iterator[kLastResolve] = null;\n      iterator[kLastReject] = null;\n      resolve(createIterResult(undefined, true));\n    }\n    iterator[kEnded] = true;\n  });\n  stream.on('readable', onReadable.bind(null, iterator));\n  return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;", "module.exports = function () {\n  throw new Error('Readable.from is not available in the browser')\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\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function debug() {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\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);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\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 Duplex;\n\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  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\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 = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\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 = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\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  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n  this.paused = true;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'end' (and potentially 'finish')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // has it been destroyed\n  this.destroyed = false;\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.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\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  var isDuplex = this instanceof Duplex;\n  this._readableState = new ReadableState(options, this, isDuplex);\n\n  // legacy\n  this.readable = true;\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n  Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function 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});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  cb(err);\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  var state = this._readableState;\n  var skipChunkCheck;\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  debug('readableAddChunk', chunk);\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      errorOrDestroy(stream, er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n      if (addToFront) {\n        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());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) {\n        return false;\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n      maybeReadMore(stream, state);\n    }\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) {\n    state.awaitDrain = 0;\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);else state.buffer.push(chunk);\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n  }\n  return er;\n}\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  var 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\n  // Iterate over current buffer to convert already stored Buffers:\n  var p = this._readableState.buffer.head;\n  var content = '';\n  while (p !== null) {\n    content += decoder.write(p.data);\n    p = p.next;\n  }\n  this._readableState.buffer.clear();\n  if (content !== '') this._readableState.buffer.push(content);\n  this._readableState.length = content.length;\n  return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n    n = MAX_HWM;\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.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\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 <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\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  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n  if (n !== 0) state.emittedReadable = false;\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 === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);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  var doRead = state.needReadable;\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, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\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  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark;\n    n = 0;\n  } else {\n    state.length -= n;\n    state.awaitDrain = 0;\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) this.emit('data', ret);\n  return ret;\n};\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk');\n  if (state.ended) return;\n  if (state.decoder) {\n    var 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    if (!state.emittedReadable) {\n      state.emittedReadable = true;\n      emitReadable_(stream);\n    }\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  var 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  var state = stream._readableState;\n  debug('emitReadable_', state.destroyed, state.length, state.ended);\n  if (!state.destroyed && (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) {\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 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 (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n    var 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  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) process.nextTick(endFn);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\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  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n  var 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    dest.removeListener('drain', ondrain);\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 (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    var ret = dest.write(chunk);\n    debug('dest.write', ret);\n    if (ret === false) {\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 ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n      }\n      src.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 (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\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  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n  return dest;\n};\nfunction pipeOnDrain(src) {\n  return function pipeOnDrainFunctionResult() {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = {\n    hasUnpiped: false\n  };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n      hasUnpiped: false\n    });\n    return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\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  var res = Stream.prototype.on.call(this, ev, fn);\n  var 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  var 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.removeAllListeners = function (ev) {\n  var 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  var state = self._readableState;\n  state.readableListening = self.listenerCount('readable') > 0;\n  if (state.resumeScheduled && !state.paused) {\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  }\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  var 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.paused = 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.paused = true;\n  return this;\n};\nfunction flow(stream) {\n  var 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  var _this = this;\n  var state = this._readableState;\n  var paused = false;\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n    _this.push(null);\n  });\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function methodWrap(method) {\n        return function methodWrapReturnFunction() {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n  return this;\n};\nif (typeof Symbol === 'function') {\n  Readable.prototype[Symbol.asyncIterator] = function () {\n    if (createReadableStreamAsyncIterator === undefined) {\n      createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n    }\n    return createReadableStreamAsyncIterator(this);\n  };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.highWaterMark;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState && this._readableState.buffer;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.flowing;\n  },\n  set: function set(state) {\n    if (this._readableState) {\n      this._readableState.flowing = state;\n    }\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.length;\n  }\n});\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  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();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  var 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.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n    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      var wState = stream._writableState;\n      if (!wState || wState.autoDestroy && wState.finished) {\n        stream.destroy();\n      }\n    }\n  }\n}\nif (typeof Symbol === 'function') {\n  Readable.from = function (iterable, opts) {\n    if (from === undefined) {\n      from = require('./internal/streams/from');\n    }\n    return from(Readable, iterable, opts);\n  };\n}\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\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\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n  ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n  var cb = ts.writecb;\n  if (cb === null) {\n    return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n  }\n  ts.writechunk = null;\n  ts.writecb = null;\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    this.push(data);\n  cb(er);\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n  Duplex.call(this, options);\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\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  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  this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n  var _this = this;\n  if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n  if (ts.writechunk !== null && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\nTransform.prototype._destroy = function (err, cb) {\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n  });\n};\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // TODO(BridgeAR): Write a test for these two error cases\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n  return stream.push(null);\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\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(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};", "// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    callback.apply(void 0, arguments);\n  };\n}\nvar _require$codes = require('../../../errors').codes,\n  ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n  // Rethrow the error if it exists to avoid swallowing it\n  if (err) throw err;\n}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n  callback = once(callback);\n  var closed = false;\n  stream.on('close', function () {\n    closed = true;\n  });\n  if (eos === undefined) eos = require('./end-of-stream');\n  eos(stream, {\n    readable: reading,\n    writable: writing\n  }, function (err) {\n    if (err) return callback(err);\n    closed = true;\n    callback();\n  });\n  var destroyed = false;\n  return function (err) {\n    if (closed) return;\n    if (destroyed) return;\n    destroyed = true;\n\n    // request.destroy just do .end - .abort is what we want\n    if (isRequest(stream)) return stream.abort();\n    if (typeof stream.destroy === 'function') return stream.destroy();\n    callback(err || new ERR_STREAM_DESTROYED('pipe'));\n  };\n}\nfunction call(fn) {\n  fn();\n}\nfunction pipe(from, to) {\n  return from.pipe(to);\n}\nfunction popCallback(streams) {\n  if (!streams.length) return noop;\n  if (typeof streams[streams.length - 1] !== 'function') return noop;\n  return streams.pop();\n}\nfunction pipeline() {\n  for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n    streams[_key] = arguments[_key];\n  }\n  var callback = popCallback(streams);\n  if (Array.isArray(streams[0])) streams = streams[0];\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams');\n  }\n  var error;\n  var destroys = streams.map(function (stream, i) {\n    var reading = i < streams.length - 1;\n    var writing = i > 0;\n    return destroyer(stream, reading, writing, function (err) {\n      if (!error) error = err;\n      if (err) destroys.forEach(call);\n      if (reading) return;\n      destroys.forEach(call);\n      callback(error);\n    });\n  });\n  return streams.reduce(pipe);\n}\nmodule.exports = pipeline;", "exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n", "'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('readable-stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n  if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n    throw new TypeError(prefix + ' must be a string or a buffer')\n  }\n}\n\nfunction HashBase (blockSize) {\n  Transform.call(this)\n\n  this._block = Buffer.allocUnsafe(blockSize)\n  this._blockSize = blockSize\n  this._blockOffset = 0\n  this._length = [0, 0, 0, 0]\n\n  this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n  var error = null\n  try {\n    this.update(chunk, encoding)\n  } catch (err) {\n    error = err\n  }\n\n  callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n  var error = null\n  try {\n    this.push(this.digest())\n  } catch (err) {\n    error = err\n  }\n\n  callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n  throwIfNotStringOrBuffer(data, 'Data')\n  if (this._finalized) throw new Error('Digest already called')\n  if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n  // consume data\n  var block = this._block\n  var offset = 0\n  while (this._blockOffset + data.length - offset >= this._blockSize) {\n    for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n    this._update()\n    this._blockOffset = 0\n  }\n  while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n  // update length\n  for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n    this._length[j] += carry\n    carry = (this._length[j] / 0x0100000000) | 0\n    if (carry > 0) this._length[j] -= 0x0100000000 * carry\n  }\n\n  return this\n}\n\nHashBase.prototype._update = function () {\n  throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n  if (this._finalized) throw new Error('Digest already called')\n  this._finalized = true\n\n  var digest = this._digest()\n  if (encoding !== undefined) digest = digest.toString(encoding)\n\n  // reset state\n  this._block.fill(0)\n  this._blockOffset = 0\n  for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n  return digest\n}\n\nHashBase.prototype._digest = function () {\n  throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n", "'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n  HashBase.call(this, 64)\n\n  // state\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n  var M = ARRAY16\n  for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n  var a = this._a\n  var b = this._b\n  var c = this._c\n  var d = this._d\n\n  a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n  d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n  c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n  b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n  a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n  d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n  c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n  b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n  a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n  d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n  c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n  b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n  a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n  d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n  c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n  b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n  a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n  d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n  c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n  b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n  a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n  d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n  c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n  b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n  a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n  d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n  c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n  b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n  a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n  d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n  c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n  b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n  a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n  d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n  c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n  b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n  a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n  d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n  c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n  b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n  a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n  d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n  c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n  b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n  a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n  d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n  c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n  b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n  a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n  d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n  c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n  b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n  a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n  d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n  c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n  b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n  a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n  d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n  c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n  b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n  a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n  d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n  c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n  b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n  this._a = (this._a + a) | 0\n  this._b = (this._b + b) | 0\n  this._c = (this._c + c) | 0\n  this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n  // create padding and handle blocks\n  this._block[this._blockOffset++] = 0x80\n  if (this._blockOffset > 56) {\n    this._block.fill(0, this._blockOffset, 64)\n    this._update()\n    this._blockOffset = 0\n  }\n\n  this._block.fill(0, this._blockOffset, 56)\n  this._block.writeUInt32LE(this._length[0], 56)\n  this._block.writeUInt32LE(this._length[1], 60)\n  this._update()\n\n  // produce result\n  var buffer = Buffer.allocUnsafe(16)\n  buffer.writeInt32LE(this._a, 0)\n  buffer.writeInt32LE(this._b, 4)\n  buffer.writeInt32LE(this._c, 8)\n  buffer.writeInt32LE(this._d, 12)\n  return buffer\n}\n\nfunction rotl (x, n) {\n  return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n  return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n  return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n  return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n  return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n", "'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n  3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n  1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n  4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n  5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n  6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n  15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n  8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n  12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n  11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n  7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n  11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n  11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n  9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n  8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n  9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n  9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n  15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n  8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n  HashBase.call(this, 64)\n\n  // state\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n  var words = ARRAY16\n  for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n  var al = this._a | 0\n  var bl = this._b | 0\n  var cl = this._c | 0\n  var dl = this._d | 0\n  var el = this._e | 0\n\n  var ar = this._a | 0\n  var br = this._b | 0\n  var cr = this._c | 0\n  var dr = this._d | 0\n  var er = this._e | 0\n\n  // computation\n  for (var i = 0; i < 80; i += 1) {\n    var tl\n    var tr\n    if (i < 16) {\n      tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n      tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n    } else if (i < 32) {\n      tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n      tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n    } else if (i < 48) {\n      tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n      tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n    } else if (i < 64) {\n      tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n      tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n    } else { // if (i<80) {\n      tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n      tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n    }\n\n    al = el\n    el = dl\n    dl = rotl(cl, 10)\n    cl = bl\n    bl = tl\n\n    ar = er\n    er = dr\n    dr = rotl(cr, 10)\n    cr = br\n    br = tr\n  }\n\n  // update state\n  var t = (this._b + cl + dr) | 0\n  this._b = (this._c + dl + er) | 0\n  this._c = (this._d + el + ar) | 0\n  this._d = (this._e + al + br) | 0\n  this._e = (this._a + bl + cr) | 0\n  this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n  // create padding and handle blocks\n  this._block[this._blockOffset++] = 0x80\n  if (this._blockOffset > 56) {\n    this._block.fill(0, this._blockOffset, 64)\n    this._update()\n    this._blockOffset = 0\n  }\n\n  this._block.fill(0, this._blockOffset, 56)\n  this._block.writeUInt32LE(this._length[0], 56)\n  this._block.writeUInt32LE(this._length[1], 60)\n  this._update()\n\n  // produce result\n  var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n  buffer.writeInt32LE(this._a, 0)\n  buffer.writeInt32LE(this._b, 4)\n  buffer.writeInt32LE(this._c, 8)\n  buffer.writeInt32LE(this._d, 12)\n  buffer.writeInt32LE(this._e, 16)\n  return buffer\n}\n\nfunction rotl (x, n) {\n  return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n", "var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n  this._block = Buffer.alloc(blockSize)\n  this._finalSize = finalSize\n  this._blockSize = blockSize\n  this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n  if (typeof data === 'string') {\n    enc = enc || 'utf8'\n    data = Buffer.from(data, enc)\n  }\n\n  var block = this._block\n  var blockSize = this._blockSize\n  var length = data.length\n  var accum = this._len\n\n  for (var offset = 0; offset < length;) {\n    var assigned = accum % blockSize\n    var remainder = Math.min(length - offset, blockSize - assigned)\n\n    for (var i = 0; i < remainder; i++) {\n      block[assigned + i] = data[offset + i]\n    }\n\n    accum += remainder\n    offset += remainder\n\n    if ((accum % blockSize) === 0) {\n      this._update(block)\n    }\n  }\n\n  this._len += length\n  return this\n}\n\nHash.prototype.digest = function (enc) {\n  var rem = this._len % this._blockSize\n\n  this._block[rem] = 0x80\n\n  // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n  // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n  this._block.fill(0, rem + 1)\n\n  if (rem >= this._finalSize) {\n    this._update(this._block)\n    this._block.fill(0)\n  }\n\n  var bits = this._len * 8\n\n  // uint32\n  if (bits <= 0xffffffff) {\n    this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n  // uint64\n  } else {\n    var lowBits = (bits & 0xffffffff) >>> 0\n    var highBits = (bits - lowBits) / 0x100000000\n\n    this._block.writeUInt32BE(highBits, this._blockSize - 8)\n    this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n  }\n\n  this._update(this._block)\n  var hash = this._hash()\n\n  return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n  throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n", "/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha\n", "/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl1 (num) {\n  return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha1\n", "/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n  0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n  0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n  0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n  0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n  0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n  0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n  0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n  0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n  0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n  0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n  0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n  0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n  0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n  0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n  0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n  this.init()\n\n  this._w = W // new Array(64)\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n  this._a = 0x6a09e667\n  this._b = 0xbb67ae85\n  this._c = 0x3c6ef372\n  this._d = 0xa54ff53a\n  this._e = 0x510e527f\n  this._f = 0x9b05688c\n  this._g = 0x1f83d9ab\n  this._h = 0x5be0cd19\n\n  return this\n}\n\nfunction ch (x, y, z) {\n  return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n  return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n  return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n  return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n  return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n  return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n  var f = this._f | 0\n  var g = this._g | 0\n  var h = this._h | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n  for (var j = 0; j < 64; ++j) {\n    var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n    var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\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\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n  this._f = (f + this._f) | 0\n  this._g = (g + this._g) | 0\n  this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(32)\n\n  H.writeInt32BE(this._a, 0)\n  H.writeInt32BE(this._b, 4)\n  H.writeInt32BE(this._c, 8)\n  H.writeInt32BE(this._d, 12)\n  H.writeInt32BE(this._e, 16)\n  H.writeInt32BE(this._f, 20)\n  H.writeInt32BE(this._g, 24)\n  H.writeInt32BE(this._h, 28)\n\n  return H\n}\n\nmodule.exports = Sha256\n", "/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n  this.init()\n\n  this._w = W // new Array(64)\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n  this._a = 0xc1059ed8\n  this._b = 0x367cd507\n  this._c = 0x3070dd17\n  this._d = 0xf70e5939\n  this._e = 0xffc00b31\n  this._f = 0x68581511\n  this._g = 0x64f98fa7\n  this._h = 0xbefa4fa4\n\n  return this\n}\n\nSha224.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(28)\n\n  H.writeInt32BE(this._a, 0)\n  H.writeInt32BE(this._b, 4)\n  H.writeInt32BE(this._c, 8)\n  H.writeInt32BE(this._d, 12)\n  H.writeInt32BE(this._e, 16)\n  H.writeInt32BE(this._f, 20)\n  H.writeInt32BE(this._g, 24)\n\n  return H\n}\n\nmodule.exports = Sha224\n", "var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n  this._ah = 0x6a09e667\n  this._bh = 0xbb67ae85\n  this._ch = 0x3c6ef372\n  this._dh = 0xa54ff53a\n  this._eh = 0x510e527f\n  this._fh = 0x9b05688c\n  this._gh = 0x1f83d9ab\n  this._hh = 0x5be0cd19\n\n  this._al = 0xf3bcc908\n  this._bl = 0x84caa73b\n  this._cl = 0xfe94f82b\n  this._dl = 0x5f1d36f1\n  this._el = 0xade682d1\n  this._fl = 0x2b3e6c1f\n  this._gl = 0xfb41bd6b\n  this._hl = 0x137e2179\n\n  return this\n}\n\nfunction Ch (x, y, z) {\n  return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n  return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n  return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n  return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n  return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n  var W = this._w\n\n  var ah = this._ah | 0\n  var bh = this._bh | 0\n  var ch = this._ch | 0\n  var dh = this._dh | 0\n  var eh = this._eh | 0\n  var fh = this._fh | 0\n  var gh = this._gh | 0\n  var hh = this._hh | 0\n\n  var al = this._al | 0\n  var bl = this._bl | 0\n  var cl = this._cl | 0\n  var dl = this._dl | 0\n  var el = this._el | 0\n  var fl = this._fl | 0\n  var gl = this._gl | 0\n  var hl = this._hl | 0\n\n  for (var i = 0; i < 32; i += 2) {\n    W[i] = M.readInt32BE(i * 4)\n    W[i + 1] = M.readInt32BE(i * 4 + 4)\n  }\n  for (; i < 160; i += 2) {\n    var xh = W[i - 15 * 2]\n    var xl = W[i - 15 * 2 + 1]\n    var gamma0 = Gamma0(xh, xl)\n    var gamma0l = Gamma0l(xl, xh)\n\n    xh = W[i - 2 * 2]\n    xl = W[i - 2 * 2 + 1]\n    var gamma1 = Gamma1(xh, xl)\n    var gamma1l = Gamma1l(xl, xh)\n\n    // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n    var Wi7h = W[i - 7 * 2]\n    var Wi7l = W[i - 7 * 2 + 1]\n\n    var Wi16h = W[i - 16 * 2]\n    var Wi16l = W[i - 16 * 2 + 1]\n\n    var Wil = (gamma0l + Wi7l) | 0\n    var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n    Wil = (Wil + gamma1l) | 0\n    Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n    Wil = (Wil + Wi16l) | 0\n    Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n    W[i] = Wih\n    W[i + 1] = Wil\n  }\n\n  for (var j = 0; j < 160; j += 2) {\n    Wih = W[j]\n    Wil = W[j + 1]\n\n    var majh = maj(ah, bh, ch)\n    var majl = maj(al, bl, cl)\n\n    var sigma0h = sigma0(ah, al)\n    var sigma0l = sigma0(al, ah)\n    var sigma1h = sigma1(eh, el)\n    var sigma1l = sigma1(el, eh)\n\n    // t1 = h + sigma1 + ch + K[j] + W[j]\n    var Kih = K[j]\n    var Kil = K[j + 1]\n\n    var chh = Ch(eh, fh, gh)\n    var chl = Ch(el, fl, gl)\n\n    var t1l = (hl + sigma1l) | 0\n    var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n    t1l = (t1l + chl) | 0\n    t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n    t1l = (t1l + Kil) | 0\n    t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n    t1l = (t1l + Wil) | 0\n    t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n    // t2 = sigma0 + maj\n    var t2l = (sigma0l + majl) | 0\n    var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n    hh = gh\n    hl = gl\n    gh = fh\n    gl = fl\n    fh = eh\n    fl = el\n    el = (dl + t1l) | 0\n    eh = (dh + t1h + getCarry(el, dl)) | 0\n    dh = ch\n    dl = cl\n    ch = bh\n    cl = bl\n    bh = ah\n    bl = al\n    al = (t1l + t2l) | 0\n    ah = (t1h + t2h + getCarry(al, t1l)) | 0\n  }\n\n  this._al = (this._al + al) | 0\n  this._bl = (this._bl + bl) | 0\n  this._cl = (this._cl + cl) | 0\n  this._dl = (this._dl + dl) | 0\n  this._el = (this._el + el) | 0\n  this._fl = (this._fl + fl) | 0\n  this._gl = (this._gl + gl) | 0\n  this._hl = (this._hl + hl) | 0\n\n  this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n  this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n  this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n  this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n  this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n  this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n  this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n  this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(64)\n\n  function writeInt64BE (h, l, offset) {\n    H.writeInt32BE(h, offset)\n    H.writeInt32BE(l, offset + 4)\n  }\n\n  writeInt64BE(this._ah, this._al, 0)\n  writeInt64BE(this._bh, this._bl, 8)\n  writeInt64BE(this._ch, this._cl, 16)\n  writeInt64BE(this._dh, this._dl, 24)\n  writeInt64BE(this._eh, this._el, 32)\n  writeInt64BE(this._fh, this._fl, 40)\n  writeInt64BE(this._gh, this._gl, 48)\n  writeInt64BE(this._hh, this._hl, 56)\n\n  return H\n}\n\nmodule.exports = Sha512\n", "var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n  this._ah = 0xcbbb9d5d\n  this._bh = 0x629a292a\n  this._ch = 0x9159015a\n  this._dh = 0x152fecd8\n  this._eh = 0x67332667\n  this._fh = 0x8eb44a87\n  this._gh = 0xdb0c2e0d\n  this._hh = 0x47b5481d\n\n  this._al = 0xc1059ed8\n  this._bl = 0x367cd507\n  this._cl = 0x3070dd17\n  this._dl = 0xf70e5939\n  this._el = 0xffc00b31\n  this._fl = 0x68581511\n  this._gl = 0x64f98fa7\n  this._hl = 0xbefa4fa4\n\n  return this\n}\n\nSha384.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(48)\n\n  function writeInt64BE (h, l, offset) {\n    H.writeInt32BE(h, offset)\n    H.writeInt32BE(l, offset + 4)\n  }\n\n  writeInt64BE(this._ah, this._al, 0)\n  writeInt64BE(this._bh, this._bl, 8)\n  writeInt64BE(this._ch, this._cl, 16)\n  writeInt64BE(this._dh, this._dl, 24)\n  writeInt64BE(this._eh, this._el, 32)\n  writeInt64BE(this._fh, this._fl, 40)\n\n  return H\n}\n\nmodule.exports = Sha384\n", "var exports = module.exports = function SHA (algorithm) {\n  algorithm = algorithm.toLowerCase()\n\n  var Algorithm = exports[algorithm]\n  if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n  return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n", "var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n  Transform.call(this)\n  this.hashMode = typeof hashMode === 'string'\n  if (this.hashMode) {\n    this[hashMode] = this._finalOrDigest\n  } else {\n    this.final = this._finalOrDigest\n  }\n  if (this._final) {\n    this.__final = this._final\n    this._final = null\n  }\n  this._decoder = null\n  this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n  if (typeof data === 'string') {\n    data = Buffer.from(data, inputEnc)\n  }\n\n  var outData = this._update(data)\n  if (this.hashMode) return this\n\n  if (outputEnc) {\n    outData = this._toString(outData, outputEnc)\n  }\n\n  return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n  throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n  throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n  throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n  var err\n  try {\n    if (this.hashMode) {\n      this._update(data)\n    } else {\n      this.push(this._update(data))\n    }\n  } catch (e) {\n    err = e\n  } finally {\n    next(err)\n  }\n}\nCipherBase.prototype._flush = function (done) {\n  var err\n  try {\n    this.push(this.__final())\n  } catch (e) {\n    err = e\n  }\n\n  done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n  var outData = this.__final() || Buffer.alloc(0)\n  if (outputEnc) {\n    outData = this._toString(outData, outputEnc, true)\n  }\n  return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n  if (!this._decoder) {\n    this._decoder = new StringDecoder(enc)\n    this._encoding = enc\n  }\n\n  if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n  var out = this._decoder.write(value)\n  if (fin) {\n    out += this._decoder.end()\n  }\n\n  return out\n}\n\nmodule.exports = CipherBase\n", "'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n  Base.call(this, 'digest')\n\n  this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n  this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n  return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n  alg = alg.toLowerCase()\n  if (alg === 'md5') return new MD5()\n  if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n  return new Hash(sha(alg))\n}\n", "'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n  Base.call(this, 'digest')\n  if (typeof key === 'string') {\n    key = Buffer.from(key)\n  }\n\n  this._alg = alg\n  this._key = key\n\n  if (key.length > blocksize) {\n    key = alg(key)\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n  var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n\n  this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n  this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n  var h = this._alg(Buffer.concat(this._hash))\n  return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n", "var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n  return new MD5().update(buffer).digest()\n}\n", "'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n  Base.call(this, 'digest')\n  if (typeof key === 'string') {\n    key = Buffer.from(key)\n  }\n\n  var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n  this._alg = alg\n  this._key = key\n  if (key.length > blocksize) {\n    var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n    key = hash.update(key).digest()\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n  var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n  this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n  this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n  this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n  var h = this._hash.digest()\n  var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n  return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n  alg = alg.toLowerCase()\n  if (alg === 'rmd160' || alg === 'ripemd160') {\n    return new Hmac('rmd160', key)\n  }\n  if (alg === 'md5') {\n    return new Legacy(md5, key)\n  }\n  return new Hmac(alg, key)\n}\n", "{\n  \"sha224WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"302d300d06096086480165030402040500041c\"\n  },\n  \"RSA-SHA224\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"302d300d06096086480165030402040500041c\"\n  },\n  \"sha256WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"3031300d060960864801650304020105000420\"\n  },\n  \"RSA-SHA256\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"3031300d060960864801650304020105000420\"\n  },\n  \"sha384WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"3041300d060960864801650304020205000430\"\n  },\n  \"RSA-SHA384\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"3041300d060960864801650304020205000430\"\n  },\n  \"sha512WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"3051300d060960864801650304020305000440\"\n  },\n  \"RSA-SHA512\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"3051300d060960864801650304020305000440\"\n  },\n  \"RSA-SHA1\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"3021300906052b0e03021a05000414\"\n  },\n  \"ecdsa-with-SHA1\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"sha256\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"sha224\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"sha384\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"sha512\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA1\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA224\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA224\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA256\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA256\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA384\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA384\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA512\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA512\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-RIPEMD160\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"\"\n  },\n  \"ripemd160WithRSA\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"3021300906052b2403020105000414\"\n  },\n  \"RSA-RIPEMD160\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"3021300906052b2403020105000414\"\n  },\n  \"md5WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"md5\",\n    \"id\": \"3020300c06082a864886f70d020505000410\"\n  },\n  \"RSA-MD5\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"md5\",\n    \"id\": \"3020300c06082a864886f70d020505000410\"\n  }\n}\n", "module.exports = require('./browser/algorithms.json')\n", "var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\n  if (typeof iterations !== 'number') {\n    throw new TypeError('Iterations not a number')\n  }\n\n  if (iterations < 0) {\n    throw new TypeError('Bad iterations')\n  }\n\n  if (typeof keylen !== 'number') {\n    throw new TypeError('Key length not a number')\n  }\n\n  if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n    throw new TypeError('Bad key length')\n  }\n}\n", "var defaultEncoding\n/* istanbul ignore next */\nif (global.process && global.process.browser) {\n  defaultEncoding = 'utf-8'\n} else if (global.process && global.process.version) {\n  var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n  defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n  defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n", "var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n  if (Buffer.isBuffer(thing)) {\n    return thing\n  } else if (typeof thing === 'string') {\n    return Buffer.from(thing, encoding)\n  } else if (ArrayBuffer.isView(thing)) {\n    return Buffer.from(thing.buffer)\n  } else {\n    throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n  }\n}\n", "var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n  md5: 16,\n  sha1: 20,\n  sha224: 28,\n  sha256: 32,\n  sha384: 48,\n  sha512: 64,\n  rmd160: 20,\n  ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n  var hash = getDigest(alg)\n  var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n  if (key.length > blocksize) {\n    key = hash(key)\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n  var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n\n  var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n  ipad.copy(ipad1, 0, 0, blocksize)\n  this.ipad1 = ipad1\n  this.ipad2 = ipad\n  this.opad = opad\n  this.alg = alg\n  this.blocksize = blocksize\n  this.hash = hash\n  this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n  data.copy(ipad, this.blocksize)\n  var h = this.hash(ipad)\n  h.copy(this.opad, this.blocksize)\n  return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n  function shaFunc (data) {\n    return sha(alg).update(data).digest()\n  }\n  function rmd160Func (data) {\n    return new RIPEMD160().update(data).digest()\n  }\n\n  if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n  if (alg === 'md5') return md5\n  return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n  checkParameters(iterations, keylen)\n  password = toBuffer(password, defaultEncoding, 'Password')\n  salt = toBuffer(salt, defaultEncoding, 'Salt')\n\n  digest = digest || 'sha1'\n\n  var hmac = new Hmac(digest, password, salt.length)\n\n  var DK = Buffer.allocUnsafe(keylen)\n  var block1 = Buffer.allocUnsafe(salt.length + 4)\n  salt.copy(block1, 0, 0, salt.length)\n\n  var destPos = 0\n  var hLen = sizes[digest]\n  var l = Math.ceil(keylen / hLen)\n\n  for (var i = 1; i <= l; i++) {\n    block1.writeUInt32BE(i, salt.length)\n\n    var T = hmac.run(block1, hmac.ipad1)\n    var U = T\n\n    for (var j = 1; j < iterations; j++) {\n      U = hmac.run(U, hmac.ipad2)\n      for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n    }\n\n    T.copy(DK, destPos)\n    destPos += hLen\n  }\n\n  return DK\n}\n\nmodule.exports = pbkdf2\n", "var Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar toBuffer = require('./to-buffer')\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n  sha: 'SHA-1',\n  'sha-1': 'SHA-1',\n  sha1: 'SHA-1',\n  sha256: 'SHA-256',\n  'sha-256': 'SHA-256',\n  sha384: 'SHA-384',\n  'sha-384': 'SHA-384',\n  'sha-512': 'SHA-512',\n  sha512: 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n  if (global.process && !global.process.browser) {\n    return Promise.resolve(false)\n  }\n  if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n    return Promise.resolve(false)\n  }\n  if (checks[algo] !== undefined) {\n    return checks[algo]\n  }\n  ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n  var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n    .then(function () {\n      return true\n    }).catch(function () {\n      return false\n    })\n  checks[algo] = prom\n  return prom\n}\nvar nextTick\nfunction getNextTick () {\n  if (nextTick) {\n    return nextTick\n  }\n  if (global.process && global.process.nextTick) {\n    nextTick = global.process.nextTick\n  } else if (global.queueMicrotask) {\n    nextTick = global.queueMicrotask\n  } else if (global.setImmediate) {\n    nextTick = global.setImmediate\n  } else {\n    nextTick = global.setTimeout\n  }\n  return nextTick\n}\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n  return subtle.importKey(\n    'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']\n  ).then(function (key) {\n    return subtle.deriveBits({\n      name: 'PBKDF2',\n      salt: salt,\n      iterations: iterations,\n      hash: {\n        name: algo\n      }\n    }, key, length << 3)\n  }).then(function (res) {\n    return Buffer.from(res)\n  })\n}\n\nfunction resolvePromise (promise, callback) {\n  promise.then(function (out) {\n    getNextTick()(function () {\n      callback(null, out)\n    })\n  }, function (e) {\n    getNextTick()(function () {\n      callback(e)\n    })\n  })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n  if (typeof digest === 'function') {\n    callback = digest\n    digest = undefined\n  }\n\n  digest = digest || 'sha1'\n  var algo = toBrowser[digest.toLowerCase()]\n\n  if (!algo || typeof global.Promise !== 'function') {\n    getNextTick()(function () {\n      var out\n      try {\n        out = sync(password, salt, iterations, keylen, digest)\n      } catch (e) {\n        return callback(e)\n      }\n      callback(null, out)\n    })\n    return\n  }\n\n  checkParameters(iterations, keylen)\n  password = toBuffer(password, defaultEncoding, 'Password')\n  salt = toBuffer(salt, defaultEncoding, 'Salt')\n  if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n\n  resolvePromise(checkNative(algo).then(function (resp) {\n    if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n    return sync(password, salt, iterations, keylen, digest)\n  }), callback)\n}\n", "exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n", "'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n  var res =  (bytes[0 + off] << 24) |\n             (bytes[1 + off] << 16) |\n             (bytes[2 + off] << 8) |\n             bytes[3 + off];\n  return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n  bytes[0 + off] = value >>> 24;\n  bytes[1 + off] = (value >>> 16) & 0xff;\n  bytes[2 + off] = (value >>> 8) & 0xff;\n  bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inR >>> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= (inR >>> (j + i)) & 1;\n    }\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 0; i < 4; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outL <<= 1;\n      outL |= (inR >>> (j + i)) & 1;\n      outL <<= 1;\n      outL |= (inL >>> (j + i)) & 1;\n    }\n  }\n  for (var i = 4; i < 8; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outR <<= 1;\n      outR |= (inR >>> (j + i)) & 1;\n      outR <<= 1;\n      outR |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  // 7, 15, 23, 31, 39, 47, 55, 63\n  // 6, 14, 22, 30, 39, 47, 55, 63\n  // 5, 13, 21, 29, 39, 47, 55, 63\n  // 4, 12, 20, 28\n  for (var i = 7; i >= 5; i--) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inR >> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inL >> (j + i)) & 1;\n    }\n  }\n  for (var j = 0; j <= 24; j += 8) {\n    outL <<= 1;\n    outL |= (inR >> (j + i)) & 1;\n  }\n\n  // 1, 9, 17, 25, 33, 41, 49, 57\n  // 2, 10, 18, 26, 34, 42, 50, 58\n  // 3, 11, 19, 27, 35, 43, 51, 59\n  // 36, 44, 52, 60\n  for (var i = 1; i <= 3; i++) {\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= (inR >> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= (inL >> (j + i)) & 1;\n    }\n  }\n  for (var j = 0; j <= 24; j += 8) {\n    outR <<= 1;\n    outR |= (inL >> (j + i)) & 1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n  return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n  // inL => outL\n  14, 11, 17, 4, 27, 23, 25, 0,\n  13, 22, 7, 18, 5, 9, 16, 24,\n  2, 20, 12, 21, 1, 8, 15, 26,\n\n  // inR => outR\n  15, 4, 25, 19, 9, 1, 26, 16,\n  5, 11, 23, 8, 12, 7, 17, 0,\n  22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  var len = pc2table.length >>> 1;\n  for (var i = 0; i < len; i++) {\n    outL <<= 1;\n    outL |= (inL >>> pc2table[i]) & 0x1;\n  }\n  for (var i = len; i < pc2table.length; i++) {\n    outR <<= 1;\n    outR |= (inR >>> pc2table[i]) & 0x1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  outL = ((r & 1) << 5) | (r >>> 27);\n  for (var i = 23; i >= 15; i -= 4) {\n    outL <<= 6;\n    outL |= (r >>> i) & 0x3f;\n  }\n  for (var i = 11; i >= 3; i -= 4) {\n    outR |= (r >>> i) & 0x3f;\n    outR <<= 6;\n  }\n  outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n  14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n  3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n  4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n  15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n  15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n  9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n  0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n  5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n  10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n  1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n  13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n  11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n  7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n  1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n  10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n  15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n  2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n  8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n  4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n  15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n  12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n  0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n  9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n  7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n  4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n  3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n  1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n  10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n  13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n  10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n  7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n  0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n  var out = 0;\n  for (var i = 0; i < 4; i++) {\n    var b = (inL >>> (18 - i * 6)) & 0x3f;\n    var sb = sTable[i * 0x40 + b];\n\n    out <<= 4;\n    out |= sb;\n  }\n  for (var i = 0; i < 4; i++) {\n    var b = (inR >>> (18 - i * 6)) & 0x3f;\n    var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n    out <<= 4;\n    out |= sb;\n  }\n  return out >>> 0;\n};\n\nvar permuteTable = [\n  16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n  30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n  var out = 0;\n  for (var i = 0; i < permuteTable.length; i++) {\n    out <<= 1;\n    out |= (num >>> permuteTable[i]) & 0x1;\n  }\n  return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n  var str = num.toString(2);\n  while (str.length < size)\n    str = '0' + str;\n\n  var out = [];\n  for (var i = 0; i < size; i += group)\n    out.push(str.slice(i, i + group));\n  return out.join(' ');\n};\n", "'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n  this.options = options;\n\n  this.type = this.options.type;\n  this.blockSize = 8;\n  this._init();\n\n  this.buffer = new Array(this.blockSize);\n  this.bufferOff = 0;\n  this.padding = options.padding !== false\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n  // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n  if (data.length === 0)\n    return [];\n\n  if (this.type === 'decrypt')\n    return this._updateDecrypt(data);\n  else\n    return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n  // Append data to buffer\n  var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n  for (var i = 0; i < min; i++)\n    this.buffer[this.bufferOff + i] = data[off + i];\n  this.bufferOff += min;\n\n  // Shift next\n  return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n  this._update(this.buffer, 0, out, off);\n  this.bufferOff = 0;\n  return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n\n  var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n  var out = new Array(count * this.blockSize);\n\n  if (this.bufferOff !== 0) {\n    inputOff += this._buffer(data, inputOff);\n\n    if (this.bufferOff === this.buffer.length)\n      outputOff += this._flushBuffer(out, outputOff);\n  }\n\n  // Write blocks\n  var max = data.length - ((data.length - inputOff) % this.blockSize);\n  for (; inputOff < max; inputOff += this.blockSize) {\n    this._update(data, inputOff, out, outputOff);\n    outputOff += this.blockSize;\n  }\n\n  // Queue rest\n  for (; inputOff < data.length; inputOff++, this.bufferOff++)\n    this.buffer[this.bufferOff] = data[inputOff];\n\n  return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n\n  var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n  var out = new Array(count * this.blockSize);\n\n  // TODO(indutny): optimize it, this is far from optimal\n  for (; count > 0; count--) {\n    inputOff += this._buffer(data, inputOff);\n    outputOff += this._flushBuffer(out, outputOff);\n  }\n\n  // Buffer rest of the input\n  inputOff += this._buffer(data, inputOff);\n\n  return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n  var first;\n  if (buffer)\n    first = this.update(buffer);\n\n  var last;\n  if (this.type === 'encrypt')\n    last = this._finalEncrypt();\n  else\n    last = this._finalDecrypt();\n\n  if (first)\n    return first.concat(last);\n  else\n    return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n  if (off === 0)\n    return false;\n\n  while (off < buffer.length)\n    buffer[off++] = 0;\n\n  return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n  if (!this._pad(this.buffer, this.bufferOff))\n    return [];\n\n  var out = new Array(this.blockSize);\n  this._update(this.buffer, 0, out, 0);\n  return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n  return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n  assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n  var out = new Array(this.blockSize);\n  this._flushBuffer(out, 0);\n\n  return this._unpad(out);\n};\n", "'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n  this.tmp = new Array(2);\n  this.keys = null;\n}\n\nfunction DES(options) {\n  Cipher.call(this, options);\n\n  var state = new DESState();\n  this._desState = state;\n\n  this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n  return new DES(options);\n};\n\nvar shiftTable = [\n  1, 1, 2, 2, 2, 2, 2, 2,\n  1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n  state.keys = new Array(16 * 2);\n\n  assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n  var kL = utils.readUInt32BE(key, 0);\n  var kR = utils.readUInt32BE(key, 4);\n\n  utils.pc1(kL, kR, state.tmp, 0);\n  kL = state.tmp[0];\n  kR = state.tmp[1];\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var shift = shiftTable[i >>> 1];\n    kL = utils.r28shl(kL, shift);\n    kR = utils.r28shl(kR, shift);\n    utils.pc2(kL, kR, state.keys, i);\n  }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._desState;\n\n  var l = utils.readUInt32BE(inp, inOff);\n  var r = utils.readUInt32BE(inp, inOff + 4);\n\n  // Initial Permutation\n  utils.ip(l, r, state.tmp, 0);\n  l = state.tmp[0];\n  r = state.tmp[1];\n\n  if (this.type === 'encrypt')\n    this._encrypt(state, l, r, state.tmp, 0);\n  else\n    this._decrypt(state, l, r, state.tmp, 0);\n\n  l = state.tmp[0];\n  r = state.tmp[1];\n\n  utils.writeUInt32BE(out, l, outOff);\n  utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n  if (this.padding === false) {\n    return false;\n  }\n\n  var value = buffer.length - off;\n  for (var i = off; i < buffer.length; i++)\n    buffer[i] = value;\n\n  return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n  if (this.padding === false) {\n    return buffer;\n  }\n\n  var pad = buffer[buffer.length - 1];\n  for (var i = buffer.length - pad; i < buffer.length; i++)\n    assert.equal(buffer[i], pad);\n\n  return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n  var l = lStart;\n  var r = rStart;\n\n  // Apply f() x16 times\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1];\n\n    // f(r, k)\n    utils.expand(r, state.tmp, 0);\n\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n\n    var t = r;\n    r = (l ^ f) >>> 0;\n    l = t;\n  }\n\n  // Reverse Initial Permutation\n  utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n  var l = rStart;\n  var r = lStart;\n\n  // Apply f() x16 times\n  for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1];\n\n    // f(r, k)\n    utils.expand(l, state.tmp, 0);\n\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n\n    var t = l;\n    l = (r ^ f) >>> 0;\n    r = t;\n  }\n\n  // Reverse Initial Permutation\n  utils.rip(l, r, out, off);\n};\n", "'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n  assert.equal(iv.length, 8, 'Invalid IV length');\n\n  this.iv = new Array(8);\n  for (var i = 0; i < this.iv.length; i++)\n    this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n  function CBC(options) {\n    Base.call(this, options);\n    this._cbcInit();\n  }\n  inherits(CBC, Base);\n\n  var keys = Object.keys(proto);\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    CBC.prototype[key] = proto[key];\n  }\n\n  CBC.create = function create(options) {\n    return new CBC(options);\n  };\n\n  return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n  var state = new CBCState(this.options.iv);\n  this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n  var state = this._cbcState;\n  var superProto = this.constructor.super_.prototype;\n\n  var iv = state.iv;\n  if (this.type === 'encrypt') {\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] ^= inp[inOff + i];\n\n    superProto._update.call(this, iv, 0, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] = out[outOff + i];\n  } else {\n    superProto._update.call(this, inp, inOff, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++)\n      out[outOff + i] ^= iv[i];\n\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] = inp[inOff + i];\n  }\n};\n", "'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./des');\n\nfunction EDEState(type, key) {\n  assert.equal(key.length, 24, 'Invalid key length');\n\n  var k1 = key.slice(0, 8);\n  var k2 = key.slice(8, 16);\n  var k3 = key.slice(16, 24);\n\n  if (type === 'encrypt') {\n    this.ciphers = [\n      DES.create({ type: 'encrypt', key: k1 }),\n      DES.create({ type: 'decrypt', key: k2 }),\n      DES.create({ type: 'encrypt', key: k3 })\n    ];\n  } else {\n    this.ciphers = [\n      DES.create({ type: 'decrypt', key: k3 }),\n      DES.create({ type: 'encrypt', key: k2 }),\n      DES.create({ type: 'decrypt', key: k1 })\n    ];\n  }\n}\n\nfunction EDE(options) {\n  Cipher.call(this, options);\n\n  var state = new EDEState(this.type, this.options.key);\n  this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n  return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._edeState;\n\n  state.ciphers[0]._update(inp, inOff, out, outOff);\n  state.ciphers[1]._update(out, outOff, out, outOff);\n  state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n", "'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n", "var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n  'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede3': des.EDE,\n  'des-ede-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede': des.EDE,\n  'des-cbc': des.CBC.instantiate(des.DES),\n  'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n  CipherBase.call(this)\n  var modeName = opts.mode.toLowerCase()\n  var mode = modes[modeName]\n  var type\n  if (opts.decrypt) {\n    type = 'decrypt'\n  } else {\n    type = 'encrypt'\n  }\n  var key = opts.key\n  if (!Buffer.isBuffer(key)) {\n    key = Buffer.from(key)\n  }\n  if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n    key = Buffer.concat([key, key.slice(0, 8)])\n  }\n  var iv = opts.iv\n  if (!Buffer.isBuffer(iv)) {\n    iv = Buffer.from(iv)\n  }\n  this._des = mode.create({\n    key: key,\n    iv: iv,\n    type: type\n  })\n}\nDES.prototype._update = function (data) {\n  return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n  return Buffer.from(this._des.final())\n}\n", "exports.encrypt = function (self, block) {\n  return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n  return self._cipher.decryptBlock(block)\n}\n", "module.exports = function xor (a, b) {\n  var length = Math.min(a.length, b.length)\n  var buffer = new Buffer(length)\n\n  for (var i = 0; i < length; ++i) {\n    buffer[i] = a[i] ^ b[i]\n  }\n\n  return buffer\n}\n", "var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n  var data = xor(block, self._prev)\n\n  self._prev = self._cipher.encryptBlock(data)\n  return self._prev\n}\n\nexports.decrypt = function (self, block) {\n  var pad = self._prev\n\n  self._prev = block\n  var out = self._cipher.decryptBlock(block)\n\n  return xor(out, pad)\n}\n", "var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n  var len = data.length\n  var out = xor(data, self._cache)\n  self._cache = self._cache.slice(len)\n  self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n  return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n  var out = Buffer.allocUnsafe(0)\n  var len\n\n  while (data.length) {\n    if (self._cache.length === 0) {\n      self._cache = self._cipher.encryptBlock(self._prev)\n      self._prev = Buffer.allocUnsafe(0)\n    }\n\n    if (self._cache.length <= data.length) {\n      len = self._cache.length\n      out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n      data = data.slice(len)\n    } else {\n      out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n      break\n    }\n  }\n\n  return out\n}\n", "var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n  var pad = self._cipher.encryptBlock(self._prev)\n  var out = pad[0] ^ byteParam\n\n  self._prev = Buffer.concat([\n    self._prev.slice(1),\n    Buffer.from([decrypt ? byteParam : out])\n  ])\n\n  return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length\n  var out = Buffer.allocUnsafe(len)\n  var i = -1\n\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt)\n  }\n\n  return out\n}\n", "var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n  var pad\n  var i = -1\n  var len = 8\n  var out = 0\n  var bit, value\n  while (++i < len) {\n    pad = self._cipher.encryptBlock(self._prev)\n    bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n    value = pad[0] ^ bit\n    out += ((value & 0x80) >> (i % 8))\n    self._prev = shiftIn(self._prev, decrypt ? bit : value)\n  }\n  return out\n}\n\nfunction shiftIn (buffer, value) {\n  var len = buffer.length\n  var i = -1\n  var out = Buffer.allocUnsafe(buffer.length)\n  buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n  while (++i < len) {\n    out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n  }\n\n  return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length\n  var out = Buffer.allocUnsafe(len)\n  var i = -1\n\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt)\n  }\n\n  return out\n}\n", "var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n  self._prev = self._cipher.encryptBlock(self._prev)\n  return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n  while (self._cache.length < chunk.length) {\n    self._cache = Buffer.concat([self._cache, getBlock(self)])\n  }\n\n  var pad = self._cache.slice(0, chunk.length)\n  self._cache = self._cache.slice(chunk.length)\n  return xor(chunk, pad)\n}\n", "function incr32 (iv) {\n  var len = iv.length\n  var item\n  while (len--) {\n    item = iv.readUInt8(len)\n    if (item === 255) {\n      iv.writeUInt8(0, len)\n    } else {\n      item++\n      iv.writeUInt8(item, len)\n      break\n    }\n  }\n}\nmodule.exports = incr32\n", "var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n  var out = self._cipher.encryptBlockRaw(self._prev)\n  incr32(self._prev)\n  return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n  var chunkNum = Math.ceil(chunk.length / blockSize)\n  var start = self._cache.length\n  self._cache = Buffer.concat([\n    self._cache,\n    Buffer.allocUnsafe(chunkNum * blockSize)\n  ])\n  for (var i = 0; i < chunkNum; i++) {\n    var out = getBlock(self)\n    var offset = start + i * blockSize\n    self._cache.writeUInt32BE(out[0], offset + 0)\n    self._cache.writeUInt32BE(out[1], offset + 4)\n    self._cache.writeUInt32BE(out[2], offset + 8)\n    self._cache.writeUInt32BE(out[3], offset + 12)\n  }\n  var pad = self._cache.slice(0, chunk.length)\n  self._cache = self._cache.slice(chunk.length)\n  return xor(chunk, pad)\n}\n", "{\n  \"aes-128-ecb\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 0,\n    \"mode\": \"ECB\",\n    \"type\": \"block\"\n  },\n  \"aes-192-ecb\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 0,\n    \"mode\": \"ECB\",\n    \"type\": \"block\"\n  },\n  \"aes-256-ecb\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 0,\n    \"mode\": \"ECB\",\n    \"type\": \"block\"\n  },\n  \"aes-128-cbc\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes-192-cbc\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes-256-cbc\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes128\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes192\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes256\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes-128-cfb\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-cfb\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-cfb\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-cfb8\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CFB8\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-cfb8\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CFB8\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-cfb8\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CFB8\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-cfb1\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CFB1\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-cfb1\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CFB1\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-cfb1\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CFB1\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-ofb\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"OFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-ofb\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"OFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-ofb\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"OFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-ctr\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CTR\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-ctr\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CTR\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-ctr\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CTR\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-gcm\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 12,\n    \"mode\": \"GCM\",\n    \"type\": \"auth\"\n  },\n  \"aes-192-gcm\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 12,\n    \"mode\": \"GCM\",\n    \"type\": \"auth\"\n  },\n  \"aes-256-gcm\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 12,\n    \"mode\": \"GCM\",\n    \"type\": \"auth\"\n  }\n}\n", "var modeModules = {\n  ECB: require('./ecb'),\n  CBC: require('./cbc'),\n  CFB: require('./cfb'),\n  CFB8: require('./cfb8'),\n  CFB1: require('./cfb1'),\n  OFB: require('./ofb'),\n  CTR: require('./ctr'),\n  GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n  modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n", "// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n  if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n  var len = (buf.length / 4) | 0\n  var out = new Array(len)\n\n  for (var i = 0; i < len; i++) {\n    out[i] = buf.readUInt32BE(i * 4)\n  }\n\n  return out\n}\n\nfunction scrubVec (v) {\n  for (var i = 0; i < v.length; v++) {\n    v[i] = 0\n  }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n  var SUB_MIX0 = SUB_MIX[0]\n  var SUB_MIX1 = SUB_MIX[1]\n  var SUB_MIX2 = SUB_MIX[2]\n  var SUB_MIX3 = SUB_MIX[3]\n\n  var s0 = M[0] ^ keySchedule[0]\n  var s1 = M[1] ^ keySchedule[1]\n  var s2 = M[2] ^ keySchedule[2]\n  var s3 = M[3] ^ keySchedule[3]\n  var t0, t1, t2, t3\n  var ksRow = 4\n\n  for (var round = 1; round < nRounds; round++) {\n    t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n    t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n    t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n    t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n    s0 = t0\n    s1 = t1\n    s2 = t2\n    s3 = t3\n  }\n\n  t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n  t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n  t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n  t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n  t0 = t0 >>> 0\n  t1 = t1 >>> 0\n  t2 = t2 >>> 0\n  t3 = t3 >>> 0\n\n  return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n  // Compute double table\n  var d = new Array(256)\n  for (var j = 0; j < 256; j++) {\n    if (j < 128) {\n      d[j] = j << 1\n    } else {\n      d[j] = (j << 1) ^ 0x11b\n    }\n  }\n\n  var SBOX = []\n  var INV_SBOX = []\n  var SUB_MIX = [[], [], [], []]\n  var INV_SUB_MIX = [[], [], [], []]\n\n  // Walk GF(2^8)\n  var x = 0\n  var xi = 0\n  for (var i = 0; i < 256; ++i) {\n    // Compute sbox\n    var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n    sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n    SBOX[x] = sx\n    INV_SBOX[sx] = x\n\n    // Compute multiplication\n    var x2 = d[x]\n    var x4 = d[x2]\n    var x8 = d[x4]\n\n    // Compute sub bytes, mix columns tables\n    var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n    SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n    SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n    SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n    SUB_MIX[3][x] = t\n\n    // Compute inv sub bytes, inv mix columns tables\n    t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n    INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n    INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n    INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n    INV_SUB_MIX[3][sx] = t\n\n    if (x === 0) {\n      x = xi = 1\n    } else {\n      x = x2 ^ d[d[d[x8 ^ x2]]]\n      xi ^= d[d[xi]]\n    }\n  }\n\n  return {\n    SBOX: SBOX,\n    INV_SBOX: INV_SBOX,\n    SUB_MIX: SUB_MIX,\n    INV_SUB_MIX: INV_SUB_MIX\n  }\n})()\n\nfunction AES (key) {\n  this._key = asUInt32Array(key)\n  this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n  var keyWords = this._key\n  var keySize = keyWords.length\n  var nRounds = keySize + 6\n  var ksRows = (nRounds + 1) * 4\n\n  var keySchedule = []\n  for (var k = 0; k < keySize; k++) {\n    keySchedule[k] = keyWords[k]\n  }\n\n  for (k = keySize; k < ksRows; k++) {\n    var t = keySchedule[k - 1]\n\n    if (k % keySize === 0) {\n      t = (t << 8) | (t >>> 24)\n      t =\n        (G.SBOX[t >>> 24] << 24) |\n        (G.SBOX[(t >>> 16) & 0xff] << 16) |\n        (G.SBOX[(t >>> 8) & 0xff] << 8) |\n        (G.SBOX[t & 0xff])\n\n      t ^= RCON[(k / keySize) | 0] << 24\n    } else if (keySize > 6 && k % keySize === 4) {\n      t =\n        (G.SBOX[t >>> 24] << 24) |\n        (G.SBOX[(t >>> 16) & 0xff] << 16) |\n        (G.SBOX[(t >>> 8) & 0xff] << 8) |\n        (G.SBOX[t & 0xff])\n    }\n\n    keySchedule[k] = keySchedule[k - keySize] ^ t\n  }\n\n  var invKeySchedule = []\n  for (var ik = 0; ik < ksRows; ik++) {\n    var ksR = ksRows - ik\n    var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n    if (ik < 4 || ksR <= 4) {\n      invKeySchedule[ik] = tt\n    } else {\n      invKeySchedule[ik] =\n        G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n        G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n        G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n        G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n    }\n  }\n\n  this._nRounds = nRounds\n  this._keySchedule = keySchedule\n  this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n  M = asUInt32Array(M)\n  return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n  var out = this.encryptBlockRaw(M)\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[1], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[3], 12)\n  return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n  M = asUInt32Array(M)\n\n  // swap\n  var m1 = M[1]\n  M[1] = M[3]\n  M[3] = m1\n\n  var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[3], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[1], 12)\n  return buf\n}\n\nAES.prototype.scrub = function () {\n  scrubVec(this._keySchedule)\n  scrubVec(this._invKeySchedule)\n  scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n", "var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n  return [\n    buf.readUInt32BE(0),\n    buf.readUInt32BE(4),\n    buf.readUInt32BE(8),\n    buf.readUInt32BE(12)\n  ]\n}\n\nfunction fromArray (out) {\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0] >>> 0, 0)\n  buf.writeUInt32BE(out[1] >>> 0, 4)\n  buf.writeUInt32BE(out[2] >>> 0, 8)\n  buf.writeUInt32BE(out[3] >>> 0, 12)\n  return buf\n}\n\nfunction GHASH (key) {\n  this.h = key\n  this.state = Buffer.alloc(16, 0)\n  this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho V\u00E4h\u00E4-Herttua\nGHASH.prototype.ghash = function (block) {\n  var i = -1\n  while (++i < block.length) {\n    this.state[i] ^= block[i]\n  }\n  this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n  var Vi = toArray(this.h)\n  var Zi = [0, 0, 0, 0]\n  var j, xi, lsbVi\n  var i = -1\n  while (++i < 128) {\n    xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n    if (xi) {\n      // Z_i+1 = Z_i ^ V_i\n      Zi[0] ^= Vi[0]\n      Zi[1] ^= Vi[1]\n      Zi[2] ^= Vi[2]\n      Zi[3] ^= Vi[3]\n    }\n\n    // Store the value of LSB(V_i)\n    lsbVi = (Vi[3] & 1) !== 0\n\n    // V_i+1 = V_i >> 1\n    for (j = 3; j > 0; j--) {\n      Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n    }\n    Vi[0] = Vi[0] >>> 1\n\n    // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n    if (lsbVi) {\n      Vi[0] = Vi[0] ^ (0xe1 << 24)\n    }\n  }\n  this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n  this.cache = Buffer.concat([this.cache, buf])\n  var chunk\n  while (this.cache.length >= 16) {\n    chunk = this.cache.slice(0, 16)\n    this.cache = this.cache.slice(16)\n    this.ghash(chunk)\n  }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n  if (this.cache.length) {\n    this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n  }\n\n  this.ghash(fromArray([0, abl, 0, bl]))\n  return this.state\n}\n\nmodule.exports = GHASH\n", "var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n  var out = 0\n  if (a.length !== b.length) out++\n\n  var len = Math.min(a.length, b.length)\n  for (var i = 0; i < len; ++i) {\n    out += (a[i] ^ b[i])\n  }\n\n  return out\n}\n\nfunction calcIv (self, iv, ck) {\n  if (iv.length === 12) {\n    self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n    return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n  }\n  var ghash = new GHASH(ck)\n  var len = iv.length\n  var toPad = len % 16\n  ghash.update(iv)\n  if (toPad) {\n    toPad = 16 - toPad\n    ghash.update(Buffer.alloc(toPad, 0))\n  }\n  ghash.update(Buffer.alloc(8, 0))\n  var ivBits = len * 8\n  var tail = Buffer.alloc(8)\n  tail.writeUIntBE(ivBits, 0, 8)\n  ghash.update(tail)\n  self._finID = ghash.state\n  var out = Buffer.from(self._finID)\n  incr32(out)\n  return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n  Transform.call(this)\n\n  var h = Buffer.alloc(4, 0)\n\n  this._cipher = new aes.AES(key)\n  var ck = this._cipher.encryptBlock(h)\n  this._ghash = new GHASH(ck)\n  iv = calcIv(this, iv, ck)\n\n  this._prev = Buffer.from(iv)\n  this._cache = Buffer.allocUnsafe(0)\n  this._secCache = Buffer.allocUnsafe(0)\n  this._decrypt = decrypt\n  this._alen = 0\n  this._len = 0\n  this._mode = mode\n\n  this._authTag = null\n  this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n  if (!this._called && this._alen) {\n    var rump = 16 - (this._alen % 16)\n    if (rump < 16) {\n      rump = Buffer.alloc(rump, 0)\n      this._ghash.update(rump)\n    }\n  }\n\n  this._called = true\n  var out = this._mode.encrypt(this, chunk)\n  if (this._decrypt) {\n    this._ghash.update(chunk)\n  } else {\n    this._ghash.update(out)\n  }\n  this._len += chunk.length\n  return out\n}\n\nStreamCipher.prototype._final = function () {\n  if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n  var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n  if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n  this._authTag = tag\n  this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n  if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n  return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n  if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n  this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n  if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n  this._ghash.update(buf)\n  this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n", "var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n  Transform.call(this)\n\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._cache = Buffer.allocUnsafe(0)\n  this._secCache = Buffer.allocUnsafe(0)\n  this._decrypt = decrypt\n  this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n  return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n  this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n", "var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n  if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n  if (salt) {\n    if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n    if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n  }\n\n  var keyLen = keyBits / 8\n  var key = Buffer.alloc(keyLen)\n  var iv = Buffer.alloc(ivLen || 0)\n  var tmp = Buffer.alloc(0)\n\n  while (keyLen > 0 || ivLen > 0) {\n    var hash = new MD5()\n    hash.update(tmp)\n    hash.update(password)\n    if (salt) hash.update(salt)\n    tmp = hash.digest()\n\n    var used = 0\n\n    if (keyLen > 0) {\n      var keyStart = key.length - keyLen\n      used = Math.min(keyLen, tmp.length)\n      tmp.copy(key, keyStart, 0, used)\n      keyLen -= used\n    }\n\n    if (used < tmp.length && ivLen > 0) {\n      var ivStart = iv.length - ivLen\n      var length = Math.min(ivLen, tmp.length - used)\n      tmp.copy(iv, ivStart, used, used + length)\n      ivLen -= length\n    }\n  }\n\n  tmp.fill(0)\n  return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n", "var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n  Transform.call(this)\n\n  this._cache = new Splitter()\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._mode = mode\n  this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n  this._cache.add(data)\n  var chunk\n  var thing\n  var out = []\n\n  while ((chunk = this._cache.get())) {\n    thing = this._mode.encrypt(this, chunk)\n    out.push(thing)\n  }\n\n  return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n  var chunk = this._cache.flush()\n  if (this._autopadding) {\n    chunk = this._mode.encrypt(this, chunk)\n    this._cipher.scrub()\n    return chunk\n  }\n\n  if (!chunk.equals(PADDING)) {\n    this._cipher.scrub()\n    throw new Error('data not multiple of block length')\n  }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo\n  return this\n}\n\nfunction Splitter () {\n  this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n  if (this.cache.length > 15) {\n    var out = this.cache.slice(0, 16)\n    this.cache = this.cache.slice(16)\n    return out\n  }\n  return null\n}\n\nSplitter.prototype.flush = function () {\n  var len = 16 - this.cache.length\n  var padBuff = Buffer.allocUnsafe(len)\n\n  var i = -1\n  while (++i < len) {\n    padBuff.writeUInt8(len, i)\n  }\n\n  return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  if (typeof password === 'string') password = Buffer.from(password)\n  if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n  if (typeof iv === 'string') iv = Buffer.from(iv)\n  if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n  if (config.type === 'stream') {\n    return new StreamCipher(config.module, password, iv)\n  } else if (config.type === 'auth') {\n    return new AuthCipher(config.module, password, iv)\n  }\n\n  return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  var keys = ebtk(password, false, config.key, config.iv)\n  return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n", "var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n  Transform.call(this)\n\n  this._cache = new Splitter()\n  this._last = void 0\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._mode = mode\n  this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n  this._cache.add(data)\n  var chunk\n  var thing\n  var out = []\n  while ((chunk = this._cache.get(this._autopadding))) {\n    thing = this._mode.decrypt(this, chunk)\n    out.push(thing)\n  }\n  return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n  var chunk = this._cache.flush()\n  if (this._autopadding) {\n    return unpad(this._mode.decrypt(this, chunk))\n  } else if (chunk) {\n    throw new Error('data not multiple of block length')\n  }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo\n  return this\n}\n\nfunction Splitter () {\n  this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n  var out\n  if (autoPadding) {\n    if (this.cache.length > 16) {\n      out = this.cache.slice(0, 16)\n      this.cache = this.cache.slice(16)\n      return out\n    }\n  } else {\n    if (this.cache.length >= 16) {\n      out = this.cache.slice(0, 16)\n      this.cache = this.cache.slice(16)\n      return out\n    }\n  }\n\n  return null\n}\n\nSplitter.prototype.flush = function () {\n  if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n  var padded = last[15]\n  if (padded < 1 || padded > 16) {\n    throw new Error('unable to decrypt data')\n  }\n  var i = -1\n  while (++i < padded) {\n    if (last[(i + (16 - padded))] !== padded) {\n      throw new Error('unable to decrypt data')\n    }\n  }\n  if (padded === 16) return\n\n  return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  if (typeof iv === 'string') iv = Buffer.from(iv)\n  if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n  if (typeof password === 'string') password = Buffer.from(password)\n  if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n  if (config.type === 'stream') {\n    return new StreamCipher(config.module, password, iv, true)\n  } else if (config.type === 'auth') {\n    return new AuthCipher(config.module, password, iv, true)\n  }\n\n  return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  var keys = ebtk(password, false, config.key, config.iv)\n  return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n", "var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n  return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n", "exports['des-ecb'] = {\n  key: 8,\n  iv: 0\n}\nexports['des-cbc'] = exports.des = {\n  key: 8,\n  iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n  key: 24,\n  iv: 8\n}\nexports['des-ede3'] = {\n  key: 24,\n  iv: 0\n}\nexports['des-ede-cbc'] = {\n  key: 16,\n  iv: 8\n}\nexports['des-ede'] = {\n  key: 16,\n  iv: 0\n}\n", "var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n  suite = suite.toLowerCase()\n\n  var keyLen, ivLen\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key\n    ivLen = aesModes[suite].iv\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8\n    ivLen = desModes[suite].iv\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n\n  var keys = ebtk(password, false, keyLen, ivLen)\n  return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n  suite = suite.toLowerCase()\n\n  var keyLen, ivLen\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key\n    ivLen = aesModes[suite].iv\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8\n    ivLen = desModes[suite].iv\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n\n  var keys = ebtk(password, false, keyLen, ivLen)\n  return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n  if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n  throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n  if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n  throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n  return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n", "var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n  this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n  return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n  var len = n.bitLength();\n  var min_bytes = Math.ceil(len / 8);\n\n  // Generage random bytes until a number less than n is found.\n  // This ensures that 0..n-1 have an equal probability of being selected.\n  do\n    var a = new bn(this.rand.generate(min_bytes));\n  while (a.cmp(n) >= 0);\n\n  return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n  // Generate a random number greater than or equal to start and less than stop.\n  var size = stop.sub(start);\n  return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n  var len = n.bitLength();\n  var red = bn.mont(n);\n  var rone = new bn(1).toRed(red);\n\n  if (!k)\n    k = Math.max(1, (len / 48) | 0);\n\n  // Find d and s, (n - 1) = (2 ^ s) * d;\n  var n1 = n.subn(1);\n  for (var s = 0; !n1.testn(s); s++) {}\n  var d = n.shrn(s);\n\n  var rn1 = n1.toRed(red);\n\n  var prime = true;\n  for (; k > 0; k--) {\n    var a = this._randrange(new bn(2), n1);\n    if (cb)\n      cb(a);\n\n    var x = a.toRed(red).redPow(d);\n    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n      continue;\n\n    for (var i = 1; i < s; i++) {\n      x = x.redSqr();\n\n      if (x.cmp(rone) === 0)\n        return false;\n      if (x.cmp(rn1) === 0)\n        break;\n    }\n\n    if (i === s)\n      return false;\n  }\n\n  return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n  var len = n.bitLength();\n  var red = bn.mont(n);\n  var rone = new bn(1).toRed(red);\n\n  if (!k)\n    k = Math.max(1, (len / 48) | 0);\n\n  // Find d and s, (n - 1) = (2 ^ s) * d;\n  var n1 = n.subn(1);\n  for (var s = 0; !n1.testn(s); s++) {}\n  var d = n.shrn(s);\n\n  var rn1 = n1.toRed(red);\n\n  for (; k > 0; k--) {\n    var a = this._randrange(new bn(2), n1);\n\n    var g = n.gcd(a);\n    if (g.cmpn(1) !== 0)\n      return g;\n\n    var x = a.toRed(red).redPow(d);\n    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n      continue;\n\n    for (var i = 1; i < s; i++) {\n      x = x.redSqr();\n\n      if (x.cmp(rone) === 0)\n        return x.fromRed().subn(1).gcd(n);\n      if (x.cmp(rn1) === 0)\n        break;\n    }\n\n    if (i === s) {\n      x = x.redSqr();\n      return x.fromRed().subn(1).gcd(n);\n    }\n  }\n\n  return false;\n};\n", "var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n  if (primes !== null)\n    return primes;\n\n  var limit = 0x100000;\n  var res = [];\n  res[0] = 2;\n  for (var i = 1, k = 3; k < limit; k += 2) {\n    var sqrt = Math.ceil(Math.sqrt(k));\n    for (var j = 0; j < i && res[j] <= sqrt; j++)\n      if (k % res[j] === 0)\n        break;\n\n    if (i !== j && res[j] <= sqrt)\n      continue;\n\n    res[i++] = k;\n  }\n  primes = res;\n  return res;\n}\n\nfunction simpleSieve(p) {\n  var primes = _getPrimes();\n\n  for (var i = 0; i < primes.length; i++)\n    if (p.modn(primes[i]) === 0) {\n      if (p.cmpn(primes[i]) === 0) {\n        return true;\n      } else {\n        return false;\n      }\n    }\n\n  return true;\n}\n\nfunction fermatTest(p) {\n  var red = BN.mont(p);\n  return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n  if (bits < 16) {\n    // this is what openssl does\n    if (gen === 2 || gen === 5) {\n      return new BN([0x8c, 0x7b]);\n    } else {\n      return new BN([0x8c, 0x27]);\n    }\n  }\n  gen = new BN(gen);\n\n  var num, n2;\n\n  while (true) {\n    num = new BN(randomBytes(Math.ceil(bits / 8)));\n    while (num.bitLength() > bits) {\n      num.ishrn(1);\n    }\n    if (num.isEven()) {\n      num.iadd(ONE);\n    }\n    if (!num.testn(1)) {\n      num.iadd(TWO);\n    }\n    if (!gen.cmp(TWO)) {\n      while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        num.iadd(FOUR);\n      }\n    } else if (!gen.cmp(FIVE)) {\n      while (num.mod(TEN).cmp(THREE)) {\n        num.iadd(FOUR);\n      }\n    }\n    n2 = num.shrn(1);\n    if (simpleSieve(n2) && simpleSieve(num) &&\n      fermatTest(n2) && fermatTest(num) &&\n      millerRabin.test(n2) && millerRabin.test(num)) {\n      return num;\n    }\n  }\n\n}\n", "{\n    \"modp1\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff\"\n    },\n    \"modp2\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff\"\n    },\n    \"modp5\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff\"\n    },\n    \"modp14\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff\"\n    },\n    \"modp15\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff\"\n    },\n    \"modp16\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff\"\n    },\n    \"modp17\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff\"\n    },\n    \"modp18\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff\"\n    }\n}", "var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(pub)) {\n    pub = new Buffer(pub, enc);\n  }\n  this._pub = new BN(pub);\n  return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(priv)) {\n    priv = new Buffer(priv, enc);\n  }\n  this._priv = new BN(priv);\n  return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n  var gen = generator.toString('hex');\n  var hex = [gen, prime.toString(16)].join('_');\n  if (hex in primeCache) {\n    return primeCache[hex];\n  }\n  var error = 0;\n\n  if (prime.isEven() ||\n    !primes.simpleSieve ||\n    !primes.fermatTest(prime) ||\n    !millerRabin.test(prime)) {\n    //not a prime so +1\n    error += 1;\n\n    if (gen === '02' || gen === '05') {\n      // we'd be able to check the generator\n      // it would fail so +8\n      error += 8;\n    } else {\n      //we wouldn't be able to test the generator\n      // so +4\n      error += 4;\n    }\n    primeCache[hex] = error;\n    return error;\n  }\n  if (!millerRabin.test(prime.shrn(1))) {\n    //not a safe prime\n    error += 2;\n  }\n  var rem;\n  switch (gen) {\n    case '02':\n      if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        // unsuidable generator\n        error += 8;\n      }\n      break;\n    case '05':\n      rem = prime.mod(TEN);\n      if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n        // prime mod 10 needs to equal 3 or 7\n        error += 8;\n      }\n      break;\n    default:\n      error += 4;\n  }\n  primeCache[hex] = error;\n  return error;\n}\n\nfunction DH(prime, generator, malleable) {\n  this.setGenerator(generator);\n  this.__prime = new BN(prime);\n  this._prime = BN.mont(this.__prime);\n  this._primeLen = prime.length;\n  this._pub = undefined;\n  this._priv = undefined;\n  this._primeCode = undefined;\n  if (malleable) {\n    this.setPublicKey = setPublicKey;\n    this.setPrivateKey = setPrivateKey;\n  } else {\n    this._primeCode = 8;\n  }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n  enumerable: true,\n  get: function () {\n    if (typeof this._primeCode !== 'number') {\n      this._primeCode = checkPrime(this.__prime, this.__gen);\n    }\n    return this._primeCode;\n  }\n});\nDH.prototype.generateKeys = function () {\n  if (!this._priv) {\n    this._priv = new BN(randomBytes(this._primeLen));\n  }\n  this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n  return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n  other = new BN(other);\n  other = other.toRed(this._prime);\n  var secret = other.redPow(this._priv).fromRed();\n  var out = new Buffer(secret.toArray());\n  var prime = this.getPrime();\n  if (out.length < prime.length) {\n    var front = new Buffer(prime.length - out.length);\n    front.fill(0);\n    out = Buffer.concat([front, out]);\n  }\n  return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n  return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n  return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n  return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n  return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(gen)) {\n    gen = new Buffer(gen, enc);\n  }\n  this.__gen = gen;\n  this._gen = new BN(gen);\n  return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n  var buf = new Buffer(bn.toArray());\n  if (!enc) {\n    return buf;\n  } else {\n    return buf.toString(enc);\n  }\n}\n", "var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n  var prime = new Buffer(primes[mod].prime, 'hex')\n  var gen = new Buffer(primes[mod].gen, 'hex')\n\n  return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n  'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n  if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n    return createDiffieHellman(prime, 'binary', enc, generator)\n  }\n\n  enc = enc || 'binary'\n  genc = genc || 'binary'\n  generator = generator || new Buffer([2])\n\n  if (!Buffer.isBuffer(generator)) {\n    generator = new Buffer(generator, genc)\n  }\n\n  if (typeof prime === 'number') {\n    return new DH(generatePrime(prime, generator), generator, true)\n  }\n\n  if (!Buffer.isBuffer(prime)) {\n    prime = new Buffer(prime, enc)\n  }\n\n  return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\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", "module.exports = require('events').EventEmitter;\n", "'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n  Buffer = _require.Buffer;\nvar _require2 = require('util'),\n  inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n  Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n  _createClass(BufferList, [{\n    key: \"push\",\n    value: function push(v) {\n      var entry = {\n        data: v,\n        next: null\n      };\n      if (this.length > 0) this.tail.next = entry;else this.head = entry;\n      this.tail = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"unshift\",\n    value: function unshift(v) {\n      var 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  }, {\n    key: \"shift\",\n    value: function shift() {\n      if (this.length === 0) return;\n      var ret = this.head.data;\n      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n      --this.length;\n      return ret;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.head = this.tail = null;\n      this.length = 0;\n    }\n  }, {\n    key: \"join\",\n    value: function join(s) {\n      if (this.length === 0) return '';\n      var p = this.head;\n      var ret = '' + p.data;\n      while (p = p.next) ret += s + p.data;\n      return ret;\n    }\n  }, {\n    key: \"concat\",\n    value: function concat(n) {\n      if (this.length === 0) return Buffer.alloc(0);\n      var ret = Buffer.allocUnsafe(n >>> 0);\n      var p = this.head;\n      var i = 0;\n      while (p) {\n        copyBuffer(p.data, ret, 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  }, {\n    key: \"consume\",\n    value: function consume(n, hasStrings) {\n      var ret;\n      if (n < this.head.data.length) {\n        // `slice` is the same for buffers and strings.\n        ret = this.head.data.slice(0, n);\n        this.head.data = this.head.data.slice(n);\n      } else if (n === this.head.data.length) {\n        // First chunk is a perfect match.\n        ret = this.shift();\n      } else {\n        // Result spans more than one buffer.\n        ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n      }\n      return ret;\n    }\n  }, {\n    key: \"first\",\n    value: function first() {\n      return this.head.data;\n    }\n\n    // Consumes a specified amount of characters from the buffered data.\n  }, {\n    key: \"_getString\",\n    value: function _getString(n) {\n      var p = this.head;\n      var c = 1;\n      var ret = p.data;\n      n -= ret.length;\n      while (p = p.next) {\n        var str = p.data;\n        var nb = n > str.length ? str.length : n;\n        if (nb === str.length) ret += str;else ret += str.slice(0, n);\n        n -= nb;\n        if (n === 0) {\n          if (nb === str.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = str.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes from the buffered data.\n  }, {\n    key: \"_getBuffer\",\n    value: function _getBuffer(n) {\n      var ret = Buffer.allocUnsafe(n);\n      var p = this.head;\n      var c = 1;\n      p.data.copy(ret);\n      n -= p.data.length;\n      while (p = p.next) {\n        var buf = p.data;\n        var nb = n > buf.length ? buf.length : n;\n        buf.copy(ret, ret.length - n, 0, nb);\n        n -= nb;\n        if (n === 0) {\n          if (nb === buf.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = buf.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Make sure the linked list only shows the minimal necessary information.\n  }, {\n    key: custom,\n    value: function value(_, options) {\n      return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n        // Only inspect one level.\n        depth: 0,\n        // It should not recurse.\n        customInspect: false\n      }));\n    }\n  }]);\n  return BufferList;\n}();", "'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        process.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorNT, this, err);\n      }\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\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else {\n        process.nextTick(emitCloseNT, _this);\n      }\n    } else if (cb) {\n      process.nextTick(emitCloseNT, _this);\n      cb(err);\n    } else {\n      process.nextTick(emitCloseNT, _this);\n    }\n  });\n  return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n  emitErrorNT(self, err);\n  emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n  if (self._writableState && !self._writableState.emitClose) return;\n  if (self._readableState && !self._readableState.emitClose) return;\n  self.emit('close');\n}\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\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  var rState = stream._readableState;\n  var wState = stream._writableState;\n  if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy,\n  errorOrDestroy: errorOrDestroy\n};", "'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error;\n  }\n\n  function getMessage(arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message;\n    } else {\n      return message(arg1, arg2, arg3);\n    }\n  }\n\n  var NodeError =\n  /*#__PURE__*/\n  function (_Base) {\n    _inheritsLoose(NodeError, _Base);\n\n    function NodeError(arg1, arg2, arg3) {\n      return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n    }\n\n    return NodeError;\n  }(Base);\n\n  NodeError.prototype.name = Base.name;\n  NodeError.prototype.code = code;\n  codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    var len = expected.length;\n    expected = expected.map(function (i) {\n      return String(i);\n    });\n\n    if (len > 2) {\n      return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n    } else if (len === 2) {\n      return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n    } else {\n      return \"of \".concat(thing, \" \").concat(expected[0]);\n    }\n  } else {\n    return \"of \".concat(thing, \" \").concat(String(expected));\n  }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n\n  return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n  return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  // determiner: 'must be' or 'must not be'\n  var determiner;\n\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n\n  var msg;\n\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } else {\n    var type = includes(name, '.') ? 'property' : 'argument';\n    msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  }\n\n  msg += \". Received type \".concat(typeof actual);\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n  return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n  return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n  return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n", "'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n  if (hwm != null) {\n    if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n      var name = isDuplex ? duplexKey : 'highWaterMark';\n      throw new ERR_INVALID_OPT_VALUE(name, hwm);\n    }\n    return Math.floor(hwm);\n  }\n\n  // Default value\n  return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n  getHighWaterMark: getHighWaterMark\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';\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n  ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n  ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n  ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\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 Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!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 = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\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  var noDecode = 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.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 = function (er) {\n    onwrite(stream, er);\n  };\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  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\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  // 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.emitClose !== false;\n\n  // Should .destroy() be called after 'finish' (and potentially 'end')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function writableStateBufferGetter() {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function value(object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function realHasInstance(object) {\n    return object instanceof this;\n  };\n}\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\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  var isDuplex = this instanceof Duplex;\n  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n  this._writableState = new WritableState(options, this, isDuplex);\n\n  // legacy.\n  this.writable = true;\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  }\n  Stream.call(this);\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 writeAfterEnd(stream, cb) {\n  var er = new ERR_STREAM_WRITE_AFTER_END();\n  // TODO: defer error events consistently everywhere, not just the cb\n  errorOrDestroy(stream, er);\n  process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var er;\n  if (chunk === null) {\n    er = new ERR_STREAM_NULL_VALUES();\n  } else if (typeof chunk !== 'string' && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n  }\n  if (er) {\n    errorOrDestroy(stream, er);\n    process.nextTick(cb, er);\n    return false;\n  }\n  return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n  if (typeof cb !== 'function') cb = nop;\n  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n  return ret;\n};\nWritable.prototype.cork = function () {\n  this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n  if (state.corked) {\n    state.corked--;\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\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, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n  state.length += len;\n  var 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) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n  return ret;\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'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    process.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    process.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n  onwriteStateUpdate(state);\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state) || stream.destroyed;\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n    if (sync) {\n      process.nextTick(afterWrite, stream, state, finished, cb);\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var 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  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      errorOrDestroy(stream, err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.pendingcb++;\n      state.finalCalled = true;\n      process.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\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        var rState = stream._readableState;\n        if (!rState || rState.autoDestroy && rState.endEmitted) {\n          stream.destroy();\n        }\n      }\n    }\n  }\n  return need;\n}\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  cb(err);\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 prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n  // Allow the keys array to be GC'ed.\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\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  this.allowHalfOpen = true;\n  if (options) {\n    if (options.readable === false) this.readable = false;\n    if (options.writable === false) this.writable = false;\n    if (options.allowHalfOpen === false) {\n      this.allowHalfOpen = false;\n      this.once('end', onend);\n    }\n  }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // If the writable side ended, then we're ok.\n  if (this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n  self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});", "// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    callback.apply(this, args);\n  };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n  if (typeof opts === 'function') return eos(stream, null, opts);\n  if (!opts) opts = {};\n  callback = once(callback || noop);\n  var readable = opts.readable || opts.readable !== false && stream.readable;\n  var writable = opts.writable || opts.writable !== false && stream.writable;\n  var onlegacyfinish = function onlegacyfinish() {\n    if (!stream.writable) onfinish();\n  };\n  var writableEnded = stream._writableState && stream._writableState.finished;\n  var onfinish = function onfinish() {\n    writable = false;\n    writableEnded = true;\n    if (!readable) callback.call(stream);\n  };\n  var readableEnded = stream._readableState && stream._readableState.endEmitted;\n  var onend = function onend() {\n    readable = false;\n    readableEnded = true;\n    if (!writable) callback.call(stream);\n  };\n  var onerror = function onerror(err) {\n    callback.call(stream, err);\n  };\n  var onclose = function onclose() {\n    var err;\n    if (readable && !readableEnded) {\n      if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n    if (writable && !writableEnded) {\n      if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n  };\n  var onrequest = function onrequest() {\n    stream.req.on('finish', onfinish);\n  };\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish);\n    stream.on('abort', onclose);\n    if (stream.req) onrequest();else stream.on('request', onrequest);\n  } else if (writable && !stream._writableState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish);\n    stream.on('close', onlegacyfinish);\n  }\n  stream.on('end', onend);\n  stream.on('finish', onfinish);\n  if (opts.error !== false) stream.on('error', onerror);\n  stream.on('close', onclose);\n  return function () {\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}\nmodule.exports = eos;", "'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n  return {\n    value: value,\n    done: done\n  };\n}\nfunction readAndResolve(iter) {\n  var resolve = iter[kLastResolve];\n  if (resolve !== null) {\n    var data = iter[kStream].read();\n    // we defer if data is null\n    // we can be expecting either 'end' or\n    // 'error'\n    if (data !== null) {\n      iter[kLastPromise] = null;\n      iter[kLastResolve] = null;\n      iter[kLastReject] = null;\n      resolve(createIterResult(data, false));\n    }\n  }\n}\nfunction onReadable(iter) {\n  // we wait for the next tick, because it might\n  // emit an error with process.nextTick\n  process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n  return function (resolve, reject) {\n    lastPromise.then(function () {\n      if (iter[kEnded]) {\n        resolve(createIterResult(undefined, true));\n        return;\n      }\n      iter[kHandlePromise](resolve, reject);\n    }, reject);\n  };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n  get stream() {\n    return this[kStream];\n  },\n  next: function next() {\n    var _this = this;\n    // if we have detected an error in the meanwhile\n    // reject straight away\n    var error = this[kError];\n    if (error !== null) {\n      return Promise.reject(error);\n    }\n    if (this[kEnded]) {\n      return Promise.resolve(createIterResult(undefined, true));\n    }\n    if (this[kStream].destroyed) {\n      // We need to defer via nextTick because if .destroy(err) is\n      // called, the error will be emitted via nextTick, and\n      // we cannot guarantee that there is no error lingering around\n      // waiting to be emitted.\n      return new Promise(function (resolve, reject) {\n        process.nextTick(function () {\n          if (_this[kError]) {\n            reject(_this[kError]);\n          } else {\n            resolve(createIterResult(undefined, true));\n          }\n        });\n      });\n    }\n\n    // if we have multiple next() calls\n    // we will wait for the previous Promise to finish\n    // this logic is optimized to support for await loops,\n    // where next() is only called once at a time\n    var lastPromise = this[kLastPromise];\n    var promise;\n    if (lastPromise) {\n      promise = new Promise(wrapForNext(lastPromise, this));\n    } else {\n      // fast path needed to support multiple this.push()\n      // without triggering the next() queue\n      var data = this[kStream].read();\n      if (data !== null) {\n        return Promise.resolve(createIterResult(data, false));\n      }\n      promise = new Promise(this[kHandlePromise]);\n    }\n    this[kLastPromise] = promise;\n    return promise;\n  }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n  return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n  var _this2 = this;\n  // destroy(err, cb) is a private API\n  // we can guarantee we have that here, because we control the\n  // Readable class this is attached to\n  return new Promise(function (resolve, reject) {\n    _this2[kStream].destroy(null, function (err) {\n      if (err) {\n        reject(err);\n        return;\n      }\n      resolve(createIterResult(undefined, true));\n    });\n  });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n  var _Object$create;\n  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n    value: stream,\n    writable: true\n  }), _defineProperty(_Object$create, kLastResolve, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kLastReject, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kError, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kEnded, {\n    value: stream._readableState.endEmitted,\n    writable: true\n  }), _defineProperty(_Object$create, kHandlePromise, {\n    value: function value(resolve, reject) {\n      var data = iterator[kStream].read();\n      if (data) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        resolve(createIterResult(data, false));\n      } else {\n        iterator[kLastResolve] = resolve;\n        iterator[kLastReject] = reject;\n      }\n    },\n    writable: true\n  }), _Object$create));\n  iterator[kLastPromise] = null;\n  finished(stream, function (err) {\n    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n      var reject = iterator[kLastReject];\n      // reject if we are waiting for data in the Promise\n      // returned by next() and store the error\n      if (reject !== null) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        reject(err);\n      }\n      iterator[kError] = err;\n      return;\n    }\n    var resolve = iterator[kLastResolve];\n    if (resolve !== null) {\n      iterator[kLastPromise] = null;\n      iterator[kLastResolve] = null;\n      iterator[kLastReject] = null;\n      resolve(createIterResult(undefined, true));\n    }\n    iterator[kEnded] = true;\n  });\n  stream.on('readable', onReadable.bind(null, iterator));\n  return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;", "module.exports = function () {\n  throw new Error('Readable.from is not available in the browser')\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\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function debug() {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\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);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\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 Duplex;\n\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  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\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 = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\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 = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\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  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n  this.paused = true;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'end' (and potentially 'finish')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // has it been destroyed\n  this.destroyed = false;\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.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\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  var isDuplex = this instanceof Duplex;\n  this._readableState = new ReadableState(options, this, isDuplex);\n\n  // legacy\n  this.readable = true;\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n  Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function 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});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  cb(err);\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  var state = this._readableState;\n  var skipChunkCheck;\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  debug('readableAddChunk', chunk);\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      errorOrDestroy(stream, er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n      if (addToFront) {\n        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());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) {\n        return false;\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n      maybeReadMore(stream, state);\n    }\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) {\n    state.awaitDrain = 0;\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);else state.buffer.push(chunk);\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n  }\n  return er;\n}\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  var 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\n  // Iterate over current buffer to convert already stored Buffers:\n  var p = this._readableState.buffer.head;\n  var content = '';\n  while (p !== null) {\n    content += decoder.write(p.data);\n    p = p.next;\n  }\n  this._readableState.buffer.clear();\n  if (content !== '') this._readableState.buffer.push(content);\n  this._readableState.length = content.length;\n  return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n    n = MAX_HWM;\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.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\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 <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\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  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n  if (n !== 0) state.emittedReadable = false;\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 === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);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  var doRead = state.needReadable;\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, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\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  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark;\n    n = 0;\n  } else {\n    state.length -= n;\n    state.awaitDrain = 0;\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) this.emit('data', ret);\n  return ret;\n};\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk');\n  if (state.ended) return;\n  if (state.decoder) {\n    var 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    if (!state.emittedReadable) {\n      state.emittedReadable = true;\n      emitReadable_(stream);\n    }\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  var 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  var state = stream._readableState;\n  debug('emitReadable_', state.destroyed, state.length, state.ended);\n  if (!state.destroyed && (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) {\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 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 (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n    var 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  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) process.nextTick(endFn);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\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  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n  var 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    dest.removeListener('drain', ondrain);\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 (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    var ret = dest.write(chunk);\n    debug('dest.write', ret);\n    if (ret === false) {\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 ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n      }\n      src.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 (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\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  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n  return dest;\n};\nfunction pipeOnDrain(src) {\n  return function pipeOnDrainFunctionResult() {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = {\n    hasUnpiped: false\n  };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n      hasUnpiped: false\n    });\n    return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\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  var res = Stream.prototype.on.call(this, ev, fn);\n  var 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  var 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.removeAllListeners = function (ev) {\n  var 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  var state = self._readableState;\n  state.readableListening = self.listenerCount('readable') > 0;\n  if (state.resumeScheduled && !state.paused) {\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  }\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  var 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.paused = 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.paused = true;\n  return this;\n};\nfunction flow(stream) {\n  var 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  var _this = this;\n  var state = this._readableState;\n  var paused = false;\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n    _this.push(null);\n  });\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function methodWrap(method) {\n        return function methodWrapReturnFunction() {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n  return this;\n};\nif (typeof Symbol === 'function') {\n  Readable.prototype[Symbol.asyncIterator] = function () {\n    if (createReadableStreamAsyncIterator === undefined) {\n      createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n    }\n    return createReadableStreamAsyncIterator(this);\n  };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.highWaterMark;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState && this._readableState.buffer;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.flowing;\n  },\n  set: function set(state) {\n    if (this._readableState) {\n      this._readableState.flowing = state;\n    }\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.length;\n  }\n});\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  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();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  var 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.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n    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      var wState = stream._writableState;\n      if (!wState || wState.autoDestroy && wState.finished) {\n        stream.destroy();\n      }\n    }\n  }\n}\nif (typeof Symbol === 'function') {\n  Readable.from = function (iterable, opts) {\n    if (from === undefined) {\n      from = require('./internal/streams/from');\n    }\n    return from(Readable, iterable, opts);\n  };\n}\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\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\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n  ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n  var cb = ts.writecb;\n  if (cb === null) {\n    return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n  }\n  ts.writechunk = null;\n  ts.writecb = null;\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    this.push(data);\n  cb(er);\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n  Duplex.call(this, options);\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\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  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  this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n  var _this = this;\n  if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n  if (ts.writechunk !== null && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\nTransform.prototype._destroy = function (err, cb) {\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n  });\n};\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // TODO(BridgeAR): Write a test for these two error cases\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n  return stream.push(null);\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\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(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};", "// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    callback.apply(void 0, arguments);\n  };\n}\nvar _require$codes = require('../../../errors').codes,\n  ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n  // Rethrow the error if it exists to avoid swallowing it\n  if (err) throw err;\n}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n  callback = once(callback);\n  var closed = false;\n  stream.on('close', function () {\n    closed = true;\n  });\n  if (eos === undefined) eos = require('./end-of-stream');\n  eos(stream, {\n    readable: reading,\n    writable: writing\n  }, function (err) {\n    if (err) return callback(err);\n    closed = true;\n    callback();\n  });\n  var destroyed = false;\n  return function (err) {\n    if (closed) return;\n    if (destroyed) return;\n    destroyed = true;\n\n    // request.destroy just do .end - .abort is what we want\n    if (isRequest(stream)) return stream.abort();\n    if (typeof stream.destroy === 'function') return stream.destroy();\n    callback(err || new ERR_STREAM_DESTROYED('pipe'));\n  };\n}\nfunction call(fn) {\n  fn();\n}\nfunction pipe(from, to) {\n  return from.pipe(to);\n}\nfunction popCallback(streams) {\n  if (!streams.length) return noop;\n  if (typeof streams[streams.length - 1] !== 'function') return noop;\n  return streams.pop();\n}\nfunction pipeline() {\n  for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n    streams[_key] = arguments[_key];\n  }\n  var callback = popCallback(streams);\n  if (Array.isArray(streams[0])) streams = streams[0];\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams');\n  }\n  var error;\n  var destroys = streams.map(function (stream, i) {\n    var reading = i < streams.length - 1;\n    var writing = i > 0;\n    return destroyer(stream, reading, writing, function (err) {\n      if (!error) error = err;\n      if (err) destroys.forEach(call);\n      if (reading) return;\n      destroys.forEach(call);\n      callback(error);\n    });\n  });\n  return streams.reduce(pipe);\n}\nmodule.exports = pipeline;", "exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n", "(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [number & 0x3ffffff];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [0];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this._strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // '0' - '9'\n    if (c >= 48 && c <= 57) {\n      return c - 48;\n    // 'A' - 'F'\n    } else if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    } else {\n      assert(false, 'Invalid character in ' + string);\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this._strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var b = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        b = c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        b = c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        b = c;\n      }\n      assert(c >= 0 && b < mul, 'Invalid character');\n      r += b;\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [0];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this._strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  function move (dest, src) {\n    dest.words = src.words;\n    dest.length = src.length;\n    dest.negative = src.negative;\n    dest.red = src.red;\n  }\n\n  BN.prototype._move = function _move (dest) {\n    move(dest, this);\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype._strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  // Check Symbol.for because not everywhere where Symbol defined\n  // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n  if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n    try {\n      BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n    } catch (e) {\n      BN.prototype.inspect = inspect;\n    }\n  } else {\n    BN.prototype.inspect = inspect;\n  }\n\n  function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  }\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modrn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16, 2);\n  };\n\n  if (Buffer) {\n    BN.prototype.toBuffer = function toBuffer (endian, length) {\n      return this.toArrayLike(Buffer, endian, length);\n    };\n  }\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  var allocate = function allocate (ArrayType, size) {\n    if (ArrayType.allocUnsafe) {\n      return ArrayType.allocUnsafe(size);\n    }\n    return new ArrayType(size);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    this._strip();\n\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    var res = allocate(ArrayType, reqLength);\n    var postfix = endian === 'le' ? 'LE' : 'BE';\n    this['_toArrayLike' + postfix](res, byteLength);\n    return res;\n  };\n\n  BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n    var position = 0;\n    var carry = 0;\n\n    for (var i = 0, shift = 0; i < this.length; i++) {\n      var word = (this.words[i] << shift) | carry;\n\n      res[position++] = word & 0xff;\n      if (position < res.length) {\n        res[position++] = (word >> 8) & 0xff;\n      }\n      if (position < res.length) {\n        res[position++] = (word >> 16) & 0xff;\n      }\n\n      if (shift === 6) {\n        if (position < res.length) {\n          res[position++] = (word >> 24) & 0xff;\n        }\n        carry = 0;\n        shift = 0;\n      } else {\n        carry = word >>> 24;\n        shift += 2;\n      }\n    }\n\n    if (position < res.length) {\n      res[position++] = carry;\n\n      while (position < res.length) {\n        res[position++] = 0;\n      }\n    }\n  };\n\n  BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n    var position = res.length - 1;\n    var carry = 0;\n\n    for (var i = 0, shift = 0; i < this.length; i++) {\n      var word = (this.words[i] << shift) | carry;\n\n      res[position--] = word & 0xff;\n      if (position >= 0) {\n        res[position--] = (word >> 8) & 0xff;\n      }\n      if (position >= 0) {\n        res[position--] = (word >> 16) & 0xff;\n      }\n\n      if (shift === 6) {\n        if (position >= 0) {\n          res[position--] = (word >> 24) & 0xff;\n        }\n        carry = 0;\n        shift = 0;\n      } else {\n        carry = word >>> 24;\n        shift += 2;\n      }\n    }\n\n    if (position >= 0) {\n      res[position--] = carry;\n\n      while (position >= 0) {\n        res[position--] = 0;\n      }\n    }\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] >>> wbit) & 0x01;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this._strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this._strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this._strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this._strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this._strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out._strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out._strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n    // var fftm = new FFTM();\n    // return fftm.mulp(self, num, out);\n    return bigMulTo(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out._strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return isNegNum ? this.ineg() : this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this._strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) <= num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this._strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this._strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q._strip();\n    }\n    a._strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modrn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modrn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modrn = function modrn (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return isNegNum ? -acc : acc;\n  };\n\n  // WARNING: DEPRECATED\n  BN.prototype.modn = function modn (num) {\n    return this.modrn(num);\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    this._strip();\n    return isNegNum ? this.ineg() : this;\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this._strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is a BN v4 instance\n        r.strip();\n      } else {\n        // r is a BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n    move(a, a.umod(this.m)._forceRed(this));\n    return a;\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n", "var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n  var r = getr(priv)\n  var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n  return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n  var len = priv.modulus.byteLength()\n  var r\n  do {\n    r = new BN(randomBytes(len))\n  } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n  return r\n}\n\nfunction crt (msg, priv) {\n  var blinds = blind(priv)\n  var len = priv.modulus.byteLength()\n  var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus)\n  var c1 = blinded.toRed(BN.mont(priv.prime1))\n  var c2 = blinded.toRed(BN.mont(priv.prime2))\n  var qinv = priv.coefficient\n  var p = priv.prime1\n  var q = priv.prime2\n  var m1 = c1.redPow(priv.exponent1).fromRed()\n  var m2 = c2.redPow(priv.exponent2).fromRed()\n  var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n  return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n", "(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [number & 0x3ffffff];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [0];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this._strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // '0' - '9'\n    if (c >= 48 && c <= 57) {\n      return c - 48;\n    // 'A' - 'F'\n    } else if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    } else {\n      assert(false, 'Invalid character in ' + string);\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this._strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var b = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        b = c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        b = c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        b = c;\n      }\n      assert(c >= 0 && b < mul, 'Invalid character');\n      r += b;\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [0];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this._strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  function move (dest, src) {\n    dest.words = src.words;\n    dest.length = src.length;\n    dest.negative = src.negative;\n    dest.red = src.red;\n  }\n\n  BN.prototype._move = function _move (dest) {\n    move(dest, this);\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype._strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  // Check Symbol.for because not everywhere where Symbol defined\n  // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n  if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n    try {\n      BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n    } catch (e) {\n      BN.prototype.inspect = inspect;\n    }\n  } else {\n    BN.prototype.inspect = inspect;\n  }\n\n  function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  }\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modrn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16, 2);\n  };\n\n  if (Buffer) {\n    BN.prototype.toBuffer = function toBuffer (endian, length) {\n      return this.toArrayLike(Buffer, endian, length);\n    };\n  }\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  var allocate = function allocate (ArrayType, size) {\n    if (ArrayType.allocUnsafe) {\n      return ArrayType.allocUnsafe(size);\n    }\n    return new ArrayType(size);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    this._strip();\n\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    var res = allocate(ArrayType, reqLength);\n    var postfix = endian === 'le' ? 'LE' : 'BE';\n    this['_toArrayLike' + postfix](res, byteLength);\n    return res;\n  };\n\n  BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n    var position = 0;\n    var carry = 0;\n\n    for (var i = 0, shift = 0; i < this.length; i++) {\n      var word = (this.words[i] << shift) | carry;\n\n      res[position++] = word & 0xff;\n      if (position < res.length) {\n        res[position++] = (word >> 8) & 0xff;\n      }\n      if (position < res.length) {\n        res[position++] = (word >> 16) & 0xff;\n      }\n\n      if (shift === 6) {\n        if (position < res.length) {\n          res[position++] = (word >> 24) & 0xff;\n        }\n        carry = 0;\n        shift = 0;\n      } else {\n        carry = word >>> 24;\n        shift += 2;\n      }\n    }\n\n    if (position < res.length) {\n      res[position++] = carry;\n\n      while (position < res.length) {\n        res[position++] = 0;\n      }\n    }\n  };\n\n  BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n    var position = res.length - 1;\n    var carry = 0;\n\n    for (var i = 0, shift = 0; i < this.length; i++) {\n      var word = (this.words[i] << shift) | carry;\n\n      res[position--] = word & 0xff;\n      if (position >= 0) {\n        res[position--] = (word >> 8) & 0xff;\n      }\n      if (position >= 0) {\n        res[position--] = (word >> 16) & 0xff;\n      }\n\n      if (shift === 6) {\n        if (position >= 0) {\n          res[position--] = (word >> 24) & 0xff;\n        }\n        carry = 0;\n        shift = 0;\n      } else {\n        carry = word >>> 24;\n        shift += 2;\n      }\n    }\n\n    if (position >= 0) {\n      res[position--] = carry;\n\n      while (position >= 0) {\n        res[position--] = 0;\n      }\n    }\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] >>> wbit) & 0x01;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this._strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this._strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this._strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this._strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this._strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out._strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out._strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n    // var fftm = new FFTM();\n    // return fftm.mulp(self, num, out);\n    return bigMulTo(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out._strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return isNegNum ? this.ineg() : this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this._strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) <= num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this._strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this._strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q._strip();\n    }\n    a._strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modrn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modrn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modrn = function modrn (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return isNegNum ? -acc : acc;\n  };\n\n  // WARNING: DEPRECATED\n  BN.prototype.modn = function modn (num) {\n    return this.modrn(num);\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    this._strip();\n    return isNegNum ? this.ineg() : this;\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this._strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is a BN v4 instance\n        r.strip();\n      } else {\n        // r is a BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n    move(a, a.umod(this.m)._forceRed(this));\n    return a;\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n", "/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n  if (!buffer.hasOwnProperty(key)) continue\n  if (key === 'SlowBuffer' || key === 'Buffer') continue\n  safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n  if (!Buffer.hasOwnProperty(key)) continue\n  if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n  Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n  Safer.from = function (value, encodingOrOffset, length) {\n    if (typeof value === 'number') {\n      throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n    }\n    if (value && typeof value.length === 'undefined') {\n      throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n    }\n    return Buffer(value, encodingOrOffset, length)\n  }\n}\n\nif (!Safer.alloc) {\n  Safer.alloc = function (size, fill, encoding) {\n    if (typeof size !== 'number') {\n      throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n    }\n    if (size < 0 || size >= 2 * (1 << 30)) {\n      throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n    }\n    var buf = Buffer(size)\n    if (!fill || fill.length === 0) {\n      buf.fill(0)\n    } else if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n    return buf\n  }\n}\n\nif (!safer.kStringMaxLength) {\n  try {\n    safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n  } catch (e) {\n    // we can't determine kStringMaxLength in environments where process.binding\n    // is unsupported, so let's not set it\n  }\n}\n\nif (!safer.constants) {\n  safer.constants = {\n    MAX_LENGTH: safer.kMaxLength\n  }\n  if (safer.kStringMaxLength) {\n    safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n  }\n}\n\nmodule.exports = safer\n", "'use strict';\n\nconst inherits = require('inherits');\n\nfunction Reporter(options) {\n  this._reporterState = {\n    obj: null,\n    path: [],\n    options: options || {},\n    errors: []\n  };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n  return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n  const state = this._reporterState;\n\n  return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n  const state = this._reporterState;\n\n  state.obj = data.obj;\n  state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n  return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n  const state = this._reporterState;\n\n  state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n  const state = this._reporterState;\n\n  this.exitKey(index);\n  if (state.obj !== null)\n    state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n  return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n  const state = this._reporterState;\n\n  const prev = state.obj;\n  state.obj = {};\n  return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n  const state = this._reporterState;\n\n  const now = state.obj;\n  state.obj = prev;\n  return now;\n};\n\nReporter.prototype.error = function error(msg) {\n  let err;\n  const state = this._reporterState;\n\n  const inherited = msg instanceof ReporterError;\n  if (inherited) {\n    err = msg;\n  } else {\n    err = new ReporterError(state.path.map(function(elem) {\n      return '[' + JSON.stringify(elem) + ']';\n    }).join(''), msg.message || msg, msg.stack);\n  }\n\n  if (!state.options.partial)\n    throw err;\n\n  if (!inherited)\n    state.errors.push(err);\n\n  return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n  const state = this._reporterState;\n  if (!state.options.partial)\n    return result;\n\n  return {\n    result: this.isError(result) ? null : result,\n    errors: state.errors\n  };\n};\n\nfunction ReporterError(path, msg) {\n  this.path = path;\n  this.rethrow(msg);\n}\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n  this.message = msg + ' at: ' + (this.path || '(shallow)');\n  if (Error.captureStackTrace)\n    Error.captureStackTrace(this, ReporterError);\n\n  if (!this.stack) {\n    try {\n      // IE only adds stack when thrown\n      throw new Error(this.message);\n    } catch (e) {\n      this.stack = e.stack;\n    }\n  }\n  return this;\n};\n", "'use strict';\n\nconst inherits = require('inherits');\nconst Reporter = require('../base/reporter').Reporter;\nconst Buffer = require('safer-buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n  Reporter.call(this, options);\n  if (!Buffer.isBuffer(base)) {\n    this.error('Input not Buffer');\n    return;\n  }\n\n  this.base = base;\n  this.offset = 0;\n  this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.isDecoderBuffer = function isDecoderBuffer(data) {\n  if (data instanceof DecoderBuffer) {\n    return true;\n  }\n\n  // Or accept compatible API\n  const isCompatible = typeof data === 'object' &&\n    Buffer.isBuffer(data.base) &&\n    data.constructor.name === 'DecoderBuffer' &&\n    typeof data.offset === 'number' &&\n    typeof data.length === 'number' &&\n    typeof data.save === 'function' &&\n    typeof data.restore === 'function' &&\n    typeof data.isEmpty === 'function' &&\n    typeof data.readUInt8 === 'function' &&\n    typeof data.skip === 'function' &&\n    typeof data.raw === 'function';\n\n  return isCompatible;\n};\n\nDecoderBuffer.prototype.save = function save() {\n  return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n  // Return skipped data\n  const res = new DecoderBuffer(this.base);\n  res.offset = save.offset;\n  res.length = this.offset;\n\n  this.offset = save.offset;\n  Reporter.prototype.restore.call(this, save.reporter);\n\n  return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n  return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n  if (this.offset + 1 <= this.length)\n    return this.base.readUInt8(this.offset++, true);\n  else\n    return this.error(fail || 'DecoderBuffer overrun');\n};\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n  if (!(this.offset + bytes <= this.length))\n    return this.error(fail || 'DecoderBuffer overrun');\n\n  const res = new DecoderBuffer(this.base);\n\n  // Share reporter state\n  res._reporterState = this._reporterState;\n\n  res.offset = this.offset;\n  res.length = this.offset + bytes;\n  this.offset += bytes;\n  return res;\n};\n\nDecoderBuffer.prototype.raw = function raw(save) {\n  return this.base.slice(save ? save.offset : this.offset, this.length);\n};\n\nfunction EncoderBuffer(value, reporter) {\n  if (Array.isArray(value)) {\n    this.length = 0;\n    this.value = value.map(function(item) {\n      if (!EncoderBuffer.isEncoderBuffer(item))\n        item = new EncoderBuffer(item, reporter);\n      this.length += item.length;\n      return item;\n    }, this);\n  } else if (typeof value === 'number') {\n    if (!(0 <= value && value <= 0xff))\n      return reporter.error('non-byte EncoderBuffer value');\n    this.value = value;\n    this.length = 1;\n  } else if (typeof value === 'string') {\n    this.value = value;\n    this.length = Buffer.byteLength(value);\n  } else if (Buffer.isBuffer(value)) {\n    this.value = value;\n    this.length = value.length;\n  } else {\n    return reporter.error('Unsupported type: ' + typeof value);\n  }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.isEncoderBuffer = function isEncoderBuffer(data) {\n  if (data instanceof EncoderBuffer) {\n    return true;\n  }\n\n  // Or accept compatible API\n  const isCompatible = typeof data === 'object' &&\n    data.constructor.name === 'EncoderBuffer' &&\n    typeof data.length === 'number' &&\n    typeof data.join === 'function';\n\n  return isCompatible;\n};\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n  if (!out)\n    out = Buffer.alloc(this.length);\n  if (!offset)\n    offset = 0;\n\n  if (this.length === 0)\n    return out;\n\n  if (Array.isArray(this.value)) {\n    this.value.forEach(function(item) {\n      item.join(out, offset);\n      offset += item.length;\n    });\n  } else {\n    if (typeof this.value === 'number')\n      out[offset] = this.value;\n    else if (typeof this.value === 'string')\n      out.write(this.value, offset);\n    else if (Buffer.isBuffer(this.value))\n      this.value.copy(out, offset);\n    offset += this.length;\n  }\n\n  return out;\n};\n", "'use strict';\n\nconst Reporter = require('../base/reporter').Reporter;\nconst EncoderBuffer = require('../base/buffer').EncoderBuffer;\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst assert = require('minimalistic-assert');\n\n// Supported tags\nconst tags = [\n  'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n  'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n  'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n  'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nconst methods = [\n  'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n  'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nconst overrided = [\n  '_peekTag', '_decodeTag', '_use',\n  '_decodeStr', '_decodeObjid', '_decodeTime',\n  '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n  '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n  '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent, name) {\n  const state = {};\n  this._baseState = state;\n\n  state.name = name;\n  state.enc = enc;\n\n  state.parent = parent || null;\n  state.children = null;\n\n  // State\n  state.tag = null;\n  state.args = null;\n  state.reverseArgs = null;\n  state.choice = null;\n  state.optional = false;\n  state.any = false;\n  state.obj = false;\n  state.use = null;\n  state.useDecoder = null;\n  state.key = null;\n  state['default'] = null;\n  state.explicit = null;\n  state.implicit = null;\n  state.contains = null;\n\n  // Should create new instance on each method\n  if (!state.parent) {\n    state.children = [];\n    this._wrap();\n  }\n}\nmodule.exports = Node;\n\nconst stateProps = [\n  'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n  'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n  'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n  const state = this._baseState;\n  const cstate = {};\n  stateProps.forEach(function(prop) {\n    cstate[prop] = state[prop];\n  });\n  const res = new this.constructor(cstate.parent);\n  res._baseState = cstate;\n  return res;\n};\n\nNode.prototype._wrap = function wrap() {\n  const state = this._baseState;\n  methods.forEach(function(method) {\n    this[method] = function _wrappedMethod() {\n      const clone = new this.constructor(this);\n      state.children.push(clone);\n      return clone[method].apply(clone, arguments);\n    };\n  }, this);\n};\n\nNode.prototype._init = function init(body) {\n  const state = this._baseState;\n\n  assert(state.parent === null);\n  body.call(this);\n\n  // Filter children\n  state.children = state.children.filter(function(child) {\n    return child._baseState.parent === this;\n  }, this);\n  assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n  const state = this._baseState;\n\n  // Filter children and args\n  const children = args.filter(function(arg) {\n    return arg instanceof this.constructor;\n  }, this);\n  args = args.filter(function(arg) {\n    return !(arg instanceof this.constructor);\n  }, this);\n\n  if (children.length !== 0) {\n    assert(state.children === null);\n    state.children = children;\n\n    // Replace parent to maintain backward link\n    children.forEach(function(child) {\n      child._baseState.parent = this;\n    }, this);\n  }\n  if (args.length !== 0) {\n    assert(state.args === null);\n    state.args = args;\n    state.reverseArgs = args.map(function(arg) {\n      if (typeof arg !== 'object' || arg.constructor !== Object)\n        return arg;\n\n      const res = {};\n      Object.keys(arg).forEach(function(key) {\n        if (key == (key | 0))\n          key |= 0;\n        const value = arg[key];\n        res[value] = key;\n      });\n      return res;\n    });\n  }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n  Node.prototype[method] = function _overrided() {\n    const state = this._baseState;\n    throw new Error(method + ' not implemented for encoding: ' + state.enc);\n  };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n  Node.prototype[tag] = function _tagMethod() {\n    const state = this._baseState;\n    const args = Array.prototype.slice.call(arguments);\n\n    assert(state.tag === null);\n    state.tag = tag;\n\n    this._useArgs(args);\n\n    return this;\n  };\n});\n\nNode.prototype.use = function use(item) {\n  assert(item);\n  const state = this._baseState;\n\n  assert(state.use === null);\n  state.use = item;\n\n  return this;\n};\n\nNode.prototype.optional = function optional() {\n  const state = this._baseState;\n\n  state.optional = true;\n\n  return this;\n};\n\nNode.prototype.def = function def(val) {\n  const state = this._baseState;\n\n  assert(state['default'] === null);\n  state['default'] = val;\n  state.optional = true;\n\n  return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n  const state = this._baseState;\n\n  assert(state.explicit === null && state.implicit === null);\n  state.explicit = num;\n\n  return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n  const state = this._baseState;\n\n  assert(state.explicit === null && state.implicit === null);\n  state.implicit = num;\n\n  return this;\n};\n\nNode.prototype.obj = function obj() {\n  const state = this._baseState;\n  const args = Array.prototype.slice.call(arguments);\n\n  state.obj = true;\n\n  if (args.length !== 0)\n    this._useArgs(args);\n\n  return this;\n};\n\nNode.prototype.key = function key(newKey) {\n  const state = this._baseState;\n\n  assert(state.key === null);\n  state.key = newKey;\n\n  return this;\n};\n\nNode.prototype.any = function any() {\n  const state = this._baseState;\n\n  state.any = true;\n\n  return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n  const state = this._baseState;\n\n  assert(state.choice === null);\n  state.choice = obj;\n  this._useArgs(Object.keys(obj).map(function(key) {\n    return obj[key];\n  }));\n\n  return this;\n};\n\nNode.prototype.contains = function contains(item) {\n  const state = this._baseState;\n\n  assert(state.use === null);\n  state.contains = item;\n\n  return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n  const state = this._baseState;\n\n  // Decode root node\n  if (state.parent === null)\n    return input.wrapResult(state.children[0]._decode(input, options));\n\n  let result = state['default'];\n  let present = true;\n\n  let prevKey = null;\n  if (state.key !== null)\n    prevKey = input.enterKey(state.key);\n\n  // Check if tag is there\n  if (state.optional) {\n    let tag = null;\n    if (state.explicit !== null)\n      tag = state.explicit;\n    else if (state.implicit !== null)\n      tag = state.implicit;\n    else if (state.tag !== null)\n      tag = state.tag;\n\n    if (tag === null && !state.any) {\n      // Trial and Error\n      const save = input.save();\n      try {\n        if (state.choice === null)\n          this._decodeGeneric(state.tag, input, options);\n        else\n          this._decodeChoice(input, options);\n        present = true;\n      } catch (e) {\n        present = false;\n      }\n      input.restore(save);\n    } else {\n      present = this._peekTag(input, tag, state.any);\n\n      if (input.isError(present))\n        return present;\n    }\n  }\n\n  // Push object on stack\n  let prevObj;\n  if (state.obj && present)\n    prevObj = input.enterObject();\n\n  if (present) {\n    // Unwrap explicit values\n    if (state.explicit !== null) {\n      const explicit = this._decodeTag(input, state.explicit);\n      if (input.isError(explicit))\n        return explicit;\n      input = explicit;\n    }\n\n    const start = input.offset;\n\n    // Unwrap implicit and normal values\n    if (state.use === null && state.choice === null) {\n      let save;\n      if (state.any)\n        save = input.save();\n      const body = this._decodeTag(\n        input,\n        state.implicit !== null ? state.implicit : state.tag,\n        state.any\n      );\n      if (input.isError(body))\n        return body;\n\n      if (state.any)\n        result = input.raw(save);\n      else\n        input = body;\n    }\n\n    if (options && options.track && state.tag !== null)\n      options.track(input.path(), start, input.length, 'tagged');\n\n    if (options && options.track && state.tag !== null)\n      options.track(input.path(), input.offset, input.length, 'content');\n\n    // Select proper method for tag\n    if (state.any) {\n      // no-op\n    } else if (state.choice === null) {\n      result = this._decodeGeneric(state.tag, input, options);\n    } else {\n      result = this._decodeChoice(input, options);\n    }\n\n    if (input.isError(result))\n      return result;\n\n    // Decode children\n    if (!state.any && state.choice === null && state.children !== null) {\n      state.children.forEach(function decodeChildren(child) {\n        // NOTE: We are ignoring errors here, to let parser continue with other\n        // parts of encoded data\n        child._decode(input, options);\n      });\n    }\n\n    // Decode contained/encoded by schema, only in bit or octet strings\n    if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n      const data = new DecoderBuffer(result);\n      result = this._getUse(state.contains, input._reporterState.obj)\n        ._decode(data, options);\n    }\n  }\n\n  // Pop object\n  if (state.obj && present)\n    result = input.leaveObject(prevObj);\n\n  // Set key\n  if (state.key !== null && (result !== null || present === true))\n    input.leaveKey(prevKey, state.key, result);\n  else if (prevKey !== null)\n    input.exitKey(prevKey);\n\n  return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n  const state = this._baseState;\n\n  if (tag === 'seq' || tag === 'set')\n    return null;\n  if (tag === 'seqof' || tag === 'setof')\n    return this._decodeList(input, tag, state.args[0], options);\n  else if (/str$/.test(tag))\n    return this._decodeStr(input, tag, options);\n  else if (tag === 'objid' && state.args)\n    return this._decodeObjid(input, state.args[0], state.args[1], options);\n  else if (tag === 'objid')\n    return this._decodeObjid(input, null, null, options);\n  else if (tag === 'gentime' || tag === 'utctime')\n    return this._decodeTime(input, tag, options);\n  else if (tag === 'null_')\n    return this._decodeNull(input, options);\n  else if (tag === 'bool')\n    return this._decodeBool(input, options);\n  else if (tag === 'objDesc')\n    return this._decodeStr(input, tag, options);\n  else if (tag === 'int' || tag === 'enum')\n    return this._decodeInt(input, state.args && state.args[0], options);\n\n  if (state.use !== null) {\n    return this._getUse(state.use, input._reporterState.obj)\n      ._decode(input, options);\n  } else {\n    return input.error('unknown tag: ' + tag);\n  }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n  const state = this._baseState;\n  // Create altered use decoder if implicit is set\n  state.useDecoder = this._use(entity, obj);\n  assert(state.useDecoder._baseState.parent === null);\n  state.useDecoder = state.useDecoder._baseState.children[0];\n  if (state.implicit !== state.useDecoder._baseState.implicit) {\n    state.useDecoder = state.useDecoder.clone();\n    state.useDecoder._baseState.implicit = state.implicit;\n  }\n  return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n  const state = this._baseState;\n  let result = null;\n  let match = false;\n\n  Object.keys(state.choice).some(function(key) {\n    const save = input.save();\n    const node = state.choice[key];\n    try {\n      const value = node._decode(input, options);\n      if (input.isError(value))\n        return false;\n\n      result = { type: key, value: value };\n      match = true;\n    } catch (e) {\n      input.restore(save);\n      return false;\n    }\n    return true;\n  }, this);\n\n  if (!match)\n    return input.error('Choice not matched');\n\n  return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n  return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n  const state = this._baseState;\n  if (state['default'] !== null && state['default'] === data)\n    return;\n\n  const result = this._encodeValue(data, reporter, parent);\n  if (result === undefined)\n    return;\n\n  if (this._skipDefault(result, reporter, parent))\n    return;\n\n  return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n  const state = this._baseState;\n\n  // Decode root node\n  if (state.parent === null)\n    return state.children[0]._encode(data, reporter || new Reporter());\n\n  let result = null;\n\n  // Set reporter to share it with a child class\n  this.reporter = reporter;\n\n  // Check if data is there\n  if (state.optional && data === undefined) {\n    if (state['default'] !== null)\n      data = state['default'];\n    else\n      return;\n  }\n\n  // Encode children first\n  let content = null;\n  let primitive = false;\n  if (state.any) {\n    // Anything that was given is translated to buffer\n    result = this._createEncoderBuffer(data);\n  } else if (state.choice) {\n    result = this._encodeChoice(data, reporter);\n  } else if (state.contains) {\n    content = this._getUse(state.contains, parent)._encode(data, reporter);\n    primitive = true;\n  } else if (state.children) {\n    content = state.children.map(function(child) {\n      if (child._baseState.tag === 'null_')\n        return child._encode(null, reporter, data);\n\n      if (child._baseState.key === null)\n        return reporter.error('Child should have a key');\n      const prevKey = reporter.enterKey(child._baseState.key);\n\n      if (typeof data !== 'object')\n        return reporter.error('Child expected, but input is not object');\n\n      const res = child._encode(data[child._baseState.key], reporter, data);\n      reporter.leaveKey(prevKey);\n\n      return res;\n    }, this).filter(function(child) {\n      return child;\n    });\n    content = this._createEncoderBuffer(content);\n  } else {\n    if (state.tag === 'seqof' || state.tag === 'setof') {\n      // TODO(indutny): this should be thrown on DSL level\n      if (!(state.args && state.args.length === 1))\n        return reporter.error('Too many args for : ' + state.tag);\n\n      if (!Array.isArray(data))\n        return reporter.error('seqof/setof, but data is not Array');\n\n      const child = this.clone();\n      child._baseState.implicit = null;\n      content = this._createEncoderBuffer(data.map(function(item) {\n        const state = this._baseState;\n\n        return this._getUse(state.args[0], data)._encode(item, reporter);\n      }, child));\n    } else if (state.use !== null) {\n      result = this._getUse(state.use, parent)._encode(data, reporter);\n    } else {\n      content = this._encodePrimitive(state.tag, data);\n      primitive = true;\n    }\n  }\n\n  // Encode data itself\n  if (!state.any && state.choice === null) {\n    const tag = state.implicit !== null ? state.implicit : state.tag;\n    const cls = state.implicit === null ? 'universal' : 'context';\n\n    if (tag === null) {\n      if (state.use === null)\n        reporter.error('Tag could be omitted only for .use()');\n    } else {\n      if (state.use === null)\n        result = this._encodeComposite(tag, primitive, cls, content);\n    }\n  }\n\n  // Wrap in explicit\n  if (state.explicit !== null)\n    result = this._encodeComposite(state.explicit, false, 'context', result);\n\n  return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n  const state = this._baseState;\n\n  const node = state.choice[data.type];\n  if (!node) {\n    assert(\n      false,\n      data.type + ' not found in ' +\n            JSON.stringify(Object.keys(state.choice)));\n  }\n  return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n  const state = this._baseState;\n\n  if (/str$/.test(tag))\n    return this._encodeStr(data, tag);\n  else if (tag === 'objid' && state.args)\n    return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n  else if (tag === 'objid')\n    return this._encodeObjid(data, null, null);\n  else if (tag === 'gentime' || tag === 'utctime')\n    return this._encodeTime(data, tag);\n  else if (tag === 'null_')\n    return this._encodeNull();\n  else if (tag === 'int' || tag === 'enum')\n    return this._encodeInt(data, state.args && state.reverseArgs[0]);\n  else if (tag === 'bool')\n    return this._encodeBool(data);\n  else if (tag === 'objDesc')\n    return this._encodeStr(data, tag);\n  else\n    throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n  return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n  return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str);\n};\n", "'use strict';\n\n// Helper\nfunction reverse(map) {\n  const res = {};\n\n  Object.keys(map).forEach(function(key) {\n    // Convert key to integer if it is stringified\n    if ((key | 0) == key)\n      key = key | 0;\n\n    const value = map[key];\n    res[value] = key;\n  });\n\n  return res;\n}\n\nexports.tagClass = {\n  0: 'universal',\n  1: 'application',\n  2: 'context',\n  3: 'private'\n};\nexports.tagClassByName = reverse(exports.tagClass);\n\nexports.tag = {\n  0x00: 'end',\n  0x01: 'bool',\n  0x02: 'int',\n  0x03: 'bitstr',\n  0x04: 'octstr',\n  0x05: 'null_',\n  0x06: 'objid',\n  0x07: 'objDesc',\n  0x08: 'external',\n  0x09: 'real',\n  0x0a: 'enum',\n  0x0b: 'embed',\n  0x0c: 'utf8str',\n  0x0d: 'relativeOid',\n  0x10: 'seq',\n  0x11: 'set',\n  0x12: 'numstr',\n  0x13: 'printstr',\n  0x14: 't61str',\n  0x15: 'videostr',\n  0x16: 'ia5str',\n  0x17: 'utctime',\n  0x18: 'gentime',\n  0x19: 'graphstr',\n  0x1a: 'iso646str',\n  0x1b: 'genstr',\n  0x1c: 'unistr',\n  0x1d: 'charstr',\n  0x1e: 'bmpstr'\n};\nexports.tagByName = reverse(exports.tag);\n", "'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DEREncoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity;\n\n  // Construct base tree\n  this.tree = new DERNode();\n  this.tree._init(entity.body);\n}\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n  return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n  Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n  primitive,\n  cls,\n  content) {\n  const encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n  // Short form\n  if (content.length < 0x80) {\n    const header = Buffer.alloc(2);\n    header[0] = encodedTag;\n    header[1] = content.length;\n    return this._createEncoderBuffer([ header, content ]);\n  }\n\n  // Long form\n  // Count octets required to store length\n  let lenOctets = 1;\n  for (let i = content.length; i >= 0x100; i >>= 8)\n    lenOctets++;\n\n  const header = Buffer.alloc(1 + 1 + lenOctets);\n  header[0] = encodedTag;\n  header[1] = 0x80 | lenOctets;\n\n  for (let i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n    header[i] = j & 0xff;\n\n  return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n  if (tag === 'bitstr') {\n    return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n  } else if (tag === 'bmpstr') {\n    const buf = Buffer.alloc(str.length * 2);\n    for (let i = 0; i < str.length; i++) {\n      buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n    }\n    return this._createEncoderBuffer(buf);\n  } else if (tag === 'numstr') {\n    if (!this._isNumstr(str)) {\n      return this.reporter.error('Encoding of string type: numstr supports ' +\n                                 'only digits and space');\n    }\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'printstr') {\n    if (!this._isPrintstr(str)) {\n      return this.reporter.error('Encoding of string type: printstr supports ' +\n                                 'only latin upper and lower case letters, ' +\n                                 'digits, space, apostrophe, left and rigth ' +\n                                 'parenthesis, plus sign, comma, hyphen, ' +\n                                 'dot, slash, colon, equal sign, ' +\n                                 'question mark');\n    }\n    return this._createEncoderBuffer(str);\n  } else if (/str$/.test(tag)) {\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'objDesc') {\n    return this._createEncoderBuffer(str);\n  } else {\n    return this.reporter.error('Encoding of string type: ' + tag +\n                               ' unsupported');\n  }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n  if (typeof id === 'string') {\n    if (!values)\n      return this.reporter.error('string objid given, but no values map found');\n    if (!values.hasOwnProperty(id))\n      return this.reporter.error('objid not found in values map');\n    id = values[id].split(/[\\s.]+/g);\n    for (let i = 0; i < id.length; i++)\n      id[i] |= 0;\n  } else if (Array.isArray(id)) {\n    id = id.slice();\n    for (let i = 0; i < id.length; i++)\n      id[i] |= 0;\n  }\n\n  if (!Array.isArray(id)) {\n    return this.reporter.error('objid() should be either array or string, ' +\n                               'got: ' + JSON.stringify(id));\n  }\n\n  if (!relative) {\n    if (id[1] >= 40)\n      return this.reporter.error('Second objid identifier OOB');\n    id.splice(0, 2, id[0] * 40 + id[1]);\n  }\n\n  // Count number of octets\n  let size = 0;\n  for (let i = 0; i < id.length; i++) {\n    let ident = id[i];\n    for (size++; ident >= 0x80; ident >>= 7)\n      size++;\n  }\n\n  const objid = Buffer.alloc(size);\n  let offset = objid.length - 1;\n  for (let i = id.length - 1; i >= 0; i--) {\n    let ident = id[i];\n    objid[offset--] = ident & 0x7f;\n    while ((ident >>= 7) > 0)\n      objid[offset--] = 0x80 | (ident & 0x7f);\n  }\n\n  return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n  if (num < 10)\n    return '0' + num;\n  else\n    return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n  let str;\n  const date = new Date(time);\n\n  if (tag === 'gentime') {\n    str = [\n      two(date.getUTCFullYear()),\n      two(date.getUTCMonth() + 1),\n      two(date.getUTCDate()),\n      two(date.getUTCHours()),\n      two(date.getUTCMinutes()),\n      two(date.getUTCSeconds()),\n      'Z'\n    ].join('');\n  } else if (tag === 'utctime') {\n    str = [\n      two(date.getUTCFullYear() % 100),\n      two(date.getUTCMonth() + 1),\n      two(date.getUTCDate()),\n      two(date.getUTCHours()),\n      two(date.getUTCMinutes()),\n      two(date.getUTCSeconds()),\n      'Z'\n    ].join('');\n  } else {\n    this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n  }\n\n  return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n  return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n  if (typeof num === 'string') {\n    if (!values)\n      return this.reporter.error('String int or enum given, but no values map');\n    if (!values.hasOwnProperty(num)) {\n      return this.reporter.error('Values map doesn\\'t contain: ' +\n                                 JSON.stringify(num));\n    }\n    num = values[num];\n  }\n\n  // Bignum, assume big endian\n  if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n    const numArray = num.toArray();\n    if (!num.sign && numArray[0] & 0x80) {\n      numArray.unshift(0);\n    }\n    num = Buffer.from(numArray);\n  }\n\n  if (Buffer.isBuffer(num)) {\n    let size = num.length;\n    if (num.length === 0)\n      size++;\n\n    const out = Buffer.alloc(size);\n    num.copy(out);\n    if (num.length === 0)\n      out[0] = 0;\n    return this._createEncoderBuffer(out);\n  }\n\n  if (num < 0x80)\n    return this._createEncoderBuffer(num);\n\n  if (num < 0x100)\n    return this._createEncoderBuffer([0, num]);\n\n  let size = 1;\n  for (let i = num; i >= 0x100; i >>= 8)\n    size++;\n\n  const out = new Array(size);\n  for (let i = out.length - 1; i >= 0; i--) {\n    out[i] = num & 0xff;\n    num >>= 8;\n  }\n  if(out[0] & 0x80) {\n    out.unshift(0);\n  }\n\n  return this._createEncoderBuffer(Buffer.from(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n  return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function')\n    entity = entity(obj);\n  return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n  const state = this._baseState;\n  let i;\n  if (state['default'] === null)\n    return false;\n\n  const data = dataBuffer.join();\n  if (state.defaultBuffer === undefined)\n    state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n  if (data.length !== state.defaultBuffer.length)\n    return false;\n\n  for (i=0; i < data.length; i++)\n    if (data[i] !== state.defaultBuffer[i])\n      return false;\n\n  return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n  let res;\n\n  if (tag === 'seqof')\n    tag = 'seq';\n  else if (tag === 'setof')\n    tag = 'set';\n\n  if (der.tagByName.hasOwnProperty(tag))\n    res = der.tagByName[tag];\n  else if (typeof tag === 'number' && (tag | 0) === tag)\n    res = tag;\n  else\n    return reporter.error('Unknown tag: ' + tag);\n\n  if (res >= 0x1f)\n    return reporter.error('Multi-octet tag encoding unsupported');\n\n  if (!primitive)\n    res |= 0x20;\n\n  res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n  return res;\n}\n", "'use strict';\n\nconst inherits = require('inherits');\n\nconst DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n  DEREncoder.call(this, entity);\n  this.enc = 'pem';\n}\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n  const buf = DEREncoder.prototype.encode.call(this, data);\n\n  const p = buf.toString('base64');\n  const out = [ '-----BEGIN ' + options.label + '-----' ];\n  for (let i = 0; i < p.length; i += 64)\n    out.push(p.slice(i, i + 64));\n  out.push('-----END ' + options.label + '-----');\n  return out.join('\\n');\n};\n", "'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n", "'use strict';\n\nconst inherits = require('inherits');\n\nconst bignum = require('bn.js');\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DERDecoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity;\n\n  // Construct base tree\n  this.tree = new DERNode();\n  this.tree._init(entity.body);\n}\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n  if (!DecoderBuffer.isDecoderBuffer(data)) {\n    data = new DecoderBuffer(data, options);\n  }\n\n  return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n  Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n  if (buffer.isEmpty())\n    return false;\n\n  const state = buffer.save();\n  const decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n  if (buffer.isError(decodedTag))\n    return decodedTag;\n\n  buffer.restore(state);\n\n  return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n    (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n  const decodedTag = derDecodeTag(buffer,\n    'Failed to decode tag of \"' + tag + '\"');\n  if (buffer.isError(decodedTag))\n    return decodedTag;\n\n  let len = derDecodeLen(buffer,\n    decodedTag.primitive,\n    'Failed to get length of \"' + tag + '\"');\n\n  // Failure\n  if (buffer.isError(len))\n    return len;\n\n  if (!any &&\n      decodedTag.tag !== tag &&\n      decodedTag.tagStr !== tag &&\n      decodedTag.tagStr + 'of' !== tag) {\n    return buffer.error('Failed to match tag: \"' + tag + '\"');\n  }\n\n  if (decodedTag.primitive || len !== null)\n    return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n  // Indefinite length... find END tag\n  const state = buffer.save();\n  const res = this._skipUntilEnd(\n    buffer,\n    'Failed to skip indefinite length body: \"' + this.tag + '\"');\n  if (buffer.isError(res))\n    return res;\n\n  len = buffer.offset - state.offset;\n  buffer.restore(state);\n  return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n  for (;;) {\n    const tag = derDecodeTag(buffer, fail);\n    if (buffer.isError(tag))\n      return tag;\n    const len = derDecodeLen(buffer, tag.primitive, fail);\n    if (buffer.isError(len))\n      return len;\n\n    let res;\n    if (tag.primitive || len !== null)\n      res = buffer.skip(len);\n    else\n      res = this._skipUntilEnd(buffer, fail);\n\n    // Failure\n    if (buffer.isError(res))\n      return res;\n\n    if (tag.tagStr === 'end')\n      break;\n  }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n  options) {\n  const result = [];\n  while (!buffer.isEmpty()) {\n    const possibleEnd = this._peekTag(buffer, 'end');\n    if (buffer.isError(possibleEnd))\n      return possibleEnd;\n\n    const res = decoder.decode(buffer, 'der', options);\n    if (buffer.isError(res) && possibleEnd)\n      break;\n    result.push(res);\n  }\n  return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n  if (tag === 'bitstr') {\n    const unused = buffer.readUInt8();\n    if (buffer.isError(unused))\n      return unused;\n    return { unused: unused, data: buffer.raw() };\n  } else if (tag === 'bmpstr') {\n    const raw = buffer.raw();\n    if (raw.length % 2 === 1)\n      return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n    let str = '';\n    for (let i = 0; i < raw.length / 2; i++) {\n      str += String.fromCharCode(raw.readUInt16BE(i * 2));\n    }\n    return str;\n  } else if (tag === 'numstr') {\n    const numstr = buffer.raw().toString('ascii');\n    if (!this._isNumstr(numstr)) {\n      return buffer.error('Decoding of string type: ' +\n                          'numstr unsupported characters');\n    }\n    return numstr;\n  } else if (tag === 'octstr') {\n    return buffer.raw();\n  } else if (tag === 'objDesc') {\n    return buffer.raw();\n  } else if (tag === 'printstr') {\n    const printstr = buffer.raw().toString('ascii');\n    if (!this._isPrintstr(printstr)) {\n      return buffer.error('Decoding of string type: ' +\n                          'printstr unsupported characters');\n    }\n    return printstr;\n  } else if (/str$/.test(tag)) {\n    return buffer.raw().toString();\n  } else {\n    return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n  }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n  let result;\n  const identifiers = [];\n  let ident = 0;\n  let subident = 0;\n  while (!buffer.isEmpty()) {\n    subident = buffer.readUInt8();\n    ident <<= 7;\n    ident |= subident & 0x7f;\n    if ((subident & 0x80) === 0) {\n      identifiers.push(ident);\n      ident = 0;\n    }\n  }\n  if (subident & 0x80)\n    identifiers.push(ident);\n\n  const first = (identifiers[0] / 40) | 0;\n  const second = identifiers[0] % 40;\n\n  if (relative)\n    result = identifiers;\n  else\n    result = [first, second].concat(identifiers.slice(1));\n\n  if (values) {\n    let tmp = values[result.join(' ')];\n    if (tmp === undefined)\n      tmp = values[result.join('.')];\n    if (tmp !== undefined)\n      result = tmp;\n  }\n\n  return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n  const str = buffer.raw().toString();\n\n  let year;\n  let mon;\n  let day;\n  let hour;\n  let min;\n  let sec;\n  if (tag === 'gentime') {\n    year = str.slice(0, 4) | 0;\n    mon = str.slice(4, 6) | 0;\n    day = str.slice(6, 8) | 0;\n    hour = str.slice(8, 10) | 0;\n    min = str.slice(10, 12) | 0;\n    sec = str.slice(12, 14) | 0;\n  } else if (tag === 'utctime') {\n    year = str.slice(0, 2) | 0;\n    mon = str.slice(2, 4) | 0;\n    day = str.slice(4, 6) | 0;\n    hour = str.slice(6, 8) | 0;\n    min = str.slice(8, 10) | 0;\n    sec = str.slice(10, 12) | 0;\n    if (year < 70)\n      year = 2000 + year;\n    else\n      year = 1900 + year;\n  } else {\n    return buffer.error('Decoding ' + tag + ' time is not supported yet');\n  }\n\n  return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull() {\n  return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n  const res = buffer.readUInt8();\n  if (buffer.isError(res))\n    return res;\n  else\n    return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n  // Bigint, return as it is (assume big endian)\n  const raw = buffer.raw();\n  let res = new bignum(raw);\n\n  if (values)\n    res = values[res.toString(10)] || res;\n\n  return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function')\n    entity = entity(obj);\n  return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n  let tag = buf.readUInt8(fail);\n  if (buf.isError(tag))\n    return tag;\n\n  const cls = der.tagClass[tag >> 6];\n  const primitive = (tag & 0x20) === 0;\n\n  // Multi-octet tag - load\n  if ((tag & 0x1f) === 0x1f) {\n    let oct = tag;\n    tag = 0;\n    while ((oct & 0x80) === 0x80) {\n      oct = buf.readUInt8(fail);\n      if (buf.isError(oct))\n        return oct;\n\n      tag <<= 7;\n      tag |= oct & 0x7f;\n    }\n  } else {\n    tag &= 0x1f;\n  }\n  const tagStr = der.tag[tag];\n\n  return {\n    cls: cls,\n    primitive: primitive,\n    tag: tag,\n    tagStr: tagStr\n  };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n  let len = buf.readUInt8(fail);\n  if (buf.isError(len))\n    return len;\n\n  // Indefinite form\n  if (!primitive && len === 0x80)\n    return null;\n\n  // Definite form\n  if ((len & 0x80) === 0) {\n    // Short form\n    return len;\n  }\n\n  // Long form\n  const num = len & 0x7f;\n  if (num > 4)\n    return buf.error('length octect is too long');\n\n  len = 0;\n  for (let i = 0; i < num; i++) {\n    len <<= 8;\n    const j = buf.readUInt8(fail);\n    if (buf.isError(j))\n      return j;\n    len |= j;\n  }\n\n  return len;\n}\n", "'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\n\nconst DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n  DERDecoder.call(this, entity);\n  this.enc = 'pem';\n}\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n  const lines = data.toString().split(/[\\r\\n]+/g);\n\n  const label = options.label.toUpperCase();\n\n  const re = /^-----(BEGIN|END) ([^-]+)-----$/;\n  let start = -1;\n  let end = -1;\n  for (let i = 0; i < lines.length; i++) {\n    const match = lines[i].match(re);\n    if (match === null)\n      continue;\n\n    if (match[2] !== label)\n      continue;\n\n    if (start === -1) {\n      if (match[1] !== 'BEGIN')\n        break;\n      start = i;\n    } else {\n      if (match[1] !== 'END')\n        break;\n      end = i;\n      break;\n    }\n  }\n  if (start === -1 || end === -1)\n    throw new Error('PEM section not found for: ' + label);\n\n  const base64 = lines.slice(start + 1, end).join('');\n  // Remove excessive symbols\n  base64.replace(/[^a-z0-9+/=]+/gi, '');\n\n  const input = Buffer.from(base64, 'base64');\n  return DERDecoder.prototype.decode.call(this, input, options);\n};\n", "'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n", "'use strict';\n\nconst encoders = require('./encoders');\nconst decoders = require('./decoders');\nconst inherits = require('inherits');\n\nconst api = exports;\n\napi.define = function define(name, body) {\n  return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n  this.name = name;\n  this.body = body;\n\n  this.decoders = {};\n  this.encoders = {};\n}\n\nEntity.prototype._createNamed = function createNamed(Base) {\n  const name = this.name;\n\n  function Generated(entity) {\n    this._initNamed(entity, name);\n  }\n  inherits(Generated, Base);\n  Generated.prototype._initNamed = function _initNamed(entity, name) {\n    Base.call(this, entity, name);\n  };\n\n  return new Generated(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n  enc = enc || 'der';\n  // Lazily create decoder\n  if (!this.decoders.hasOwnProperty(enc))\n    this.decoders[enc] = this._createNamed(decoders[enc]);\n  return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n  return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n  enc = enc || 'der';\n  // Lazily create encoder\n  if (!this.encoders.hasOwnProperty(enc))\n    this.encoders[enc] = this._createNamed(encoders[enc]);\n  return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n  return this._getEncoder(enc).encode(data, reporter);\n};\n", "'use strict';\n\nconst base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n", "'use strict';\n\nconst constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n  const res = {};\n\n  Object.keys(map).forEach(function(key) {\n    // Convert key to integer if it is stringified\n    if ((key | 0) == key)\n      key = key | 0;\n\n    const value = map[key];\n    res[value] = key;\n  });\n\n  return res;\n};\n\nconstants.der = require('./der');\n", "'use strict';\n\nconst asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n", "// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict'\n\nvar asn = require('asn1.js')\n\nvar Time = asn.define('Time', function () {\n  this.choice({\n    utcTime: this.utctime(),\n    generalTime: this.gentime()\n  })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n  this.seq().obj(\n    this.key('type').objid(),\n    this.key('value').any()\n  )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n  this.seq().obj(\n    this.key('algorithm').objid(),\n    this.key('parameters').optional(),\n    this.key('curve').objid().optional()\n  )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPublicKey').bitstr()\n  )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n  this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n  this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n  this.choice({\n    rdnSequence: this.use(RDNSequence)\n  })\n})\n\nvar Validity = asn.define('Validity', function () {\n  this.seq().obj(\n    this.key('notBefore').use(Time),\n    this.key('notAfter').use(Time)\n  )\n})\n\nvar Extension = asn.define('Extension', function () {\n  this.seq().obj(\n    this.key('extnID').objid(),\n    this.key('critical').bool().def(false),\n    this.key('extnValue').octstr()\n  )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n  this.seq().obj(\n    this.key('version').explicit(0).int().optional(),\n    this.key('serialNumber').int(),\n    this.key('signature').use(AlgorithmIdentifier),\n    this.key('issuer').use(Name),\n    this.key('validity').use(Validity),\n    this.key('subject').use(Name),\n    this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n    this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n    this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n    this.key('extensions').explicit(3).seqof(Extension).optional()\n  )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n  this.seq().obj(\n    this.key('tbsCertificate').use(TBSCertificate),\n    this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n    this.key('signatureValue').bitstr()\n  )\n})\n\nmodule.exports = X509Certificate\n", "// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('modulus').int(),\n    this.key('publicExponent').int(),\n    this.key('privateExponent').int(),\n    this.key('prime1').int(),\n    this.key('prime2').int(),\n    this.key('exponent1').int(),\n    this.key('exponent2').int(),\n    this.key('coefficient').int()\n  )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n  this.seq().obj(\n    this.key('modulus').int(),\n    this.key('publicExponent').int()\n  )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPublicKey').bitstr()\n  )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n  this.seq().obj(\n    this.key('algorithm').objid(),\n    this.key('none').null_().optional(),\n    this.key('curve').objid().optional(),\n    this.key('params').seq().obj(\n      this.key('p').int(),\n      this.key('q').int(),\n      this.key('g').int()\n    ).optional()\n  )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPrivateKey').octstr()\n  )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').seq().obj(\n      this.key('id').objid(),\n      this.key('decrypt').seq().obj(\n        this.key('kde').seq().obj(\n          this.key('id').objid(),\n          this.key('kdeparams').seq().obj(\n            this.key('salt').octstr(),\n            this.key('iters').int()\n          )\n        ),\n        this.key('cipher').seq().obj(\n          this.key('algo').objid(),\n          this.key('iv').octstr()\n        )\n      )\n    ),\n    this.key('subjectPrivateKey').octstr()\n  )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('p').int(),\n    this.key('q').int(),\n    this.key('g').int(),\n    this.key('pub_key').int(),\n    this.key('priv_key').int()\n  )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n  this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('privateKey').octstr(),\n    this.key('parameters').optional().explicit(0).use(ECParameters),\n    this.key('publicKey').optional().explicit(1).bitstr()\n  )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n  this.choice({\n    namedCurve: this.objid()\n  })\n})\n\nexports.signature = asn1.define('signature', function () {\n  this.seq().obj(\n    this.key('r').int(),\n    this.key('s').int()\n  )\n})\n", "{\"2.16.840.1.101.3.4.1.1\": \"aes-128-ecb\",\n\"2.16.840.1.101.3.4.1.2\": \"aes-128-cbc\",\n\"2.16.840.1.101.3.4.1.3\": \"aes-128-ofb\",\n\"2.16.840.1.101.3.4.1.4\": \"aes-128-cfb\",\n\"2.16.840.1.101.3.4.1.21\": \"aes-192-ecb\",\n\"2.16.840.1.101.3.4.1.22\": \"aes-192-cbc\",\n\"2.16.840.1.101.3.4.1.23\": \"aes-192-ofb\",\n\"2.16.840.1.101.3.4.1.24\": \"aes-192-cfb\",\n\"2.16.840.1.101.3.4.1.41\": \"aes-256-ecb\",\n\"2.16.840.1.101.3.4.1.42\": \"aes-256-cbc\",\n\"2.16.840.1.101.3.4.1.43\": \"aes-256-ofb\",\n\"2.16.840.1.101.3.4.1.44\": \"aes-256-cfb\"\n}", "// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r+/=]+)[\\n\\r]+/m\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r+/=]+)-----END \\1-----$/m\nvar evp = require('evp_bytestokey')\nvar ciphers = require('browserify-aes')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = function (okey, password) {\n  var key = okey.toString()\n  var match = key.match(findProc)\n  var decrypted\n  if (!match) {\n    var match2 = key.match(fullRegex)\n    decrypted = Buffer.from(match2[2].replace(/[\\r\\n]/g, ''), 'base64')\n  } else {\n    var suite = 'aes' + match[1]\n    var iv = Buffer.from(match[2], 'hex')\n    var cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64')\n    var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n    var out = []\n    var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n    out.push(cipher.update(cipherText))\n    out.push(cipher.final())\n    decrypted = Buffer.concat(out)\n  }\n  var tag = key.match(startRegex)[1]\n  return {\n    tag: tag,\n    data: decrypted\n  }\n}\n", "var asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n  var password\n  if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n    password = buffer.passphrase\n    buffer = buffer.key\n  }\n  if (typeof buffer === 'string') {\n    buffer = Buffer.from(buffer)\n  }\n\n  var stripped = fixProc(buffer, password)\n\n  var type = stripped.tag\n  var data = stripped.data\n  var subtype, ndata\n  switch (type) {\n    case 'CERTIFICATE':\n      ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n      // falls through\n    case 'PUBLIC KEY':\n      if (!ndata) {\n        ndata = asn1.PublicKey.decode(data, 'der')\n      }\n      subtype = ndata.algorithm.algorithm.join('.')\n      switch (subtype) {\n        case '1.2.840.113549.1.1.1':\n          return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n        case '1.2.840.10045.2.1':\n          ndata.subjectPrivateKey = ndata.subjectPublicKey\n          return {\n            type: 'ec',\n            data: ndata\n          }\n        case '1.2.840.10040.4.1':\n          ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n          return {\n            type: 'dsa',\n            data: ndata.algorithm.params\n          }\n        default: throw new Error('unknown key id ' + subtype)\n      }\n      // throw new Error('unknown key type ' + type)\n    case 'ENCRYPTED PRIVATE KEY':\n      data = asn1.EncryptedPrivateKey.decode(data, 'der')\n      data = decrypt(data, password)\n      // falls through\n    case 'PRIVATE KEY':\n      ndata = asn1.PrivateKey.decode(data, 'der')\n      subtype = ndata.algorithm.algorithm.join('.')\n      switch (subtype) {\n        case '1.2.840.113549.1.1.1':\n          return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n        case '1.2.840.10045.2.1':\n          return {\n            curve: ndata.algorithm.curve,\n            privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n          }\n        case '1.2.840.10040.4.1':\n          ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n          return {\n            type: 'dsa',\n            params: ndata.algorithm.params\n          }\n        default: throw new Error('unknown key id ' + subtype)\n      }\n      // throw new Error('unknown key type ' + type)\n    case 'RSA PUBLIC KEY':\n      return asn1.RSAPublicKey.decode(data, 'der')\n    case 'RSA PRIVATE KEY':\n      return asn1.RSAPrivateKey.decode(data, 'der')\n    case 'DSA PRIVATE KEY':\n      return {\n        type: 'dsa',\n        params: asn1.DSAPrivateKey.decode(data, 'der')\n      }\n    case 'EC PRIVATE KEY':\n      data = asn1.ECPrivateKey.decode(data, 'der')\n      return {\n        curve: data.parameters.value,\n        privateKey: data.privateKey\n      }\n    default: throw new Error('unknown key type ' + type)\n  }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n  var salt = data.algorithm.decrypt.kde.kdeparams.salt\n  var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n  var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n  var iv = data.algorithm.decrypt.cipher.iv\n  var cipherText = data.subjectPrivateKey\n  var keylen = parseInt(algo.split('-')[1], 10) / 8\n  var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n  var cipher = ciphers.createDecipheriv(algo, key, iv)\n  var out = []\n  out.push(cipher.update(cipherText))\n  out.push(cipher.final())\n  return Buffer.concat(out)\n}\n", "{\n  \"1.3.132.0.10\": \"secp256k1\",\n  \"1.3.132.0.33\": \"p224\",\n  \"1.2.840.10045.3.1.1\": \"p192\",\n  \"1.2.840.10045.3.1.7\": \"p256\",\n  \"1.3.132.0.34\": \"p384\",\n  \"1.3.132.0.35\": \"p521\"\n}\n", "// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar createHmac = require('create-hmac')\nvar crt = require('browserify-rsa')\nvar EC = require('elliptic').ec\nvar BN = require('bn.js')\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction sign (hash, key, hashType, signType, tag) {\n  var priv = parseKeys(key)\n  if (priv.curve) {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n    return ecSign(hash, priv)\n  } else if (priv.type === 'dsa') {\n    if (signType !== 'dsa') throw new Error('wrong private key type')\n    return dsaSign(hash, priv, hashType)\n  } else {\n    if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n  }\n  hash = Buffer.concat([tag, hash])\n  var len = priv.modulus.byteLength()\n  var pad = [0, 1]\n  while (hash.length + pad.length + 1 < len) pad.push(0xff)\n  pad.push(0x00)\n  var i = -1\n  while (++i < hash.length) pad.push(hash[i])\n\n  var out = crt(pad, priv)\n  return out\n}\n\nfunction ecSign (hash, priv) {\n  var curveId = curves[priv.curve.join('.')]\n  if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))\n\n  var curve = new EC(curveId)\n  var key = curve.keyFromPrivate(priv.privateKey)\n  var out = key.sign(hash)\n\n  return Buffer.from(out.toDER())\n}\n\nfunction dsaSign (hash, priv, algo) {\n  var x = priv.params.priv_key\n  var p = priv.params.p\n  var q = priv.params.q\n  var g = priv.params.g\n  var r = new BN(0)\n  var k\n  var H = bits2int(hash, q).mod(q)\n  var s = false\n  var kv = getKey(x, q, hash, algo)\n  while (s === false) {\n    k = makeKey(q, kv, algo)\n    r = makeR(g, k, p, q)\n    s = k.invm(q).imul(H.add(x.mul(r))).mod(q)\n    if (s.cmpn(0) === 0) {\n      s = false\n      r = new BN(0)\n    }\n  }\n  return toDER(r, s)\n}\n\nfunction toDER (r, s) {\n  r = r.toArray()\n  s = s.toArray()\n\n  // Pad values\n  if (r[0] & 0x80) r = [0].concat(r)\n  if (s[0] & 0x80) s = [0].concat(s)\n\n  var total = r.length + s.length + 4\n  var res = [0x30, total, 0x02, r.length]\n  res = res.concat(r, [0x02, s.length], s)\n  return Buffer.from(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n  x = Buffer.from(x.toArray())\n  if (x.length < q.byteLength()) {\n    var zeros = Buffer.alloc(q.byteLength() - x.length)\n    x = Buffer.concat([zeros, x])\n  }\n  var hlen = hash.length\n  var hbits = bits2octets(hash, q)\n  var v = Buffer.alloc(hlen)\n  v.fill(1)\n  var k = Buffer.alloc(hlen)\n  k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest()\n  v = createHmac(algo, k).update(v).digest()\n  k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest()\n  v = createHmac(algo, k).update(v).digest()\n  return { k: k, v: v }\n}\n\nfunction bits2int (obits, q) {\n  var bits = new BN(obits)\n  var shift = (obits.length << 3) - q.bitLength()\n  if (shift > 0) bits.ishrn(shift)\n  return bits\n}\n\nfunction bits2octets (bits, q) {\n  bits = bits2int(bits, q)\n  bits = bits.mod(q)\n  var out = Buffer.from(bits.toArray())\n  if (out.length < q.byteLength()) {\n    var zeros = Buffer.alloc(q.byteLength() - out.length)\n    out = Buffer.concat([zeros, out])\n  }\n  return out\n}\n\nfunction makeKey (q, kv, algo) {\n  var t\n  var k\n\n  do {\n    t = Buffer.alloc(0)\n\n    while (t.length * 8 < q.bitLength()) {\n      kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n      t = Buffer.concat([t, kv.v])\n    }\n\n    k = bits2int(t, q)\n    kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest()\n    kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n  } while (k.cmp(q) !== -1)\n\n  return k\n}\n\nfunction makeR (g, k, p, q) {\n  return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)\n}\n\nmodule.exports = sign\nmodule.exports.getKey = getKey\nmodule.exports.makeKey = makeKey\n", "// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar BN = require('bn.js')\nvar EC = require('elliptic').ec\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction verify (sig, hash, key, signType, tag) {\n  var pub = parseKeys(key)\n  if (pub.type === 'ec') {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n    return ecVerify(sig, hash, pub)\n  } else if (pub.type === 'dsa') {\n    if (signType !== 'dsa') throw new Error('wrong public key type')\n    return dsaVerify(sig, hash, pub)\n  } else {\n    if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n  }\n  hash = Buffer.concat([tag, hash])\n  var len = pub.modulus.byteLength()\n  var pad = [1]\n  var padNum = 0\n  while (hash.length + pad.length + 2 < len) {\n    pad.push(0xff)\n    padNum++\n  }\n  pad.push(0x00)\n  var i = -1\n  while (++i < hash.length) {\n    pad.push(hash[i])\n  }\n  pad = Buffer.from(pad)\n  var red = BN.mont(pub.modulus)\n  sig = new BN(sig).toRed(red)\n\n  sig = sig.redPow(new BN(pub.publicExponent))\n  sig = Buffer.from(sig.fromRed().toArray())\n  var out = padNum < 8 ? 1 : 0\n  len = Math.min(sig.length, pad.length)\n  if (sig.length !== pad.length) out = 1\n\n  i = -1\n  while (++i < len) out |= sig[i] ^ pad[i]\n  return out === 0\n}\n\nfunction ecVerify (sig, hash, pub) {\n  var curveId = curves[pub.data.algorithm.curve.join('.')]\n  if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))\n\n  var curve = new EC(curveId)\n  var pubkey = pub.data.subjectPrivateKey.data\n\n  return curve.verify(hash, sig, pubkey)\n}\n\nfunction dsaVerify (sig, hash, pub) {\n  var p = pub.data.p\n  var q = pub.data.q\n  var g = pub.data.g\n  var y = pub.data.pub_key\n  var unpacked = parseKeys.signature.decode(sig, 'der')\n  var s = unpacked.s\n  var r = unpacked.r\n  checkValue(s, q)\n  checkValue(r, q)\n  var montp = BN.mont(p)\n  var w = s.invm(q)\n  var v = g.toRed(montp)\n    .redPow(new BN(hash).mul(w).mod(q))\n    .fromRed()\n    .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n    .mod(p)\n    .mod(q)\n  return v.cmp(r) === 0\n}\n\nfunction checkValue (b, q) {\n  if (b.cmpn(0) <= 0) throw new Error('invalid sig')\n  if (b.cmp(q) >= q) throw new Error('invalid sig')\n}\n\nmodule.exports = verify\n", "var Buffer = require('safe-buffer').Buffer\nvar createHash = require('create-hash')\nvar stream = require('readable-stream')\nvar inherits = require('inherits')\nvar sign = require('./sign')\nvar verify = require('./verify')\n\nvar algorithms = require('./algorithms.json')\nObject.keys(algorithms).forEach(function (key) {\n  algorithms[key].id = Buffer.from(algorithms[key].id, 'hex')\n  algorithms[key.toLowerCase()] = algorithms[key]\n})\n\nfunction Sign (algorithm) {\n  stream.Writable.call(this)\n\n  var data = algorithms[algorithm]\n  if (!data) throw new Error('Unknown message digest')\n\n  this._hashType = data.hash\n  this._hash = createHash(data.hash)\n  this._tag = data.id\n  this._signType = data.sign\n}\ninherits(Sign, stream.Writable)\n\nSign.prototype._write = function _write (data, _, done) {\n  this._hash.update(data)\n  done()\n}\n\nSign.prototype.update = function update (data, enc) {\n  if (typeof data === 'string') data = Buffer.from(data, enc)\n\n  this._hash.update(data)\n  return this\n}\n\nSign.prototype.sign = function signMethod (key, enc) {\n  this.end()\n  var hash = this._hash.digest()\n  var sig = sign(hash, key, this._hashType, this._signType, this._tag)\n\n  return enc ? sig.toString(enc) : sig\n}\n\nfunction Verify (algorithm) {\n  stream.Writable.call(this)\n\n  var data = algorithms[algorithm]\n  if (!data) throw new Error('Unknown message digest')\n\n  this._hash = createHash(data.hash)\n  this._tag = data.id\n  this._signType = data.sign\n}\ninherits(Verify, stream.Writable)\n\nVerify.prototype._write = function _write (data, _, done) {\n  this._hash.update(data)\n  done()\n}\n\nVerify.prototype.update = function update (data, enc) {\n  if (typeof data === 'string') data = Buffer.from(data, enc)\n\n  this._hash.update(data)\n  return this\n}\n\nVerify.prototype.verify = function verifyMethod (key, sig, enc) {\n  if (typeof sig === 'string') sig = Buffer.from(sig, enc)\n\n  this.end()\n  var hash = this._hash.digest()\n  return verify(sig, hash, key, this._signType, this._tag)\n}\n\nfunction createSign (algorithm) {\n  return new Sign(algorithm)\n}\n\nfunction createVerify (algorithm) {\n  return new Verify(algorithm)\n}\n\nmodule.exports = {\n  Sign: createSign,\n  Verify: createVerify,\n  createSign: createSign,\n  createVerify: createVerify\n}\n", "var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n  return new ECDH(curve)\n}\n\nvar aliases = {\n  secp256k1: {\n    name: 'secp256k1',\n    byteLength: 32\n  },\n  secp224r1: {\n    name: 'p224',\n    byteLength: 28\n  },\n  prime256v1: {\n    name: 'p256',\n    byteLength: 32\n  },\n  prime192v1: {\n    name: 'p192',\n    byteLength: 24\n  },\n  ed25519: {\n    name: 'ed25519',\n    byteLength: 32\n  },\n  secp384r1: {\n    name: 'p384',\n    byteLength: 48\n  },\n  secp521r1: {\n    name: 'p521',\n    byteLength: 66\n  }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n  this.curveType = aliases[curve]\n  if (!this.curveType) {\n    this.curveType = {\n      name: curve\n    }\n  }\n  this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n  this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n  this.keys = this.curve.genKeyPair()\n  return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n  inenc = inenc || 'utf8'\n  if (!Buffer.isBuffer(other)) {\n    other = new Buffer(other, inenc)\n  }\n  var otherPub = this.curve.keyFromPublic(other).getPublic()\n  var out = otherPub.mul(this.keys.getPrivate()).getX()\n  return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n  var key = this.keys.getPublic(format === 'compressed', true)\n  if (format === 'hybrid') {\n    if (key[key.length - 1] % 2) {\n      key[0] = 7\n    } else {\n      key[0] = 6\n    }\n  }\n  return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n  return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n  enc = enc || 'utf8'\n  if (!Buffer.isBuffer(pub)) {\n    pub = new Buffer(pub, enc)\n  }\n  this.keys._importPublic(pub)\n  return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n  enc = enc || 'utf8'\n  if (!Buffer.isBuffer(priv)) {\n    priv = new Buffer(priv, enc)\n  }\n\n  var _priv = new BN(priv)\n  _priv = _priv.toString(16)\n  this.keys = this.curve.genKeyPair()\n  this.keys._importPrivate(_priv)\n  return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n  if (!Array.isArray(bn)) {\n    bn = bn.toArray()\n  }\n  var buf = new Buffer(bn)\n  if (len && buf.length < len) {\n    var zeros = new Buffer(len - buf.length)\n    zeros.fill(0)\n    buf = Buffer.concat([zeros, buf])\n  }\n  if (!enc) {\n    return buf\n  } else {\n    return buf.toString(enc)\n  }\n}\n", "var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n  var t = Buffer.alloc(0)\n  var i = 0\n  var c\n  while (t.length < len) {\n    c = i2ops(i++)\n    t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n  }\n  return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n  var out = Buffer.allocUnsafe(4)\n  out.writeUInt32BE(c, 0)\n  return out\n}\n", "module.exports = function xor (a, b) {\n  var len = a.length\n  var i = -1\n  while (++i < len) {\n    a[i] ^= b[i]\n  }\n  return a\n}\n", "var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n  return Buffer.from(paddedMsg\n    .toRed(BN.mont(key.modulus))\n    .redPow(new BN(key.publicExponent))\n    .fromRed()\n    .toArray())\n}\n\nmodule.exports = withPublic\n", "var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n  var padding\n  if (publicKey.padding) {\n    padding = publicKey.padding\n  } else if (reverse) {\n    padding = 1\n  } else {\n    padding = 4\n  }\n  var key = parseKeys(publicKey)\n  var paddedMsg\n  if (padding === 4) {\n    paddedMsg = oaep(key, msg)\n  } else if (padding === 1) {\n    paddedMsg = pkcs1(key, msg, reverse)\n  } else if (padding === 3) {\n    paddedMsg = new BN(msg)\n    if (paddedMsg.cmp(key.modulus) >= 0) {\n      throw new Error('data too long for modulus')\n    }\n  } else {\n    throw new Error('unknown padding')\n  }\n  if (reverse) {\n    return crt(paddedMsg, key)\n  } else {\n    return withPublic(paddedMsg, key)\n  }\n}\n\nfunction oaep (key, msg) {\n  var k = key.modulus.byteLength()\n  var mLen = msg.length\n  var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n  var hLen = iHash.length\n  var hLen2 = 2 * hLen\n  if (mLen > k - hLen2 - 2) {\n    throw new Error('message too long')\n  }\n  var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n  var dblen = k - hLen - 1\n  var seed = randomBytes(hLen)\n  var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n  var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n  return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n  var mLen = msg.length\n  var k = key.modulus.byteLength()\n  if (mLen > k - 11) {\n    throw new Error('message too long')\n  }\n  var ps\n  if (reverse) {\n    ps = Buffer.alloc(k - mLen - 3, 0xff)\n  } else {\n    ps = nonZero(k - mLen - 3)\n  }\n  return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n  var out = Buffer.allocUnsafe(len)\n  var i = 0\n  var cache = randomBytes(len * 2)\n  var cur = 0\n  var num\n  while (i < len) {\n    if (cur === cache.length) {\n      cache = randomBytes(len * 2)\n      cur = 0\n    }\n    num = cache[cur++]\n    if (num) {\n      out[i++] = num\n    }\n  }\n  return out\n}\n", "var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n  var padding\n  if (privateKey.padding) {\n    padding = privateKey.padding\n  } else if (reverse) {\n    padding = 1\n  } else {\n    padding = 4\n  }\n\n  var key = parseKeys(privateKey)\n  var k = key.modulus.byteLength()\n  if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n    throw new Error('decryption error')\n  }\n  var msg\n  if (reverse) {\n    msg = withPublic(new BN(enc), key)\n  } else {\n    msg = crt(enc, key)\n  }\n  var zBuffer = Buffer.alloc(k - msg.length)\n  msg = Buffer.concat([zBuffer, msg], k)\n  if (padding === 4) {\n    return oaep(key, msg)\n  } else if (padding === 1) {\n    return pkcs1(key, msg, reverse)\n  } else if (padding === 3) {\n    return msg\n  } else {\n    throw new Error('unknown padding')\n  }\n}\n\nfunction oaep (key, msg) {\n  var k = key.modulus.byteLength()\n  var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n  var hLen = iHash.length\n  if (msg[0] !== 0) {\n    throw new Error('decryption error')\n  }\n  var maskedSeed = msg.slice(1, hLen + 1)\n  var maskedDb = msg.slice(hLen + 1)\n  var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n  var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n  if (compare(iHash, db.slice(0, hLen))) {\n    throw new Error('decryption error')\n  }\n  var i = hLen\n  while (db[i] === 0) {\n    i++\n  }\n  if (db[i++] !== 1) {\n    throw new Error('decryption error')\n  }\n  return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n  var p1 = msg.slice(0, 2)\n  var i = 2\n  var status = 0\n  while (msg[i++] !== 0) {\n    if (i >= msg.length) {\n      status++\n      break\n    }\n  }\n  var ps = msg.slice(2, i - 1)\n\n  if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n    status++\n  }\n  if (ps.length < 8) {\n    status++\n  }\n  if (status) {\n    throw new Error('decryption error')\n  }\n  return msg.slice(i)\n}\nfunction compare (a, b) {\n  a = Buffer.from(a)\n  b = Buffer.from(b)\n  var dif = 0\n  var len = a.length\n  if (a.length !== b.length) {\n    dif++\n    len = Math.min(a.length, b.length)\n  }\n  var i = -1\n  while (++i < len) {\n    dif += (a[i] ^ b[i])\n  }\n  return dif\n}\n", "exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n  return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n  return exports.privateDecrypt(key, buf, true)\n}\n", "'use strict'\n\nfunction oldBrowser () {\n  throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n  if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n    throw new TypeError('offset must be a number')\n  }\n\n  if (offset > kMaxUint32 || offset < 0) {\n    throw new TypeError('offset must be a uint32')\n  }\n\n  if (offset > kBufferMaxLength || offset > length) {\n    throw new RangeError('offset out of range')\n  }\n}\n\nfunction assertSize (size, offset, length) {\n  if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n    throw new TypeError('size must be a number')\n  }\n\n  if (size > kMaxUint32 || size < 0) {\n    throw new TypeError('size must be a uint32')\n  }\n\n  if (size + offset > length || size > kBufferMaxLength) {\n    throw new RangeError('buffer too small')\n  }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n  exports.randomFill = randomFill\n  exports.randomFillSync = randomFillSync\n} else {\n  exports.randomFill = oldBrowser\n  exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n  if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n    throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n  }\n\n  if (typeof offset === 'function') {\n    cb = offset\n    offset = 0\n    size = buf.length\n  } else if (typeof size === 'function') {\n    cb = size\n    size = buf.length - offset\n  } else if (typeof cb !== 'function') {\n    throw new TypeError('\"cb\" argument must be a function')\n  }\n  assertOffset(offset, buf.length)\n  assertSize(size, offset, buf.length)\n  return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n  if (process.browser) {\n    var ourBuf = buf.buffer\n    var uint = new Uint8Array(ourBuf, offset, size)\n    crypto.getRandomValues(uint)\n    if (cb) {\n      process.nextTick(function () {\n        cb(null, buf)\n      })\n      return\n    }\n    return buf\n  }\n  if (cb) {\n    randombytes(size, function (err, bytes) {\n      if (err) {\n        return cb(err)\n      }\n      bytes.copy(buf, offset)\n      cb(null, buf)\n    })\n    return\n  }\n  var bytes = randombytes(size)\n  bytes.copy(buf, offset)\n  return buf\n}\nfunction randomFillSync (buf, offset, size) {\n  if (typeof offset === 'undefined') {\n    offset = 0\n  }\n  if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n    throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n  }\n\n  assertOffset(offset, buf.length)\n\n  if (size === undefined) size = buf.length - offset\n\n  assertSize(size, offset, buf.length)\n\n  return actualFill(buf, offset, size)\n}\n", "'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n  return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n//   'createCredentials'\n// ].forEach(function (name) {\n//   exports[name] = function () {\n//     throw new Error([\n//       'sorry, ' + name + ' is not implemented yet',\n//       'we accept pull requests',\n//       'https://github.com/crypto-browserify/crypto-browserify'\n//     ].join('\\n'))\n//   }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n  throw new Error([\n    'sorry, createCredentials is not implemented yet',\n    'we accept pull requests',\n    'https://github.com/crypto-browserify/crypto-browserify'\n  ].join('\\n'))\n}\n\nexports.constants = {\n  'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n  'DH_CHECK_P_NOT_PRIME': 1,\n  'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n  'DH_NOT_SUITABLE_GENERATOR': 8,\n  'NPN_ENABLED': 1,\n  'ALPN_ENABLED': 1,\n  'RSA_PKCS1_PADDING': 1,\n  'RSA_SSLV23_PADDING': 2,\n  'RSA_NO_PADDING': 3,\n  'RSA_PKCS1_OAEP_PADDING': 4,\n  'RSA_X931_PADDING': 5,\n  'RSA_PKCS1_PSS_PADDING': 6,\n  'POINT_CONVERSION_COMPRESSED': 2,\n  'POINT_CONVERSION_UNCOMPRESSED': 4,\n  'POINT_CONVERSION_HYBRID': 6\n}\n", "var r;\n\nmodule.exports = function rand(len) {\n  if (!r)\n    r = new Rand(null);\n\n  return r.generate(len);\n};\n\nfunction Rand(rand) {\n  this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n  return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n  if (this.rand.getBytes)\n    return this.rand.getBytes(n);\n\n  var res = new Uint8Array(n);\n  for (var i = 0; i < res.length; i++)\n    res[i] = this.rand.getByte();\n  return res;\n};\n\nif (typeof self === 'object') {\n  if (self.crypto && self.crypto.getRandomValues) {\n    // Modern browsers\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.crypto.getRandomValues(arr);\n      return arr;\n    };\n  } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n    // IE\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.msCrypto.getRandomValues(arr);\n      return arr;\n    };\n\n  // Safari's WebWorkers do not have `crypto`\n  } else if (typeof window === 'object') {\n    // Old junk\n    Rand.prototype._rand = function() {\n      throw new Error('Not implemented yet');\n    };\n  }\n} else {\n  // Node.js or Web worker with no crypto support\n  try {\n    var crypto = require('crypto');\n    if (typeof crypto.randomBytes !== 'function')\n      throw new Error('Not supported');\n\n    Rand.prototype._rand = function _rand(n) {\n      return crypto.randomBytes(n);\n    };\n  } catch (e) {\n  }\n}\n", "'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n  this.type = type;\n  this.p = new BN(conf.p, 16);\n\n  // Use Montgomery, when there is no fast reduction for the prime\n  this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n  // Useful for many curves\n  this.zero = new BN(0).toRed(this.red);\n  this.one = new BN(1).toRed(this.red);\n  this.two = new BN(2).toRed(this.red);\n\n  // Curve configuration, optional\n  this.n = conf.n && new BN(conf.n, 16);\n  this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n  // Temporary arrays\n  this._wnafT1 = new Array(4);\n  this._wnafT2 = new Array(4);\n  this._wnafT3 = new Array(4);\n  this._wnafT4 = new Array(4);\n\n  this._bitLength = this.n ? this.n.bitLength() : 0;\n\n  // Generalized Greg Maxwell's trick\n  var adjustCount = this.n && this.p.div(this.n);\n  if (!adjustCount || adjustCount.cmpn(100) > 0) {\n    this.redN = null;\n  } else {\n    this._maxwellTrick = true;\n    this.redN = this.n.toRed(this.red);\n  }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n  assert(p.precomputed);\n  var doubles = p._getDoubles();\n\n  var naf = getNAF(k, 1, this._bitLength);\n  var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n  I /= 3;\n\n  // Translate into more windowed form\n  var repr = [];\n  var j;\n  var nafW;\n  for (j = 0; j < naf.length; j += doubles.step) {\n    nafW = 0;\n    for (var l = j + doubles.step - 1; l >= j; l--)\n      nafW = (nafW << 1) + naf[l];\n    repr.push(nafW);\n  }\n\n  var a = this.jpoint(null, null, null);\n  var b = this.jpoint(null, null, null);\n  for (var i = I; i > 0; i--) {\n    for (j = 0; j < repr.length; j++) {\n      nafW = repr[j];\n      if (nafW === i)\n        b = b.mixedAdd(doubles.points[j]);\n      else if (nafW === -i)\n        b = b.mixedAdd(doubles.points[j].neg());\n    }\n    a = a.add(b);\n  }\n  return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n  var w = 4;\n\n  // Precompute window\n  var nafPoints = p._getNAFPoints(w);\n  w = nafPoints.wnd;\n  var wnd = nafPoints.points;\n\n  // Get NAF form\n  var naf = getNAF(k, w, this._bitLength);\n\n  // Add `this`*(N+1) for every w-NAF index\n  var acc = this.jpoint(null, null, null);\n  for (var i = naf.length - 1; i >= 0; i--) {\n    // Count zeroes\n    for (var l = 0; i >= 0 && naf[i] === 0; i--)\n      l++;\n    if (i >= 0)\n      l++;\n    acc = acc.dblp(l);\n\n    if (i < 0)\n      break;\n    var z = naf[i];\n    assert(z !== 0);\n    if (p.type === 'affine') {\n      // J +- P\n      if (z > 0)\n        acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n    } else {\n      // J +- J\n      if (z > 0)\n        acc = acc.add(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.add(wnd[(-z - 1) >> 1].neg());\n    }\n  }\n  return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n  points,\n  coeffs,\n  len,\n  jacobianResult) {\n  var wndWidth = this._wnafT1;\n  var wnd = this._wnafT2;\n  var naf = this._wnafT3;\n\n  // Fill all arrays\n  var max = 0;\n  var i;\n  var j;\n  var p;\n  for (i = 0; i < len; i++) {\n    p = points[i];\n    var nafPoints = p._getNAFPoints(defW);\n    wndWidth[i] = nafPoints.wnd;\n    wnd[i] = nafPoints.points;\n  }\n\n  // Comb small window NAFs\n  for (i = len - 1; i >= 1; i -= 2) {\n    var a = i - 1;\n    var b = i;\n    if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n      naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n      naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n      max = Math.max(naf[a].length, max);\n      max = Math.max(naf[b].length, max);\n      continue;\n    }\n\n    var comb = [\n      points[a], /* 1 */\n      null, /* 3 */\n      null, /* 5 */\n      points[b], /* 7 */\n    ];\n\n    // Try to avoid Projective points, if possible\n    if (points[a].y.cmp(points[b].y) === 0) {\n      comb[1] = points[a].add(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].add(points[b].neg());\n    } else {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    }\n\n    var index = [\n      -3, /* -1 -1 */\n      -1, /* -1 0 */\n      -5, /* -1 1 */\n      -7, /* 0 -1 */\n      0, /* 0 0 */\n      7, /* 0 1 */\n      5, /* 1 -1 */\n      1, /* 1 0 */\n      3,  /* 1 1 */\n    ];\n\n    var jsf = getJSF(coeffs[a], coeffs[b]);\n    max = Math.max(jsf[0].length, max);\n    naf[a] = new Array(max);\n    naf[b] = new Array(max);\n    for (j = 0; j < max; j++) {\n      var ja = jsf[0][j] | 0;\n      var jb = jsf[1][j] | 0;\n\n      naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n      naf[b][j] = 0;\n      wnd[a] = comb;\n    }\n  }\n\n  var acc = this.jpoint(null, null, null);\n  var tmp = this._wnafT4;\n  for (i = max; i >= 0; i--) {\n    var k = 0;\n\n    while (i >= 0) {\n      var zero = true;\n      for (j = 0; j < len; j++) {\n        tmp[j] = naf[j][i] | 0;\n        if (tmp[j] !== 0)\n          zero = false;\n      }\n      if (!zero)\n        break;\n      k++;\n      i--;\n    }\n    if (i >= 0)\n      k++;\n    acc = acc.dblp(k);\n    if (i < 0)\n      break;\n\n    for (j = 0; j < len; j++) {\n      var z = tmp[j];\n      p;\n      if (z === 0)\n        continue;\n      else if (z > 0)\n        p = wnd[j][(z - 1) >> 1];\n      else if (z < 0)\n        p = wnd[j][(-z - 1) >> 1].neg();\n\n      if (p.type === 'affine')\n        acc = acc.mixedAdd(p);\n      else\n        acc = acc.add(p);\n    }\n  }\n  // Zeroify references\n  for (i = 0; i < len; i++)\n    wnd[i] = null;\n\n  if (jacobianResult)\n    return acc;\n  else\n    return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n  this.curve = curve;\n  this.type = type;\n  this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n  throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n  return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  bytes = utils.toArray(bytes, enc);\n\n  var len = this.p.byteLength();\n\n  // uncompressed, hybrid-odd, hybrid-even\n  if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n      bytes.length - 1 === 2 * len) {\n    if (bytes[0] === 0x06)\n      assert(bytes[bytes.length - 1] % 2 === 0);\n    else if (bytes[0] === 0x07)\n      assert(bytes[bytes.length - 1] % 2 === 1);\n\n    var res =  this.point(bytes.slice(1, 1 + len),\n      bytes.slice(1 + len, 1 + 2 * len));\n\n    return res;\n  } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n              bytes.length - 1 === len) {\n    return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n  }\n  throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n  return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n  var len = this.curve.p.byteLength();\n  var x = this.getX().toArray('be', len);\n\n  if (compact)\n    return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n  return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n  return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n  if (this.precomputed)\n    return this;\n\n  var precomputed = {\n    doubles: null,\n    naf: null,\n    beta: null,\n  };\n  precomputed.naf = this._getNAFPoints(8);\n  precomputed.doubles = this._getDoubles(4, power);\n  precomputed.beta = this._getBeta();\n  this.precomputed = precomputed;\n\n  return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n  if (!this.precomputed)\n    return false;\n\n  var doubles = this.precomputed.doubles;\n  if (!doubles)\n    return false;\n\n  return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n  if (this.precomputed && this.precomputed.doubles)\n    return this.precomputed.doubles;\n\n  var doubles = [ this ];\n  var acc = this;\n  for (var i = 0; i < power; i += step) {\n    for (var j = 0; j < step; j++)\n      acc = acc.dbl();\n    doubles.push(acc);\n  }\n  return {\n    step: step,\n    points: doubles,\n  };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n  if (this.precomputed && this.precomputed.naf)\n    return this.precomputed.naf;\n\n  var res = [ this ];\n  var max = (1 << wnd) - 1;\n  var dbl = max === 1 ? null : this.dbl();\n  for (var i = 1; i < max; i++)\n    res[i] = res[i - 1].add(dbl);\n  return {\n    wnd: wnd,\n    points: res,\n  };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n  return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n  var r = this;\n  for (var i = 0; i < k; i++)\n    r = r.dbl();\n  return r;\n};\n", "'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n  Base.call(this, 'short', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.tinv = this.two.redInvm();\n\n  this.zeroA = this.a.fromRed().cmpn(0) === 0;\n  this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n  // If the curve is endomorphic, precalculate beta and lambda\n  this.endo = this._getEndomorphism(conf);\n  this._endoWnafT1 = new Array(4);\n  this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n  // No efficient endomorphism\n  if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n    return;\n\n  // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n  var beta;\n  var lambda;\n  if (conf.beta) {\n    beta = new BN(conf.beta, 16).toRed(this.red);\n  } else {\n    var betas = this._getEndoRoots(this.p);\n    // Choose the smallest beta\n    beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n    beta = beta.toRed(this.red);\n  }\n  if (conf.lambda) {\n    lambda = new BN(conf.lambda, 16);\n  } else {\n    // Choose the lambda that is matching selected beta\n    var lambdas = this._getEndoRoots(this.n);\n    if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n      lambda = lambdas[0];\n    } else {\n      lambda = lambdas[1];\n      assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n    }\n  }\n\n  // Get basis vectors, used for balanced length-two representation\n  var basis;\n  if (conf.basis) {\n    basis = conf.basis.map(function(vec) {\n      return {\n        a: new BN(vec.a, 16),\n        b: new BN(vec.b, 16),\n      };\n    });\n  } else {\n    basis = this._getEndoBasis(lambda);\n  }\n\n  return {\n    beta: beta,\n    lambda: lambda,\n    basis: basis,\n  };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n  // Find roots of for x^2 + x + 1 in F\n  // Root = (-1 +- Sqrt(-3)) / 2\n  //\n  var red = num === this.p ? this.red : BN.mont(num);\n  var tinv = new BN(2).toRed(red).redInvm();\n  var ntinv = tinv.redNeg();\n\n  var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n  var l1 = ntinv.redAdd(s).fromRed();\n  var l2 = ntinv.redSub(s).fromRed();\n  return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n  // aprxSqrt >= sqrt(this.n)\n  var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n  // 3.74\n  // Run EGCD, until r(L + 1) < aprxSqrt\n  var u = lambda;\n  var v = this.n.clone();\n  var x1 = new BN(1);\n  var y1 = new BN(0);\n  var x2 = new BN(0);\n  var y2 = new BN(1);\n\n  // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n  var a0;\n  var b0;\n  // First vector\n  var a1;\n  var b1;\n  // Second vector\n  var a2;\n  var b2;\n\n  var prevR;\n  var i = 0;\n  var r;\n  var x;\n  while (u.cmpn(0) !== 0) {\n    var q = v.div(u);\n    r = v.sub(q.mul(u));\n    x = x2.sub(q.mul(x1));\n    var y = y2.sub(q.mul(y1));\n\n    if (!a1 && r.cmp(aprxSqrt) < 0) {\n      a0 = prevR.neg();\n      b0 = x1;\n      a1 = r.neg();\n      b1 = x;\n    } else if (a1 && ++i === 2) {\n      break;\n    }\n    prevR = r;\n\n    v = u;\n    u = r;\n    x2 = x1;\n    x1 = x;\n    y2 = y1;\n    y1 = y;\n  }\n  a2 = r.neg();\n  b2 = x;\n\n  var len1 = a1.sqr().add(b1.sqr());\n  var len2 = a2.sqr().add(b2.sqr());\n  if (len2.cmp(len1) >= 0) {\n    a2 = a0;\n    b2 = b0;\n  }\n\n  // Normalize signs\n  if (a1.negative) {\n    a1 = a1.neg();\n    b1 = b1.neg();\n  }\n  if (a2.negative) {\n    a2 = a2.neg();\n    b2 = b2.neg();\n  }\n\n  return [\n    { a: a1, b: b1 },\n    { a: a2, b: b2 },\n  ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n  var basis = this.endo.basis;\n  var v1 = basis[0];\n  var v2 = basis[1];\n\n  var c1 = v2.b.mul(k).divRound(this.n);\n  var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n  var p1 = c1.mul(v1.a);\n  var p2 = c2.mul(v2.a);\n  var q1 = c1.mul(v1.b);\n  var q2 = c2.mul(v2.b);\n\n  // Calculate answer\n  var k1 = k.sub(p1).sub(p2);\n  var k2 = q1.add(q2).neg();\n  return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  // XXX Is there any way to tell if the number is odd without converting it\n  // to non-red form?\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n  if (point.inf)\n    return true;\n\n  var x = point.x;\n  var y = point.y;\n\n  var ax = this.a.redMul(x);\n  var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n  return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n    function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n      var npoints = this._endoWnafT1;\n      var ncoeffs = this._endoWnafT2;\n      for (var i = 0; i < points.length; i++) {\n        var split = this._endoSplit(coeffs[i]);\n        var p = points[i];\n        var beta = p._getBeta();\n\n        if (split.k1.negative) {\n          split.k1.ineg();\n          p = p.neg(true);\n        }\n        if (split.k2.negative) {\n          split.k2.ineg();\n          beta = beta.neg(true);\n        }\n\n        npoints[i * 2] = p;\n        npoints[i * 2 + 1] = beta;\n        ncoeffs[i * 2] = split.k1;\n        ncoeffs[i * 2 + 1] = split.k2;\n      }\n      var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n      // Clean-up references to points and coefficients\n      for (var j = 0; j < i * 2; j++) {\n        npoints[j] = null;\n        ncoeffs[j] = null;\n      }\n      return res;\n    };\n\nfunction Point(curve, x, y, isRed) {\n  Base.BasePoint.call(this, curve, 'affine');\n  if (x === null && y === null) {\n    this.x = null;\n    this.y = null;\n    this.inf = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    // Force redgomery representation when loading from JSON\n    if (isRed) {\n      this.x.forceRed(this.curve.red);\n      this.y.forceRed(this.curve.red);\n    }\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    this.inf = false;\n  }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n  return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n  return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n  if (!this.curve.endo)\n    return;\n\n  var pre = this.precomputed;\n  if (pre && pre.beta)\n    return pre.beta;\n\n  var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n  if (pre) {\n    var curve = this.curve;\n    var endoMul = function(p) {\n      return curve.point(p.x.redMul(curve.endo.beta), p.y);\n    };\n    pre.beta = beta;\n    beta.precomputed = {\n      beta: null,\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(endoMul),\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(endoMul),\n      },\n    };\n  }\n  return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n  if (!this.precomputed)\n    return [ this.x, this.y ];\n\n  return [ this.x, this.y, this.precomputed && {\n    doubles: this.precomputed.doubles && {\n      step: this.precomputed.doubles.step,\n      points: this.precomputed.doubles.points.slice(1),\n    },\n    naf: this.precomputed.naf && {\n      wnd: this.precomputed.naf.wnd,\n      points: this.precomputed.naf.points.slice(1),\n    },\n  } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n  if (typeof obj === 'string')\n    obj = JSON.parse(obj);\n  var res = curve.point(obj[0], obj[1], red);\n  if (!obj[2])\n    return res;\n\n  function obj2point(obj) {\n    return curve.point(obj[0], obj[1], red);\n  }\n\n  var pre = obj[2];\n  res.precomputed = {\n    beta: null,\n    doubles: pre.doubles && {\n      step: pre.doubles.step,\n      points: [ res ].concat(pre.doubles.points.map(obj2point)),\n    },\n    naf: pre.naf && {\n      wnd: pre.naf.wnd,\n      points: [ res ].concat(pre.naf.points.map(obj2point)),\n    },\n  };\n  return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.inf)\n    return p;\n\n  // P + O = P\n  if (p.inf)\n    return this;\n\n  // P + P = 2P\n  if (this.eq(p))\n    return this.dbl();\n\n  // P + (-P) = O\n  if (this.neg().eq(p))\n    return this.curve.point(null, null);\n\n  // P + Q = O\n  if (this.x.cmp(p.x) === 0)\n    return this.curve.point(null, null);\n\n  var c = this.y.redSub(p.y);\n  if (c.cmpn(0) !== 0)\n    c = c.redMul(this.x.redSub(p.x).redInvm());\n  var nx = c.redSqr().redISub(this.x).redISub(p.x);\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.inf)\n    return this;\n\n  // 2P = O\n  var ys1 = this.y.redAdd(this.y);\n  if (ys1.cmpn(0) === 0)\n    return this.curve.point(null, null);\n\n  var a = this.curve.a;\n\n  var x2 = this.x.redSqr();\n  var dyinv = ys1.redInvm();\n  var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n  var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n  k = new BN(k, 16);\n  if (this.isInfinity())\n    return this;\n  else if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else if (this.curve.endo)\n    return this.curve._endoWnafMulAdd([ this ], [ k ]);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs, true);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n  return this === p ||\n         this.inf === p.inf &&\n             (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n  if (this.inf)\n    return this;\n\n  var res = this.curve.point(this.x, this.y.redNeg());\n  if (_precompute && this.precomputed) {\n    var pre = this.precomputed;\n    var negate = function(p) {\n      return p.neg();\n    };\n    res.precomputed = {\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(negate),\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(negate),\n      },\n    };\n  }\n  return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n  if (this.inf)\n    return this.curve.jpoint(null, null, null);\n\n  var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n  return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n  Base.BasePoint.call(this, curve, 'jacobian');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.one;\n    this.y = this.curve.one;\n    this.z = new BN(0);\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = new BN(z, 16);\n  }\n  if (!this.x.red)\n    this.x = this.x.toRed(this.curve.red);\n  if (!this.y.red)\n    this.y = this.y.toRed(this.curve.red);\n  if (!this.z.red)\n    this.z = this.z.toRed(this.curve.red);\n\n  this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n  return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n  if (this.isInfinity())\n    return this.curve.point(null, null);\n\n  var zinv = this.z.redInvm();\n  var zinv2 = zinv.redSqr();\n  var ax = this.x.redMul(zinv2);\n  var ay = this.y.redMul(zinv2).redMul(zinv);\n\n  return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n  return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p;\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 12M + 4S + 7A\n  var pz2 = p.z.redSqr();\n  var z2 = this.z.redSqr();\n  var u1 = this.x.redMul(pz2);\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y.redMul(pz2.redMul(p.z));\n  var s2 = p.y.redMul(z2.redMul(this.z));\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(p.z).redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p.toJ();\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 8M + 3S + 7A\n  var z2 = this.z.redSqr();\n  var u1 = this.x;\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y;\n  var s2 = p.y.redMul(z2).redMul(this.z);\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n  if (pow === 0)\n    return this;\n  if (this.isInfinity())\n    return this;\n  if (!pow)\n    return this.dbl();\n\n  var i;\n  if (this.curve.zeroA || this.curve.threeA) {\n    var r = this;\n    for (i = 0; i < pow; i++)\n      r = r.dbl();\n    return r;\n  }\n\n  // 1M + 2S + 1A + N * (4S + 5M + 8A)\n  // N = 1 => 6M + 6S + 9A\n  var a = this.curve.a;\n  var tinv = this.curve.tinv;\n\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  // Reuse results\n  var jyd = jy.redAdd(jy);\n  for (i = 0; i < pow; i++) {\n    var jx2 = jx.redSqr();\n    var jyd2 = jyd.redSqr();\n    var jyd4 = jyd2.redSqr();\n    var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n    var t1 = jx.redMul(jyd2);\n    var nx = c.redSqr().redISub(t1.redAdd(t1));\n    var t2 = t1.redISub(nx);\n    var dny = c.redMul(t2);\n    dny = dny.redIAdd(dny).redISub(jyd4);\n    var nz = jyd.redMul(jz);\n    if (i + 1 < pow)\n      jz4 = jz4.redMul(jyd4);\n\n    jx = nx;\n    jz = nz;\n    jyd = dny;\n  }\n\n  return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  if (this.curve.zeroA)\n    return this._zeroDbl();\n  else if (this.curve.threeA)\n    return this._threeDbl();\n  else\n    return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 14A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a; a = 0\n    var m = xx.redAdd(xx).redIAdd(xx);\n    // T = M ^ 2 - 2*S\n    var t = m.redSqr().redISub(s).redISub(s);\n\n    // 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2*Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-dbl-2009-l\n    // 2M + 5S + 13A\n\n    // A = X1^2\n    var a = this.x.redSqr();\n    // B = Y1^2\n    var b = this.y.redSqr();\n    // C = B^2\n    var c = b.redSqr();\n    // D = 2 * ((X1 + B)^2 - A - C)\n    var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n    d = d.redIAdd(d);\n    // E = 3 * A\n    var e = a.redAdd(a).redIAdd(a);\n    // F = E^2\n    var f = e.redSqr();\n\n    // 8 * C\n    var c8 = c.redIAdd(c);\n    c8 = c8.redIAdd(c8);\n    c8 = c8.redIAdd(c8);\n\n    // X3 = F - 2 * D\n    nx = f.redISub(d).redISub(d);\n    // Y3 = E * (D - X3) - 8 * C\n    ny = e.redMul(d.redISub(nx)).redISub(c8);\n    // Z3 = 2 * Y1 * Z1\n    nz = this.y.redMul(this.z);\n    nz = nz.redIAdd(nz);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 15A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a\n    var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n    // T = M^2 - 2 * S\n    var t = m.redSqr().redISub(s).redISub(s);\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2 * Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n    // 3M + 5S\n\n    // delta = Z1^2\n    var delta = this.z.redSqr();\n    // gamma = Y1^2\n    var gamma = this.y.redSqr();\n    // beta = X1 * gamma\n    var beta = this.x.redMul(gamma);\n    // alpha = 3 * (X1 - delta) * (X1 + delta)\n    var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n    alpha = alpha.redAdd(alpha).redIAdd(alpha);\n    // X3 = alpha^2 - 8 * beta\n    var beta4 = beta.redIAdd(beta);\n    beta4 = beta4.redIAdd(beta4);\n    var beta8 = beta4.redAdd(beta4);\n    nx = alpha.redSqr().redISub(beta8);\n    // Z3 = (Y1 + Z1)^2 - gamma - delta\n    nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n    // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n    var ggamma8 = gamma.redSqr();\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n  var a = this.curve.a;\n\n  // 4M + 6S + 10A\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  var jx2 = jx.redSqr();\n  var jy2 = jy.redSqr();\n\n  var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n  var jxd4 = jx.redAdd(jx);\n  jxd4 = jxd4.redIAdd(jxd4);\n  var t1 = jxd4.redMul(jy2);\n  var nx = c.redSqr().redISub(t1.redAdd(t1));\n  var t2 = t1.redISub(nx);\n\n  var jyd8 = jy2.redSqr();\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  var ny = c.redMul(t2).redISub(jyd8);\n  var nz = jy.redAdd(jy).redMul(jz);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n  if (!this.curve.zeroA)\n    return this.dbl().add(this);\n\n  // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n  // 5M + 10S + ...\n\n  // XX = X1^2\n  var xx = this.x.redSqr();\n  // YY = Y1^2\n  var yy = this.y.redSqr();\n  // ZZ = Z1^2\n  var zz = this.z.redSqr();\n  // YYYY = YY^2\n  var yyyy = yy.redSqr();\n  // M = 3 * XX + a * ZZ2; a = 0\n  var m = xx.redAdd(xx).redIAdd(xx);\n  // MM = M^2\n  var mm = m.redSqr();\n  // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n  var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n  e = e.redIAdd(e);\n  e = e.redAdd(e).redIAdd(e);\n  e = e.redISub(mm);\n  // EE = E^2\n  var ee = e.redSqr();\n  // T = 16*YYYY\n  var t = yyyy.redIAdd(yyyy);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  // U = (M + E)^2 - MM - EE - T\n  var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n  // X3 = 4 * (X1 * EE - 4 * YY * U)\n  var yyu4 = yy.redMul(u);\n  yyu4 = yyu4.redIAdd(yyu4);\n  yyu4 = yyu4.redIAdd(yyu4);\n  var nx = this.x.redMul(ee).redISub(yyu4);\n  nx = nx.redIAdd(nx);\n  nx = nx.redIAdd(nx);\n  // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n  var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  // Z3 = (Z1 + E)^2 - ZZ - EE\n  var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n  k = new BN(k, kbase);\n\n  return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n  if (p.type === 'affine')\n    return this.eq(p.toJ());\n\n  if (this === p)\n    return true;\n\n  // x1 * z2^2 == x2 * z1^2\n  var z2 = this.z.redSqr();\n  var pz2 = p.z.redSqr();\n  if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n    return false;\n\n  // y1 * z2^3 == y2 * z1^3\n  var z3 = z2.redMul(this.z);\n  var pz3 = pz2.redMul(p.z);\n  return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n  var zs = this.z.redSqr();\n  var rx = x.toRed(this.curve.red).redMul(zs);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(zs);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n};\n\nJPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC JPoint Infinity>';\n  return '<EC JPoint x: ' + this.x.toString(16, 2) +\n      ' y: ' + this.y.toString(16, 2) +\n      ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n", "'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n  Base.call(this, 'mont', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.i4 = new BN(4).toRed(this.red).redInvm();\n  this.two = new BN(2).toRed(this.red);\n  this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n  var x = point.normalize().x;\n  var x2 = x.redSqr();\n  var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n  var y = rhs.redSqrt();\n\n  return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && z === null) {\n    this.x = this.curve.one;\n    this.z = this.curve.zero;\n  } else {\n    this.x = new BN(x, 16);\n    this.z = new BN(z, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n  }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n  return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n  // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n  return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n  // 2M + 2S + 4A\n\n  // A = X1 + Z1\n  var a = this.x.redAdd(this.z);\n  // AA = A^2\n  var aa = a.redSqr();\n  // B = X1 - Z1\n  var b = this.x.redSub(this.z);\n  // BB = B^2\n  var bb = b.redSqr();\n  // C = AA - BB\n  var c = aa.redSub(bb);\n  // X3 = AA * BB\n  var nx = aa.redMul(bb);\n  // Z3 = C * (BB + A24 * C)\n  var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n  // 4M + 2S + 6A\n\n  // A = X2 + Z2\n  var a = this.x.redAdd(this.z);\n  // B = X2 - Z2\n  var b = this.x.redSub(this.z);\n  // C = X3 + Z3\n  var c = p.x.redAdd(p.z);\n  // D = X3 - Z3\n  var d = p.x.redSub(p.z);\n  // DA = D * A\n  var da = d.redMul(a);\n  // CB = C * B\n  var cb = c.redMul(b);\n  // X5 = Z1 * (DA + CB)^2\n  var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n  // Z5 = X1 * (DA - CB)^2\n  var nz = diff.x.redMul(da.redISub(cb).redSqr());\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n  var t = k.clone();\n  var a = this; // (N / 2) * Q + Q\n  var b = this.curve.point(null, null); // (N / 2) * Q\n  var c = this; // Q\n\n  for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n    bits.push(t.andln(1));\n\n  for (var i = bits.length - 1; i >= 0; i--) {\n    if (bits[i] === 0) {\n      // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n      a = a.diffAdd(b, c);\n      // N * Q = 2 * ((N / 2) * Q + Q))\n      b = b.dbl();\n    } else {\n      // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n      b = a.diffAdd(b, c);\n      // N * Q + Q = 2 * ((N / 2) * Q + Q)\n      a = a.dbl();\n    }\n  }\n  return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n  this.x = this.x.redMul(this.z.redInvm());\n  this.z = this.curve.one;\n  return this;\n};\n\nPoint.prototype.getX = function getX() {\n  // Normalize coordinates\n  this.normalize();\n\n  return this.x.fromRed();\n};\n", "'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n  // NOTE: Important as we are creating point in Base.call()\n  this.twisted = (conf.a | 0) !== 1;\n  this.mOneA = this.twisted && (conf.a | 0) === -1;\n  this.extended = this.mOneA;\n\n  Base.call(this, 'edwards', conf);\n\n  this.a = new BN(conf.a, 16).umod(this.red.m);\n  this.a = this.a.toRed(this.red);\n  this.c = new BN(conf.c, 16).toRed(this.red);\n  this.c2 = this.c.redSqr();\n  this.d = new BN(conf.d, 16).toRed(this.red);\n  this.dd = this.d.redAdd(this.d);\n\n  assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n  this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n  if (this.mOneA)\n    return num.redNeg();\n  else\n    return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n  if (this.oneC)\n    return num;\n  else\n    return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n  return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var x2 = x.redSqr();\n  var rhs = this.c2.redSub(this.a.redMul(x2));\n  var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n  var y2 = rhs.redMul(lhs.redInvm());\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n  y = new BN(y, 16);\n  if (!y.red)\n    y = y.toRed(this.red);\n\n  // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n  var y2 = y.redSqr();\n  var lhs = y2.redSub(this.c2);\n  var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n  var x2 = lhs.redMul(rhs.redInvm());\n\n  if (x2.cmp(this.zero) === 0) {\n    if (odd)\n      throw new Error('invalid point');\n    else\n      return this.point(this.zero, y);\n  }\n\n  var x = x2.redSqrt();\n  if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  if (x.fromRed().isOdd() !== odd)\n    x = x.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n  if (point.isInfinity())\n    return true;\n\n  // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n  point.normalize();\n\n  var x2 = point.x.redSqr();\n  var y2 = point.y.redSqr();\n  var lhs = x2.redMul(this.a).redAdd(y2);\n  var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n  return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.zero;\n    this.y = this.curve.one;\n    this.z = this.curve.one;\n    this.t = this.curve.zero;\n    this.zOne = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = z ? new BN(z, 16) : this.curve.one;\n    this.t = t && new BN(t, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n    if (this.t && !this.t.red)\n      this.t = this.t.toRed(this.curve.red);\n    this.zOne = this.z === this.curve.one;\n\n    // Use extended coordinates\n    if (this.curve.extended && !this.t) {\n      this.t = this.x.redMul(this.y);\n      if (!this.zOne)\n        this.t = this.t.redMul(this.z.redInvm());\n    }\n  }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n  return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.x.cmpn(0) === 0 &&\n    (this.y.cmp(this.z) === 0 ||\n    (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #doubling-dbl-2008-hwcd\n  // 4M + 4S\n\n  // A = X1^2\n  var a = this.x.redSqr();\n  // B = Y1^2\n  var b = this.y.redSqr();\n  // C = 2 * Z1^2\n  var c = this.z.redSqr();\n  c = c.redIAdd(c);\n  // D = a * A\n  var d = this.curve._mulA(a);\n  // E = (X1 + Y1)^2 - A - B\n  var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n  // G = D + B\n  var g = d.redAdd(b);\n  // F = G - C\n  var f = g.redSub(c);\n  // H = D - B\n  var h = d.redSub(b);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #doubling-dbl-2008-bbjlp\n  //     #doubling-dbl-2007-bl\n  // and others\n  // Generally 3M + 4S or 2M + 4S\n\n  // B = (X1 + Y1)^2\n  var b = this.x.redAdd(this.y).redSqr();\n  // C = X1^2\n  var c = this.x.redSqr();\n  // D = Y1^2\n  var d = this.y.redSqr();\n\n  var nx;\n  var ny;\n  var nz;\n  var e;\n  var h;\n  var j;\n  if (this.curve.twisted) {\n    // E = a * C\n    e = this.curve._mulA(c);\n    // F = E + D\n    var f = e.redAdd(d);\n    if (this.zOne) {\n      // X3 = (B - C - D) * (F - 2)\n      nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n      // Y3 = F * (E - D)\n      ny = f.redMul(e.redSub(d));\n      // Z3 = F^2 - 2 * F\n      nz = f.redSqr().redSub(f).redSub(f);\n    } else {\n      // H = Z1^2\n      h = this.z.redSqr();\n      // J = F - 2 * H\n      j = f.redSub(h).redISub(h);\n      // X3 = (B-C-D)*J\n      nx = b.redSub(c).redISub(d).redMul(j);\n      // Y3 = F * (E - D)\n      ny = f.redMul(e.redSub(d));\n      // Z3 = F * J\n      nz = f.redMul(j);\n    }\n  } else {\n    // E = C + D\n    e = c.redAdd(d);\n    // H = (c * Z1)^2\n    h = this.curve._mulC(this.z).redSqr();\n    // J = E - 2 * H\n    j = e.redSub(h).redSub(h);\n    // X3 = c * (B - E) * J\n    nx = this.curve._mulC(b.redISub(e)).redMul(j);\n    // Y3 = c * E * (C - D)\n    ny = this.curve._mulC(e).redMul(c.redISub(d));\n    // Z3 = E * J\n    nz = e.redMul(j);\n  }\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  // Double in extended coordinates\n  if (this.curve.extended)\n    return this._extDbl();\n  else\n    return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #addition-add-2008-hwcd-3\n  // 8M\n\n  // A = (Y1 - X1) * (Y2 - X2)\n  var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n  // B = (Y1 + X1) * (Y2 + X2)\n  var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n  // C = T1 * k * T2\n  var c = this.t.redMul(this.curve.dd).redMul(p.t);\n  // D = Z1 * 2 * Z2\n  var d = this.z.redMul(p.z.redAdd(p.z));\n  // E = B - A\n  var e = b.redSub(a);\n  // F = D - C\n  var f = d.redSub(c);\n  // G = D + C\n  var g = d.redAdd(c);\n  // H = B + A\n  var h = b.redAdd(a);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #addition-add-2008-bbjlp\n  //     #addition-add-2007-bl\n  // 10M + 1S\n\n  // A = Z1 * Z2\n  var a = this.z.redMul(p.z);\n  // B = A^2\n  var b = a.redSqr();\n  // C = X1 * X2\n  var c = this.x.redMul(p.x);\n  // D = Y1 * Y2\n  var d = this.y.redMul(p.y);\n  // E = d * C * D\n  var e = this.curve.d.redMul(c).redMul(d);\n  // F = B - E\n  var f = b.redSub(e);\n  // G = B + E\n  var g = b.redAdd(e);\n  // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n  var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n  var nx = a.redMul(f).redMul(tmp);\n  var ny;\n  var nz;\n  if (this.curve.twisted) {\n    // Y3 = A * G * (D - a * C)\n    ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n    // Z3 = F * G\n    nz = f.redMul(g);\n  } else {\n    // Y3 = A * G * (D - C)\n    ny = a.redMul(g).redMul(d.redSub(c));\n    // Z3 = c * F * G\n    nz = this.curve._mulC(f).redMul(g);\n  }\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n  if (this.isInfinity())\n    return p;\n  if (p.isInfinity())\n    return this;\n\n  if (this.curve.extended)\n    return this._extAdd(p);\n  else\n    return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n  if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n  if (this.zOne)\n    return this;\n\n  // Normalize coordinates\n  var zi = this.z.redInvm();\n  this.x = this.x.redMul(zi);\n  this.y = this.y.redMul(zi);\n  if (this.t)\n    this.t = this.t.redMul(zi);\n  this.z = this.curve.one;\n  this.zOne = true;\n  return this;\n};\n\nPoint.prototype.neg = function neg() {\n  return this.curve.point(this.x.redNeg(),\n    this.y,\n    this.z,\n    this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n  this.normalize();\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  this.normalize();\n  return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this === other ||\n         this.getX().cmp(other.getX()) === 0 &&\n         this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n  var rx = x.toRed(this.curve.red).redMul(this.z);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(this.z);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n", "'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n", "'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n  if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n    return false;\n  }\n  if (i < 0 || i + 1 >= msg.length) {\n    return false;\n  }\n  return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg))\n    return msg.slice();\n  if (!msg)\n    return [];\n  var res = [];\n  if (typeof msg === 'string') {\n    if (!enc) {\n      // Inspired by stringToUtf8ByteArray() in closure-library by Google\n      // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n      // Apache License 2.0\n      // https://github.com/google/closure-library/blob/master/LICENSE\n      var p = 0;\n      for (var i = 0; i < msg.length; i++) {\n        var c = msg.charCodeAt(i);\n        if (c < 128) {\n          res[p++] = c;\n        } else if (c < 2048) {\n          res[p++] = (c >> 6) | 192;\n          res[p++] = (c & 63) | 128;\n        } else if (isSurrogatePair(msg, i)) {\n          c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n          res[p++] = (c >> 18) | 240;\n          res[p++] = ((c >> 12) & 63) | 128;\n          res[p++] = ((c >> 6) & 63) | 128;\n          res[p++] = (c & 63) | 128;\n        } else {\n          res[p++] = (c >> 12) | 224;\n          res[p++] = ((c >> 6) & 63) | 128;\n          res[p++] = (c & 63) | 128;\n        }\n      }\n    } else if (enc === 'hex') {\n      msg = msg.replace(/[^a-z0-9]+/ig, '');\n      if (msg.length % 2 !== 0)\n        msg = '0' + msg;\n      for (i = 0; i < msg.length; i += 2)\n        res.push(parseInt(msg[i] + msg[i + 1], 16));\n    }\n  } else {\n    for (i = 0; i < msg.length; i++)\n      res[i] = msg[i] | 0;\n  }\n  return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++)\n    res += zero2(msg[i].toString(16));\n  return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n  var res = (w >>> 24) |\n            ((w >>> 8) & 0xff00) |\n            ((w << 8) & 0xff0000) |\n            ((w & 0xff) << 24);\n  return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++) {\n    var w = msg[i];\n    if (endian === 'little')\n      w = htonl(w);\n    res += zero8(w.toString(16));\n  }\n  return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n  if (word.length === 1)\n    return '0' + word;\n  else\n    return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n  if (word.length === 7)\n    return '0' + word;\n  else if (word.length === 6)\n    return '00' + word;\n  else if (word.length === 5)\n    return '000' + word;\n  else if (word.length === 4)\n    return '0000' + word;\n  else if (word.length === 3)\n    return '00000' + word;\n  else if (word.length === 2)\n    return '000000' + word;\n  else if (word.length === 1)\n    return '0000000' + word;\n  else\n    return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n  var len = end - start;\n  assert(len % 4 === 0);\n  var res = new Array(len / 4);\n  for (var i = 0, k = start; i < res.length; i++, k += 4) {\n    var w;\n    if (endian === 'big')\n      w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n    else\n      w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n    res[i] = w >>> 0;\n  }\n  return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n  var res = new Array(msg.length * 4);\n  for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n    var m = msg[i];\n    if (endian === 'big') {\n      res[k] = m >>> 24;\n      res[k + 1] = (m >>> 16) & 0xff;\n      res[k + 2] = (m >>> 8) & 0xff;\n      res[k + 3] = m & 0xff;\n    } else {\n      res[k + 3] = m >>> 24;\n      res[k + 2] = (m >>> 16) & 0xff;\n      res[k + 1] = (m >>> 8) & 0xff;\n      res[k] = m & 0xff;\n    }\n  }\n  return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n  return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n  return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n  return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n  return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n  return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n  return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n  var bh = buf[pos];\n  var bl = buf[pos + 1];\n\n  var lo = (al + bl) >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  buf[pos] = hi >>> 0;\n  buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n  var lo = (al + bl) >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n  var lo = al + bl;\n  return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n  var carry = 0;\n  var lo = al;\n  lo = (lo + bl) >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = (lo + cl) >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = (lo + dl) >>> 0;\n  carry += lo < dl ? 1 : 0;\n\n  var hi = ah + bh + ch + dh + carry;\n  return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n  var lo = al + bl + cl + dl;\n  return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var carry = 0;\n  var lo = al;\n  lo = (lo + bl) >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = (lo + cl) >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = (lo + dl) >>> 0;\n  carry += lo < dl ? 1 : 0;\n  lo = (lo + el) >>> 0;\n  carry += lo < el ? 1 : 0;\n\n  var hi = ah + bh + ch + dh + eh + carry;\n  return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var lo = al + bl + cl + dl + el;\n\n  return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n  var r = (al << (32 - num)) | (ah >>> num);\n  return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n  var r = (ah << (32 - num)) | (al >>> num);\n  return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n  return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n  var r = (ah << (32 - num)) | (al >>> num);\n  return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n", "'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n  this.pending = null;\n  this.pendingTotal = 0;\n  this.blockSize = this.constructor.blockSize;\n  this.outSize = this.constructor.outSize;\n  this.hmacStrength = this.constructor.hmacStrength;\n  this.padLength = this.constructor.padLength / 8;\n  this.endian = 'big';\n\n  this._delta8 = this.blockSize / 8;\n  this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n  // Convert message to array, pad it, and join into 32bit blocks\n  msg = utils.toArray(msg, enc);\n  if (!this.pending)\n    this.pending = msg;\n  else\n    this.pending = this.pending.concat(msg);\n  this.pendingTotal += msg.length;\n\n  // Enough data, try updating\n  if (this.pending.length >= this._delta8) {\n    msg = this.pending;\n\n    // Process pending data in blocks\n    var r = msg.length % this._delta8;\n    this.pending = msg.slice(msg.length - r, msg.length);\n    if (this.pending.length === 0)\n      this.pending = null;\n\n    msg = utils.join32(msg, 0, msg.length - r, this.endian);\n    for (var i = 0; i < msg.length; i += this._delta32)\n      this._update(msg, i, i + this._delta32);\n  }\n\n  return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n  this.update(this._pad());\n  assert(this.pending === null);\n\n  return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n  var len = this.pendingTotal;\n  var bytes = this._delta8;\n  var k = bytes - ((len + this.padLength) % bytes);\n  var res = new Array(k + this.padLength);\n  res[0] = 0x80;\n  for (var i = 1; i < k; i++)\n    res[i] = 0;\n\n  // Append length\n  len <<= 3;\n  if (this.endian === 'big') {\n    for (var t = 8; t < this.padLength; t++)\n      res[i++] = 0;\n\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = (len >>> 24) & 0xff;\n    res[i++] = (len >>> 16) & 0xff;\n    res[i++] = (len >>> 8) & 0xff;\n    res[i++] = len & 0xff;\n  } else {\n    res[i++] = len & 0xff;\n    res[i++] = (len >>> 8) & 0xff;\n    res[i++] = (len >>> 16) & 0xff;\n    res[i++] = (len >>> 24) & 0xff;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n\n    for (t = 8; t < this.padLength; t++)\n      res[i++] = 0;\n  }\n\n  return res;\n};\n", "'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n  if (s === 0)\n    return ch32(x, y, z);\n  if (s === 1 || s === 3)\n    return p32(x, y, z);\n  if (s === 2)\n    return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n  return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n  return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n  return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n  return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n  return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n  return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n  return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n", "'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n  0x5A827999, 0x6ED9EBA1,\n  0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n  if (!(this instanceof SHA1))\n    return new SHA1();\n\n  BlockHash.call(this);\n  this.h = [\n    0x67452301, 0xefcdab89, 0x98badcfe,\n    0x10325476, 0xc3d2e1f0 ];\n  this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++)\n    W[i] = msg[start + i];\n\n  for(; i < W.length; i++)\n    W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n\n  for (i = 0; i < W.length; i++) {\n    var s = ~~(i / 20);\n    var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n    e = d;\n    d = c;\n    c = rotl32(b, 30);\n    b = a;\n    a = t;\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n", "'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n  0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n  0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n  0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n  0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n  0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n  0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n  0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n  0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n  if (!(this instanceof SHA256))\n    return new SHA256();\n\n  BlockHash.call(this);\n  this.h = [\n    0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n    0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n  ];\n  this.k = sha256_K;\n  this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++)\n    W[i] = msg[start + i];\n  for (; i < W.length; i++)\n    W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n  var f = this.h[5];\n  var g = this.h[6];\n  var h = this.h[7];\n\n  assert(this.k.length === W.length);\n  for (i = 0; i < W.length; i++) {\n    var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n    var T2 = sum32(s0_256(a), maj32(a, b, c));\n    h = g;\n    g = f;\n    f = e;\n    e = sum32(d, T1);\n    d = c;\n    c = b;\n    b = a;\n    a = sum32(T1, T2);\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n  this.h[5] = sum32(this.h[5], f);\n  this.h[6] = sum32(this.h[6], g);\n  this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n", "'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n  if (!(this instanceof SHA224))\n    return new SHA224();\n\n  SHA256.call(this);\n  this.h = [\n    0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n    0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n  // Just truncate output\n  if (enc === 'hex')\n    return utils.toHex32(this.h.slice(0, 7), 'big');\n  else\n    return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n", "'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n  if (!(this instanceof SHA512))\n    return new SHA512();\n\n  BlockHash.call(this);\n  this.h = [\n    0x6a09e667, 0xf3bcc908,\n    0xbb67ae85, 0x84caa73b,\n    0x3c6ef372, 0xfe94f82b,\n    0xa54ff53a, 0x5f1d36f1,\n    0x510e527f, 0xade682d1,\n    0x9b05688c, 0x2b3e6c1f,\n    0x1f83d9ab, 0xfb41bd6b,\n    0x5be0cd19, 0x137e2179 ];\n  this.k = sha512_K;\n  this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n  var W = this.W;\n\n  // 32 x 32bit words\n  for (var i = 0; i < 32; i++)\n    W[i] = msg[start + i];\n  for (; i < W.length; i += 2) {\n    var c0_hi = g1_512_hi(W[i - 4], W[i - 3]);  // i - 2\n    var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n    var c1_hi = W[i - 14];  // i - 7\n    var c1_lo = W[i - 13];\n    var c2_hi = g0_512_hi(W[i - 30], W[i - 29]);  // i - 15\n    var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n    var c3_hi = W[i - 32];  // i - 16\n    var c3_lo = W[i - 31];\n\n    W[i] = sum64_4_hi(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo);\n    W[i + 1] = sum64_4_lo(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo);\n  }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n  this._prepareBlock(msg, start);\n\n  var W = this.W;\n\n  var ah = this.h[0];\n  var al = this.h[1];\n  var bh = this.h[2];\n  var bl = this.h[3];\n  var ch = this.h[4];\n  var cl = this.h[5];\n  var dh = this.h[6];\n  var dl = this.h[7];\n  var eh = this.h[8];\n  var el = this.h[9];\n  var fh = this.h[10];\n  var fl = this.h[11];\n  var gh = this.h[12];\n  var gl = this.h[13];\n  var hh = this.h[14];\n  var hl = this.h[15];\n\n  assert(this.k.length === W.length);\n  for (var i = 0; i < W.length; i += 2) {\n    var c0_hi = hh;\n    var c0_lo = hl;\n    var c1_hi = s1_512_hi(eh, el);\n    var c1_lo = s1_512_lo(eh, el);\n    var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n    var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n    var c3_hi = this.k[i];\n    var c3_lo = this.k[i + 1];\n    var c4_hi = W[i];\n    var c4_lo = W[i + 1];\n\n    var T1_hi = sum64_5_hi(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo,\n      c4_hi, c4_lo);\n    var T1_lo = sum64_5_lo(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo,\n      c4_hi, c4_lo);\n\n    c0_hi = s0_512_hi(ah, al);\n    c0_lo = s0_512_lo(ah, al);\n    c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n    c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n    var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n    var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n    hh = gh;\n    hl = gl;\n\n    gh = fh;\n    gl = fl;\n\n    fh = eh;\n    fl = el;\n\n    eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n    el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n    dh = ch;\n    dl = cl;\n\n    ch = bh;\n    cl = bl;\n\n    bh = ah;\n    bl = al;\n\n    ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n    al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n  }\n\n  sum64(this.h, 0, ah, al);\n  sum64(this.h, 2, bh, bl);\n  sum64(this.h, 4, ch, cl);\n  sum64(this.h, 6, dh, dl);\n  sum64(this.h, 8, eh, el);\n  sum64(this.h, 10, fh, fl);\n  sum64(this.h, 12, gh, gl);\n  sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n  var r = (xh & yh) ^ ((~xh) & zh);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = (xl & yl) ^ ((~xl) & zl);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n  var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 28);\n  var c1_hi = rotr64_hi(xl, xh, 2);  // 34\n  var c2_hi = rotr64_hi(xl, xh, 7);  // 39\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 28);\n  var c1_lo = rotr64_lo(xl, xh, 2);  // 34\n  var c2_lo = rotr64_lo(xl, xh, 7);  // 39\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 14);\n  var c1_hi = rotr64_hi(xh, xl, 18);\n  var c2_hi = rotr64_hi(xl, xh, 9);  // 41\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 14);\n  var c1_lo = rotr64_lo(xh, xl, 18);\n  var c2_lo = rotr64_lo(xl, xh, 9);  // 41\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 1);\n  var c1_hi = rotr64_hi(xh, xl, 8);\n  var c2_hi = shr64_hi(xh, xl, 7);\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 1);\n  var c1_lo = rotr64_lo(xh, xl, 8);\n  var c2_lo = shr64_lo(xh, xl, 7);\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 19);\n  var c1_hi = rotr64_hi(xl, xh, 29);  // 61\n  var c2_hi = shr64_hi(xh, xl, 6);\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 19);\n  var c1_lo = rotr64_lo(xl, xh, 29);  // 61\n  var c2_lo = shr64_lo(xh, xl, 6);\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n", "'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n  if (!(this instanceof SHA384))\n    return new SHA384();\n\n  SHA512.call(this);\n  this.h = [\n    0xcbbb9d5d, 0xc1059ed8,\n    0x629a292a, 0x367cd507,\n    0x9159015a, 0x3070dd17,\n    0x152fecd8, 0xf70e5939,\n    0x67332667, 0xffc00b31,\n    0x8eb44a87, 0x68581511,\n    0xdb0c2e0d, 0x64f98fa7,\n    0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h.slice(0, 12), 'big');\n  else\n    return utils.split32(this.h.slice(0, 12), 'big');\n};\n", "'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n", "'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n  if (!(this instanceof RIPEMD160))\n    return new RIPEMD160();\n\n  BlockHash.call(this);\n\n  this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n  this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n  var A = this.h[0];\n  var B = this.h[1];\n  var C = this.h[2];\n  var D = this.h[3];\n  var E = this.h[4];\n  var Ah = A;\n  var Bh = B;\n  var Ch = C;\n  var Dh = D;\n  var Eh = E;\n  for (var j = 0; j < 80; j++) {\n    var T = sum32(\n      rotl32(\n        sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n        s[j]),\n      E);\n    A = E;\n    E = D;\n    D = rotl32(C, 10);\n    C = B;\n    B = T;\n    T = sum32(\n      rotl32(\n        sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n        sh[j]),\n      Eh);\n    Ah = Eh;\n    Eh = Dh;\n    Dh = rotl32(Ch, 10);\n    Ch = Bh;\n    Bh = T;\n  }\n  T = sum32_3(this.h[1], C, Dh);\n  this.h[1] = sum32_3(this.h[2], D, Eh);\n  this.h[2] = sum32_3(this.h[3], E, Ah);\n  this.h[3] = sum32_3(this.h[4], A, Bh);\n  this.h[4] = sum32_3(this.h[0], B, Ch);\n  this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'little');\n  else\n    return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n  if (j <= 15)\n    return x ^ y ^ z;\n  else if (j <= 31)\n    return (x & y) | ((~x) & z);\n  else if (j <= 47)\n    return (x | (~y)) ^ z;\n  else if (j <= 63)\n    return (x & z) | (y & (~z));\n  else\n    return x ^ (y | (~z));\n}\n\nfunction K(j) {\n  if (j <= 15)\n    return 0x00000000;\n  else if (j <= 31)\n    return 0x5a827999;\n  else if (j <= 47)\n    return 0x6ed9eba1;\n  else if (j <= 63)\n    return 0x8f1bbcdc;\n  else\n    return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n  if (j <= 15)\n    return 0x50a28be6;\n  else if (j <= 31)\n    return 0x5c4dd124;\n  else if (j <= 47)\n    return 0x6d703ef3;\n  else if (j <= 63)\n    return 0x7a6d76e9;\n  else\n    return 0x00000000;\n}\n\nvar r = [\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n  3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n  1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n  4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n  5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n  6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n  15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n  8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n  12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n  11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n  7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n  11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n  11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n  9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n  8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n  9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n  9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n  15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n  8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n", "'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n  if (!(this instanceof Hmac))\n    return new Hmac(hash, key, enc);\n  this.Hash = hash;\n  this.blockSize = hash.blockSize / 8;\n  this.outSize = hash.outSize / 8;\n  this.inner = null;\n  this.outer = null;\n\n  this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n  // Shorten key, if needed\n  if (key.length > this.blockSize)\n    key = new this.Hash().update(key).digest();\n  assert(key.length <= this.blockSize);\n\n  // Add padding to key\n  for (var i = key.length; i < this.blockSize; i++)\n    key.push(0);\n\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x36;\n  this.inner = new this.Hash().update(key);\n\n  // 0x36 ^ 0x5c = 0x6a\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x6a;\n  this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n  this.inner.update(msg, enc);\n  return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n  this.outer.update(this.inner.digest());\n  return this.outer.digest(enc);\n};\n", "var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n", "module.exports = {\n  doubles: {\n    step: 4,\n    points: [\n      [\n        'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n        'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n      ],\n      [\n        '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n        '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n      ],\n      [\n        '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n        'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n      ],\n      [\n        '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n        '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n      ],\n      [\n        '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n        '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n      ],\n      [\n        '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n        '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n      ],\n      [\n        'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n        '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n      ],\n      [\n        '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n        'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n      ],\n      [\n        'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n        '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n      ],\n      [\n        'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n        'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n      ],\n      [\n        'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n        '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n      ],\n      [\n        '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n        '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n      ],\n      [\n        '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n        '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n      ],\n      [\n        '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n        '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n      ],\n      [\n        '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n        '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n      ],\n      [\n        '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n        '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n      ],\n      [\n        '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n        '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n      ],\n      [\n        '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n        '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n      ],\n      [\n        '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n        'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n      ],\n      [\n        'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n        '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n      ],\n      [\n        'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n        '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n      ],\n      [\n        '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n        '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n      ],\n      [\n        '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n        '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n      ],\n      [\n        'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n        '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n      ],\n      [\n        '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n        'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n      ],\n      [\n        'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n        '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n      ],\n      [\n        'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n        'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n      ],\n      [\n        'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n        '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n      ],\n      [\n        'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n        'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n      ],\n      [\n        'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n        '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n      ],\n      [\n        '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n        'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n      ],\n      [\n        '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n        '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n      ],\n      [\n        'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n        '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n      ],\n      [\n        '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n        'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n      ],\n      [\n        'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n        '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n      ],\n      [\n        'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n        '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n      ],\n      [\n        'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n        'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n      ],\n      [\n        '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n        '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n      ],\n      [\n        '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n        '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n      ],\n      [\n        '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n        'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n      ],\n      [\n        '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n        '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n      ],\n      [\n        'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n        '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n      ],\n      [\n        '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n        '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n      ],\n      [\n        '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n        'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n      ],\n      [\n        '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n        '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n      ],\n      [\n        'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n        '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n      ],\n      [\n        '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n        'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n      ],\n      [\n        'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n        'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n      ],\n      [\n        'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n        '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n      ],\n      [\n        '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n        'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n      ],\n      [\n        '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n        'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n      ],\n      [\n        'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n        '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n      ],\n      [\n        'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n        '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n      ],\n      [\n        'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n        '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n      ],\n      [\n        '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n        'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n      ],\n      [\n        '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n        '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n      ],\n      [\n        'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n        'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n      ],\n      [\n        '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n        'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n      ],\n      [\n        '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n        '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n      ],\n      [\n        '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n        '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n      ],\n      [\n        'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n        'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n      ],\n      [\n        '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n        '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n      ],\n      [\n        '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n        '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n      ],\n      [\n        'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n        '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n      ],\n      [\n        'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n        'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n      ],\n    ],\n  },\n  naf: {\n    wnd: 7,\n    points: [\n      [\n        'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n        '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n      ],\n      [\n        '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n        'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n      ],\n      [\n        '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n        '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n      ],\n      [\n        'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n        'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n      ],\n      [\n        '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n        'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n      ],\n      [\n        'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n        'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n      ],\n      [\n        'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n        '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n      ],\n      [\n        'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n        '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n      ],\n      [\n        '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n        '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n      ],\n      [\n        '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n        '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n      ],\n      [\n        '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n        '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n      ],\n      [\n        '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n        '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n      ],\n      [\n        'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n        'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n      ],\n      [\n        'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n        '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n      ],\n      [\n        '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n        'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n      ],\n      [\n        '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n        'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n      ],\n      [\n        '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n        '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n      ],\n      [\n        '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n        '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n      ],\n      [\n        '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n        '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n      ],\n      [\n        '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n        'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n      ],\n      [\n        'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n        'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n      ],\n      [\n        '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n        '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n      ],\n      [\n        '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n        '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n      ],\n      [\n        'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n        'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n      ],\n      [\n        '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n        '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n      ],\n      [\n        'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n        'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n      ],\n      [\n        'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n        'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n      ],\n      [\n        '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n        '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n      ],\n      [\n        '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n        '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n      ],\n      [\n        '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n        '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n      ],\n      [\n        'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n        '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n      ],\n      [\n        '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n        '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n      ],\n      [\n        'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n        '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n      ],\n      [\n        '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n        'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n      ],\n      [\n        '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n        'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n      ],\n      [\n        'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n        'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n      ],\n      [\n        '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n        '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n      ],\n      [\n        '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n        'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n      ],\n      [\n        'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n        'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n      ],\n      [\n        '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n        '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n      ],\n      [\n        '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n        'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n      ],\n      [\n        '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n        '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n      ],\n      [\n        '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n        'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n      ],\n      [\n        'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n        '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n      ],\n      [\n        '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n        '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n      ],\n      [\n        '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n        'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n      ],\n      [\n        '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n        'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n      ],\n      [\n        'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n        'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n      ],\n      [\n        'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n        'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n      ],\n      [\n        '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n        '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n      ],\n      [\n        '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n        '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n      ],\n      [\n        'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n        '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n      ],\n      [\n        'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n        'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n      ],\n      [\n        '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n        '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n      ],\n      [\n        '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n        '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n      ],\n      [\n        'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n        '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n      ],\n      [\n        '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n        '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n      ],\n      [\n        'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n        'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n      ],\n      [\n        '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n        'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n      ],\n      [\n        '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n        '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n      ],\n      [\n        'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n        '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n      ],\n      [\n        'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n        '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n      ],\n      [\n        '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n        '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n      ],\n      [\n        '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n        '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n      ],\n      [\n        '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n        'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n      ],\n      [\n        '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n        'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n      ],\n      [\n        '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n        '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n      ],\n      [\n        '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n        '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n      ],\n      [\n        '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n        '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n      ],\n      [\n        '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n        'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n      ],\n      [\n        'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n        'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n      ],\n      [\n        '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n        'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n      ],\n      [\n        'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n        '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n      ],\n      [\n        'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n        '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n      ],\n      [\n        'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n        '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n      ],\n      [\n        'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n        '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n      ],\n      [\n        '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n        'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n      ],\n      [\n        '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n        '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n      ],\n      [\n        '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n        'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n      ],\n      [\n        'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n        'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n      ],\n      [\n        'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n        '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n      ],\n      [\n        'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n        'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n      ],\n      [\n        'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n        '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n      ],\n      [\n        '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n        '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n      ],\n      [\n        'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n        '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n      ],\n      [\n        'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n        '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n      ],\n      [\n        '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n        '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n      ],\n      [\n        '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n        'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n      ],\n      [\n        'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n        '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n      ],\n      [\n        'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n        '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n      ],\n      [\n        'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n        '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n      ],\n      [\n        '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n        '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n      ],\n      [\n        'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n        'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n      ],\n      [\n        '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n        'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n      ],\n      [\n        'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n        'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n      ],\n      [\n        'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n        '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n      ],\n      [\n        '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n        'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n      ],\n      [\n        'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n        '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n      ],\n      [\n        'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n        '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n      ],\n      [\n        'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n        '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n      ],\n      [\n        '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n        'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n      ],\n      [\n        '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n        'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n      ],\n      [\n        'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n        '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n      ],\n      [\n        '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n        'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n      ],\n      [\n        '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n        '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n      ],\n      [\n        '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n        'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n      ],\n      [\n        'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n        'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n      ],\n      [\n        '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n        'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n      ],\n      [\n        '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n        '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n      ],\n      [\n        '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n        'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n      ],\n      [\n        '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n        '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n      ],\n      [\n        'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n        'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n      ],\n      [\n        '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n        '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n      ],\n      [\n        'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n        '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n      ],\n      [\n        '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n        '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n      ],\n      [\n        'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n        'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n      ],\n      [\n        'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n        '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n      ],\n      [\n        'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n        'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n      ],\n      [\n        '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n        'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n      ],\n      [\n        '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n        '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n      ],\n      [\n        '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n        'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n      ],\n      [\n        '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n        '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n      ],\n      [\n        '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n        '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n      ],\n      [\n        '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n        'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n      ],\n      [\n        '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n        '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n      ],\n      [\n        '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n        '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n      ],\n      [\n        '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n        '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n      ],\n    ],\n  },\n};\n", "'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n  if (options.type === 'short')\n    this.curve = new curve.short(options);\n  else if (options.type === 'edwards')\n    this.curve = new curve.edwards(options);\n  else\n    this.curve = new curve.mont(options);\n  this.g = this.curve.g;\n  this.n = this.curve.n;\n  this.hash = options.hash;\n\n  assert(this.g.validate(), 'Invalid curve');\n  assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n  Object.defineProperty(curves, name, {\n    configurable: true,\n    enumerable: true,\n    get: function() {\n      var curve = new PresetCurve(options);\n      Object.defineProperty(curves, name, {\n        configurable: true,\n        enumerable: true,\n        value: curve,\n      });\n      return curve;\n    },\n  });\n}\n\ndefineCurve('p192', {\n  type: 'short',\n  prime: 'p192',\n  p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n  b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n  n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n    '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n  ],\n});\n\ndefineCurve('p224', {\n  type: 'short',\n  prime: 'p224',\n  p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n  b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n  n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n    'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n  ],\n});\n\ndefineCurve('p256', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n  a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n  b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n  n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n    '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n  ],\n});\n\ndefineCurve('p384', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'fffffffe ffffffff 00000000 00000000 ffffffff',\n  a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'fffffffe ffffffff 00000000 00000000 fffffffc',\n  b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n     '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n  n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n     'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n  hash: hash.sha384,\n  gRed: false,\n  g: [\n    'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n    '5502f25d bf55296c 3a545e38 72760ab7',\n    '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n    '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n  ],\n});\n\ndefineCurve('p521', {\n  type: 'short',\n  prime: null,\n  p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff',\n  a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff fffffffc',\n  b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n     '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n     '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n  n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n     'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n  hash: hash.sha512,\n  gRed: false,\n  g: [\n    '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n    '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n    'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n    '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n    '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n    '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n  ],\n});\n\ndefineCurve('curve25519', {\n  type: 'mont',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '76d06',\n  b: '1',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '9',\n  ],\n});\n\ndefineCurve('ed25519', {\n  type: 'edwards',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '-1',\n  c: '1',\n  // -121665 * (121666^(-1)) (mod P)\n  d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n    // 4/5\n    '6666666666666666666666666666666666666666666666666666666666666658',\n  ],\n});\n\nvar pre;\ntry {\n  pre = require('./precomputed/secp256k1');\n} catch (e) {\n  pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n  type: 'short',\n  prime: 'k256',\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n  a: '0',\n  b: '7',\n  n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n  h: '1',\n  hash: hash.sha256,\n\n  // Precomputed endomorphism\n  beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n  lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n  basis: [\n    {\n      a: '3086d221a7d46bcde86c90e49284eb15',\n      b: '-e4437ed6010e88286f547fa90abfe4c3',\n    },\n    {\n      a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n      b: '3086d221a7d46bcde86c90e49284eb15',\n    },\n  ],\n\n  gRed: false,\n  g: [\n    '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n    '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n    pre,\n  ],\n});\n", "'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n  if (!(this instanceof HmacDRBG))\n    return new HmacDRBG(options);\n  this.hash = options.hash;\n  this.predResist = !!options.predResist;\n\n  this.outLen = this.hash.outSize;\n  this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n  this._reseed = null;\n  this.reseedInterval = null;\n  this.K = null;\n  this.V = null;\n\n  var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n  var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n  var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n  this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n  var seed = entropy.concat(nonce).concat(pers);\n\n  this.K = new Array(this.outLen / 8);\n  this.V = new Array(this.outLen / 8);\n  for (var i = 0; i < this.V.length; i++) {\n    this.K[i] = 0x00;\n    this.V[i] = 0x01;\n  }\n\n  this._update(seed);\n  this._reseed = 1;\n  this.reseedInterval = 0x1000000000000;  // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n  return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n  var kmac = this._hmac()\n                 .update(this.V)\n                 .update([ 0x00 ]);\n  if (seed)\n    kmac = kmac.update(seed);\n  this.K = kmac.digest();\n  this.V = this._hmac().update(this.V).digest();\n  if (!seed)\n    return;\n\n  this.K = this._hmac()\n               .update(this.V)\n               .update([ 0x01 ])\n               .update(seed)\n               .digest();\n  this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n  // Optional entropy enc\n  if (typeof entropyEnc !== 'string') {\n    addEnc = add;\n    add = entropyEnc;\n    entropyEnc = null;\n  }\n\n  entropy = utils.toArray(entropy, entropyEnc);\n  add = utils.toArray(add, addEnc);\n\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n  this._update(entropy.concat(add || []));\n  this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n  if (this._reseed > this.reseedInterval)\n    throw new Error('Reseed is required');\n\n  // Optional encoding\n  if (typeof enc !== 'string') {\n    addEnc = add;\n    add = enc;\n    enc = null;\n  }\n\n  // Optional additional data\n  if (add) {\n    add = utils.toArray(add, addEnc || 'hex');\n    this._update(add);\n  }\n\n  var temp = [];\n  while (temp.length < len) {\n    this.V = this._hmac().update(this.V).digest();\n    temp = temp.concat(this.V);\n  }\n\n  var res = temp.slice(0, len);\n  this._update(add);\n  this._reseed++;\n  return utils.encode(res, enc);\n};\n", "'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n  this.ec = ec;\n  this.priv = null;\n  this.pub = null;\n\n  // KeyPair(ec, { priv: ..., pub: ... })\n  if (options.priv)\n    this._importPrivate(options.priv, options.privEnc);\n  if (options.pub)\n    this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n  if (pub instanceof KeyPair)\n    return pub;\n\n  return new KeyPair(ec, {\n    pub: pub,\n    pubEnc: enc,\n  });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n  if (priv instanceof KeyPair)\n    return priv;\n\n  return new KeyPair(ec, {\n    priv: priv,\n    privEnc: enc,\n  });\n};\n\nKeyPair.prototype.validate = function validate() {\n  var pub = this.getPublic();\n\n  if (pub.isInfinity())\n    return { result: false, reason: 'Invalid public key' };\n  if (!pub.validate())\n    return { result: false, reason: 'Public key is not a point' };\n  if (!pub.mul(this.ec.curve.n).isInfinity())\n    return { result: false, reason: 'Public key * N != O' };\n\n  return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n  // compact is optional argument\n  if (typeof compact === 'string') {\n    enc = compact;\n    compact = null;\n  }\n\n  if (!this.pub)\n    this.pub = this.ec.g.mul(this.priv);\n\n  if (!enc)\n    return this.pub;\n\n  return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n  if (enc === 'hex')\n    return this.priv.toString(16, 2);\n  else\n    return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n  this.priv = new BN(key, enc || 16);\n\n  // Ensure that the priv won't be bigger than n, otherwise we may fail\n  // in fixed multiplication method\n  this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n  if (key.x || key.y) {\n    // Montgomery points only have an `x` coordinate.\n    // Weierstrass/Edwards points on the other hand have both `x` and\n    // `y` coordinates.\n    if (this.ec.curve.type === 'mont') {\n      assert(key.x, 'Need x coordinate');\n    } else if (this.ec.curve.type === 'short' ||\n               this.ec.curve.type === 'edwards') {\n      assert(key.x && key.y, 'Need both x and y coordinate');\n    }\n    this.pub = this.ec.curve.point(key.x, key.y);\n    return;\n  }\n  this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n  if(!pub.validate()) {\n    assert(pub.validate(), 'public point not validated');\n  }\n  return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n  return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n  return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n  return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n         ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n", "'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n  if (options instanceof Signature)\n    return options;\n\n  if (this._importDER(options, enc))\n    return;\n\n  assert(options.r && options.s, 'Signature without r or s');\n  this.r = new BN(options.r, 16);\n  this.s = new BN(options.s, 16);\n  if (options.recoveryParam === undefined)\n    this.recoveryParam = null;\n  else\n    this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n  this.place = 0;\n}\n\nfunction getLength(buf, p) {\n  var initial = buf[p.place++];\n  if (!(initial & 0x80)) {\n    return initial;\n  }\n  var octetLen = initial & 0xf;\n\n  // Indefinite length or overflow\n  if (octetLen === 0 || octetLen > 4) {\n    return false;\n  }\n\n  var val = 0;\n  for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n    val <<= 8;\n    val |= buf[off];\n    val >>>= 0;\n  }\n\n  // Leading zeroes\n  if (val <= 0x7f) {\n    return false;\n  }\n\n  p.place = off;\n  return val;\n}\n\nfunction rmPadding(buf) {\n  var i = 0;\n  var len = buf.length - 1;\n  while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n    i++;\n  }\n  if (i === 0) {\n    return buf;\n  }\n  return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n  data = utils.toArray(data, enc);\n  var p = new Position();\n  if (data[p.place++] !== 0x30) {\n    return false;\n  }\n  var len = getLength(data, p);\n  if (len === false) {\n    return false;\n  }\n  if ((len + p.place) !== data.length) {\n    return false;\n  }\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var rlen = getLength(data, p);\n  if (rlen === false) {\n    return false;\n  }\n  var r = data.slice(p.place, rlen + p.place);\n  p.place += rlen;\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var slen = getLength(data, p);\n  if (slen === false) {\n    return false;\n  }\n  if (data.length !== slen + p.place) {\n    return false;\n  }\n  var s = data.slice(p.place, slen + p.place);\n  if (r[0] === 0) {\n    if (r[1] & 0x80) {\n      r = r.slice(1);\n    } else {\n      // Leading zeroes\n      return false;\n    }\n  }\n  if (s[0] === 0) {\n    if (s[1] & 0x80) {\n      s = s.slice(1);\n    } else {\n      // Leading zeroes\n      return false;\n    }\n  }\n\n  this.r = new BN(r);\n  this.s = new BN(s);\n  this.recoveryParam = null;\n\n  return true;\n};\n\nfunction constructLength(arr, len) {\n  if (len < 0x80) {\n    arr.push(len);\n    return;\n  }\n  var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n  arr.push(octets | 0x80);\n  while (--octets) {\n    arr.push((len >>> (octets << 3)) & 0xff);\n  }\n  arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n  var r = this.r.toArray();\n  var s = this.s.toArray();\n\n  // Pad values\n  if (r[0] & 0x80)\n    r = [ 0 ].concat(r);\n  // Pad values\n  if (s[0] & 0x80)\n    s = [ 0 ].concat(s);\n\n  r = rmPadding(r);\n  s = rmPadding(s);\n\n  while (!s[0] && !(s[1] & 0x80)) {\n    s = s.slice(1);\n  }\n  var arr = [ 0x02 ];\n  constructLength(arr, r.length);\n  arr = arr.concat(r);\n  arr.push(0x02);\n  constructLength(arr, s.length);\n  var backHalf = arr.concat(s);\n  var res = [ 0x30 ];\n  constructLength(res, backHalf.length);\n  res = res.concat(backHalf);\n  return utils.encode(res, enc);\n};\n", "'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n  if (!(this instanceof EC))\n    return new EC(options);\n\n  // Shortcut `elliptic.ec(curve-name)`\n  if (typeof options === 'string') {\n    assert(Object.prototype.hasOwnProperty.call(curves, options),\n      'Unknown curve ' + options);\n\n    options = curves[options];\n  }\n\n  // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n  if (options instanceof curves.PresetCurve)\n    options = { curve: options };\n\n  this.curve = options.curve.curve;\n  this.n = this.curve.n;\n  this.nh = this.n.ushrn(1);\n  this.g = this.curve.g;\n\n  // Point on curve\n  this.g = options.curve.g;\n  this.g.precompute(options.curve.n.bitLength() + 1);\n\n  // Hash for function for DRBG\n  this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n  return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n  return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n  return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n  if (!options)\n    options = {};\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8',\n    entropy: options.entropy || rand(this.hash.hmacStrength),\n    entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n    nonce: this.n.toArray(),\n  });\n\n  var bytes = this.n.byteLength();\n  var ns2 = this.n.sub(new BN(2));\n  for (;;) {\n    var priv = new BN(drbg.generate(bytes));\n    if (priv.cmp(ns2) > 0)\n      continue;\n\n    priv.iaddn(1);\n    return this.keyFromPrivate(priv);\n  }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n  var delta = msg.byteLength() * 8 - this.n.bitLength();\n  if (delta > 0)\n    msg = msg.ushrn(delta);\n  if (!truncOnly && msg.cmp(this.n) >= 0)\n    return msg.sub(this.n);\n  else\n    return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n  if (typeof enc === 'object') {\n    options = enc;\n    enc = null;\n  }\n  if (!options)\n    options = {};\n\n  key = this.keyFromPrivate(key, enc);\n  msg = this._truncateToN(new BN(msg, 16));\n\n  // Zero-extend key to provide enough entropy\n  var bytes = this.n.byteLength();\n  var bkey = key.getPrivate().toArray('be', bytes);\n\n  // Zero-extend nonce to have the same byte size as N\n  var nonce = msg.toArray('be', bytes);\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    entropy: bkey,\n    nonce: nonce,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8',\n  });\n\n  // Number of bytes to generate\n  var ns1 = this.n.sub(new BN(1));\n\n  for (var iter = 0; ; iter++) {\n    var k = options.k ?\n      options.k(iter) :\n      new BN(drbg.generate(this.n.byteLength()));\n    k = this._truncateToN(k, true);\n    if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n      continue;\n\n    var kp = this.g.mul(k);\n    if (kp.isInfinity())\n      continue;\n\n    var kpX = kp.getX();\n    var r = kpX.umod(this.n);\n    if (r.cmpn(0) === 0)\n      continue;\n\n    var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n    s = s.umod(this.n);\n    if (s.cmpn(0) === 0)\n      continue;\n\n    var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n                        (kpX.cmp(r) !== 0 ? 2 : 0);\n\n    // Use complement of `s`, if it is > `n / 2`\n    if (options.canonical && s.cmp(this.nh) > 0) {\n      s = this.n.sub(s);\n      recoveryParam ^= 1;\n    }\n\n    return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n  }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n  msg = this._truncateToN(new BN(msg, 16));\n  key = this.keyFromPublic(key, enc);\n  signature = new Signature(signature, 'hex');\n\n  // Perform primitive values validation\n  var r = signature.r;\n  var s = signature.s;\n  if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n    return false;\n  if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n    return false;\n\n  // Validate signature\n  var sinv = s.invm(this.n);\n  var u1 = sinv.mul(msg).umod(this.n);\n  var u2 = sinv.mul(r).umod(this.n);\n  var p;\n\n  if (!this.curve._maxwellTrick) {\n    p = this.g.mulAdd(u1, key.getPublic(), u2);\n    if (p.isInfinity())\n      return false;\n\n    return p.getX().umod(this.n).cmp(r) === 0;\n  }\n\n  // NOTE: Greg Maxwell's trick, inspired by:\n  // https://git.io/vad3K\n\n  p = this.g.jmulAdd(u1, key.getPublic(), u2);\n  if (p.isInfinity())\n    return false;\n\n  // Compare `p.x` of Jacobian point with `r`,\n  // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n  // inverse of `p.z^2`\n  return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n  assert((3 & j) === j, 'The recovery param is more than two bits');\n  signature = new Signature(signature, enc);\n\n  var n = this.n;\n  var e = new BN(msg);\n  var r = signature.r;\n  var s = signature.s;\n\n  // A set LSB signifies that the y-coordinate is odd\n  var isYOdd = j & 1;\n  var isSecondKey = j >> 1;\n  if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n    throw new Error('Unable to find sencond key candinate');\n\n  // 1.1. Let x = r + jn.\n  if (isSecondKey)\n    r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n  else\n    r = this.curve.pointFromX(r, isYOdd);\n\n  var rInv = signature.r.invm(n);\n  var s1 = n.sub(e).mul(rInv).umod(n);\n  var s2 = s.mul(rInv).umod(n);\n\n  // 1.6.1 Compute Q = r^-1 (sR -  eG)\n  //               Q = r^-1 (sR + -eG)\n  return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n  signature = new Signature(signature, enc);\n  if (signature.recoveryParam !== null)\n    return signature.recoveryParam;\n\n  for (var i = 0; i < 4; i++) {\n    var Qprime;\n    try {\n      Qprime = this.recoverPubKey(e, signature, i);\n    } catch (e) {\n      continue;\n    }\n\n    if (Qprime.eq(Q))\n      return i;\n  }\n  throw new Error('Unable to find valid recovery factor');\n};\n", "'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n  this.eddsa = eddsa;\n  this._secret = parseBytes(params.secret);\n  if (eddsa.isPoint(params.pub))\n    this._pub = params.pub;\n  else\n    this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n  if (pub instanceof KeyPair)\n    return pub;\n  return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n  if (secret instanceof KeyPair)\n    return secret;\n  return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n  return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n  return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n  if (this._pubBytes)\n    return this.eddsa.decodePoint(this._pubBytes);\n  return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n  var eddsa = this.eddsa;\n  var hash = this.hash();\n  var lastIx = eddsa.encodingLength - 1;\n\n  var a = hash.slice(0, eddsa.encodingLength);\n  a[0] &= 248;\n  a[lastIx] &= 127;\n  a[lastIx] |= 64;\n\n  return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n  return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n  return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n  return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n  assert(this._secret, 'KeyPair can only verify');\n  return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n  return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n  assert(this._secret, 'KeyPair is public only');\n  return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n  return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n", "'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n  this.eddsa = eddsa;\n\n  if (typeof sig !== 'object')\n    sig = parseBytes(sig);\n\n  if (Array.isArray(sig)) {\n    sig = {\n      R: sig.slice(0, eddsa.encodingLength),\n      S: sig.slice(eddsa.encodingLength),\n    };\n  }\n\n  assert(sig.R && sig.S, 'Signature without R or S');\n\n  if (eddsa.isPoint(sig.R))\n    this._R = sig.R;\n  if (sig.S instanceof BN)\n    this._S = sig.S;\n\n  this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n  this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n  return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n  return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n  return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n  return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n  return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n  return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n", "'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n  assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n  if (!(this instanceof EDDSA))\n    return new EDDSA(curve);\n\n  curve = curves[curve].curve;\n  this.curve = curve;\n  this.g = curve.g;\n  this.g.precompute(curve.n.bitLength() + 1);\n\n  this.pointClass = curve.point().constructor;\n  this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n  this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n  message = parseBytes(message);\n  var key = this.keyFromSecret(secret);\n  var r = this.hashInt(key.messagePrefix(), message);\n  var R = this.g.mul(r);\n  var Rencoded = this.encodePoint(R);\n  var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n    .mul(key.priv());\n  var S = r.add(s_).umod(this.curve.n);\n  return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n  message = parseBytes(message);\n  sig = this.makeSignature(sig);\n  var key = this.keyFromPublic(pub);\n  var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n  var SG = this.g.mul(sig.S());\n  var RplusAh = sig.R().add(key.pub().mul(h));\n  return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n  var hash = this.hash();\n  for (var i = 0; i < arguments.length; i++)\n    hash.update(arguments[i]);\n  return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n  return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n  return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n  if (sig instanceof Signature)\n    return sig;\n  return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n  var enc = point.getY().toArray('le', this.encodingLength);\n  enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n  return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n  bytes = utils.parseBytes(bytes);\n\n  var lastIx = bytes.length - 1;\n  var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n  var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n  var y = utils.intFromLE(normed);\n  return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n  return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n  return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n  return val instanceof this.pointClass;\n};\n", "'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n", "const EC = require('elliptic').ec\n\nconst ec = new EC('secp256k1')\nconst ecparams = ec.curve\n\n// Hack, we can not use bn.js@5, while elliptic uses bn.js@4\n// See https://github.com/indutny/elliptic/issues/191#issuecomment-569888758\nconst BN = ecparams.n.constructor\n\nfunction loadCompressedPublicKey (first, xbuf) {\n  let x = new BN(xbuf)\n\n  // overflow\n  if (x.cmp(ecparams.p) >= 0) return null\n  x = x.toRed(ecparams.red)\n\n  // compute corresponding Y\n  let y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()\n  if ((first === 0x03) !== y.isOdd()) y = y.redNeg()\n\n  return ec.keyPair({ pub: { x: x, y: y } })\n}\n\nfunction loadUncompressedPublicKey (first, xbuf, ybuf) {\n  let x = new BN(xbuf)\n  let y = new BN(ybuf)\n\n  // overflow\n  if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null\n\n  x = x.toRed(ecparams.red)\n  y = y.toRed(ecparams.red)\n\n  // is odd flag\n  if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null\n\n  // x*x*x + b = y*y\n  const x3 = x.redSqr().redIMul(x)\n  if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null\n\n  return ec.keyPair({ pub: { x: x, y: y } })\n}\n\nfunction loadPublicKey (pubkey) {\n  // length should be validated in interface\n  const first = pubkey[0]\n  switch (first) {\n    case 0x02:\n    case 0x03:\n      if (pubkey.length !== 33) return null\n      return loadCompressedPublicKey(first, pubkey.subarray(1, 33))\n    case 0x04:\n    case 0x06:\n    case 0x07:\n      if (pubkey.length !== 65) return null\n      return loadUncompressedPublicKey(first, pubkey.subarray(1, 33), pubkey.subarray(33, 65))\n    default:\n      return null\n  }\n}\n\nfunction savePublicKey (output, point) {\n  const pubkey = point.encode(null, output.length === 33)\n  // Loop should be faster because we do not need create extra Uint8Array\n  // output.set(new Uint8Array(pubkey))\n  for (let i = 0; i < output.length; ++i) output[i] = pubkey[i]\n}\n\nmodule.exports = {\n  contextRandomize () {\n    return 0\n  },\n\n  privateKeyVerify (seckey) {\n    const bn = new BN(seckey)\n    return bn.cmp(ecparams.n) < 0 && !bn.isZero() ? 0 : 1\n  },\n\n  privateKeyNegate (seckey) {\n    const bn = new BN(seckey)\n    const negate = ecparams.n.sub(bn).umod(ecparams.n).toArrayLike(Uint8Array, 'be', 32)\n    seckey.set(negate)\n    return 0\n  },\n\n  privateKeyTweakAdd (seckey, tweak) {\n    const bn = new BN(tweak)\n    if (bn.cmp(ecparams.n) >= 0) return 1\n\n    bn.iadd(new BN(seckey))\n    if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)\n    if (bn.isZero()) return 1\n\n    const tweaked = bn.toArrayLike(Uint8Array, 'be', 32)\n    seckey.set(tweaked)\n\n    return 0\n  },\n\n  privateKeyTweakMul (seckey, tweak) {\n    let bn = new BN(tweak)\n    if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) return 1\n\n    bn.imul(new BN(seckey))\n    if (bn.cmp(ecparams.n) >= 0) bn = bn.umod(ecparams.n)\n\n    const tweaked = bn.toArrayLike(Uint8Array, 'be', 32)\n    seckey.set(tweaked)\n\n    return 0\n  },\n\n  publicKeyVerify (pubkey) {\n    const pair = loadPublicKey(pubkey)\n    return pair === null ? 1 : 0\n  },\n\n  publicKeyCreate (output, seckey) {\n    const bn = new BN(seckey)\n    if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) return 1\n\n    const point = ec.keyFromPrivate(seckey).getPublic()\n    savePublicKey(output, point)\n\n    return 0\n  },\n\n  publicKeyConvert (output, pubkey) {\n    const pair = loadPublicKey(pubkey)\n    if (pair === null) return 1\n\n    const point = pair.getPublic()\n    savePublicKey(output, point)\n\n    return 0\n  },\n\n  publicKeyNegate (output, pubkey) {\n    const pair = loadPublicKey(pubkey)\n    if (pair === null) return 1\n\n    const point = pair.getPublic()\n    point.y = point.y.redNeg()\n    savePublicKey(output, point)\n\n    return 0\n  },\n\n  publicKeyCombine (output, pubkeys) {\n    const pairs = new Array(pubkeys.length)\n    for (let i = 0; i < pubkeys.length; ++i) {\n      pairs[i] = loadPublicKey(pubkeys[i])\n      if (pairs[i] === null) return 1\n    }\n\n    let point = pairs[0].getPublic()\n    for (let i = 1; i < pairs.length; ++i) point = point.add(pairs[i].pub)\n    if (point.isInfinity()) return 2\n\n    savePublicKey(output, point)\n\n    return 0\n  },\n\n  publicKeyTweakAdd (output, pubkey, tweak) {\n    const pair = loadPublicKey(pubkey)\n    if (pair === null) return 1\n\n    tweak = new BN(tweak)\n    if (tweak.cmp(ecparams.n) >= 0) return 2\n\n    const point = pair.getPublic().add(ecparams.g.mul(tweak))\n    if (point.isInfinity()) return 2\n\n    savePublicKey(output, point)\n\n    return 0\n  },\n\n  publicKeyTweakMul (output, pubkey, tweak) {\n    const pair = loadPublicKey(pubkey)\n    if (pair === null) return 1\n\n    tweak = new BN(tweak)\n    if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) return 2\n\n    const point = pair.getPublic().mul(tweak)\n    savePublicKey(output, point)\n\n    return 0\n  },\n\n  signatureNormalize (sig) {\n    const r = new BN(sig.subarray(0, 32))\n    const s = new BN(sig.subarray(32, 64))\n    if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) return 1\n\n    if (s.cmp(ec.nh) === 1) {\n      sig.set(ecparams.n.sub(s).toArrayLike(Uint8Array, 'be', 32), 32)\n    }\n\n    return 0\n  },\n\n  // Copied 1-to-1 from https://github.com/bitcoinjs/bip66/blob/master/index.js\n  // Adapted for Uint8Array instead Buffer\n  signatureExport (obj, sig) {\n    const sigR = sig.subarray(0, 32)\n    const sigS = sig.subarray(32, 64)\n    if (new BN(sigR).cmp(ecparams.n) >= 0) return 1\n    if (new BN(sigS).cmp(ecparams.n) >= 0) return 1\n\n    const { output } = obj\n\n    // Prepare R\n    let r = output.subarray(4, 4 + 33)\n    r[0] = 0x00\n    r.set(sigR, 1)\n\n    let lenR = 33\n    let posR = 0\n    for (; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);\n\n    r = r.subarray(posR)\n    if (r[0] & 0x80) return 1\n    if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) return 1\n\n    // Prepare S\n    let s = output.subarray(6 + 33, 6 + 33 + 33)\n    s[0] = 0x00\n    s.set(sigS, 1)\n\n    let lenS = 33\n    let posS = 0\n    for (; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);\n\n    s = s.subarray(posS)\n    if (s[0] & 0x80) return 1\n    if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) return 1\n\n    // Set output length for return\n    obj.outputlen = 6 + lenR + lenS\n\n    // Output in specified format\n    // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]\n    output[0] = 0x30\n    output[1] = obj.outputlen - 2\n    output[2] = 0x02\n    output[3] = r.length\n    output.set(r, 4)\n    output[4 + lenR] = 0x02\n    output[5 + lenR] = s.length\n    output.set(s, 6 + lenR)\n\n    return 0\n  },\n\n  // Copied 1-to-1 from https://github.com/bitcoinjs/bip66/blob/master/index.js\n  // Adapted for Uint8Array instead Buffer\n  signatureImport (output, sig) {\n    if (sig.length < 8) return 1\n    if (sig.length > 72) return 1\n    if (sig[0] !== 0x30) return 1\n    if (sig[1] !== sig.length - 2) return 1\n    if (sig[2] !== 0x02) return 1\n\n    const lenR = sig[3]\n    if (lenR === 0) return 1\n    if (5 + lenR >= sig.length) return 1\n    if (sig[4 + lenR] !== 0x02) return 1\n\n    const lenS = sig[5 + lenR]\n    if (lenS === 0) return 1\n    if ((6 + lenR + lenS) !== sig.length) return 1\n\n    if (sig[4] & 0x80) return 1\n    if (lenR > 1 && (sig[4] === 0x00) && !(sig[5] & 0x80)) return 1\n\n    if (sig[lenR + 6] & 0x80) return 1\n    if (lenS > 1 && (sig[lenR + 6] === 0x00) && !(sig[lenR + 7] & 0x80)) return 1\n\n    let sigR = sig.subarray(4, 4 + lenR)\n    if (sigR.length === 33 && sigR[0] === 0x00) sigR = sigR.subarray(1)\n    if (sigR.length > 32) return 1\n\n    let sigS = sig.subarray(6 + lenR)\n    if (sigS.length === 33 && sigS[0] === 0x00) sigS = sigS.slice(1)\n    if (sigS.length > 32) throw new Error('S length is too long')\n\n    let r = new BN(sigR)\n    if (r.cmp(ecparams.n) >= 0) r = new BN(0)\n\n    let s = new BN(sig.subarray(6 + lenR))\n    if (s.cmp(ecparams.n) >= 0) s = new BN(0)\n\n    output.set(r.toArrayLike(Uint8Array, 'be', 32), 0)\n    output.set(s.toArrayLike(Uint8Array, 'be', 32), 32)\n\n    return 0\n  },\n\n  ecdsaSign (obj, message, seckey, data, noncefn) {\n    if (noncefn) {\n      const _noncefn = noncefn\n      noncefn = (counter) => {\n        const nonce = _noncefn(message, seckey, null, data, counter)\n\n        const isValid = nonce instanceof Uint8Array && nonce.length === 32\n        if (!isValid) throw new Error('This is the way')\n\n        return new BN(nonce)\n      }\n    }\n\n    const d = new BN(seckey)\n    if (d.cmp(ecparams.n) >= 0 || d.isZero()) return 1\n\n    let sig\n    try {\n      sig = ec.sign(message, seckey, { canonical: true, k: noncefn, pers: data })\n    } catch (err) {\n      return 1\n    }\n\n    obj.signature.set(sig.r.toArrayLike(Uint8Array, 'be', 32), 0)\n    obj.signature.set(sig.s.toArrayLike(Uint8Array, 'be', 32), 32)\n    obj.recid = sig.recoveryParam\n\n    return 0\n  },\n\n  ecdsaVerify (sig, msg32, pubkey) {\n    const sigObj = { r: sig.subarray(0, 32), s: sig.subarray(32, 64) }\n\n    const sigr = new BN(sigObj.r)\n    const sigs = new BN(sigObj.s)\n    if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) return 1\n    if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return 3\n\n    const pair = loadPublicKey(pubkey)\n    if (pair === null) return 2\n\n    const point = pair.getPublic()\n    const isValid = ec.verify(msg32, sigObj, point)\n    return isValid ? 0 : 3\n  },\n\n  ecdsaRecover (output, sig, recid, msg32) {\n    const sigObj = { r: sig.slice(0, 32), s: sig.slice(32, 64) }\n\n    const sigr = new BN(sigObj.r)\n    const sigs = new BN(sigObj.s)\n    if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) return 1\n\n    if (sigr.isZero() || sigs.isZero()) return 2\n\n    // Can throw `throw new Error('Unable to find sencond key candinate');`\n    let point\n    try {\n      point = ec.recoverPubKey(msg32, sigObj, recid)\n    } catch (err) {\n      return 2\n    }\n\n    savePublicKey(output, point)\n\n    return 0\n  },\n\n  ecdh (output, pubkey, seckey, data, hashfn, xbuf, ybuf) {\n    const pair = loadPublicKey(pubkey)\n    if (pair === null) return 1\n\n    const scalar = new BN(seckey)\n    if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) return 2\n\n    const point = pair.getPublic().mul(scalar)\n\n    if (hashfn === undefined) {\n      const data = point.encode(null, true)\n      const sha256 = ec.hash().update(data).digest()\n      for (let i = 0; i < 32; ++i) output[i] = sha256[i]\n    } else {\n      if (!xbuf) xbuf = new Uint8Array(32)\n      const x = point.getX().toArray('be', 32)\n      for (let i = 0; i < 32; ++i) xbuf[i] = x[i]\n\n      if (!ybuf) ybuf = new Uint8Array(32)\n      const y = point.getY().toArray('be', 32)\n      for (let i = 0; i < 32; ++i) ybuf[i] = y[i]\n\n      const hash = hashfn(xbuf, ybuf, data)\n\n      const isValid = hash instanceof Uint8Array && hash.length === output.length\n      if (!isValid) return 2\n\n      output.set(hash)\n    }\n\n    return 0\n  }\n}\n", "module.exports = require('./lib')(require('./lib/elliptic'))\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n", "var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n", "var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n", "/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n", "var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n", "var baseGetTag = require('./_baseGetTag'),\n    getPrototype = require('./_getPrototype'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n", "module.exports = flatten\nflatten.flatten = flatten\nflatten.unflatten = unflatten\n\nfunction isBuffer (obj) {\n  return obj &&\n    obj.constructor &&\n    (typeof obj.constructor.isBuffer === 'function') &&\n    obj.constructor.isBuffer(obj)\n}\n\nfunction keyIdentity (key) {\n  return key\n}\n\nfunction flatten (target, opts) {\n  opts = opts || {}\n\n  const delimiter = opts.delimiter || '.'\n  const maxDepth = opts.maxDepth\n  const transformKey = opts.transformKey || keyIdentity\n  const output = {}\n\n  function step (object, prev, currentDepth) {\n    currentDepth = currentDepth || 1\n    Object.keys(object).forEach(function (key) {\n      const value = object[key]\n      const isarray = opts.safe && Array.isArray(value)\n      const type = Object.prototype.toString.call(value)\n      const isbuffer = isBuffer(value)\n      const isobject = (\n        type === '[object Object]' ||\n        type === '[object Array]'\n      )\n\n      const newKey = prev\n        ? prev + delimiter + transformKey(key)\n        : transformKey(key)\n\n      if (!isarray && !isbuffer && isobject && Object.keys(value).length &&\n        (!opts.maxDepth || currentDepth < maxDepth)) {\n        return step(value, newKey, currentDepth + 1)\n      }\n\n      output[newKey] = value\n    })\n  }\n\n  step(target)\n\n  return output\n}\n\nfunction unflatten (target, opts) {\n  opts = opts || {}\n\n  const delimiter = opts.delimiter || '.'\n  const overwrite = opts.overwrite || false\n  const transformKey = opts.transformKey || keyIdentity\n  const result = {}\n\n  const isbuffer = isBuffer(target)\n  if (isbuffer || Object.prototype.toString.call(target) !== '[object Object]') {\n    return target\n  }\n\n  // safely ensure that the key is\n  // an integer.\n  function getkey (key) {\n    const parsedKey = Number(key)\n\n    return (\n      isNaN(parsedKey) ||\n      key.indexOf('.') !== -1 ||\n      opts.object\n    ) ? key\n      : parsedKey\n  }\n\n  function addKeys (keyPrefix, recipient, target) {\n    return Object.keys(target).reduce(function (result, key) {\n      result[keyPrefix + delimiter + key] = target[key]\n\n      return result\n    }, recipient)\n  }\n\n  function isEmpty (val) {\n    const type = Object.prototype.toString.call(val)\n    const isArray = type === '[object Array]'\n    const isObject = type === '[object Object]'\n\n    if (!val) {\n      return true\n    } else if (isArray) {\n      return !val.length\n    } else if (isObject) {\n      return !Object.keys(val).length\n    }\n  }\n\n  target = Object.keys(target).reduce(function (result, key) {\n    const type = Object.prototype.toString.call(target[key])\n    const isObject = (type === '[object Object]' || type === '[object Array]')\n    if (!isObject || isEmpty(target[key])) {\n      result[key] = target[key]\n      return result\n    } else {\n      return addKeys(\n        key,\n        result,\n        flatten(target[key], opts)\n      )\n    }\n  }, {})\n\n  Object.keys(target).forEach(function (key) {\n    const split = key.split(delimiter).map(transformKey)\n    let key1 = getkey(split.shift())\n    let key2 = getkey(split[0])\n    let recipient = result\n\n    while (key2 !== undefined) {\n      if (key1 === '__proto__') {\n        return\n      }\n\n      const type = Object.prototype.toString.call(recipient[key1])\n      const isobject = (\n        type === '[object Object]' ||\n        type === '[object Array]'\n      )\n\n      // do not write over falsey, non-undefined values if overwrite is false\n      if (!overwrite && !isobject && typeof recipient[key1] !== 'undefined') {\n        return\n      }\n\n      if ((overwrite && !isobject) || (!overwrite && recipient[key1] == null)) {\n        recipient[key1] = (\n          typeof key2 === 'number' &&\n          !opts.object ? [] : {}\n        )\n      }\n\n      recipient = recipient[key1]\n      if (split.length > 0) {\n        key1 = getkey(split.shift())\n        key2 = getkey(split[0])\n      }\n    }\n\n    // unflatten again for 'messy objects'\n    recipient[key1] = unflatten(target[key], opts)\n  })\n\n  return result\n}\n", "module.exports = encode\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31)\n\nfunction encode(num, out, offset) {\n  if (Number.MAX_SAFE_INTEGER && num > Number.MAX_SAFE_INTEGER) {\n    encode.bytes = 0\n    throw new RangeError('Could not encode varint')\n  }\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  encode.bytes = offset - oldOffset + 1\n  \n  return out\n}\n", "module.exports = read\n\nvar MSB = 0x80\n  , REST = 0x7F\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 || shift > 49) {\n      read.bytes = 0\n      throw new RangeError('Could not decode varint')\n    }\n    b = buf[counter++]\n    res += shift < 28\n      ? (b & REST) << shift\n      : (b & REST) * Math.pow(2, shift)\n    shift += 7\n  } while (b >= MSB)\n\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\nmodule.exports = function (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", "module.exports = {\n    encode: require('./encode.js')\n  , decode: require('./decode.js')\n  , encodingLength: require('./length.js')\n}\n", "var global = typeof self !== 'undefined' ? self : this;\nvar __self__ = (function () {\nfunction F() {\nthis.fetch = false;\nthis.DOMException = global.DOMException\n}\nF.prototype = global;\nreturn new F();\n})();\n(function(self) {\n\nvar irrelevant = (function (exports) {\n\n  var support = {\n    searchParams: 'URLSearchParams' in self,\n    iterable: 'Symbol' in self && 'iterator' in Symbol,\n    blob:\n      'FileReader' in self &&\n      'Blob' in self &&\n      (function() {\n        try {\n          new Blob();\n          return true\n        } catch (e) {\n          return false\n        }\n      })(),\n    formData: 'FormData' in self,\n    arrayBuffer: 'ArrayBuffer' in self\n  };\n\n  function isDataView(obj) {\n    return obj && DataView.prototype.isPrototypeOf(obj)\n  }\n\n  if (support.arrayBuffer) {\n    var viewClasses = [\n      '[object Int8Array]',\n      '[object Uint8Array]',\n      '[object Uint8ClampedArray]',\n      '[object Int16Array]',\n      '[object Uint16Array]',\n      '[object Int32Array]',\n      '[object Uint32Array]',\n      '[object Float32Array]',\n      '[object Float64Array]'\n    ];\n\n    var isArrayBufferView =\n      ArrayBuffer.isView ||\n      function(obj) {\n        return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n      };\n  }\n\n  function normalizeName(name) {\n    if (typeof name !== 'string') {\n      name = String(name);\n    }\n    if (/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(name)) {\n      throw new TypeError('Invalid character in header field name')\n    }\n    return name.toLowerCase()\n  }\n\n  function normalizeValue(value) {\n    if (typeof value !== 'string') {\n      value = String(value);\n    }\n    return value\n  }\n\n  // Build a destructive iterator for the value list\n  function iteratorFor(items) {\n    var iterator = {\n      next: function() {\n        var value = items.shift();\n        return {done: value === undefined, value: value}\n      }\n    };\n\n    if (support.iterable) {\n      iterator[Symbol.iterator] = function() {\n        return iterator\n      };\n    }\n\n    return iterator\n  }\n\n  function Headers(headers) {\n    this.map = {};\n\n    if (headers instanceof Headers) {\n      headers.forEach(function(value, name) {\n        this.append(name, value);\n      }, this);\n    } else if (Array.isArray(headers)) {\n      headers.forEach(function(header) {\n        this.append(header[0], header[1]);\n      }, this);\n    } else if (headers) {\n      Object.getOwnPropertyNames(headers).forEach(function(name) {\n        this.append(name, headers[name]);\n      }, this);\n    }\n  }\n\n  Headers.prototype.append = function(name, value) {\n    name = normalizeName(name);\n    value = normalizeValue(value);\n    var oldValue = this.map[name];\n    this.map[name] = oldValue ? oldValue + ', ' + value : value;\n  };\n\n  Headers.prototype['delete'] = function(name) {\n    delete this.map[normalizeName(name)];\n  };\n\n  Headers.prototype.get = function(name) {\n    name = normalizeName(name);\n    return this.has(name) ? this.map[name] : null\n  };\n\n  Headers.prototype.has = function(name) {\n    return this.map.hasOwnProperty(normalizeName(name))\n  };\n\n  Headers.prototype.set = function(name, value) {\n    this.map[normalizeName(name)] = normalizeValue(value);\n  };\n\n  Headers.prototype.forEach = function(callback, thisArg) {\n    for (var name in this.map) {\n      if (this.map.hasOwnProperty(name)) {\n        callback.call(thisArg, this.map[name], name, this);\n      }\n    }\n  };\n\n  Headers.prototype.keys = function() {\n    var items = [];\n    this.forEach(function(value, name) {\n      items.push(name);\n    });\n    return iteratorFor(items)\n  };\n\n  Headers.prototype.values = function() {\n    var items = [];\n    this.forEach(function(value) {\n      items.push(value);\n    });\n    return iteratorFor(items)\n  };\n\n  Headers.prototype.entries = function() {\n    var items = [];\n    this.forEach(function(value, name) {\n      items.push([name, value]);\n    });\n    return iteratorFor(items)\n  };\n\n  if (support.iterable) {\n    Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n  }\n\n  function consumed(body) {\n    if (body.bodyUsed) {\n      return Promise.reject(new TypeError('Already read'))\n    }\n    body.bodyUsed = true;\n  }\n\n  function fileReaderReady(reader) {\n    return new Promise(function(resolve, reject) {\n      reader.onload = function() {\n        resolve(reader.result);\n      };\n      reader.onerror = function() {\n        reject(reader.error);\n      };\n    })\n  }\n\n  function readBlobAsArrayBuffer(blob) {\n    var reader = new FileReader();\n    var promise = fileReaderReady(reader);\n    reader.readAsArrayBuffer(blob);\n    return promise\n  }\n\n  function readBlobAsText(blob) {\n    var reader = new FileReader();\n    var promise = fileReaderReady(reader);\n    reader.readAsText(blob);\n    return promise\n  }\n\n  function readArrayBufferAsText(buf) {\n    var view = new Uint8Array(buf);\n    var chars = new Array(view.length);\n\n    for (var i = 0; i < view.length; i++) {\n      chars[i] = String.fromCharCode(view[i]);\n    }\n    return chars.join('')\n  }\n\n  function bufferClone(buf) {\n    if (buf.slice) {\n      return buf.slice(0)\n    } else {\n      var view = new Uint8Array(buf.byteLength);\n      view.set(new Uint8Array(buf));\n      return view.buffer\n    }\n  }\n\n  function Body() {\n    this.bodyUsed = false;\n\n    this._initBody = function(body) {\n      this._bodyInit = body;\n      if (!body) {\n        this._bodyText = '';\n      } else if (typeof body === 'string') {\n        this._bodyText = body;\n      } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n        this._bodyBlob = body;\n      } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n        this._bodyFormData = body;\n      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n        this._bodyText = body.toString();\n      } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n        this._bodyArrayBuffer = bufferClone(body.buffer);\n        // IE 10-11 can't handle a DataView body.\n        this._bodyInit = new Blob([this._bodyArrayBuffer]);\n      } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n        this._bodyArrayBuffer = bufferClone(body);\n      } else {\n        this._bodyText = body = Object.prototype.toString.call(body);\n      }\n\n      if (!this.headers.get('content-type')) {\n        if (typeof body === 'string') {\n          this.headers.set('content-type', 'text/plain;charset=UTF-8');\n        } else if (this._bodyBlob && this._bodyBlob.type) {\n          this.headers.set('content-type', this._bodyBlob.type);\n        } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n          this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n        }\n      }\n    };\n\n    if (support.blob) {\n      this.blob = function() {\n        var rejected = consumed(this);\n        if (rejected) {\n          return rejected\n        }\n\n        if (this._bodyBlob) {\n          return Promise.resolve(this._bodyBlob)\n        } else if (this._bodyArrayBuffer) {\n          return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n        } else if (this._bodyFormData) {\n          throw new Error('could not read FormData body as blob')\n        } else {\n          return Promise.resolve(new Blob([this._bodyText]))\n        }\n      };\n\n      this.arrayBuffer = function() {\n        if (this._bodyArrayBuffer) {\n          return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n        } else {\n          return this.blob().then(readBlobAsArrayBuffer)\n        }\n      };\n    }\n\n    this.text = function() {\n      var rejected = consumed(this);\n      if (rejected) {\n        return rejected\n      }\n\n      if (this._bodyBlob) {\n        return readBlobAsText(this._bodyBlob)\n      } else if (this._bodyArrayBuffer) {\n        return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n      } else if (this._bodyFormData) {\n        throw new Error('could not read FormData body as text')\n      } else {\n        return Promise.resolve(this._bodyText)\n      }\n    };\n\n    if (support.formData) {\n      this.formData = function() {\n        return this.text().then(decode)\n      };\n    }\n\n    this.json = function() {\n      return this.text().then(JSON.parse)\n    };\n\n    return this\n  }\n\n  // HTTP methods whose capitalization should be normalized\n  var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n  function normalizeMethod(method) {\n    var upcased = method.toUpperCase();\n    return methods.indexOf(upcased) > -1 ? upcased : method\n  }\n\n  function Request(input, options) {\n    options = options || {};\n    var body = options.body;\n\n    if (input instanceof Request) {\n      if (input.bodyUsed) {\n        throw new TypeError('Already read')\n      }\n      this.url = input.url;\n      this.credentials = input.credentials;\n      if (!options.headers) {\n        this.headers = new Headers(input.headers);\n      }\n      this.method = input.method;\n      this.mode = input.mode;\n      this.signal = input.signal;\n      if (!body && input._bodyInit != null) {\n        body = input._bodyInit;\n        input.bodyUsed = true;\n      }\n    } else {\n      this.url = String(input);\n    }\n\n    this.credentials = options.credentials || this.credentials || 'same-origin';\n    if (options.headers || !this.headers) {\n      this.headers = new Headers(options.headers);\n    }\n    this.method = normalizeMethod(options.method || this.method || 'GET');\n    this.mode = options.mode || this.mode || null;\n    this.signal = options.signal || this.signal;\n    this.referrer = null;\n\n    if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n      throw new TypeError('Body not allowed for GET or HEAD requests')\n    }\n    this._initBody(body);\n  }\n\n  Request.prototype.clone = function() {\n    return new Request(this, {body: this._bodyInit})\n  };\n\n  function decode(body) {\n    var form = new FormData();\n    body\n      .trim()\n      .split('&')\n      .forEach(function(bytes) {\n        if (bytes) {\n          var split = bytes.split('=');\n          var name = split.shift().replace(/\\+/g, ' ');\n          var value = split.join('=').replace(/\\+/g, ' ');\n          form.append(decodeURIComponent(name), decodeURIComponent(value));\n        }\n      });\n    return form\n  }\n\n  function parseHeaders(rawHeaders) {\n    var headers = new Headers();\n    // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n    // https://tools.ietf.org/html/rfc7230#section-3.2\n    var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n    preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n      var parts = line.split(':');\n      var key = parts.shift().trim();\n      if (key) {\n        var value = parts.join(':').trim();\n        headers.append(key, value);\n      }\n    });\n    return headers\n  }\n\n  Body.call(Request.prototype);\n\n  function Response(bodyInit, options) {\n    if (!options) {\n      options = {};\n    }\n\n    this.type = 'default';\n    this.status = options.status === undefined ? 200 : options.status;\n    this.ok = this.status >= 200 && this.status < 300;\n    this.statusText = 'statusText' in options ? options.statusText : 'OK';\n    this.headers = new Headers(options.headers);\n    this.url = options.url || '';\n    this._initBody(bodyInit);\n  }\n\n  Body.call(Response.prototype);\n\n  Response.prototype.clone = function() {\n    return new Response(this._bodyInit, {\n      status: this.status,\n      statusText: this.statusText,\n      headers: new Headers(this.headers),\n      url: this.url\n    })\n  };\n\n  Response.error = function() {\n    var response = new Response(null, {status: 0, statusText: ''});\n    response.type = 'error';\n    return response\n  };\n\n  var redirectStatuses = [301, 302, 303, 307, 308];\n\n  Response.redirect = function(url, status) {\n    if (redirectStatuses.indexOf(status) === -1) {\n      throw new RangeError('Invalid status code')\n    }\n\n    return new Response(null, {status: status, headers: {location: url}})\n  };\n\n  exports.DOMException = self.DOMException;\n  try {\n    new exports.DOMException();\n  } catch (err) {\n    exports.DOMException = function(message, name) {\n      this.message = message;\n      this.name = name;\n      var error = Error(message);\n      this.stack = error.stack;\n    };\n    exports.DOMException.prototype = Object.create(Error.prototype);\n    exports.DOMException.prototype.constructor = exports.DOMException;\n  }\n\n  function fetch(input, init) {\n    return new Promise(function(resolve, reject) {\n      var request = new Request(input, init);\n\n      if (request.signal && request.signal.aborted) {\n        return reject(new exports.DOMException('Aborted', 'AbortError'))\n      }\n\n      var xhr = new XMLHttpRequest();\n\n      function abortXhr() {\n        xhr.abort();\n      }\n\n      xhr.onload = function() {\n        var options = {\n          status: xhr.status,\n          statusText: xhr.statusText,\n          headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n        };\n        options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n        var body = 'response' in xhr ? xhr.response : xhr.responseText;\n        resolve(new Response(body, options));\n      };\n\n      xhr.onerror = function() {\n        reject(new TypeError('Network request failed'));\n      };\n\n      xhr.ontimeout = function() {\n        reject(new TypeError('Network request failed'));\n      };\n\n      xhr.onabort = function() {\n        reject(new exports.DOMException('Aborted', 'AbortError'));\n      };\n\n      xhr.open(request.method, request.url, true);\n\n      if (request.credentials === 'include') {\n        xhr.withCredentials = true;\n      } else if (request.credentials === 'omit') {\n        xhr.withCredentials = false;\n      }\n\n      if ('responseType' in xhr && support.blob) {\n        xhr.responseType = 'blob';\n      }\n\n      request.headers.forEach(function(value, name) {\n        xhr.setRequestHeader(name, value);\n      });\n\n      if (request.signal) {\n        request.signal.addEventListener('abort', abortXhr);\n\n        xhr.onreadystatechange = function() {\n          // DONE (success or failure)\n          if (xhr.readyState === 4) {\n            request.signal.removeEventListener('abort', abortXhr);\n          }\n        };\n      }\n\n      xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n    })\n  }\n\n  fetch.polyfill = true;\n\n  if (!self.fetch) {\n    self.fetch = fetch;\n    self.Headers = Headers;\n    self.Request = Request;\n    self.Response = Response;\n  }\n\n  exports.Headers = Headers;\n  exports.Request = Request;\n  exports.Response = Response;\n  exports.fetch = fetch;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n  return exports;\n\n})({});\n})(__self__);\n__self__.fetch.ponyfill = true;\n// Remove \"polyfill\" property added by whatwg-fetch\ndelete __self__.fetch.polyfill;\n// Choose between native implementation (global) or custom implementation (__self__)\n// var ctx = global.fetch ? global : __self__;\nvar ctx = __self__; // this line disable service worker support temporarily\nexports = ctx.fetch // To enable: import fetch from 'cross-fetch'\nexports.default = ctx.fetch // For TypeScript consumers without esModuleInterop.\nexports.fetch = ctx.fetch // To enable: import {fetch} from 'cross-fetch'\nexports.Headers = ctx.Headers\nexports.Request = ctx.Request\nexports.Response = ctx.Response\nmodule.exports = exports\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ONE = exports.SECRET_KEY_LENGTH = exports.AES_IV_PLUS_TAG_LENGTH = exports.AES_TAG_LENGTH = exports.AES_IV_LENGTH = exports.UNCOMPRESSED_PUBLIC_KEY_SIZE = void 0;\nexports.UNCOMPRESSED_PUBLIC_KEY_SIZE = 65;\nexports.AES_IV_LENGTH = 16;\nexports.AES_TAG_LENGTH = 16;\nexports.AES_IV_PLUS_TAG_LENGTH = exports.AES_IV_LENGTH + exports.AES_TAG_LENGTH;\nexports.SECRET_KEY_LENGTH = 32;\nexports.ONE = BigInt(1);\n", "export function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`Wrong positive integer: ${n}`);\n}\n\nexport function bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`Expected boolean, not ${b}`);\n}\n\nexport function bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!(b instanceof Uint8Array)) 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};\nexport function 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\nexport function 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}\nexport function 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\nconst assert = {\n  number,\n  bool,\n  bytes,\n  hash,\n  exists,\n  output,\n};\n\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, 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\nconst u8a = (a: any): a is Uint8Array => a instanceof Uint8Array;\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\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.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE) throw new Error('Non little-endian hardware is not supported');\n\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!u8a(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/**\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 len = hex.length;\n  if (len % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n  const array = new Uint8Array(len / 2);\n  for (let i = 0; i < array.length; i++) {\n    const j = i * 2;\n    const hexByte = hex.slice(j, j + 2);\n    const byte = Number.parseInt(hexByte, 16);\n    if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');\n    array[i] = byte;\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 (!u8a(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  const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n  let pad = 0; // walk through each item, ensure they have proper type\n  arrays.forEach((a) => {\n    if (!u8a(a)) throw new Error('Uint8Array expected');\n    r.set(a, pad);\n    pad += a.length;\n  });\n  return r;\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\n// Check if object doens't have custom constructor (like Uint8Array/Array)\nconst isPlainObject = (obj: any) =>\n  Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object;\n\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && (typeof opts !== 'object' || !isPlainObject(opts)))\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 assert 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    assert.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    assert.exists(this);\n    assert.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// 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 = 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 = 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 = 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 = wrapConstructor(() => new SHA256());\nexport const sha224 = 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);\nconst u8a = (a: any): a is Uint8Array => a instanceof Uint8Array;\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\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!u8a(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/**\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 len = hex.length;\n  if (len % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n  const array = new Uint8Array(len / 2);\n  for (let i = 0; i < array.length; i++) {\n    const j = i * 2;\n    const hexByte = hex.slice(j, j + 2);\n    const byte = Number.parseInt(hexByte, 16);\n    if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');\n    array[i] = byte;\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 (!u8a(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 (u8a(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  const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n  let pad = 0; // walk through each item, ensure they have proper type\n  arrays.forEach((a) => {\n    if (!u8a(a)) throw new Error('Uint8Array expected');\n    r.set(a, pad);\n    pad += a.length;\n  });\n  return r;\n}\n\nexport function equalBytes(b1: Uint8Array, b2: Uint8Array) {\n  // We don't care about timing attacks here\n  if (b1.length !== b2.length) return false;\n  for (let i = 0; i < b1.length; i++) if (b1[i] !== b2[i]) return false;\n  return true;\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  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// Tonelli-Shanks algorithm\n// Paper 1: https://eprint.iacr.org/2012/685.pdf (page 12)\n// Paper 2: Square Roots from 1; 24, 51, 10 to Dan Shanks\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, Fp2 for example 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 https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/\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\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// 0 is non-invertible: non-batched version will throw on 0\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 galois field over prime. Non-primes are not supported for now.\n * Do not init in loop: slow. Very fragile: always run a benchmark on change.\n * Major performance gains:\n * a) non-normalized operations like mulN instead of mul\n * b) `Object.freeze`\n * c) Same object shape: never add or remove keys\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 Fp 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 * FIPS 186 B.4.1-compliant \"constant-time\" private key generation utility.\n * Can take (n+8) 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 40 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 * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. curveFn.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\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", "/*! 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  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 (!(data instanceof Uint8Array)) 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>) {\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 (key instanceof Uint8Array) 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(readonly px: T, readonly py: T, readonly pz: T) {\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      // Zero is valid point too!\n      if (this.is0()) {\n        if (CURVE.allowInfinityPoint) 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(readonly r: bigint, readonly s: bigint, readonly recovery?: number) {\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 (nBitLength+64)\n     * as per FIPS 186 B.4.1 with modulo bias being neglible.\n     */\n    randomPrivateKey: (): Uint8Array => {\n      const rand = CURVE.randomBytes(Fp.BYTES + 8);\n      const num = mod.hashToPrivateScalar(rand, CURVE_ORDER);\n      return ut.numberToBytesBE(num, CURVE.nByteLength);\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 = item instanceof Uint8Array;\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, Fp.BYTES)); // check for being of size 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' || sg instanceof Uint8Array) {\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 * From draft-irtf-cfrg-hash-to-curve-16\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", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport type { Group, GroupConstructor, AffinePoint } from './curve.js';\nimport { mod, IField } from './modular.js';\nimport { bytesToNumberBE, CHash, concatBytes, utf8ToBytes, validateObject } from './utils.js';\n\n/**\n * * `DST` is a domain separation tag, defined in section 2.2.5\n * * `p` characteristic of F, where F is a finite field of characteristic p and order q = p^m\n * * `m` is extension degree (1 for prime fields)\n * * `k` is the target security target in bits (e.g. 128), from section 5.1\n * * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF)\n * * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props\n */\ntype UnicodeOrBytes = string | Uint8Array;\nexport type Opts = {\n  DST: UnicodeOrBytes;\n  p: bigint;\n  m: number;\n  k: number;\n  expand: 'xmd' | 'xof';\n  hash: CHash;\n};\n\nfunction validateDST(dst: UnicodeOrBytes): Uint8Array {\n  if (dst instanceof Uint8Array) return dst;\n  if (typeof dst === 'string') return utf8ToBytes(dst);\n  throw new Error('DST must be Uint8Array or string');\n}\n\n// Octet Stream to Integer. \"spec\" implementation of os2ip is 2.5x slower vs bytesToNumberBE.\nconst os2ip = bytesToNumberBE;\n\n// Integer to Octet Stream (numberToBytesBE)\nfunction i2osp(value: number, length: number): Uint8Array {\n  if (value < 0 || value >= 1 << (8 * length)) {\n    throw new Error(`bad I2OSP call: value=${value} length=${length}`);\n  }\n  const res = Array.from({ length }).fill(0) as number[];\n  for (let i = length - 1; i >= 0; i--) {\n    res[i] = value & 0xff;\n    value >>>= 8;\n  }\n  return new Uint8Array(res);\n}\n\nfunction strxor(a: Uint8Array, b: Uint8Array): Uint8Array {\n  const arr = new Uint8Array(a.length);\n  for (let i = 0; i < a.length; i++) {\n    arr[i] = a[i] ^ b[i];\n  }\n  return arr;\n}\n\nfunction isBytes(item: unknown): void {\n  if (!(item instanceof Uint8Array)) throw new Error('Uint8Array expected');\n}\nfunction isNum(item: unknown): void {\n  if (!Number.isSafeInteger(item)) throw new Error('number expected');\n}\n\n// Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits\n// https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-11#section-5.4.1\nexport function expand_message_xmd(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  H: CHash\n): Uint8Array {\n  isBytes(msg);\n  isBytes(DST);\n  isNum(lenInBytes);\n  // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-5.3.3\n  if (DST.length > 255) DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));\n  const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;\n  const ell = Math.ceil(lenInBytes / b_in_bytes);\n  if (ell > 255) throw new Error('Invalid xmd length');\n  const DST_prime = concatBytes(DST, i2osp(DST.length, 1));\n  const Z_pad = i2osp(0, r_in_bytes);\n  const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str\n  const b = new Array<Uint8Array>(ell);\n  const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));\n  b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime));\n  for (let i = 1; i <= ell; i++) {\n    const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime];\n    b[i] = H(concatBytes(...args));\n  }\n  const pseudo_random_bytes = concatBytes(...b);\n  return pseudo_random_bytes.slice(0, lenInBytes);\n}\n\nexport function expand_message_xof(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  k: number,\n  H: CHash\n): Uint8Array {\n  isBytes(msg);\n  isBytes(DST);\n  isNum(lenInBytes);\n  // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-5.3.3\n  // DST = H('H2C-OVERSIZE-DST-' || a_very_long_DST, Math.ceil((lenInBytes * k) / 8));\n  if (DST.length > 255) {\n    const dkLen = Math.ceil((2 * k) / 8);\n    DST = H.create({ dkLen }).update(utf8ToBytes('H2C-OVERSIZE-DST-')).update(DST).digest();\n  }\n  if (lenInBytes > 65535 || DST.length > 255)\n    throw new Error('expand_message_xof: invalid lenInBytes');\n  return (\n    H.create({ dkLen: lenInBytes })\n      .update(msg)\n      .update(i2osp(lenInBytes, 2))\n      // 2. DST_prime = DST || I2OSP(len(DST), 1)\n      .update(DST)\n      .update(i2osp(DST.length, 1))\n      .digest()\n  );\n}\n\n/**\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-11#section-5.3\n * @param msg a byte string containing the message to hash\n * @param count the number of elements of F to output\n * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above\n * @returns [u_0, ..., u_(count - 1)], a list of field elements.\n */\nexport function hash_to_field(msg: Uint8Array, count: number, options: Opts): bigint[][] {\n  validateObject(options, {\n    DST: 'string',\n    p: 'bigint',\n    m: 'isSafeInteger',\n    k: 'isSafeInteger',\n    hash: 'hash',\n  });\n  const { p, k, m, hash, expand, DST: _DST } = options;\n  isBytes(msg);\n  isNum(count);\n  const DST = validateDST(_DST);\n  const log2p = p.toString(2).length;\n  const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above\n  const len_in_bytes = count * m * L;\n  let prb; // pseudo_random_bytes\n  if (expand === 'xmd') {\n    prb = expand_message_xmd(msg, DST, len_in_bytes, hash);\n  } else if (expand === 'xof') {\n    prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);\n  } else if (expand === '_internal_pass') {\n    // for internal tests only\n    prb = msg;\n  } else {\n    throw new Error('expand must be \"xmd\" or \"xof\"');\n  }\n  const u = new Array(count);\n  for (let i = 0; i < count; i++) {\n    const e = new Array(m);\n    for (let j = 0; j < m; j++) {\n      const elm_offset = L * (j + i * m);\n      const tv = prb.subarray(elm_offset, elm_offset + L);\n      e[j] = mod(os2ip(tv), p);\n    }\n    u[i] = e;\n  }\n  return u;\n}\n\nexport function isogenyMap<T, F extends IField<T>>(field: F, map: [T[], T[], T[], T[]]) {\n  // Make same order as in spec\n  const COEFF = map.map((i) => Array.from(i).reverse());\n  return (x: T, y: T) => {\n    const [xNum, xDen, yNum, yDen] = COEFF.map((val) =>\n      val.reduce((acc, i) => field.add(field.mul(acc, x), i))\n    );\n    x = field.div(xNum, xDen); // xNum / xDen\n    y = field.mul(y, field.div(yNum, yDen)); // y * (yNum / yDev)\n    return { x, y };\n  };\n}\n\nexport interface H2CPoint<T> extends Group<H2CPoint<T>> {\n  add(rhs: H2CPoint<T>): H2CPoint<T>;\n  toAffine(iz?: bigint): AffinePoint<T>;\n  clearCofactor(): H2CPoint<T>;\n  assertValidity(): void;\n}\n\nexport interface H2CPointConstructor<T> extends GroupConstructor<H2CPoint<T>> {\n  fromAffine(ap: AffinePoint<T>): H2CPoint<T>;\n}\n\nexport type MapToCurve<T> = (scalar: bigint[]) => AffinePoint<T>;\n\n// Separated from initialization opts, so users won't accidentally change per-curve parameters\n// (changing DST is ok!)\nexport type htfBasicOpts = { DST: UnicodeOrBytes };\n\nexport function createHasher<T>(\n  Point: H2CPointConstructor<T>,\n  mapToCurve: MapToCurve<T>,\n  def: Opts & { encodeDST?: UnicodeOrBytes }\n) {\n  if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');\n  return {\n    // Encodes byte string to elliptic curve\n    // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-3\n    hashToCurve(msg: Uint8Array, options?: htfBasicOpts) {\n      const u = hash_to_field(msg, 2, { ...def, DST: def.DST, ...options } as Opts);\n      const u0 = Point.fromAffine(mapToCurve(u[0]));\n      const u1 = Point.fromAffine(mapToCurve(u[1]));\n      const P = u0.add(u1).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n\n    // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-3\n    encodeToCurve(msg: Uint8Array, options?: htfBasicOpts) {\n      const u = hash_to_field(msg, 1, { ...def, DST: def.encodeDST, ...options } as Opts);\n      const P = Point.fromAffine(mapToCurve(u[0])).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n  };\n}\n", "import assert 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    assert.hash(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    assert.exists(this);\n    this.iHash.update(buf);\n    return this;\n  }\n  digestInto(out: Uint8Array) {\n    assert.exists(this);\n    assert.bytes(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", "import assert from './_assert.js';\nimport { CHash, Input, toBytes } from './utils.js';\nimport { hmac } from './hmac.js';\n\n// HKDF (RFC 5869)\n// https://soatok.blog/2021/11/17/understanding-hkdf/\n\n/**\n * HKDF-Extract(IKM, salt) -> PRK\n * Arguments position differs from spec (IKM is first one, since it is not optional)\n * @param hash\n * @param ikm\n * @param salt\n * @returns\n */\nexport function extract(hash: CHash, ikm: Input, salt?: Input) {\n  assert.hash(hash);\n  // NOTE: some libraries treat zero-length array as 'not provided';\n  // we don't, since we have undefined as 'not provided'\n  // https://github.com/RustCrypto/KDFs/issues/15\n  if (salt === undefined) salt = new Uint8Array(hash.outputLen); // if not provided, it is set to a string of HashLen zeros\n  return hmac(hash, toBytes(salt), toBytes(ikm));\n}\n\n// HKDF-Expand(PRK, info, L) -> OKM\nconst HKDF_COUNTER = new Uint8Array([0]);\nconst EMPTY_BUFFER = new Uint8Array();\n\n/**\n * HKDF-expand from the spec.\n * @param prk - a pseudorandom key of at least HashLen octets (usually, the output from the extract step)\n * @param info - optional context and application specific information (can be a zero-length string)\n * @param length - length of output keying material in octets\n */\nexport function expand(hash: CHash, prk: Input, info?: Input, length: number = 32) {\n  assert.hash(hash);\n  assert.number(length);\n  if (length > 255 * hash.outputLen) throw new Error('Length should be <= 255*HashLen');\n  const blocks = Math.ceil(length / hash.outputLen);\n  if (info === undefined) info = EMPTY_BUFFER;\n  // first L(ength) octets of T\n  const okm = new Uint8Array(blocks * hash.outputLen);\n  // Re-use HMAC instance between blocks\n  const HMAC = hmac.create(hash, prk);\n  const HMACTmp = HMAC._cloneInto();\n  const T = new Uint8Array(HMAC.outputLen);\n  for (let counter = 0; counter < blocks; counter++) {\n    HKDF_COUNTER[0] = counter + 1;\n    // T(0) = empty string (zero length)\n    // T(N) = HMAC-Hash(PRK, T(N-1) | info | N)\n    HMACTmp.update(counter === 0 ? EMPTY_BUFFER : T)\n      .update(info)\n      .update(HKDF_COUNTER)\n      .digestInto(T);\n    okm.set(T, hash.outputLen * counter);\n    HMAC._cloneInto(HMACTmp);\n  }\n  HMAC.destroy();\n  HMACTmp.destroy();\n  T.fill(0);\n  HKDF_COUNTER.fill(0);\n  return okm.slice(0, length);\n}\n\n/**\n * HKDF (RFC 5869): extract + expand in one step.\n * @param hash - hash function that would be used (e.g. sha256)\n * @param ikm - input keying material, the initial key\n * @param salt - optional salt value (a non-secret random value)\n * @param info - optional context and application specific information\n * @param length - length of output keying material in octets\n */\nexport const hkdf = (\n  hash: CHash,\n  ikm: Input,\n  salt: Input | undefined,\n  info: Input | undefined,\n  length: number\n) => expand(hash, extract(hash, ikm, salt), info, length);\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.aesDecrypt = exports.aesEncrypt = exports.getValidSecret = exports.decodeHex = exports.remove0x = void 0;\nvar secp256k1_1 = require(\"@noble/curves/secp256k1\");\nvar crypto_1 = require(\"crypto\");\nvar consts_1 = require(\"./consts\");\nfunction remove0x(hex) {\n    if (hex.startsWith(\"0x\") || hex.startsWith(\"0X\")) {\n        return hex.slice(2);\n    }\n    return hex;\n}\nexports.remove0x = remove0x;\nfunction decodeHex(hex) {\n    return Buffer.from(remove0x(hex), \"hex\");\n}\nexports.decodeHex = decodeHex;\nfunction getValidSecret() {\n    var key;\n    do {\n        key = (0, crypto_1.randomBytes)(consts_1.SECRET_KEY_LENGTH);\n    } while (!secp256k1_1.secp256k1.utils.isValidPrivateKey(key));\n    return key;\n}\nexports.getValidSecret = getValidSecret;\nfunction aesEncrypt(key, plainText) {\n    var nonce = (0, crypto_1.randomBytes)(consts_1.AES_IV_LENGTH);\n    var cipher = (0, crypto_1.createCipheriv)(\"aes-256-gcm\", key, nonce);\n    var encrypted = Buffer.concat([cipher.update(plainText), cipher.final()]);\n    var tag = cipher.getAuthTag();\n    return Buffer.concat([nonce, tag, encrypted]);\n}\nexports.aesEncrypt = aesEncrypt;\nfunction aesDecrypt(key, cipherText) {\n    var nonce = cipherText.subarray(0, consts_1.AES_IV_LENGTH);\n    var tag = cipherText.subarray(consts_1.AES_IV_LENGTH, consts_1.AES_IV_PLUS_TAG_LENGTH);\n    var ciphered = cipherText.subarray(consts_1.AES_IV_PLUS_TAG_LENGTH);\n    var decipher = (0, crypto_1.createDecipheriv)(\"aes-256-gcm\", key, nonce);\n    decipher.setAuthTag(tag);\n    return Buffer.concat([decipher.update(ciphered), decipher.final()]);\n}\nexports.aesDecrypt = aesDecrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar secp256k1_1 = require(\"@noble/curves/secp256k1\");\nvar hkdf_1 = require(\"@noble/hashes/hkdf\");\nvar sha256_1 = require(\"@noble/hashes/sha256\");\nvar consts_1 = require(\"../consts\");\nvar utils_1 = require(\"../utils\");\nvar PublicKey = /** @class */ (function () {\n    function PublicKey(buffer) {\n        this.uncompressed = Buffer.from(secp256k1_1.secp256k1.getSharedSecret(consts_1.ONE, buffer, false));\n        this.compressed = Buffer.from(secp256k1_1.secp256k1.getSharedSecret(consts_1.ONE, buffer, true));\n    }\n    PublicKey.fromHex = function (hex) {\n        var decoded = (0, utils_1.decodeHex)(hex);\n        if (decoded.length === consts_1.UNCOMPRESSED_PUBLIC_KEY_SIZE - 1) {\n            // eth public key\n            var prefix = Buffer.from([0x04]);\n            var fixed = Buffer.concat([prefix, decoded]);\n            return new PublicKey(fixed);\n        }\n        return new PublicKey(decoded);\n    };\n    PublicKey.prototype.toHex = function (compressed) {\n        if (compressed === void 0) { compressed = true; }\n        if (compressed) {\n            return this.compressed.toString(\"hex\");\n        }\n        else {\n            return this.uncompressed.toString(\"hex\");\n        }\n    };\n    PublicKey.prototype.decapsulate = function (priv) {\n        var master = Buffer.concat([this.uncompressed, priv.multiply(this)]);\n        return Buffer.from((0, hkdf_1.hkdf)(sha256_1.sha256, master, undefined, undefined, 32));\n    };\n    PublicKey.prototype.equals = function (other) {\n        return this.uncompressed.equals(other.uncompressed);\n    };\n    return PublicKey;\n}());\nexports.default = PublicKey;\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar secp256k1_1 = require(\"@noble/curves/secp256k1\");\nvar hkdf_1 = require(\"@noble/hashes/hkdf\");\nvar sha256_1 = require(\"@noble/hashes/sha256\");\nvar utils_1 = require(\"../utils\");\nvar PublicKey_1 = __importDefault(require(\"./PublicKey\"));\nvar PrivateKey = /** @class */ (function () {\n    function PrivateKey(secret) {\n        this.secret = secret || (0, utils_1.getValidSecret)();\n        if (!secp256k1_1.secp256k1.utils.isValidPrivateKey(this.secret)) {\n            throw new Error(\"Invalid private key\");\n        }\n        this.publicKey = new PublicKey_1.default(Buffer.from(secp256k1_1.secp256k1.getPublicKey(this.secret)));\n    }\n    PrivateKey.fromHex = function (hex) {\n        return new PrivateKey((0, utils_1.decodeHex)(hex));\n    };\n    PrivateKey.prototype.toHex = function () {\n        return this.secret.toString(\"hex\");\n    };\n    PrivateKey.prototype.encapsulate = function (pub) {\n        var master = Buffer.concat([this.publicKey.uncompressed, this.multiply(pub)]);\n        return Buffer.from((0, hkdf_1.hkdf)(sha256_1.sha256, master, undefined, undefined, 32));\n    };\n    PrivateKey.prototype.multiply = function (pub) {\n        return Buffer.from(secp256k1_1.secp256k1.getSharedSecret(this.secret, pub.compressed, false));\n    };\n    PrivateKey.prototype.equals = function (other) {\n        return this.secret.equals(other.secret);\n    };\n    return PrivateKey;\n}());\nexports.default = PrivateKey;\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PublicKey = exports.PrivateKey = void 0;\nvar PrivateKey_1 = require(\"./PrivateKey\");\nObject.defineProperty(exports, \"PrivateKey\", { enumerable: true, get: function () { return __importDefault(PrivateKey_1).default; } });\nvar PublicKey_1 = require(\"./PublicKey\");\nObject.defineProperty(exports, \"PublicKey\", { enumerable: true, get: function () { return __importDefault(PublicKey_1).default; } });\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.utils = exports.PublicKey = exports.PrivateKey = exports.decrypt = exports.encrypt = void 0;\nvar consts_1 = require(\"./consts\");\nvar keys_1 = require(\"./keys\");\nvar utils_1 = require(\"./utils\");\nfunction encrypt(receiverRawPK, msg) {\n    var ephemeralKey = new keys_1.PrivateKey();\n    var receiverPK = receiverRawPK instanceof Buffer\n        ? new keys_1.PublicKey(receiverRawPK)\n        : keys_1.PublicKey.fromHex(receiverRawPK);\n    var aesKey = ephemeralKey.encapsulate(receiverPK);\n    var encrypted = (0, utils_1.aesEncrypt)(aesKey, msg);\n    return Buffer.concat([ephemeralKey.publicKey.uncompressed, encrypted]);\n}\nexports.encrypt = encrypt;\nfunction decrypt(receiverRawSK, msg) {\n    var receiverSK = receiverRawSK instanceof Buffer\n        ? new keys_1.PrivateKey(receiverRawSK)\n        : keys_1.PrivateKey.fromHex(receiverRawSK);\n    var senderPubkey = new keys_1.PublicKey(msg.subarray(0, consts_1.UNCOMPRESSED_PUBLIC_KEY_SIZE));\n    var encrypted = msg.subarray(consts_1.UNCOMPRESSED_PUBLIC_KEY_SIZE);\n    var aesKey = senderPubkey.decapsulate(receiverSK);\n    return (0, utils_1.aesDecrypt)(aesKey, encrypted);\n}\nexports.decrypt = decrypt;\nvar keys_2 = require(\"./keys\");\nObject.defineProperty(exports, \"PrivateKey\", { enumerable: true, get: function () { return keys_2.PrivateKey; } });\nObject.defineProperty(exports, \"PublicKey\", { enumerable: true, get: function () { return keys_2.PublicKey; } });\nexports.utils = {\n    aesDecrypt: utils_1.aesDecrypt,\n    aesEncrypt: utils_1.aesEncrypt,\n    decodeHex: utils_1.decodeHex,\n    getValidSecret: utils_1.getValidSecret,\n    remove0x: utils_1.remove0x,\n};\n", "import { SCHEMES } from \"./uri\";\n\nimport http from \"./schemes/http\";\nSCHEMES[http.scheme] = http;\n\nimport https from \"./schemes/https\";\nSCHEMES[https.scheme] = https;\n\nimport ws from \"./schemes/ws\";\nSCHEMES[ws.scheme] = ws;\n\nimport wss from \"./schemes/wss\";\nSCHEMES[wss.scheme] = wss;\n\nimport mailto from \"./schemes/mailto\";\nSCHEMES[mailto.scheme] = mailto;\n\nimport urn from \"./schemes/urn\";\nSCHEMES[urn.scheme] = urn;\n\nimport uuid from \"./schemes/urn-uuid\";\nSCHEMES[uuid.scheme] = uuid;\n\nexport * from \"./uri\";\n", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { URNComponents } from \"./urn\";\nimport { SCHEMES } from \"../uri\";\n\nexport interface UUIDComponents extends URNComponents {\n\tuuid?: string;\n}\n\nconst UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\nconst UUID_PARSE = /^[0-9A-Fa-f\\-]{36}/;\n\n//RFC 4122\nconst handler:URISchemeHandler<UUIDComponents, URIOptions, URNComponents> = {\n\tscheme : \"urn:uuid\",\n\n\tparse : function (urnComponents:URNComponents, options:URIOptions):UUIDComponents {\n\t\tconst uuidComponents = urnComponents as UUIDComponents;\n\t\tuuidComponents.uuid = uuidComponents.nss;\n\t\tuuidComponents.nss = undefined;\n\n\t\tif (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n\t\t\tuuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n\t\t}\n\n\t\treturn uuidComponents;\n\t},\n\n\tserialize : function (uuidComponents:UUIDComponents, options:URIOptions):URNComponents {\n\t\tconst urnComponents = uuidComponents as URNComponents;\n\t\t//normalize UUID\n\t\turnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n\t\treturn urnComponents;\n\t},\n};\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, SCHEMES } from \"../uri\";\n\nexport interface URNComponents extends URIComponents {\n\tnid?:string;\n\tnss?:string;\n}\n\nexport interface URNOptions extends URIOptions {\n\tnid?:string;\n}\n\nconst NID$ = \"(?:[0-9A-Za-z][0-9A-Za-z\\\\-]{1,31})\";\nconst PCT_ENCODED$ = \"(?:\\\\%[0-9A-Fa-f]{2})\";\nconst TRANS$$ = \"[0-9A-Za-z\\\\(\\\\)\\\\+\\\\,\\\\-\\\\.\\\\:\\\\=\\\\@\\\\;\\\\$\\\\_\\\\!\\\\*\\\\'\\\\/\\\\?\\\\#]\";\nconst NSS$ = \"(?:(?:\" + PCT_ENCODED$ + \"|\" + TRANS$$ + \")+)\";\nconst URN_SCHEME = new RegExp(\"^urn\\\\:(\" + NID$ + \")$\");\nconst URN_PATH = new RegExp(\"^(\" + NID$ + \")\\\\:(\" + NSS$ + \")$\");\nconst URN_PARSE = /^([^\\:]+)\\:(.*)/;\nconst URN_EXCLUDED = /[\\x00-\\x20\\\\\\\"\\&\\<\\>\\[\\]\\^\\`\\{\\|\\}\\~\\x7F-\\xFF]/g;\n\n//RFC 2141\nconst handler:URISchemeHandler<URNComponents,URNOptions> = {\n\tscheme : \"urn\",\n\n\tparse : function (components:URIComponents, options:URNOptions):URNComponents {\n\t\tconst matches = components.path && components.path.match(URN_PARSE);\n\t\tlet urnComponents = components as URNComponents;\n\n\t\tif (matches) {\n\t\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\t\tconst nid = matches[1].toLowerCase();\n\t\t\tconst nss = matches[2];\n\t\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\t\turnComponents.nid = nid;\n\t\t\turnComponents.nss = nss;\n\t\t\turnComponents.path = undefined;\n\n\t\t\tif (schemeHandler) {\n\t\t\t\turnComponents = schemeHandler.parse(urnComponents, options) as URNComponents;\n\t\t\t}\n\t\t} else {\n\t\t\turnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n\t\t}\n\n\t\treturn urnComponents;\n\t},\n\n\tserialize : function (urnComponents:URNComponents, options:URNOptions):URIComponents {\n\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\tconst nid = urnComponents.nid;\n\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\tif (schemeHandler) {\n\t\t\turnComponents = schemeHandler.serialize(urnComponents, options) as URNComponents;\n\t\t}\n\n\t\tconst uriComponents = urnComponents as URIComponents;\n\t\tconst nss = urnComponents.nss;\n\t\turiComponents.path = `${nid || options.nid}:${nss}`;\n\n\t\treturn uriComponents;\n\t},\n};\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, pctDecChars, unescapeComponent } from \"../uri\";\nimport punycode from \"punycode\";\nimport { merge, subexp, toUpperCase, toArray } from \"../util\";\n\nexport interface MailtoHeaders {\n\t[hfname:string]:string\n}\n\nexport interface MailtoComponents extends URIComponents {\n\tto:Array<string>,\n\theaders?:MailtoHeaders,\n\tsubject?:string,\n\tbody?:string\n}\n\nconst O:MailtoHeaders = {};\nconst isIRI = true;\n\n//RFC 3986\nconst UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nconst HEXDIG$$ = \"[0-9A-Fa-f]\";  //case-insensitive\nconst PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$));  //expanded\n\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\";  //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$);  //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$));  //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nconst ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nconst QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nconst VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nconst DOT_ATOM_TEXT$ = subexp(ATEXT$$ + \"+\" + subexp(\"\\\\.\" + ATEXT$$ + \"+\") + \"*\");\nconst QUOTED_PAIR$ = subexp(\"\\\\\\\\\" + VCHAR$$);\nconst QCONTENT$ = subexp(QTEXT$$ + \"|\" + QUOTED_PAIR$);\nconst QUOTED_STRING$ = subexp('\\\\\"' + QCONTENT$ + \"*\" + '\\\\\"');\n\n//RFC 6068\nconst DTEXT_NO_OBS$$ = \"[\\\\x21-\\\\x5A\\\\x5E-\\\\x7E]\";  //%d33-90 / %d94-126\nconst SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nconst QCHAR$ = subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$ + \"|\" + SOME_DELIMS$$);\nconst DOMAIN$ = subexp(DOT_ATOM_TEXT$ + \"|\" + \"\\\\[\" + DTEXT_NO_OBS$$ + \"*\" + \"\\\\]\");\nconst LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + \"|\" + QUOTED_STRING$);\nconst ADDR_SPEC$ = subexp(LOCAL_PART$ + \"\\\\@\" + DOMAIN$);\nconst TO$ = subexp(ADDR_SPEC$ + subexp(\"\\\\,\" + ADDR_SPEC$) + \"*\");\nconst HFNAME$ = subexp(QCHAR$ + \"*\");\nconst HFVALUE$ = HFNAME$;\nconst HFIELD$ = subexp(HFNAME$ + \"\\\\=\" + HFVALUE$);\nconst HFIELDS2$ = subexp(HFIELD$ + subexp(\"\\\\&\" + HFIELD$) + \"*\");\nconst HFIELDS$ = subexp(\"\\\\?\" + HFIELDS2$);\nconst MAILTO_URI = new RegExp(\"^mailto\\\\:\" + TO$ + \"?\" + HFIELDS$ + \"?$\");\n\nconst UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nconst PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nconst NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nconst NOT_DOMAIN = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", \"[\\\\[]\", DTEXT_NO_OBS$$, \"[\\\\]]\"), \"g\");\nconst NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nconst NOT_HFVALUE = NOT_HFNAME;\nconst TO = new RegExp(\"^\" + TO$ + \"$\");\nconst HFIELDS = new RegExp(\"^\" + HFIELDS2$ + \"$\");\n\nfunction decodeUnreserved(str:string):string {\n\tconst decStr = pctDecChars(str);\n\treturn (!decStr.match(UNRESERVED) ? str : decStr);\n}\n\nconst handler:URISchemeHandler<MailtoComponents> =  {\n\tscheme : \"mailto\",\n\n\tparse : function (components:URIComponents, options:URIOptions):MailtoComponents {\n\t\tconst mailtoComponents = components as MailtoComponents;\n\t\tconst to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(\",\") : []);\n\t\tmailtoComponents.path = undefined;\n\n\t\tif (mailtoComponents.query) {\n\t\t\tlet unknownHeaders = false\n\t\t\tconst headers:MailtoHeaders = {};\n\t\t\tconst hfields = mailtoComponents.query.split(\"&\");\n\n\t\t\tfor (let x = 0, xl = hfields.length; x < xl; ++x) {\n\t\t\t\tconst hfield = hfields[x].split(\"=\");\n\n\t\t\t\tswitch (hfield[0]) {\n\t\t\t\t\tcase \"to\":\n\t\t\t\t\t\tconst toAddrs = hfield[1].split(\",\");\n\t\t\t\t\t\tfor (let x = 0, xl = toAddrs.length; x < xl; ++x) {\n\t\t\t\t\t\t\tto.push(toAddrs[x]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subject\":\n\t\t\t\t\t\tmailtoComponents.subject = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"body\":\n\t\t\t\t\t\tmailtoComponents.body = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tunknownHeaders = true;\n\t\t\t\t\t\theaders[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (unknownHeaders) mailtoComponents.headers = headers;\n\t\t}\n\n\t\tmailtoComponents.query = undefined;\n\n\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\tconst addr = to[x].split(\"@\");\n\n\t\t\taddr[0] = unescapeComponent(addr[0]);\n\n\t\t\tif (!options.unicodeSupport) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\taddr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tmailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\taddr[1] = unescapeComponent(addr[1], options).toLowerCase();\n\t\t\t}\n\n\t\t\tto[x] = addr.join(\"@\");\n\t\t}\n\n\t\treturn mailtoComponents;\n\t},\n\n\tserialize : function (mailtoComponents:MailtoComponents, options:URIOptions):URIComponents {\n\t\tconst components = mailtoComponents as URIComponents;\n\t\tconst to = toArray(mailtoComponents.to);\n\t\tif (to) {\n\t\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\t\tconst toAddr = String(to[x]);\n\t\t\t\tconst atIdx = toAddr.lastIndexOf(\"@\");\n\t\t\t\tconst localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n\t\t\t\tlet domain = toAddr.slice(atIdx + 1);\n\n\t\t\t\t//convert IDN via punycode\n\t\t\t\ttry {\n\t\t\t\t\tdomain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t\t}\n\n\t\t\t\tto[x] = localPart + \"@\" + domain;\n\t\t\t}\n\n\t\t\tcomponents.path = to.join(\",\");\n\t\t}\n\n\t\tconst headers = mailtoComponents.headers = mailtoComponents.headers || {};\n\n\t\tif (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n\t\tif (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n\n\t\tconst fields = [];\n\t\tfor (const name in headers) {\n\t\t\tif (headers[name] !== O[name]) {\n\t\t\t\tfields.push(\n\t\t\t\t\tname.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) +\n\t\t\t\t\t\"=\" +\n\t\t\t\t\theaders[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (fields.length) {\n\t\t\tcomponents.query = fields.join(\"&\");\n\t\t}\n\n\t\treturn components;\n\t}\n}\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport ws from \"./ws\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"wss\",\n\tdomainHost : ws.domainHost,\n\tparse : ws.parse,\n\tserialize : ws.serialize\n}\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nexport interface WSComponents extends URIComponents {\n\tresourceName?: string;\n\tsecure?: boolean;\n}\n\nfunction isSecure(wsComponents:WSComponents):boolean {\n\treturn typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === \"wss\";\n}\n\n//RFC 6455\nconst handler:URISchemeHandler = {\n\tscheme : \"ws\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):WSComponents {\n\t\tconst wsComponents = components as WSComponents;\n\n\t\t//indicate if the secure flag is set\n\t\twsComponents.secure = isSecure(wsComponents);\n\n\t\t//construct resouce name\n\t\twsComponents.resourceName = (wsComponents.path || '/') + (wsComponents.query ? '?' + wsComponents.query : '');\n\t\twsComponents.path = undefined;\n\t\twsComponents.query = undefined;\n\n\t\treturn wsComponents;\n\t},\n\n\tserialize : function (wsComponents:WSComponents, options:URIOptions):URIComponents {\n\t\t//normalize the default port\n\t\tif (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === \"\") {\n\t\t\twsComponents.port = undefined;\n\t\t}\n\n\t\t//ensure scheme matches secure flag\n\t\tif (typeof wsComponents.secure === 'boolean') {\n\t\t\twsComponents.scheme = (wsComponents.secure ? 'wss' : 'ws');\n\t\t\twsComponents.secure = undefined;\n\t\t}\n\n\t\t//reconstruct path from resource name\n\t\tif (wsComponents.resourceName) {\n\t\t\tconst [path, query] = wsComponents.resourceName.split('?');\n\t\t\twsComponents.path = (path && path !== '/' ? path : undefined);\n\t\t\twsComponents.query = query;\n\t\t\twsComponents.resourceName = undefined;\n\t\t}\n\n\t\t//forbid fragment component\n\t\twsComponents.fragment = undefined;\n\n\t\treturn wsComponents;\n\t}\n};\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport http from \"./http\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"https\",\n\tdomainHost : http.domainHost,\n\tparse : http.parse,\n\tserialize : http.serialize\n}\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"http\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//report missing host\n\t\tif (!components.host) {\n\t\t\tcomponents.error = components.error || \"HTTP URIs must have a host.\";\n\t\t}\n\n\t\treturn components;\n\t},\n\n\tserialize : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\tconst secure = String(components.scheme).toLowerCase() === \"https\";\n\n\t\t//normalize the default port\n\t\tif (components.port === (secure ? 443 : 80) || components.port === \"\") {\n\t\t\tcomponents.port = undefined;\n\t\t}\n\t\t\n\t\t//normalize the empty path\n\t\tif (!components.path) {\n\t\t\tcomponents.path = \"/\";\n\t\t}\n\n\t\t//NOTE: We do not parse query strings for HTTP URIs\n\t\t//as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n\t\t//and not the HTTP spec.\n\n\t\treturn components;\n\t}\n};\n\nexport default handler;", "/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/uri-js\n */\n\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\n\nimport URI_PROTOCOL from \"./regexps-uri\";\nimport IRI_PROTOCOL from \"./regexps-iri\";\nimport punycode from \"punycode\";\nimport { toUpperCase, typeOf, assign } from \"./util\";\n\nexport interface URIComponents {\n\tscheme?:string;\n\tuserinfo?:string;\n\thost?:string;\n\tport?:number|string;\n\tpath?:string;\n\tquery?:string;\n\tfragment?:string;\n\treference?:string;\n\terror?:string;\n}\n\nexport interface URIOptions {\n\tscheme?:string;\n\treference?:string;\n\ttolerant?:boolean;\n\tabsolutePath?:boolean;\n\tiri?:boolean;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n}\n\nexport interface URISchemeHandler<Components extends URIComponents = URIComponents, Options extends URIOptions = URIOptions, ParentComponents extends URIComponents = URIComponents> {\n\tscheme:string;\n\tparse(components:ParentComponents, options:Options):Components;\n\tserialize(components:Components, options:Options):ParentComponents;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n\tabsolutePath?:boolean;\n}\n\nexport interface URIRegExps {\n\tNOT_SCHEME : RegExp,\n\tNOT_USERINFO : RegExp,\n\tNOT_HOST : RegExp,\n\tNOT_PATH : RegExp,\n\tNOT_PATH_NOSCHEME : RegExp,\n\tNOT_QUERY : RegExp,\n\tNOT_FRAGMENT : RegExp,\n\tESCAPE : RegExp,\n\tUNRESERVED : RegExp,\n\tOTHER_CHARS : RegExp,\n\tPCT_ENCODED : RegExp,\n\tIPV4ADDRESS : RegExp,\n\tIPV6ADDRESS : RegExp,\n}\n\nexport const SCHEMES:{[scheme:string]:URISchemeHandler} = {};\n\nexport function pctEncChar(chr:string):string {\n\tconst c = chr.charCodeAt(0);\n\tlet e:string;\n\n\tif (c < 16) e = \"%0\" + c.toString(16).toUpperCase();\n\telse if (c < 128) e = \"%\" + c.toString(16).toUpperCase();\n\telse if (c < 2048) e = \"%\" + ((c >> 6) | 192).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\telse e = \"%\" + ((c >> 12) | 224).toString(16).toUpperCase() + \"%\" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\n\treturn e;\n}\n\nexport function pctDecChars(str:string):string {\n\tlet newStr = \"\";\n\tlet i = 0;\n\tconst il = str.length;\n\n\twhile (i < il) {\n\t\tconst c = parseInt(str.substr(i + 1, 2), 16);\n\n\t\tif (c < 128) {\n\t\t\tnewStr += String.fromCharCode(c);\n\t\t\ti += 3;\n\t\t}\n\t\telse if (c >= 194 && c < 224) {\n\t\t\tif ((il - i) >= 6) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 6);\n\t\t\t}\n\t\t\ti += 6;\n\t\t}\n\t\telse if (c >= 224) {\n\t\t\tif ((il - i) >= 9) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tconst c3 = parseInt(str.substr(i + 7, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 9);\n\t\t\t}\n\t\t\ti += 9;\n\t\t}\n\t\telse {\n\t\t\tnewStr += str.substr(i, 3);\n\t\t\ti += 3;\n\t\t}\n\t}\n\n\treturn newStr;\n}\n\nfunction _normalizeComponentEncoding(components:URIComponents, protocol:URIRegExps) {\n\tfunction decodeUnreserved(str:string):string {\n\t\tconst decStr = pctDecChars(str);\n\t\treturn (!decStr.match(protocol.UNRESERVED) ? str : decStr);\n\t}\n\n\tif (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n\tif (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\n\treturn components;\n};\n\nfunction _stripLeadingZeros(str:string):string {\n\treturn str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\n\nfunction _normalizeIPv4(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV4ADDRESS) || [];\n\tconst [, address] = matches;\n\t\n\tif (address) {\n\t\treturn address.split(\".\").map(_stripLeadingZeros).join(\".\");\n\t} else {\n\t\treturn host;\n\t}\n}\n\nfunction _normalizeIPv6(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV6ADDRESS) || [];\n\tconst [, address, zone] = matches;\n\n\tif (address) {\n\t\tconst [last, first] = address.toLowerCase().split('::').reverse();\n\t\tconst firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n\t\tconst lastFields = last.split(\":\").map(_stripLeadingZeros);\n\t\tconst isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n\t\tconst fieldCount = isLastFieldIPv4Address ? 7 : 8;\n\t\tconst lastFieldsStart = lastFields.length - fieldCount;\n\t\tconst fields = Array<string>(fieldCount);\n\n\t\tfor (let x = 0; x < fieldCount; ++x) {\n\t\t\tfields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n\t\t}\n\n\t\tif (isLastFieldIPv4Address) {\n\t\t\tfields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n\t\t}\n\n\t\tconst allZeroFields = fields.reduce<Array<{index:number,length:number}>>((acc, field, index) => {\n\t\t\tif (!field || field === \"0\") {\n\t\t\t\tconst lastLongest = acc[acc.length - 1];\n\t\t\t\tif (lastLongest && lastLongest.index + lastLongest.length === index) {\n\t\t\t\t\tlastLongest.length++;\n\t\t\t\t} else {\n\t\t\t\t\tacc.push({ index, length : 1 });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, []);\n\n\t\tconst longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0];\n\n\t\tlet newHost:string;\n\t\tif (longestZeroFields && longestZeroFields.length > 1) {\n\t\t\tconst newFirst = fields.slice(0, longestZeroFields.index) ;\n\t\t\tconst newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n\t\t\tnewHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n\t\t} else {\n\t\t\tnewHost = fields.join(\":\");\n\t\t}\n\n\t\tif (zone) {\n\t\t\tnewHost += \"%\" + zone;\n\t\t}\n\n\t\treturn newHost;\n\t} else {\n\t\treturn host;\n\t}\n}\n\nconst URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nconst NO_MATCH_IS_UNDEFINED = (<RegExpMatchArray>(\"\").match(/(){0}/))[1] === undefined;\n\nexport function parse(uriString:string, options:URIOptions = {}):URIComponents {\n\tconst components:URIComponents = {};\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\n\tif (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n\n\tconst matches = uriString.match(URI_PARSE);\n\n\tif (matches) {\n\t\tif (NO_MATCH_IS_UNDEFINED) {\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1];\n\t\t\tcomponents.userinfo = matches[3];\n\t\t\tcomponents.host = matches[4];\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = matches[7];\n\t\t\tcomponents.fragment = matches[8];\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = matches[5];\n\t\t\t}\n\t\t} else {  //IE FIX for improper RegExp matching\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1] || undefined;\n\t\t\tcomponents.userinfo = (uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined);\n\t\t\tcomponents.host = (uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined);\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = (uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined);\n\t\t\tcomponents.fragment = (uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined);\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = (uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined);\n\t\t\t}\n\t\t}\n\n\t\tif (components.host) {\n\t\t\t//normalize IP hosts\n\t\t\tcomponents.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n\t\t}\n\n\t\t//determine reference type\n\t\tif (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n\t\t\tcomponents.reference = \"same-document\";\n\t\t} else if (components.scheme === undefined) {\n\t\t\tcomponents.reference = \"relative\";\n\t\t} else if (components.fragment === undefined) {\n\t\t\tcomponents.reference = \"absolute\";\n\t\t} else {\n\t\t\tcomponents.reference = \"uri\";\n\t\t}\n\n\t\t//check for reference errors\n\t\tif (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n\t\t\tcomponents.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n\t\t}\n\n\t\t//find scheme handler\n\t\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t\t//check if scheme can't handle IRIs\n\t\tif (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n\t\t\t//if host component is a domain name\n\t\t\tif (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\tcomponents.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//convert IRI -> URI\n\t\t\t_normalizeComponentEncoding(components, URI_PROTOCOL);\n\t\t} else {\n\t\t\t//normalize encodings\n\t\t\t_normalizeComponentEncoding(components, protocol);\n\t\t}\n\n\t\t//perform scheme specific parsing\n\t\tif (schemeHandler && schemeHandler.parse) {\n\t\t\tschemeHandler.parse(components, options);\n\t\t}\n\t} else {\n\t\tcomponents.error = components.error || \"URI can not be parsed.\";\n\t}\n\n\treturn components;\n};\n\nfunction _recomposeAuthority(components:URIComponents, options:URIOptions):string|undefined {\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array<string> = [];\n\n\tif (components.userinfo !== undefined) {\n\t\turiTokens.push(components.userinfo);\n\t\turiTokens.push(\"@\");\n\t}\n\n\tif (components.host !== undefined) {\n\t\t//normalize IP hosts, add brackets and escape zone separator for IPv6\n\t\turiTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\"));\n\t}\n\n\tif (typeof components.port === \"number\" || typeof components.port === \"string\") {\n\t\turiTokens.push(\":\");\n\t\turiTokens.push(String(components.port));\n\t}\n\n\treturn uriTokens.length ? uriTokens.join(\"\") : undefined;\n};\n\nconst RDS1 = /^\\.\\.?\\//;\nconst RDS2 = /^\\/\\.(\\/|$)/;\nconst RDS3 = /^\\/\\.\\.(\\/|$)/;\nconst RDS4 = /^\\.\\.?$/;\nconst RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\n\nexport function removeDotSegments(input:string):string {\n\tconst output:Array<string> = [];\n\n\twhile (input.length) {\n\t\tif (input.match(RDS1)) {\n\t\t\tinput = input.replace(RDS1, \"\");\n\t\t} else if (input.match(RDS2)) {\n\t\t\tinput = input.replace(RDS2, \"/\");\n\t\t} else if (input.match(RDS3)) {\n\t\t\tinput = input.replace(RDS3, \"/\");\n\t\t\toutput.pop();\n\t\t} else if (input === \".\" || input === \"..\") {\n\t\t\tinput = \"\";\n\t\t} else {\n\t\t\tconst im = input.match(RDS5);\n\t\t\tif (im) {\n\t\t\t\tconst s = im[0];\n\t\t\t\tinput = input.slice(s.length);\n\t\t\t\toutput.push(s);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Unexpected dot segment condition\");\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output.join(\"\");\n};\n\nexport function serialize(components:URIComponents, options:URIOptions = {}):string {\n\tconst protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array<string> = [];\n\n\t//find scheme handler\n\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t//perform scheme specific serialization\n\tif (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n\n\tif (components.host) {\n\t\t//if host component is an IPv6 address\n\t\tif (protocol.IPV6ADDRESS.test(components.host)) {\n\t\t\t//TODO: normalize IPv6 address as per RFC 5952\n\t\t}\n\n\t\t//if host component is a domain name\n\t\telse if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) {\n\t\t\t//convert IDN via punycode\n\t\t\ttry {\n\t\t\t\tcomponents.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host));\n\t\t\t} catch (e) {\n\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t}\n\t\t}\n\t}\n\n\t//normalize encoding\n\t_normalizeComponentEncoding(components, protocol);\n\n\tif (options.reference !== \"suffix\" && components.scheme) {\n\t\turiTokens.push(components.scheme);\n\t\turiTokens.push(\":\");\n\t}\n\n\tconst authority = _recomposeAuthority(components, options);\n\tif (authority !== undefined) {\n\t\tif (options.reference !== \"suffix\") {\n\t\t\turiTokens.push(\"//\");\n\t\t}\n\n\t\turiTokens.push(authority);\n\n\t\tif (components.path && components.path.charAt(0) !== \"/\") {\n\t\t\turiTokens.push(\"/\");\n\t\t}\n\t}\n\n\tif (components.path !== undefined) {\n\t\tlet s = components.path;\n\n\t\tif (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n\t\t\ts = removeDotSegments(s);\n\t\t}\n\n\t\tif (authority === undefined) {\n\t\t\ts = s.replace(/^\\/\\//, \"/%2F\");  //don't allow the path to start with \"//\"\n\t\t}\n\n\t\turiTokens.push(s);\n\t}\n\n\tif (components.query !== undefined) {\n\t\turiTokens.push(\"?\");\n\t\turiTokens.push(components.query);\n\t}\n\n\tif (components.fragment !== undefined) {\n\t\turiTokens.push(\"#\");\n\t\turiTokens.push(components.fragment);\n\t}\n\n\treturn uriTokens.join(\"\");  //merge tokens into a string\n};\n\nexport function resolveComponents(base:URIComponents, relative:URIComponents, options:URIOptions = {}, skipNormalization?:boolean):URIComponents {\n\tconst target:URIComponents = {};\n\n\tif (!skipNormalization) {\n\t\tbase = parse(serialize(base, options), options);  //normalize base components\n\t\trelative = parse(serialize(relative, options), options);  //normalize relative components\n\t}\n\toptions = options || {};\n\n\tif (!options.tolerant && relative.scheme) {\n\t\ttarget.scheme = relative.scheme;\n\t\t//target.authority = relative.authority;\n\t\ttarget.userinfo = relative.userinfo;\n\t\ttarget.host = relative.host;\n\t\ttarget.port = relative.port;\n\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\ttarget.query = relative.query;\n\t} else {\n\t\tif (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n\t\t\t//target.authority = relative.authority;\n\t\t\ttarget.userinfo = relative.userinfo;\n\t\t\ttarget.host = relative.host;\n\t\t\ttarget.port = relative.port;\n\t\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\t\ttarget.query = relative.query;\n\t\t} else {\n\t\t\tif (!relative.path) {\n\t\t\t\ttarget.path = base.path;\n\t\t\t\tif (relative.query !== undefined) {\n\t\t\t\t\ttarget.query = relative.query;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.query = base.query;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (relative.path.charAt(0) === \"/\") {\n\t\t\t\t\ttarget.path = removeDotSegments(relative.path);\n\t\t\t\t} else {\n\t\t\t\t\tif ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n\t\t\t\t\t\ttarget.path = \"/\" + relative.path;\n\t\t\t\t\t} else if (!base.path) {\n\t\t\t\t\t\ttarget.path = relative.path;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n\t\t\t\t\t}\n\t\t\t\t\ttarget.path = removeDotSegments(target.path);\n\t\t\t\t}\n\t\t\t\ttarget.query = relative.query;\n\t\t\t}\n\t\t\t//target.authority = base.authority;\n\t\t\ttarget.userinfo = base.userinfo;\n\t\t\ttarget.host = base.host;\n\t\t\ttarget.port = base.port;\n\t\t}\n\t\ttarget.scheme = base.scheme;\n\t}\n\n\ttarget.fragment = relative.fragment;\n\n\treturn target;\n};\n\nexport function resolve(baseURI:string, relativeURI:string, options?:URIOptions):string {\n\tconst schemelessOptions = assign({ scheme : 'null' }, options);\n\treturn serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n};\n\nexport function normalize(uri:string, options?:URIOptions):string;\nexport function normalize(uri:URIComponents, options?:URIOptions):URIComponents;\nexport function normalize(uri:any, options?:URIOptions):any {\n\tif (typeof uri === \"string\") {\n\t\turi = serialize(parse(uri, options), options);\n\t} else if (typeOf(uri) === \"object\") {\n\t\turi = parse(serialize(<URIComponents>uri, options), options);\n\t}\n\n\treturn uri;\n};\n\nexport function equal(uriA:string, uriB:string, options?: URIOptions):boolean;\nexport function equal(uriA:URIComponents, uriB:URIComponents, options?:URIOptions):boolean;\nexport function equal(uriA:any, uriB:any, options?:URIOptions):boolean {\n\tif (typeof uriA === \"string\") {\n\t\turiA = serialize(parse(uriA, options), options);\n\t} else if (typeOf(uriA) === \"object\") {\n\t\turiA = serialize(<URIComponents>uriA, options);\n\t}\n\n\tif (typeof uriB === \"string\") {\n\t\turiB = serialize(parse(uriB, options), options);\n\t} else if (typeOf(uriB) === \"object\") {\n\t\turiB = serialize(<URIComponents>uriB, options);\n\t}\n\n\treturn uriA === uriB;\n};\n\nexport function escapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar);\n};\n\nexport function unescapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars);\n};\n", "'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t//  0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport default punycode;\n", "import { URIRegExps } from \"./uri\";\nimport { buildExps } from \"./regexps-uri\";\n\nexport default buildExps(true);\n", "import { URIRegExps } from \"./uri\";\nimport { merge, subexp } from \"./util\";\n\nexport function buildExps(isIRI:boolean):URIRegExps {\n\tconst\n\t\tALPHA$$ = \"[A-Za-z]\",\n\t\tCR$ = \"[\\\\x0D]\",\n\t\tDIGIT$$ = \"[0-9]\",\n\t\tDQUOTE$$ = \"[\\\\x22]\",\n\t\tHEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"),  //case-insensitive\n\t\tLF$$ = \"[\\\\x0A]\",\n\t\tSP$$ = \"[\\\\x20]\",\n\t\tPCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)),  //expanded\n\t\tGEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n\t\tSUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n\t\tRESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n\t\tUCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\",  //subset, excludes bidi control characters\n\t\tIPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\",  //subset\n\t\tUNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n\t\tSCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n\t\tUSERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n\t\tDEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n\t\tDEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$),  //relaxed parsing rules\n\t\tIPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n\t\tH16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n\t\tLS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n\t\tIPV6ADDRESS1$ = subexp(                                                            subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$), //                           6( h16 \":\" ) ls32\n\t\tIPV6ADDRESS2$ = subexp(                                                 \"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$), //                      \"::\" 5( h16 \":\" ) ls32\n\t\tIPV6ADDRESS3$ = subexp(subexp(                                 H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$), //[               h16 ] \"::\" 4( h16 \":\" ) ls32\n\t\tIPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$), //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n\t\tIPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$), //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n\t\tIPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" +        H16$ + \"\\\\:\"          + LS32$), //[ *3( h16 \":\" ) h16 ] \"::\"    h16 \":\"   ls32\n\t\tIPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\"                                + LS32$), //[ *4( h16 \":\" ) h16 ] \"::\"              ls32\n\t\tIPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\"                                + H16$ ), //[ *5( h16 \":\" ) h16 ] \"::\"              h16\n\t\tIPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\"                                       ), //[ *6( h16 \":\" ) h16 ] \"::\"\n\t\tIPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n\t\tZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"),  //RFC 6874\n\t\tIPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$),  //RFC 6874\n\t\tIPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$),  //RFC 6874, with relaxed parsing rules\n\t\tIPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n\t\tIP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"),  //RFC 6874\n\t\tREG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n\t\tHOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n\t\tPORT$ = subexp(DIGIT$$ + \"*\"),\n\t\tAUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n\t\tPCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n\t\tSEGMENT$ = subexp(PCHAR$ + \"*\"),\n\t\tSEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n\t\tSEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n\t\tPATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n\t\tPATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"),  //simplified\n\t\tPATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$),  //simplified\n\t\tPATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$),  //simplified\n\t\tPATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n\t\tPATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tQUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n\t\tFRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n\t\tHIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tURI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tRELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n\t\tRELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tURI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n\t\tABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n\n\t\tGENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tRELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n\t\tSAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tAUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\"\n\t;\n\n\treturn {\n\t\tNOT_SCHEME : new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n\t\tNOT_USERINFO : new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_HOST : new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH : new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH_NOSCHEME : new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_QUERY : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n\t\tNOT_FRAGMENT : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n\t\tESCAPE : new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tUNRESERVED : new RegExp(UNRESERVED$$, \"g\"),\n\t\tOTHER_CHARS : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n\t\tPCT_ENCODED : new RegExp(PCT_ENCODED$, \"g\"),\n\t\tIPV4ADDRESS : new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n\t\tIPV6ADDRESS : new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\")  //RFC 6874, with relaxed parsing rules\n\t};\n}\n\nexport default buildExps(false);\n", "export function merge(...sets:Array<string>):string {\n\tif (sets.length > 1) {\n\t\tsets[0] = sets[0].slice(0, -1);\n\t\tconst xl = sets.length - 1;\n\t\tfor (let x = 1; x < xl; ++x) {\n\t\t\tsets[x] = sets[x].slice(1, -1);\n\t\t}\n\t\tsets[xl] = sets[xl].slice(1);\n\t\treturn sets.join('');\n\t} else {\n\t\treturn sets[0];\n\t}\n}\n\nexport function subexp(str:string):string {\n\treturn \"(?:\" + str + \")\";\n}\n\nexport function typeOf(o:any):string {\n\treturn o === undefined ? \"undefined\" : (o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase());\n}\n\nexport function toUpperCase(str:string):string {\n\treturn str.toUpperCase();\n}\n\nexport function toArray(obj:any):Array<any> {\n\treturn obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : [];\n}\n\n\nexport function assign(target: object, source: any): any {\n\tconst obj = target as any;\n\tif (source) {\n\t\tfor (const key in source) {\n\t\t\tobj[key] = source[key];\n\t\t}\n\t}\n\treturn obj;\n}", "/* jshint esversion: 6 */\n/* jslint node: true */\n'use strict';\n\nmodule.exports = function serialize (object) {\n  if (typeof object === 'number' && isNaN(object)) {\n    throw new Error('NaN is not allowed');\n  }\n\n  if (typeof object === 'number' && !isFinite(object)) {\n    throw new Error('Infinity is not allowed');\n  }\n\n  if (object === null || typeof object !== 'object') {\n    return JSON.stringify(object);\n  }\n\n  if (object.toJSON instanceof Function) {\n    return serialize(object.toJSON());\n  }\n\n  if (Array.isArray(object)) {\n    const values = object.reduce((t, cv, ci) => {\n      const comma = ci === 0 ? '' : ',';\n      const value = cv === undefined || typeof cv === 'symbol' ? null : cv;\n      return `${t}${comma}${serialize(value)}`;\n    }, '');\n    return `[${values}]`;\n  }\n\n  const values = Object.keys(object).sort().reduce((t, cv) => {\n    if (object[cv] === undefined ||\n        typeof object[cv] === 'symbol') {\n      return t;\n    }\n    const comma = t.length === 0 ? '' : ',';\n    return `${t}${comma}${serialize(cv)}:${serialize(object[cv])}`;\n  }, '');\n  return `{${values}}`;\n};\n", "'use strict'\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.\nfunction base (ALPHABET) {\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  function encode (source) {\n    if (source instanceof Uint8Array) {\n    } 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  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  function decode (string) {\n    var buffer = decodeUnsafe(string)\n    if (buffer) { return buffer }\n    throw new Error('Non-base' + BASE + ' character')\n  }\n  return {\n    encode: encode,\n    decodeUnsafe: decodeUnsafe,\n    decode: decode\n  }\n}\nmodule.exports = base\n", "'use strict'\n\nconst textDecoder = new TextDecoder()\n/**\n * @param {ArrayBufferView|ArrayBuffer} bytes\n * @returns {string}\n */\nconst decodeText = (bytes) => textDecoder.decode(bytes)\n\nconst textEncoder = new TextEncoder()\n/**\n * @param {string} text\n * @returns {Uint8Array}\n */\nconst encodeText = (text) => textEncoder.encode(text)\n\n/**\n * Returns a new Uint8Array created by concatenating the passed Arrays\n *\n * @param {Array<ArrayLike<number>>} arrs\n * @param {number} length\n * @returns {Uint8Array}\n */\nfunction concat (arrs, length) {\n  const output = new Uint8Array(length)\n  let offset = 0\n\n  for (const arr of arrs) {\n    output.set(arr, offset)\n    offset += arr.length\n  }\n\n  return output\n}\n\nmodule.exports = { decodeText, encodeText, concat }\n", "'use strict'\n\nconst { encodeText } = require('./util')\n\n/** @typedef {import('./types').CodecFactory} CodecFactory */\n/** @typedef {import(\"./types\").BaseName} BaseName */\n/** @typedef {import(\"./types\").BaseCode} BaseCode */\n\n/**\n * Class to encode/decode in the supported Bases\n *\n */\nclass Base {\n  /**\n   * @param {BaseName} name\n   * @param {BaseCode} code\n   * @param {CodecFactory} factory\n   * @param {string} alphabet\n   */\n  constructor (name, code, factory, alphabet) {\n    this.name = name\n    this.code = code\n    this.codeBuf = encodeText(this.code)\n    this.alphabet = alphabet\n    this.codec = factory(alphabet)\n  }\n\n  /**\n   * @param {Uint8Array} buf\n   * @returns {string}\n   */\n  encode (buf) {\n    return this.codec.encode(buf)\n  }\n\n  /**\n   * @param {string} string\n   * @returns {Uint8Array}\n   */\n  decode (string) {\n    for (const char of string) {\n      if (this.alphabet && this.alphabet.indexOf(char) < 0) {\n        throw new Error(`invalid character '${char}' in '${string}'`)\n      }\n    }\n    return this.codec.decode(string)\n  }\n}\n\nmodule.exports = Base\n", "'use strict'\n\n/** @typedef {import('./types').CodecFactory} CodecFactory */\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar) => {\n  // Build the character lookup table:\n  /** @type {Record<string, number>} */\n  const codes = {}\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('Invalid character ' + string[i])\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))) {\n    throw new SyntaxError('Unexpected end of data')\n  }\n\n  return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\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) {\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) {\n      out += '='\n    }\n  }\n\n  return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @param {number} bitsPerChar\n * @returns {CodecFactory}\n */\nconst rfc4648 = (bitsPerChar) => (alphabet) => {\n  return {\n    /**\n     * @param {Uint8Array} input\n     * @returns {string}\n     */\n    encode (input) {\n      return encode(input, alphabet, bitsPerChar)\n    },\n    /**\n     * @param {string} input\n     * @returns {Uint8Array}\n     */\n    decode (input) {\n      return decode(input, alphabet, bitsPerChar)\n    }\n  }\n}\n\nmodule.exports = { rfc4648 }\n", "'use strict'\n\nconst baseX = require('@multiformats/base-x')\nconst Base = require('./base.js')\nconst { rfc4648 } = require('./rfc4648')\nconst { decodeText, encodeText } = require('./util')\n\n/** @typedef {import('./types').CodecFactory} CodecFactory */\n/** @typedef {import('./types').Codec} Codec */\n/** @typedef {import('./types').BaseName} BaseName */\n/** @typedef {import('./types').BaseCode} BaseCode */\n\n/** @type {CodecFactory} */\nconst identity = () => {\n  return {\n    encode: decodeText,\n    decode: encodeText\n  }\n}\n\n/**\n *\n * name, code, implementation, alphabet\n *\n * @type {Array<[BaseName, BaseCode, CodecFactory, string]>}\n */\nconst constants = [\n  ['identity', '\\x00', identity, ''],\n  ['base2', '0', rfc4648(1), '01'],\n  ['base8', '7', rfc4648(3), '01234567'],\n  ['base10', '9', baseX, '0123456789'],\n  ['base16', 'f', rfc4648(4), '0123456789abcdef'],\n  ['base16upper', 'F', rfc4648(4), '0123456789ABCDEF'],\n  ['base32hex', 'v', rfc4648(5), '0123456789abcdefghijklmnopqrstuv'],\n  ['base32hexupper', 'V', rfc4648(5), '0123456789ABCDEFGHIJKLMNOPQRSTUV'],\n  ['base32hexpad', 't', rfc4648(5), '0123456789abcdefghijklmnopqrstuv='],\n  ['base32hexpadupper', 'T', rfc4648(5), '0123456789ABCDEFGHIJKLMNOPQRSTUV='],\n  ['base32', 'b', rfc4648(5), 'abcdefghijklmnopqrstuvwxyz234567'],\n  ['base32upper', 'B', rfc4648(5), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'],\n  ['base32pad', 'c', rfc4648(5), 'abcdefghijklmnopqrstuvwxyz234567='],\n  ['base32padupper', 'C', rfc4648(5), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567='],\n  ['base32z', 'h', rfc4648(5), 'ybndrfg8ejkmcpqxot1uwisza345h769'],\n  ['base36', 'k', baseX, '0123456789abcdefghijklmnopqrstuvwxyz'],\n  ['base36upper', 'K', baseX, '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'],\n  ['base58btc', 'z', baseX, '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'],\n  ['base58flickr', 'Z', baseX, '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'],\n  ['base64', 'm', rfc4648(6), 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'],\n  ['base64pad', 'M', rfc4648(6), 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='],\n  ['base64url', 'u', rfc4648(6), 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'],\n  ['base64urlpad', 'U', rfc4648(6), 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=']\n]\n\n/** @type {Record<BaseName,Base>} */\nconst names = constants.reduce((prev, tupple) => {\n  prev[tupple[0]] = new Base(tupple[0], tupple[1], tupple[2], tupple[3])\n  return prev\n}, /** @type {Record<BaseName,Base>} */({}))\n\n/** @type {Record<BaseCode,Base>} */\nconst codes = constants.reduce((prev, tupple) => {\n  prev[tupple[1]] = names[tupple[0]]\n  return prev\n}, /** @type {Record<BaseCode,Base>} */({}))\n\nmodule.exports = {\n  names,\n  codes\n}\n", "/**\n * Implementation of the [multibase](https://github.com/multiformats/multibase) specification.\n *\n */\n'use strict'\n\nconst constants = require('./constants')\nconst { encodeText, decodeText, concat } = require('./util')\n\n/** @typedef {import('./base')} Base */\n/** @typedef {import(\"./types\").BaseNameOrCode} BaseNameOrCode */\n/** @typedef {import(\"./types\").BaseCode} BaseCode */\n/** @typedef {import(\"./types\").BaseName} BaseName */\n\n/**\n * Create a new Uint8Array with the multibase varint+code.\n *\n * @param {BaseNameOrCode} nameOrCode - The multibase name or code number.\n * @param {Uint8Array} buf - The data to be prefixed with multibase.\n * @returns {Uint8Array}\n * @throws {Error} Will throw if the encoding is not supported\n */\nfunction multibase (nameOrCode, buf) {\n  if (!buf) {\n    throw new Error('requires an encoded Uint8Array')\n  }\n  const { name, codeBuf } = encoding(nameOrCode)\n  validEncode(name, buf)\n\n  return concat([codeBuf, buf], codeBuf.length + buf.length)\n}\n\n/**\n * Encode data with the specified base and add the multibase prefix.\n *\n * @param {BaseNameOrCode} nameOrCode - The multibase name or code number.\n * @param {Uint8Array} buf - The data to be encoded.\n * @returns {Uint8Array}\n * @throws {Error} Will throw if the encoding is not supported\n *\n */\nfunction encode (nameOrCode, buf) {\n  const enc = encoding(nameOrCode)\n  const data = encodeText(enc.encode(buf))\n\n  return concat([enc.codeBuf, data], enc.codeBuf.length + data.length)\n}\n\n/**\n * Takes a Uint8Array or string encoded with multibase header, decodes it and\n * returns the decoded buffer\n *\n * @param {Uint8Array|string} data\n * @returns {Uint8Array}\n * @throws {Error} Will throw if the encoding is not supported\n *\n */\nfunction decode (data) {\n  if (data instanceof Uint8Array) {\n    data = decodeText(data)\n  }\n  const prefix = data[0]\n\n  // Make all encodings case-insensitive except the ones that include upper and lower chars in the alphabet\n  if (['f', 'F', 'v', 'V', 't', 'T', 'b', 'B', 'c', 'C', 'h', 'k', 'K'].includes(prefix)) {\n    data = data.toLowerCase()\n  }\n  const enc = encoding(/** @type {BaseCode} */(data[0]))\n  return enc.decode(data.substring(1))\n}\n\n/**\n * Is the given data multibase encoded?\n *\n * @param {Uint8Array|string} data\n */\nfunction isEncoded (data) {\n  if (data instanceof Uint8Array) {\n    data = decodeText(data)\n  }\n\n  // Ensure bufOrString is a string\n  if (Object.prototype.toString.call(data) !== '[object String]') {\n    return false\n  }\n\n  try {\n    const enc = encoding(/** @type {BaseCode} */(data[0]))\n    return enc.name\n  } catch (err) {\n    return false\n  }\n}\n\n/**\n * Validate encoded data\n *\n * @param {BaseNameOrCode} name\n * @param {Uint8Array} buf\n * @returns {void}\n * @throws {Error} Will throw if the encoding is not supported\n */\nfunction validEncode (name, buf) {\n  const enc = encoding(name)\n  enc.decode(decodeText(buf))\n}\n\n/**\n * Get the encoding by name or code\n *\n * @param {BaseNameOrCode} nameOrCode\n * @returns {Base}\n * @throws {Error} Will throw if the encoding is not supported\n */\nfunction encoding (nameOrCode) {\n  if (Object.prototype.hasOwnProperty.call(constants.names, /** @type {BaseName} */(nameOrCode))) {\n    return constants.names[/** @type {BaseName} */(nameOrCode)]\n  } else if (Object.prototype.hasOwnProperty.call(constants.codes, /** @type {BaseCode} */(nameOrCode))) {\n    return constants.codes[/** @type {BaseCode} */(nameOrCode)]\n  } else {\n    throw new Error(`Unsupported encoding: ${nameOrCode}`)\n  }\n}\n\n/**\n * Get encoding from data\n *\n * @param {string|Uint8Array} data\n * @returns {Base}\n * @throws {Error} Will throw if the encoding is not supported\n */\nfunction encodingFromData (data) {\n  if (data instanceof Uint8Array) {\n    data = decodeText(data)\n  }\n\n  return encoding(/** @type {BaseCode} */(data[0]))\n}\n\nexports = module.exports = multibase\nexports.encode = encode\nexports.decode = decode\nexports.isEncoded = isEncoded\nexports.encoding = encoding\nexports.encodingFromData = encodingFromData\nconst names = Object.freeze(constants.names)\nconst codes = Object.freeze(constants.codes)\nexports.names = names\nexports.codes = codes\n", "module.exports = encode\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31)\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  encode.bytes = offset - oldOffset + 1\n  \n  return out\n}\n", "module.exports = read\n\nvar MSB = 0x80\n  , REST = 0x7F\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      read.bytes = 0\n      throw new RangeError('Could not decode varint')\n    }\n    b = buf[counter++]\n    res += shift < 28\n      ? (b & REST) << shift\n      : (b & REST) * Math.pow(2, shift)\n    shift += 7\n  } while (b >= MSB)\n\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\nmodule.exports = function (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", "module.exports = {\n    encode: require('./encode.js')\n  , decode: require('./decode.js')\n  , encodingLength: require('./length.js')\n}\n", "/* eslint quote-props: off */\n'use strict'\n\n/**\n * Names for all available hashes\n *\n * @typedef { \"identity\" | \"sha1\" | \"sha2-256\" | \"sha2-512\" | \"sha3-512\" | \"sha3-384\" | \"sha3-256\" | \"sha3-224\" | \"shake-128\" | \"shake-256\" | \"keccak-224\" | \"keccak-256\" | \"keccak-384\" | \"keccak-512\" | \"blake3\" | \"murmur3-128\" | \"murmur3-32\" | \"dbl-sha2-256\" | \"md4\" | \"md5\" | \"bmt\" | \"sha2-256-trunc254-padded\" | \"ripemd-128\" | \"ripemd-160\" | \"ripemd-256\" | \"ripemd-320\" | \"x11\" | \"kangarootwelve\" | \"sm3-256\" | \"blake2b-8\" | \"blake2b-16\" | \"blake2b-24\" | \"blake2b-32\" | \"blake2b-40\" | \"blake2b-48\" | \"blake2b-56\" | \"blake2b-64\" | \"blake2b-72\" | \"blake2b-80\" | \"blake2b-88\" | \"blake2b-96\" | \"blake2b-104\" | \"blake2b-112\" | \"blake2b-120\" | \"blake2b-128\" | \"blake2b-136\" | \"blake2b-144\" | \"blake2b-152\" | \"blake2b-160\" | \"blake2b-168\" | \"blake2b-176\" | \"blake2b-184\" | \"blake2b-192\" | \"blake2b-200\" | \"blake2b-208\" | \"blake2b-216\" | \"blake2b-224\" | \"blake2b-232\" | \"blake2b-240\" | \"blake2b-248\" | \"blake2b-256\" | \"blake2b-264\" | \"blake2b-272\" | \"blake2b-280\" | \"blake2b-288\" | \"blake2b-296\" | \"blake2b-304\" | \"blake2b-312\" | \"blake2b-320\" | \"blake2b-328\" | \"blake2b-336\" | \"blake2b-344\" | \"blake2b-352\" | \"blake2b-360\" | \"blake2b-368\" | \"blake2b-376\" | \"blake2b-384\" | \"blake2b-392\" | \"blake2b-400\" | \"blake2b-408\" | \"blake2b-416\" | \"blake2b-424\" | \"blake2b-432\" | \"blake2b-440\" | \"blake2b-448\" | \"blake2b-456\" | \"blake2b-464\" | \"blake2b-472\" | \"blake2b-480\" | \"blake2b-488\" | \"blake2b-496\" | \"blake2b-504\" | \"blake2b-512\" | \"blake2s-8\" | \"blake2s-16\" | \"blake2s-24\" | \"blake2s-32\" | \"blake2s-40\" | \"blake2s-48\" | \"blake2s-56\" | \"blake2s-64\" | \"blake2s-72\" | \"blake2s-80\" | \"blake2s-88\" | \"blake2s-96\" | \"blake2s-104\" | \"blake2s-112\" | \"blake2s-120\" | \"blake2s-128\" | \"blake2s-136\" | \"blake2s-144\" | \"blake2s-152\" | \"blake2s-160\" | \"blake2s-168\" | \"blake2s-176\" | \"blake2s-184\" | \"blake2s-192\" | \"blake2s-200\" | \"blake2s-208\" | \"blake2s-216\" | \"blake2s-224\" | \"blake2s-232\" | \"blake2s-240\" | \"blake2s-248\" | \"blake2s-256\" | \"skein256-8\" | \"skein256-16\" | \"skein256-24\" | \"skein256-32\" | \"skein256-40\" | \"skein256-48\" | \"skein256-56\" | \"skein256-64\" | \"skein256-72\" | \"skein256-80\" | \"skein256-88\" | \"skein256-96\" | \"skein256-104\" | \"skein256-112\" | \"skein256-120\" | \"skein256-128\" | \"skein256-136\" | \"skein256-144\" | \"skein256-152\" | \"skein256-160\" | \"skein256-168\" | \"skein256-176\" | \"skein256-184\" | \"skein256-192\" | \"skein256-200\" | \"skein256-208\" | \"skein256-216\" | \"skein256-224\" | \"skein256-232\" | \"skein256-240\" | \"skein256-248\" | \"skein256-256\" | \"skein512-8\" | \"skein512-16\" | \"skein512-24\" | \"skein512-32\" | \"skein512-40\" | \"skein512-48\" | \"skein512-56\" | \"skein512-64\" | \"skein512-72\" | \"skein512-80\" | \"skein512-88\" | \"skein512-96\" | \"skein512-104\" | \"skein512-112\" | \"skein512-120\" | \"skein512-128\" | \"skein512-136\" | \"skein512-144\" | \"skein512-152\" | \"skein512-160\" | \"skein512-168\" | \"skein512-176\" | \"skein512-184\" | \"skein512-192\" | \"skein512-200\" | \"skein512-208\" | \"skein512-216\" | \"skein512-224\" | \"skein512-232\" | \"skein512-240\" | \"skein512-248\" | \"skein512-256\" | \"skein512-264\" | \"skein512-272\" | \"skein512-280\" | \"skein512-288\" | \"skein512-296\" | \"skein512-304\" | \"skein512-312\" | \"skein512-320\" | \"skein512-328\" | \"skein512-336\" | \"skein512-344\" | \"skein512-352\" | \"skein512-360\" | \"skein512-368\" | \"skein512-376\" | \"skein512-384\" | \"skein512-392\" | \"skein512-400\" | \"skein512-408\" | \"skein512-416\" | \"skein512-424\" | \"skein512-432\" | \"skein512-440\" | \"skein512-448\" | \"skein512-456\" | \"skein512-464\" | \"skein512-472\" | \"skein512-480\" | \"skein512-488\" | \"skein512-496\" | \"skein512-504\" | \"skein512-512\" | \"skein1024-8\" | \"skein1024-16\" | \"skein1024-24\" | \"skein1024-32\" | \"skein1024-40\" | \"skein1024-48\" | \"skein1024-56\" | \"skein1024-64\" | \"skein1024-72\" | \"skein1024-80\" | \"skein1024-88\" | \"skein1024-96\" | \"skein1024-104\" | \"skein1024-112\" | \"skein1024-120\" | \"skein1024-128\" | \"skein1024-136\" | \"skein1024-144\" | \"skein1024-152\" | \"skein1024-160\" | \"skein1024-168\" | \"skein1024-176\" | \"skein1024-184\" | \"skein1024-192\" | \"skein1024-200\" | \"skein1024-208\" | \"skein1024-216\" | \"skein1024-224\" | \"skein1024-232\" | \"skein1024-240\" | \"skein1024-248\" | \"skein1024-256\" | \"skein1024-264\" | \"skein1024-272\" | \"skein1024-280\" | \"skein1024-288\" | \"skein1024-296\" | \"skein1024-304\" | \"skein1024-312\" | \"skein1024-320\" | \"skein1024-328\" | \"skein1024-336\" | \"skein1024-344\" | \"skein1024-352\" | \"skein1024-360\" | \"skein1024-368\" | \"skein1024-376\" | \"skein1024-384\" | \"skein1024-392\" | \"skein1024-400\" | \"skein1024-408\" | \"skein1024-416\" | \"skein1024-424\" | \"skein1024-432\" | \"skein1024-440\" | \"skein1024-448\" | \"skein1024-456\" | \"skein1024-464\" | \"skein1024-472\" | \"skein1024-480\" | \"skein1024-488\" | \"skein1024-496\" | \"skein1024-504\" | \"skein1024-512\" | \"skein1024-520\" | \"skein1024-528\" | \"skein1024-536\" | \"skein1024-544\" | \"skein1024-552\" | \"skein1024-560\" | \"skein1024-568\" | \"skein1024-576\" | \"skein1024-584\" | \"skein1024-592\" | \"skein1024-600\" | \"skein1024-608\" | \"skein1024-616\" | \"skein1024-624\" | \"skein1024-632\" | \"skein1024-640\" | \"skein1024-648\" | \"skein1024-656\" | \"skein1024-664\" | \"skein1024-672\" | \"skein1024-680\" | \"skein1024-688\" | \"skein1024-696\" | \"skein1024-704\" | \"skein1024-712\" | \"skein1024-720\" | \"skein1024-728\" | \"skein1024-736\" | \"skein1024-744\" | \"skein1024-752\" | \"skein1024-760\" | \"skein1024-768\" | \"skein1024-776\" | \"skein1024-784\" | \"skein1024-792\" | \"skein1024-800\" | \"skein1024-808\" | \"skein1024-816\" | \"skein1024-824\" | \"skein1024-832\" | \"skein1024-840\" | \"skein1024-848\" | \"skein1024-856\" | \"skein1024-864\" | \"skein1024-872\" | \"skein1024-880\" | \"skein1024-888\" | \"skein1024-896\" | \"skein1024-904\" | \"skein1024-912\" | \"skein1024-920\" | \"skein1024-928\" | \"skein1024-936\" | \"skein1024-944\" | \"skein1024-952\" | \"skein1024-960\" | \"skein1024-968\" | \"skein1024-976\" | \"skein1024-984\" | \"skein1024-992\" | \"skein1024-1000\" | \"skein1024-1008\" | \"skein1024-1016\" | \"skein1024-1024\" | \"poseidon-bls12_381-a2-fc1\" | \"poseidon-bls12_381-a2-fc1-sc\" } HashName\n */\n/**\n * Codes for all available hashes\n *\n * @typedef { 0x00 | 0x11 | 0x12 | 0x13 | 0x14 | 0x15 | 0x16 | 0x17 | 0x18 | 0x19 | 0x1a | 0x1b | 0x1c | 0x1d | 0x1e | 0x22 | 0x23 | 0x56 | 0xd4 | 0xd5 | 0xd6 | 0x1012 | 0x1052 | 0x1053 | 0x1054 | 0x1055 | 0x1100 | 0x1d01 | 0x534d | 0xb201 | 0xb202 | 0xb203 | 0xb204 | 0xb205 | 0xb206 | 0xb207 | 0xb208 | 0xb209 | 0xb20a | 0xb20b | 0xb20c | 0xb20d | 0xb20e | 0xb20f | 0xb210 | 0xb211 | 0xb212 | 0xb213 | 0xb214 | 0xb215 | 0xb216 | 0xb217 | 0xb218 | 0xb219 | 0xb21a | 0xb21b | 0xb21c | 0xb21d | 0xb21e | 0xb21f | 0xb220 | 0xb221 | 0xb222 | 0xb223 | 0xb224 | 0xb225 | 0xb226 | 0xb227 | 0xb228 | 0xb229 | 0xb22a | 0xb22b | 0xb22c | 0xb22d | 0xb22e | 0xb22f | 0xb230 | 0xb231 | 0xb232 | 0xb233 | 0xb234 | 0xb235 | 0xb236 | 0xb237 | 0xb238 | 0xb239 | 0xb23a | 0xb23b | 0xb23c | 0xb23d | 0xb23e | 0xb23f | 0xb240 | 0xb241 | 0xb242 | 0xb243 | 0xb244 | 0xb245 | 0xb246 | 0xb247 | 0xb248 | 0xb249 | 0xb24a | 0xb24b | 0xb24c | 0xb24d | 0xb24e | 0xb24f | 0xb250 | 0xb251 | 0xb252 | 0xb253 | 0xb254 | 0xb255 | 0xb256 | 0xb257 | 0xb258 | 0xb259 | 0xb25a | 0xb25b | 0xb25c | 0xb25d | 0xb25e | 0xb25f | 0xb260 | 0xb301 | 0xb302 | 0xb303 | 0xb304 | 0xb305 | 0xb306 | 0xb307 | 0xb308 | 0xb309 | 0xb30a | 0xb30b | 0xb30c | 0xb30d | 0xb30e | 0xb30f | 0xb310 | 0xb311 | 0xb312 | 0xb313 | 0xb314 | 0xb315 | 0xb316 | 0xb317 | 0xb318 | 0xb319 | 0xb31a | 0xb31b | 0xb31c | 0xb31d | 0xb31e | 0xb31f | 0xb320 | 0xb321 | 0xb322 | 0xb323 | 0xb324 | 0xb325 | 0xb326 | 0xb327 | 0xb328 | 0xb329 | 0xb32a | 0xb32b | 0xb32c | 0xb32d | 0xb32e | 0xb32f | 0xb330 | 0xb331 | 0xb332 | 0xb333 | 0xb334 | 0xb335 | 0xb336 | 0xb337 | 0xb338 | 0xb339 | 0xb33a | 0xb33b | 0xb33c | 0xb33d | 0xb33e | 0xb33f | 0xb340 | 0xb341 | 0xb342 | 0xb343 | 0xb344 | 0xb345 | 0xb346 | 0xb347 | 0xb348 | 0xb349 | 0xb34a | 0xb34b | 0xb34c | 0xb34d | 0xb34e | 0xb34f | 0xb350 | 0xb351 | 0xb352 | 0xb353 | 0xb354 | 0xb355 | 0xb356 | 0xb357 | 0xb358 | 0xb359 | 0xb35a | 0xb35b | 0xb35c | 0xb35d | 0xb35e | 0xb35f | 0xb360 | 0xb361 | 0xb362 | 0xb363 | 0xb364 | 0xb365 | 0xb366 | 0xb367 | 0xb368 | 0xb369 | 0xb36a | 0xb36b | 0xb36c | 0xb36d | 0xb36e | 0xb36f | 0xb370 | 0xb371 | 0xb372 | 0xb373 | 0xb374 | 0xb375 | 0xb376 | 0xb377 | 0xb378 | 0xb379 | 0xb37a | 0xb37b | 0xb37c | 0xb37d | 0xb37e | 0xb37f | 0xb380 | 0xb381 | 0xb382 | 0xb383 | 0xb384 | 0xb385 | 0xb386 | 0xb387 | 0xb388 | 0xb389 | 0xb38a | 0xb38b | 0xb38c | 0xb38d | 0xb38e | 0xb38f | 0xb390 | 0xb391 | 0xb392 | 0xb393 | 0xb394 | 0xb395 | 0xb396 | 0xb397 | 0xb398 | 0xb399 | 0xb39a | 0xb39b | 0xb39c | 0xb39d | 0xb39e | 0xb39f | 0xb3a0 | 0xb3a1 | 0xb3a2 | 0xb3a3 | 0xb3a4 | 0xb3a5 | 0xb3a6 | 0xb3a7 | 0xb3a8 | 0xb3a9 | 0xb3aa | 0xb3ab | 0xb3ac | 0xb3ad | 0xb3ae | 0xb3af | 0xb3b0 | 0xb3b1 | 0xb3b2 | 0xb3b3 | 0xb3b4 | 0xb3b5 | 0xb3b6 | 0xb3b7 | 0xb3b8 | 0xb3b9 | 0xb3ba | 0xb3bb | 0xb3bc | 0xb3bd | 0xb3be | 0xb3bf | 0xb3c0 | 0xb3c1 | 0xb3c2 | 0xb3c3 | 0xb3c4 | 0xb3c5 | 0xb3c6 | 0xb3c7 | 0xb3c8 | 0xb3c9 | 0xb3ca | 0xb3cb | 0xb3cc | 0xb3cd | 0xb3ce | 0xb3cf | 0xb3d0 | 0xb3d1 | 0xb3d2 | 0xb3d3 | 0xb3d4 | 0xb3d5 | 0xb3d6 | 0xb3d7 | 0xb3d8 | 0xb3d9 | 0xb3da | 0xb3db | 0xb3dc | 0xb3dd | 0xb3de | 0xb3df | 0xb3e0 | 0xb401 | 0xb402 } HashCode\n */\n\n/**\n * @type { Record<HashName,HashCode> }\n */\nconst names = Object.freeze({\n  'identity': 0x00,\n  'sha1': 0x11,\n  'sha2-256': 0x12,\n  'sha2-512': 0x13,\n  'sha3-512': 0x14,\n  'sha3-384': 0x15,\n  'sha3-256': 0x16,\n  'sha3-224': 0x17,\n  'shake-128': 0x18,\n  'shake-256': 0x19,\n  'keccak-224': 0x1a,\n  'keccak-256': 0x1b,\n  'keccak-384': 0x1c,\n  'keccak-512': 0x1d,\n  'blake3': 0x1e,\n  'murmur3-128': 0x22,\n  'murmur3-32': 0x23,\n  'dbl-sha2-256': 0x56,\n  'md4': 0xd4,\n  'md5': 0xd5,\n  'bmt': 0xd6,\n  'sha2-256-trunc254-padded': 0x1012,\n  'ripemd-128': 0x1052,\n  'ripemd-160': 0x1053,\n  'ripemd-256': 0x1054,\n  'ripemd-320': 0x1055,\n  'x11': 0x1100,\n  'kangarootwelve': 0x1d01,\n  'sm3-256': 0x534d,\n  'blake2b-8': 0xb201,\n  'blake2b-16': 0xb202,\n  'blake2b-24': 0xb203,\n  'blake2b-32': 0xb204,\n  'blake2b-40': 0xb205,\n  'blake2b-48': 0xb206,\n  'blake2b-56': 0xb207,\n  'blake2b-64': 0xb208,\n  'blake2b-72': 0xb209,\n  'blake2b-80': 0xb20a,\n  'blake2b-88': 0xb20b,\n  'blake2b-96': 0xb20c,\n  'blake2b-104': 0xb20d,\n  'blake2b-112': 0xb20e,\n  'blake2b-120': 0xb20f,\n  'blake2b-128': 0xb210,\n  'blake2b-136': 0xb211,\n  'blake2b-144': 0xb212,\n  'blake2b-152': 0xb213,\n  'blake2b-160': 0xb214,\n  'blake2b-168': 0xb215,\n  'blake2b-176': 0xb216,\n  'blake2b-184': 0xb217,\n  'blake2b-192': 0xb218,\n  'blake2b-200': 0xb219,\n  'blake2b-208': 0xb21a,\n  'blake2b-216': 0xb21b,\n  'blake2b-224': 0xb21c,\n  'blake2b-232': 0xb21d,\n  'blake2b-240': 0xb21e,\n  'blake2b-248': 0xb21f,\n  'blake2b-256': 0xb220,\n  'blake2b-264': 0xb221,\n  'blake2b-272': 0xb222,\n  'blake2b-280': 0xb223,\n  'blake2b-288': 0xb224,\n  'blake2b-296': 0xb225,\n  'blake2b-304': 0xb226,\n  'blake2b-312': 0xb227,\n  'blake2b-320': 0xb228,\n  'blake2b-328': 0xb229,\n  'blake2b-336': 0xb22a,\n  'blake2b-344': 0xb22b,\n  'blake2b-352': 0xb22c,\n  'blake2b-360': 0xb22d,\n  'blake2b-368': 0xb22e,\n  'blake2b-376': 0xb22f,\n  'blake2b-384': 0xb230,\n  'blake2b-392': 0xb231,\n  'blake2b-400': 0xb232,\n  'blake2b-408': 0xb233,\n  'blake2b-416': 0xb234,\n  'blake2b-424': 0xb235,\n  'blake2b-432': 0xb236,\n  'blake2b-440': 0xb237,\n  'blake2b-448': 0xb238,\n  'blake2b-456': 0xb239,\n  'blake2b-464': 0xb23a,\n  'blake2b-472': 0xb23b,\n  'blake2b-480': 0xb23c,\n  'blake2b-488': 0xb23d,\n  'blake2b-496': 0xb23e,\n  'blake2b-504': 0xb23f,\n  'blake2b-512': 0xb240,\n  'blake2s-8': 0xb241,\n  'blake2s-16': 0xb242,\n  'blake2s-24': 0xb243,\n  'blake2s-32': 0xb244,\n  'blake2s-40': 0xb245,\n  'blake2s-48': 0xb246,\n  'blake2s-56': 0xb247,\n  'blake2s-64': 0xb248,\n  'blake2s-72': 0xb249,\n  'blake2s-80': 0xb24a,\n  'blake2s-88': 0xb24b,\n  'blake2s-96': 0xb24c,\n  'blake2s-104': 0xb24d,\n  'blake2s-112': 0xb24e,\n  'blake2s-120': 0xb24f,\n  'blake2s-128': 0xb250,\n  'blake2s-136': 0xb251,\n  'blake2s-144': 0xb252,\n  'blake2s-152': 0xb253,\n  'blake2s-160': 0xb254,\n  'blake2s-168': 0xb255,\n  'blake2s-176': 0xb256,\n  'blake2s-184': 0xb257,\n  'blake2s-192': 0xb258,\n  'blake2s-200': 0xb259,\n  'blake2s-208': 0xb25a,\n  'blake2s-216': 0xb25b,\n  'blake2s-224': 0xb25c,\n  'blake2s-232': 0xb25d,\n  'blake2s-240': 0xb25e,\n  'blake2s-248': 0xb25f,\n  'blake2s-256': 0xb260,\n  'skein256-8': 0xb301,\n  'skein256-16': 0xb302,\n  'skein256-24': 0xb303,\n  'skein256-32': 0xb304,\n  'skein256-40': 0xb305,\n  'skein256-48': 0xb306,\n  'skein256-56': 0xb307,\n  'skein256-64': 0xb308,\n  'skein256-72': 0xb309,\n  'skein256-80': 0xb30a,\n  'skein256-88': 0xb30b,\n  'skein256-96': 0xb30c,\n  'skein256-104': 0xb30d,\n  'skein256-112': 0xb30e,\n  'skein256-120': 0xb30f,\n  'skein256-128': 0xb310,\n  'skein256-136': 0xb311,\n  'skein256-144': 0xb312,\n  'skein256-152': 0xb313,\n  'skein256-160': 0xb314,\n  'skein256-168': 0xb315,\n  'skein256-176': 0xb316,\n  'skein256-184': 0xb317,\n  'skein256-192': 0xb318,\n  'skein256-200': 0xb319,\n  'skein256-208': 0xb31a,\n  'skein256-216': 0xb31b,\n  'skein256-224': 0xb31c,\n  'skein256-232': 0xb31d,\n  'skein256-240': 0xb31e,\n  'skein256-248': 0xb31f,\n  'skein256-256': 0xb320,\n  'skein512-8': 0xb321,\n  'skein512-16': 0xb322,\n  'skein512-24': 0xb323,\n  'skein512-32': 0xb324,\n  'skein512-40': 0xb325,\n  'skein512-48': 0xb326,\n  'skein512-56': 0xb327,\n  'skein512-64': 0xb328,\n  'skein512-72': 0xb329,\n  'skein512-80': 0xb32a,\n  'skein512-88': 0xb32b,\n  'skein512-96': 0xb32c,\n  'skein512-104': 0xb32d,\n  'skein512-112': 0xb32e,\n  'skein512-120': 0xb32f,\n  'skein512-128': 0xb330,\n  'skein512-136': 0xb331,\n  'skein512-144': 0xb332,\n  'skein512-152': 0xb333,\n  'skein512-160': 0xb334,\n  'skein512-168': 0xb335,\n  'skein512-176': 0xb336,\n  'skein512-184': 0xb337,\n  'skein512-192': 0xb338,\n  'skein512-200': 0xb339,\n  'skein512-208': 0xb33a,\n  'skein512-216': 0xb33b,\n  'skein512-224': 0xb33c,\n  'skein512-232': 0xb33d,\n  'skein512-240': 0xb33e,\n  'skein512-248': 0xb33f,\n  'skein512-256': 0xb340,\n  'skein512-264': 0xb341,\n  'skein512-272': 0xb342,\n  'skein512-280': 0xb343,\n  'skein512-288': 0xb344,\n  'skein512-296': 0xb345,\n  'skein512-304': 0xb346,\n  'skein512-312': 0xb347,\n  'skein512-320': 0xb348,\n  'skein512-328': 0xb349,\n  'skein512-336': 0xb34a,\n  'skein512-344': 0xb34b,\n  'skein512-352': 0xb34c,\n  'skein512-360': 0xb34d,\n  'skein512-368': 0xb34e,\n  'skein512-376': 0xb34f,\n  'skein512-384': 0xb350,\n  'skein512-392': 0xb351,\n  'skein512-400': 0xb352,\n  'skein512-408': 0xb353,\n  'skein512-416': 0xb354,\n  'skein512-424': 0xb355,\n  'skein512-432': 0xb356,\n  'skein512-440': 0xb357,\n  'skein512-448': 0xb358,\n  'skein512-456': 0xb359,\n  'skein512-464': 0xb35a,\n  'skein512-472': 0xb35b,\n  'skein512-480': 0xb35c,\n  'skein512-488': 0xb35d,\n  'skein512-496': 0xb35e,\n  'skein512-504': 0xb35f,\n  'skein512-512': 0xb360,\n  'skein1024-8': 0xb361,\n  'skein1024-16': 0xb362,\n  'skein1024-24': 0xb363,\n  'skein1024-32': 0xb364,\n  'skein1024-40': 0xb365,\n  'skein1024-48': 0xb366,\n  'skein1024-56': 0xb367,\n  'skein1024-64': 0xb368,\n  'skein1024-72': 0xb369,\n  'skein1024-80': 0xb36a,\n  'skein1024-88': 0xb36b,\n  'skein1024-96': 0xb36c,\n  'skein1024-104': 0xb36d,\n  'skein1024-112': 0xb36e,\n  'skein1024-120': 0xb36f,\n  'skein1024-128': 0xb370,\n  'skein1024-136': 0xb371,\n  'skein1024-144': 0xb372,\n  'skein1024-152': 0xb373,\n  'skein1024-160': 0xb374,\n  'skein1024-168': 0xb375,\n  'skein1024-176': 0xb376,\n  'skein1024-184': 0xb377,\n  'skein1024-192': 0xb378,\n  'skein1024-200': 0xb379,\n  'skein1024-208': 0xb37a,\n  'skein1024-216': 0xb37b,\n  'skein1024-224': 0xb37c,\n  'skein1024-232': 0xb37d,\n  'skein1024-240': 0xb37e,\n  'skein1024-248': 0xb37f,\n  'skein1024-256': 0xb380,\n  'skein1024-264': 0xb381,\n  'skein1024-272': 0xb382,\n  'skein1024-280': 0xb383,\n  'skein1024-288': 0xb384,\n  'skein1024-296': 0xb385,\n  'skein1024-304': 0xb386,\n  'skein1024-312': 0xb387,\n  'skein1024-320': 0xb388,\n  'skein1024-328': 0xb389,\n  'skein1024-336': 0xb38a,\n  'skein1024-344': 0xb38b,\n  'skein1024-352': 0xb38c,\n  'skein1024-360': 0xb38d,\n  'skein1024-368': 0xb38e,\n  'skein1024-376': 0xb38f,\n  'skein1024-384': 0xb390,\n  'skein1024-392': 0xb391,\n  'skein1024-400': 0xb392,\n  'skein1024-408': 0xb393,\n  'skein1024-416': 0xb394,\n  'skein1024-424': 0xb395,\n  'skein1024-432': 0xb396,\n  'skein1024-440': 0xb397,\n  'skein1024-448': 0xb398,\n  'skein1024-456': 0xb399,\n  'skein1024-464': 0xb39a,\n  'skein1024-472': 0xb39b,\n  'skein1024-480': 0xb39c,\n  'skein1024-488': 0xb39d,\n  'skein1024-496': 0xb39e,\n  'skein1024-504': 0xb39f,\n  'skein1024-512': 0xb3a0,\n  'skein1024-520': 0xb3a1,\n  'skein1024-528': 0xb3a2,\n  'skein1024-536': 0xb3a3,\n  'skein1024-544': 0xb3a4,\n  'skein1024-552': 0xb3a5,\n  'skein1024-560': 0xb3a6,\n  'skein1024-568': 0xb3a7,\n  'skein1024-576': 0xb3a8,\n  'skein1024-584': 0xb3a9,\n  'skein1024-592': 0xb3aa,\n  'skein1024-600': 0xb3ab,\n  'skein1024-608': 0xb3ac,\n  'skein1024-616': 0xb3ad,\n  'skein1024-624': 0xb3ae,\n  'skein1024-632': 0xb3af,\n  'skein1024-640': 0xb3b0,\n  'skein1024-648': 0xb3b1,\n  'skein1024-656': 0xb3b2,\n  'skein1024-664': 0xb3b3,\n  'skein1024-672': 0xb3b4,\n  'skein1024-680': 0xb3b5,\n  'skein1024-688': 0xb3b6,\n  'skein1024-696': 0xb3b7,\n  'skein1024-704': 0xb3b8,\n  'skein1024-712': 0xb3b9,\n  'skein1024-720': 0xb3ba,\n  'skein1024-728': 0xb3bb,\n  'skein1024-736': 0xb3bc,\n  'skein1024-744': 0xb3bd,\n  'skein1024-752': 0xb3be,\n  'skein1024-760': 0xb3bf,\n  'skein1024-768': 0xb3c0,\n  'skein1024-776': 0xb3c1,\n  'skein1024-784': 0xb3c2,\n  'skein1024-792': 0xb3c3,\n  'skein1024-800': 0xb3c4,\n  'skein1024-808': 0xb3c5,\n  'skein1024-816': 0xb3c6,\n  'skein1024-824': 0xb3c7,\n  'skein1024-832': 0xb3c8,\n  'skein1024-840': 0xb3c9,\n  'skein1024-848': 0xb3ca,\n  'skein1024-856': 0xb3cb,\n  'skein1024-864': 0xb3cc,\n  'skein1024-872': 0xb3cd,\n  'skein1024-880': 0xb3ce,\n  'skein1024-888': 0xb3cf,\n  'skein1024-896': 0xb3d0,\n  'skein1024-904': 0xb3d1,\n  'skein1024-912': 0xb3d2,\n  'skein1024-920': 0xb3d3,\n  'skein1024-928': 0xb3d4,\n  'skein1024-936': 0xb3d5,\n  'skein1024-944': 0xb3d6,\n  'skein1024-952': 0xb3d7,\n  'skein1024-960': 0xb3d8,\n  'skein1024-968': 0xb3d9,\n  'skein1024-976': 0xb3da,\n  'skein1024-984': 0xb3db,\n  'skein1024-992': 0xb3dc,\n  'skein1024-1000': 0xb3dd,\n  'skein1024-1008': 0xb3de,\n  'skein1024-1016': 0xb3df,\n  'skein1024-1024': 0xb3e0,\n  'poseidon-bls12_381-a2-fc1': 0xb401,\n  'poseidon-bls12_381-a2-fc1-sc': 0xb402\n})\n\nmodule.exports = { names }\n", "function base(ALPHABET, name) {\n  if (ALPHABET.length >= 255) {\n    throw new TypeError('Alphabet too long');\n  }\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) {\n      throw new TypeError(x + ' is ambiguous');\n    }\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);\n  var iFACTOR = Math.log(256) / Math.log(BASE);\n  function encode(source) {\n    if (source instanceof Uint8Array);\n    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)) {\n      throw new TypeError('Expected Uint8Array');\n    }\n    if (source.length === 0) {\n      return '';\n    }\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    var size = (pend - pbegin) * iFACTOR + 1 >>> 0;\n    var b58 = new Uint8Array(size);\n    while (pbegin !== pend) {\n      var carry = source[pbegin];\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) {\n        throw new Error('Non-zero carry');\n      }\n      length = i;\n      pbegin++;\n    }\n    var it2 = size - length;\n    while (it2 !== size && b58[it2] === 0) {\n      it2++;\n    }\n    var str = LEADER.repeat(zeroes);\n    for (; it2 < size; ++it2) {\n      str += ALPHABET.charAt(b58[it2]);\n    }\n    return str;\n  }\n  function decodeUnsafe(source) {\n    if (typeof source !== 'string') {\n      throw new TypeError('Expected String');\n    }\n    if (source.length === 0) {\n      return new Uint8Array();\n    }\n    var psz = 0;\n    if (source[psz] === ' ') {\n      return;\n    }\n    var zeroes = 0;\n    var length = 0;\n    while (source[psz] === LEADER) {\n      zeroes++;\n      psz++;\n    }\n    var size = (source.length - psz) * FACTOR + 1 >>> 0;\n    var b256 = new Uint8Array(size);\n    while (source[psz]) {\n      var carry = BASE_MAP[source.charCodeAt(psz)];\n      if (carry === 255) {\n        return;\n      }\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) {\n        throw new Error('Non-zero carry');\n      }\n      length = i;\n      psz++;\n    }\n    if (source[psz] === ' ') {\n      return;\n    }\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  function decode(string) {\n    var buffer = decodeUnsafe(string);\n    if (buffer) {\n      return buffer;\n    }\n    throw new Error(`Non-${ name } character`);\n  }\n  return {\n    encode: encode,\n    decodeUnsafe: decodeUnsafe,\n    decode: decode\n  };\n}\nvar src = base;\nvar _brrp__multiformats_scope_baseX = src;\nexport default _brrp__multiformats_scope_baseX;", "const empty = new Uint8Array(0);\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '');\nconst fromHex = hex => {\n  const hexes = hex.match(/../g);\n  return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty;\n};\nconst equals = (aa, bb) => {\n  if (aa === bb)\n    return true;\n  if (aa.byteLength !== bb.byteLength) {\n    return false;\n  }\n  for (let ii = 0; ii < aa.byteLength; ii++) {\n    if (aa[ii] !== bb[ii]) {\n      return false;\n    }\n  }\n  return true;\n};\nconst coerce = o => {\n  if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array')\n    return o;\n  if (o instanceof ArrayBuffer)\n    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};\nconst isBinary = o => o instanceof ArrayBuffer || ArrayBuffer.isView(o);\nconst fromString = str => new TextEncoder().encode(str);\nconst toString = b => new TextDecoder().decode(b);\nexport {\n  equals,\n  coerce,\n  isBinary,\n  fromHex,\n  toHex,\n  fromString,\n  toString,\n  empty\n};", "import basex from '../../vendor/base-x.js';\nimport { coerce } from '../bytes.js';\nclass Encoder {\n  constructor(name, prefix, baseEncode) {\n    this.name = name;\n    this.prefix = prefix;\n    this.baseEncode = baseEncode;\n  }\n  encode(bytes) {\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}\nclass Decoder {\n  constructor(name, prefix, baseDecode) {\n    this.name = name;\n    this.prefix = prefix;\n    if (prefix.codePointAt(0) === undefined) {\n      throw new Error('Invalid prefix character');\n    }\n    this.prefixCodePoint = prefix.codePointAt(0);\n    this.baseDecode = baseDecode;\n  }\n  decode(text) {\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  or(decoder) {\n    return or(this, decoder);\n  }\n}\nclass ComposedDecoder {\n  constructor(decoders) {\n    this.decoders = decoders;\n  }\n  or(decoder) {\n    return or(this, decoder);\n  }\n  decode(input) {\n    const prefix = input[0];\n    const decoder = this.decoders[prefix];\n    if (decoder) {\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}\nexport const or = (left, right) => new ComposedDecoder({\n  ...left.decoders || { [left.prefix]: left },\n  ...right.decoders || { [right.prefix]: right }\n});\nexport class Codec {\n  constructor(name, prefix, baseEncode, baseDecode) {\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  encode(input) {\n    return this.encoder.encode(input);\n  }\n  decode(input) {\n    return this.decoder.decode(input);\n  }\n}\nexport const from = ({name, prefix, encode, decode}) => new Codec(name, prefix, encode, decode);\nexport const baseX = ({prefix, name, alphabet}) => {\n  const {encode, decode} = basex(alphabet, name);\n  return from({\n    prefix,\n    name,\n    encode,\n    decode: text => coerce(decode(text))\n  });\n};\nconst decode = (string, alphabet, bitsPerChar, name) => {\n  const codes = {};\n  for (let i = 0; i < alphabet.length; ++i) {\n    codes[alphabet[i]] = i;\n  }\n  let end = string.length;\n  while (string[end - 1] === '=') {\n    --end;\n  }\n  const out = new Uint8Array(end * bitsPerChar / 8 | 0);\n  let bits = 0;\n  let buffer = 0;\n  let written = 0;\n  for (let i = 0; i < end; ++i) {\n    const value = codes[string[i]];\n    if (value === undefined) {\n      throw new SyntaxError(`Non-${ name } character`);\n    }\n    buffer = buffer << bitsPerChar | value;\n    bits += bitsPerChar;\n    if (bits >= 8) {\n      bits -= 8;\n      out[written++] = 255 & buffer >> bits;\n    }\n  }\n  if (bits >= bitsPerChar || 255 & buffer << 8 - bits) {\n    throw new SyntaxError('Unexpected end of data');\n  }\n  return out;\n};\nconst encode = (data, alphabet, bitsPerChar) => {\n  const pad = alphabet[alphabet.length - 1] === '=';\n  const mask = (1 << bitsPerChar) - 1;\n  let out = '';\n  let bits = 0;\n  let buffer = 0;\n  for (let i = 0; i < data.length; ++i) {\n    buffer = buffer << 8 | data[i];\n    bits += 8;\n    while (bits > bitsPerChar) {\n      bits -= bitsPerChar;\n      out += alphabet[mask & buffer >> bits];\n    }\n  }\n  if (bits) {\n    out += alphabet[mask & buffer << bitsPerChar - bits];\n  }\n  if (pad) {\n    while (out.length * bitsPerChar & 7) {\n      out += '=';\n    }\n  }\n  return out;\n};\nexport const rfc4648 = ({name, prefix, bitsPerChar, alphabet}) => {\n  return from({\n    prefix,\n    name,\n    encode(input) {\n      return encode(input, alphabet, bitsPerChar);\n    },\n    decode(input) {\n      return decode(input, alphabet, bitsPerChar, name);\n    }\n  });\n};", "import { from } from './base.js';\nimport {\n  fromString,\n  toString\n} from '../bytes.js';\nexport const identity = from({\n  prefix: '\\0',\n  name: 'identity',\n  encode: buf => toString(buf),\n  decode: str => fromString(str)\n});", "import { rfc4648 } from './base.js';\nexport const base2 = rfc4648({\n  prefix: '0',\n  name: 'base2',\n  alphabet: '01',\n  bitsPerChar: 1\n});", "import { rfc4648 } from './base.js';\nexport const base8 = rfc4648({\n  prefix: '7',\n  name: 'base8',\n  alphabet: '01234567',\n  bitsPerChar: 3\n});", "import { baseX } from './base.js';\nexport const base10 = baseX({\n  prefix: '9',\n  name: 'base10',\n  alphabet: '0123456789'\n});", "import { rfc4648 } from './base.js';\nexport const base16 = rfc4648({\n  prefix: 'f',\n  name: 'base16',\n  alphabet: '0123456789abcdef',\n  bitsPerChar: 4\n});\nexport const base16upper = rfc4648({\n  prefix: 'F',\n  name: 'base16upper',\n  alphabet: '0123456789ABCDEF',\n  bitsPerChar: 4\n});", "import { rfc4648 } from './base.js';\nexport const base32 = rfc4648({\n  prefix: 'b',\n  name: 'base32',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n  bitsPerChar: 5\n});\nexport const base32upper = rfc4648({\n  prefix: 'B',\n  name: 'base32upper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n  bitsPerChar: 5\n});\nexport const base32pad = rfc4648({\n  prefix: 'c',\n  name: 'base32pad',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n  bitsPerChar: 5\n});\nexport const base32padupper = rfc4648({\n  prefix: 'C',\n  name: 'base32padupper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n  bitsPerChar: 5\n});\nexport const base32hex = rfc4648({\n  prefix: 'v',\n  name: 'base32hex',\n  alphabet: '0123456789abcdefghijklmnopqrstuv',\n  bitsPerChar: 5\n});\nexport const base32hexupper = rfc4648({\n  prefix: 'V',\n  name: 'base32hexupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n  bitsPerChar: 5\n});\nexport const base32hexpad = rfc4648({\n  prefix: 't',\n  name: 'base32hexpad',\n  alphabet: '0123456789abcdefghijklmnopqrstuv=',\n  bitsPerChar: 5\n});\nexport const base32hexpadupper = rfc4648({\n  prefix: 'T',\n  name: 'base32hexpadupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n  bitsPerChar: 5\n});\nexport const base32z = rfc4648({\n  prefix: 'h',\n  name: 'base32z',\n  alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n  bitsPerChar: 5\n});", "import { baseX } from './base.js';\nexport const base36 = baseX({\n  prefix: 'k',\n  name: 'base36',\n  alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n});\nexport const base36upper = baseX({\n  prefix: 'K',\n  name: 'base36upper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n});", "import { baseX } from './base.js';\nexport const base58btc = baseX({\n  name: 'base58btc',\n  prefix: 'z',\n  alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n});\nexport const base58flickr = baseX({\n  name: 'base58flickr',\n  prefix: 'Z',\n  alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n});", "import { rfc4648 } from './base.js';\nexport const base64 = rfc4648({\n  prefix: 'm',\n  name: 'base64',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n  bitsPerChar: 6\n});\nexport const base64pad = rfc4648({\n  prefix: 'M',\n  name: 'base64pad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n  bitsPerChar: 6\n});\nexport const base64url = rfc4648({\n  prefix: 'u',\n  name: 'base64url',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n  bitsPerChar: 6\n});\nexport const base64urlpad = rfc4648({\n  prefix: 'U',\n  name: 'base64urlpad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n  bitsPerChar: 6\n});", "import { from } from './base.js';\nconst alphabet = Array.from('\\uD83D\\uDE80\\uD83E\\uDE90\\u2604\\uD83D\\uDEF0\\uD83C\\uDF0C\\uD83C\\uDF11\\uD83C\\uDF12\\uD83C\\uDF13\\uD83C\\uDF14\\uD83C\\uDF15\\uD83C\\uDF16\\uD83C\\uDF17\\uD83C\\uDF18\\uD83C\\uDF0D\\uD83C\\uDF0F\\uD83C\\uDF0E\\uD83D\\uDC09\\u2600\\uD83D\\uDCBB\\uD83D\\uDDA5\\uD83D\\uDCBE\\uD83D\\uDCBF\\uD83D\\uDE02\\u2764\\uD83D\\uDE0D\\uD83E\\uDD23\\uD83D\\uDE0A\\uD83D\\uDE4F\\uD83D\\uDC95\\uD83D\\uDE2D\\uD83D\\uDE18\\uD83D\\uDC4D\\uD83D\\uDE05\\uD83D\\uDC4F\\uD83D\\uDE01\\uD83D\\uDD25\\uD83E\\uDD70\\uD83D\\uDC94\\uD83D\\uDC96\\uD83D\\uDC99\\uD83D\\uDE22\\uD83E\\uDD14\\uD83D\\uDE06\\uD83D\\uDE44\\uD83D\\uDCAA\\uD83D\\uDE09\\u263A\\uD83D\\uDC4C\\uD83E\\uDD17\\uD83D\\uDC9C\\uD83D\\uDE14\\uD83D\\uDE0E\\uD83D\\uDE07\\uD83C\\uDF39\\uD83E\\uDD26\\uD83C\\uDF89\\uD83D\\uDC9E\\u270C\\u2728\\uD83E\\uDD37\\uD83D\\uDE31\\uD83D\\uDE0C\\uD83C\\uDF38\\uD83D\\uDE4C\\uD83D\\uDE0B\\uD83D\\uDC97\\uD83D\\uDC9A\\uD83D\\uDE0F\\uD83D\\uDC9B\\uD83D\\uDE42\\uD83D\\uDC93\\uD83E\\uDD29\\uD83D\\uDE04\\uD83D\\uDE00\\uD83D\\uDDA4\\uD83D\\uDE03\\uD83D\\uDCAF\\uD83D\\uDE48\\uD83D\\uDC47\\uD83C\\uDFB6\\uD83D\\uDE12\\uD83E\\uDD2D\\u2763\\uD83D\\uDE1C\\uD83D\\uDC8B\\uD83D\\uDC40\\uD83D\\uDE2A\\uD83D\\uDE11\\uD83D\\uDCA5\\uD83D\\uDE4B\\uD83D\\uDE1E\\uD83D\\uDE29\\uD83D\\uDE21\\uD83E\\uDD2A\\uD83D\\uDC4A\\uD83E\\uDD73\\uD83D\\uDE25\\uD83E\\uDD24\\uD83D\\uDC49\\uD83D\\uDC83\\uD83D\\uDE33\\u270B\\uD83D\\uDE1A\\uD83D\\uDE1D\\uD83D\\uDE34\\uD83C\\uDF1F\\uD83D\\uDE2C\\uD83D\\uDE43\\uD83C\\uDF40\\uD83C\\uDF37\\uD83D\\uDE3B\\uD83D\\uDE13\\u2B50\\u2705\\uD83E\\uDD7A\\uD83C\\uDF08\\uD83D\\uDE08\\uD83E\\uDD18\\uD83D\\uDCA6\\u2714\\uD83D\\uDE23\\uD83C\\uDFC3\\uD83D\\uDC90\\u2639\\uD83C\\uDF8A\\uD83D\\uDC98\\uD83D\\uDE20\\u261D\\uD83D\\uDE15\\uD83C\\uDF3A\\uD83C\\uDF82\\uD83C\\uDF3B\\uD83D\\uDE10\\uD83D\\uDD95\\uD83D\\uDC9D\\uD83D\\uDE4A\\uD83D\\uDE39\\uD83D\\uDDE3\\uD83D\\uDCAB\\uD83D\\uDC80\\uD83D\\uDC51\\uD83C\\uDFB5\\uD83E\\uDD1E\\uD83D\\uDE1B\\uD83D\\uDD34\\uD83D\\uDE24\\uD83C\\uDF3C\\uD83D\\uDE2B\\u26BD\\uD83E\\uDD19\\u2615\\uD83C\\uDFC6\\uD83E\\uDD2B\\uD83D\\uDC48\\uD83D\\uDE2E\\uD83D\\uDE46\\uD83C\\uDF7B\\uD83C\\uDF43\\uD83D\\uDC36\\uD83D\\uDC81\\uD83D\\uDE32\\uD83C\\uDF3F\\uD83E\\uDDE1\\uD83C\\uDF81\\u26A1\\uD83C\\uDF1E\\uD83C\\uDF88\\u274C\\u270A\\uD83D\\uDC4B\\uD83D\\uDE30\\uD83E\\uDD28\\uD83D\\uDE36\\uD83E\\uDD1D\\uD83D\\uDEB6\\uD83D\\uDCB0\\uD83C\\uDF53\\uD83D\\uDCA2\\uD83E\\uDD1F\\uD83D\\uDE41\\uD83D\\uDEA8\\uD83D\\uDCA8\\uD83E\\uDD2C\\u2708\\uD83C\\uDF80\\uD83C\\uDF7A\\uD83E\\uDD13\\uD83D\\uDE19\\uD83D\\uDC9F\\uD83C\\uDF31\\uD83D\\uDE16\\uD83D\\uDC76\\uD83E\\uDD74\\u25B6\\u27A1\\u2753\\uD83D\\uDC8E\\uD83D\\uDCB8\\u2B07\\uD83D\\uDE28\\uD83C\\uDF1A\\uD83E\\uDD8B\\uD83D\\uDE37\\uD83D\\uDD7A\\u26A0\\uD83D\\uDE45\\uD83D\\uDE1F\\uD83D\\uDE35\\uD83D\\uDC4E\\uD83E\\uDD32\\uD83E\\uDD20\\uD83E\\uDD27\\uD83D\\uDCCC\\uD83D\\uDD35\\uD83D\\uDC85\\uD83E\\uDDD0\\uD83D\\uDC3E\\uD83C\\uDF52\\uD83D\\uDE17\\uD83E\\uDD11\\uD83C\\uDF0A\\uD83E\\uDD2F\\uD83D\\uDC37\\u260E\\uD83D\\uDCA7\\uD83D\\uDE2F\\uD83D\\uDC86\\uD83D\\uDC46\\uD83C\\uDFA4\\uD83D\\uDE47\\uD83C\\uDF51\\u2744\\uD83C\\uDF34\\uD83D\\uDCA3\\uD83D\\uDC38\\uD83D\\uDC8C\\uD83D\\uDCCD\\uD83E\\uDD40\\uD83E\\uDD22\\uD83D\\uDC45\\uD83D\\uDCA1\\uD83D\\uDCA9\\uD83D\\uDC50\\uD83D\\uDCF8\\uD83D\\uDC7B\\uD83E\\uDD10\\uD83E\\uDD2E\\uD83C\\uDFBC\\uD83E\\uDD75\\uD83D\\uDEA9\\uD83C\\uDF4E\\uD83C\\uDF4A\\uD83D\\uDC7C\\uD83D\\uDC8D\\uD83D\\uDCE3\\uD83E\\uDD42');\nconst alphabetBytesToChars = alphabet.reduce((p, c, i) => {\n  p[i] = c;\n  return p;\n}, []);\nconst alphabetCharsToBytes = alphabet.reduce((p, c, i) => {\n  p[c.codePointAt(0)] = i;\n  return p;\n}, []);\nfunction encode(data) {\n  return data.reduce((p, c) => {\n    p += alphabetBytesToChars[c];\n    return p;\n  }, '');\n}\nfunction decode(str) {\n  const byts = [];\n  for (const char of str) {\n    const byt = alphabetCharsToBytes[char.codePointAt(0)];\n    if (byt === undefined) {\n      throw new Error(`Non-base256emoji character: ${ char }`);\n    }\n    byts.push(byt);\n  }\n  return new Uint8Array(byts);\n}\nexport const base256emoji = from({\n  prefix: '\\uD83D\\uDE80',\n  name: 'base256emoji',\n  encode,\n  decode\n});", "var encode_1 = encode;\nvar MSB = 128, REST = 127, MSBALL = ~REST, INT = Math.pow(2, 31);\nfunction encode(num, out, offset) {\n  out = out || [];\n  offset = offset || 0;\n  var oldOffset = offset;\n  while (num >= INT) {\n    out[offset++] = num & 255 | MSB;\n    num /= 128;\n  }\n  while (num & MSBALL) {\n    out[offset++] = num & 255 | MSB;\n    num >>>= 7;\n  }\n  out[offset] = num | 0;\n  encode.bytes = offset - oldOffset + 1;\n  return out;\n}\nvar decode = read;\nvar MSB$1 = 128, REST$1 = 127;\nfunction read(buf, offset) {\n  var res = 0, offset = offset || 0, shift = 0, counter = offset, b, l = buf.length;\n  do {\n    if (counter >= l) {\n      read.bytes = 0;\n      throw new RangeError('Could not decode varint');\n    }\n    b = buf[counter++];\n    res += shift < 28 ? (b & REST$1) << shift : (b & REST$1) * Math.pow(2, shift);\n    shift += 7;\n  } while (b >= MSB$1);\n  read.bytes = counter - offset;\n  return res;\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);\nvar length = function (value) {\n  return value < N1 ? 1 : value < N2 ? 2 : value < N3 ? 3 : value < N4 ? 4 : value < N5 ? 5 : value < N6 ? 6 : value < N7 ? 7 : value < N8 ? 8 : value < N9 ? 9 : 10;\n};\nvar varint = {\n  encode: encode_1,\n  decode: decode,\n  encodingLength: length\n};\nvar _brrp_varint = varint;\nexport default _brrp_varint;", "import varint from '../vendor/varint.js';\nexport const decode = (data, offset = 0) => {\n  const code = varint.decode(data, offset);\n  return [\n    code,\n    varint.decode.bytes\n  ];\n};\nexport const encodeTo = (int, target, offset = 0) => {\n  varint.encode(int, target, offset);\n  return target;\n};\nexport const encodingLength = int => {\n  return varint.encodingLength(int);\n};", "import {\n  coerce,\n  equals as equalBytes\n} from '../bytes.js';\nimport * as varint from '../varint.js';\nexport const create = (code, digest) => {\n  const size = digest.byteLength;\n  const sizeOffset = varint.encodingLength(code);\n  const digestOffset = sizeOffset + varint.encodingLength(size);\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  return new Digest(code, size, digest, bytes);\n};\nexport const decode = multihash => {\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  if (digest.byteLength !== size) {\n    throw new Error('Incorrect length');\n  }\n  return new Digest(code, size, digest, bytes);\n};\nexport const equals = (a, b) => {\n  if (a === b) {\n    return true;\n  } else {\n    return a.code === b.code && a.size === b.size && equalBytes(a.bytes, b.bytes);\n  }\n};\nexport class Digest {\n  constructor(code, size, digest, bytes) {\n    this.code = code;\n    this.size = size;\n    this.digest = digest;\n    this.bytes = bytes;\n  }\n}", "import * as Digest from './digest.js';\nexport const from = ({name, code, encode}) => new Hasher(name, code, encode);\nexport class Hasher {\n  constructor(name, code, encode) {\n    this.name = name;\n    this.code = code;\n    this.encode = encode;\n  }\n  digest(input) {\n    if (input instanceof Uint8Array) {\n      const result = this.encode(input);\n      return result instanceof Uint8Array ? Digest.create(this.code, result) : result.then(digest => Digest.create(this.code, digest));\n    } else {\n      throw Error('Unknown type, must be binary type');\n    }\n  }\n}", "import { from } from './hasher.js';\nconst sha = name => async data => new Uint8Array(await crypto.subtle.digest(name, data));\nexport const sha256 = from({\n  name: 'sha2-256',\n  code: 18,\n  encode: sha('SHA-256')\n});\nexport const sha512 = from({\n  name: 'sha2-512',\n  code: 19,\n  encode: sha('SHA-512')\n});", "import { coerce } from '../bytes.js';\nimport * as Digest from './digest.js';\nconst code = 0;\nconst name = 'identity';\nconst encode = coerce;\nconst digest = input => Digest.create(code, encode(input));\nexport const identity = {\n  code,\n  name,\n  encode,\n  digest\n};", "import { coerce } from '../bytes.js';\nexport const name = 'raw';\nexport const code = 85;\nexport const encode = node => coerce(node);\nexport const decode = data => coerce(data);", "const textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\nexport const name = 'json';\nexport const code = 512;\nexport const encode = node => textEncoder.encode(JSON.stringify(node));\nexport const decode = data => JSON.parse(textDecoder.decode(data));", "import * as varint from './varint.js';\nimport * as Digest from './hashes/digest.js';\nimport { base58btc } from './bases/base58.js';\nimport { base32 } from './bases/base32.js';\nimport { coerce } from './bytes.js';\nexport class CID {\n  constructor(version, code, multihash, bytes) {\n    this.code = code;\n    this.version = version;\n    this.multihash = multihash;\n    this.bytes = bytes;\n    this.byteOffset = bytes.byteOffset;\n    this.byteLength = bytes.byteLength;\n    this.asCID = this;\n    this._baseCache = new Map();\n    Object.defineProperties(this, {\n      byteOffset: hidden,\n      byteLength: hidden,\n      code: readonly,\n      version: readonly,\n      multihash: readonly,\n      bytes: readonly,\n      _baseCache: hidden,\n      asCID: hidden\n    });\n  }\n  toV0() {\n    switch (this.version) {\n    case 0: {\n        return this;\n      }\n    default: {\n        const {code, multihash} = this;\n        if (code !== DAG_PB_CODE) {\n          throw new Error('Cannot convert a non dag-pb CID to CIDv0');\n        }\n        if (multihash.code !== SHA_256_CODE) {\n          throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0');\n        }\n        return CID.createV0(multihash);\n      }\n    }\n  }\n  toV1() {\n    switch (this.version) {\n    case 0: {\n        const {code, digest} = this.multihash;\n        const multihash = Digest.create(code, digest);\n        return CID.createV1(this.code, multihash);\n      }\n    case 1: {\n        return this;\n      }\n    default: {\n        throw Error(`Can not convert CID version ${ this.version } to version 0. This is a bug please report`);\n      }\n    }\n  }\n  equals(other) {\n    return other && this.code === other.code && this.version === other.version && Digest.equals(this.multihash, other.multihash);\n  }\n  toString(base) {\n    const {bytes, version, _baseCache} = this;\n    switch (version) {\n    case 0:\n      return toStringV0(bytes, _baseCache, base || base58btc.encoder);\n    default:\n      return toStringV1(bytes, _baseCache, base || base32.encoder);\n    }\n  }\n  toJSON() {\n    return {\n      code: this.code,\n      version: this.version,\n      hash: this.multihash.bytes\n    };\n  }\n  get [Symbol.toStringTag]() {\n    return 'CID';\n  }\n  [Symbol.for('nodejs.util.inspect.custom')]() {\n    return 'CID(' + this.toString() + ')';\n  }\n  static isCID(value) {\n    deprecate(/^0\\.0/, IS_CID_DEPRECATION);\n    return !!(value && (value[cidSymbol] || value.asCID === value));\n  }\n  get toBaseEncodedString() {\n    throw new Error('Deprecated, use .toString()');\n  }\n  get codec() {\n    throw new Error('\"codec\" property is deprecated, use integer \"code\" property instead');\n  }\n  get buffer() {\n    throw new Error('Deprecated .buffer property, use .bytes to get Uint8Array instead');\n  }\n  get multibaseName() {\n    throw new Error('\"multibaseName\" property is deprecated');\n  }\n  get prefix() {\n    throw new Error('\"prefix\" property is deprecated');\n  }\n  static asCID(value) {\n    if (value instanceof CID) {\n      return value;\n    } else if (value != null && value.asCID === value) {\n      const {version, code, multihash, bytes} = value;\n      return new CID(version, code, multihash, bytes || encodeCID(version, code, multihash.bytes));\n    } else if (value != null && value[cidSymbol] === true) {\n      const {version, multihash, code} = value;\n      const digest = Digest.decode(multihash);\n      return CID.create(version, code, digest);\n    } else {\n      return null;\n    }\n  }\n  static create(version, code, digest) {\n    if (typeof code !== 'number') {\n      throw new Error('String codecs are no longer supported');\n    }\n    switch (version) {\n    case 0: {\n        if (code !== DAG_PB_CODE) {\n          throw new Error(`Version 0 CID must use dag-pb (code: ${ DAG_PB_CODE }) block encoding`);\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  static createV0(digest) {\n    return CID.create(0, DAG_PB_CODE, digest);\n  }\n  static createV1(code, digest) {\n    return CID.create(1, code, digest);\n  }\n  static decode(bytes) {\n    const [cid, remainder] = CID.decodeFirst(bytes);\n    if (remainder.length) {\n      throw new Error('Incorrect length');\n    }\n    return cid;\n  }\n  static decodeFirst(bytes) {\n    const specs = CID.inspectBytes(bytes);\n    const prefixSize = specs.size - specs.multihashSize;\n    const multihashBytes = coerce(bytes.subarray(prefixSize, prefixSize + specs.multihashSize));\n    if (multihashBytes.byteLength !== specs.multihashSize) {\n      throw new Error('Incorrect length');\n    }\n    const digestBytes = multihashBytes.subarray(specs.multihashSize - specs.digestSize);\n    const digest = new Digest.Digest(specs.multihashCode, specs.digestSize, digestBytes, multihashBytes);\n    const cid = specs.version === 0 ? CID.createV0(digest) : CID.createV1(specs.codec, digest);\n    return [\n      cid,\n      bytes.subarray(specs.size)\n    ];\n  }\n  static inspectBytes(initialBytes) {\n    let offset = 0;\n    const next = () => {\n      const [i, length] = varint.decode(initialBytes.subarray(offset));\n      offset += length;\n      return i;\n    };\n    let version = next();\n    let codec = DAG_PB_CODE;\n    if (version === 18) {\n      version = 0;\n      offset = 0;\n    } else if (version === 1) {\n      codec = next();\n    }\n    if (version !== 0 && version !== 1) {\n      throw new RangeError(`Invalid CID version ${ version }`);\n    }\n    const prefixSize = offset;\n    const multihashCode = next();\n    const digestSize = next();\n    const size = offset + digestSize;\n    const multihashSize = size - prefixSize;\n    return {\n      version,\n      codec,\n      multihashCode,\n      digestSize,\n      multihashSize,\n      size\n    };\n  }\n  static parse(source, base) {\n    const [prefix, bytes] = parseCIDtoBytes(source, base);\n    const cid = CID.decode(bytes);\n    cid._baseCache.set(prefix, source);\n    return cid;\n  }\n}\nconst parseCIDtoBytes = (source, base) => {\n  switch (source[0]) {\n  case 'Q': {\n      const decoder = base || base58btc;\n      return [\n        base58btc.prefix,\n        decoder.decode(`${ base58btc.prefix }${ source }`)\n      ];\n    }\n  case base58btc.prefix: {\n      const decoder = base || base58btc;\n      return [\n        base58btc.prefix,\n        decoder.decode(source)\n      ];\n    }\n  case base32.prefix: {\n      const decoder = base || base32;\n      return [\n        base32.prefix,\n        decoder.decode(source)\n      ];\n    }\n  default: {\n      if (base == null) {\n        throw Error('To parse non base32 or base58btc encoded CID multibase decoder must be provided');\n      }\n      return [\n        source[0],\n        base.decode(source)\n      ];\n    }\n  }\n};\nconst toStringV0 = (bytes, cache, base) => {\n  const {prefix} = base;\n  if (prefix !== base58btc.prefix) {\n    throw Error(`Cannot string encode V0 in ${ base.name } encoding`);\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};\nconst toStringV1 = (bytes, cache, base) => {\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};\nconst DAG_PB_CODE = 112;\nconst SHA_256_CODE = 18;\nconst encodeCID = (version, code, multihash) => {\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};\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID');\nconst readonly = {\n  writable: false,\n  configurable: false,\n  enumerable: true\n};\nconst hidden = {\n  writable: false,\n  enumerable: false,\n  configurable: false\n};\nconst version = '0.0.0-dev';\nconst deprecate = (range, message) => {\n  if (range.test(version)) {\n    console.warn(message);\n  } else {\n    throw new Error(message);\n  }\n};\nconst IS_CID_DEPRECATION = `CID.isCID(v) is deprecated and will be removed in the next major release.\nFollowing code pattern:\n\nif (CID.isCID(value)) {\n  doSomethingWithCID(value)\n}\n\nIs replaced with:\n\nconst cid = CID.asCID(value)\nif (cid) {\n  // Make sure to use cid instead of value\n  doSomethingWithCID(cid)\n}\n`;", "import { CID } from './cid.js';\nimport * as varint from './varint.js';\nimport * as bytes from './bytes.js';\nimport * as hasher from './hashes/hasher.js';\nimport * as digest from './hashes/digest.js';\nexport {\n  CID,\n  hasher,\n  digest,\n  varint,\n  bytes\n};", "import * as identityBase from './bases/identity.js';\nimport * as base2 from './bases/base2.js';\nimport * as base8 from './bases/base8.js';\nimport * as base10 from './bases/base10.js';\nimport * as base16 from './bases/base16.js';\nimport * as base32 from './bases/base32.js';\nimport * as base36 from './bases/base36.js';\nimport * as base58 from './bases/base58.js';\nimport * as base64 from './bases/base64.js';\nimport * as base256emoji from './bases/base256emoji.js';\nimport * as sha2 from './hashes/sha2.js';\nimport * as identity from './hashes/identity.js';\nimport * as raw from './codecs/raw.js';\nimport * as json from './codecs/json.js';\nimport {\n  CID,\n  hasher,\n  digest,\n  varint,\n  bytes\n} from './index.js';\nconst bases = {\n  ...identityBase,\n  ...base2,\n  ...base8,\n  ...base10,\n  ...base16,\n  ...base32,\n  ...base36,\n  ...base58,\n  ...base64,\n  ...base256emoji\n};\nconst hashes = {\n  ...sha2,\n  ...identity\n};\nconst codecs = {\n  raw,\n  json\n};\nexport {\n  CID,\n  hasher,\n  digest,\n  varint,\n  bytes,\n  hashes,\n  bases,\n  codecs\n};", "export function asUint8Array(buf) {\n  if (globalThis.Buffer != null) {\n    return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n  }\n  return buf;\n}", "import { asUint8Array } from './util/as-uint8array.js';\nexport function alloc(size = 0) {\n  if (globalThis.Buffer != null && globalThis.Buffer.alloc != null) {\n    return asUint8Array(globalThis.Buffer.alloc(size));\n  }\n  return new Uint8Array(size);\n}\nexport function allocUnsafe(size = 0) {\n  if (globalThis.Buffer != null && globalThis.Buffer.allocUnsafe != null) {\n    return asUint8Array(globalThis.Buffer.allocUnsafe(size));\n  }\n  return new Uint8Array(size);\n}", "import { bases } from 'multiformats/basics';\nimport { allocUnsafe } from '../alloc.js';\nfunction createCodec(name, prefix, encode, decode) {\n  return {\n    name,\n    prefix,\n    encoder: {\n      name,\n      prefix,\n      encode\n    },\n    decoder: { decode }\n  };\n}\nconst string = createCodec('utf8', 'u', buf => {\n  const decoder = new TextDecoder('utf8');\n  return 'u' + decoder.decode(buf);\n}, str => {\n  const encoder = new TextEncoder();\n  return encoder.encode(str.substring(1));\n});\nconst ascii = createCodec('ascii', 'a', buf => {\n  let string = 'a';\n  for (let i = 0; i < buf.length; i++) {\n    string += String.fromCharCode(buf[i]);\n  }\n  return string;\n}, str => {\n  str = str.substring(1);\n  const buf = allocUnsafe(str.length);\n  for (let i = 0; i < str.length; i++) {\n    buf[i] = str.charCodeAt(i);\n  }\n  return buf;\n});\nconst BASES = {\n  utf8: string,\n  'utf-8': string,\n  hex: bases.base16,\n  latin1: ascii,\n  ascii: ascii,\n  binary: ascii,\n  ...bases\n};\nexport default BASES;", "import bases from './util/bases.js';\nexport function toString(array, encoding = 'utf8') {\n  const base = bases[encoding];\n  if (!base) {\n    throw new Error(`Unsupported encoding \"${ encoding }\"`);\n  }\n  if ((encoding === 'utf8' || encoding === 'utf-8') && globalThis.Buffer != null && globalThis.Buffer.from != null) {\n    return globalThis.Buffer.from(array.buffer, array.byteOffset, array.byteLength).toString('utf8');\n  }\n  return base.encoder.encode(array).substring(1);\n}", "import bases from './util/bases.js';\nimport { asUint8Array } from './util/as-uint8array.js';\nexport function fromString(string, encoding = 'utf8') {\n  const base = bases[encoding];\n  if (!base) {\n    throw new Error(`Unsupported encoding \"${ encoding }\"`);\n  }\n  if ((encoding === 'utf8' || encoding === 'utf-8') && globalThis.Buffer != null && globalThis.Buffer.from != null) {\n    return asUint8Array(globalThis.Buffer.from(string, 'utf-8'));\n  }\n  return base.decoder.decode(`${ base.prefix }${ string }`);\n}", "import { allocUnsafe } from './alloc.js';\nimport { asUint8Array } from './util/as-uint8array.js';\nexport function concat(arrays, length) {\n  if (!length) {\n    length = arrays.reduce((acc, curr) => acc + curr.length, 0);\n  }\n  const output = allocUnsafe(length);\n  let offset = 0;\n  for (const arr of arrays) {\n    output.set(arr, offset);\n    offset += arr.length;\n  }\n  return asUint8Array(output);\n}", "/**\n * Multihash implementation in JavaScript.\n */\n'use strict'\n\nconst multibase = require('multibase')\nconst varint = require('varint')\nconst { names } = require('./constants')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\nconst { concat: uint8ArrayConcat } = require('uint8arrays/concat')\n\nconst codes = /** @type {import('./types').CodeNameMap} */({})\n\n// eslint-disable-next-line guard-for-in\nfor (const key in names) {\n  const name = /** @type {HashName} */(key)\n  codes[names[name]] = name\n}\nObject.freeze(codes)\n\n/**\n * Convert the given multihash to a hex encoded string.\n *\n * @param {Uint8Array} hash\n * @returns {string}\n */\nfunction toHexString (hash) {\n  if (!(hash instanceof Uint8Array)) {\n    throw new Error('must be passed a Uint8Array')\n  }\n\n  return uint8ArrayToString(hash, 'base16')\n}\n\n/**\n * Convert the given hex encoded string to a multihash.\n *\n * @param {string} hash\n * @returns {Uint8Array}\n */\nfunction fromHexString (hash) {\n  return uint8ArrayFromString(hash, 'base16')\n}\n\n/**\n * Convert the given multihash to a base58 encoded string.\n *\n * @param {Uint8Array} hash\n * @returns {string}\n */\nfunction toB58String (hash) {\n  if (!(hash instanceof Uint8Array)) {\n    throw new Error('must be passed a Uint8Array')\n  }\n\n  return uint8ArrayToString(multibase.encode('base58btc', hash)).slice(1)\n}\n\n/**\n * Convert the given base58 encoded string to a multihash.\n *\n * @param {string|Uint8Array} hash\n * @returns {Uint8Array}\n */\nfunction fromB58String (hash) {\n  const encoded = hash instanceof Uint8Array\n    ? uint8ArrayToString(hash)\n    : hash\n\n  return multibase.decode('z' + encoded)\n}\n\n/**\n * Decode a hash from the given multihash.\n *\n * @param {Uint8Array} bytes\n * @returns {{code: HashCode, name: HashName, length: number, digest: Uint8Array}} result\n */\nfunction decode (bytes) {\n  if (!(bytes instanceof Uint8Array)) {\n    throw new Error('multihash must be a Uint8Array')\n  }\n\n  if (bytes.length < 2) {\n    throw new Error('multihash too short. must be > 2 bytes.')\n  }\n\n  const code = /** @type {HashCode} */(varint.decode(bytes))\n  if (!isValidCode(code)) {\n    throw new Error(`multihash unknown function code: 0x${code.toString(16)}`)\n  }\n  bytes = bytes.slice(varint.decode.bytes)\n\n  const len = varint.decode(bytes)\n  if (len < 0) {\n    throw new Error(`multihash invalid length: ${len}`)\n  }\n  bytes = bytes.slice(varint.decode.bytes)\n\n  if (bytes.length !== len) {\n    throw new Error(`multihash length inconsistent: 0x${uint8ArrayToString(bytes, 'base16')}`)\n  }\n\n  return {\n    code,\n    name: codes[code],\n    length: len,\n    digest: bytes\n  }\n}\n\n/**\n * Encode a hash digest along with the specified function code.\n *\n * > **Note:** the length is derived from the length of the digest itself.\n *\n * @param {Uint8Array} digest\n * @param {HashName | HashCode} code\n * @param {number} [length]\n * @returns {Uint8Array}\n */\nfunction encode (digest, code, length) {\n  if (!digest || code === undefined) {\n    throw new Error('multihash encode requires at least two args: digest, code')\n  }\n\n  // ensure it's a hashfunction code.\n  const hashfn = coerceCode(code)\n\n  if (!(digest instanceof Uint8Array)) {\n    throw new Error('digest should be a Uint8Array')\n  }\n\n  if (length == null) {\n    length = digest.length\n  }\n\n  if (length && digest.length !== length) {\n    throw new Error('digest length should be equal to specified length.')\n  }\n\n  const hash = varint.encode(hashfn)\n  const len = varint.encode(length)\n  return uint8ArrayConcat([hash, len, digest], hash.length + len.length + digest.length)\n}\n\n/**\n * Converts a hash function name into the matching code.\n * If passed a number it will return the number if it's a valid code.\n *\n * @param {HashName | number} name\n * @returns {number}\n */\nfunction coerceCode (name) {\n  let code = name\n\n  if (typeof name === 'string') {\n    if (names[name] === undefined) {\n      throw new Error(`Unrecognized hash function named: ${name}`)\n    }\n    code = names[name]\n  }\n\n  if (typeof code !== 'number') {\n    throw new Error(`Hash function code should be a number. Got: ${code}`)\n  }\n\n  // @ts-ignore\n  if (codes[code] === undefined && !isAppCode(code)) {\n    throw new Error(`Unrecognized function code: ${code}`)\n  }\n\n  return code\n}\n\n/**\n * Checks if a code is part of the app range\n *\n * @param {number} code\n * @returns {boolean}\n */\nfunction isAppCode (code) {\n  return code > 0 && code < 0x10\n}\n\n/**\n * Checks whether a multihash code is valid.\n *\n * @param {HashCode} code\n * @returns {boolean}\n */\nfunction isValidCode (code) {\n  if (isAppCode(code)) {\n    return true\n  }\n\n  if (codes[code]) {\n    return true\n  }\n\n  return false\n}\n\n/**\n * Check if the given buffer is a valid multihash. Throws an error if it is not valid.\n *\n * @param {Uint8Array} multihash\n * @returns {void}\n * @throws {Error}\n */\nfunction validate (multihash) {\n  decode(multihash) // throws if bad.\n}\n\n/**\n * Returns a prefix from a valid multihash. Throws an error if it is not valid.\n *\n * @param {Uint8Array} multihash\n * @returns {Uint8Array}\n * @throws {Error}\n */\nfunction prefix (multihash) {\n  validate(multihash)\n\n  return multihash.subarray(0, 2)\n}\n\nmodule.exports = {\n  names,\n  codes,\n  toHexString,\n  fromHexString,\n  toB58String,\n  fromB58String,\n  decode,\n  encode,\n  coerceCode,\n  isAppCode,\n  validate,\n  prefix,\n  isValidCode\n}\n\n/**\n * @typedef { import(\"./constants\").HashCode } HashCode\n * @typedef { import(\"./constants\").HashName } HashName\n */\n", "var global = typeof self !== 'undefined' ? self : this;\nvar __self__ = (function () {\nfunction F() {\nthis.fetch = false;\nthis.DOMException = global.DOMException\n}\nF.prototype = global;\nreturn new F();\n})();\n(function(self) {\n\nvar irrelevant = (function (exports) {\n\n  var support = {\n    searchParams: 'URLSearchParams' in self,\n    iterable: 'Symbol' in self && 'iterator' in Symbol,\n    blob:\n      'FileReader' in self &&\n      'Blob' in self &&\n      (function() {\n        try {\n          new Blob();\n          return true\n        } catch (e) {\n          return false\n        }\n      })(),\n    formData: 'FormData' in self,\n    arrayBuffer: 'ArrayBuffer' in self\n  };\n\n  function isDataView(obj) {\n    return obj && DataView.prototype.isPrototypeOf(obj)\n  }\n\n  if (support.arrayBuffer) {\n    var viewClasses = [\n      '[object Int8Array]',\n      '[object Uint8Array]',\n      '[object Uint8ClampedArray]',\n      '[object Int16Array]',\n      '[object Uint16Array]',\n      '[object Int32Array]',\n      '[object Uint32Array]',\n      '[object Float32Array]',\n      '[object Float64Array]'\n    ];\n\n    var isArrayBufferView =\n      ArrayBuffer.isView ||\n      function(obj) {\n        return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n      };\n  }\n\n  function normalizeName(name) {\n    if (typeof name !== 'string') {\n      name = String(name);\n    }\n    if (/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(name)) {\n      throw new TypeError('Invalid character in header field name')\n    }\n    return name.toLowerCase()\n  }\n\n  function normalizeValue(value) {\n    if (typeof value !== 'string') {\n      value = String(value);\n    }\n    return value\n  }\n\n  // Build a destructive iterator for the value list\n  function iteratorFor(items) {\n    var iterator = {\n      next: function() {\n        var value = items.shift();\n        return {done: value === undefined, value: value}\n      }\n    };\n\n    if (support.iterable) {\n      iterator[Symbol.iterator] = function() {\n        return iterator\n      };\n    }\n\n    return iterator\n  }\n\n  function Headers(headers) {\n    this.map = {};\n\n    if (headers instanceof Headers) {\n      headers.forEach(function(value, name) {\n        this.append(name, value);\n      }, this);\n    } else if (Array.isArray(headers)) {\n      headers.forEach(function(header) {\n        this.append(header[0], header[1]);\n      }, this);\n    } else if (headers) {\n      Object.getOwnPropertyNames(headers).forEach(function(name) {\n        this.append(name, headers[name]);\n      }, this);\n    }\n  }\n\n  Headers.prototype.append = function(name, value) {\n    name = normalizeName(name);\n    value = normalizeValue(value);\n    var oldValue = this.map[name];\n    this.map[name] = oldValue ? oldValue + ', ' + value : value;\n  };\n\n  Headers.prototype['delete'] = function(name) {\n    delete this.map[normalizeName(name)];\n  };\n\n  Headers.prototype.get = function(name) {\n    name = normalizeName(name);\n    return this.has(name) ? this.map[name] : null\n  };\n\n  Headers.prototype.has = function(name) {\n    return this.map.hasOwnProperty(normalizeName(name))\n  };\n\n  Headers.prototype.set = function(name, value) {\n    this.map[normalizeName(name)] = normalizeValue(value);\n  };\n\n  Headers.prototype.forEach = function(callback, thisArg) {\n    for (var name in this.map) {\n      if (this.map.hasOwnProperty(name)) {\n        callback.call(thisArg, this.map[name], name, this);\n      }\n    }\n  };\n\n  Headers.prototype.keys = function() {\n    var items = [];\n    this.forEach(function(value, name) {\n      items.push(name);\n    });\n    return iteratorFor(items)\n  };\n\n  Headers.prototype.values = function() {\n    var items = [];\n    this.forEach(function(value) {\n      items.push(value);\n    });\n    return iteratorFor(items)\n  };\n\n  Headers.prototype.entries = function() {\n    var items = [];\n    this.forEach(function(value, name) {\n      items.push([name, value]);\n    });\n    return iteratorFor(items)\n  };\n\n  if (support.iterable) {\n    Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n  }\n\n  function consumed(body) {\n    if (body.bodyUsed) {\n      return Promise.reject(new TypeError('Already read'))\n    }\n    body.bodyUsed = true;\n  }\n\n  function fileReaderReady(reader) {\n    return new Promise(function(resolve, reject) {\n      reader.onload = function() {\n        resolve(reader.result);\n      };\n      reader.onerror = function() {\n        reject(reader.error);\n      };\n    })\n  }\n\n  function readBlobAsArrayBuffer(blob) {\n    var reader = new FileReader();\n    var promise = fileReaderReady(reader);\n    reader.readAsArrayBuffer(blob);\n    return promise\n  }\n\n  function readBlobAsText(blob) {\n    var reader = new FileReader();\n    var promise = fileReaderReady(reader);\n    reader.readAsText(blob);\n    return promise\n  }\n\n  function readArrayBufferAsText(buf) {\n    var view = new Uint8Array(buf);\n    var chars = new Array(view.length);\n\n    for (var i = 0; i < view.length; i++) {\n      chars[i] = String.fromCharCode(view[i]);\n    }\n    return chars.join('')\n  }\n\n  function bufferClone(buf) {\n    if (buf.slice) {\n      return buf.slice(0)\n    } else {\n      var view = new Uint8Array(buf.byteLength);\n      view.set(new Uint8Array(buf));\n      return view.buffer\n    }\n  }\n\n  function Body() {\n    this.bodyUsed = false;\n\n    this._initBody = function(body) {\n      this._bodyInit = body;\n      if (!body) {\n        this._bodyText = '';\n      } else if (typeof body === 'string') {\n        this._bodyText = body;\n      } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n        this._bodyBlob = body;\n      } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n        this._bodyFormData = body;\n      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n        this._bodyText = body.toString();\n      } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n        this._bodyArrayBuffer = bufferClone(body.buffer);\n        // IE 10-11 can't handle a DataView body.\n        this._bodyInit = new Blob([this._bodyArrayBuffer]);\n      } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n        this._bodyArrayBuffer = bufferClone(body);\n      } else {\n        this._bodyText = body = Object.prototype.toString.call(body);\n      }\n\n      if (!this.headers.get('content-type')) {\n        if (typeof body === 'string') {\n          this.headers.set('content-type', 'text/plain;charset=UTF-8');\n        } else if (this._bodyBlob && this._bodyBlob.type) {\n          this.headers.set('content-type', this._bodyBlob.type);\n        } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n          this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n        }\n      }\n    };\n\n    if (support.blob) {\n      this.blob = function() {\n        var rejected = consumed(this);\n        if (rejected) {\n          return rejected\n        }\n\n        if (this._bodyBlob) {\n          return Promise.resolve(this._bodyBlob)\n        } else if (this._bodyArrayBuffer) {\n          return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n        } else if (this._bodyFormData) {\n          throw new Error('could not read FormData body as blob')\n        } else {\n          return Promise.resolve(new Blob([this._bodyText]))\n        }\n      };\n\n      this.arrayBuffer = function() {\n        if (this._bodyArrayBuffer) {\n          return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n        } else {\n          return this.blob().then(readBlobAsArrayBuffer)\n        }\n      };\n    }\n\n    this.text = function() {\n      var rejected = consumed(this);\n      if (rejected) {\n        return rejected\n      }\n\n      if (this._bodyBlob) {\n        return readBlobAsText(this._bodyBlob)\n      } else if (this._bodyArrayBuffer) {\n        return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n      } else if (this._bodyFormData) {\n        throw new Error('could not read FormData body as text')\n      } else {\n        return Promise.resolve(this._bodyText)\n      }\n    };\n\n    if (support.formData) {\n      this.formData = function() {\n        return this.text().then(decode)\n      };\n    }\n\n    this.json = function() {\n      return this.text().then(JSON.parse)\n    };\n\n    return this\n  }\n\n  // HTTP methods whose capitalization should be normalized\n  var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n  function normalizeMethod(method) {\n    var upcased = method.toUpperCase();\n    return methods.indexOf(upcased) > -1 ? upcased : method\n  }\n\n  function Request(input, options) {\n    options = options || {};\n    var body = options.body;\n\n    if (input instanceof Request) {\n      if (input.bodyUsed) {\n        throw new TypeError('Already read')\n      }\n      this.url = input.url;\n      this.credentials = input.credentials;\n      if (!options.headers) {\n        this.headers = new Headers(input.headers);\n      }\n      this.method = input.method;\n      this.mode = input.mode;\n      this.signal = input.signal;\n      if (!body && input._bodyInit != null) {\n        body = input._bodyInit;\n        input.bodyUsed = true;\n      }\n    } else {\n      this.url = String(input);\n    }\n\n    this.credentials = options.credentials || this.credentials || 'same-origin';\n    if (options.headers || !this.headers) {\n      this.headers = new Headers(options.headers);\n    }\n    this.method = normalizeMethod(options.method || this.method || 'GET');\n    this.mode = options.mode || this.mode || null;\n    this.signal = options.signal || this.signal;\n    this.referrer = null;\n\n    if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n      throw new TypeError('Body not allowed for GET or HEAD requests')\n    }\n    this._initBody(body);\n  }\n\n  Request.prototype.clone = function() {\n    return new Request(this, {body: this._bodyInit})\n  };\n\n  function decode(body) {\n    var form = new FormData();\n    body\n      .trim()\n      .split('&')\n      .forEach(function(bytes) {\n        if (bytes) {\n          var split = bytes.split('=');\n          var name = split.shift().replace(/\\+/g, ' ');\n          var value = split.join('=').replace(/\\+/g, ' ');\n          form.append(decodeURIComponent(name), decodeURIComponent(value));\n        }\n      });\n    return form\n  }\n\n  function parseHeaders(rawHeaders) {\n    var headers = new Headers();\n    // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n    // https://tools.ietf.org/html/rfc7230#section-3.2\n    var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n    preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n      var parts = line.split(':');\n      var key = parts.shift().trim();\n      if (key) {\n        var value = parts.join(':').trim();\n        headers.append(key, value);\n      }\n    });\n    return headers\n  }\n\n  Body.call(Request.prototype);\n\n  function Response(bodyInit, options) {\n    if (!options) {\n      options = {};\n    }\n\n    this.type = 'default';\n    this.status = options.status === undefined ? 200 : options.status;\n    this.ok = this.status >= 200 && this.status < 300;\n    this.statusText = 'statusText' in options ? options.statusText : 'OK';\n    this.headers = new Headers(options.headers);\n    this.url = options.url || '';\n    this._initBody(bodyInit);\n  }\n\n  Body.call(Response.prototype);\n\n  Response.prototype.clone = function() {\n    return new Response(this._bodyInit, {\n      status: this.status,\n      statusText: this.statusText,\n      headers: new Headers(this.headers),\n      url: this.url\n    })\n  };\n\n  Response.error = function() {\n    var response = new Response(null, {status: 0, statusText: ''});\n    response.type = 'error';\n    return response\n  };\n\n  var redirectStatuses = [301, 302, 303, 307, 308];\n\n  Response.redirect = function(url, status) {\n    if (redirectStatuses.indexOf(status) === -1) {\n      throw new RangeError('Invalid status code')\n    }\n\n    return new Response(null, {status: status, headers: {location: url}})\n  };\n\n  exports.DOMException = self.DOMException;\n  try {\n    new exports.DOMException();\n  } catch (err) {\n    exports.DOMException = function(message, name) {\n      this.message = message;\n      this.name = name;\n      var error = Error(message);\n      this.stack = error.stack;\n    };\n    exports.DOMException.prototype = Object.create(Error.prototype);\n    exports.DOMException.prototype.constructor = exports.DOMException;\n  }\n\n  function fetch(input, init) {\n    return new Promise(function(resolve, reject) {\n      var request = new Request(input, init);\n\n      if (request.signal && request.signal.aborted) {\n        return reject(new exports.DOMException('Aborted', 'AbortError'))\n      }\n\n      var xhr = new XMLHttpRequest();\n\n      function abortXhr() {\n        xhr.abort();\n      }\n\n      xhr.onload = function() {\n        var options = {\n          status: xhr.status,\n          statusText: xhr.statusText,\n          headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n        };\n        options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n        var body = 'response' in xhr ? xhr.response : xhr.responseText;\n        resolve(new Response(body, options));\n      };\n\n      xhr.onerror = function() {\n        reject(new TypeError('Network request failed'));\n      };\n\n      xhr.ontimeout = function() {\n        reject(new TypeError('Network request failed'));\n      };\n\n      xhr.onabort = function() {\n        reject(new exports.DOMException('Aborted', 'AbortError'));\n      };\n\n      xhr.open(request.method, request.url, true);\n\n      if (request.credentials === 'include') {\n        xhr.withCredentials = true;\n      } else if (request.credentials === 'omit') {\n        xhr.withCredentials = false;\n      }\n\n      if ('responseType' in xhr && support.blob) {\n        xhr.responseType = 'blob';\n      }\n\n      request.headers.forEach(function(value, name) {\n        xhr.setRequestHeader(name, value);\n      });\n\n      if (request.signal) {\n        request.signal.addEventListener('abort', abortXhr);\n\n        xhr.onreadystatechange = function() {\n          // DONE (success or failure)\n          if (xhr.readyState === 4) {\n            request.signal.removeEventListener('abort', abortXhr);\n          }\n        };\n      }\n\n      xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n    })\n  }\n\n  fetch.polyfill = true;\n\n  if (!self.fetch) {\n    self.fetch = fetch;\n    self.Headers = Headers;\n    self.Request = Request;\n    self.Response = Response;\n  }\n\n  exports.Headers = Headers;\n  exports.Request = Request;\n  exports.Response = Response;\n  exports.fetch = fetch;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n  return exports;\n\n})({});\n})(__self__);\n__self__.fetch.ponyfill = true;\n// Remove \"polyfill\" property added by whatwg-fetch\ndelete __self__.fetch.polyfill;\n// Choose between native implementation (global) or custom implementation (__self__)\n// var ctx = global.fetch ? global : __self__;\nvar ctx = __self__; // this line disable service worker support temporarily\nexports = ctx.fetch // To enable: import fetch from 'cross-fetch'\nexports.default = ctx.fetch // For TypeScript consumers without esModuleInterop.\nexports.fetch = ctx.fetch // To enable: import {fetch} from 'cross-fetch'\nexports.Headers = ctx.Headers\nexports.Request = ctx.Request\nexports.Response = ctx.Response\nmodule.exports = exports\n", "var global = typeof self !== 'undefined' ? self : this;\nvar __self__ = (function () {\nfunction F() {\nthis.fetch = false;\nthis.DOMException = global.DOMException\n}\nF.prototype = global;\nreturn new F();\n})();\n(function(self) {\n\nvar irrelevant = (function (exports) {\n\n  var support = {\n    searchParams: 'URLSearchParams' in self,\n    iterable: 'Symbol' in self && 'iterator' in Symbol,\n    blob:\n      'FileReader' in self &&\n      'Blob' in self &&\n      (function() {\n        try {\n          new Blob();\n          return true\n        } catch (e) {\n          return false\n        }\n      })(),\n    formData: 'FormData' in self,\n    arrayBuffer: 'ArrayBuffer' in self\n  };\n\n  function isDataView(obj) {\n    return obj && DataView.prototype.isPrototypeOf(obj)\n  }\n\n  if (support.arrayBuffer) {\n    var viewClasses = [\n      '[object Int8Array]',\n      '[object Uint8Array]',\n      '[object Uint8ClampedArray]',\n      '[object Int16Array]',\n      '[object Uint16Array]',\n      '[object Int32Array]',\n      '[object Uint32Array]',\n      '[object Float32Array]',\n      '[object Float64Array]'\n    ];\n\n    var isArrayBufferView =\n      ArrayBuffer.isView ||\n      function(obj) {\n        return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n      };\n  }\n\n  function normalizeName(name) {\n    if (typeof name !== 'string') {\n      name = String(name);\n    }\n    if (/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(name)) {\n      throw new TypeError('Invalid character in header field name')\n    }\n    return name.toLowerCase()\n  }\n\n  function normalizeValue(value) {\n    if (typeof value !== 'string') {\n      value = String(value);\n    }\n    return value\n  }\n\n  // Build a destructive iterator for the value list\n  function iteratorFor(items) {\n    var iterator = {\n      next: function() {\n        var value = items.shift();\n        return {done: value === undefined, value: value}\n      }\n    };\n\n    if (support.iterable) {\n      iterator[Symbol.iterator] = function() {\n        return iterator\n      };\n    }\n\n    return iterator\n  }\n\n  function Headers(headers) {\n    this.map = {};\n\n    if (headers instanceof Headers) {\n      headers.forEach(function(value, name) {\n        this.append(name, value);\n      }, this);\n    } else if (Array.isArray(headers)) {\n      headers.forEach(function(header) {\n        this.append(header[0], header[1]);\n      }, this);\n    } else if (headers) {\n      Object.getOwnPropertyNames(headers).forEach(function(name) {\n        this.append(name, headers[name]);\n      }, this);\n    }\n  }\n\n  Headers.prototype.append = function(name, value) {\n    name = normalizeName(name);\n    value = normalizeValue(value);\n    var oldValue = this.map[name];\n    this.map[name] = oldValue ? oldValue + ', ' + value : value;\n  };\n\n  Headers.prototype['delete'] = function(name) {\n    delete this.map[normalizeName(name)];\n  };\n\n  Headers.prototype.get = function(name) {\n    name = normalizeName(name);\n    return this.has(name) ? this.map[name] : null\n  };\n\n  Headers.prototype.has = function(name) {\n    return this.map.hasOwnProperty(normalizeName(name))\n  };\n\n  Headers.prototype.set = function(name, value) {\n    this.map[normalizeName(name)] = normalizeValue(value);\n  };\n\n  Headers.prototype.forEach = function(callback, thisArg) {\n    for (var name in this.map) {\n      if (this.map.hasOwnProperty(name)) {\n        callback.call(thisArg, this.map[name], name, this);\n      }\n    }\n  };\n\n  Headers.prototype.keys = function() {\n    var items = [];\n    this.forEach(function(value, name) {\n      items.push(name);\n    });\n    return iteratorFor(items)\n  };\n\n  Headers.prototype.values = function() {\n    var items = [];\n    this.forEach(function(value) {\n      items.push(value);\n    });\n    return iteratorFor(items)\n  };\n\n  Headers.prototype.entries = function() {\n    var items = [];\n    this.forEach(function(value, name) {\n      items.push([name, value]);\n    });\n    return iteratorFor(items)\n  };\n\n  if (support.iterable) {\n    Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n  }\n\n  function consumed(body) {\n    if (body.bodyUsed) {\n      return Promise.reject(new TypeError('Already read'))\n    }\n    body.bodyUsed = true;\n  }\n\n  function fileReaderReady(reader) {\n    return new Promise(function(resolve, reject) {\n      reader.onload = function() {\n        resolve(reader.result);\n      };\n      reader.onerror = function() {\n        reject(reader.error);\n      };\n    })\n  }\n\n  function readBlobAsArrayBuffer(blob) {\n    var reader = new FileReader();\n    var promise = fileReaderReady(reader);\n    reader.readAsArrayBuffer(blob);\n    return promise\n  }\n\n  function readBlobAsText(blob) {\n    var reader = new FileReader();\n    var promise = fileReaderReady(reader);\n    reader.readAsText(blob);\n    return promise\n  }\n\n  function readArrayBufferAsText(buf) {\n    var view = new Uint8Array(buf);\n    var chars = new Array(view.length);\n\n    for (var i = 0; i < view.length; i++) {\n      chars[i] = String.fromCharCode(view[i]);\n    }\n    return chars.join('')\n  }\n\n  function bufferClone(buf) {\n    if (buf.slice) {\n      return buf.slice(0)\n    } else {\n      var view = new Uint8Array(buf.byteLength);\n      view.set(new Uint8Array(buf));\n      return view.buffer\n    }\n  }\n\n  function Body() {\n    this.bodyUsed = false;\n\n    this._initBody = function(body) {\n      this._bodyInit = body;\n      if (!body) {\n        this._bodyText = '';\n      } else if (typeof body === 'string') {\n        this._bodyText = body;\n      } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n        this._bodyBlob = body;\n      } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n        this._bodyFormData = body;\n      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n        this._bodyText = body.toString();\n      } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n        this._bodyArrayBuffer = bufferClone(body.buffer);\n        // IE 10-11 can't handle a DataView body.\n        this._bodyInit = new Blob([this._bodyArrayBuffer]);\n      } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n        this._bodyArrayBuffer = bufferClone(body);\n      } else {\n        this._bodyText = body = Object.prototype.toString.call(body);\n      }\n\n      if (!this.headers.get('content-type')) {\n        if (typeof body === 'string') {\n          this.headers.set('content-type', 'text/plain;charset=UTF-8');\n        } else if (this._bodyBlob && this._bodyBlob.type) {\n          this.headers.set('content-type', this._bodyBlob.type);\n        } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n          this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n        }\n      }\n    };\n\n    if (support.blob) {\n      this.blob = function() {\n        var rejected = consumed(this);\n        if (rejected) {\n          return rejected\n        }\n\n        if (this._bodyBlob) {\n          return Promise.resolve(this._bodyBlob)\n        } else if (this._bodyArrayBuffer) {\n          return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n        } else if (this._bodyFormData) {\n          throw new Error('could not read FormData body as blob')\n        } else {\n          return Promise.resolve(new Blob([this._bodyText]))\n        }\n      };\n\n      this.arrayBuffer = function() {\n        if (this._bodyArrayBuffer) {\n          return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n        } else {\n          return this.blob().then(readBlobAsArrayBuffer)\n        }\n      };\n    }\n\n    this.text = function() {\n      var rejected = consumed(this);\n      if (rejected) {\n        return rejected\n      }\n\n      if (this._bodyBlob) {\n        return readBlobAsText(this._bodyBlob)\n      } else if (this._bodyArrayBuffer) {\n        return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n      } else if (this._bodyFormData) {\n        throw new Error('could not read FormData body as text')\n      } else {\n        return Promise.resolve(this._bodyText)\n      }\n    };\n\n    if (support.formData) {\n      this.formData = function() {\n        return this.text().then(decode)\n      };\n    }\n\n    this.json = function() {\n      return this.text().then(JSON.parse)\n    };\n\n    return this\n  }\n\n  // HTTP methods whose capitalization should be normalized\n  var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n  function normalizeMethod(method) {\n    var upcased = method.toUpperCase();\n    return methods.indexOf(upcased) > -1 ? upcased : method\n  }\n\n  function Request(input, options) {\n    options = options || {};\n    var body = options.body;\n\n    if (input instanceof Request) {\n      if (input.bodyUsed) {\n        throw new TypeError('Already read')\n      }\n      this.url = input.url;\n      this.credentials = input.credentials;\n      if (!options.headers) {\n        this.headers = new Headers(input.headers);\n      }\n      this.method = input.method;\n      this.mode = input.mode;\n      this.signal = input.signal;\n      if (!body && input._bodyInit != null) {\n        body = input._bodyInit;\n        input.bodyUsed = true;\n      }\n    } else {\n      this.url = String(input);\n    }\n\n    this.credentials = options.credentials || this.credentials || 'same-origin';\n    if (options.headers || !this.headers) {\n      this.headers = new Headers(options.headers);\n    }\n    this.method = normalizeMethod(options.method || this.method || 'GET');\n    this.mode = options.mode || this.mode || null;\n    this.signal = options.signal || this.signal;\n    this.referrer = null;\n\n    if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n      throw new TypeError('Body not allowed for GET or HEAD requests')\n    }\n    this._initBody(body);\n  }\n\n  Request.prototype.clone = function() {\n    return new Request(this, {body: this._bodyInit})\n  };\n\n  function decode(body) {\n    var form = new FormData();\n    body\n      .trim()\n      .split('&')\n      .forEach(function(bytes) {\n        if (bytes) {\n          var split = bytes.split('=');\n          var name = split.shift().replace(/\\+/g, ' ');\n          var value = split.join('=').replace(/\\+/g, ' ');\n          form.append(decodeURIComponent(name), decodeURIComponent(value));\n        }\n      });\n    return form\n  }\n\n  function parseHeaders(rawHeaders) {\n    var headers = new Headers();\n    // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n    // https://tools.ietf.org/html/rfc7230#section-3.2\n    var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n    preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n      var parts = line.split(':');\n      var key = parts.shift().trim();\n      if (key) {\n        var value = parts.join(':').trim();\n        headers.append(key, value);\n      }\n    });\n    return headers\n  }\n\n  Body.call(Request.prototype);\n\n  function Response(bodyInit, options) {\n    if (!options) {\n      options = {};\n    }\n\n    this.type = 'default';\n    this.status = options.status === undefined ? 200 : options.status;\n    this.ok = this.status >= 200 && this.status < 300;\n    this.statusText = 'statusText' in options ? options.statusText : 'OK';\n    this.headers = new Headers(options.headers);\n    this.url = options.url || '';\n    this._initBody(bodyInit);\n  }\n\n  Body.call(Response.prototype);\n\n  Response.prototype.clone = function() {\n    return new Response(this._bodyInit, {\n      status: this.status,\n      statusText: this.statusText,\n      headers: new Headers(this.headers),\n      url: this.url\n    })\n  };\n\n  Response.error = function() {\n    var response = new Response(null, {status: 0, statusText: ''});\n    response.type = 'error';\n    return response\n  };\n\n  var redirectStatuses = [301, 302, 303, 307, 308];\n\n  Response.redirect = function(url, status) {\n    if (redirectStatuses.indexOf(status) === -1) {\n      throw new RangeError('Invalid status code')\n    }\n\n    return new Response(null, {status: status, headers: {location: url}})\n  };\n\n  exports.DOMException = self.DOMException;\n  try {\n    new exports.DOMException();\n  } catch (err) {\n    exports.DOMException = function(message, name) {\n      this.message = message;\n      this.name = name;\n      var error = Error(message);\n      this.stack = error.stack;\n    };\n    exports.DOMException.prototype = Object.create(Error.prototype);\n    exports.DOMException.prototype.constructor = exports.DOMException;\n  }\n\n  function fetch(input, init) {\n    return new Promise(function(resolve, reject) {\n      var request = new Request(input, init);\n\n      if (request.signal && request.signal.aborted) {\n        return reject(new exports.DOMException('Aborted', 'AbortError'))\n      }\n\n      var xhr = new XMLHttpRequest();\n\n      function abortXhr() {\n        xhr.abort();\n      }\n\n      xhr.onload = function() {\n        var options = {\n          status: xhr.status,\n          statusText: xhr.statusText,\n          headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n        };\n        options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n        var body = 'response' in xhr ? xhr.response : xhr.responseText;\n        resolve(new Response(body, options));\n      };\n\n      xhr.onerror = function() {\n        reject(new TypeError('Network request failed'));\n      };\n\n      xhr.ontimeout = function() {\n        reject(new TypeError('Network request failed'));\n      };\n\n      xhr.onabort = function() {\n        reject(new exports.DOMException('Aborted', 'AbortError'));\n      };\n\n      xhr.open(request.method, request.url, true);\n\n      if (request.credentials === 'include') {\n        xhr.withCredentials = true;\n      } else if (request.credentials === 'omit') {\n        xhr.withCredentials = false;\n      }\n\n      if ('responseType' in xhr && support.blob) {\n        xhr.responseType = 'blob';\n      }\n\n      request.headers.forEach(function(value, name) {\n        xhr.setRequestHeader(name, value);\n      });\n\n      if (request.signal) {\n        request.signal.addEventListener('abort', abortXhr);\n\n        xhr.onreadystatechange = function() {\n          // DONE (success or failure)\n          if (xhr.readyState === 4) {\n            request.signal.removeEventListener('abort', abortXhr);\n          }\n        };\n      }\n\n      xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n    })\n  }\n\n  fetch.polyfill = true;\n\n  if (!self.fetch) {\n    self.fetch = fetch;\n    self.Headers = Headers;\n    self.Request = Request;\n    self.Response = Response;\n  }\n\n  exports.Headers = Headers;\n  exports.Request = Request;\n  exports.Response = Response;\n  exports.fetch = fetch;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n  return exports;\n\n})({});\n})(__self__);\n__self__.fetch.ponyfill = true;\n// Remove \"polyfill\" property added by whatwg-fetch\ndelete __self__.fetch.polyfill;\n// Choose between native implementation (global) or custom implementation (__self__)\n// var ctx = global.fetch ? global : __self__;\nvar ctx = __self__; // this line disable service worker support temporarily\nexports = ctx.fetch // To enable: import fetch from 'cross-fetch'\nexports.default = ctx.fetch // For TypeScript consumers without esModuleInterop.\nexports.fetch = ctx.fetch // To enable: import {fetch} from 'cross-fetch'\nexports.Headers = ctx.Headers\nexports.Request = ctx.Request\nexports.Response = ctx.Response\nmodule.exports = exports\n", "/*!\n * hash-wasm (https://www.npmjs.com/package/hash-wasm)\n * (c) Dani Biro\n * @license MIT\n */\n\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n    typeof define === 'function' && define.amd ? define(['exports'], factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.hashwasm = {}));\n}(this, (function (exports) { 'use strict';\n\n    /*! *****************************************************************************\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission to use, copy, modify, and/or distribute this software for any\r\n    purpose with or without fee is hereby granted.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n    PERFORMANCE OF THIS SOFTWARE.\r\n    ***************************************************************************** */\r\n\r\n    function __awaiter(thisArg, _arguments, P, generator) {\r\n        function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n        return new (P || (P = Promise))(function (resolve, reject) {\r\n            function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n            function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n            function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n            step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n        });\r\n    }\n\n    class Mutex {\n        constructor() {\n            this.mutex = Promise.resolve();\n        }\n        lock() {\n            let begin = () => { };\n            this.mutex = this.mutex.then(() => new Promise(begin));\n            return new Promise((res) => {\n                begin = res;\n            });\n        }\n        dispatch(fn) {\n            return __awaiter(this, void 0, void 0, function* () {\n                const unlock = yield this.lock();\n                try {\n                    return yield Promise.resolve(fn());\n                }\n                finally {\n                    unlock();\n                }\n            });\n        }\n    }\n\n    /* eslint-disable import/prefer-default-export */\n    /* eslint-disable no-bitwise */\n    var _a;\n    function getGlobal() {\n        if (typeof globalThis !== 'undefined')\n            return globalThis;\n        // eslint-disable-next-line no-restricted-globals\n        if (typeof self !== 'undefined')\n            return self;\n        if (typeof window !== 'undefined')\n            return window;\n        return global;\n    }\n    const globalObject = getGlobal();\n    const nodeBuffer = (_a = globalObject.Buffer) !== null && _a !== void 0 ? _a : null;\n    const textEncoder = globalObject.TextEncoder ? new globalObject.TextEncoder() : null;\n    function intArrayToString(arr, len) {\n        return String.fromCharCode(...arr.subarray(0, len));\n    }\n    function hexCharCodesToInt(a, b) {\n        return (((a & 0xF) + ((a >> 6) | ((a >> 3) & 0x8))) << 4) | ((b & 0xF) + ((b >> 6) | ((b >> 3) & 0x8)));\n    }\n    function writeHexToUInt8(buf, str) {\n        const size = str.length >> 1;\n        for (let i = 0; i < size; i++) {\n            const index = i << 1;\n            buf[i] = hexCharCodesToInt(str.charCodeAt(index), str.charCodeAt(index + 1));\n        }\n    }\n    function hexStringEqualsUInt8(str, buf) {\n        if (str.length !== buf.length * 2) {\n            return false;\n        }\n        for (let i = 0; i < buf.length; i++) {\n            const strIndex = i << 1;\n            if (buf[i] !== hexCharCodesToInt(str.charCodeAt(strIndex), str.charCodeAt(strIndex + 1))) {\n                return false;\n            }\n        }\n        return true;\n    }\n    const alpha = 'a'.charCodeAt(0) - 10;\n    const digit = '0'.charCodeAt(0);\n    function getDigestHex(tmpBuffer, input, hashLength) {\n        let p = 0;\n        /* eslint-disable no-plusplus */\n        for (let i = 0; i < hashLength; i++) {\n            let nibble = input[i] >>> 4;\n            tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;\n            nibble = input[i] & 0xF;\n            tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;\n        }\n        /* eslint-enable no-plusplus */\n        return String.fromCharCode.apply(null, tmpBuffer);\n    }\n    const getUInt8Buffer = nodeBuffer !== null\n        ? (data) => {\n            if (typeof data === 'string') {\n                const buf = nodeBuffer.from(data, 'utf8');\n                return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);\n            }\n            if (nodeBuffer.isBuffer(data)) {\n                return new Uint8Array(data.buffer, data.byteOffset, data.length);\n            }\n            if (ArrayBuffer.isView(data)) {\n                return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n            }\n            throw new Error('Invalid data type!');\n        }\n        : (data) => {\n            if (typeof data === 'string') {\n                return textEncoder.encode(data);\n            }\n            if (ArrayBuffer.isView(data)) {\n                return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n            }\n            throw new Error('Invalid data type!');\n        };\n    const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n    const base64Lookup = new Uint8Array(256);\n    for (let i = 0; i < base64Chars.length; i++) {\n        base64Lookup[base64Chars.charCodeAt(i)] = i;\n    }\n    function encodeBase64(data, pad = true) {\n        const len = data.length;\n        const extraBytes = len % 3;\n        const parts = [];\n        const len2 = len - extraBytes;\n        for (let i = 0; i < len2; i += 3) {\n            const tmp = ((data[i] << 16) & 0xFF0000)\n                + ((data[i + 1] << 8) & 0xFF00)\n                + (data[i + 2] & 0xFF);\n            const triplet = base64Chars.charAt((tmp >> 18) & 0x3F)\n                + base64Chars.charAt((tmp >> 12) & 0x3F)\n                + base64Chars.charAt((tmp >> 6) & 0x3F)\n                + base64Chars.charAt(tmp & 0x3F);\n            parts.push(triplet);\n        }\n        if (extraBytes === 1) {\n            const tmp = data[len - 1];\n            const a = base64Chars.charAt(tmp >> 2);\n            const b = base64Chars.charAt((tmp << 4) & 0x3F);\n            parts.push(`${a}${b}`);\n            if (pad) {\n                parts.push('==');\n            }\n        }\n        else if (extraBytes === 2) {\n            const tmp = (data[len - 2] << 8) + data[len - 1];\n            const a = base64Chars.charAt(tmp >> 10);\n            const b = base64Chars.charAt((tmp >> 4) & 0x3F);\n            const c = base64Chars.charAt((tmp << 2) & 0x3F);\n            parts.push(`${a}${b}${c}`);\n            if (pad) {\n                parts.push('=');\n            }\n        }\n        return parts.join('');\n    }\n    function getDecodeBase64Length(data) {\n        let bufferLength = Math.floor(data.length * 0.75);\n        const len = data.length;\n        if (data[len - 1] === '=') {\n            bufferLength -= 1;\n            if (data[len - 2] === '=') {\n                bufferLength -= 1;\n            }\n        }\n        return bufferLength;\n    }\n    function decodeBase64(data) {\n        const bufferLength = getDecodeBase64Length(data);\n        const len = data.length;\n        const bytes = new Uint8Array(bufferLength);\n        let p = 0;\n        for (let i = 0; i < len; i += 4) {\n            const encoded1 = base64Lookup[data.charCodeAt(i)];\n            const encoded2 = base64Lookup[data.charCodeAt(i + 1)];\n            const encoded3 = base64Lookup[data.charCodeAt(i + 2)];\n            const encoded4 = base64Lookup[data.charCodeAt(i + 3)];\n            bytes[p] = (encoded1 << 2) | (encoded2 >> 4);\n            p += 1;\n            bytes[p] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n            p += 1;\n            bytes[p] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n            p += 1;\n        }\n        return bytes;\n    }\n\n    const MAX_HEAP = 16 * 1024;\n    const WASM_FUNC_HASH_LENGTH = 4;\n    const wasmMutex = new Mutex();\n    const wasmModuleCache = new Map();\n    function WASMInterface(binary, hashLength) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let wasmInstance = null;\n            let memoryView = null;\n            let initialized = false;\n            if (typeof WebAssembly === 'undefined') {\n                throw new Error('WebAssembly is not supported in this environment!');\n            }\n            const writeMemory = (data, offset = 0) => {\n                memoryView.set(data, offset);\n            };\n            const getMemory = () => memoryView;\n            const getExports = () => wasmInstance.exports;\n            const setMemorySize = (totalSize) => {\n                wasmInstance.exports.Hash_SetMemorySize(totalSize);\n                const arrayOffset = wasmInstance.exports.Hash_GetBuffer();\n                const memoryBuffer = wasmInstance.exports.memory.buffer;\n                memoryView = new Uint8Array(memoryBuffer, arrayOffset, totalSize);\n            };\n            const getStateSize = () => {\n                const view = new DataView(wasmInstance.exports.memory.buffer);\n                const stateSize = view.getUint32(wasmInstance.exports.STATE_SIZE, true);\n                return stateSize;\n            };\n            const loadWASMPromise = wasmMutex.dispatch(() => __awaiter(this, void 0, void 0, function* () {\n                if (!wasmModuleCache.has(binary.name)) {\n                    const asm = decodeBase64(binary.data);\n                    const promise = WebAssembly.compile(asm);\n                    wasmModuleCache.set(binary.name, promise);\n                }\n                const module = yield wasmModuleCache.get(binary.name);\n                wasmInstance = yield WebAssembly.instantiate(module, {\n                // env: {\n                //   emscripten_memcpy_big: (dest, src, num) => {\n                //     const memoryBuffer = wasmInstance.exports.memory.buffer;\n                //     const memView = new Uint8Array(memoryBuffer, 0);\n                //     memView.set(memView.subarray(src, src + num), dest);\n                //   },\n                //   print_memory: (offset, len) => {\n                //     const memoryBuffer = wasmInstance.exports.memory.buffer;\n                //     const memView = new Uint8Array(memoryBuffer, 0);\n                //     console.log('print_int32', memView.subarray(offset, offset + len));\n                //   },\n                // },\n                });\n                // wasmInstance.exports._start();\n            }));\n            const setupInterface = () => __awaiter(this, void 0, void 0, function* () {\n                if (!wasmInstance) {\n                    yield loadWASMPromise;\n                }\n                const arrayOffset = wasmInstance.exports.Hash_GetBuffer();\n                const memoryBuffer = wasmInstance.exports.memory.buffer;\n                memoryView = new Uint8Array(memoryBuffer, arrayOffset, MAX_HEAP);\n            });\n            const init = (bits = null) => {\n                initialized = true;\n                wasmInstance.exports.Hash_Init(bits);\n            };\n            const updateUInt8Array = (data) => {\n                let read = 0;\n                while (read < data.length) {\n                    const chunk = data.subarray(read, read + MAX_HEAP);\n                    read += chunk.length;\n                    memoryView.set(chunk);\n                    wasmInstance.exports.Hash_Update(chunk.length);\n                }\n            };\n            const update = (data) => {\n                if (!initialized) {\n                    throw new Error('update() called before init()');\n                }\n                const Uint8Buffer = getUInt8Buffer(data);\n                updateUInt8Array(Uint8Buffer);\n            };\n            const digestChars = new Uint8Array(hashLength * 2);\n            const digest = (outputType, padding = null) => {\n                if (!initialized) {\n                    throw new Error('digest() called before init()');\n                }\n                initialized = false;\n                wasmInstance.exports.Hash_Final(padding);\n                if (outputType === 'binary') {\n                    // the data is copied to allow GC of the original memory object\n                    return memoryView.slice(0, hashLength);\n                }\n                return getDigestHex(digestChars, memoryView, hashLength);\n            };\n            const save = () => {\n                if (!initialized) {\n                    throw new Error('save() can only be called after init() and before digest()');\n                }\n                const stateOffset = wasmInstance.exports.Hash_GetState();\n                const stateLength = getStateSize();\n                const memoryBuffer = wasmInstance.exports.memory.buffer;\n                const internalState = new Uint8Array(memoryBuffer, stateOffset, stateLength);\n                // prefix is 4 bytes from SHA1 hash of the WASM binary\n                // it is used to detect incompatible internal states between different versions of hash-wasm\n                const prefixedState = new Uint8Array(WASM_FUNC_HASH_LENGTH + stateLength);\n                writeHexToUInt8(prefixedState, binary.hash);\n                prefixedState.set(internalState, WASM_FUNC_HASH_LENGTH);\n                return prefixedState;\n            };\n            const load = (state) => {\n                if (!(state instanceof Uint8Array)) {\n                    throw new Error('load() expects an Uint8Array generated by save()');\n                }\n                const stateOffset = wasmInstance.exports.Hash_GetState();\n                const stateLength = getStateSize();\n                const overallLength = WASM_FUNC_HASH_LENGTH + stateLength;\n                const memoryBuffer = wasmInstance.exports.memory.buffer;\n                if (state.length !== overallLength) {\n                    throw new Error(`Bad state length (expected ${overallLength} bytes, got ${state.length})`);\n                }\n                if (!hexStringEqualsUInt8(binary.hash, state.subarray(0, WASM_FUNC_HASH_LENGTH))) {\n                    throw new Error('This state was written by an incompatible hash implementation');\n                }\n                const internalState = state.subarray(WASM_FUNC_HASH_LENGTH);\n                new Uint8Array(memoryBuffer, stateOffset, stateLength).set(internalState);\n                initialized = true;\n            };\n            const isDataShort = (data) => {\n                if (typeof data === 'string') {\n                    // worst case is 4 bytes / char\n                    return data.length < MAX_HEAP / 4;\n                }\n                return data.byteLength < MAX_HEAP;\n            };\n            let canSimplify = isDataShort;\n            switch (binary.name) {\n                case 'argon2':\n                case 'scrypt':\n                    canSimplify = () => true;\n                    break;\n                case 'blake2b':\n                case 'blake2s':\n                    // if there is a key at blake2 then cannot simplify\n                    canSimplify = (data, initParam) => initParam <= 512 && isDataShort(data);\n                    break;\n                case 'blake3':\n                    // if there is a key at blake3 then cannot simplify\n                    canSimplify = (data, initParam) => initParam === 0 && isDataShort(data);\n                    break;\n                case 'xxhash64': // cannot simplify\n                case 'xxhash3':\n                case 'xxhash128':\n                    canSimplify = () => false;\n                    break;\n            }\n            // shorthand for (init + update + digest) for better performance\n            const calculate = (data, initParam = null, digestParam = null) => {\n                if (!canSimplify(data, initParam)) {\n                    init(initParam);\n                    update(data);\n                    return digest('hex', digestParam);\n                }\n                const buffer = getUInt8Buffer(data);\n                memoryView.set(buffer);\n                wasmInstance.exports.Hash_Calculate(buffer.length, initParam, digestParam);\n                return getDigestHex(digestChars, memoryView, hashLength);\n            };\n            yield setupInterface();\n            return {\n                getMemory,\n                writeMemory,\n                getExports,\n                setMemorySize,\n                init,\n                update,\n                digest,\n                save,\n                load,\n                calculate,\n                hashLength,\n            };\n        });\n    }\n\n    var name$k = \"adler32\";\n    var data$k = \"AGFzbQEAAAABDANgAAF/YAAAYAF/AAMHBgABAgEAAgQFAXABAQEFBAEBAgIGDgJ/AUGAiQULfwBBgAgLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAELSGFzaF9VcGRhdGUAAgpIYXNoX0ZpbmFsAAMNSGFzaF9HZXRTdGF0ZQAEDkhhc2hfQ2FsY3VsYXRlAAUKU1RBVEVfU0laRQMBCoAIBgUAQYAJCwoAQQBBATYChAgL9gYBBn9BACgChAgiAUH//wNxIQIgAUEQdiEDAkACQCAAQQFHDQAgAkEALQCACWoiAUGPgHxqIAEgAUHw/wNLGyIBIANqIgRBEHQiBUGAgDxqIAUgBEHw/wNLGyABciEBDAELAkACQAJAAkACQCAAQRBJDQBBgAkhBiAAQbArSQ0BQYAJIQYDQEEAIQUDQCAGIAVqIgEoAgAiBEH/AXEgAmoiAiADaiACIARBCHZB/wFxaiICaiACIARBEHZB/wFxaiICaiACIARBGHZqIgJqIAIgAUEEaigCACIEQf8BcWoiAmogAiAEQQh2Qf8BcWoiAmogAiAEQRB2Qf8BcWoiAmogAiAEQRh2aiICaiACIAFBCGooAgAiBEH/AXFqIgJqIAIgBEEIdkH/AXFqIgJqIAIgBEEQdkH/AXFqIgJqIAIgBEEYdmoiBGogBCABQQxqKAIAIgFB/wFxaiIEaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgJqIQMgBUEQaiIFQbArRw0ACyADQfH/A3AhAyACQfH/A3AhAiAGQbAraiEGIABB0FRqIgBBrytLDQALIABFDQQgAEEPSw0BDAILAkAgAEUNAEEAIQEDQCACIAFBgAlqLQAAaiICIANqIQMgACABQQFqIgFHDQALCyACQY+AfGogAiACQfD/A0sbIANB8f8DcEEQdHIhAQwECwNAIAYoAgAiAUH/AXEgAmoiBCADaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgRqIAQgBkEEaigCACIBQf8BcWoiBGogBCABQQh2Qf8BcWoiBGogBCABQRB2Qf8BcWoiBGogBCABQRh2aiIEaiAEIAZBCGooAgAiAUH/AXFqIgRqIAQgAUEIdkH/AXFqIgRqIAQgAUEQdkH/AXFqIgRqIAQgAUEYdmoiBGogBCAGQQxqKAIAIgFB/wFxaiIEaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgJqIQMgBkEQaiEGIABBcGoiAEEPSw0ACyAARQ0BCwNAIAIgBi0AAGoiAiADaiEDIAZBAWohBiAAQX9qIgANAAsLIANB8f8DcCEDIAJB8f8DcCECCyACIANBEHRyIQELQQAgATYChAgLMgEBf0EAQQAoAoQIIgBBGHQgAEEIdEGAgPwHcXIgAEEIdkGA/gNxIABBGHZycjYCgAkLBQBBhAgLPABBAEEBNgKECCAAEAJBAEEAKAKECCIAQRh0IABBCHRBgID8B3FyIABBCHZBgP4DcSAAQRh2cnI2AoAJCwsVAgBBgAgLBAQAAAAAQYQICwQBAAAA\";\n    var hash$k = \"321174b4\";\n    var wasmJson$k = {\n    \tname: name$k,\n    \tdata: data$k,\n    \thash: hash$k\n    };\n\n    function lockedCreate(mutex, binary, hashLength) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const unlock = yield mutex.lock();\n            const wasm = yield WASMInterface(binary, hashLength);\n            unlock();\n            return wasm;\n        });\n    }\n\n    const mutex$l = new Mutex();\n    let wasmCache$l = null;\n    /**\n     * Calculates Adler-32 hash. The resulting 32-bit hash is stored in\n     * network byte order (big-endian).\n     *\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function adler32(data) {\n        if (wasmCache$l === null) {\n            return lockedCreate(mutex$l, wasmJson$k, 4)\n                .then((wasm) => {\n                wasmCache$l = wasm;\n                return wasmCache$l.calculate(data);\n            });\n        }\n        try {\n            const hash = wasmCache$l.calculate(data);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new Adler-32 hash instance\n     */\n    function createAdler32() {\n        return WASMInterface(wasmJson$k, 4).then((wasm) => {\n            wasm.init();\n            const obj = {\n                init: () => { wasm.init(); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 4,\n                digestSize: 4,\n            };\n            return obj;\n        });\n    }\n\n    var name$j = \"blake2b\";\n    var data$j = \"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\";\n    var hash$j = \"68afc9cf\";\n    var wasmJson$j = {\n    \tname: name$j,\n    \tdata: data$j,\n    \thash: hash$j\n    };\n\n    const mutex$k = new Mutex();\n    let wasmCache$k = null;\n    function validateBits$4(bits) {\n        if (!Number.isInteger(bits) || bits < 8 || bits > 512 || bits % 8 !== 0) {\n            return new Error('Invalid variant! Valid values: 8, 16, ..., 512');\n        }\n        return null;\n    }\n    function getInitParam$1(outputBits, keyBits) {\n        // eslint-disable-next-line no-bitwise\n        return outputBits | (keyBits << 16);\n    }\n    /**\n     * Calculates BLAKE2b hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @param bits Number of output bits, which has to be a number\n     *             divisible by 8, between 8 and 512. Defaults to 512.\n     * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes.\n     * @returns Computed hash as a hexadecimal string\n     */\n    function blake2b(data, bits = 512, key = null) {\n        if (validateBits$4(bits)) {\n            return Promise.reject(validateBits$4(bits));\n        }\n        let keyBuffer = null;\n        let initParam = bits;\n        if (key !== null) {\n            keyBuffer = getUInt8Buffer(key);\n            if (keyBuffer.length > 64) {\n                return Promise.reject(new Error('Max key length is 64 bytes'));\n            }\n            initParam = getInitParam$1(bits, keyBuffer.length);\n        }\n        const hashLength = bits / 8;\n        if (wasmCache$k === null || wasmCache$k.hashLength !== hashLength) {\n            return lockedCreate(mutex$k, wasmJson$j, hashLength)\n                .then((wasm) => {\n                wasmCache$k = wasm;\n                if (initParam > 512) {\n                    wasmCache$k.writeMemory(keyBuffer);\n                }\n                return wasmCache$k.calculate(data, initParam);\n            });\n        }\n        try {\n            if (initParam > 512) {\n                wasmCache$k.writeMemory(keyBuffer);\n            }\n            const hash = wasmCache$k.calculate(data, initParam);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new BLAKE2b hash instance\n     * @param bits Number of output bits, which has to be a number\n     *             divisible by 8, between 8 and 512. Defaults to 512.\n     * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes.\n     */\n    function createBLAKE2b(bits = 512, key = null) {\n        if (validateBits$4(bits)) {\n            return Promise.reject(validateBits$4(bits));\n        }\n        let keyBuffer = null;\n        let initParam = bits;\n        if (key !== null) {\n            keyBuffer = getUInt8Buffer(key);\n            if (keyBuffer.length > 64) {\n                return Promise.reject(new Error('Max key length is 64 bytes'));\n            }\n            initParam = getInitParam$1(bits, keyBuffer.length);\n        }\n        const outputSize = bits / 8;\n        return WASMInterface(wasmJson$j, outputSize).then((wasm) => {\n            if (initParam > 512) {\n                wasm.writeMemory(keyBuffer);\n            }\n            wasm.init(initParam);\n            const obj = {\n                init: initParam > 512\n                    ? () => {\n                        wasm.writeMemory(keyBuffer);\n                        wasm.init(initParam);\n                        return obj;\n                    }\n                    : () => {\n                        wasm.init(initParam);\n                        return obj;\n                    },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 128,\n                digestSize: outputSize,\n            };\n            return obj;\n        });\n    }\n\n    var name$i = \"argon2\";\n    var data$i = \"AGFzbQEAAAABKQVgAX8Bf2AAAX9gEH9/f39/f39/f39/f39/f38AYAR/f39/AGACf38AAwYFAAECAwQEBQFwAQEBBQYBAQKAgAIGCAF/AUGQqAQLB0EEBm1lbW9yeQIAEkhhc2hfU2V0TWVtb3J5U2l6ZQAADkhhc2hfR2V0QnVmZmVyAAEOSGFzaF9DYWxjdWxhdGUABArXMwVbAQF/QQAhAQJAIABBACgCgAhrIgBFDQACQCAAQRB2IABBgIB8cSAASWoiAEAAQX9HDQBB/wEhAQwBC0EAIQFBAEEAKQOACCAAQRB0rXw3A4AICyABQRh0QRh1C2oBAn8CQEEAKAKICCIADQBBAD8AQRB0IgA2AogIQYCAIEEAKAKACGsiAUUNAAJAIAFBEHYgAUGAgHxxIAFJaiIAQABBf0cNAEEADwtBAEEAKQOACCAAQRB0rXw3A4AIQQAoAogIIQALIAALnA8BA34gACAEKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDCAQIAwpAwCFIhBCIIkiETcDACAIIBEgCCkDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAEIBAgBCkDAIUiEEIoiSIRNwMAIAAgESAAKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAMIBAgDCkDAIUiEEIwiSIRNwMAIAggESAIKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwAgASAFKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFIhBCIIkiETcDACAJIBEgCSkDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAFIBAgBSkDAIUiEEIoiSIRNwMAIAEgESABKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIUiEEIwiSIRNwMAIAkgESAJKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAFIBAgBSkDAIVCAYk3AwAgAiAGKQMAIhAgAikDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFIhBCIIkiETcDACAKIBEgCikDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAGIBAgBikDAIUiEEIoiSIRNwMAIAIgESACKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIUiEEIwiSIRNwMAIAogESAKKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAGIBAgBikDAIVCAYk3AwAgAyAHKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFIhBCIIkiETcDACALIBEgCykDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAHIBAgBykDAIUiEEIoiSIRNwMAIAMgESADKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIUiEEIwiSIRNwMAIAsgESALKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgACAFKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFIhBCIIkiETcDACAKIBEgCikDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAFIBAgBSkDAIUiEEIoiSIRNwMAIAAgESAAKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIUiEEIwiSIRNwMAIAogESAKKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAFIBAgBSkDAIVCAYk3AwAgASAGKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDCAQIAwpAwCFIhBCIIkiETcDACALIBEgCykDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAGIBAgBikDAIUiEEIoiSIRNwMAIAEgESABKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAMIBAgDCkDAIUiEEIwiSIRNwMAIAsgESALKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAGIBAgBikDAIVCAYk3AwAgAiAHKQMAIhAgAikDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFIhBCIIkiETcDACAIIBEgCCkDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAHIBAgBykDAIUiEEIoiSIRNwMAIAIgESACKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIUiEEIwiSIRNwMAIAggESAIKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgAyAEKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFIhBCIIkiETcDACAJIBEgCSkDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAEIBAgBCkDAIUiEEIoiSIRNwMAIAMgESADKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIUiEEIwiSIRNwMAIAkgESAJKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwALhxoBAX9BACEEQQAgAikDACABKQMAhTcDkAhBACACKQMIIAEpAwiFNwOYCEEAIAIpAxAgASkDEIU3A6AIQQAgAikDGCABKQMYhTcDqAhBACACKQMgIAEpAyCFNwOwCEEAIAIpAyggASkDKIU3A7gIQQAgAikDMCABKQMwhTcDwAhBACACKQM4IAEpAziFNwPICEEAIAIpA0AgASkDQIU3A9AIQQAgAikDSCABKQNIhTcD2AhBACACKQNQIAEpA1CFNwPgCEEAIAIpA1ggASkDWIU3A+gIQQAgAikDYCABKQNghTcD8AhBACACKQNoIAEpA2iFNwP4CEEAIAIpA3AgASkDcIU3A4AJQQAgAikDeCABKQN4hTcDiAlBACACKQOAASABKQOAAYU3A5AJQQAgAikDiAEgASkDiAGFNwOYCUEAIAIpA5ABIAEpA5ABhTcDoAlBACACKQOYASABKQOYAYU3A6gJQQAgAikDoAEgASkDoAGFNwOwCUEAIAIpA6gBIAEpA6gBhTcDuAlB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\";\n    var hash$i = \"59aa4fb4\";\n    var wasmJson$i = {\n    \tname: name$i,\n    \tdata: data$i,\n    \thash: hash$i\n    };\n\n    function encodeResult(salt, options, res) {\n        const parameters = [\n            `m=${options.memorySize}`,\n            `t=${options.iterations}`,\n            `p=${options.parallelism}`,\n        ].join(',');\n        return `$argon2${options.hashType}$v=19$${parameters}$${encodeBase64(salt, false)}$${encodeBase64(res, false)}`;\n    }\n    const uint32View = new DataView(new ArrayBuffer(4));\n    function int32LE(x) {\n        uint32View.setInt32(0, x, true);\n        return new Uint8Array(uint32View.buffer);\n    }\n    function hashFunc(blake512, buf, len) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (len <= 64) {\n                const blake = yield createBLAKE2b(len * 8);\n                blake.update(int32LE(len));\n                blake.update(buf);\n                return blake.digest('binary');\n            }\n            const r = Math.ceil(len / 32) - 2;\n            const ret = new Uint8Array(len);\n            blake512.init();\n            blake512.update(int32LE(len));\n            blake512.update(buf);\n            let vp = blake512.digest('binary');\n            ret.set(vp.subarray(0, 32), 0);\n            for (let i = 1; i < r; i++) {\n                blake512.init();\n                blake512.update(vp);\n                vp = blake512.digest('binary');\n                ret.set(vp.subarray(0, 32), i * 32);\n            }\n            const partialBytesNeeded = len - 32 * r;\n            let blakeSmall;\n            if (partialBytesNeeded === 64) {\n                blakeSmall = blake512;\n                blakeSmall.init();\n            }\n            else {\n                blakeSmall = yield createBLAKE2b(partialBytesNeeded * 8);\n            }\n            blakeSmall.update(vp);\n            vp = blakeSmall.digest('binary');\n            ret.set(vp.subarray(0, partialBytesNeeded), r * 32);\n            return ret;\n        });\n    }\n    function getHashType(type) {\n        switch (type) {\n            case 'd':\n                return 0;\n            case 'i':\n                return 1;\n            default:\n                return 2;\n        }\n    }\n    function argon2Internal(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { parallelism, iterations, hashLength } = options;\n            const password = getUInt8Buffer(options.password);\n            const salt = getUInt8Buffer(options.salt);\n            const version = 0x13;\n            const hashType = getHashType(options.hashType);\n            const { memorySize } = options; // in KB\n            const [argon2Interface, blake512] = yield Promise.all([\n                WASMInterface(wasmJson$i, 1024),\n                createBLAKE2b(512),\n            ]);\n            // last block is for storing the init vector\n            argon2Interface.setMemorySize(memorySize * 1024 + 1024);\n            const initVector = new Uint8Array(24);\n            const initVectorView = new DataView(initVector.buffer);\n            initVectorView.setInt32(0, parallelism, true);\n            initVectorView.setInt32(4, hashLength, true);\n            initVectorView.setInt32(8, memorySize, true);\n            initVectorView.setInt32(12, iterations, true);\n            initVectorView.setInt32(16, version, true);\n            initVectorView.setInt32(20, hashType, true);\n            argon2Interface.writeMemory(initVector, memorySize * 1024);\n            blake512.init();\n            blake512.update(initVector);\n            blake512.update(int32LE(password.length));\n            blake512.update(password);\n            blake512.update(int32LE(salt.length));\n            blake512.update(salt);\n            blake512.update(int32LE(0)); // key length + key\n            blake512.update(int32LE(0)); // associatedData length + associatedData\n            const segments = Math.floor(memorySize / (parallelism * 4)); // length of each lane\n            const lanes = segments * 4;\n            const param = new Uint8Array(72);\n            const H0 = blake512.digest('binary');\n            param.set(H0);\n            for (let lane = 0; lane < parallelism; lane++) {\n                param.set(int32LE(0), 64);\n                param.set(int32LE(lane), 68);\n                let position = lane * lanes;\n                let chunk = yield hashFunc(blake512, param, 1024);\n                argon2Interface.writeMemory(chunk, position * 1024);\n                position += 1;\n                param.set(int32LE(1), 64);\n                chunk = yield hashFunc(blake512, param, 1024);\n                argon2Interface.writeMemory(chunk, position * 1024);\n            }\n            const C = new Uint8Array(1024);\n            writeHexToUInt8(C, argon2Interface.calculate(new Uint8Array([]), memorySize));\n            const res = yield hashFunc(blake512, C, hashLength);\n            if (options.outputType === 'hex') {\n                const digestChars = new Uint8Array(hashLength * 2);\n                return getDigestHex(digestChars, res, hashLength);\n            }\n            if (options.outputType === 'encoded') {\n                return encodeResult(salt, options, res);\n            }\n            // return binary format\n            return res;\n        });\n    }\n    const validateOptions$3 = (options) => {\n        if (!options || typeof options !== 'object') {\n            throw new Error('Invalid options parameter. It requires an object.');\n        }\n        if (!options.password) {\n            throw new Error('Password must be specified');\n        }\n        options.password = getUInt8Buffer(options.password);\n        if (options.password.length < 1) {\n            throw new Error('Password must be specified');\n        }\n        if (!options.salt) {\n            throw new Error('Salt must be specified');\n        }\n        options.salt = getUInt8Buffer(options.salt);\n        if (options.salt.length < 8) {\n            throw new Error('Salt should be at least 8 bytes long');\n        }\n        if (!Number.isInteger(options.iterations) || options.iterations < 1) {\n            throw new Error('Iterations should be a positive number');\n        }\n        if (!Number.isInteger(options.parallelism) || options.parallelism < 1) {\n            throw new Error('Parallelism should be a positive number');\n        }\n        if (!Number.isInteger(options.hashLength) || options.hashLength < 4) {\n            throw new Error('Hash length should be at least 4 bytes.');\n        }\n        if (!Number.isInteger(options.memorySize)) {\n            throw new Error('Memory size should be specified.');\n        }\n        if (options.memorySize < 8 * options.parallelism) {\n            throw new Error('Memory size should be at least 8 * parallelism.');\n        }\n        if (options.outputType === undefined) {\n            options.outputType = 'hex';\n        }\n        if (!['hex', 'binary', 'encoded'].includes(options.outputType)) {\n            throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`);\n        }\n    };\n    /**\n     * Calculates hash using the argon2i password-hashing function\n     * @returns Computed hash\n     */\n    function argon2i(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            validateOptions$3(options);\n            return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'i' }));\n        });\n    }\n    /**\n     * Calculates hash using the argon2id password-hashing function\n     * @returns Computed hash\n     */\n    function argon2id(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            validateOptions$3(options);\n            return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'id' }));\n        });\n    }\n    /**\n     * Calculates hash using the argon2d password-hashing function\n     * @returns Computed hash\n     */\n    function argon2d(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            validateOptions$3(options);\n            return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'd' }));\n        });\n    }\n    const getHashParameters = (password, encoded) => {\n        const regex = /^\\$argon2(id|i|d)\\$v=([0-9]+)\\$((?:[mtp]=[0-9]+,){2}[mtp]=[0-9]+)\\$([A-Za-z0-9+/]+)\\$([A-Za-z0-9+/]+)$/;\n        const match = encoded.match(regex);\n        if (!match) {\n            throw new Error('Invalid hash');\n        }\n        const [, hashType, version, parameters, salt, hash] = match;\n        if (version !== '19') {\n            throw new Error(`Unsupported version: ${version}`);\n        }\n        const parsedParameters = {};\n        const paramMap = { m: 'memorySize', p: 'parallelism', t: 'iterations' };\n        parameters.split(',').forEach((x) => {\n            const [n, v] = x.split('=');\n            parsedParameters[paramMap[n]] = parseInt(v, 10);\n        });\n        return Object.assign(Object.assign({}, parsedParameters), { password, hashType: hashType, salt: decodeBase64(salt), hashLength: getDecodeBase64Length(hash), outputType: 'encoded' });\n    };\n    const validateVerifyOptions$1 = (options) => {\n        if (!options || typeof options !== 'object') {\n            throw new Error('Invalid options parameter. It requires an object.');\n        }\n        if (options.hash === undefined || typeof options.hash !== 'string') {\n            throw new Error('Hash should be specified');\n        }\n    };\n    /**\n     * Verifies password using the argon2 password-hashing function\n     * @returns True if the encoded hash matches the password\n     */\n    function argon2Verify(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            validateVerifyOptions$1(options);\n            const params = getHashParameters(options.password, options.hash);\n            validateOptions$3(params);\n            const hashStart = options.hash.lastIndexOf('$') + 1;\n            const result = yield argon2Internal(params);\n            return result.substring(hashStart) === options.hash.substring(hashStart);\n        });\n    }\n\n    var name$h = \"blake2s\";\n    var data$h = \"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\";\n    var hash$h = \"0f570f49\";\n    var wasmJson$h = {\n    \tname: name$h,\n    \tdata: data$h,\n    \thash: hash$h\n    };\n\n    const mutex$j = new Mutex();\n    let wasmCache$j = null;\n    function validateBits$3(bits) {\n        if (!Number.isInteger(bits) || bits < 8 || bits > 256 || bits % 8 !== 0) {\n            return new Error('Invalid variant! Valid values: 8, 16, ..., 256');\n        }\n        return null;\n    }\n    function getInitParam(outputBits, keyBits) {\n        // eslint-disable-next-line no-bitwise\n        return outputBits | (keyBits << 16);\n    }\n    /**\n     * Calculates BLAKE2s hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @param bits Number of output bits, which has to be a number\n     *             divisible by 8, between 8 and 256. Defaults to 256.\n     * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes.\n     * @returns Computed hash as a hexadecimal string\n     */\n    function blake2s(data, bits = 256, key = null) {\n        if (validateBits$3(bits)) {\n            return Promise.reject(validateBits$3(bits));\n        }\n        let keyBuffer = null;\n        let initParam = bits;\n        if (key !== null) {\n            keyBuffer = getUInt8Buffer(key);\n            if (keyBuffer.length > 32) {\n                return Promise.reject(new Error('Max key length is 32 bytes'));\n            }\n            initParam = getInitParam(bits, keyBuffer.length);\n        }\n        const hashLength = bits / 8;\n        if (wasmCache$j === null || wasmCache$j.hashLength !== hashLength) {\n            return lockedCreate(mutex$j, wasmJson$h, hashLength)\n                .then((wasm) => {\n                wasmCache$j = wasm;\n                if (initParam > 512) {\n                    wasmCache$j.writeMemory(keyBuffer);\n                }\n                return wasmCache$j.calculate(data, initParam);\n            });\n        }\n        try {\n            if (initParam > 512) {\n                wasmCache$j.writeMemory(keyBuffer);\n            }\n            const hash = wasmCache$j.calculate(data, initParam);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new BLAKE2s hash instance\n     * @param bits Number of output bits, which has to be a number\n     *             divisible by 8, between 8 and 256. Defaults to 256.\n     * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes.\n     */\n    function createBLAKE2s(bits = 256, key = null) {\n        if (validateBits$3(bits)) {\n            return Promise.reject(validateBits$3(bits));\n        }\n        let keyBuffer = null;\n        let initParam = bits;\n        if (key !== null) {\n            keyBuffer = getUInt8Buffer(key);\n            if (keyBuffer.length > 32) {\n                return Promise.reject(new Error('Max key length is 32 bytes'));\n            }\n            initParam = getInitParam(bits, keyBuffer.length);\n        }\n        const outputSize = bits / 8;\n        return WASMInterface(wasmJson$h, outputSize).then((wasm) => {\n            if (initParam > 512) {\n                wasm.writeMemory(keyBuffer);\n            }\n            wasm.init(initParam);\n            const obj = {\n                init: initParam > 512\n                    ? () => {\n                        wasm.writeMemory(keyBuffer);\n                        wasm.init(initParam);\n                        return obj;\n                    }\n                    : () => {\n                        wasm.init(initParam);\n                        return obj;\n                    },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 64,\n                digestSize: outputSize,\n            };\n            return obj;\n        });\n    }\n\n    var name$g = \"blake3\";\n    var data$g = \"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FWogFCAfc0EZdyIVaiIUIBhqIB0gFHNBEHciFCAlaiIYIBVzQRR3IhVqIhkgFHNBGHciFCAYaiIYaiIdICBzQRR3Ih9qIiA2AgAgACAXICQgHHNBGHciHCAeaiIeIBtzQRl3IhtqIAFqIgEgFmogASAUc0EQdyIBICtqIhQgG3NBFHciFmoiFyABc0EYdyIBNgI4IAAgGCAVc0EZdyIVIC5qIANqIgMgE2ogAyAcc0EQdyIDIAIgImoiAmoiIiAVc0EUdyIVaiITNgIEIAAgASAUaiIBNgIkIAAgAiAFc0EZdyICIBlqICFqIgUgGmogBSAnc0EQdyIFIB5qIhQgAnNBFHciAmoiGjYCCCAAICAgEnNBGHciEiAdaiIhNgIoIAAgEyADc0EYdyIDNgIwIAAgASAWc0EZdzYCECAAIBogBXNBGHciATYCNCAAICEgH3NBGXc2AhQgACABIBRqIgE2AiAgACADICJqIgUgFXNBGXc2AhggACASNgI8IAAgASACc0EZdzYCHCAAIBc2AgwgACAFNgIsC7cDAwR/A34FfyMAQdABayIBJAACQCAAe6ciAkEALQCQigEiA08NACABQShqIQQDQCABQQApA4CJASIANwMAIAFBACkDiIkBIgU3AwggAUEAKQOQiQEiBjcDECABQQApA5iJASIHNwMYIAEgA0EFdCIDQdGJAWoiCCkDADcDKCABIANB2YkBaiIJKQMANwMwIAEgA0HhiQFqIgopAwA3AzggASADQemJAWoiCykDADcDQEEALQCKigEhDCABQcAAOgBoIAEgDEEEciIMOgBpIAFCADcDICABIANB8YkBaikDADcDSCABIANB+YkBaikDADcDUCABIANBgYoBaikDADcDWCABIANBiYoBaikDADcDYCABIAc3A4gBIAEgBjcDgAEgASAFNwN4IAEgADcDcCABQZABaiABQfAAaiAEQcAAQgAgDBADIAsgASkDyAEgASkDqAGFNwMAIAogASkDwAEgASkDoAGFNwMAIAkgASkDuAEgASkDmAGFNwMAIAggASkDsAEgASkDkAGFNwMAQQBBAC0AkIoBQX9qIgM6AJCKASACIANB/wFxIgNJDQALCyABQdABaiQAC/oLBAR/BH4GfwF+IwBB0AJrIgUkAAJAAkAgAUGACEsNAEEAIQYgASEHQQAhCAJAIAFB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IQwDQCABQbABaiABIAsgCUH/AXEgCCACQQhyQf8BcRADIAEgASkD2AEiDSABKQO4AYU3A3ggASABKQPgASIOIAEpA8ABhTcDgAEgASAGIAEpA+gBIg+FNwOoASABIAUgDoU3A6ABIAEgBCANhTcDmAEgASADIAEpA9ABIg2FNwOQASABIA8gASkDyAGFNwOIASAAQcAAIABBwABJGyIQQX9qIQkgASANIAEpA7ABhSINNwNwIA2nIREgCiEHIAwhAgJAA0AgAiAROgAAIAlFDQEgCUF/aiEJIAJBAWohAiAHLQAAIREgB0EBaiEHDAALCyAAIBBrIgBFDQIgDCAQaiEMIAhCAXwhCCABKQMIIQQgASkDACEDIAEpAxghBiABKQMQIQUgAS0AaSECIAEtAGghCQwACwsCQAJAAkBBAC0AiYoBIglBBnRBAEEALQCIigEiDGtGDQAgAUHgAGpBACkDgIoBNwMAIAFB2ABqQQApA/iJATcDACABQdAAakEAKQPwiQE3AwAgAUHIAGpBACkD6IkBNwMAIAFBwABqQQApA+CJATcDACABQThqQQApA9iJATcDACABQTBqQQApA9CJATcDACABQQApA8iJATcDKCABQQApA8CJASIINwMgIAFBACkDuIkBIg03AxggAUEAKQOwiQEiDjcDECABQQApA6iJASIPNwMIIAFBACkDoIkBIgM3AwBBAC0AiooBIQcgAUHuAGogAUG0AWovAQA7AQAgASABKAGwATYBaiABIAw6AGggASAHIAlFckECciIJOgBpDAELIAFB4ABqIAJBfmoiAkEFdCIJQcmKAWopAwA3AwAgAUHYAGogCUHBigFqKQMANwMAIAFB0ABqIAlBuYoBaikDADcDACABQcgAaiAJQbGKAWopAwA3AwBBwAAhDCABQcAAaiAJQamKAWopAwA3AwAgAUE4aiAJQaGKAWopAwA3AwAgAUEwaiAJQZmKAWopAwA3AwBCACEIIAFCADcDICABQQApA5iJASINNwMYIAFBACkDkIkBIg43AxAgAUEAKQOIiQEiDzcDCCABQQApA4CJASIDNwMAIAEgCUGRigFqKQMANwMoQQAtAIqKASEJIAFB7gBqIAFBsAFqQQRqLwEAOwEAIAEgASgBsAE2AWogASAJQQRyIgk6AGkgAUHAADoAaCACRQ0BCyACQX9qIgdBBXQiEUGRigFqKQMAIQQgEUGZigFqKQMAIQUgEUGhigFqKQMAIQYgEUGpigFqKQMAIRIgASANNwOIASABIA43A4ABIAEgDzcDeCABIAM3A3AgAUGwAWogAUHwAGogAUEoaiIQIAwgCCAJQf8BcRADIAFBwAA6AGggASASNwNAIAEgBjcDOCABIAU3AzAgASAENwMoIAFCADcDICABQQApA5iJASIINwMYIAFBACkDkIkBIg03AxAgAUEAKQOIiQEiDjcDCCABQQApA4CJASIPNwMAIAFBAC0AiooBQQRyIgk6AGkgASABKQPoASABKQPIAYU3A2AgASABKQPgASABKQPAAYU3A1ggASABKQPYASABKQO4AYU3A1AgASABKQPQASABKQOwAYU3A0ggAUHuAGogAUGwAWpBBGoiDC8BADsBACABIAEoAbABNgFqIAdFDQAgAUHqAGohESACQQV0QemJAWohAgNAIAJBaGopAwAhAyACQXBqKQMAIQQgAkF4aikDACEFIAIpAwAhBiABIAg3A4gBIAEgDTcDgAEgASAONwN4IAEgDzcDcCABQbABaiABQfAAaiAQQcAAQgAgCUH/AXEQAyABQcAAOgBoIAEgBjcDQCABIAU3AzggASAENwMwIAEgAzcDKCABQgA3AyAgAUEAKQOYiQEiCDcDGCABQQApA5CJASINNwMQIAFBACkDiIkBIg43AwggAUEAKQOAiQEiDzcDACABQQAtAIqKAUEEciIJOgBpIAEgASkD6AEgASkDyAGFNwNgIAEgASkD4AEgASkDwAGFNwNYIAEgASkD2AEgASkDuAGFNwNQIAEgASkD0AEgASkDsAGFNwNIIBFBBGogDC8BADsBACARIAEoAbABNgEAIAJBYGohAiAHQX9qIgcNAAsLIAFB8ABqQQFyIQogAUEoaiELQgAhCEGACSEMQcAAIQIDQCABQbABaiABIAsgAkH/AXEgCCAJQQhyQf8BcRADIAEgASkD2AEiDSABKQO4AYU3A3ggASABKQPgASIOIAEpA8ABhTcDgAEgASABKQPoASIPIAEpA8gBhTcDiAEgASABKQMAIAEpA9ABIgOFNwOQASABIA0gASkDCIU3A5gBIAEgDiABKQMQhTcDoAEgASADIAEpA7ABhSINNwNwIAEgDyABKQMYhTcDqAEgAEHAACAAQcAASRsiEEF/aiECIA2nIREgCiEHIAwhCQJAA0AgCSAROgAAIAJFDQEgAkF/aiECIAlBAWohCSAHLQAAIREgB0EBaiEHDAALCyAAIBBrIgBFDQEgDCAQaiEMIAhCAXwhCCABLQBpIQkgAS0AaCECDAALCyABQfABaiQAC6MCAQR+AkACQCAAQSBGDQBCq7OP/JGjs/DbACEBQv+kuYjFkdqCm38hAkLy5rvjo6f9p6V/IQNC58yn0NbQ67O7fyEEQQAhAAwBC0EAKQOYCSEBQQApA5AJIQJBACkDiAkhA0EAKQOACSEEQRAhAAtBACAAOgCKigFBAEIANwOAigFBAEIANwP4iQFBAEIANwPwiQFBAEIANwPoiQFBAEIANwPgiQFBAEIANwPYiQFBAEIANwPQiQFBAEIANwPIiQFBAEIANwPAiQFBACABNwO4iQFBACACNwOwiQFBACADNwOoiQFBACAENwOgiQFBACABNwOYiQFBACACNwOQiQFBACADNwOIiQFBACAENwOAiQFBAEEAOgCQigFBAEEAOwGIigELBgAgABABCwYAIAAQBgsGAEGAiQELqwIBBH4CQAJAIAFBIEYNAEKrs4/8kaOz8NsAIQNC/6S5iMWR2oKbfyEEQvLmu+Ojp/2npX8hBULnzKfQ1tDrs7t/IQZBACEBDAELQQApA5gJIQNBACkDkAkhBEEAKQOICSEFQQApA4AJIQZBECEBC0EAIAE6AIqKAUEAQgA3A4CKAUEAQgA3A/iJAUEAQgA3A/CJAUEAQgA3A+iJAUEAQgA3A+CJAUEAQgA3A9iJAUEAQgA3A9CJAUEAQgA3A8iJAUEAQgA3A8CJAUEAIAM3A7iJAUEAIAQ3A7CJAUEAIAU3A6iJAUEAIAY3A6CJAUEAIAM3A5iJAUEAIAQ3A5CJAUEAIAU3A4iJAUEAIAY3A4CJAUEAQQA6AJCKAUEAQQA7AYiKASAAEAEgAhAGCwsLAQBBgAgLBHgHAAA=\";\n    var hash$g = \"e8655383\";\n    var wasmJson$g = {\n    \tname: name$g,\n    \tdata: data$g,\n    \thash: hash$g\n    };\n\n    const mutex$i = new Mutex();\n    let wasmCache$i = null;\n    function validateBits$2(bits) {\n        if (!Number.isInteger(bits) || bits < 8 || bits % 8 !== 0) {\n            return new Error('Invalid variant! Valid values: 8, 16, ...');\n        }\n        return null;\n    }\n    /**\n     * Calculates BLAKE3 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @param bits Number of output bits, which has to be a number\n     *             divisible by 8. Defaults to 256.\n     * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes.\n     * @returns Computed hash as a hexadecimal string\n     */\n    function blake3(data, bits = 256, key = null) {\n        if (validateBits$2(bits)) {\n            return Promise.reject(validateBits$2(bits));\n        }\n        let keyBuffer = null;\n        let initParam = 0; // key is empty by default\n        if (key !== null) {\n            keyBuffer = getUInt8Buffer(key);\n            if (keyBuffer.length !== 32) {\n                return Promise.reject(new Error('Key length must be exactly 32 bytes'));\n            }\n            initParam = 32;\n        }\n        const hashLength = bits / 8;\n        const digestParam = hashLength;\n        if (wasmCache$i === null || wasmCache$i.hashLength !== hashLength) {\n            return lockedCreate(mutex$i, wasmJson$g, hashLength)\n                .then((wasm) => {\n                wasmCache$i = wasm;\n                if (initParam === 32) {\n                    wasmCache$i.writeMemory(keyBuffer);\n                }\n                return wasmCache$i.calculate(data, initParam, digestParam);\n            });\n        }\n        try {\n            if (initParam === 32) {\n                wasmCache$i.writeMemory(keyBuffer);\n            }\n            const hash = wasmCache$i.calculate(data, initParam, digestParam);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new BLAKE3 hash instance\n     * @param bits Number of output bits, which has to be a number\n     *             divisible by 8. Defaults to 256.\n     * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes.\n     */\n    function createBLAKE3(bits = 256, key = null) {\n        if (validateBits$2(bits)) {\n            return Promise.reject(validateBits$2(bits));\n        }\n        let keyBuffer = null;\n        let initParam = 0; // key is empty by default\n        if (key !== null) {\n            keyBuffer = getUInt8Buffer(key);\n            if (keyBuffer.length !== 32) {\n                return Promise.reject(new Error('Key length must be exactly 32 bytes'));\n            }\n            initParam = 32;\n        }\n        const outputSize = bits / 8;\n        const digestParam = outputSize;\n        return WASMInterface(wasmJson$g, outputSize).then((wasm) => {\n            if (initParam === 32) {\n                wasm.writeMemory(keyBuffer);\n            }\n            wasm.init(initParam);\n            const obj = {\n                init: initParam === 32\n                    ? () => {\n                        wasm.writeMemory(keyBuffer);\n                        wasm.init(initParam);\n                        return obj;\n                    }\n                    : () => {\n                        wasm.init(initParam);\n                        return obj;\n                    },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType, digestParam),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 64,\n                digestSize: outputSize,\n            };\n            return obj;\n        });\n    }\n\n    var name$f = \"crc32\";\n    var data$f = \"AGFzbQEAAAABEQRgAAF/YAF/AGAAAGACf38AAwgHAAEBAQIAAwQFAXABAQEFBAEBAgIGDgJ/AUGQyQULfwBBgAgLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAILSGFzaF9VcGRhdGUAAwpIYXNoX0ZpbmFsAAQNSGFzaF9HZXRTdGF0ZQAFDkhhc2hfQ2FsY3VsYXRlAAYKU1RBVEVfU0laRQMBCq0HBwUAQYAJC8MDAQN/QYCJASEBQQAhAgNAIAFBAEEAQQBBAEEAQQBBAEEAIAJBAXFrIABxIAJBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzNgIAIAFBBGohASACQQFqIgJBgAJHDQALQQAhAANAIABBhJEBaiAAQYSJAWooAgAiAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhJkBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEoQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYSpAWogAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhLEBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEuQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYTBAWogAkH/AXFBAnRBgIkBaigCACACQQh2czYCACAAQQRqIgBB/AdHDQALCycAAkBBACgCgMkBIABGDQAgABABQQAgADYCgMkBC0EAQQA2AoTJAQuhAgEDf0EAKAKEyQFBf3MhAUGACSECAkAgAEEISQ0AQYAJIQIDQCACQQRqKAIAIgNBDnZB/AdxQYCRAWooAgAgA0EWdkH8B3FBgIkBaigCAHMgA0EGdkH8B3FBgJkBaigCAHMgA0H/AXFBAnRBgKEBaigCAHMgAigCACABcyIBQRZ2QfwHcUGAqQFqKAIAcyABQQ52QfwHcUGAsQFqKAIAcyABQQZ2QfwHcUGAuQFqKAIAcyABQf8BcUECdEGAwQFqKAIAcyEBIAJBCGohAiAAQXhqIgBBB0sNAAsLAkAgAEUNAANAIAFB/wFxIAItAABzQQJ0QYCJAWooAgAgAUEIdnMhASACQQFqIQIgAEF/aiIADQALC0EAIAFBf3M2AoTJAQszAQF/QQBBACgChMkBIgBBGHQgAEEIdEGAgPwHcXIgAEEIdkGA/gNxIABBGHZycjYCgAkLBgBBhMkBC1oAAkBBACgCgMkBIAFGDQAgARABQQAgATYCgMkBC0EAQQA2AoTJASAAEANBAEEAKAKEyQEiAUEYdCABQQh0QYCA/AdxciABQQh2QYD+A3EgAUEYdnJyNgKACQsLCwEAQYAICwQEAAAA\";\n    var hash$f = \"749723dc\";\n    var wasmJson$f = {\n    \tname: name$f,\n    \tdata: data$f,\n    \thash: hash$f\n    };\n\n    const mutex$h = new Mutex();\n    let wasmCache$h = null;\n    /**\n     * Calculates CRC-32 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function crc32(data) {\n        if (wasmCache$h === null) {\n            return lockedCreate(mutex$h, wasmJson$f, 4)\n                .then((wasm) => {\n                wasmCache$h = wasm;\n                return wasmCache$h.calculate(data, 0xEDB88320);\n            });\n        }\n        try {\n            const hash = wasmCache$h.calculate(data, 0xEDB88320);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new CRC-32 hash instance\n     */\n    function createCRC32() {\n        return WASMInterface(wasmJson$f, 4).then((wasm) => {\n            wasm.init(0xEDB88320);\n            const obj = {\n                init: () => { wasm.init(0xEDB88320); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 4,\n                digestSize: 4,\n            };\n            return obj;\n        });\n    }\n\n    const mutex$g = new Mutex();\n    let wasmCache$g = null;\n    /**\n     * Calculates CRC-32C hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function crc32c(data) {\n        if (wasmCache$g === null) {\n            return lockedCreate(mutex$g, wasmJson$f, 4)\n                .then((wasm) => {\n                wasmCache$g = wasm;\n                return wasmCache$g.calculate(data, 0x82F63B78);\n            });\n        }\n        try {\n            const hash = wasmCache$g.calculate(data, 0x82F63B78);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new CRC-32C hash instance\n     */\n    function createCRC32C() {\n        return WASMInterface(wasmJson$f, 4).then((wasm) => {\n            wasm.init(0x82F63B78);\n            const obj = {\n                init: () => { wasm.init(0x82F63B78); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 4,\n                digestSize: 4,\n            };\n            return obj;\n        });\n    }\n\n    var name$e = \"md4\";\n    var data$e = \"AGFzbQEAAAABEgRgAAF/YAAAYAF/AGACf38BfwMIBwABAgMBAAIEBQFwAQEBBQQBAQICBg4CfwFBoIoFC38AQYAICwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAABC0hhc2hfVXBkYXRlAAIKSGFzaF9GaW5hbAAEDUhhc2hfR2V0U3RhdGUABQ5IYXNoX0NhbGN1bGF0ZQAGClNUQVRFX1NJWkUDAQqXEQcFAEGACQstAEEAQv6568XpjpWZEDcCkIkBQQBCgcaUupbx6uZvNwKIiQFBAEIANwKAiQEL6AIBA39BAEEAKAKAiQEiASAAakH/////AXEiAjYCgIkBQQAoAoSJASEDAkAgAiABTw0AQQAgA0EBaiIDNgKEiQELQQAgAyAAQR12ajYChIkBAkACQAJAAkACQAJAIAFBP3EiAw0AQYAJIQIMAQtBwAAgA2siAiAASw0BIANBGGohA0EAIQEDQCADIAFqQYCJAWogAUGACWotAAA6AAAgAyABQQFqIgFqQdgARw0AC0GYiQFBwAAQAxogACACayEAIAJBgAlqIQILIABBwABPDQEgACEDDAILIABFDQJBACEBIANBmIkBakEALQCACToAACAAQQFGDQIgA0GZiQFqIQMgAEF/aiECA0AgAyABaiABQYEJai0AADoAACACIAFBAWoiAUcNAAwDCwsgAEE/cSEDIAIgAEFAcRADIQILIANFDQBBACEBA0AgAUGYiQFqIAIgAWotAAA6AAAgAyABQQFqIgFHDQALCwuYCwEXf0EAKAKUiQEhAkEAKAKQiQEhA0EAKAKMiQEhBEEAKAKIiQEhBQNAIABBHGooAgAiBiAAQRRqKAIAIgcgAEEYaigCACIIIABBEGooAgAiCSAAQSxqKAIAIgogAEEoaigCACILIABBJGooAgAiDCAAQSBqKAIAIg0gCyAIIABBCGooAgAiDiADaiAAQQRqKAIAIg8gAmogBCADIAJzcSACcyAFaiAAKAIAIhBqQQN3IhEgBCADc3EgA3NqQQd3IhIgESAEc3EgBHNqQQt3IhNqIBIgB2ogESAJaiAAQQxqKAIAIhQgBGogEyASIBFzcSARc2pBE3ciESATIBJzcSASc2pBA3ciEiARIBNzcSATc2pBB3ciEyASIBFzcSARc2pBC3ciFWogEyAMaiASIA1qIBEgBmogFSATIBJzcSASc2pBE3ciESAVIBNzcSATc2pBA3ciEiARIBVzcSAVc2pBB3ciEyASIBFzcSARc2pBC3ciFSAAQThqKAIAIhZqIBMgAEE0aigCACIXaiASIABBMGooAgAiGGogESAKaiAVIBMgEnNxIBJzakETdyISIBUgE3NxIBNzakEDdyITIBIgFXNxIBVzakEHdyIVIBMgEnNxIBJzakELdyIRaiAJIBVqIBAgE2ogEiAAQTxqKAIAIglqIBEgFSATc3EgE3NqQRN3IhIgESAVcnEgESAVcXJqQZnzidQFakEDdyITIBIgEXJxIBIgEXFyakGZ84nUBWpBBXciESATIBJycSATIBJxcmpBmfOJ1AVqQQl3IhVqIAcgEWogDyATaiAYIBJqIBUgESATcnEgESATcXJqQZnzidQFakENdyISIBUgEXJxIBUgEXFyakGZ84nUBWpBA3ciESASIBVycSASIBVxcmpBmfOJ1AVqQQV3IhMgESAScnEgESAScXJqQZnzidQFakEJdyIVaiAIIBNqIA4gEWogFyASaiAVIBMgEXJxIBMgEXFyakGZ84nUBWpBDXciESAVIBNycSAVIBNxcmpBmfOJ1AVqQQN3IhIgESAVcnEgESAVcXJqQZnzidQFakEFdyITIBIgEXJxIBIgEXFyakGZ84nUBWpBCXciFWogBiATaiAUIBJqIBYgEWogFSATIBJycSATIBJxcmpBmfOJ1AVqQQ13IhEgFSATcnEgFSATcXJqQZnzidQFakEDdyISIBEgFXJxIBEgFXFyakGZ84nUBWpBBXciEyASIBFycSASIBFxcmpBmfOJ1AVqQQl3IhVqIBAgEmogCSARaiAVIBMgEnJxIBMgEnFyakGZ84nUBWpBDXciBiAVcyISIBNzakGh1+f2BmpBA3ciESAGcyANIBNqIBIgEXNqQaHX5/YGakEJdyISc2pBodfn9gZqQQt3IhNqIA4gEWogEyAScyAYIAZqIBIgEXMgE3NqQaHX5/YGakEPdyIRc2pBodfn9gZqQQN3IhUgEXMgCyASaiARIBNzIBVzakGh1+f2BmpBCXciEnNqQaHX5/YGakELdyITaiAPIBVqIBMgEnMgFiARaiASIBVzIBNzakGh1+f2BmpBD3ciEXNqQaHX5/YGakEDdyIVIBFzIAwgEmogESATcyAVc2pBodfn9gZqQQl3IhJzakGh1+f2BmpBC3ciE2ogFCAVaiATIBJzIBcgEWogEiAVcyATc2pBodfn9gZqQQ93IhFzakGh1+f2BmpBA3ciFSARcyAKIBJqIBEgE3MgFXNqQaHX5/YGakEJdyISc2pBodfn9gZqQQt3IhMgA2ohAyAJIBFqIBIgFXMgE3NqQaHX5/YGakEPdyAEaiEEIBIgAmohAiAVIAVqIQUgAEHAAGohACABQUBqIgENAAtBACACNgKUiQFBACADNgKQiQFBACAENgKMiQFBACAFNgKIiQEgAAuhAgEDf0EAKAKAiQEiAEE/cSIBQZiJAWpBgAE6AAACQAJAAkAgAUE/cyICQQdLDQACQCACRQ0AIAFBmYkBaiEAA0AgAEEAOgAAIABBAWohACACQX9qIgINAAsLQcAAIQJBmIkBQcAAEAMaQQAhAAwBCyACQQhGDQEgAUEBaiEACyAAQY+JAWohAQNAIAEgAmpBADoAACACQXdqIQAgAkF/aiECIABBAEoNAAtBACgCgIkBIQALQQAgAEEVdjoA04kBQQAgAEENdjoA0okBQQAgAEEFdjoA0YkBQQAgAEEDdCICOgDQiQFBACACNgKAiQFBAEEAKAKEiQE2AtSJAUGYiQFBwAAQAxpBAEEAKQKIiQE3A4AJQQBBACkCkIkBNwOICQsGAEGAiQELMwBBAEL+uevF6Y6VmRA3ApCJAUEAQoHGlLqW8ermbzcCiIkBQQBCADcCgIkBIAAQAhAECwsLAQBBgAgLBJgAAAA=\";\n    var hash$e = \"1bf01052\";\n    var wasmJson$e = {\n    \tname: name$e,\n    \tdata: data$e,\n    \thash: hash$e\n    };\n\n    const mutex$f = new Mutex();\n    let wasmCache$f = null;\n    /**\n     * Calculates MD4 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function md4(data) {\n        if (wasmCache$f === null) {\n            return lockedCreate(mutex$f, wasmJson$e, 16)\n                .then((wasm) => {\n                wasmCache$f = wasm;\n                return wasmCache$f.calculate(data);\n            });\n        }\n        try {\n            const hash = wasmCache$f.calculate(data);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new MD4 hash instance\n     */\n    function createMD4() {\n        return WASMInterface(wasmJson$e, 16).then((wasm) => {\n            wasm.init();\n            const obj = {\n                init: () => { wasm.init(); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 64,\n                digestSize: 16,\n            };\n            return obj;\n        });\n    }\n\n    var name$d = \"md5\";\n    var data$d = \"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\";\n    var hash$d = \"9b0fac7d\";\n    var wasmJson$d = {\n    \tname: name$d,\n    \tdata: data$d,\n    \thash: hash$d\n    };\n\n    const mutex$e = new Mutex();\n    let wasmCache$e = null;\n    /**\n     * Calculates MD5 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function md5(data) {\n        if (wasmCache$e === null) {\n            return lockedCreate(mutex$e, wasmJson$d, 16)\n                .then((wasm) => {\n                wasmCache$e = wasm;\n                return wasmCache$e.calculate(data);\n            });\n        }\n        try {\n            const hash = wasmCache$e.calculate(data);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new MD5 hash instance\n     */\n    function createMD5() {\n        return WASMInterface(wasmJson$d, 16).then((wasm) => {\n            wasm.init();\n            const obj = {\n                init: () => { wasm.init(); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 64,\n                digestSize: 16,\n            };\n            return obj;\n        });\n    }\n\n    var name$c = \"sha1\";\n    var data$c = \"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\";\n    var hash$c = \"40d92e5d\";\n    var wasmJson$c = {\n    \tname: name$c,\n    \tdata: data$c,\n    \thash: hash$c\n    };\n\n    const mutex$d = new Mutex();\n    let wasmCache$d = null;\n    /**\n     * Calculates SHA-1 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function sha1(data) {\n        if (wasmCache$d === null) {\n            return lockedCreate(mutex$d, wasmJson$c, 20)\n                .then((wasm) => {\n                wasmCache$d = wasm;\n                return wasmCache$d.calculate(data);\n            });\n        }\n        try {\n            const hash = wasmCache$d.calculate(data);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new SHA-1 hash instance\n     */\n    function createSHA1() {\n        return WASMInterface(wasmJson$c, 20).then((wasm) => {\n            wasm.init();\n            const obj = {\n                init: () => { wasm.init(); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 64,\n                digestSize: 20,\n            };\n            return obj;\n        });\n    }\n\n    var name$b = \"sha3\";\n    var data$b = \"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\";\n    var hash$b = \"ec266d91\";\n    var wasmJson$b = {\n    \tname: name$b,\n    \tdata: data$b,\n    \thash: hash$b\n    };\n\n    const mutex$c = new Mutex();\n    let wasmCache$c = null;\n    function validateBits$1(bits) {\n        if (![224, 256, 384, 512].includes(bits)) {\n            return new Error('Invalid variant! Valid values: 224, 256, 384, 512');\n        }\n        return null;\n    }\n    /**\n     * Calculates SHA-3 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @param bits Number of output bits. Valid values: 224, 256, 384, 512\n     * @returns Computed hash as a hexadecimal string\n     */\n    function sha3(data, bits = 512) {\n        if (validateBits$1(bits)) {\n            return Promise.reject(validateBits$1(bits));\n        }\n        const hashLength = bits / 8;\n        if (wasmCache$c === null || wasmCache$c.hashLength !== hashLength) {\n            return lockedCreate(mutex$c, wasmJson$b, hashLength)\n                .then((wasm) => {\n                wasmCache$c = wasm;\n                return wasmCache$c.calculate(data, bits, 0x06);\n            });\n        }\n        try {\n            const hash = wasmCache$c.calculate(data, bits, 0x06);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new SHA-3 hash instance\n     * @param bits Number of output bits. Valid values: 224, 256, 384, 512\n     */\n    function createSHA3(bits = 512) {\n        if (validateBits$1(bits)) {\n            return Promise.reject(validateBits$1(bits));\n        }\n        const outputSize = bits / 8;\n        return WASMInterface(wasmJson$b, outputSize).then((wasm) => {\n            wasm.init(bits);\n            const obj = {\n                init: () => { wasm.init(bits); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType, 0x06),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 200 - 2 * outputSize,\n                digestSize: outputSize,\n            };\n            return obj;\n        });\n    }\n\n    const mutex$b = new Mutex();\n    let wasmCache$b = null;\n    function validateBits(bits) {\n        if (![224, 256, 384, 512].includes(bits)) {\n            return new Error('Invalid variant! Valid values: 224, 256, 384, 512');\n        }\n        return null;\n    }\n    /**\n     * Calculates Keccak hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @param bits Number of output bits. Valid values: 224, 256, 384, 512\n     * @returns Computed hash as a hexadecimal string\n     */\n    function keccak(data, bits = 512) {\n        if (validateBits(bits)) {\n            return Promise.reject(validateBits(bits));\n        }\n        const hashLength = bits / 8;\n        if (wasmCache$b === null || wasmCache$b.hashLength !== hashLength) {\n            return lockedCreate(mutex$b, wasmJson$b, hashLength)\n                .then((wasm) => {\n                wasmCache$b = wasm;\n                return wasmCache$b.calculate(data, bits, 0x01);\n            });\n        }\n        try {\n            const hash = wasmCache$b.calculate(data, bits, 0x01);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new Keccak hash instance\n     * @param bits Number of output bits. Valid values: 224, 256, 384, 512\n     */\n    function createKeccak(bits = 512) {\n        if (validateBits(bits)) {\n            return Promise.reject(validateBits(bits));\n        }\n        const outputSize = bits / 8;\n        return WASMInterface(wasmJson$b, outputSize).then((wasm) => {\n            wasm.init(bits);\n            const obj = {\n                init: () => { wasm.init(bits); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType, 0x01),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 200 - 2 * outputSize,\n                digestSize: outputSize,\n            };\n            return obj;\n        });\n    }\n\n    var name$a = \"sha256\";\n    var data$a = \"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\";\n    var hash$a = \"817d957e\";\n    var wasmJson$a = {\n    \tname: name$a,\n    \tdata: data$a,\n    \thash: hash$a\n    };\n\n    const mutex$a = new Mutex();\n    let wasmCache$a = null;\n    /**\n     * Calculates SHA-2 (SHA-224) hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function sha224(data) {\n        if (wasmCache$a === null) {\n            return lockedCreate(mutex$a, wasmJson$a, 28)\n                .then((wasm) => {\n                wasmCache$a = wasm;\n                return wasmCache$a.calculate(data, 224);\n            });\n        }\n        try {\n            const hash = wasmCache$a.calculate(data, 224);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new SHA-2 (SHA-224) hash instance\n     */\n    function createSHA224() {\n        return WASMInterface(wasmJson$a, 28).then((wasm) => {\n            wasm.init(224);\n            const obj = {\n                init: () => { wasm.init(224); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 64,\n                digestSize: 28,\n            };\n            return obj;\n        });\n    }\n\n    const mutex$9 = new Mutex();\n    let wasmCache$9 = null;\n    /**\n     * Calculates SHA-2 (SHA-256) hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function sha256(data) {\n        if (wasmCache$9 === null) {\n            return lockedCreate(mutex$9, wasmJson$a, 32)\n                .then((wasm) => {\n                wasmCache$9 = wasm;\n                return wasmCache$9.calculate(data, 256);\n            });\n        }\n        try {\n            const hash = wasmCache$9.calculate(data, 256);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new SHA-2 (SHA-256) hash instance\n     */\n    function createSHA256() {\n        return WASMInterface(wasmJson$a, 32).then((wasm) => {\n            wasm.init(256);\n            const obj = {\n                init: () => { wasm.init(256); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 64,\n                digestSize: 32,\n            };\n            return obj;\n        });\n    }\n\n    var name$9 = \"sha512\";\n    var data$9 = \"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\";\n    var hash$9 = \"a5d1ca7c\";\n    var wasmJson$9 = {\n    \tname: name$9,\n    \tdata: data$9,\n    \thash: hash$9\n    };\n\n    const mutex$8 = new Mutex();\n    let wasmCache$8 = null;\n    /**\n     * Calculates SHA-2 (SHA-384) hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function sha384(data) {\n        if (wasmCache$8 === null) {\n            return lockedCreate(mutex$8, wasmJson$9, 48)\n                .then((wasm) => {\n                wasmCache$8 = wasm;\n                return wasmCache$8.calculate(data, 384);\n            });\n        }\n        try {\n            const hash = wasmCache$8.calculate(data, 384);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new SHA-2 (SHA-384) hash instance\n     */\n    function createSHA384() {\n        return WASMInterface(wasmJson$9, 48).then((wasm) => {\n            wasm.init(384);\n            const obj = {\n                init: () => { wasm.init(384); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 128,\n                digestSize: 48,\n            };\n            return obj;\n        });\n    }\n\n    const mutex$7 = new Mutex();\n    let wasmCache$7 = null;\n    /**\n     * Calculates SHA-2 (SHA-512) hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function sha512(data) {\n        if (wasmCache$7 === null) {\n            return lockedCreate(mutex$7, wasmJson$9, 64)\n                .then((wasm) => {\n                wasmCache$7 = wasm;\n                return wasmCache$7.calculate(data, 512);\n            });\n        }\n        try {\n            const hash = wasmCache$7.calculate(data, 512);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new SHA-2 (SHA-512) hash instance\n     */\n    function createSHA512() {\n        return WASMInterface(wasmJson$9, 64).then((wasm) => {\n            wasm.init(512);\n            const obj = {\n                init: () => { wasm.init(512); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 128,\n                digestSize: 64,\n            };\n            return obj;\n        });\n    }\n\n    var name$8 = \"xxhash32\";\n    var data$8 = \"AGFzbQEAAAABEQRgAAF/YAF/AGAAAGACf38AAwcGAAEBAgADBAUBcAEBAQUEAQECAgYOAn8BQbCJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwAAw1IYXNoX0dldFN0YXRlAAQOSGFzaF9DYWxjdWxhdGUABQpTVEFURV9TSVpFAwEKswkGBQBBgAkLTQBBAEIANwOoiQFBACAANgKIiQFBACAAQc+Moo4GajYCjIkBQQAgAEH3lK+veGo2AoSJAUEAIABBqIiNoQJqNgKAiQFBAEEANgKgiQELswUBBn8CQCAARQ0AQQBBACkDqIkBIACtfDcDqIkBAkBBACgCoIkBIgEgAGpBD0sNAEEAIAFBAWo2AqCJASABQZCJAWpBAC0AgAk6AAAgAEEBRg0BQQEhAgNAQQBBACgCoIkBIgFBAWo2AqCJASABQZCJAWogAkGACWotAAA6AAAgACACQQFqIgJHDQAMAgsLIABB8AhqIQMCQAJAIAENAEEAKAKMiQEhAUEAKAKIiQEhBEEAKAKEiQEhBUEAKAKAiQEhBkGACSECDAELQYAJIQICQCABQQ9LDQBBgAkhAgNAIAItAAAhBEEAIAFBAWo2AqCJASABQZCJAWogBDoAACACQQFqIQJBACgCoIkBIgFBEEkNAAsLQQBBACgCkIkBQfeUr694bEEAKAKAiQFqQQ13QbHz3fF5bCIGNgKAiQFBAEEAKAKUiQFB95Svr3hsQQAoAoSJAWpBDXdBsfPd8XlsIgU2AoSJAUEAQQAoApiJAUH3lK+veGxBACgCiIkBakENd0Gx893xeWwiBDYCiIkBQQBBACgCnIkBQfeUr694bEEAKAKMiQFqQQ13QbHz3fF5bCIBNgKMiQELIABBgAlqIQACQCACIANLDQADQCACKAIAQfeUr694bCAGakENd0Gx893xeWwhBiACQQxqKAIAQfeUr694bCABakENd0Gx893xeWwhASACQQhqKAIAQfeUr694bCAEakENd0Gx893xeWwhBCACQQRqKAIAQfeUr694bCAFakENd0Gx893xeWwhBSACQRBqIgIgA00NAAsLQQAgATYCjIkBQQAgBDYCiIkBQQAgBTYChIkBQQAgBjYCgIkBQQAgACACayIBNgKgiQEgAUUNAEEAIQEDQCABQZCJAWogAiABai0AADoAACABQQFqIgFBACgCoIkBSQ0ACwsLzAICAX4Gf0EAKQOoiQEiAKchAQJAAkAgAEIQVA0AQQAoAoSJAUEHd0EAKAKAiQFBAXdqQQAoAoiJAUEMd2pBACgCjIkBQRJ3aiECDAELQQAoAoiJAUGxz9myAWohAgsgAiABaiECQZCJASEBQQAoAqCJASIDQZCJAWohBAJAIANBBEgNAEGQiQEhBQNAIAUoAgBBvdzKlXxsIAJqQRF3Qa/W074CbCECIAVBCGohBiAFQQRqIgEhBSAGIARNDQALCwJAIAEgBEYNACADQZCJAWohBQNAIAEtAABBsc/ZsgFsIAJqQQt3QbHz3fF5bCECIAUgAUEBaiIBRw0ACwtBACACQQ92IAJzQfeUr694bCIBQQ12IAFzQb3cypV8bCIBQRB2IAFzIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycq03A4AJCwYAQYCJAQtTAEEAQgA3A6iJAUEAIAE2AoiJAUEAIAFBz4yijgZqNgKMiQFBACABQfeUr694ajYChIkBQQAgAUGoiI2hAmo2AoCJAUEAQQA2AqCJASAAEAIQAwsLCwEAQYAICwQwAAAA\";\n    var hash$8 = \"5b6a5062\";\n    var wasmJson$8 = {\n    \tname: name$8,\n    \tdata: data$8,\n    \thash: hash$8\n    };\n\n    const mutex$6 = new Mutex();\n    let wasmCache$6 = null;\n    function validateSeed$3(seed) {\n        if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {\n            return new Error('Seed must be a valid 32-bit long unsigned integer.');\n        }\n        return null;\n    }\n    /**\n     * Calculates xxHash32 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @param seed Number used to initialize the internal state of the algorithm (defaults to 0)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function xxhash32(data, seed = 0) {\n        if (validateSeed$3(seed)) {\n            return Promise.reject(validateSeed$3(seed));\n        }\n        if (wasmCache$6 === null) {\n            return lockedCreate(mutex$6, wasmJson$8, 4)\n                .then((wasm) => {\n                wasmCache$6 = wasm;\n                return wasmCache$6.calculate(data, seed);\n            });\n        }\n        try {\n            const hash = wasmCache$6.calculate(data, seed);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new xxHash32 hash instance\n     * @param data Input data (string, Buffer or TypedArray)\n     * @param seed Number used to initialize the internal state of the algorithm (defaults to 0)\n     */\n    function createXXHash32(seed = 0) {\n        if (validateSeed$3(seed)) {\n            return Promise.reject(validateSeed$3(seed));\n        }\n        return WASMInterface(wasmJson$8, 4).then((wasm) => {\n            wasm.init(seed);\n            const obj = {\n                init: () => { wasm.init(seed); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 16,\n                digestSize: 4,\n            };\n            return obj;\n        });\n    }\n\n    var name$7 = \"xxhash64\";\n    var data$7 = \"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\";\n    var hash$7 = \"bc315b2a\";\n    var wasmJson$7 = {\n    \tname: name$7,\n    \tdata: data$7,\n    \thash: hash$7\n    };\n\n    const mutex$5 = new Mutex();\n    let wasmCache$5 = null;\n    const seedBuffer$2 = new ArrayBuffer(8);\n    function validateSeed$2(seed) {\n        if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {\n            return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');\n        }\n        return null;\n    }\n    function writeSeed$2(arr, low, high) {\n        // write in little-endian format\n        const buffer = new DataView(arr);\n        buffer.setUint32(0, low, true);\n        buffer.setUint32(4, high, true);\n    }\n    /**\n     * Calculates xxHash64 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @param seedLow Lower 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     * @param seedHigh Higher 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function xxhash64(data, seedLow = 0, seedHigh = 0) {\n        if (validateSeed$2(seedLow)) {\n            return Promise.reject(validateSeed$2(seedLow));\n        }\n        if (validateSeed$2(seedHigh)) {\n            return Promise.reject(validateSeed$2(seedHigh));\n        }\n        if (wasmCache$5 === null) {\n            return lockedCreate(mutex$5, wasmJson$7, 8)\n                .then((wasm) => {\n                wasmCache$5 = wasm;\n                writeSeed$2(seedBuffer$2, seedLow, seedHigh);\n                wasmCache$5.writeMemory(new Uint8Array(seedBuffer$2));\n                return wasmCache$5.calculate(data);\n            });\n        }\n        try {\n            writeSeed$2(seedBuffer$2, seedLow, seedHigh);\n            wasmCache$5.writeMemory(new Uint8Array(seedBuffer$2));\n            const hash = wasmCache$5.calculate(data);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new xxHash64 hash instance\n     * @param seedLow Lower 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     * @param seedHigh Higher 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     */\n    function createXXHash64(seedLow = 0, seedHigh = 0) {\n        if (validateSeed$2(seedLow)) {\n            return Promise.reject(validateSeed$2(seedLow));\n        }\n        if (validateSeed$2(seedHigh)) {\n            return Promise.reject(validateSeed$2(seedHigh));\n        }\n        return WASMInterface(wasmJson$7, 8).then((wasm) => {\n            const instanceBuffer = new ArrayBuffer(8);\n            writeSeed$2(instanceBuffer, seedLow, seedHigh);\n            wasm.writeMemory(new Uint8Array(instanceBuffer));\n            wasm.init();\n            const obj = {\n                init: () => {\n                    wasm.writeMemory(new Uint8Array(instanceBuffer));\n                    wasm.init();\n                    return obj;\n                },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 32,\n                digestSize: 8,\n            };\n            return obj;\n        });\n    }\n\n    var name$6 = \"xxhash3\";\n    var data$6 = \"AGFzbQEAAAABJAZgAAF/YAR/f39/AGAHf39/f39/fwBgA39/fgF+YAAAYAF/AAMMCwABAgMDAwQFBAAEBAUBcAEBAQUEAQECAgYOAn8BQcCOBQt/AEHACQsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQABgtIYXNoX1VwZGF0ZQAHCkhhc2hfRmluYWwACA1IYXNoX0dldFN0YXRlAAkOSGFzaF9DYWxjdWxhdGUACgpTVEFURV9TSVpFAwEK+joLBQBBgAoL7wMBEH4CQCADRQ0AIAFBOGohASACQThqIQIgACkDMCEEIAApAzghBSAAKQMgIQYgACkDKCEHIAApAxAhCCAAKQMYIQkgACkDACEKIAApAwghCwNAIAcgAUFoaikDACIMfCACQXBqKQMAIAFBcGopAwAiDYUiB0IgiCAHQv////8Pg358IQcgCSABQVhqKQMAIg58IAJBYGopAwAgAUFgaikDACIPhSIJQiCIIAlC/////w+DfnwhCSALIAFBSGopAwAiEHwgAkFQaikDACABQVBqKQMAIhGFIgtCIIggC0L/////D4N+fCELIAJBeGopAwAgAUF4aikDACIShSITQiCIIBNC/////w+DfiAEfCABKQMAIhN8IQQgAkFoaikDACAMhSIMQiCIIAxC/////w+DfiAGfCANfCEGIAJBWGopAwAgDoUiDEIgiCAMQv////8Pg34gCHwgD3whCCACQUhqKQMAIBCFIgxCIIggDEL/////D4N+IAp8IBF8IQogBSASfCACKQMAIBOFIgVCIIggBUL/////D4N+fCEFIAFBwABqIQEgAkEIaiECIANBf2oiAw0ACyAAIAk3AxggACAKNwMAIAAgCzcDCCAAIAc3AyggACAINwMQIAAgBTcDOCAAIAY3AyAgACAENwMwCwveAgIBfwF+AkAgAiABKAIAIgdrIgIgBEsNACAAIAMgBSAHQQN0aiACEAEgACAAKQMAIgggBSAGaiIHKQMAhSAIQi+IhUKx893xCX43AwAgACAAKQMIIgggBykDCIUgCEIviIVCsfPd8Ql+NwMIIAAgACkDECIIIAcpAxCFIAhCL4iFQrHz3fEJfjcDECAAIAApAxgiCCAHKQMYhSAIQi+IhUKx893xCX43AxggACAAKQMgIgggBykDIIUgCEIviIVCsfPd8Ql+NwMgIAAgACkDKCIIIAcpAyiFIAhCL4iFQrHz3fEJfjcDKCAAIAApAzAiCCAHKQMwhSAIQi+IhUKx893xCX43AzAgACAAKQM4IgggBykDOIUgCEIviIVCsfPd8Ql+NwM4IAAgAyACQQZ0aiAFIAQgAmsiBxABIAEgBzYCAA8LIAAgAyAFIAdBA3RqIAQQASABIAcgBGo2AgAL3QQBBH4CQCAAQQlJDQBBACkDgIwBIAEpAyAgASkDGIUgAnyFIgNCOIYgA0IohkKAgICAgIDA/wCDhCADQhiGQoCAgICA4D+DIANCCIZCgICAgPAfg4SEIANCCIhCgICA+A+DIANCGIhCgID8B4OEIANCKIhCgP4DgyADQjiIhISEIACtfCAAQfiLAWopAwAgASkDMCABKQMohSACfYUiAnwgAkL/////D4MiBCADQiCIIgV+IgZC/////w+DIAJCIIgiAiADQv////8PgyIDfnwgBCADfiIDQiCIfCIEQiCGIANC/////w+DhCAGQiCIIAIgBX58IARCIIh8hXwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4UPCwJAIABBBEkNACABKQMQIAEpAwiFIAKnIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycq1CIIYgAoV9QQA1AoCMAUIghiAAQfyLAWo1AgCEhSIDQhiJIAOFIANCMYmFQqW+4/TRjIfZn39+IgNCI4ggAK18IAOFQqW+4/TRjIfZn39+IgNCHIggA4UPCwJAIABFDQAgASgCBCABKAIAc60gAnwiA0EALQCAjAFBEHQgAEEIdHIgAEEBdkGAjAFqLQAAQRh0ciAAQf+LAWotAAByrYUgA0IhiIVCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhQ8LIAEpAzggAoUgASkDQIUiA0IhiCADhULP1tO+0ser2UJ+IgNCHYggA4VC+fPd8Zn2masWfiIDQiCIIAOFC94IAQZ+IACtQoeVr6+Ytt6bnn9+IQMCQCAAQSFJDQACQCAAQcEASQ0AAkAgAEHhAEkNACABKQNoIAJ9QQApA7iMAYUiBEL/////D4MiBSABKQNgIAJ8QQApA7CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDeCACfSAAQciLAWopAwCFIgNC/////w+DIgQgASkDcCACfCAAQcCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQNIIAJ9QQApA6iMAYUiBEL/////D4MiBSABKQNAIAJ8QQApA6CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDWCACfSAAQdiLAWopAwCFIgNC/////w+DIgQgASkDUCACfCAAQdCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQMoIAJ9QQApA5iMAYUiBEL/////D4MiBSABKQMgIAJ8QQApA5CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDOCACfSAAQeiLAWopAwCFIgNC/////w+DIgQgASkDMCACfCAAQeCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQMIIAJ9QQApA4iMAYUiBEL/////D4MiBSABKQMAIAJ8QQApA4CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDGCACfSAAQfiLAWopAwCFIgNC/////w+DIgQgASkDECACfCAAQfCLAWopAwCFIgJCIIgiBX4iBkL/////D4MgA0IgiCIDIAJC/////w+DIgJ+fCAEIAJ+IgJCIIh8IgRCIIYgAkL/////D4OEIAZCIIggAyAFfnwgBEIgiHyFfCICQiWIIAKFQvnz3fGZ8pmrFn4iAkIgiCAChQuICwQBfwV+An8BfkEAIQMgASkDeCACfUEAKQP4jAGFIgRC/////w+DIgUgASkDcCACfEEAKQPwjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpA2ggAn1BACkD6IwBhSIEQv////8PgyIFIAEpA2AgAnxBACkD4IwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQNYIAJ9QQApA9iMAYUiBEL/////D4MiBSABKQNQIAJ8QQApA9CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDSCACfUEAKQPIjAGFIgRC/////w+DIgUgASkDQCACfEEAKQPAjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAzggAn1BACkDuIwBhSIEQv////8PgyIFIAEpAzAgAnxBACkDsIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQMoIAJ9QQApA6iMAYUiBEL/////D4MiBSABKQMgIAJ8QQApA6CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDGCACfUEAKQOYjAGFIgRC/////w+DIgUgASkDECACfEEAKQOQjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAwggAn1BACkDiIwBhSIEQv////8PgyIFIAEpAwAgAnxBACkDgIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSAArUKHla+vmLbem55/fnx8fHx8fHx8IgRCJYggBIVC+fPd8ZnymasWfiIEQiCIIASFIQQgAEEQbSEJAkAgAEGQAUgNACAJQQkgCUEJShtBeGohCQNAIAEgA2oiCkELaikDACACfSADQYiNAWopAwCFIgVC/////w+DIgYgCkEDaikDACACfCADQYCNAWopAwCFIgdCIIgiCH4iC0L/////D4MgBUIgiCIFIAdC/////w+DIgd+fCAGIAd+IgZCIIh8IgdCIIYgBkL/////D4OEIAtCIIggBSAIfnwgB0IgiHyFIAR8IQQgA0EQaiEDIAlBf2oiCQ0ACwsgASkDfyACfSAAQfiLAWopAwCFIgVC/////w+DIgYgASkDdyACfCAAQfCLAWopAwCFIgJCIIgiB34iCEL/////D4MgBUIgiCIFIAJC/////w+DIgJ+fCAGIAJ+IgJCIIh8IgZCIIYgAkL/////D4OEIAhCIIggBSAHfnwgBkIgiHyFIAR8IgJCJYggAoVC+fPd8ZnymasWfiICQiCIIAKFC98FAgF+AX8CQAJAQQApA4AKIgBQRQ0AQYAIIQFCACEADAELAkBBACkDoI4BIABSDQBBACEBDAELQQAhAUEAQq+v79e895Kg/gAgAH03A/iLAUEAIABCxZbr+djShYIofDcD8IsBQQBCj/Hjja2P9JhOIAB9NwPoiwFBACAAQqus+MXV79HQfHw3A+CLAUEAQtOt1LKShbW0nn8gAH03A9iLAUEAIABCl5r0jvWWvO3JAHw3A9CLAUEAQsWDgv2v/8SxayAAfTcDyIsBQQAgAELqi7OdyOb09UN8NwPAiwFBAELIv/rLnJveueQAIAB9NwO4iwFBACAAQoqjgd/Ume2sMXw3A7CLAUEAQvm57738+MKnHSAAfTcDqIsBQQAgAEKo9dv7s5ynmj98NwOgiwFBAEK4sry3lNW31lggAH03A5iLAUEAIABC8cihuqm0w/zOAHw3A5CLAUEAQoihl9u445SXo38gAH03A4iLAUEAIABCvNDI2pvysIBLfDcDgIsBQQBC4OvAtJ7QjpPMACAAfTcD+IoBQQAgAEK4kZii9/6Qko5/fDcD8IoBQQBCgrXB7sf5v7khIAB9NwPoigFBACAAQsvzmffEmfDy+AB8NwPgigFBAELygJGl+vbssx8gAH03A9iKAUEAIABC3qm3y76Q5MtbfDcD0IoBQQBC/IKE5PK+yNYcIAB9NwPIigFBACAAQrj9s8uzhOmlvn98NwPAigELQQBCADcDkI4BQQBCADcDiI4BQQBCADcDgI4BQQAgATYCsI4BQQAgADcDoI4BQQBCsfPd8Qk3A7iKAUEAQsXP2bLx5brqJzcDsIoBQQBC95Svrwg3A6iKAUEAQuPcypX8zvL1hX83A6CKAUEAQvnz3fGZ9pmrFjcDmIoBQQBCz9bTvtLHq9lCNwOQigFBAEKHla+vmLbem55/NwOIigFBAEK93MqVDDcDgIoBQQBCkICAgIAQNwOYjgELwAUBBX9BAEEAKQOQjgEgAK18NwOQjgECQAJAQQAoAoCOASIBIABqIgJBgAJLDQAgAUGAjAFqIQNBgAohBAJAAkAgAEEITw0AIAAhAQwBCyAAIQEDQCADIAQpAwA3AwAgA0EIaiEDIARBCGohBCABQXhqIgFBB0sNAAsLIAFFDQEDQCADIAQtAAA6AAAgA0EBaiEDIARBAWohBCABQX9qIgENAAtBACgCgI4BIABqIQIMAQtBgAohAyAAQYAKaiECQQAoArCOASIEQcCKASAEGyEAAkAgAUUNACABQYCMAWohA0GACiEEAkACQEGAAiABayIFQQhPDQAgBSEBDAELIAUhAQNAIAMgBCkDADcDACADQQhqIQMgBEEIaiEEIAFBeGoiAUEHSw0ACwsCQCABRQ0AA0AgAyAELQAAOgAAIANBAWohAyAEQQFqIQQgAUF/aiIBDQALC0GAigFBiI4BQQAoApiOAUGAjAFBBCAAQQAoApyOARACQQBBADYCgI4BIAVBgApqIQMLAkAgA0GAAmogAk8NACACQYB+aiEEA0BBgIoBQYiOAUEAKAKYjgEgA0EEIABBACgCnI4BEAIgA0GAAmoiAyAESQ0AC0EAIANBQGopAwA3A8CNAUEAIANBSGopAwA3A8iNAUEAIANBUGopAwA3A9CNAUEAIANBWGopAwA3A9iNAUEAIANBYGopAwA3A+CNAUEAIANBaGopAwA3A+iNAUEAIANBcGopAwA3A/CNAUEAIANBeGopAwA3A/iNAQtBgIwBIQQCQAJAIAIgA2siAkEITw0AIAIhAQwBCyACIQEDQCAEIAMpAwA3AwAgBEEIaiEEIANBCGohAyABQXhqIgFBB0sNAAsLIAFFDQADQCAEIAMtAAA6AAAgBEEBaiEEIANBAWohAyABQX9qIgENAAsLQQAgAjYCgI4BC6oQBQR/AX4Cfwp+An8jACIAIQEgAEGAAWtBQHEiAiQAQQAoArCOASIAQcCKASAAGyEDAkACQEEAKQOQjgEiBELxAVQNACACQQApA4CKATcDACACQQApA4iKATcDCCACQQApA5CKATcDECACQQApA5iKATcDGCACQQApA6CKATcDICACQQApA6iKATcDKCACQQApA7CKATcDMCACQQApA7iKATcDOAJAAkBBACgCgI4BIgVBwABJDQAgAkEAKAKIjgE2AkAgAiACQcAAakEAKAKYjgFBgIwBIAVBf2pBBnYgA0EAKAKcjgEQAiACIAIpAwhBACgCgI4BIgBBwIsBaikDACIEfCADQQAoApyOAWoiBkEBaikDACAAQciLAWopAwAiB4UiCEIgiCAIQv////8Pg358Igk3AwggAiACKQMYIABB0IsBaikDACIIfCAGQRFqKQMAIABB2IsBaikDACIKhSILQiCIIAtC/////w+DfnwiDDcDGCACIAcgBCAGQXlqKQMAhSIEQiCIIARC/////w+DfiACKQMAfHwiDTcDACACIAogCCAGQQlqKQMAhSIEQiCIIARC/////w+DfiACKQMQfHwiDjcDECAGQRlqKQMAIQQgAikDICEHIAIgAikDKCAAQeCLAWopAwAiCHwgBkEhaikDACAAQeiLAWopAwAiCoUiC0IgiCALQv////8Pg358Ig83AyggAiAKIAcgBCAIhSIEQiCIIARC/////w+Dfnx8IhA3AyAgAiACKQM4IABB8IsBaikDACIEfCAGQTFqKQMAIABB+IsBaikDACIHhSIIQiCIIAhC/////w+Dfnw3AzggByAEIAZBKWopAwCFIgRCIIggBEL/////D4N+IAIpAzB8fCEEDAELQcAAIAVrIRECQAJAAkAgBUE4TQ0AQYCOASARayEGIAJBwABqIQUgESEADAELQQAhEiARIQADQCACQcAAaiASaiAFIBJqQcCNAWopAwA3AwAgEkEIaiESIABBeGoiAEEHSw0ACyAFIBJqIgZBwABGDQEgBkHAjQFqIQYgAkHAAGogEmohBQsDQCAFIAYtAAA6AAAgBUEBaiEFIAZBAWohBiAAQX9qIgANAAtBACgCgI4BIQULIAJBwABqIBFqIQZBgIwBIQACQCAFQQhJDQBBgIwBIQADQCAGIAApAwA3AwAgBkEIaiEGIABBCGohACAFQXhqIgVBB0sNAAsLAkAgBUUNAANAIAYgAC0AADoAACAGQQFqIQYgAEEBaiEAIAVBf2oiBQ0ACwsgAiACKQMIIAIpA0AiBHwgA0EAKAKcjgFqIgBBAWopAwAgAikDSCIHhSIIQiCIIAhC/////w+DfnwiCTcDCCACIAIpAxggAikDUCIIfCAAQRFqKQMAIAIpA1giCoUiC0IgiCALQv////8Pg358Igw3AxggAiAHIAQgAEF5aikDAIUiBEIgiCAEQv////8Pg34gAikDAHx8Ig03AwAgAiAKIAggAEEJaikDAIUiBEIgiCAEQv////8Pg34gAikDEHx8Ig43AxAgAEEZaikDACEEIAIpAyAhByACIAIpAyggAikDYCIIfCAAQSFqKQMAIAIpA2giCoUiC0IgiCALQv////8Pg358Ig83AyggAiAKIAcgBCAIhSIEQiCIIARC/////w+Dfnx8IhA3AyAgAiACKQM4IAIpA3AiBHwgAEExaikDACACKQN4IgeFIghCIIggCEL/////D4N+fDcDOCAHIAQgAEEpaikDAIUiBEIgiCAEQv////8Pg34gAikDMHx8IQQLIAIgBDcDMCADKQNDIAIpAziFIgdC/////w+DIgggAykDOyAEhSIEQiCIIgp+IgtC/////w+DIAdCIIgiByAEQv////8PgyIEfnwgCCAEfiIEQiCIfCIIQiCGIARC/////w+DhCALQiCIIAcgCn58IAhCIIh8hSADKQMzIA+FIgRC/////w+DIgcgAykDKyAQhSIIQiCIIgp+IgtC/////w+DIARCIIgiBCAIQv////8PgyIIfnwgByAIfiIHQiCIfCIIQiCGIAdC/////w+DhCALQiCIIAQgCn58IAhCIIh8hSADKQMjIAyFIgRC/////w+DIgcgAykDGyAOhSIIQiCIIgp+IgtC/////w+DIARCIIgiBCAIQv////8PgyIIfnwgByAIfiIHQiCIfCIIQiCGIAdC/////w+DhCALQiCIIAQgCn58IAhCIIh8hSADKQMTIAmFIgRC/////w+DIgcgAykDCyANhSIIQiCIIgp+IgtC/////w+DIARCIIgiBCAIQv////8PgyIIfnwgByAIfiIHQiCIfCIIQiCGIAdC/////w+DhCALQiCIIAQgCn58IAhCIIh8hUEAKQOQjgFCh5Wvr5i23puef358fHx8IgRCJYggBIVC+fPd8ZnymasWfiIEQiCIIASFIQQMAQsgBKchAAJAQQApA6COASIEUA0AAkAgAEEQSw0AIABBgAggBBADIQQMAgsCQCAAQYABSw0AIABBgAggBBAEIQQMAgsgAEGACCAEEAUhBAwBCwJAIABBEEsNACAAIANCABADIQQMAQsCQCAAQYABSw0AIAAgA0IAEAQhBAwBCyAAIANCABAFIQQLQQAgBEI4hiAEQiiGQoCAgICAgMD/AIOEIARCGIZCgICAgIDgP4MgBEIIhkKAgICA8B+DhIQgBEIIiEKAgID4D4MgBEIYiEKAgPwHg4QgBEIoiEKA/gODIARCOIiEhIQ3A4AKIAEkAAsGAEGAigELAgALC8wBAQBBgAgLxAG4/mw5I6RLvnwBgSz3Ia0c3tRt6YOQl9tyQKSkt7NnH8t55k7MwOV4glrQfcz/ciG4CEZ090MkjuA1kOaBOiZMPChSu5HDAMuI0GWLG1Muo3FkSJeiDflOOBnvRqnerNio+nY/45w0P/ncu8fHC08dilHgS820WTHIn37J2XhzZOrFrIM00+vDxYGg//oTY+sXDd1Rt/DaSdMWVSYp1GieKxa+WH1HofyP+LjRetAxzkXLOo+VFgQor9f7yrtLQH5AAgAA\";\n    var hash$6 = \"187bc2c6\";\n    var wasmJson$6 = {\n    \tname: name$6,\n    \tdata: data$6,\n    \thash: hash$6\n    };\n\n    const mutex$4 = new Mutex();\n    let wasmCache$4 = null;\n    const seedBuffer$1 = new ArrayBuffer(8);\n    function validateSeed$1(seed) {\n        if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {\n            return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');\n        }\n        return null;\n    }\n    function writeSeed$1(arr, low, high) {\n        // write in little-endian format\n        const buffer = new DataView(arr);\n        buffer.setUint32(0, low, true);\n        buffer.setUint32(4, high, true);\n    }\n    /**\n     * Calculates xxHash3 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @param seedLow Lower 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     * @param seedHigh Higher 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function xxhash3(data, seedLow = 0, seedHigh = 0) {\n        if (validateSeed$1(seedLow)) {\n            return Promise.reject(validateSeed$1(seedLow));\n        }\n        if (validateSeed$1(seedHigh)) {\n            return Promise.reject(validateSeed$1(seedHigh));\n        }\n        if (wasmCache$4 === null) {\n            return lockedCreate(mutex$4, wasmJson$6, 8)\n                .then((wasm) => {\n                wasmCache$4 = wasm;\n                writeSeed$1(seedBuffer$1, seedLow, seedHigh);\n                wasmCache$4.writeMemory(new Uint8Array(seedBuffer$1));\n                return wasmCache$4.calculate(data);\n            });\n        }\n        try {\n            writeSeed$1(seedBuffer$1, seedLow, seedHigh);\n            wasmCache$4.writeMemory(new Uint8Array(seedBuffer$1));\n            const hash = wasmCache$4.calculate(data);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new xxHash3 hash instance\n     * @param seedLow Lower 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     * @param seedHigh Higher 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     */\n    function createXXHash3(seedLow = 0, seedHigh = 0) {\n        if (validateSeed$1(seedLow)) {\n            return Promise.reject(validateSeed$1(seedLow));\n        }\n        if (validateSeed$1(seedHigh)) {\n            return Promise.reject(validateSeed$1(seedHigh));\n        }\n        return WASMInterface(wasmJson$6, 8).then((wasm) => {\n            const instanceBuffer = new ArrayBuffer(8);\n            writeSeed$1(instanceBuffer, seedLow, seedHigh);\n            wasm.writeMemory(new Uint8Array(instanceBuffer));\n            wasm.init();\n            const obj = {\n                init: () => {\n                    wasm.writeMemory(new Uint8Array(instanceBuffer));\n                    wasm.init();\n                    return obj;\n                },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 512,\n                digestSize: 8,\n            };\n            return obj;\n        });\n    }\n\n    var name$5 = \"xxhash128\";\n    var data$5 = \"AGFzbQEAAAABKwdgAAF/YAR/f39/AGAHf39/f39/fwBgA39/fgF+YAR/f39+AGAAAGABfwADDQwAAQIDBAQEBQYFAAUEBQFwAQEBBQQBAQICBg4CfwFBwI4FC38AQcAJCwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAAHC0hhc2hfVXBkYXRlAAgKSGFzaF9GaW5hbAAJDUhhc2hfR2V0U3RhdGUACg5IYXNoX0NhbGN1bGF0ZQALClNUQVRFX1NJWkUDAQrKRgwFAEGACgvvAwEQfgJAIANFDQAgAUE4aiEBIAJBOGohAiAAKQMwIQQgACkDOCEFIAApAyAhBiAAKQMoIQcgACkDECEIIAApAxghCSAAKQMAIQogACkDCCELA0AgByABQWhqKQMAIgx8IAJBcGopAwAgAUFwaikDACINhSIHQiCIIAdC/////w+DfnwhByAJIAFBWGopAwAiDnwgAkFgaikDACABQWBqKQMAIg+FIglCIIggCUL/////D4N+fCEJIAsgAUFIaikDACIQfCACQVBqKQMAIAFBUGopAwAiEYUiC0IgiCALQv////8Pg358IQsgAkF4aikDACABQXhqKQMAIhKFIhNCIIggE0L/////D4N+IAR8IAEpAwAiE3whBCACQWhqKQMAIAyFIgxCIIggDEL/////D4N+IAZ8IA18IQYgAkFYaikDACAOhSIMQiCIIAxC/////w+DfiAIfCAPfCEIIAJBSGopAwAgEIUiDEIgiCAMQv////8Pg34gCnwgEXwhCiAFIBJ8IAIpAwAgE4UiBUIgiCAFQv////8Pg358IQUgAUHAAGohASACQQhqIQIgA0F/aiIDDQALIAAgCTcDGCAAIAo3AwAgACALNwMIIAAgBzcDKCAAIAg3AxAgACAFNwM4IAAgBjcDICAAIAQ3AzALC94CAgF/AX4CQCACIAEoAgAiB2siAiAESw0AIAAgAyAFIAdBA3RqIAIQASAAIAApAwAiCCAFIAZqIgcpAwCFIAhCL4iFQrHz3fEJfjcDACAAIAApAwgiCCAHKQMIhSAIQi+IhUKx893xCX43AwggACAAKQMQIgggBykDEIUgCEIviIVCsfPd8Ql+NwMQIAAgACkDGCIIIAcpAxiFIAhCL4iFQrHz3fEJfjcDGCAAIAApAyAiCCAHKQMghSAIQi+IhUKx893xCX43AyAgACAAKQMoIgggBykDKIUgCEIviIVCsfPd8Ql+NwMoIAAgACkDMCIIIAcpAzCFIAhCL4iFQrHz3fEJfjcDMCAAIAApAzgiCCAHKQM4hSAIQi+IhUKx893xCX43AzggACADIAJBBnRqIAUgBCACayIHEAEgASAHNgIADwsgACADIAUgB0EDdGogBBABIAEgByAEajYCAAvtAwEFfiABKQM4IAApAziFIgNC/////w+DIgQgASkDMCAAKQMwhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMoIAApAyiFIgNC/////w+DIgQgASkDICAAKQMghSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMYIAApAxiFIgNC/////w+DIgQgASkDECAAKQMQhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMIIAApAwiFIgNC/////w+DIgQgASkDACAAKQMAhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSACfHx8fCICQiWIIAKFQvnz3fGZ8pmrFn4iAkIgiCAChQvCCAEFfgJAIAFBCUkNACAAQQApA4CMASACKQMoIAIpAyCFIAN9hSABQfiLAWopAwAiBIUiBUIgiCIGQoeVr68IfiIHQv////8PgyAFQv////8PgyIFQrHz3fEJfnwgBUKHla+vCH4iBUIgiHwiCEIghiAFQv////8Pg4QgAUF/aq1CNoZ8IAQgAikDOCACKQMwhSADfIUiA0L/////D4NC95Svrwh+IANCgICAgHCDfCAGQrHz3fEJfnwgB0IgiHwgCEIgiHwiA0I4hiADQiiGQoCAgICAgMD/AIOEIANCGIZCgICAgIDgP4MgA0IIhkKAgICA8B+DhIQgA0IIiEKAgID4D4MgA0IYiEKAgPwHg4QgA0IoiEKA/gODIANCOIiEhISFIgRCIIgiBULP1tO+An4iBkL/////D4MgBEL/////D4MiBEK93MqVDH58IARCz9bTvgJ+IgdCIIh8IgRCBYhC////P4MgBEIghiAHQv////8Pg4SFQvnz3fGZ8pmrFn4iB0IgiCAHhTcDACAAIAVCvdzKlQx+IANCz9bTvtLHq9lCfnwgBkIgiHwgBEIgiHwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4U3AwgPCwJAIAFBBEkNACAAIAIpAxggAikDEIUgA6ciAkEYdCACQQh0QYCA/AdxciACQQh2QYD+A3EgAkEYdnJyrUIghiADhXwgAUH8iwFqNQIAQiCGQQA1AoCMAYSFIgNCIIgiBCABQQJ0QYeVr694aq0iBX4iBkIgiCAEQrHz3fEJfnwgBkL/////D4MgA0L/////D4MiA0Kx893xCX58IAMgBX4iA0IgiHwiBEIgiHwgBEIghiADQv////8Pg4QiBEIBhnwiA0IliCADhUL5893xmfKZqxZ+IgVCIIggBYU3AwggACADQgOIIASFIgNCI4ggA4VCpb7j9NGMh9mff34iA0IciCADhTcDAA8LAkAgAUUNACAAIAIoAgQgAigCAHOtIAN8IgRBAC0AgIwBQRB0IAFBCHRyIAFBAXZBgIwBai0AAEEYdHIgAUH/iwFqLQAAciIBrYUgBEIhiIVCz9bTvtLHq9lCfiIEQh2IIASFQvnz3fGZ9pmrFn4iBEIgiCAEhTcDACAAIAIoAgwgAigCCHOtIAN9IgMgAUEYdCABQQh0QYCA/AdxciABQQh2QYD+A3EgAUEYdnJyQQ13rYUgA0IhiIVCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhTcDCA8LIAAgAikDUCADhSACKQNYhSIEQiGIIASFQs/W077Sx6vZQn4iBEIdiCAEhUL5893xmfaZqxZ+IgRCIIggBIU3AwggACACKQNAIAOFIAIpA0iFIgNCIYggA4VCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhTcDAAunCgEKfiABrSIEQoeVr6+Ytt6bnn9+IQUCQAJAIAFBIU8NAEIAIQYMAQtCACEHAkAgAUHBAEkNAEIAIQcCQCABQeEASQ0AIAIpA3ggA30gAUHIiwFqKQMAIgiFIgdC/////w+DIgkgAikDcCADfCABQcCLAWopAwAiCoUiC0IgiCIMfiINQiCIIAdCIIgiByAMfnwgDUL/////D4MgByALQv////8PgyILfnwgCSALfiIHQiCIfCIJQiCIfEEAKQO4jAEiC0EAKQOwjAEiDHyFIAlCIIYgB0L/////D4OEhSEHIAIpA2ggA30gC4UiCUL/////D4MiCyACKQNgIAN8IAyFIgxCIIgiDX4iBkL/////D4MgCUIgiCIJIAxC/////w+DIgx+fCALIAx+IgtCIIh8IgxCIIYgC0L/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAV8IAggCnyFIQULIAIpA1ggA30gAUHYiwFqKQMAIgiFIglC/////w+DIgogAikDUCADfCABQdCLAWopAwAiC4UiDEIgiCINfiIGQv////8PgyAJQiCIIgkgDEL/////D4MiDH58IAogDH4iCkIgiHwiDEIghiAKQv////8Pg4QgBkIgiCAJIA1+fCAMQiCIfIUgB3xBACkDqIwBIglBACkDoIwBIgp8hSEHIAIpA0ggA30gCYUiCUL/////D4MiDCACKQNAIAN8IAqFIgpCIIgiDX4iBkL/////D4MgCUIgiCIJIApC/////w+DIgp+fCAMIAp+IgpCIIh8IgxCIIYgCkL/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAV8IAggC3yFIQULIAIpAzggA30gAUHoiwFqKQMAIgiFIglC/////w+DIgogAikDMCADfCABQeCLAWopAwAiC4UiDEIgiCINfiIGQv////8PgyAJQiCIIgkgDEL/////D4MiDH58IAogDH4iCkIgiHwiDEIghiAKQv////8Pg4QgBkIgiCAJIA1+fCAMQiCIfIUgB3xBACkDmIwBIgdBACkDkIwBIgl8hSEGIAIpAyggA30gB4UiB0L/////D4MiCiACKQMgIAN8IAmFIglCIIgiDH4iDUL/////D4MgB0IgiCIHIAlC/////w+DIgl+fCAKIAl+IglCIIh8IgpCIIYgCUL/////D4OEIA1CIIggByAMfnwgCkIgiHyFIAV8IAggC3yFIQULIAAgAikDGCADfSABQfiLAWopAwAiB4UiCEL/////D4MiCSACKQMQIAN8IAFB8IsBaikDACIKhSILQiCIIgx+Ig1C/////w+DIAhCIIgiCCALQv////8PgyILfnwgCSALfiIJQiCIfCILQiCGIAlC/////w+DhCANQiCIIAggDH58IAtCIIh8hSAGfEEAKQOIjAEiCEEAKQOAjAEiCXyFIgsgAikDCCADfSAIhSIIQv////8PgyIMIAIpAwAgA3wgCYUiCUIgiCINfiIGQv////8PgyAIQiCIIgggCUL/////D4MiCX58IAwgCX4iCUIgiHwiDEIghiAJQv////8Pg4QgBkIgiCAIIA1+fCAMQiCIfIUgBXwgByAKfIUiBXwiB0IliCAHhUL5893xmfKZqxZ+IgdCIIggB4U3AwAgAEIAIAVCh5Wvr5i23puef34gBCADfULP1tO+0ser2UJ+fCALQuPcypX8zvL1hX9+fCIDQiWIIAOFQvnz3fGZ8pmrFn4iA0IgiCADhX03AwgLiQ8DAX8UfgJ/QQAhBCACKQN4IAN9QQApA/iMASIFhSIGQv////8PgyIHIAIpA3AgA3xBACkD8IwBIgiFIglCIIgiCn4iC0L/////D4MgBkIgiCIGIAlC/////w+DIgl+fCAHIAl+IgdCIIh8IglCIIYgB0L/////D4OEIAtCIIggBiAKfnwgCUIgiHyFIAIpA1ggA31BACkD2IwBIgeFIgZC/////w+DIgkgAikDUCADfEEAKQPQjAEiCoUiC0IgiCIMfiINQv////8PgyAGQiCIIgYgC0L/////D4MiC358IAkgC34iCUIgiHwiC0IghiAJQv////8Pg4QgDUIgiCAGIAx+fCALQiCIfIUgAikDOCADfUEAKQO4jAEiCYUiBkL/////D4MiCyACKQMwIAN8QQApA7CMASIMhSINQiCIIg5+Ig9C/////w+DIAZCIIgiBiANQv////8PgyINfnwgCyANfiILQiCIfCINQiCGIAtC/////w+DhCAPQiCIIAYgDn58IA1CIIh8hSACKQMYIAN9QQApA5iMASILhSIGQv////8PgyINIAIpAxAgA3xBACkDkIwBIg6FIg9CIIgiEH4iEUL/////D4MgBkIgiCIGIA9C/////w+DIg9+fCANIA9+Ig1CIIh8Ig9CIIYgDUL/////D4OEIBFCIIggBiAQfnwgD0IgiHyFQQApA4iMASINQQApA4CMASIPfIV8QQApA6iMASIQQQApA6CMASIRfIV8QQApA8iMASISQQApA8CMASITfIV8QQApA+iMASIUQQApA+CMASIVfIUiBkIliCAGhUL5893xmfKZqxZ+IgZCIIggBoUhBiACKQNoIAN9IBSFIhRC/////w+DIhYgAikDYCADfCAVhSIVQiCIIhd+IhhC/////w+DIBRCIIgiFCAVQv////8PgyIVfnwgFiAVfiIVQiCIfCIWQiCGIBVC/////w+DhCAYQiCIIBQgF358IBZCIIh8hSACKQNIIAN9IBKFIhJC/////w+DIhQgAikDQCADfCAThSITQiCIIhV+IhZC/////w+DIBJCIIgiEiATQv////8PgyITfnwgFCATfiITQiCIfCIUQiCGIBNC/////w+DhCAWQiCIIBIgFX58IBRCIIh8hSACKQMoIAN9IBCFIhBC/////w+DIhIgAikDICADfCARhSIRQiCIIhN+IhRC/////w+DIBBCIIgiECARQv////8PgyIRfnwgEiARfiIRQiCIfCISQiCGIBFC/////w+DhCAUQiCIIBAgE358IBJCIIh8hSACKQMIIAN9IA2FIg1C/////w+DIhAgAikDACADfCAPhSIPQiCIIhF+IhJC/////w+DIA1CIIgiDSAPQv////8PgyIPfnwgECAPfiIPQiCIfCIQQiCGIA9C/////w+DhCASQiCIIA0gEX58IBBCIIh8hSABrSIPQoeVr6+Ytt6bnn9+fCALIA58hXwgCSAMfIV8IAcgCnyFfCAFIAh8hSIFQiWIIAWFQvnz3fGZ8pmrFn4iBUIgiCAFhSEFIAFBIG0hGQJAIAFBoAFIDQAgGUEFIBlBBUobQXxqIRoDQCACIARqIhlBG2opAwAgA30gBEGYjQFqKQMAIgeFIghC/////w+DIgkgGUETaikDACADfCAEQZCNAWopAwAiCoUiC0IgiCIMfiINQv////8PgyAIQiCIIgggC0L/////D4MiC358IAkgC34iCUIgiHwiC0IghiAJQv////8Pg4QgDUIgiCAIIAx+fCALQiCIfIUgBnwgBEGIjQFqKQMAIgggBEGAjQFqKQMAIgl8hSEGIBlBC2opAwAgA30gCIUiCEL/////D4MiCyAZQQNqKQMAIAN8IAmFIglCIIgi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QXBqKQMANwPwjQFBACADQXhqKQMANwP4jQELQYCMASEEAkACQCACIANrIgJBCE8NACACIQEMAQsgAiEBA0AgBCADKQMANwMAIARBCGohBCADQQhqIQMgAUF4aiIBQQdLDQALCyABRQ0AA0AgBCADLQAAOgAAIARBAWohBCADQQFqIQMgAUF/aiIBDQALC0EAIAI2AoCOAQvcDgUEfwF+An8EfgJ/IwAiACEBIABBgAFrQUBxIgAkAEEAKAKwjgEiAkHAigEgAhshAwJAAkBBACkDkI4BIgRC8QFUDQAgAEEAKQOAigE3AwAgAEEAKQOIigE3AwggAEEAKQOQigE3AxAgAEEAKQOYigE3AxggAEEAKQOgigE3AyAgAEEAKQOoigE3AyggAEEAKQOwigE3AzAgAEEAKQO4igE3AzgCQAJAQQAoAoCOASIFQcAASQ0AIABBACgCiI4BNgJAIAAgAEHAAGpBACgCmI4BQYCMASAFQX9qQQZ2IANBACgCnI4BEAIgACAAKQMIQQAoAoCOASICQcCLAWopAwAiBHwgA0EAKAKcjgFqIgZBAWopAwAgAkHIiwFqKQMAIgeFIghCIIggCEL/////D4N+fDcDCCAAIAApAxggAkHQiwFqKQMAIgh8IAZBEWopAwAgAkHYiwFqKQMAIgmFIgpCIIggCkL/////D4N+fDcDGCAAIAcgBCAGQXlqKQMAhSIEQiCIIARC/////w+DfiAAKQMAfHw3AwAgACAJIAggBkEJaikDAIUiBEIgiCAEQv////8Pg34gACkDEHx8NwMQIAZBGWopAwAhBCAAKQMgIQcgACAAKQMoIAJB4IsBaikDACIIfCAGQSFqKQMAIAJB6IsBaikDACIJhSIKQiCIIApC/////w+Dfnw3AyggACAJIAcgBCAIhSIEQiCIIARC/////w+Dfnx8NwMgIAAgACkDOCACQfCLAWopAwAiBHwgBkExaikDACACQfiLAWopAwAiB4UiCEIgiCAIQv////8Pg358NwM4IAAgByAEIAZBKWopAwCFIgRCIIggBEL/////D4N+IAApAzB8fDcDMAwBC0HAACAFayELAkACQAJAIAVBOE0NAEGAjgEgC2shBiAAQcAAaiEFIAshAgwBC0EAIQwgCyECA0AgAEHAAGogDGogBSAMakHAjQFqKQMANwMAIAxBCGohDCACQXhqIgJBB0sNAAsgBSAMaiIGQcAARg0BIAZBwI0BaiEGIABBwABqIAxqIQULA0AgBSAGLQAAOgAAIAVBAWohBSAGQQFqIQYgAkF/aiICDQALQQAoAoCOASEFCyAAQcAAaiALaiEGQYCMASECAkAgBUEISQ0AQYCMASECA0AgBiACKQMANwMAIAZBCGohBiACQQhqIQIgBUF4aiIFQQdLDQALCwJAIAVFDQADQCAGIAItAAA6AAAgBkEBaiEGIAJBAWohAiAFQX9qIgUNAAsLIAAgACkDCCAAKQNAIgR8IANBACgCnI4BaiICQQFqKQMAIAApA0giB4UiCEIgiCAIQv////8Pg358NwMIIAAgACkDGCAAKQNQIgh8IAJBEWopAwAgACkDWCIJhSIKQiCIIApC/////w+Dfnw3AxggACAHIAQgAkF5aikDAIUiBEIgiCAEQv////8Pg34gACkDAHx8NwMAIAAgCSAIIAJBCWopAwCFIgRCIIggBEL/////D4N+IAApAxB8fDcDECACQRlqKQMAIQQgACkDICEHIAAgACkDKCAAKQNgIgh8IAJBIWopAwAgACkDaCIJhSIKQiCIIApC/////w+Dfnw3AyggACAJIAcgBCAIhSIEQiCIIARC/////w+Dfnx8NwMgIAAgACkDOCAAKQNwIgR8IAJBMWopAwAgACkDeCIHhSIIQiCIIAhC/////w+Dfnw3AzggACAHIAQgAkEpaikDAIUiBEIgiCAEQv////8Pg34gACkDMHx8NwMwCyAAIAAgA0ELakEAKQOQjgEiBEKHla+vmLbem55/fhADNwNAIAAgACADQQAoApyOAWpBdWogBELP1tO+0ser2UJ+Qn+FEAM3A0gMAQsgBKchAgJAQQApA6COASIEUA0AAkAgAkEQSw0AIABBwABqIAJBgAggBBAEDAILAkAgAkGAAUsNACAAQcAAaiACQYAIIAQQBQwCCyAAQcAAaiACQYAIIAQQBgwBCwJAIAJBEEsNACAAQcAAaiACIANCABAEDAELAkAgAkGAAUsNACAAQcAAaiACIANCABAFDAELIABBwABqIAIgA0IAEAYLQQAgAEH4AGopAwA3A8AKQQAgAEHwAGopAwA3A7gKQQAgAEHoAGopAwA3A7AKQQAgAEHgAGopAwA3A6gKQQAgAEHYAGopAwA3A6AKQQAgAEHQAGopAwA3A5gKQQAgACkDSCIEQjiGIARCKIZCgICAgICAwP8Ag4QgBEIYhkKAgICAgOA/gyAEQgiGQoCAgIDwH4OEhCAEQgiIQoCAgPgPgyAEQhiIQoCA/AeDhCAEQiiIQoD+A4MgBEI4iISEhCIENwOACkEAIAQ3A5AKQQAgACkDQCIEQjiGIARCKIZCgICAgICAwP8Ag4QgBEIYhkKAgICAgOA/gyAEQgiGQoCAgIDwH4OEhCAEQgiIQoCAgPgPgyAEQhiIQoCA/AeDhCAEQiiIQoD+A4MgBEI4iISEhDcDiAogASQACwYAQYCKAQsCAAsLzAEBAEGACAvEAbj+bDkjpEu+fAGBLPchrRze1G3pg5CX23JApKS3s2cfy3nmTszA5XiCWtB9zP9yIbgIRnT3QySO4DWQ5oE6Jkw8KFK7kcMAy4jQZYsbUy6jcWRIl6IN+U44Ge9Gqd6s2Kj6dj/jnDQ/+dy7x8cLTx2KUeBLzbRZMciffsnZeHNk6sWsgzTT68PFgaD/+hNj6xcN3VG38NpJ0xZVJinUaJ4rFr5YfUeh/I/4uNF60DHORcs6j5UWBCiv1/vKu0tAfkACAAA=\";\n    var hash$5 = \"e8e3fcf8\";\n    var wasmJson$5 = {\n    \tname: name$5,\n    \tdata: data$5,\n    \thash: hash$5\n    };\n\n    const mutex$3 = new Mutex();\n    let wasmCache$3 = null;\n    const seedBuffer = new ArrayBuffer(8);\n    function validateSeed(seed) {\n        if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {\n            return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');\n        }\n        return null;\n    }\n    function writeSeed(arr, low, high) {\n        // write in little-endian format\n        const buffer = new DataView(arr);\n        buffer.setUint32(0, low, true);\n        buffer.setUint32(4, high, true);\n    }\n    /**\n     * Calculates xxHash128 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @param seedLow Lower 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     * @param seedHigh Higher 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function xxhash128(data, seedLow = 0, seedHigh = 0) {\n        if (validateSeed(seedLow)) {\n            return Promise.reject(validateSeed(seedLow));\n        }\n        if (validateSeed(seedHigh)) {\n            return Promise.reject(validateSeed(seedHigh));\n        }\n        if (wasmCache$3 === null) {\n            return lockedCreate(mutex$3, wasmJson$5, 16)\n                .then((wasm) => {\n                wasmCache$3 = wasm;\n                writeSeed(seedBuffer, seedLow, seedHigh);\n                wasmCache$3.writeMemory(new Uint8Array(seedBuffer));\n                return wasmCache$3.calculate(data);\n            });\n        }\n        try {\n            writeSeed(seedBuffer, seedLow, seedHigh);\n            wasmCache$3.writeMemory(new Uint8Array(seedBuffer));\n            const hash = wasmCache$3.calculate(data);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new xxHash128 hash instance\n     * @param seedLow Lower 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     * @param seedHigh Higher 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     */\n    function createXXHash128(seedLow = 0, seedHigh = 0) {\n        if (validateSeed(seedLow)) {\n            return Promise.reject(validateSeed(seedLow));\n        }\n        if (validateSeed(seedHigh)) {\n            return Promise.reject(validateSeed(seedHigh));\n        }\n        return WASMInterface(wasmJson$5, 16).then((wasm) => {\n            const instanceBuffer = new ArrayBuffer(8);\n            writeSeed(instanceBuffer, seedLow, seedHigh);\n            wasm.writeMemory(new Uint8Array(instanceBuffer));\n            wasm.init();\n            const obj = {\n                init: () => {\n                    wasm.writeMemory(new Uint8Array(instanceBuffer));\n                    wasm.init();\n                    return obj;\n                },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 512,\n                digestSize: 16,\n            };\n            return obj;\n        });\n    }\n\n    var name$4 = \"ripemd160\";\n    var data$4 = \"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\";\n    var hash$4 = \"42f1de39\";\n    var wasmJson$4 = {\n    \tname: name$4,\n    \tdata: data$4,\n    \thash: hash$4\n    };\n\n    const mutex$2 = new Mutex();\n    let wasmCache$2 = null;\n    /**\n     * Calculates RIPEMD-160 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function ripemd160(data) {\n        if (wasmCache$2 === null) {\n            return lockedCreate(mutex$2, wasmJson$4, 20)\n                .then((wasm) => {\n                wasmCache$2 = wasm;\n                return wasmCache$2.calculate(data);\n            });\n        }\n        try {\n            const hash = wasmCache$2.calculate(data);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new RIPEMD-160 hash instance\n     */\n    function createRIPEMD160() {\n        return WASMInterface(wasmJson$4, 20).then((wasm) => {\n            wasm.init();\n            const obj = {\n                init: () => { wasm.init(); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 64,\n                digestSize: 20,\n            };\n            return obj;\n        });\n    }\n\n    function calculateKeyBuffer(hasher, key) {\n        const { blockSize } = hasher;\n        const buf = getUInt8Buffer(key);\n        if (buf.length > blockSize) {\n            hasher.update(buf);\n            const uintArr = hasher.digest('binary');\n            hasher.init();\n            return uintArr;\n        }\n        return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);\n    }\n    function calculateHmac(hasher, key) {\n        hasher.init();\n        const { blockSize } = hasher;\n        const keyBuf = calculateKeyBuffer(hasher, key);\n        const keyBuffer = new Uint8Array(blockSize);\n        keyBuffer.set(keyBuf);\n        const opad = new Uint8Array(blockSize);\n        for (let i = 0; i < blockSize; i++) {\n            const v = keyBuffer[i];\n            opad[i] = v ^ 0x5C;\n            keyBuffer[i] = v ^ 0x36;\n        }\n        hasher.update(keyBuffer);\n        const obj = {\n            init: () => {\n                hasher.init();\n                hasher.update(keyBuffer);\n                return obj;\n            },\n            update: (data) => {\n                hasher.update(data);\n                return obj;\n            },\n            digest: ((outputType) => {\n                const uintArr = hasher.digest('binary');\n                hasher.init();\n                hasher.update(opad);\n                hasher.update(uintArr);\n                return hasher.digest(outputType);\n            }),\n            save: () => {\n                throw new Error('save() not supported');\n            },\n            load: () => {\n                throw new Error('load() not supported');\n            },\n            blockSize: hasher.blockSize,\n            digestSize: hasher.digestSize,\n        };\n        return obj;\n    }\n    /**\n     * Calculates HMAC hash\n     * @param hash Hash algorithm to use. It has to be the return value of a function like createSHA1()\n     * @param key Key (string, Buffer or TypedArray)\n     */\n    function createHMAC(hash, key) {\n        if (!hash || !hash.then) {\n            throw new Error('Invalid hash function is provided! Usage: createHMAC(createMD5(), \"key\").');\n        }\n        return hash.then((hasher) => calculateHmac(hasher, key));\n    }\n\n    function calculatePBKDF2(digest, salt, iterations, hashLength, outputType) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const DK = new Uint8Array(hashLength);\n            const block1 = new Uint8Array(salt.length + 4);\n            const block1View = new DataView(block1.buffer);\n            const saltBuffer = getUInt8Buffer(salt);\n            const saltUIntBuffer = new Uint8Array(saltBuffer.buffer, saltBuffer.byteOffset, saltBuffer.length);\n            block1.set(saltUIntBuffer);\n            let destPos = 0;\n            const hLen = digest.digestSize;\n            const l = Math.ceil(hashLength / hLen);\n            let T = null;\n            let U = null;\n            for (let i = 1; i <= l; i++) {\n                block1View.setUint32(salt.length, i);\n                digest.init();\n                digest.update(block1);\n                T = digest.digest('binary');\n                U = T.slice();\n                for (let j = 1; j < iterations; j++) {\n                    digest.init();\n                    digest.update(U);\n                    U = digest.digest('binary');\n                    for (let k = 0; k < hLen; k++) {\n                        T[k] ^= U[k];\n                    }\n                }\n                DK.set(T.subarray(0, hashLength - destPos), destPos);\n                destPos += hLen;\n            }\n            if (outputType === 'binary') {\n                return DK;\n            }\n            const digestChars = new Uint8Array(hashLength * 2);\n            return getDigestHex(digestChars, DK, hashLength);\n        });\n    }\n    const validateOptions$2 = (options) => {\n        if (!options || typeof options !== 'object') {\n            throw new Error('Invalid options parameter. It requires an object.');\n        }\n        if (!options.hashFunction || !options.hashFunction.then) {\n            throw new Error('Invalid hash function is provided! Usage: pbkdf2(\"password\", \"salt\", 1000, 32, createSHA1()).');\n        }\n        if (!Number.isInteger(options.iterations) || options.iterations < 1) {\n            throw new Error('Iterations should be a positive number');\n        }\n        if (!Number.isInteger(options.hashLength) || options.hashLength < 1) {\n            throw new Error('Hash length should be a positive number');\n        }\n        if (options.outputType === undefined) {\n            options.outputType = 'hex';\n        }\n        if (!['hex', 'binary'].includes(options.outputType)) {\n            throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`);\n        }\n    };\n    /**\n     * Generates a new PBKDF2 hash for the supplied password\n     */\n    function pbkdf2(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            validateOptions$2(options);\n            const hmac = yield createHMAC(options.hashFunction, options.password);\n            return calculatePBKDF2(hmac, options.salt, options.iterations, options.hashLength, options.outputType);\n        });\n    }\n\n    var name$3 = \"scrypt\";\n    var data$3 = \"AGFzbQEAAAABIwZgAX8Bf2AAAX9gBX9/fn9/AGAEf39/fwBgAX8AYAN/f38AAwcGAAECAwQFBAUBcAEBAQUGAQECgIACBggBfwFBkIgECwc5BAZtZW1vcnkCABJIYXNoX1NldE1lbW9yeVNpemUAAA5IYXNoX0dldEJ1ZmZlcgABBnNjcnlwdAAFCpcmBlsBAX9BACEBAkAgAEEAKAKACGsiAEUNAAJAIABBEHYgAEGAgHxxIABJaiIAQABBf0cNAEH/ASEBDAELQQAhAUEAQQApA4AIIABBEHStfDcDgAgLIAFBGHRBGHULagECfwJAQQAoAogIIgANAEEAPwBBEHQiADYCiAhBgIAgQQAoAoAIayIBRQ0AAkAgAUEQdiABQYCAfHEgAUlqIgBAAEF/Rw0AQQAPC0EAQQApA4AIIABBEHStfDcDgAhBACgCiAghAAsgAAu5EAMMfwl+An8gAUEFdCEFIAQgAUEIdGohBiAEIAFBB3QiB2ohCAJAAkACQAJAIAFFDQBBACEJIAAhCiAEIQsDQCALIAooAgA2AgAgCkEEaiEKIAtBBGohCyAJQQFqIgkgBUkNAAsgAlANAiABQQh0IQxBACENIAMhDgNAQQAhCSABIQ8DQCAOIAlqIgogBCAJaiILKQMANwMAIApBCGogC0EIaikDADcDACAKQRBqIAtBEGopAwA3AwAgCkEYaiALQRhqKQMANwMAIApBIGogC0EgaikDADcDACAKQShqIAtBKGopAwA3AwAgCkEwaiALQTBqKQMANwMAIApBOGogC0E4aikDADcDACAKQcAAaiALQcAAaikDADcDACAKQcgAaiALQcgAaikDADcDACAKQdAAaiALQdAAaikDADcDACAKQdgAaiALQdgAaikDADcDACAKQeAAaiALQeAAaikDADcDACAKQegAaiALQegAaikDADcDACAKQfAAaiALQfAAaikDADcDACAKQfgAaiALQfgAaikDADcDACAJQYABaiEJIA9Bf2oiDw0ACyAEIAggBiABEAMgDiEJIAQhDyABIRADQCAJIAdqIgogDyAHaiILKQMANwMAIApBCGogC0EIaikDADcDACAKQRBqIAtBEGopAwA3AwAgCkEYaiALQRhqKQMANwMAIApBIGogC0EgaikDADcDACAKQShqIAtBKGopAwA3AwAgCkEwaiALQTBqKQMANwMAIApBOGogC0E4aikDADcDACAKQcAAaiALQcAAaikDADcDACAKQcgAaiALQcgAaikDADcDACAKQdAAaiALQdAAaikDADcDACAKQdgAaiALQdgAaikDADcDACAKQeAAaiALQeAAaikDADcDACAKQegAaiALQegAaikDADcDACAKQfAAaiALQfAAaikDADcDACAKQfgAaiALQfgAaikDADcDACAJQYABaiEJIA9BgAFqIQ8gEEF/aiIQDQALIAggBCAGIAEQAyAOIAxqIQ4gDUECaiINrSACVA0ADAILCyACUA0CIAhBQGoiCikDOCERIAopAzAhEiAKKQMoIRMgCikDICEUIAopAxghFSAKKQMQIRYgCikDCCEXIAopAwAhGEECIQoDQCAKrSEZIApBAmohCiAZIAJUDQALIAYgETcDOCAGIBI3AzAgBiATNwMoIAYgFDcDICAGIBU3AxggBiAWNwMQIAYgFzcDCCAGIBg3AwALAkAgAUUNACAHQUBqIgogCGohGiACp0F/aiEOIAogBGohGyABQQd0IQ1BACEMA0AgAyANIBsoAgAgDnFsaiEHQQAhCSABIQ8DQCAEIAlqIgogCikDACAHIAlqIgspAwCFNwMAIApBCGoiECAQKQMAIAtBCGopAwCFNwMAIApBEGoiECAQKQMAIAtBEGopAwCFNwMAIApBGGoiECAQKQMAIAtBGGopAwCFNwMAIApBIGoiECAQKQMAIAtBIGopAwCFNwMAIApBKGoiECAQKQMAIAtBKGopAwCFNwMAIApBMGoiECAQKQMAIAtBMGopAwCFNwMAIApBOGoiECAQKQMAIAtBOGopAwCFNwMAIApBwABqIhAgECkDACALQcAAaikDAIU3AwAgCkHIAGoiECAQKQMAIAtByABqKQMAhTcDACAKQdAAaiIQIBApAwAgC0HQAGopAwCFNwMAIApB2ABqIhAgECkDACALQdgAaikDAIU3AwAgCkHgAGoiECAQKQMAIAtB4ABqKQMAhTcDACAKQegAaiIQIBApAwAgC0HoAGopAwCFNwMAIApB8ABqIhAgECkDACALQfAAaikDAIU3AwAgCkH4AGoiCiAKKQMAIAtB+ABqKQMAhTcDACAJQYABaiEJIA9Bf2oiDw0ACyAEIAggBiABEAMgAyANIBooAgAgDnFsaiEHQQAhCSABIQ8DQCAIIAlqIgogCikDACAHIAlqIgspAwCFNwMAIApBCGoiECAQKQMAIAtBCGopAwCFNwMAIApBEGoiECAQKQMAIAtBEGopAwCFNwMAIApBGGoiECAQKQMAIAtBGGopAwCFNwMAIApBIGoiECAQKQMAIAtBIGopAwCFNwMAIApBKGoiECAQKQMAIAtBKGopAwCFNwMAIApBMGoiECAQKQMAIAtBMGopAwCFNwMAIApBOGoiECAQKQMAIAtBOGopAwCFNwMAIApBwABqIhAgECkDACALQcAAaikDAIU3AwAgCkHIAGoiECAQKQMAIAtByABqKQMAhTcDACAKQdAAaiIQIBApAwAgC0HQAGopAwCFNwMAIApB2ABqIhAgECkDACALQdgAaikDAIU3AwAgCkHgAGoiECAQKQMAIAtB4ABqKQMAhTcDACAKQegAaiIQIBApAwAgC0HoAGopAwCFNwMAIApB8ABqIhAgECkDACALQfAAaikDAIU3AwAgCkH4AGoiCiAKKQMAIAtB+ABqKQMAhTcDACAJQYABaiEJIA9Bf2oiDw0ACyAIIAQgBiABEAMgDEECaiIMrSACVA0ADAILCyAIQUBqIgopAzghESAKKQMwIRIgCikDKCETIAopAyAhFCAKKQMYIRUgCikDECEWIAopAwghFyAKKQMAIRhBAiEKA0AgCq0hGSAKQQJqIQogGSACVA0ACyAGIBE3AzggBiASNwMwIAYgEzcDKCAGIBQ3AyAgBiAVNwMYIAYgFjcDECAGIBc3AwggBiAYNwMACyABRQ0AQQAhCgNAIAAgBCgCADYCACAAQQRqIQAgBEEEaiEEIApBAWoiCiAFSQ0ACwsL4wUDAX8IfgJ/IAIgA0EHdCAAakFAaiIEKQMAIgU3AwAgAiAEKQMIIgY3AwggAiAEKQMQIgc3AxAgAiAEKQMYIgg3AxggAiAEKQMgIgk3AyAgAiAEKQMoIgo3AyggAiAEKQMwIgs3AzAgAiAEKQM4Igw3AzgCQCADRQ0AIANBAXQhDSAAQfgAaiEEIANBBnQhDkECIQADQCACIAUgBEGIf2opAwCFNwMAIAIgBiAEQZB/aikDAIU3AwggAiAHIARBmH9qKQMAhTcDECACIAggBEGgf2opAwCFNwMYIAIgCSAEQah/aikDAIU3AyAgAiAKIARBsH9qKQMAhTcDKCACIAsgBEG4f2opAwCFNwMwIAIgDCAEQUBqKQMAhTcDOCACEAQgASACKQMANwMAIAFBCGogAikDCDcDACABQRBqIAIpAxA3AwAgAUEYaiACKQMYNwMAIAFBIGogAikDIDcDACABQShqIAIpAyg3AwAgAUEwaiACKQMwNwMAIAFBOGogAikDODcDACACIAIpAwAgBEFIaikDAIU3AwAgAiACKQMIIARBUGopAwCFNwMIIAIgAikDECAEQVhqKQMAhTcDECACIAIpAxggBEFgaikDAIU3AxggAiACKQMgIARBaGopAwCFNwMgIAIgAikDKCAEQXBqKQMAhTcDKCACIAIpAzAgBEF4aikDAIU3AzAgAiACKQM4IAQpAwCFNwM4IAIQBCABIA5qIgMgAikDADcDACADQQhqIAIpAwg3AwAgA0EQaiACKQMQNwMAIANBGGogAikDGDcDACADQSBqIAIpAyA3AwAgA0EoaiACKQMoNwMAIANBMGogAikDMDcDACADQThqIAIpAzg3AwAgACANTw0BIARBgAFqIQQgAUHAAGohASAAQQJqIQAgAikDOCEMIAIpAzAhCyACKQMoIQogAikDICEJIAIpAxghCCACKQMQIQcgAikDCCEGIAIpAwAhBQwACwsLug0IAX4BfwF+AX8BfgF/AX4SfyAAIAAoAgQgACkDKCIBQiCIpyICIAApAzgiA0IgiKciBGpBB3cgACkDCCIFQiCIp3MiBiAEakEJdyAAKQMYIgdCIIincyIIIAZqQQ13IAJzIgkgB6ciCiABpyILakEHdyADp3MiAiALakEJdyAFp3MiDCACakENdyAKcyINIAxqQRJ3IAtzIg4gACkDACIBQiCIpyIPIAApAxAiA0IgiKciEGpBB3cgACkDICIFQiCIp3MiC2pBB3dzIgogCSAIakESdyAEcyIRIAJqQQd3IAApAzAiB6ciCSABpyISakEHdyADp3MiBCASakEJdyAFp3MiEyAEakENdyAJcyIUcyIJIBFqQQl3IAsgEGpBCXcgB0IgiKdzIhVzIhYgCWpBDXcgAnMiFyAWakESdyARcyIRakEHdyAGIBQgE2pBEncgEnMiEmpBB3cgFSALakENdyAPcyIUcyICIBJqQQl3IAxzIg8gAmpBDXcgBnMiGHMiBiARakEJdyAIIA0gFCAVakESdyAQcyIQIARqQQd3cyIMIBBqQQl3cyIIcyIVIAZqQQ13IApzIhQgDCAKIA5qQQl3IBNzIhMgCmpBDXcgC3MiGSATakESdyAOcyIKakEHdyAXcyILIApqQQl3IA9zIg4gC2pBDXcgDHMiFyAOakESdyAKcyINIAIgCCAMakENdyAEcyIMIAhqQRJ3IBBzIghqQQd3IBlzIgpqQQd3cyIEIBQgFWpBEncgEXMiECALakEHdyAJIBggD2pBEncgEnMiEWpBB3cgDHMiDCARakEJdyATcyISIAxqQQ13IAlzIg9zIgkgEGpBCXcgCiAIakEJdyAWcyITcyIWIAlqQQ13IAtzIhQgFmpBEncgEHMiEGpBB3cgBiAPIBJqQRJ3IBFzIhFqQQd3IBMgCmpBDXcgAnMiC3MiAiARakEJdyAOcyIOIAJqQQ13IAZzIhhzIgYgEGpBCXcgFSAXIAsgE2pBEncgCHMiCCAMakEHd3MiCyAIakEJd3MiE3MiFSAGakENdyAEcyIXIAsgBCANakEJdyAScyISIARqQQ13IApzIhkgEmpBEncgDXMiBGpBB3cgFHMiCiAEakEJdyAOcyIPIApqQQ13IAtzIhQgD2pBEncgBHMiDSACIBMgC2pBDXcgDHMiDCATakESdyAIcyIIakEHdyAZcyILakEHd3MiBCAXIBVqQRJ3IBBzIhAgCmpBB3cgCSAYIA5qQRJ3IBFzIg5qQQd3IAxzIgwgDmpBCXcgEnMiESAMakENdyAJcyIXcyIJIBBqQQl3IAsgCGpBCXcgFnMiEnMiEyAJakENdyAKcyIYIBNqQRJ3IBBzIhBqQQd3IAYgFyARakESdyAOcyIKakEHdyASIAtqQQ13IAJzIhdzIgIgCmpBCXcgD3MiDiACakENdyAGcyIWcyIGIAkgFiAOakESdyAKcyIWakEHdyAVIBQgFyASakESdyAIcyIIIAxqQQd3cyIKIAhqQQl3cyISIApqQQ13IAxzIg9zIgwgFmpBCXcgBCANakEJdyARcyIRcyIVIAxqQQ13IAlzIhQgFWpBEncgFnMiCWpBB3cgAiAPIBJqQRJ3IAhzIghqQQd3IBEgBGpBDXcgC3MiD3MiCyAIakEJdyATcyITIAtqQQ13IAJzIhdzIhZqNgIEIAAgACgCCCAWIAlqQQl3IAogDyARakESdyANcyIRakEHdyAYcyICIBFqQQl3IA5zIg5zIg9qNgIIIAAgACgCDCAPIBZqQQ13IAZzIg1qNgIMIAAgACgCECAGIBBqQQl3IBJzIhIgDiACakENdyAKcyIYIBcgE2pBEncgCHMiCiAMakEHd3MiCCAKakEJd3MiFiAIakENdyAMcyIMajYCECAAIAAoAgAgDSAPakESdyAJc2o2AgAgACAAKAIUIAwgFmpBEncgCnNqNgIUIAAgACgCGCAIajYCGCAAIAAoAhwgFmo2AhwgACAAKAIgIBIgBmpBDXcgBHMiCSAYIA5qQRJ3IBFzIgYgC2pBB3dzIgogBmpBCXcgFXMiBGo2AiAgACAAKAIkIAQgCmpBDXcgC3MiC2o2AiQgACAAKAIoIAsgBGpBEncgBnNqNgIoIAAgACgCLCAKajYCLCAAIAAoAjAgCSASakESdyAQcyIGIAJqQQd3IBRzIgtqNgIwIAAgACgCNCALIAZqQQl3IBNzIgpqNgI0IAAgACgCOCAKIAtqQQ13IAJzIgJqNgI4IAAgACgCPCACIApqQRJ3IAZzajYCPAtyAwF/AX4CfwJAIAJFDQBBACgCiAgiAyAAIAGtIgQgAyAAQQd0IgUgAmxqIgMgAyAFIAFsaiIGEAIgAkEBRg0AIAJBf2ohASAFIQIDQEEAKAKICCACaiAAIAQgAyAGEAIgAiAFaiECIAFBf2oiAQ0ACwsL\";\n    var hash$3 = \"d96fb75f\";\n    var wasmJson$3 = {\n    \tname: name$3,\n    \tdata: data$3,\n    \thash: hash$3\n    };\n\n    function scryptInternal(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { costFactor, blockSize, parallelism, hashLength, } = options;\n            const SHA256Hasher = createSHA256();\n            const blockData = yield pbkdf2({\n                password: options.password,\n                salt: options.salt,\n                iterations: 1,\n                hashLength: 128 * blockSize * parallelism,\n                hashFunction: SHA256Hasher,\n                outputType: 'binary',\n            });\n            const scryptInterface = yield WASMInterface(wasmJson$3, 0);\n            // last block is for storing the temporary vectors\n            const VSize = 128 * blockSize * costFactor;\n            const XYSize = 256 * blockSize;\n            scryptInterface.setMemorySize(blockData.length + VSize + XYSize);\n            scryptInterface.writeMemory(blockData, 0);\n            // mix blocks\n            scryptInterface.getExports().scrypt(blockSize, costFactor, parallelism);\n            const expensiveSalt = scryptInterface\n                .getMemory()\n                .subarray(0, 128 * blockSize * parallelism);\n            const outputData = yield pbkdf2({\n                password: options.password,\n                salt: expensiveSalt,\n                iterations: 1,\n                hashLength,\n                hashFunction: SHA256Hasher,\n                outputType: 'binary',\n            });\n            if (options.outputType === 'hex') {\n                const digestChars = new Uint8Array(hashLength * 2);\n                return getDigestHex(digestChars, outputData, hashLength);\n            }\n            // return binary format\n            return outputData;\n        });\n    }\n    // eslint-disable-next-line no-bitwise\n    const isPowerOfTwo = (v) => v && !(v & (v - 1));\n    const validateOptions$1 = (options) => {\n        if (!options || typeof options !== 'object') {\n            throw new Error('Invalid options parameter. It requires an object.');\n        }\n        if (!Number.isInteger(options.blockSize) || options.blockSize < 1) {\n            throw new Error('Block size should be a positive number');\n        }\n        if (!Number.isInteger(options.costFactor)\n            || options.costFactor < 2\n            || !isPowerOfTwo(options.costFactor)) {\n            throw new Error('Cost factor should be a power of 2, greater than 1');\n        }\n        if (!Number.isInteger(options.parallelism) || options.parallelism < 1) {\n            throw new Error('Parallelism should be a positive number');\n        }\n        if (!Number.isInteger(options.hashLength) || options.hashLength < 1) {\n            throw new Error('Hash length should be a positive number.');\n        }\n        if (options.outputType === undefined) {\n            options.outputType = 'hex';\n        }\n        if (!['hex', 'binary'].includes(options.outputType)) {\n            throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`);\n        }\n    };\n    /**\n     * Calculates hash using the scrypt password-based key derivation function\n     * @returns Computed hash as a hexadecimal string or as\n     *          Uint8Array depending on the outputType option\n     */\n    function scrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            validateOptions$1(options);\n            return scryptInternal(options);\n        });\n    }\n\n    var name$2 = \"bcrypt\";\n    var data$2 = \"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\";\n    var hash$2 = \"9f4c7b9e\";\n    var wasmJson$2 = {\n    \tname: name$2,\n    \tdata: data$2,\n    \thash: hash$2\n    };\n\n    function bcryptInternal(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { costFactor, password, salt } = options;\n            const bcryptInterface = yield WASMInterface(wasmJson$2, 0);\n            bcryptInterface.writeMemory(getUInt8Buffer(salt), 0);\n            const passwordBuffer = getUInt8Buffer(password);\n            bcryptInterface.writeMemory(passwordBuffer, 16);\n            const shouldEncode = options.outputType === 'encoded' ? 1 : 0;\n            bcryptInterface.getExports().bcrypt(passwordBuffer.length, costFactor, shouldEncode);\n            const memory = bcryptInterface.getMemory();\n            if (options.outputType === 'encoded') {\n                return intArrayToString(memory, 60);\n            }\n            if (options.outputType === 'hex') {\n                const digestChars = new Uint8Array(24 * 2);\n                return getDigestHex(digestChars, memory, 24);\n            }\n            // return binary format\n            // the data is copied to allow GC of the original memory buffer\n            return memory.slice(0, 24);\n        });\n    }\n    const validateOptions = (options) => {\n        if (!options || typeof options !== 'object') {\n            throw new Error('Invalid options parameter. It requires an object.');\n        }\n        if (!Number.isInteger(options.costFactor) || options.costFactor < 4 || options.costFactor > 31) {\n            throw new Error('Cost factor should be a number between 4 and 31');\n        }\n        options.password = getUInt8Buffer(options.password);\n        if (options.password.length < 1) {\n            throw new Error('Password should be at least 1 byte long');\n        }\n        if (options.password.length > 72) {\n            throw new Error('Password should be at most 72 bytes long');\n        }\n        options.salt = getUInt8Buffer(options.salt);\n        if (options.salt.length !== 16) {\n            throw new Error('Salt should be 16 bytes long');\n        }\n        if (options.outputType === undefined) {\n            options.outputType = 'encoded';\n        }\n        if (!['hex', 'binary', 'encoded'].includes(options.outputType)) {\n            throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`);\n        }\n    };\n    /**\n     * Calculates hash using the bcrypt password-hashing function\n     * @returns Computed hash\n     */\n    function bcrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            validateOptions(options);\n            return bcryptInternal(options);\n        });\n    }\n    const validateHashCharacters = (hash) => {\n        if (!/^\\$2[axyb]\\$[0-3][0-9]\\$[./A-Za-z0-9]{53}$/.test(hash)) {\n            return false;\n        }\n        if (hash[4] === '0' && parseInt(hash[5], 10) < 4) {\n            return false;\n        }\n        if (hash[4] === '3' && parseInt(hash[5], 10) > 1) {\n            return false;\n        }\n        return true;\n    };\n    const validateVerifyOptions = (options) => {\n        if (!options || typeof options !== 'object') {\n            throw new Error('Invalid options parameter. It requires an object.');\n        }\n        if (options.hash === undefined || typeof options.hash !== 'string') {\n            throw new Error('Hash should be specified');\n        }\n        if (options.hash.length !== 60) {\n            throw new Error('Hash should be 60 bytes long');\n        }\n        if (!validateHashCharacters(options.hash)) {\n            throw new Error('Invalid hash');\n        }\n        options.password = getUInt8Buffer(options.password);\n        if (options.password.length < 1) {\n            throw new Error('Password should be at least 1 byte long');\n        }\n        if (options.password.length > 72) {\n            throw new Error('Password should be at most 72 bytes long');\n        }\n    };\n    /**\n     * Verifies password using bcrypt password-hashing function\n     * @returns True if the encoded hash matches the password\n     */\n    function bcryptVerify(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            validateVerifyOptions(options);\n            const { hash, password } = options;\n            const bcryptInterface = yield WASMInterface(wasmJson$2, 0);\n            bcryptInterface.writeMemory(getUInt8Buffer(hash), 0);\n            const passwordBuffer = getUInt8Buffer(password);\n            bcryptInterface.writeMemory(passwordBuffer, 60);\n            return !!bcryptInterface.getExports().bcrypt_verify(passwordBuffer.length);\n        });\n    }\n\n    var name$1 = \"whirlpool\";\n    var data$1 = \"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\";\n    var hash$1 = \"358808f8\";\n    var wasmJson$1 = {\n    \tname: name$1,\n    \tdata: data$1,\n    \thash: hash$1\n    };\n\n    const mutex$1 = new Mutex();\n    let wasmCache$1 = null;\n    /**\n     * Calculates Whirlpool hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function whirlpool(data) {\n        if (wasmCache$1 === null) {\n            return lockedCreate(mutex$1, wasmJson$1, 64)\n                .then((wasm) => {\n                wasmCache$1 = wasm;\n                return wasmCache$1.calculate(data);\n            });\n        }\n        try {\n            const hash = wasmCache$1.calculate(data);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new Whirlpool hash instance\n     */\n    function createWhirlpool() {\n        return WASMInterface(wasmJson$1, 64).then((wasm) => {\n            wasm.init();\n            const obj = {\n                init: () => { wasm.init(); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 64,\n                digestSize: 64,\n            };\n            return obj;\n        });\n    }\n\n    var name = \"sm3\";\n    var data = \"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\";\n    var hash = \"6e6f46ad\";\n    var wasmJson = {\n    \tname: name,\n    \tdata: data,\n    \thash: hash\n    };\n\n    const mutex = new Mutex();\n    let wasmCache = null;\n    /**\n     * Calculates SM3 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function sm3(data) {\n        if (wasmCache === null) {\n            return lockedCreate(mutex, wasmJson, 32)\n                .then((wasm) => {\n                wasmCache = wasm;\n                return wasmCache.calculate(data);\n            });\n        }\n        try {\n            const hash = wasmCache.calculate(data);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new SM3 hash instance\n     */\n    function createSM3() {\n        return WASMInterface(wasmJson, 32).then((wasm) => {\n            wasm.init();\n            const obj = {\n                init: () => { wasm.init(); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 64,\n                digestSize: 32,\n            };\n            return obj;\n        });\n    }\n\n    exports.adler32 = adler32;\n    exports.argon2Verify = argon2Verify;\n    exports.argon2d = argon2d;\n    exports.argon2i = argon2i;\n    exports.argon2id = argon2id;\n    exports.bcrypt = bcrypt;\n    exports.bcryptVerify = bcryptVerify;\n    exports.blake2b = blake2b;\n    exports.blake2s = blake2s;\n    exports.blake3 = blake3;\n    exports.crc32 = crc32;\n    exports.crc32c = crc32c;\n    exports.createAdler32 = createAdler32;\n    exports.createBLAKE2b = createBLAKE2b;\n    exports.createBLAKE2s = createBLAKE2s;\n    exports.createBLAKE3 = createBLAKE3;\n    exports.createCRC32 = createCRC32;\n    exports.createCRC32C = createCRC32C;\n    exports.createHMAC = createHMAC;\n    exports.createKeccak = createKeccak;\n    exports.createMD4 = createMD4;\n    exports.createMD5 = createMD5;\n    exports.createRIPEMD160 = createRIPEMD160;\n    exports.createSHA1 = createSHA1;\n    exports.createSHA224 = createSHA224;\n    exports.createSHA256 = createSHA256;\n    exports.createSHA3 = createSHA3;\n    exports.createSHA384 = createSHA384;\n    exports.createSHA512 = createSHA512;\n    exports.createSM3 = createSM3;\n    exports.createWhirlpool = createWhirlpool;\n    exports.createXXHash128 = createXXHash128;\n    exports.createXXHash3 = createXXHash3;\n    exports.createXXHash32 = createXXHash32;\n    exports.createXXHash64 = createXXHash64;\n    exports.keccak = keccak;\n    exports.md4 = md4;\n    exports.md5 = md5;\n    exports.pbkdf2 = pbkdf2;\n    exports.ripemd160 = ripemd160;\n    exports.scrypt = scrypt;\n    exports.sha1 = sha1;\n    exports.sha224 = sha224;\n    exports.sha256 = sha256;\n    exports.sha3 = sha3;\n    exports.sha384 = sha384;\n    exports.sha512 = sha512;\n    exports.sm3 = sm3;\n    exports.whirlpool = whirlpool;\n    exports.xxhash128 = xxhash128;\n    exports.xxhash3 = xxhash3;\n    exports.xxhash32 = xxhash32;\n    exports.xxhash64 = xxhash64;\n\n    Object.defineProperty(exports, '__esModule', { value: true });\n\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", "const fetch = require('cross-fetch');\r\nconst hash =  require('hash-wasm');\r\n\r\n\r\nconst buffer = require('buffer/').Buffer;\r\n\r\nmodule.exports = class IonProofOfWork {\r\n    static randomHexString() {\r\n        const size = Math.floor(Math.random() * Math.floor(500));\r\n        const randomString = [...Array(size)].map(() => Math.floor(Math.random() * 16).toString(16)).join('');\r\n        return buffer.from(randomString).toString('hex');\r\n    }\r\n\r\n    static async submitIonRequestUntilSuccess(getChallengeUri, solveChallengeUri, requestBody) {\r\n        let result;\r\n        while (result === undefined) {\r\n            result = await this.submitIonRequest(getChallengeUri, solveChallengeUri, requestBody);\r\n        };\r\n    };\r\n\r\n    static async submitIonRequest(getChallengeUri, solveChallengeUri, requestBody) {\r\n        console.log(`Getting challenge from: ${getChallengeUri}`);\r\n        const getChallengeResponse = await fetch(getChallengeUri, {\r\n            mode: 'cors'\r\n        });\r\n        if (!getChallengeResponse.ok) {\r\n            throw new Error('Get challenge service not available')\r\n        }\r\n        const challengeBody = await getChallengeResponse.json();\r\n        console.log(challengeBody);\r\n\r\n        const challengeNonce = challengeBody.challengeNonce;\r\n        const largestAllowedHash = challengeBody.largestAllowedHash;\r\n        const validDuration = challengeBody.validDurationInMinutes * 60 * 1000;\r\n    \r\n        let answerHash = '';\r\n        let answerNonce = '';\r\n\r\n        console.log(`Solving for body:\\n${requestBody}`);\r\n        const startTime = Date.now();\r\n        do {\r\n            answerNonce = this.randomHexString();\r\n            answerHash = await hash.argon2id({\r\n                password: buffer.from(answerNonce, 'hex').toString() + requestBody,\r\n                salt: buffer.from(challengeNonce, 'hex'),\r\n                parallelism: 1,\r\n                iterations: 1,\r\n                memorySize: 1000,\r\n                hashLength: 32, // output size = 32 bytes\r\n                outputType: 'hex',\r\n            });\r\n            console.log(answerHash);\r\n            console.log(largestAllowedHash);\r\n        } while (answerHash > largestAllowedHash && Date.now() - startTime < validDuration);\r\n\r\n        if (Date.now() - startTime >  validDuration) {\r\n            return;\r\n        }\r\n\r\n        console.log('3')\r\n        const response = await fetch(solveChallengeUri, {\r\n            method: 'POST',\r\n            mode: 'cors',\r\n            body: requestBody,\r\n            headers: {\r\n                'Challenge-Nonce': challengeNonce,\r\n                'Answer-Nonce': answerNonce,\r\n                'Content-Type': 'application/json'\r\n            }\r\n        });\r\n\r\n        if (response.status >= 500) {\r\n            console.log(`Unexpected 5xx response: ${await response.text()}`);\r\n        } else if (response.status >= 400) {\r\n            // 400 means bad request, so should retry with a new challenge\r\n            console.log(`Bed request: ${await response.text()}`);\r\n            console.log('Retrying with new challenge and difficulty');\r\n        } else if (response.status >= 300) {\r\n            console.log(`Unexpected 3xx response: ${await response.text()}`);\r\n        } else {\r\n            //success\r\n            console.log(`Successful registration`);\r\n            const responseText = await response.text();\r\n            console.log(responseText);\r\n            return responseText;\r\n        };\r\n    }\r\n}\r\n", "(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n  var i, r = new Float64Array(16);\n  if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n  return r;\n};\n\n//  Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n    gf1 = gf([1]),\n    _121665 = gf([0xdb41, 1]),\n    D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n    D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n    X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n    Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n    I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n  x[i]   = (h >> 24) & 0xff;\n  x[i+1] = (h >> 16) & 0xff;\n  x[i+2] = (h >>  8) & 0xff;\n  x[i+3] = h & 0xff;\n  x[i+4] = (l >> 24)  & 0xff;\n  x[i+5] = (l >> 16)  & 0xff;\n  x[i+6] = (l >>  8)  & 0xff;\n  x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n  var i,d = 0;\n  for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n  return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n  return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n  return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n  var j0  = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n      j1  = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n      j2  = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n      j3  = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n      j4  = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n      j5  = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n      j6  = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n      j7  = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n      j8  = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n      j9  = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n      j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n      j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n      j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n      j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n      j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n      j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n  var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n      x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n      x15 = j15, u;\n\n  for (var i = 0; i < 20; i += 2) {\n    u = x0 + x12 | 0;\n    x4 ^= u<<7 | u>>>(32-7);\n    u = x4 + x0 | 0;\n    x8 ^= u<<9 | u>>>(32-9);\n    u = x8 + x4 | 0;\n    x12 ^= u<<13 | u>>>(32-13);\n    u = x12 + x8 | 0;\n    x0 ^= u<<18 | u>>>(32-18);\n\n    u = x5 + x1 | 0;\n    x9 ^= u<<7 | u>>>(32-7);\n    u = x9 + x5 | 0;\n    x13 ^= u<<9 | u>>>(32-9);\n    u = x13 + x9 | 0;\n    x1 ^= u<<13 | u>>>(32-13);\n    u = x1 + x13 | 0;\n    x5 ^= u<<18 | u>>>(32-18);\n\n    u = x10 + x6 | 0;\n    x14 ^= u<<7 | u>>>(32-7);\n    u = x14 + x10 | 0;\n    x2 ^= u<<9 | u>>>(32-9);\n    u = x2 + x14 | 0;\n    x6 ^= u<<13 | u>>>(32-13);\n    u = x6 + x2 | 0;\n    x10 ^= u<<18 | u>>>(32-18);\n\n    u = x15 + x11 | 0;\n    x3 ^= u<<7 | u>>>(32-7);\n    u = x3 + x15 | 0;\n    x7 ^= u<<9 | u>>>(32-9);\n    u = x7 + x3 | 0;\n    x11 ^= u<<13 | u>>>(32-13);\n    u = x11 + x7 | 0;\n    x15 ^= u<<18 | u>>>(32-18);\n\n    u = x0 + x3 | 0;\n    x1 ^= u<<7 | u>>>(32-7);\n    u = x1 + x0 | 0;\n    x2 ^= u<<9 | u>>>(32-9);\n    u = x2 + x1 | 0;\n    x3 ^= u<<13 | u>>>(32-13);\n    u = x3 + x2 | 0;\n    x0 ^= u<<18 | u>>>(32-18);\n\n    u = x5 + x4 | 0;\n    x6 ^= u<<7 | u>>>(32-7);\n    u = x6 + x5 | 0;\n    x7 ^= u<<9 | u>>>(32-9);\n    u = x7 + x6 | 0;\n    x4 ^= u<<13 | u>>>(32-13);\n    u = x4 + x7 | 0;\n    x5 ^= u<<18 | u>>>(32-18);\n\n    u = x10 + x9 | 0;\n    x11 ^= u<<7 | u>>>(32-7);\n    u = x11 + x10 | 0;\n    x8 ^= u<<9 | u>>>(32-9);\n    u = x8 + x11 | 0;\n    x9 ^= u<<13 | u>>>(32-13);\n    u = x9 + x8 | 0;\n    x10 ^= u<<18 | u>>>(32-18);\n\n    u = x15 + x14 | 0;\n    x12 ^= u<<7 | u>>>(32-7);\n    u = x12 + x15 | 0;\n    x13 ^= u<<9 | u>>>(32-9);\n    u = x13 + x12 | 0;\n    x14 ^= u<<13 | u>>>(32-13);\n    u = x14 + x13 | 0;\n    x15 ^= u<<18 | u>>>(32-18);\n  }\n   x0 =  x0 +  j0 | 0;\n   x1 =  x1 +  j1 | 0;\n   x2 =  x2 +  j2 | 0;\n   x3 =  x3 +  j3 | 0;\n   x4 =  x4 +  j4 | 0;\n   x5 =  x5 +  j5 | 0;\n   x6 =  x6 +  j6 | 0;\n   x7 =  x7 +  j7 | 0;\n   x8 =  x8 +  j8 | 0;\n   x9 =  x9 +  j9 | 0;\n  x10 = x10 + j10 | 0;\n  x11 = x11 + j11 | 0;\n  x12 = x12 + j12 | 0;\n  x13 = x13 + j13 | 0;\n  x14 = x14 + j14 | 0;\n  x15 = x15 + j15 | 0;\n\n  o[ 0] = x0 >>>  0 & 0xff;\n  o[ 1] = x0 >>>  8 & 0xff;\n  o[ 2] = x0 >>> 16 & 0xff;\n  o[ 3] = x0 >>> 24 & 0xff;\n\n  o[ 4] = x1 >>>  0 & 0xff;\n  o[ 5] = x1 >>>  8 & 0xff;\n  o[ 6] = x1 >>> 16 & 0xff;\n  o[ 7] = x1 >>> 24 & 0xff;\n\n  o[ 8] = x2 >>>  0 & 0xff;\n  o[ 9] = x2 >>>  8 & 0xff;\n  o[10] = x2 >>> 16 & 0xff;\n  o[11] = x2 >>> 24 & 0xff;\n\n  o[12] = x3 >>>  0 & 0xff;\n  o[13] = x3 >>>  8 & 0xff;\n  o[14] = x3 >>> 16 & 0xff;\n  o[15] = x3 >>> 24 & 0xff;\n\n  o[16] = x4 >>>  0 & 0xff;\n  o[17] = x4 >>>  8 & 0xff;\n  o[18] = x4 >>> 16 & 0xff;\n  o[19] = x4 >>> 24 & 0xff;\n\n  o[20] = x5 >>>  0 & 0xff;\n  o[21] = x5 >>>  8 & 0xff;\n  o[22] = x5 >>> 16 & 0xff;\n  o[23] = x5 >>> 24 & 0xff;\n\n  o[24] = x6 >>>  0 & 0xff;\n  o[25] = x6 >>>  8 & 0xff;\n  o[26] = x6 >>> 16 & 0xff;\n  o[27] = x6 >>> 24 & 0xff;\n\n  o[28] = x7 >>>  0 & 0xff;\n  o[29] = x7 >>>  8 & 0xff;\n  o[30] = x7 >>> 16 & 0xff;\n  o[31] = x7 >>> 24 & 0xff;\n\n  o[32] = x8 >>>  0 & 0xff;\n  o[33] = x8 >>>  8 & 0xff;\n  o[34] = x8 >>> 16 & 0xff;\n  o[35] = x8 >>> 24 & 0xff;\n\n  o[36] = x9 >>>  0 & 0xff;\n  o[37] = x9 >>>  8 & 0xff;\n  o[38] = x9 >>> 16 & 0xff;\n  o[39] = x9 >>> 24 & 0xff;\n\n  o[40] = x10 >>>  0 & 0xff;\n  o[41] = x10 >>>  8 & 0xff;\n  o[42] = x10 >>> 16 & 0xff;\n  o[43] = x10 >>> 24 & 0xff;\n\n  o[44] = x11 >>>  0 & 0xff;\n  o[45] = x11 >>>  8 & 0xff;\n  o[46] = x11 >>> 16 & 0xff;\n  o[47] = x11 >>> 24 & 0xff;\n\n  o[48] = x12 >>>  0 & 0xff;\n  o[49] = x12 >>>  8 & 0xff;\n  o[50] = x12 >>> 16 & 0xff;\n  o[51] = x12 >>> 24 & 0xff;\n\n  o[52] = x13 >>>  0 & 0xff;\n  o[53] = x13 >>>  8 & 0xff;\n  o[54] = x13 >>> 16 & 0xff;\n  o[55] = x13 >>> 24 & 0xff;\n\n  o[56] = x14 >>>  0 & 0xff;\n  o[57] = x14 >>>  8 & 0xff;\n  o[58] = x14 >>> 16 & 0xff;\n  o[59] = x14 >>> 24 & 0xff;\n\n  o[60] = x15 >>>  0 & 0xff;\n  o[61] = x15 >>>  8 & 0xff;\n  o[62] = x15 >>> 16 & 0xff;\n  o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n  var j0  = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n      j1  = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n      j2  = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n      j3  = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n      j4  = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n      j5  = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n      j6  = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n      j7  = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n      j8  = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n      j9  = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n      j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n      j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n      j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n      j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n      j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n      j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n  var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n      x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n      x15 = j15, u;\n\n  for (var i = 0; i < 20; i += 2) {\n    u = x0 + x12 | 0;\n    x4 ^= u<<7 | u>>>(32-7);\n    u = x4 + x0 | 0;\n    x8 ^= u<<9 | u>>>(32-9);\n    u = x8 + x4 | 0;\n    x12 ^= u<<13 | u>>>(32-13);\n    u = x12 + x8 | 0;\n    x0 ^= u<<18 | u>>>(32-18);\n\n    u = x5 + x1 | 0;\n    x9 ^= u<<7 | u>>>(32-7);\n    u = x9 + x5 | 0;\n    x13 ^= u<<9 | u>>>(32-9);\n    u = x13 + x9 | 0;\n    x1 ^= u<<13 | u>>>(32-13);\n    u = x1 + x13 | 0;\n    x5 ^= u<<18 | u>>>(32-18);\n\n    u = x10 + x6 | 0;\n    x14 ^= u<<7 | u>>>(32-7);\n    u = x14 + x10 | 0;\n    x2 ^= u<<9 | u>>>(32-9);\n    u = x2 + x14 | 0;\n    x6 ^= u<<13 | u>>>(32-13);\n    u = x6 + x2 | 0;\n    x10 ^= u<<18 | u>>>(32-18);\n\n    u = x15 + x11 | 0;\n    x3 ^= u<<7 | u>>>(32-7);\n    u = x3 + x15 | 0;\n    x7 ^= u<<9 | u>>>(32-9);\n    u = x7 + x3 | 0;\n    x11 ^= u<<13 | u>>>(32-13);\n    u = x11 + x7 | 0;\n    x15 ^= u<<18 | u>>>(32-18);\n\n    u = x0 + x3 | 0;\n    x1 ^= u<<7 | u>>>(32-7);\n    u = x1 + x0 | 0;\n    x2 ^= u<<9 | u>>>(32-9);\n    u = x2 + x1 | 0;\n    x3 ^= u<<13 | u>>>(32-13);\n    u = x3 + x2 | 0;\n    x0 ^= u<<18 | u>>>(32-18);\n\n    u = x5 + x4 | 0;\n    x6 ^= u<<7 | u>>>(32-7);\n    u = x6 + x5 | 0;\n    x7 ^= u<<9 | u>>>(32-9);\n    u = x7 + x6 | 0;\n    x4 ^= u<<13 | u>>>(32-13);\n    u = x4 + x7 | 0;\n    x5 ^= u<<18 | u>>>(32-18);\n\n    u = x10 + x9 | 0;\n    x11 ^= u<<7 | u>>>(32-7);\n    u = x11 + x10 | 0;\n    x8 ^= u<<9 | u>>>(32-9);\n    u = x8 + x11 | 0;\n    x9 ^= u<<13 | u>>>(32-13);\n    u = x9 + x8 | 0;\n    x10 ^= u<<18 | u>>>(32-18);\n\n    u = x15 + x14 | 0;\n    x12 ^= u<<7 | u>>>(32-7);\n    u = x12 + x15 | 0;\n    x13 ^= u<<9 | u>>>(32-9);\n    u = x13 + x12 | 0;\n    x14 ^= u<<13 | u>>>(32-13);\n    u = x14 + x13 | 0;\n    x15 ^= u<<18 | u>>>(32-18);\n  }\n\n  o[ 0] = x0 >>>  0 & 0xff;\n  o[ 1] = x0 >>>  8 & 0xff;\n  o[ 2] = x0 >>> 16 & 0xff;\n  o[ 3] = x0 >>> 24 & 0xff;\n\n  o[ 4] = x5 >>>  0 & 0xff;\n  o[ 5] = x5 >>>  8 & 0xff;\n  o[ 6] = x5 >>> 16 & 0xff;\n  o[ 7] = x5 >>> 24 & 0xff;\n\n  o[ 8] = x10 >>>  0 & 0xff;\n  o[ 9] = x10 >>>  8 & 0xff;\n  o[10] = x10 >>> 16 & 0xff;\n  o[11] = x10 >>> 24 & 0xff;\n\n  o[12] = x15 >>>  0 & 0xff;\n  o[13] = x15 >>>  8 & 0xff;\n  o[14] = x15 >>> 16 & 0xff;\n  o[15] = x15 >>> 24 & 0xff;\n\n  o[16] = x6 >>>  0 & 0xff;\n  o[17] = x6 >>>  8 & 0xff;\n  o[18] = x6 >>> 16 & 0xff;\n  o[19] = x6 >>> 24 & 0xff;\n\n  o[20] = x7 >>>  0 & 0xff;\n  o[21] = x7 >>>  8 & 0xff;\n  o[22] = x7 >>> 16 & 0xff;\n  o[23] = x7 >>> 24 & 0xff;\n\n  o[24] = x8 >>>  0 & 0xff;\n  o[25] = x8 >>>  8 & 0xff;\n  o[26] = x8 >>> 16 & 0xff;\n  o[27] = x8 >>> 24 & 0xff;\n\n  o[28] = x9 >>>  0 & 0xff;\n  o[29] = x9 >>>  8 & 0xff;\n  o[30] = x9 >>> 16 & 0xff;\n  o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n  core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n  core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n            // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n  var z = new Uint8Array(16), x = new Uint8Array(64);\n  var u, i;\n  for (i = 0; i < 16; i++) z[i] = 0;\n  for (i = 0; i < 8; i++) z[i] = n[i];\n  while (b >= 64) {\n    crypto_core_salsa20(x,z,k,sigma);\n    for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n    u = 1;\n    for (i = 8; i < 16; i++) {\n      u = u + (z[i] & 0xff) | 0;\n      z[i] = u & 0xff;\n      u >>>= 8;\n    }\n    b -= 64;\n    cpos += 64;\n    mpos += 64;\n  }\n  if (b > 0) {\n    crypto_core_salsa20(x,z,k,sigma);\n    for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n  }\n  return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n  var z = new Uint8Array(16), x = new Uint8Array(64);\n  var u, i;\n  for (i = 0; i < 16; i++) z[i] = 0;\n  for (i = 0; i < 8; i++) z[i] = n[i];\n  while (b >= 64) {\n    crypto_core_salsa20(x,z,k,sigma);\n    for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n    u = 1;\n    for (i = 8; i < 16; i++) {\n      u = u + (z[i] & 0xff) | 0;\n      z[i] = u & 0xff;\n      u >>>= 8;\n    }\n    b -= 64;\n    cpos += 64;\n  }\n  if (b > 0) {\n    crypto_core_salsa20(x,z,k,sigma);\n    for (i = 0; i < b; i++) c[cpos+i] = x[i];\n  }\n  return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n  var s = new Uint8Array(32);\n  crypto_core_hsalsa20(s,n,k,sigma);\n  var sn = new Uint8Array(8);\n  for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n  return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n  var s = new Uint8Array(32);\n  crypto_core_hsalsa20(s,n,k,sigma);\n  var sn = new Uint8Array(8);\n  for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n  return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n  this.buffer = new Uint8Array(16);\n  this.r = new Uint16Array(10);\n  this.h = new Uint16Array(10);\n  this.pad = new Uint16Array(8);\n  this.leftover = 0;\n  this.fin = 0;\n\n  var t0, t1, t2, t3, t4, t5, t6, t7;\n\n  t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0                     ) & 0x1fff;\n  t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 <<  3)) & 0x1fff;\n  t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 <<  6)) & 0x1f03;\n  t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>>  7) | (t3 <<  9)) & 0x1fff;\n  t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>>  4) | (t4 << 12)) & 0x00ff;\n  this.r[5] = ((t4 >>>  1)) & 0x1ffe;\n  t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 <<  2)) & 0x1fff;\n  t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 <<  5)) & 0x1f81;\n  t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>>  8) | (t7 <<  8)) & 0x1fff;\n  this.r[9] = ((t7 >>>  5)) & 0x007f;\n\n  this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n  this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n  this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n  this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n  this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n  this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n  this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n  this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n  var hibit = this.fin ? 0 : (1 << 11);\n  var t0, t1, t2, t3, t4, t5, t6, t7, c;\n  var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n  var h0 = this.h[0],\n      h1 = this.h[1],\n      h2 = this.h[2],\n      h3 = this.h[3],\n      h4 = this.h[4],\n      h5 = this.h[5],\n      h6 = this.h[6],\n      h7 = this.h[7],\n      h8 = this.h[8],\n      h9 = this.h[9];\n\n  var r0 = this.r[0],\n      r1 = this.r[1],\n      r2 = this.r[2],\n      r3 = this.r[3],\n      r4 = this.r[4],\n      r5 = this.r[5],\n      r6 = this.r[6],\n      r7 = this.r[7],\n      r8 = this.r[8],\n      r9 = this.r[9];\n\n  while (bytes >= 16) {\n    t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0                     ) & 0x1fff;\n    t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 <<  3)) & 0x1fff;\n    t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 <<  6)) & 0x1fff;\n    t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>>  7) | (t3 <<  9)) & 0x1fff;\n    t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>>  4) | (t4 << 12)) & 0x1fff;\n    h5 += ((t4 >>>  1)) & 0x1fff;\n    t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 <<  2)) & 0x1fff;\n    t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 <<  5)) & 0x1fff;\n    t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>>  8) | (t7 <<  8)) & 0x1fff;\n    h9 += ((t7 >>> 5)) | hibit;\n\n    c = 0;\n\n    d0 = c;\n    d0 += h0 * r0;\n    d0 += h1 * (5 * r9);\n    d0 += h2 * (5 * r8);\n    d0 += h3 * (5 * r7);\n    d0 += h4 * (5 * r6);\n    c = (d0 >>> 13); d0 &= 0x1fff;\n    d0 += h5 * (5 * r5);\n    d0 += h6 * (5 * r4);\n    d0 += h7 * (5 * r3);\n    d0 += h8 * (5 * r2);\n    d0 += h9 * (5 * r1);\n    c += (d0 >>> 13); d0 &= 0x1fff;\n\n    d1 = c;\n    d1 += h0 * r1;\n    d1 += h1 * r0;\n    d1 += h2 * (5 * r9);\n    d1 += h3 * (5 * r8);\n    d1 += h4 * (5 * r7);\n    c = (d1 >>> 13); d1 &= 0x1fff;\n    d1 += h5 * (5 * r6);\n    d1 += h6 * (5 * r5);\n    d1 += h7 * (5 * r4);\n    d1 += h8 * (5 * r3);\n    d1 += h9 * (5 * r2);\n    c += (d1 >>> 13); d1 &= 0x1fff;\n\n    d2 = c;\n    d2 += h0 * r2;\n    d2 += h1 * r1;\n    d2 += h2 * r0;\n    d2 += h3 * (5 * r9);\n    d2 += h4 * (5 * r8);\n    c = (d2 >>> 13); d2 &= 0x1fff;\n    d2 += h5 * (5 * r7);\n    d2 += h6 * (5 * r6);\n    d2 += h7 * (5 * r5);\n    d2 += h8 * (5 * r4);\n    d2 += h9 * (5 * r3);\n    c += (d2 >>> 13); d2 &= 0x1fff;\n\n    d3 = c;\n    d3 += h0 * r3;\n    d3 += h1 * r2;\n    d3 += h2 * r1;\n    d3 += h3 * r0;\n    d3 += h4 * (5 * r9);\n    c = (d3 >>> 13); d3 &= 0x1fff;\n    d3 += h5 * (5 * r8);\n    d3 += h6 * (5 * r7);\n    d3 += h7 * (5 * r6);\n    d3 += h8 * (5 * r5);\n    d3 += h9 * (5 * r4);\n    c += (d3 >>> 13); d3 &= 0x1fff;\n\n    d4 = c;\n    d4 += h0 * r4;\n    d4 += h1 * r3;\n    d4 += h2 * r2;\n    d4 += h3 * r1;\n    d4 += h4 * r0;\n    c = (d4 >>> 13); d4 &= 0x1fff;\n    d4 += h5 * (5 * r9);\n    d4 += h6 * (5 * r8);\n    d4 += h7 * (5 * r7);\n    d4 += h8 * (5 * r6);\n    d4 += h9 * (5 * r5);\n    c += (d4 >>> 13); d4 &= 0x1fff;\n\n    d5 = c;\n    d5 += h0 * r5;\n    d5 += h1 * r4;\n    d5 += h2 * r3;\n    d5 += h3 * r2;\n    d5 += h4 * r1;\n    c = (d5 >>> 13); d5 &= 0x1fff;\n    d5 += h5 * r0;\n    d5 += h6 * (5 * r9);\n    d5 += h7 * (5 * r8);\n    d5 += h8 * (5 * r7);\n    d5 += h9 * (5 * r6);\n    c += (d5 >>> 13); d5 &= 0x1fff;\n\n    d6 = c;\n    d6 += h0 * r6;\n    d6 += h1 * r5;\n    d6 += h2 * r4;\n    d6 += h3 * r3;\n    d6 += h4 * r2;\n    c = (d6 >>> 13); d6 &= 0x1fff;\n    d6 += h5 * r1;\n    d6 += h6 * r0;\n    d6 += h7 * (5 * r9);\n    d6 += h8 * (5 * r8);\n    d6 += h9 * (5 * r7);\n    c += (d6 >>> 13); d6 &= 0x1fff;\n\n    d7 = c;\n    d7 += h0 * r7;\n    d7 += h1 * r6;\n    d7 += h2 * r5;\n    d7 += h3 * r4;\n    d7 += h4 * r3;\n    c = (d7 >>> 13); d7 &= 0x1fff;\n    d7 += h5 * r2;\n    d7 += h6 * r1;\n    d7 += h7 * r0;\n    d7 += h8 * (5 * r9);\n    d7 += h9 * (5 * r8);\n    c += (d7 >>> 13); d7 &= 0x1fff;\n\n    d8 = c;\n    d8 += h0 * r8;\n    d8 += h1 * r7;\n    d8 += h2 * r6;\n    d8 += h3 * r5;\n    d8 += h4 * r4;\n    c = (d8 >>> 13); d8 &= 0x1fff;\n    d8 += h5 * r3;\n    d8 += h6 * r2;\n    d8 += h7 * r1;\n    d8 += h8 * r0;\n    d8 += h9 * (5 * r9);\n    c += (d8 >>> 13); d8 &= 0x1fff;\n\n    d9 = c;\n    d9 += h0 * r9;\n    d9 += h1 * r8;\n    d9 += h2 * r7;\n    d9 += h3 * r6;\n    d9 += h4 * r5;\n    c = (d9 >>> 13); d9 &= 0x1fff;\n    d9 += h5 * r4;\n    d9 += h6 * r3;\n    d9 += h7 * r2;\n    d9 += h8 * r1;\n    d9 += h9 * r0;\n    c += (d9 >>> 13); 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    h0 = d0;\n    h1 = d1;\n    h2 = d2;\n    h3 = d3;\n    h4 = d4;\n    h5 = d5;\n    h6 = d6;\n    h7 = d7;\n    h8 = d8;\n    h9 = d9;\n\n    mpos += 16;\n    bytes -= 16;\n  }\n  this.h[0] = h0;\n  this.h[1] = h1;\n  this.h[2] = h2;\n  this.h[3] = h3;\n  this.h[4] = h4;\n  this.h[5] = h5;\n  this.h[6] = h6;\n  this.h[7] = h7;\n  this.h[8] = h8;\n  this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n  var g = new Uint16Array(10);\n  var c, mask, f, i;\n\n  if (this.leftover) {\n    i = this.leftover;\n    this.buffer[i++] = 1;\n    for (; i < 16; i++) this.buffer[i] = 0;\n    this.fin = 1;\n    this.blocks(this.buffer, 0, 16);\n  }\n\n  c = this.h[1] >>> 13;\n  this.h[1] &= 0x1fff;\n  for (i = 2; i < 10; i++) {\n    this.h[i] += c;\n    c = this.h[i] >>> 13;\n    this.h[i] &= 0x1fff;\n  }\n  this.h[0] += (c * 5);\n  c = this.h[0] >>> 13;\n  this.h[0] &= 0x1fff;\n  this.h[1] += c;\n  c = this.h[1] >>> 13;\n  this.h[1] &= 0x1fff;\n  this.h[2] += c;\n\n  g[0] = this.h[0] + 5;\n  c = g[0] >>> 13;\n  g[0] &= 0x1fff;\n  for (i = 1; i < 10; i++) {\n    g[i] = this.h[i] + c;\n    c = g[i] >>> 13;\n    g[i] &= 0x1fff;\n  }\n  g[9] -= (1 << 13);\n\n  mask = (c ^ 1) - 1;\n  for (i = 0; i < 10; i++) g[i] &= mask;\n  mask = ~mask;\n  for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n  this.h[0] = ((this.h[0]       ) | (this.h[1] << 13)                    ) & 0xffff;\n  this.h[1] = ((this.h[1] >>>  3) | (this.h[2] << 10)                    ) & 0xffff;\n  this.h[2] = ((this.h[2] >>>  6) | (this.h[3] <<  7)                    ) & 0xffff;\n  this.h[3] = ((this.h[3] >>>  9) | (this.h[4] <<  4)                    ) & 0xffff;\n  this.h[4] = ((this.h[4] >>> 12) | (this.h[5] <<  1) | (this.h[6] << 14)) & 0xffff;\n  this.h[5] = ((this.h[6] >>>  2) | (this.h[7] << 11)                    ) & 0xffff;\n  this.h[6] = ((this.h[7] >>>  5) | (this.h[8] <<  8)                    ) & 0xffff;\n  this.h[7] = ((this.h[8] >>>  8) | (this.h[9] <<  5)                    ) & 0xffff;\n\n  f = this.h[0] + this.pad[0];\n  this.h[0] = f & 0xffff;\n  for (i = 1; i < 8; i++) {\n    f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n    this.h[i] = f & 0xffff;\n  }\n\n  mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n  mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n  mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n  mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n  mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n  mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n  mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n  mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n  mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n  mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n  mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n  mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n  mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n  mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n  mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n  mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n  var i, want;\n\n  if (this.leftover) {\n    want = (16 - this.leftover);\n    if (want > bytes)\n      want = bytes;\n    for (i = 0; i < want; i++)\n      this.buffer[this.leftover + i] = m[mpos+i];\n    bytes -= want;\n    mpos += want;\n    this.leftover += want;\n    if (this.leftover < 16)\n      return;\n    this.blocks(this.buffer, 0, 16);\n    this.leftover = 0;\n  }\n\n  if (bytes >= 16) {\n    want = bytes - (bytes % 16);\n    this.blocks(m, mpos, want);\n    mpos += want;\n    bytes -= want;\n  }\n\n  if (bytes) {\n    for (i = 0; i < bytes; i++)\n      this.buffer[this.leftover + i] = m[mpos+i];\n    this.leftover += bytes;\n  }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n  var s = new poly1305(k);\n  s.update(m, mpos, n);\n  s.finish(out, outpos);\n  return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n  var x = new Uint8Array(16);\n  crypto_onetimeauth(x,0,m,mpos,n,k);\n  return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n  var i;\n  if (d < 32) return -1;\n  crypto_stream_xor(c,0,m,0,d,n,k);\n  crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n  for (i = 0; i < 16; i++) c[i] = 0;\n  return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n  var i;\n  var x = new Uint8Array(32);\n  if (d < 32) return -1;\n  crypto_stream(x,0,32,n,k);\n  if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n  crypto_stream_xor(m,0,c,0,d,n,k);\n  for (i = 0; i < 32; i++) m[i] = 0;\n  return 0;\n}\n\nfunction set25519(r, a) {\n  var i;\n  for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n  var i, v, c = 1;\n  for (i = 0; i < 16; i++) {\n    v = o[i] + c + 65535;\n    c = Math.floor(v / 65536);\n    o[i] = v - c * 65536;\n  }\n  o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n  var t, c = ~(b-1);\n  for (var i = 0; i < 16; i++) {\n    t = c & (p[i] ^ q[i]);\n    p[i] ^= t;\n    q[i] ^= t;\n  }\n}\n\nfunction pack25519(o, n) {\n  var i, j, b;\n  var m = gf(), t = gf();\n  for (i = 0; i < 16; i++) t[i] = n[i];\n  car25519(t);\n  car25519(t);\n  car25519(t);\n  for (j = 0; j < 2; j++) {\n    m[0] = t[0] - 0xffed;\n    for (i = 1; i < 15; i++) {\n      m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n      m[i-1] &= 0xffff;\n    }\n    m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n    b = (m[15]>>16) & 1;\n    m[14] &= 0xffff;\n    sel25519(t, m, 1-b);\n  }\n  for (i = 0; i < 16; i++) {\n    o[2*i] = t[i] & 0xff;\n    o[2*i+1] = t[i]>>8;\n  }\n}\n\nfunction neq25519(a, b) {\n  var c = new Uint8Array(32), d = new Uint8Array(32);\n  pack25519(c, a);\n  pack25519(d, b);\n  return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n  var d = new Uint8Array(32);\n  pack25519(d, a);\n  return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n  var i;\n  for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n  o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n  for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n  for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n  var v, c,\n     t0 = 0,  t1 = 0,  t2 = 0,  t3 = 0,  t4 = 0,  t5 = 0,  t6 = 0,  t7 = 0,\n     t8 = 0,  t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n    t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n    t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n    b0 = b[0],\n    b1 = b[1],\n    b2 = b[2],\n    b3 = b[3],\n    b4 = b[4],\n    b5 = b[5],\n    b6 = b[6],\n    b7 = b[7],\n    b8 = b[8],\n    b9 = b[9],\n    b10 = b[10],\n    b11 = b[11],\n    b12 = b[12],\n    b13 = b[13],\n    b14 = b[14],\n    b15 = b[15];\n\n  v = a[0];\n  t0 += v * b0;\n  t1 += v * b1;\n  t2 += v * b2;\n  t3 += v * b3;\n  t4 += v * b4;\n  t5 += v * b5;\n  t6 += v * b6;\n  t7 += v * b7;\n  t8 += v * b8;\n  t9 += v * b9;\n  t10 += v * b10;\n  t11 += v * b11;\n  t12 += v * b12;\n  t13 += v * b13;\n  t14 += v * b14;\n  t15 += v * b15;\n  v = a[1];\n  t1 += v * b0;\n  t2 += v * b1;\n  t3 += v * b2;\n  t4 += v * b3;\n  t5 += v * b4;\n  t6 += v * b5;\n  t7 += v * b6;\n  t8 += v * b7;\n  t9 += v * b8;\n  t10 += v * b9;\n  t11 += v * b10;\n  t12 += v * b11;\n  t13 += v * b12;\n  t14 += v * b13;\n  t15 += v * b14;\n  t16 += v * b15;\n  v = a[2];\n  t2 += v * b0;\n  t3 += v * b1;\n  t4 += v * b2;\n  t5 += v * b3;\n  t6 += v * b4;\n  t7 += v * b5;\n  t8 += v * b6;\n  t9 += v * b7;\n  t10 += v * b8;\n  t11 += v * b9;\n  t12 += v * b10;\n  t13 += v * b11;\n  t14 += v * b12;\n  t15 += v * b13;\n  t16 += v * b14;\n  t17 += v * b15;\n  v = a[3];\n  t3 += v * b0;\n  t4 += v * b1;\n  t5 += v * b2;\n  t6 += v * b3;\n  t7 += v * b4;\n  t8 += v * b5;\n  t9 += v * b6;\n  t10 += v * b7;\n  t11 += v * b8;\n  t12 += v * b9;\n  t13 += v * b10;\n  t14 += v * b11;\n  t15 += v * b12;\n  t16 += v * b13;\n  t17 += v * b14;\n  t18 += v * b15;\n  v = a[4];\n  t4 += v * b0;\n  t5 += v * b1;\n  t6 += v * b2;\n  t7 += v * b3;\n  t8 += v * b4;\n  t9 += v * b5;\n  t10 += v * b6;\n  t11 += v * b7;\n  t12 += v * b8;\n  t13 += v * b9;\n  t14 += v * b10;\n  t15 += v * b11;\n  t16 += v * b12;\n  t17 += v * b13;\n  t18 += v * b14;\n  t19 += v * b15;\n  v = a[5];\n  t5 += v * b0;\n  t6 += v * b1;\n  t7 += v * b2;\n  t8 += v * b3;\n  t9 += v * b4;\n  t10 += v * b5;\n  t11 += v * b6;\n  t12 += v * b7;\n  t13 += v * b8;\n  t14 += v * b9;\n  t15 += v * b10;\n  t16 += v * b11;\n  t17 += v * b12;\n  t18 += v * b13;\n  t19 += v * b14;\n  t20 += v * b15;\n  v = a[6];\n  t6 += v * b0;\n  t7 += v * b1;\n  t8 += v * b2;\n  t9 += v * b3;\n  t10 += v * b4;\n  t11 += v * b5;\n  t12 += v * b6;\n  t13 += v * b7;\n  t14 += v * b8;\n  t15 += v * b9;\n  t16 += v * b10;\n  t17 += v * b11;\n  t18 += v * b12;\n  t19 += v * b13;\n  t20 += v * b14;\n  t21 += v * b15;\n  v = a[7];\n  t7 += v * b0;\n  t8 += v * b1;\n  t9 += v * b2;\n  t10 += v * b3;\n  t11 += v * b4;\n  t12 += v * b5;\n  t13 += v * b6;\n  t14 += v * b7;\n  t15 += v * b8;\n  t16 += v * b9;\n  t17 += v * b10;\n  t18 += v * b11;\n  t19 += v * b12;\n  t20 += v * b13;\n  t21 += v * b14;\n  t22 += v * b15;\n  v = a[8];\n  t8 += v * b0;\n  t9 += v * b1;\n  t10 += v * b2;\n  t11 += v * b3;\n  t12 += v * b4;\n  t13 += v * b5;\n  t14 += v * b6;\n  t15 += v * b7;\n  t16 += v * b8;\n  t17 += v * b9;\n  t18 += v * b10;\n  t19 += v * b11;\n  t20 += v * b12;\n  t21 += v * b13;\n  t22 += v * b14;\n  t23 += v * b15;\n  v = a[9];\n  t9 += v * b0;\n  t10 += v * b1;\n  t11 += v * b2;\n  t12 += v * b3;\n  t13 += v * b4;\n  t14 += v * b5;\n  t15 += v * b6;\n  t16 += v * b7;\n  t17 += v * b8;\n  t18 += v * b9;\n  t19 += v * b10;\n  t20 += v * b11;\n  t21 += v * b12;\n  t22 += v * b13;\n  t23 += v * b14;\n  t24 += v * b15;\n  v = a[10];\n  t10 += v * b0;\n  t11 += v * b1;\n  t12 += v * b2;\n  t13 += v * b3;\n  t14 += v * b4;\n  t15 += v * b5;\n  t16 += v * b6;\n  t17 += v * b7;\n  t18 += v * b8;\n  t19 += v * b9;\n  t20 += v * b10;\n  t21 += v * b11;\n  t22 += v * b12;\n  t23 += v * b13;\n  t24 += v * b14;\n  t25 += v * b15;\n  v = a[11];\n  t11 += v * b0;\n  t12 += v * b1;\n  t13 += v * b2;\n  t14 += v * b3;\n  t15 += v * b4;\n  t16 += v * b5;\n  t17 += v * b6;\n  t18 += v * b7;\n  t19 += v * b8;\n  t20 += v * b9;\n  t21 += v * b10;\n  t22 += v * b11;\n  t23 += v * b12;\n  t24 += v * b13;\n  t25 += v * b14;\n  t26 += v * b15;\n  v = a[12];\n  t12 += v * b0;\n  t13 += v * b1;\n  t14 += v * b2;\n  t15 += v * b3;\n  t16 += v * b4;\n  t17 += v * b5;\n  t18 += v * b6;\n  t19 += v * b7;\n  t20 += v * b8;\n  t21 += v * b9;\n  t22 += v * b10;\n  t23 += v * b11;\n  t24 += v * b12;\n  t25 += v * b13;\n  t26 += v * b14;\n  t27 += v * b15;\n  v = a[13];\n  t13 += v * b0;\n  t14 += v * b1;\n  t15 += v * b2;\n  t16 += v * b3;\n  t17 += v * b4;\n  t18 += v * b5;\n  t19 += v * b6;\n  t20 += v * b7;\n  t21 += v * b8;\n  t22 += v * b9;\n  t23 += v * b10;\n  t24 += v * b11;\n  t25 += v * b12;\n  t26 += v * b13;\n  t27 += v * b14;\n  t28 += v * b15;\n  v = a[14];\n  t14 += v * b0;\n  t15 += v * b1;\n  t16 += v * b2;\n  t17 += v * b3;\n  t18 += v * b4;\n  t19 += v * b5;\n  t20 += v * b6;\n  t21 += v * b7;\n  t22 += v * b8;\n  t23 += v * b9;\n  t24 += v * b10;\n  t25 += v * b11;\n  t26 += v * b12;\n  t27 += v * b13;\n  t28 += v * b14;\n  t29 += v * b15;\n  v = a[15];\n  t15 += v * b0;\n  t16 += v * b1;\n  t17 += v * b2;\n  t18 += v * b3;\n  t19 += v * b4;\n  t20 += v * b5;\n  t21 += v * b6;\n  t22 += v * b7;\n  t23 += v * b8;\n  t24 += v * b9;\n  t25 += v * b10;\n  t26 += v * b11;\n  t27 += v * b12;\n  t28 += v * b13;\n  t29 += v * b14;\n  t30 += v * b15;\n\n  t0  += 38 * t16;\n  t1  += 38 * t17;\n  t2  += 38 * t18;\n  t3  += 38 * t19;\n  t4  += 38 * t20;\n  t5  += 38 * t21;\n  t6  += 38 * t22;\n  t7  += 38 * t23;\n  t8  += 38 * t24;\n  t9  += 38 * t25;\n  t10 += 38 * t26;\n  t11 += 38 * t27;\n  t12 += 38 * t28;\n  t13 += 38 * t29;\n  t14 += 38 * t30;\n  // t15 left as is\n\n  // first car\n  c = 1;\n  v =  t0 + c + 65535; c = Math.floor(v / 65536);  t0 = v - c * 65536;\n  v =  t1 + c + 65535; c = Math.floor(v / 65536);  t1 = v - c * 65536;\n  v =  t2 + c + 65535; c = Math.floor(v / 65536);  t2 = v - c * 65536;\n  v =  t3 + c + 65535; c = Math.floor(v / 65536);  t3 = v - c * 65536;\n  v =  t4 + c + 65535; c = Math.floor(v / 65536);  t4 = v - c * 65536;\n  v =  t5 + c + 65535; c = Math.floor(v / 65536);  t5 = v - c * 65536;\n  v =  t6 + c + 65535; c = Math.floor(v / 65536);  t6 = v - c * 65536;\n  v =  t7 + c + 65535; c = Math.floor(v / 65536);  t7 = v - c * 65536;\n  v =  t8 + c + 65535; c = Math.floor(v / 65536);  t8 = v - c * 65536;\n  v =  t9 + c + 65535; c = Math.floor(v / 65536);  t9 = v - c * 65536;\n  v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n  v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n  v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n  v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n  v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n  v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n  t0 += c-1 + 37 * (c-1);\n\n  // second car\n  c = 1;\n  v =  t0 + c + 65535; c = Math.floor(v / 65536);  t0 = v - c * 65536;\n  v =  t1 + c + 65535; c = Math.floor(v / 65536);  t1 = v - c * 65536;\n  v =  t2 + c + 65535; c = Math.floor(v / 65536);  t2 = v - c * 65536;\n  v =  t3 + c + 65535; c = Math.floor(v / 65536);  t3 = v - c * 65536;\n  v =  t4 + c + 65535; c = Math.floor(v / 65536);  t4 = v - c * 65536;\n  v =  t5 + c + 65535; c = Math.floor(v / 65536);  t5 = v - c * 65536;\n  v =  t6 + c + 65535; c = Math.floor(v / 65536);  t6 = v - c * 65536;\n  v =  t7 + c + 65535; c = Math.floor(v / 65536);  t7 = v - c * 65536;\n  v =  t8 + c + 65535; c = Math.floor(v / 65536);  t8 = v - c * 65536;\n  v =  t9 + c + 65535; c = Math.floor(v / 65536);  t9 = v - c * 65536;\n  v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n  v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n  v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n  v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n  v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n  v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n  t0 += c-1 + 37 * (c-1);\n\n  o[ 0] = t0;\n  o[ 1] = t1;\n  o[ 2] = t2;\n  o[ 3] = t3;\n  o[ 4] = t4;\n  o[ 5] = t5;\n  o[ 6] = t6;\n  o[ 7] = t7;\n  o[ 8] = t8;\n  o[ 9] = t9;\n  o[10] = t10;\n  o[11] = t11;\n  o[12] = t12;\n  o[13] = t13;\n  o[14] = t14;\n  o[15] = t15;\n}\n\nfunction S(o, a) {\n  M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n  var c = gf();\n  var a;\n  for (a = 0; a < 16; a++) c[a] = i[a];\n  for (a = 253; a >= 0; a--) {\n    S(c, c);\n    if(a !== 2 && a !== 4) M(c, c, i);\n  }\n  for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n  var c = gf();\n  var a;\n  for (a = 0; a < 16; a++) c[a] = i[a];\n  for (a = 250; a >= 0; a--) {\n      S(c, c);\n      if(a !== 1) M(c, c, i);\n  }\n  for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n  var z = new Uint8Array(32);\n  var x = new Float64Array(80), r, i;\n  var a = gf(), b = gf(), c = gf(),\n      d = gf(), e = gf(), f = gf();\n  for (i = 0; i < 31; i++) z[i] = n[i];\n  z[31]=(n[31]&127)|64;\n  z[0]&=248;\n  unpack25519(x,p);\n  for (i = 0; i < 16; i++) {\n    b[i]=x[i];\n    d[i]=a[i]=c[i]=0;\n  }\n  a[0]=d[0]=1;\n  for (i=254; i>=0; --i) {\n    r=(z[i>>>3]>>>(i&7))&1;\n    sel25519(a,b,r);\n    sel25519(c,d,r);\n    A(e,a,c);\n    Z(a,a,c);\n    A(c,b,d);\n    Z(b,b,d);\n    S(d,e);\n    S(f,a);\n    M(a,c,a);\n    M(c,b,e);\n    A(e,a,c);\n    Z(a,a,c);\n    S(b,a);\n    Z(c,d,f);\n    M(a,c,_121665);\n    A(a,a,d);\n    M(c,c,a);\n    M(a,d,f);\n    M(d,b,x);\n    S(b,e);\n    sel25519(a,b,r);\n    sel25519(c,d,r);\n  }\n  for (i = 0; i < 16; i++) {\n    x[i+16]=a[i];\n    x[i+32]=c[i];\n    x[i+48]=b[i];\n    x[i+64]=d[i];\n  }\n  var x32 = x.subarray(32);\n  var x16 = x.subarray(16);\n  inv25519(x32,x32);\n  M(x16,x16,x32);\n  pack25519(q,x16);\n  return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n  return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n  randombytes(x, 32);\n  return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n  var s = new Uint8Array(32);\n  crypto_scalarmult(s, x, y);\n  return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n  var k = new Uint8Array(32);\n  crypto_box_beforenm(k, y, x);\n  return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n  var k = new Uint8Array(32);\n  crypto_box_beforenm(k, y, x);\n  return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n  var wh = new Int32Array(16), wl = new Int32Array(16),\n      bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n      bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n      th, tl, i, j, h, l, a, b, c, d;\n\n  var ah0 = hh[0],\n      ah1 = hh[1],\n      ah2 = hh[2],\n      ah3 = hh[3],\n      ah4 = hh[4],\n      ah5 = hh[5],\n      ah6 = hh[6],\n      ah7 = hh[7],\n\n      al0 = hl[0],\n      al1 = hl[1],\n      al2 = hl[2],\n      al3 = hl[3],\n      al4 = hl[4],\n      al5 = hl[5],\n      al6 = hl[6],\n      al7 = hl[7];\n\n  var pos = 0;\n  while (n >= 128) {\n    for (i = 0; i < 16; i++) {\n      j = 8 * i + pos;\n      wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n      wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n    }\n    for (i = 0; i < 80; i++) {\n      bh0 = ah0;\n      bh1 = ah1;\n      bh2 = ah2;\n      bh3 = ah3;\n      bh4 = ah4;\n      bh5 = ah5;\n      bh6 = ah6;\n      bh7 = ah7;\n\n      bl0 = al0;\n      bl1 = al1;\n      bl2 = al2;\n      bl3 = al3;\n      bl4 = al4;\n      bl5 = al5;\n      bl6 = al6;\n      bl7 = al7;\n\n      // add\n      h = ah7;\n      l = al7;\n\n      a = l & 0xffff; b = l >>> 16;\n      c = h & 0xffff; d = h >>> 16;\n\n      // Sigma1\n      h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n      l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      // Ch\n      h = (ah4 & ah5) ^ (~ah4 & ah6);\n      l = (al4 & al5) ^ (~al4 & al6);\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      // K\n      h = K[i*2];\n      l = K[i*2+1];\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      // w\n      h = wh[i%16];\n      l = wl[i%16];\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      b += a >>> 16;\n      c += b >>> 16;\n      d += c >>> 16;\n\n      th = c & 0xffff | d << 16;\n      tl = a & 0xffff | b << 16;\n\n      // add\n      h = th;\n      l = tl;\n\n      a = l & 0xffff; b = l >>> 16;\n      c = h & 0xffff; d = h >>> 16;\n\n      // Sigma0\n      h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n      l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      // Maj\n      h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n      l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      b += a >>> 16;\n      c += b >>> 16;\n      d += c >>> 16;\n\n      bh7 = (c & 0xffff) | (d << 16);\n      bl7 = (a & 0xffff) | (b << 16);\n\n      // add\n      h = bh3;\n      l = bl3;\n\n      a = l & 0xffff; b = l >>> 16;\n      c = h & 0xffff; d = h >>> 16;\n\n      h = th;\n      l = tl;\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      b += a >>> 16;\n      c += b >>> 16;\n      d += c >>> 16;\n\n      bh3 = (c & 0xffff) | (d << 16);\n      bl3 = (a & 0xffff) | (b << 16);\n\n      ah1 = bh0;\n      ah2 = bh1;\n      ah3 = bh2;\n      ah4 = bh3;\n      ah5 = bh4;\n      ah6 = bh5;\n      ah7 = bh6;\n      ah0 = bh7;\n\n      al1 = bl0;\n      al2 = bl1;\n      al3 = bl2;\n      al4 = bl3;\n      al5 = bl4;\n      al6 = bl5;\n      al7 = bl6;\n      al0 = bl7;\n\n      if (i%16 === 15) {\n        for (j = 0; j < 16; j++) {\n          // add\n          h = wh[j];\n          l = wl[j];\n\n          a = l & 0xffff; b = l >>> 16;\n          c = h & 0xffff; d = h >>> 16;\n\n          h = wh[(j+9)%16];\n          l = wl[(j+9)%16];\n\n          a += l & 0xffff; b += l >>> 16;\n          c += h & 0xffff; d += h >>> 16;\n\n          // sigma0\n          th = wh[(j+1)%16];\n          tl = wl[(j+1)%16];\n          h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n          l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n          a += l & 0xffff; b += l >>> 16;\n          c += h & 0xffff; d += h >>> 16;\n\n          // sigma1\n          th = wh[(j+14)%16];\n          tl = wl[(j+14)%16];\n          h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n          l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n          a += l & 0xffff; b += l >>> 16;\n          c += h & 0xffff; d += h >>> 16;\n\n          b += a >>> 16;\n          c += b >>> 16;\n          d += c >>> 16;\n\n          wh[j] = (c & 0xffff) | (d << 16);\n          wl[j] = (a & 0xffff) | (b << 16);\n        }\n      }\n    }\n\n    // add\n    h = ah0;\n    l = al0;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[0];\n    l = hl[0];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[0] = ah0 = (c & 0xffff) | (d << 16);\n    hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n    h = ah1;\n    l = al1;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[1];\n    l = hl[1];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[1] = ah1 = (c & 0xffff) | (d << 16);\n    hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n    h = ah2;\n    l = al2;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[2];\n    l = hl[2];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[2] = ah2 = (c & 0xffff) | (d << 16);\n    hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n    h = ah3;\n    l = al3;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[3];\n    l = hl[3];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[3] = ah3 = (c & 0xffff) | (d << 16);\n    hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n    h = ah4;\n    l = al4;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[4];\n    l = hl[4];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[4] = ah4 = (c & 0xffff) | (d << 16);\n    hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n    h = ah5;\n    l = al5;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[5];\n    l = hl[5];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[5] = ah5 = (c & 0xffff) | (d << 16);\n    hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n    h = ah6;\n    l = al6;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[6];\n    l = hl[6];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[6] = ah6 = (c & 0xffff) | (d << 16);\n    hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n    h = ah7;\n    l = al7;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[7];\n    l = hl[7];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[7] = ah7 = (c & 0xffff) | (d << 16);\n    hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n    pos += 128;\n    n -= 128;\n  }\n\n  return n;\n}\n\nfunction crypto_hash(out, m, n) {\n  var hh = new Int32Array(8),\n      hl = new Int32Array(8),\n      x = new Uint8Array(256),\n      i, b = n;\n\n  hh[0] = 0x6a09e667;\n  hh[1] = 0xbb67ae85;\n  hh[2] = 0x3c6ef372;\n  hh[3] = 0xa54ff53a;\n  hh[4] = 0x510e527f;\n  hh[5] = 0x9b05688c;\n  hh[6] = 0x1f83d9ab;\n  hh[7] = 0x5be0cd19;\n\n  hl[0] = 0xf3bcc908;\n  hl[1] = 0x84caa73b;\n  hl[2] = 0xfe94f82b;\n  hl[3] = 0x5f1d36f1;\n  hl[4] = 0xade682d1;\n  hl[5] = 0x2b3e6c1f;\n  hl[6] = 0xfb41bd6b;\n  hl[7] = 0x137e2179;\n\n  crypto_hashblocks_hl(hh, hl, m, n);\n  n %= 128;\n\n  for (i = 0; i < n; i++) x[i] = m[b-n+i];\n  x[n] = 128;\n\n  n = 256-128*(n<112?1:0);\n  x[n-9] = 0;\n  ts64(x, n-8,  (b / 0x20000000) | 0, b << 3);\n  crypto_hashblocks_hl(hh, hl, x, n);\n\n  for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n  return 0;\n}\n\nfunction add(p, q) {\n  var a = gf(), b = gf(), c = gf(),\n      d = gf(), e = gf(), f = gf(),\n      g = gf(), h = gf(), t = gf();\n\n  Z(a, p[1], p[0]);\n  Z(t, q[1], q[0]);\n  M(a, a, t);\n  A(b, p[0], p[1]);\n  A(t, q[0], q[1]);\n  M(b, b, t);\n  M(c, p[3], q[3]);\n  M(c, c, D2);\n  M(d, p[2], q[2]);\n  A(d, d, d);\n  Z(e, b, a);\n  Z(f, d, c);\n  A(g, d, c);\n  A(h, b, a);\n\n  M(p[0], e, f);\n  M(p[1], h, g);\n  M(p[2], g, f);\n  M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n  var i;\n  for (i = 0; i < 4; i++) {\n    sel25519(p[i], q[i], b);\n  }\n}\n\nfunction pack(r, p) {\n  var tx = gf(), ty = gf(), zi = gf();\n  inv25519(zi, p[2]);\n  M(tx, p[0], zi);\n  M(ty, p[1], zi);\n  pack25519(r, ty);\n  r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n  var b, i;\n  set25519(p[0], gf0);\n  set25519(p[1], gf1);\n  set25519(p[2], gf1);\n  set25519(p[3], gf0);\n  for (i = 255; i >= 0; --i) {\n    b = (s[(i/8)|0] >> (i&7)) & 1;\n    cswap(p, q, b);\n    add(q, p);\n    add(p, p);\n    cswap(p, q, b);\n  }\n}\n\nfunction scalarbase(p, s) {\n  var q = [gf(), gf(), gf(), gf()];\n  set25519(q[0], X);\n  set25519(q[1], Y);\n  set25519(q[2], gf1);\n  M(q[3], X, Y);\n  scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n  var d = new Uint8Array(64);\n  var p = [gf(), gf(), gf(), gf()];\n  var i;\n\n  if (!seeded) randombytes(sk, 32);\n  crypto_hash(d, sk, 32);\n  d[0] &= 248;\n  d[31] &= 127;\n  d[31] |= 64;\n\n  scalarbase(p, d);\n  pack(pk, p);\n\n  for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n  return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n  var carry, i, j, k;\n  for (i = 63; i >= 32; --i) {\n    carry = 0;\n    for (j = i - 32, k = i - 12; j < k; ++j) {\n      x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n      carry = Math.floor((x[j] + 128) / 256);\n      x[j] -= carry * 256;\n    }\n    x[j] += carry;\n    x[i] = 0;\n  }\n  carry = 0;\n  for (j = 0; j < 32; j++) {\n    x[j] += carry - (x[31] >> 4) * L[j];\n    carry = x[j] >> 8;\n    x[j] &= 255;\n  }\n  for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n  for (i = 0; i < 32; i++) {\n    x[i+1] += x[i] >> 8;\n    r[i] = x[i] & 255;\n  }\n}\n\nfunction reduce(r) {\n  var x = new Float64Array(64), i;\n  for (i = 0; i < 64; i++) x[i] = r[i];\n  for (i = 0; i < 64; i++) r[i] = 0;\n  modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n  var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n  var i, j, x = new Float64Array(64);\n  var p = [gf(), gf(), gf(), gf()];\n\n  crypto_hash(d, sk, 32);\n  d[0] &= 248;\n  d[31] &= 127;\n  d[31] |= 64;\n\n  var smlen = n + 64;\n  for (i = 0; i < n; i++) sm[64 + i] = m[i];\n  for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n  crypto_hash(r, sm.subarray(32), n+32);\n  reduce(r);\n  scalarbase(p, r);\n  pack(sm, p);\n\n  for (i = 32; i < 64; i++) sm[i] = sk[i];\n  crypto_hash(h, sm, n + 64);\n  reduce(h);\n\n  for (i = 0; i < 64; i++) x[i] = 0;\n  for (i = 0; i < 32; i++) x[i] = r[i];\n  for (i = 0; i < 32; i++) {\n    for (j = 0; j < 32; j++) {\n      x[i+j] += h[i] * d[j];\n    }\n  }\n\n  modL(sm.subarray(32), x);\n  return smlen;\n}\n\nfunction unpackneg(r, p) {\n  var t = gf(), chk = gf(), num = gf(),\n      den = gf(), den2 = gf(), den4 = gf(),\n      den6 = gf();\n\n  set25519(r[2], gf1);\n  unpack25519(r[1], p);\n  S(num, r[1]);\n  M(den, num, D);\n  Z(num, num, r[2]);\n  A(den, r[2], den);\n\n  S(den2, den);\n  S(den4, den2);\n  M(den6, den4, den2);\n  M(t, den6, num);\n  M(t, t, den);\n\n  pow2523(t, t);\n  M(t, t, num);\n  M(t, t, den);\n  M(t, t, den);\n  M(r[0], t, den);\n\n  S(chk, r[0]);\n  M(chk, chk, den);\n  if (neq25519(chk, num)) M(r[0], r[0], I);\n\n  S(chk, r[0]);\n  M(chk, chk, den);\n  if (neq25519(chk, num)) return -1;\n\n  if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n  M(r[3], r[0], r[1]);\n  return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n  var i;\n  var t = new Uint8Array(32), h = new Uint8Array(64);\n  var p = [gf(), gf(), gf(), gf()],\n      q = [gf(), gf(), gf(), gf()];\n\n  if (n < 64) return -1;\n\n  if (unpackneg(q, pk)) return -1;\n\n  for (i = 0; i < n; i++) m[i] = sm[i];\n  for (i = 0; i < 32; i++) m[i+32] = pk[i];\n  crypto_hash(h, m, n);\n  reduce(h);\n  scalarmult(p, q, h);\n\n  scalarbase(q, sm.subarray(32));\n  add(p, q);\n  pack(t, p);\n\n  n -= 64;\n  if (crypto_verify_32(sm, 0, t, 0)) {\n    for (i = 0; i < n; i++) m[i] = 0;\n    return -1;\n  }\n\n  for (i = 0; i < n; i++) m[i] = sm[i + 64];\n  return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n    crypto_secretbox_NONCEBYTES = 24,\n    crypto_secretbox_ZEROBYTES = 32,\n    crypto_secretbox_BOXZEROBYTES = 16,\n    crypto_scalarmult_BYTES = 32,\n    crypto_scalarmult_SCALARBYTES = 32,\n    crypto_box_PUBLICKEYBYTES = 32,\n    crypto_box_SECRETKEYBYTES = 32,\n    crypto_box_BEFORENMBYTES = 32,\n    crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n    crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n    crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n    crypto_sign_BYTES = 64,\n    crypto_sign_PUBLICKEYBYTES = 32,\n    crypto_sign_SECRETKEYBYTES = 64,\n    crypto_sign_SEEDBYTES = 32,\n    crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n  crypto_core_hsalsa20: crypto_core_hsalsa20,\n  crypto_stream_xor: crypto_stream_xor,\n  crypto_stream: crypto_stream,\n  crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n  crypto_stream_salsa20: crypto_stream_salsa20,\n  crypto_onetimeauth: crypto_onetimeauth,\n  crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n  crypto_verify_16: crypto_verify_16,\n  crypto_verify_32: crypto_verify_32,\n  crypto_secretbox: crypto_secretbox,\n  crypto_secretbox_open: crypto_secretbox_open,\n  crypto_scalarmult: crypto_scalarmult,\n  crypto_scalarmult_base: crypto_scalarmult_base,\n  crypto_box_beforenm: crypto_box_beforenm,\n  crypto_box_afternm: crypto_box_afternm,\n  crypto_box: crypto_box,\n  crypto_box_open: crypto_box_open,\n  crypto_box_keypair: crypto_box_keypair,\n  crypto_hash: crypto_hash,\n  crypto_sign: crypto_sign,\n  crypto_sign_keypair: crypto_sign_keypair,\n  crypto_sign_open: crypto_sign_open,\n\n  crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n  crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n  crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n  crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n  crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n  crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n  crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n  crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n  crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n  crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n  crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n  crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n  crypto_sign_BYTES: crypto_sign_BYTES,\n  crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n  crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n  crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n  crypto_hash_BYTES: crypto_hash_BYTES,\n\n  gf: gf,\n  D: D,\n  L: L,\n  pack25519: pack25519,\n  unpack25519: unpack25519,\n  M: M,\n  A: A,\n  S: S,\n  Z: Z,\n  pow2523: pow2523,\n  add: add,\n  set25519: set25519,\n  modL: modL,\n  scalarmult: scalarmult,\n  scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n  if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n  if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n  if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n  if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n  for (var i = 0; i < arguments.length; i++) {\n    if (!(arguments[i] instanceof Uint8Array))\n      throw new TypeError('unexpected type, use Uint8Array');\n  }\n}\n\nfunction cleanup(arr) {\n  for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n  var b = new Uint8Array(n);\n  randombytes(b, n);\n  return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n  checkArrayTypes(msg, nonce, key);\n  checkLengths(key, nonce);\n  var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n  var c = new Uint8Array(m.length);\n  for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n  crypto_secretbox(c, m, m.length, nonce, key);\n  return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n  checkArrayTypes(box, nonce, key);\n  checkLengths(key, nonce);\n  var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n  var m = new Uint8Array(c.length);\n  for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n  if (c.length < 32) return null;\n  if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n  return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n  checkArrayTypes(n, p);\n  if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n  if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n  var q = new Uint8Array(crypto_scalarmult_BYTES);\n  crypto_scalarmult(q, n, p);\n  return q;\n};\n\nnacl.scalarMult.base = function(n) {\n  checkArrayTypes(n);\n  if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n  var q = new Uint8Array(crypto_scalarmult_BYTES);\n  crypto_scalarmult_base(q, n);\n  return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n  var k = nacl.box.before(publicKey, secretKey);\n  return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n  checkArrayTypes(publicKey, secretKey);\n  checkBoxLengths(publicKey, secretKey);\n  var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n  crypto_box_beforenm(k, publicKey, secretKey);\n  return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n  var k = nacl.box.before(publicKey, secretKey);\n  return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n  var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n  var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n  crypto_box_keypair(pk, sk);\n  return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n  checkArrayTypes(secretKey);\n  if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n    throw new Error('bad secret key size');\n  var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n  crypto_scalarmult_base(pk, secretKey);\n  return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n  checkArrayTypes(msg, secretKey);\n  if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n    throw new Error('bad secret key size');\n  var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n  crypto_sign(signedMsg, msg, msg.length, secretKey);\n  return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n  checkArrayTypes(signedMsg, publicKey);\n  if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n    throw new Error('bad public key size');\n  var tmp = new Uint8Array(signedMsg.length);\n  var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n  if (mlen < 0) return null;\n  var m = new Uint8Array(mlen);\n  for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n  return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n  var signedMsg = nacl.sign(msg, secretKey);\n  var sig = new Uint8Array(crypto_sign_BYTES);\n  for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n  return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n  checkArrayTypes(msg, sig, publicKey);\n  if (sig.length !== crypto_sign_BYTES)\n    throw new Error('bad signature size');\n  if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n    throw new Error('bad public key size');\n  var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n  var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n  var i;\n  for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n  for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n  return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n  var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n  var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n  crypto_sign_keypair(pk, sk);\n  return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n  checkArrayTypes(secretKey);\n  if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n    throw new Error('bad secret key size');\n  var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n  for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n  return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n  checkArrayTypes(seed);\n  if (seed.length !== crypto_sign_SEEDBYTES)\n    throw new Error('bad seed size');\n  var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n  var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n  for (var i = 0; i < 32; i++) sk[i] = seed[i];\n  crypto_sign_keypair(pk, sk, true);\n  return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n  checkArrayTypes(msg);\n  var h = new Uint8Array(crypto_hash_BYTES);\n  crypto_hash(h, msg, msg.length);\n  return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n  checkArrayTypes(x, y);\n  // Zero length arguments are considered not equal.\n  if (x.length === 0 || y.length === 0) return false;\n  if (x.length !== y.length) return false;\n  return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n  randombytes = fn;\n};\n\n(function() {\n  // Initialize PRNG if environment provides CSPRNG.\n  // If not, methods calling randombytes will throw.\n  var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n  if (crypto && crypto.getRandomValues) {\n    // Browsers.\n    var QUOTA = 65536;\n    nacl.setPRNG(function(x, n) {\n      var i, v = new Uint8Array(n);\n      for (i = 0; i < n; i += QUOTA) {\n        crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n      }\n      for (i = 0; i < n; i++) x[i] = v[i];\n      cleanup(v);\n    });\n  } else if (typeof require !== 'undefined') {\n    // Node.js.\n    crypto = require('crypto');\n    if (crypto && crypto.randomBytes) {\n      nacl.setPRNG(function(x, n) {\n        var i, v = crypto.randomBytes(n);\n        for (i = 0; i < n; i++) x[i] = v[i];\n        cleanup(v);\n      });\n    }\n  }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n", "/*\n * ed2curve: convert Ed25519 signing key pair into Curve25519\n * key pair suitable for Diffie-Hellman key exchange.\n *\n * Written by Dmitry Chestnykh in 2014. Public domain.\n */\n/* jshint newcap: false */\n(function(root, f) {\n  'use strict';\n  if (typeof module !== 'undefined' && module.exports) module.exports = f(require('tweetnacl'));\n  else root.ed2curve = f(root.nacl);\n}(this, function(nacl) {\n  'use strict';\n  if (!nacl) throw new Error('tweetnacl not loaded');\n\n  // -- Operations copied from TweetNaCl.js. --\n\n  var gf = function(init) {\n    var i, r = new Float64Array(16);\n    if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n    return r;\n  };\n\n  var gf0 = gf(),\n      gf1 = gf([1]),\n      D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n      I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\n  function car25519(o) {\n    var c;\n    var i;\n    for (i = 0; i < 16; i++) {\n      o[i] += 65536;\n      c = Math.floor(o[i] / 65536);\n      o[(i+1)*(i<15?1:0)] += c - 1 + 37 * (c-1) * (i===15?1:0);\n      o[i] -= (c * 65536);\n    }\n  }\n\n  function sel25519(p, q, b) {\n    var t, c = ~(b-1);\n    for (var i = 0; i < 16; i++) {\n      t = c & (p[i] ^ q[i]);\n      p[i] ^= t;\n      q[i] ^= t;\n    }\n  }\n\n  function unpack25519(o, n) {\n    var i;\n    for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n    o[15] &= 0x7fff;\n  }\n\n  // addition\n  function A(o, a, b) {\n    var i;\n    for (i = 0; i < 16; i++) o[i] = (a[i] + b[i])|0;\n  }\n\n  // subtraction\n  function Z(o, a, b) {\n    var i;\n    for (i = 0; i < 16; i++) o[i] = (a[i] - b[i])|0;\n  }\n\n  // multiplication\n  function M(o, a, b) {\n    var i, j, t = new Float64Array(31);\n    for (i = 0; i < 31; i++) t[i] = 0;\n    for (i = 0; i < 16; i++) {\n      for (j = 0; j < 16; j++) {\n        t[i+j] += a[i] * b[j];\n      }\n    }\n    for (i = 0; i < 15; i++) {\n      t[i] += 38 * t[i+16];\n    }\n    for (i = 0; i < 16; i++) o[i] = t[i];\n    car25519(o);\n    car25519(o);\n  }\n\n  // squaring\n  function S(o, a) {\n    M(o, a, a);\n  }\n\n  // inversion\n  function inv25519(o, i) {\n    var c = gf();\n    var a;\n    for (a = 0; a < 16; a++) c[a] = i[a];\n    for (a = 253; a >= 0; a--) {\n      S(c, c);\n      if(a !== 2 && a !== 4) M(c, c, i);\n    }\n    for (a = 0; a < 16; a++) o[a] = c[a];\n  }\n\n  function pack25519(o, n) {\n    var i, j, b;\n    var m = gf(), t = gf();\n    for (i = 0; i < 16; i++) t[i] = n[i];\n    car25519(t);\n    car25519(t);\n    car25519(t);\n    for (j = 0; j < 2; j++) {\n      m[0] = t[0] - 0xffed;\n      for (i = 1; i < 15; i++) {\n        m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n        m[i-1] &= 0xffff;\n      }\n      m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n      b = (m[15]>>16) & 1;\n      m[14] &= 0xffff;\n      sel25519(t, m, 1-b);\n    }\n    for (i = 0; i < 16; i++) {\n      o[2*i] = t[i] & 0xff;\n      o[2*i+1] = t[i] >> 8;\n    }\n  }\n\n  function par25519(a) {\n    var d = new Uint8Array(32);\n    pack25519(d, a);\n    return d[0] & 1;\n  }\n\n  function vn(x, xi, y, yi, n) {\n    var i, d = 0;\n    for (i = 0; i < n; i++) d |= x[xi + i] ^ y[yi + i];\n    return (1 & ((d - 1) >>> 8)) - 1;\n  }\n\n  function crypto_verify_32(x, xi, y, yi) {\n    return vn(x, xi, y, yi, 32);\n  }\n\n  function neq25519(a, b) {\n    var c = new Uint8Array(32), d = new Uint8Array(32);\n    pack25519(c, a);\n    pack25519(d, b);\n    return crypto_verify_32(c, 0, d, 0);\n  }\n\n  function pow2523(o, i) {\n    var c = gf();\n    var a;\n    for (a = 0; a < 16; a++) c[a] = i[a];\n    for (a = 250; a >= 0; a--) {\n      S(c, c);\n      if (a !== 1) M(c, c, i);\n    }\n    for (a = 0; a < 16; a++) o[a] = c[a];\n  }\n\n  function set25519(r, a) {\n    var i;\n    for (i = 0; i < 16; i++) r[i] = a[i] | 0;\n  }\n\n  function unpackneg(r, p) {\n    var t = gf(), chk = gf(), num = gf(),\n      den = gf(), den2 = gf(), den4 = gf(),\n      den6 = gf();\n\n    set25519(r[2], gf1);\n    unpack25519(r[1], p);\n    S(num, r[1]);\n    M(den, num, D);\n    Z(num, num, r[2]);\n    A(den, r[2], den);\n\n    S(den2, den);\n    S(den4, den2);\n    M(den6, den4, den2);\n    M(t, den6, num);\n    M(t, t, den);\n\n    pow2523(t, t);\n    M(t, t, num);\n    M(t, t, den);\n    M(t, t, den);\n    M(r[0], t, den);\n\n    S(chk, r[0]);\n    M(chk, chk, den);\n    if (neq25519(chk, num)) M(r[0], r[0], I);\n\n    S(chk, r[0]);\n    M(chk, chk, den);\n    if (neq25519(chk, num)) return -1;\n\n    if (par25519(r[0]) === (p[31] >> 7)) Z(r[0], gf0, r[0]);\n\n    M(r[3], r[0], r[1]);\n    return 0;\n  }\n\n  // ----\n\n  // Converts Ed25519 public key to Curve25519 public key.\n  // montgomeryX = (edwardsY + 1)*inverse(1 - edwardsY) mod p\n  function convertPublicKey(pk) {\n    var z = new Uint8Array(32),\n      q = [gf(), gf(), gf(), gf()],\n      a = gf(), b = gf();\n\n    if (unpackneg(q, pk)) return null; // reject invalid key\n\n    var y = q[1];\n\n    A(a, gf1, y);\n    Z(b, gf1, y);\n    inv25519(b, b);\n    M(a, a, b);\n\n    pack25519(z, a);\n    return z;\n  }\n\n  // Converts Ed25519 secret key to Curve25519 secret key.\n  function convertSecretKey(sk) {\n    var d = new Uint8Array(64), o = new Uint8Array(32), i;\n    nacl.lowlevel.crypto_hash(d, sk, 32);\n    d[0] &= 248;\n    d[31] &= 127;\n    d[31] |= 64;\n    for (i = 0; i < 32; i++) o[i] = d[i];\n    for (i = 0; i < 64; i++) d[i] = 0;\n    return o;\n  }\n\n  function convertKeyPair(edKeyPair) {\n    var publicKey = convertPublicKey(edKeyPair.publicKey);\n    if (!publicKey) return null;\n    return {\n      publicKey: publicKey,\n      secretKey: convertSecretKey(edKeyPair.secretKey)\n    };\n  }\n\n  return {\n    convertPublicKey: convertPublicKey,\n    convertSecretKey: convertSecretKey,\n    convertKeyPair: convertKeyPair,\n  };\n\n}));\n", "module.exports = require('events').EventEmitter;\n", "'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n  Buffer = _require.Buffer;\nvar _require2 = require('util'),\n  inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n  Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n  _createClass(BufferList, [{\n    key: \"push\",\n    value: function push(v) {\n      var entry = {\n        data: v,\n        next: null\n      };\n      if (this.length > 0) this.tail.next = entry;else this.head = entry;\n      this.tail = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"unshift\",\n    value: function unshift(v) {\n      var 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  }, {\n    key: \"shift\",\n    value: function shift() {\n      if (this.length === 0) return;\n      var ret = this.head.data;\n      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n      --this.length;\n      return ret;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.head = this.tail = null;\n      this.length = 0;\n    }\n  }, {\n    key: \"join\",\n    value: function join(s) {\n      if (this.length === 0) return '';\n      var p = this.head;\n      var ret = '' + p.data;\n      while (p = p.next) ret += s + p.data;\n      return ret;\n    }\n  }, {\n    key: \"concat\",\n    value: function concat(n) {\n      if (this.length === 0) return Buffer.alloc(0);\n      var ret = Buffer.allocUnsafe(n >>> 0);\n      var p = this.head;\n      var i = 0;\n      while (p) {\n        copyBuffer(p.data, ret, 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  }, {\n    key: \"consume\",\n    value: function consume(n, hasStrings) {\n      var ret;\n      if (n < this.head.data.length) {\n        // `slice` is the same for buffers and strings.\n        ret = this.head.data.slice(0, n);\n        this.head.data = this.head.data.slice(n);\n      } else if (n === this.head.data.length) {\n        // First chunk is a perfect match.\n        ret = this.shift();\n      } else {\n        // Result spans more than one buffer.\n        ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n      }\n      return ret;\n    }\n  }, {\n    key: \"first\",\n    value: function first() {\n      return this.head.data;\n    }\n\n    // Consumes a specified amount of characters from the buffered data.\n  }, {\n    key: \"_getString\",\n    value: function _getString(n) {\n      var p = this.head;\n      var c = 1;\n      var ret = p.data;\n      n -= ret.length;\n      while (p = p.next) {\n        var str = p.data;\n        var nb = n > str.length ? str.length : n;\n        if (nb === str.length) ret += str;else ret += str.slice(0, n);\n        n -= nb;\n        if (n === 0) {\n          if (nb === str.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = str.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes from the buffered data.\n  }, {\n    key: \"_getBuffer\",\n    value: function _getBuffer(n) {\n      var ret = Buffer.allocUnsafe(n);\n      var p = this.head;\n      var c = 1;\n      p.data.copy(ret);\n      n -= p.data.length;\n      while (p = p.next) {\n        var buf = p.data;\n        var nb = n > buf.length ? buf.length : n;\n        buf.copy(ret, ret.length - n, 0, nb);\n        n -= nb;\n        if (n === 0) {\n          if (nb === buf.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = buf.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Make sure the linked list only shows the minimal necessary information.\n  }, {\n    key: custom,\n    value: function value(_, options) {\n      return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n        // Only inspect one level.\n        depth: 0,\n        // It should not recurse.\n        customInspect: false\n      }));\n    }\n  }]);\n  return BufferList;\n}();", "'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        process.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorNT, this, err);\n      }\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\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else {\n        process.nextTick(emitCloseNT, _this);\n      }\n    } else if (cb) {\n      process.nextTick(emitCloseNT, _this);\n      cb(err);\n    } else {\n      process.nextTick(emitCloseNT, _this);\n    }\n  });\n  return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n  emitErrorNT(self, err);\n  emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n  if (self._writableState && !self._writableState.emitClose) return;\n  if (self._readableState && !self._readableState.emitClose) return;\n  self.emit('close');\n}\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\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  var rState = stream._readableState;\n  var wState = stream._writableState;\n  if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy,\n  errorOrDestroy: errorOrDestroy\n};", "'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error;\n  }\n\n  function getMessage(arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message;\n    } else {\n      return message(arg1, arg2, arg3);\n    }\n  }\n\n  var NodeError =\n  /*#__PURE__*/\n  function (_Base) {\n    _inheritsLoose(NodeError, _Base);\n\n    function NodeError(arg1, arg2, arg3) {\n      return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n    }\n\n    return NodeError;\n  }(Base);\n\n  NodeError.prototype.name = Base.name;\n  NodeError.prototype.code = code;\n  codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    var len = expected.length;\n    expected = expected.map(function (i) {\n      return String(i);\n    });\n\n    if (len > 2) {\n      return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n    } else if (len === 2) {\n      return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n    } else {\n      return \"of \".concat(thing, \" \").concat(expected[0]);\n    }\n  } else {\n    return \"of \".concat(thing, \" \").concat(String(expected));\n  }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n\n  return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n  return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  // determiner: 'must be' or 'must not be'\n  var determiner;\n\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n\n  var msg;\n\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } else {\n    var type = includes(name, '.') ? 'property' : 'argument';\n    msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  }\n\n  msg += \". Received type \".concat(typeof actual);\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n  return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n  return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n  return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n", "'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n  if (hwm != null) {\n    if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n      var name = isDuplex ? duplexKey : 'highWaterMark';\n      throw new ERR_INVALID_OPT_VALUE(name, hwm);\n    }\n    return Math.floor(hwm);\n  }\n\n  // Default value\n  return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n  getHighWaterMark: getHighWaterMark\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';\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n  ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n  ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n  ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\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 Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!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 = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\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  var noDecode = 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.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 = function (er) {\n    onwrite(stream, er);\n  };\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  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\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  // 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.emitClose !== false;\n\n  // Should .destroy() be called after 'finish' (and potentially 'end')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function writableStateBufferGetter() {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function value(object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function realHasInstance(object) {\n    return object instanceof this;\n  };\n}\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\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  var isDuplex = this instanceof Duplex;\n  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n  this._writableState = new WritableState(options, this, isDuplex);\n\n  // legacy.\n  this.writable = true;\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  }\n  Stream.call(this);\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 writeAfterEnd(stream, cb) {\n  var er = new ERR_STREAM_WRITE_AFTER_END();\n  // TODO: defer error events consistently everywhere, not just the cb\n  errorOrDestroy(stream, er);\n  process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var er;\n  if (chunk === null) {\n    er = new ERR_STREAM_NULL_VALUES();\n  } else if (typeof chunk !== 'string' && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n  }\n  if (er) {\n    errorOrDestroy(stream, er);\n    process.nextTick(cb, er);\n    return false;\n  }\n  return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n  if (typeof cb !== 'function') cb = nop;\n  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n  return ret;\n};\nWritable.prototype.cork = function () {\n  this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n  if (state.corked) {\n    state.corked--;\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\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, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n  state.length += len;\n  var 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) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n  return ret;\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'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    process.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    process.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n  onwriteStateUpdate(state);\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state) || stream.destroyed;\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n    if (sync) {\n      process.nextTick(afterWrite, stream, state, finished, cb);\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var 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  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      errorOrDestroy(stream, err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.pendingcb++;\n      state.finalCalled = true;\n      process.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\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        var rState = stream._readableState;\n        if (!rState || rState.autoDestroy && rState.endEmitted) {\n          stream.destroy();\n        }\n      }\n    }\n  }\n  return need;\n}\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  cb(err);\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 prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n  // Allow the keys array to be GC'ed.\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\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  this.allowHalfOpen = true;\n  if (options) {\n    if (options.readable === false) this.readable = false;\n    if (options.writable === false) this.writable = false;\n    if (options.allowHalfOpen === false) {\n      this.allowHalfOpen = false;\n      this.once('end', onend);\n    }\n  }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // If the writable side ended, then we're ok.\n  if (this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n  self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});", "// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    callback.apply(this, args);\n  };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n  if (typeof opts === 'function') return eos(stream, null, opts);\n  if (!opts) opts = {};\n  callback = once(callback || noop);\n  var readable = opts.readable || opts.readable !== false && stream.readable;\n  var writable = opts.writable || opts.writable !== false && stream.writable;\n  var onlegacyfinish = function onlegacyfinish() {\n    if (!stream.writable) onfinish();\n  };\n  var writableEnded = stream._writableState && stream._writableState.finished;\n  var onfinish = function onfinish() {\n    writable = false;\n    writableEnded = true;\n    if (!readable) callback.call(stream);\n  };\n  var readableEnded = stream._readableState && stream._readableState.endEmitted;\n  var onend = function onend() {\n    readable = false;\n    readableEnded = true;\n    if (!writable) callback.call(stream);\n  };\n  var onerror = function onerror(err) {\n    callback.call(stream, err);\n  };\n  var onclose = function onclose() {\n    var err;\n    if (readable && !readableEnded) {\n      if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n    if (writable && !writableEnded) {\n      if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n  };\n  var onrequest = function onrequest() {\n    stream.req.on('finish', onfinish);\n  };\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish);\n    stream.on('abort', onclose);\n    if (stream.req) onrequest();else stream.on('request', onrequest);\n  } else if (writable && !stream._writableState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish);\n    stream.on('close', onlegacyfinish);\n  }\n  stream.on('end', onend);\n  stream.on('finish', onfinish);\n  if (opts.error !== false) stream.on('error', onerror);\n  stream.on('close', onclose);\n  return function () {\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}\nmodule.exports = eos;", "'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n  return {\n    value: value,\n    done: done\n  };\n}\nfunction readAndResolve(iter) {\n  var resolve = iter[kLastResolve];\n  if (resolve !== null) {\n    var data = iter[kStream].read();\n    // we defer if data is null\n    // we can be expecting either 'end' or\n    // 'error'\n    if (data !== null) {\n      iter[kLastPromise] = null;\n      iter[kLastResolve] = null;\n      iter[kLastReject] = null;\n      resolve(createIterResult(data, false));\n    }\n  }\n}\nfunction onReadable(iter) {\n  // we wait for the next tick, because it might\n  // emit an error with process.nextTick\n  process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n  return function (resolve, reject) {\n    lastPromise.then(function () {\n      if (iter[kEnded]) {\n        resolve(createIterResult(undefined, true));\n        return;\n      }\n      iter[kHandlePromise](resolve, reject);\n    }, reject);\n  };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n  get stream() {\n    return this[kStream];\n  },\n  next: function next() {\n    var _this = this;\n    // if we have detected an error in the meanwhile\n    // reject straight away\n    var error = this[kError];\n    if (error !== null) {\n      return Promise.reject(error);\n    }\n    if (this[kEnded]) {\n      return Promise.resolve(createIterResult(undefined, true));\n    }\n    if (this[kStream].destroyed) {\n      // We need to defer via nextTick because if .destroy(err) is\n      // called, the error will be emitted via nextTick, and\n      // we cannot guarantee that there is no error lingering around\n      // waiting to be emitted.\n      return new Promise(function (resolve, reject) {\n        process.nextTick(function () {\n          if (_this[kError]) {\n            reject(_this[kError]);\n          } else {\n            resolve(createIterResult(undefined, true));\n          }\n        });\n      });\n    }\n\n    // if we have multiple next() calls\n    // we will wait for the previous Promise to finish\n    // this logic is optimized to support for await loops,\n    // where next() is only called once at a time\n    var lastPromise = this[kLastPromise];\n    var promise;\n    if (lastPromise) {\n      promise = new Promise(wrapForNext(lastPromise, this));\n    } else {\n      // fast path needed to support multiple this.push()\n      // without triggering the next() queue\n      var data = this[kStream].read();\n      if (data !== null) {\n        return Promise.resolve(createIterResult(data, false));\n      }\n      promise = new Promise(this[kHandlePromise]);\n    }\n    this[kLastPromise] = promise;\n    return promise;\n  }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n  return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n  var _this2 = this;\n  // destroy(err, cb) is a private API\n  // we can guarantee we have that here, because we control the\n  // Readable class this is attached to\n  return new Promise(function (resolve, reject) {\n    _this2[kStream].destroy(null, function (err) {\n      if (err) {\n        reject(err);\n        return;\n      }\n      resolve(createIterResult(undefined, true));\n    });\n  });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n  var _Object$create;\n  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n    value: stream,\n    writable: true\n  }), _defineProperty(_Object$create, kLastResolve, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kLastReject, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kError, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kEnded, {\n    value: stream._readableState.endEmitted,\n    writable: true\n  }), _defineProperty(_Object$create, kHandlePromise, {\n    value: function value(resolve, reject) {\n      var data = iterator[kStream].read();\n      if (data) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        resolve(createIterResult(data, false));\n      } else {\n        iterator[kLastResolve] = resolve;\n        iterator[kLastReject] = reject;\n      }\n    },\n    writable: true\n  }), _Object$create));\n  iterator[kLastPromise] = null;\n  finished(stream, function (err) {\n    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n      var reject = iterator[kLastReject];\n      // reject if we are waiting for data in the Promise\n      // returned by next() and store the error\n      if (reject !== null) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        reject(err);\n      }\n      iterator[kError] = err;\n      return;\n    }\n    var resolve = iterator[kLastResolve];\n    if (resolve !== null) {\n      iterator[kLastPromise] = null;\n      iterator[kLastResolve] = null;\n      iterator[kLastReject] = null;\n      resolve(createIterResult(undefined, true));\n    }\n    iterator[kEnded] = true;\n  });\n  stream.on('readable', onReadable.bind(null, iterator));\n  return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;", "module.exports = function () {\n  throw new Error('Readable.from is not available in the browser')\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\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function debug() {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\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);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\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 Duplex;\n\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  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\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 = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\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 = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\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  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n  this.paused = true;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'end' (and potentially 'finish')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // has it been destroyed\n  this.destroyed = false;\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.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\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  var isDuplex = this instanceof Duplex;\n  this._readableState = new ReadableState(options, this, isDuplex);\n\n  // legacy\n  this.readable = true;\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n  Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function 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});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  cb(err);\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  var state = this._readableState;\n  var skipChunkCheck;\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  debug('readableAddChunk', chunk);\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      errorOrDestroy(stream, er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n      if (addToFront) {\n        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());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) {\n        return false;\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n      maybeReadMore(stream, state);\n    }\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) {\n    state.awaitDrain = 0;\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);else state.buffer.push(chunk);\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n  }\n  return er;\n}\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  var 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\n  // Iterate over current buffer to convert already stored Buffers:\n  var p = this._readableState.buffer.head;\n  var content = '';\n  while (p !== null) {\n    content += decoder.write(p.data);\n    p = p.next;\n  }\n  this._readableState.buffer.clear();\n  if (content !== '') this._readableState.buffer.push(content);\n  this._readableState.length = content.length;\n  return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n    n = MAX_HWM;\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.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\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 <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\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  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n  if (n !== 0) state.emittedReadable = false;\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 === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);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  var doRead = state.needReadable;\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, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\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  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark;\n    n = 0;\n  } else {\n    state.length -= n;\n    state.awaitDrain = 0;\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) this.emit('data', ret);\n  return ret;\n};\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk');\n  if (state.ended) return;\n  if (state.decoder) {\n    var 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    if (!state.emittedReadable) {\n      state.emittedReadable = true;\n      emitReadable_(stream);\n    }\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  var 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  var state = stream._readableState;\n  debug('emitReadable_', state.destroyed, state.length, state.ended);\n  if (!state.destroyed && (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) {\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 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 (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n    var 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  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) process.nextTick(endFn);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\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  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n  var 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    dest.removeListener('drain', ondrain);\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 (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    var ret = dest.write(chunk);\n    debug('dest.write', ret);\n    if (ret === false) {\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 ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n      }\n      src.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 (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\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  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n  return dest;\n};\nfunction pipeOnDrain(src) {\n  return function pipeOnDrainFunctionResult() {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = {\n    hasUnpiped: false\n  };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n      hasUnpiped: false\n    });\n    return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\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  var res = Stream.prototype.on.call(this, ev, fn);\n  var 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  var 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.removeAllListeners = function (ev) {\n  var 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  var state = self._readableState;\n  state.readableListening = self.listenerCount('readable') > 0;\n  if (state.resumeScheduled && !state.paused) {\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  }\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  var 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.paused = 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.paused = true;\n  return this;\n};\nfunction flow(stream) {\n  var 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  var _this = this;\n  var state = this._readableState;\n  var paused = false;\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n    _this.push(null);\n  });\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function methodWrap(method) {\n        return function methodWrapReturnFunction() {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n  return this;\n};\nif (typeof Symbol === 'function') {\n  Readable.prototype[Symbol.asyncIterator] = function () {\n    if (createReadableStreamAsyncIterator === undefined) {\n      createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n    }\n    return createReadableStreamAsyncIterator(this);\n  };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.highWaterMark;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState && this._readableState.buffer;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.flowing;\n  },\n  set: function set(state) {\n    if (this._readableState) {\n      this._readableState.flowing = state;\n    }\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.length;\n  }\n});\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  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();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  var 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.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n    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      var wState = stream._writableState;\n      if (!wState || wState.autoDestroy && wState.finished) {\n        stream.destroy();\n      }\n    }\n  }\n}\nif (typeof Symbol === 'function') {\n  Readable.from = function (iterable, opts) {\n    if (from === undefined) {\n      from = require('./internal/streams/from');\n    }\n    return from(Readable, iterable, opts);\n  };\n}\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\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\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n  ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n  var cb = ts.writecb;\n  if (cb === null) {\n    return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n  }\n  ts.writechunk = null;\n  ts.writecb = null;\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    this.push(data);\n  cb(er);\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n  Duplex.call(this, options);\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\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  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  this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n  var _this = this;\n  if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n  if (ts.writechunk !== null && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\nTransform.prototype._destroy = function (err, cb) {\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n  });\n};\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // TODO(BridgeAR): Write a test for these two error cases\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n  return stream.push(null);\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\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(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};", "// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    callback.apply(void 0, arguments);\n  };\n}\nvar _require$codes = require('../../../errors').codes,\n  ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n  // Rethrow the error if it exists to avoid swallowing it\n  if (err) throw err;\n}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n  callback = once(callback);\n  var closed = false;\n  stream.on('close', function () {\n    closed = true;\n  });\n  if (eos === undefined) eos = require('./end-of-stream');\n  eos(stream, {\n    readable: reading,\n    writable: writing\n  }, function (err) {\n    if (err) return callback(err);\n    closed = true;\n    callback();\n  });\n  var destroyed = false;\n  return function (err) {\n    if (closed) return;\n    if (destroyed) return;\n    destroyed = true;\n\n    // request.destroy just do .end - .abort is what we want\n    if (isRequest(stream)) return stream.abort();\n    if (typeof stream.destroy === 'function') return stream.destroy();\n    callback(err || new ERR_STREAM_DESTROYED('pipe'));\n  };\n}\nfunction call(fn) {\n  fn();\n}\nfunction pipe(from, to) {\n  return from.pipe(to);\n}\nfunction popCallback(streams) {\n  if (!streams.length) return noop;\n  if (typeof streams[streams.length - 1] !== 'function') return noop;\n  return streams.pop();\n}\nfunction pipeline() {\n  for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n    streams[_key] = arguments[_key];\n  }\n  var callback = popCallback(streams);\n  if (Array.isArray(streams[0])) streams = streams[0];\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams');\n  }\n  var error;\n  var destroys = streams.map(function (stream, i) {\n    var reading = i < streams.length - 1;\n    var writing = i > 0;\n    return destroyer(stream, reading, writing, function (err) {\n      if (!error) error = err;\n      if (err) destroys.forEach(call);\n      if (reading) return;\n      destroys.forEach(call);\n      callback(error);\n    });\n  });\n  return streams.reduce(pipe);\n}\nmodule.exports = pipeline;", "exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ReadableWebToNodeStream = void 0;\nconst readable_stream_1 = require(\"readable-stream\");\n/**\n * Converts a Web-API stream into Node stream.Readable class\n * Node stream readable: https://nodejs.org/api/stream.html#stream_readable_streams\n * Web API readable-stream: https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n * Node readable stream: https://nodejs.org/api/stream.html#stream_readable_streams\n */\nclass ReadableWebToNodeStream extends readable_stream_1.Readable {\n    /**\n     *\n     * @param stream Readable\u200BStream: https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n     */\n    constructor(stream) {\n        super();\n        this.bytesRead = 0;\n        this.released = false;\n        this.reader = stream.getReader();\n    }\n    /**\n     * Implementation of readable._read(size).\n     * When readable._read() is called, if data is available from the resource,\n     * the implementation should begin pushing that data into the read queue\n     * https://nodejs.org/api/stream.html#stream_readable_read_size_1\n     */\n    async _read() {\n        // Should start pushing data into the queue\n        // Read data from the underlying Web-API-readable-stream\n        if (this.released) {\n            this.push(null); // Signal EOF\n            return;\n        }\n        this.pendingRead = this.reader.read();\n        const data = await this.pendingRead;\n        // clear the promise before pushing pushing new data to the queue and allow sequential calls to _read()\n        delete this.pendingRead;\n        if (data.done || this.released) {\n            this.push(null); // Signal EOF\n        }\n        else {\n            this.bytesRead += data.value.length;\n            this.push(data.value); // Push new data to the queue\n        }\n    }\n    /**\n     * If there is no unresolved read call to Web-API Readable\u200BStream immediately returns;\n     * otherwise will wait until the read is resolved.\n     */\n    async waitForReadToComplete() {\n        if (this.pendingRead) {\n            await this.pendingRead;\n        }\n    }\n    /**\n     * Close wrapper\n     */\n    async close() {\n        await this.syncAndRelease();\n    }\n    async syncAndRelease() {\n        this.released = true;\n        await this.waitForReadToComplete();\n        await this.reader.releaseLock();\n    }\n}\nexports.ReadableWebToNodeStream = ReadableWebToNodeStream;\n//# sourceMappingURL=index.js.map", "export * from './web5.js';", "import type { Web5Agent } from '@tbd54566975/web5-agent';\nimport type { SyncManager } from '@tbd54566975/web5-user-agent';\nimport type { DidState, DidMethodApi, DidResolverCache, DwnServiceEndpoint } from '@tbd54566975/dids';\n\nimport ms from 'ms';\n\n// import  { Web5ProxyAgent } from '@tbd54566975/web5-proxy-agent';\nimport { Dwn } from '@tbd54566975/dwn-sdk-js';\nimport { Web5UserAgent, ProfileApi, SyncApi } from '@tbd54566975/web5-user-agent';\nimport { DidIonApi, DidKeyApi, utils as didUtils } from '@tbd54566975/dids';\n\nimport { VcApi } from './vc-api.js';\nimport { DwnApi } from './dwn-api.js';\nimport { DidApi } from './did-api.js';\nimport { AppStorage } from './app-storage.js';\nimport { getRandomInt } from './utils.js';\nimport { DidResolutionCache } from './did-resolution-cache.js';\n\n/**\n * overrides to defaults configured for technical preview phase\n */\nexport type TechPreviewOptions = {\n  /** overrides default dwnEndpoints provided for technical preview. see `Web5.#enqueueNextSync` */\n  dwnEndpoints?: string[];\n}\n\n/**\n * optional overrides that can be provided when calling {@link Web5.connect}\n */\nexport type Web5ConnectOptions = {\n  /** a custom {@link Web5Agent}. Defaults to creating an embedded {@link Web5UserAgent} if one isnt provided */\n  web5Agent?: Web5Agent;\n  /** additional {@link DidMethodApi}s that can be used to create and resolve DID methods. defaults to did:key and did:ion */\n  didMethodApis?: DidMethodApi[];\n  /** custom cache used to store DidResolutionResults. defaults to a {@link DidResolutionCache} */\n  didResolutionCache?: DidResolverCache;\n  /** overrides to defaults configured for technical preview phase. See {@link TechPreviewOptions} */\n  techPreview?: TechPreviewOptions;\n}\n\n/**\n * @see {@link Web5ConnectOptions}\n */\ntype Web5Options = {\n  web5Agent: Web5Agent;\n  appStorage?: AppStorage;\n  connectedDid: string;\n};\n\nexport class Web5 {\n  appStorage: AppStorage;\n  dwn: DwnApi;\n  vc: VcApi;\n  #connectedDid: string;\n\n  /**\n   * Statically available DID functionality. can be used to create and resolve DIDs without calling {@link connect}.\n   * By default, can create and resolve `did:key` and `did:ion`. DID resolution results are not cached unless `connect`\n   * is called\n   */\n  static did = new DidApi({\n    didMethodApis: [new DidIonApi(), new DidKeyApi()]\n  });\n\n  /**\n   * DID functionality (e.g. creating and resolving DIDs)\n   */\n  get did() { return Web5.did; }\n\n  private static APP_DID_KEY = 'WEB5_APP_DID';\n\n  private constructor(options: Web5Options) {\n    this.#connectedDid = options.connectedDid;\n    this.dwn = new DwnApi(options.web5Agent, this.#connectedDid);\n    this.vc = new VcApi(options.web5Agent, this.#connectedDid);\n    this.appStorage ||= new AppStorage();\n  }\n\n  /**\n   * Connects to a {@link Web5Agent}. defaults to creating an embedded {@link Web5UserAgent} if one isn't provided\n   * @param options - optional overrides\n   * @returns\n   */\n  static async connect(options: Web5ConnectOptions = {}) {\n    // load app's did\n    const appStorage = new AppStorage();\n    const cachedAppDidState = await appStorage.get(Web5.APP_DID_KEY);\n    let appDidState: DidState;\n\n    if (cachedAppDidState) {\n      appDidState = JSON.parse(cachedAppDidState);\n    } else {\n      appDidState = await this.did.create('key');\n      appStorage.set(Web5.APP_DID_KEY, JSON.stringify(appDidState));\n    }\n\n    // TODO: sniff to see if remote agent is available\n    // TODO: if available,connect to remote agent using Web5ProxyAgent\n\n    // fall back to instantiating local agent\n    const profileApi = new ProfileApi();\n    let [ profile ] = await profileApi.listProfiles();\n\n    options.didMethodApis ??= [];\n\n    // override default cache used by `Web5.did`\n    Web5.did = new DidApi({\n      didMethodApis : [new DidIonApi(), new DidKeyApi(), ...options.didMethodApis],\n      cache         : options.didResolutionCache || new DidResolutionCache()\n    });\n\n    const dwn = await Dwn.create();\n    const syncManager = new SyncApi({\n      profileManager : profileApi,\n      didResolver    : Web5.did.resolver, // share the same resolver to share the same underlying cache\n      dwn            : dwn\n    });\n\n    if (!profile) {\n      const dwnUrls = options.techPreview?.dwnEndpoints || await Web5.getTechPreviewDwnEndpoints();\n      const ionCreateOptions = await DidIonApi.generateDwnConfiguration(dwnUrls);\n      const defaultProfileDid = await this.did.create('ion', ionCreateOptions);\n\n      // setting id & name as the app's did to make migration easier\n      profile = await profileApi.createProfile({\n        name        : appDidState.id,\n        did         : defaultProfileDid,\n        connections : [appDidState.id],\n      });\n\n      await syncManager.registerProfile(profile.did.id);\n    }\n\n    const agent = await Web5UserAgent.create({\n      profileManager : profileApi,\n      didResolver    : Web5.did.resolver, // share the same resolver to share the same underlying cache\n      syncManager    : syncManager,\n      dwn            : dwn,\n    });\n\n    const connectedDid = profile.did.id;\n    const web5 = new Web5({ appStorage: appStorage, web5Agent: agent, connectedDid });\n\n    Web5.#enqueueNextSync(syncManager, ms('2m'));\n\n    return { web5, did: connectedDid };\n  }\n\n  /**\n   * Dynamically selects up to 2 DWN endpoints that are provided\n   * by default during the Tech Preview period.\n   */\n  static async getTechPreviewDwnEndpoints(): Promise<string[]> {\n    let response: Response;\n    try {\n      response = await fetch('https://dwn.tbddev.org/.well-known/did.json');\n      if (!response.ok) {\n        throw new Error(`HTTP Error: ${response.status} ${response.statusText}`);\n      }\n    } catch(e) {\n      console.warn('failed to get tech preview dwn endpoints:', e.message);\n      return [];\n    }\n\n    const didDoc = await response.json();\n    const [ service ] = didUtils.getServices(didDoc, { id: '#dwn', type: 'DecentralizedWebNode' });\n    const { nodes } = <DwnServiceEndpoint>service.serviceEndpoint;\n\n    // allocate up to 2 nodes for a user.\n    const dwnUrls = new Set<string>();\n    const numNodesToAllocate = Math.min(nodes.length, 2);\n\n    for (let attempts = 0; attempts < nodes.length && dwnUrls.size < numNodesToAllocate; attempts += 1) {\n      const nodeIdx = getRandomInt(0, nodes.length);\n      const dwnUrl = nodes[nodeIdx];\n\n      try {\n        const healthCheck = await fetch(`${dwnUrl}/health`);\n        if (healthCheck.ok) {\n          dwnUrls.add(dwnUrl);\n        }\n      } catch(e: unknown) {\n        // Ignore healthcheck failures and try the next node.\n      }\n    }\n\n    return Array.from(dwnUrls);\n  }\n\n  static #enqueueNextSync(syncManager: SyncManager, delay = 1_000) {\n    setTimeout(async () => {\n      try {\n        await syncManager.push();\n        await syncManager.pull();\n\n        return this.#enqueueNextSync(syncManager, delay);\n      } catch(e) {\n        console.error('Sync failed due to error: ', e);\n      }\n    }, delay);\n  }\n}", "/* eslint-disable max-len */\n\n\n// export everything that we want to be consumable\nexport type { DwnConfig } from './dwn.js';\nexport type { DwnServiceEndpoint, ServiceEndpoint, DidDocument, DidResolutionResult, DidResolutionMetadata, DidDocumentMetadata, VerificationMethod } from './did/did-resolver.js';\nexport type { EventLog, Event } from './types/event-log.js';\nexport type { EventsGetMessage, EventsGetReply } from './types/event-types.js';\nexport type { HooksWriteMessage } from './types/hooks-types.js';\nexport type { GenericMessage } from './types/message-types.js';\nexport type { MessagesGetMessage, MessagesGetReply } from './types/messages-types.js';\nexport type { ProtocolsConfigureDescriptor, ProtocolDefinition, ProtocolRuleSet, ProtocolsQueryFilter, ProtocolsConfigureMessage, ProtocolsQueryMessage } from './types/protocols-types.js';\nexport type { EncryptionProperty, RecordsDeleteMessage, RecordsQueryMessage, RecordsQueryReply, RecordsQueryReplyEntry, RecordsReadReply, RecordsWriteDescriptor, RecordsWriteMessage } from './types/records-types.js';\nexport type { SnapshotsCreateDescriptor, SnapshotsCreateMessage, SnapshotDefinition, SnapshotScope, SnapshotScopeType } from './types/snapshots-types.js';\nexport { AllowAllTenantGate, TenantGate } from './core/tenant-gate.js';\nexport { Cid } from './utils/cid.js';\nexport { DataStore } from './types/data-store.js';\nexport { DataStoreLevel } from './store/data-store-level.js';\nexport { DateSort } from './interfaces/records-query.js';\nexport { DataStream } from './utils/data-stream.js';\nexport { DerivedPrivateJwk, HdKey, KeyDerivationScheme } from './utils/hd-key.js';\nexport { DidKeyResolver } from './did/did-key-resolver.js';\nexport { DidIonResolver } from './did/did-ion-resolver.js';\nexport { DidResolver, DidMethodResolver } from './did/did-resolver.js';\nexport { Dwn } from './dwn.js';\nexport { DwnConstant } from './core/dwn-constant.js';\nexport { DwnError, DwnErrorCode } from './core/dwn-error.js';\nexport { DwnInterfaceName, DwnMethodName } from './core/message.js';\nexport { Encoder } from './utils/encoder.js';\nexport { EventLogLevel } from './event-log/event-log-level.js';\nexport { EventsGet, EventsGetOptions } from './interfaces/events-get.js';\nexport { Encryption, EncryptionAlgorithm } from './utils/encryption.js';\nexport { EncryptionInput, KeyEncryptionInput, RecordsWrite, RecordsWriteOptions, CreateFromOptions } from './interfaces/records-write.js';\nexport { HooksWrite, HooksWriteOptions } from './interfaces/hooks-write.js';\nexport { Jws } from './utils/jws.js';\nexport { KeyMaterial, PrivateJwk, PublicJwk } from './types/jose-types.js';\nexport { Message } from './core/message.js';\nexport { MessagesGet, MessagesGetOptions } from './interfaces/messages-get.js';\nexport { UnionMessageReply } from './core/message-reply.js';\nexport { MessageStore, MessageStoreOptions } from './types/message-store.js';\nexport { MessageStoreLevel } from './store/message-store-level.js';\nexport { ProtocolsConfigure, ProtocolsConfigureOptions } from './interfaces/protocols-configure.js';\nexport { ProtocolsQuery, ProtocolsQueryOptions } from './interfaces/protocols-query.js';\nexport { Records } from './utils/records.js';\nexport { RecordsDelete, RecordsDeleteOptions } from './interfaces/records-delete.js';\nexport { RecordsQuery, RecordsQueryOptions } from './interfaces/records-query.js';\nexport { RecordsRead, RecordsReadOptions } from './interfaces/records-read.js';\nexport { SnapshotsCreate, SnapshotsCreateOptions } from './interfaces/snapshots-create.js';\nexport { Secp256k1 } from './utils/secp256k1.js';\nexport { SignatureInput } from './types/jws-types.js';", "/**\n * An interface that determines if a DID is a tenant of the DWN.\n */\nexport interface TenantGate {\n  /**\n   * @returns `true` if the given DID is a tenant of the DWN; `false` otherwise\n   */\n  isTenant(did: string): Promise<boolean>;\n}\n\n/**\n * A tenant gate that treats every DID as a tenant.\n */\nexport class AllowAllTenantGate implements TenantGate {\n  public async isTenant(_did: string): Promise<boolean> {\n    return true;\n  }\n}", "import * as cborg from 'cborg'\nimport { CID } from 'multiformats/cid'\n\n// https://github.com/ipfs/go-ipfs/issues/3570#issuecomment-273931692\nconst CID_CBOR_TAG = 42\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ByteView<T>} ByteView\n */\n\n/**\n * cidEncoder will receive all Objects during encode, it needs to filter out\n * anything that's not a CID and return `null` for that so it's encoded as\n * normal.\n *\n * @param {any} obj\n * @returns {cborg.Token[]|null}\n */\nfunction cidEncoder (obj) {\n  if (obj.asCID !== obj && obj['/'] !== obj.bytes) {\n    return null // any other kind of object\n  }\n  const cid = CID.asCID(obj)\n  /* c8 ignore next 4 */\n  // very unlikely case, and it'll probably throw a recursion error in cborg\n  if (!cid) {\n    return null\n  }\n  const bytes = new Uint8Array(cid.bytes.byteLength + 1)\n  bytes.set(cid.bytes, 1) // prefix is 0x00, for historical reasons\n  return [\n    new cborg.Token(cborg.Type.tag, CID_CBOR_TAG),\n    new cborg.Token(cborg.Type.bytes, bytes)\n  ]\n}\n\n// eslint-disable-next-line jsdoc/require-returns-check\n/**\n * Intercept all `undefined` values from an object walk and reject the entire\n * object if we find one.\n *\n * @returns {null}\n */\nfunction undefinedEncoder () {\n  throw new Error('`undefined` is not supported by the IPLD Data Model and cannot be encoded')\n}\n\n/**\n * Intercept all `number` values from an object walk and reject the entire\n * object if we find something that doesn't fit the IPLD data model (NaN &\n * Infinity).\n *\n * @param {number} num\n * @returns {null}\n */\nfunction numberEncoder (num) {\n  if (Number.isNaN(num)) {\n    throw new Error('`NaN` is not supported by the IPLD Data Model and cannot be encoded')\n  }\n  if (num === Infinity || num === -Infinity) {\n    throw new Error('`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded')\n  }\n  return null\n}\n\nconst encodeOptions = {\n  float64: true,\n  typeEncoders: {\n    Object: cidEncoder,\n    undefined: undefinedEncoder,\n    number: numberEncoder\n  }\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {CID}\n */\nfunction cidDecoder (bytes) {\n  if (bytes[0] !== 0) {\n    throw new Error('Invalid CID for CBOR tag 42; expected leading 0x00')\n  }\n  return CID.decode(bytes.subarray(1)) // ignore leading 0x00\n}\n\nconst decodeOptions = {\n  allowIndefinite: false,\n  coerceUndefinedToNull: true,\n  allowNaN: false,\n  allowInfinity: false,\n  allowBigInt: true, // this will lead to BigInt for ints outside of\n  // safe-integer range, which may surprise users\n  strict: true,\n  useMaps: false,\n  rejectDuplicateMapKeys: true,\n  /** @type {import('cborg').TagDecoder[]} */\n  tags: []\n}\ndecodeOptions.tags[CID_CBOR_TAG] = cidDecoder\n\nexport const name = 'dag-cbor'\nexport const code = 0x71\n\n/**\n * @template T\n * @param {T} node\n * @returns {ByteView<T>}\n */\nexport const encode = (node) => cborg.encode(node, encodeOptions)\n\n/**\n * @template T\n * @param {ByteView<T>} data\n * @returns {T}\n */\nexport const decode = (data) => cborg.decode(data, decodeOptions)\n", "import { encode } from './lib/encode.js';\nimport { decode } from './lib/decode.js';\nimport {\n  Token,\n  Type\n} from './lib/token.js';\nexport {\n  decode,\n  encode,\n  Token,\n  Type\n};", "import { is } from './is.js';\nimport {\n  Token,\n  Type\n} from './token.js';\nimport { Bl } from './bl.js';\nimport { encodeErrPrefix } from './common.js';\nimport { quickEncodeToken } from './jump.js';\nimport { asU8A } from './byte-utils.js';\nimport { encodeUint } from './0uint.js';\nimport { encodeNegint } from './1negint.js';\nimport { encodeBytes } from './2bytes.js';\nimport { encodeString } from './3string.js';\nimport { encodeArray } from './4array.js';\nimport { encodeMap } from './5map.js';\nimport { encodeTag } from './6tag.js';\nimport { encodeFloat } from './7float.js';\nconst defaultEncodeOptions = {\n  float64: false,\n  mapSorter,\n  quickEncodeToken\n};\nexport function makeCborEncoders() {\n  const encoders = [];\n  encoders[Type.uint.major] = encodeUint;\n  encoders[Type.negint.major] = encodeNegint;\n  encoders[Type.bytes.major] = encodeBytes;\n  encoders[Type.string.major] = encodeString;\n  encoders[Type.array.major] = encodeArray;\n  encoders[Type.map.major] = encodeMap;\n  encoders[Type.tag.major] = encodeTag;\n  encoders[Type.float.major] = encodeFloat;\n  return encoders;\n}\nconst cborEncoders = makeCborEncoders();\nconst buf = new Bl();\nclass Ref {\n  constructor(obj, parent) {\n    this.obj = obj;\n    this.parent = parent;\n  }\n  includes(obj) {\n    let p = this;\n    do {\n      if (p.obj === obj) {\n        return true;\n      }\n    } while (p = p.parent);\n    return false;\n  }\n  static createCheck(stack, obj) {\n    if (stack && stack.includes(obj)) {\n      throw new Error(`${ encodeErrPrefix } object contains circular references`);\n    }\n    return new Ref(obj, stack);\n  }\n}\nconst simpleTokens = {\n  null: new Token(Type.null, null),\n  undefined: new Token(Type.undefined, undefined),\n  true: new Token(Type.true, true),\n  false: new Token(Type.false, false),\n  emptyArray: new Token(Type.array, 0),\n  emptyMap: new Token(Type.map, 0)\n};\nconst typeEncoders = {\n  number(obj, _typ, _options, _refStack) {\n    if (!Number.isInteger(obj) || !Number.isSafeInteger(obj)) {\n      return new Token(Type.float, obj);\n    } else if (obj >= 0) {\n      return new Token(Type.uint, obj);\n    } else {\n      return new Token(Type.negint, obj);\n    }\n  },\n  bigint(obj, _typ, _options, _refStack) {\n    if (obj >= BigInt(0)) {\n      return new Token(Type.uint, obj);\n    } else {\n      return new Token(Type.negint, obj);\n    }\n  },\n  Uint8Array(obj, _typ, _options, _refStack) {\n    return new Token(Type.bytes, obj);\n  },\n  string(obj, _typ, _options, _refStack) {\n    return new Token(Type.string, obj);\n  },\n  boolean(obj, _typ, _options, _refStack) {\n    return obj ? simpleTokens.true : simpleTokens.false;\n  },\n  null(_obj, _typ, _options, _refStack) {\n    return simpleTokens.null;\n  },\n  undefined(_obj, _typ, _options, _refStack) {\n    return simpleTokens.undefined;\n  },\n  ArrayBuffer(obj, _typ, _options, _refStack) {\n    return new Token(Type.bytes, new Uint8Array(obj));\n  },\n  DataView(obj, _typ, _options, _refStack) {\n    return new Token(Type.bytes, new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength));\n  },\n  Array(obj, _typ, options, refStack) {\n    if (!obj.length) {\n      if (options.addBreakTokens === true) {\n        return [\n          simpleTokens.emptyArray,\n          new Token(Type.break)\n        ];\n      }\n      return simpleTokens.emptyArray;\n    }\n    refStack = Ref.createCheck(refStack, obj);\n    const entries = [];\n    let i = 0;\n    for (const e of obj) {\n      entries[i++] = objectToTokens(e, options, refStack);\n    }\n    if (options.addBreakTokens) {\n      return [\n        new Token(Type.array, obj.length),\n        entries,\n        new Token(Type.break)\n      ];\n    }\n    return [\n      new Token(Type.array, obj.length),\n      entries\n    ];\n  },\n  Object(obj, typ, options, refStack) {\n    const isMap = typ !== 'Object';\n    const keys = isMap ? obj.keys() : Object.keys(obj);\n    const length = isMap ? obj.size : keys.length;\n    if (!length) {\n      if (options.addBreakTokens === true) {\n        return [\n          simpleTokens.emptyMap,\n          new Token(Type.break)\n        ];\n      }\n      return simpleTokens.emptyMap;\n    }\n    refStack = Ref.createCheck(refStack, obj);\n    const entries = [];\n    let i = 0;\n    for (const key of keys) {\n      entries[i++] = [\n        objectToTokens(key, options, refStack),\n        objectToTokens(isMap ? obj.get(key) : obj[key], options, refStack)\n      ];\n    }\n    sortMapEntries(entries, options);\n    if (options.addBreakTokens) {\n      return [\n        new Token(Type.map, length),\n        entries,\n        new Token(Type.break)\n      ];\n    }\n    return [\n      new Token(Type.map, length),\n      entries\n    ];\n  }\n};\ntypeEncoders.Map = typeEncoders.Object;\ntypeEncoders.Buffer = typeEncoders.Uint8Array;\nfor (const typ of 'Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64'.split(' ')) {\n  typeEncoders[`${ typ }Array`] = typeEncoders.DataView;\n}\nfunction objectToTokens(obj, options = {}, refStack) {\n  const typ = is(obj);\n  const customTypeEncoder = options && options.typeEncoders && options.typeEncoders[typ] || typeEncoders[typ];\n  if (typeof customTypeEncoder === 'function') {\n    const tokens = customTypeEncoder(obj, typ, options, refStack);\n    if (tokens != null) {\n      return tokens;\n    }\n  }\n  const typeEncoder = typeEncoders[typ];\n  if (!typeEncoder) {\n    throw new Error(`${ encodeErrPrefix } unsupported type: ${ typ }`);\n  }\n  return typeEncoder(obj, typ, options, refStack);\n}\nfunction sortMapEntries(entries, options) {\n  if (options.mapSorter) {\n    entries.sort(options.mapSorter);\n  }\n}\nfunction mapSorter(e1, e2) {\n  const keyToken1 = Array.isArray(e1[0]) ? e1[0][0] : e1[0];\n  const keyToken2 = Array.isArray(e2[0]) ? e2[0][0] : e2[0];\n  if (keyToken1.type !== keyToken2.type) {\n    return keyToken1.type.compare(keyToken2.type);\n  }\n  const major = keyToken1.type.major;\n  const tcmp = cborEncoders[major].compareTokens(keyToken1, keyToken2);\n  if (tcmp === 0) {\n    console.warn('WARNING: complex key types used, CBOR key sorting guarantees are gone');\n  }\n  return tcmp;\n}\nfunction tokensToEncoded(buf, tokens, encoders, options) {\n  if (Array.isArray(tokens)) {\n    for (const token of tokens) {\n      tokensToEncoded(buf, token, encoders, options);\n    }\n  } else {\n    encoders[tokens.type.major](buf, tokens, options);\n  }\n}\nfunction encodeCustom(data, encoders, options) {\n  const tokens = objectToTokens(data, options);\n  if (!Array.isArray(tokens) && options.quickEncodeToken) {\n    const quickBytes = options.quickEncodeToken(tokens);\n    if (quickBytes) {\n      return quickBytes;\n    }\n    const encoder = encoders[tokens.type.major];\n    if (encoder.encodedSize) {\n      const size = encoder.encodedSize(tokens, options);\n      const buf = new Bl(size);\n      encoder(buf, tokens, options);\n      if (buf.chunks.length !== 1) {\n        throw new Error(`Unexpected error: pre-calculated length for ${ tokens } was wrong`);\n      }\n      return asU8A(buf.chunks[0]);\n    }\n  }\n  buf.reset();\n  tokensToEncoded(buf, tokens, encoders, options);\n  return buf.toBytes(true);\n}\nfunction encode(data, options) {\n  options = Object.assign({}, defaultEncodeOptions, options);\n  return encodeCustom(data, cborEncoders, options);\n}\nexport {\n  objectToTokens,\n  encode,\n  encodeCustom,\n  Ref\n};", "const typeofs = [\n  'string',\n  'number',\n  'bigint',\n  'symbol'\n];\nconst objectTypeNames = [\n  'Function',\n  'Generator',\n  'AsyncGenerator',\n  'GeneratorFunction',\n  'AsyncGeneratorFunction',\n  'AsyncFunction',\n  'Observable',\n  'Array',\n  'Buffer',\n  'Object',\n  'RegExp',\n  'Date',\n  'Error',\n  'Map',\n  'Set',\n  'WeakMap',\n  'WeakSet',\n  'ArrayBuffer',\n  'SharedArrayBuffer',\n  'DataView',\n  'Promise',\n  'URL',\n  'HTMLElement',\n  'Int8Array',\n  'Uint8Array',\n  'Uint8ClampedArray',\n  'Int16Array',\n  'Uint16Array',\n  'Int32Array',\n  'Uint32Array',\n  'Float32Array',\n  'Float64Array',\n  'BigInt64Array',\n  'BigUint64Array'\n];\nexport function is(value) {\n  if (value === null) {\n    return 'null';\n  }\n  if (value === undefined) {\n    return 'undefined';\n  }\n  if (value === true || value === false) {\n    return 'boolean';\n  }\n  const typeOf = typeof value;\n  if (typeofs.includes(typeOf)) {\n    return typeOf;\n  }\n  if (typeOf === 'function') {\n    return 'Function';\n  }\n  if (Array.isArray(value)) {\n    return 'Array';\n  }\n  if (isBuffer(value)) {\n    return 'Buffer';\n  }\n  const objectType = getObjectType(value);\n  if (objectType) {\n    return objectType;\n  }\n  return 'Object';\n}\nfunction isBuffer(value) {\n  return value && value.constructor && value.constructor.isBuffer && value.constructor.isBuffer.call(null, value);\n}\nfunction getObjectType(value) {\n  const objectTypeName = Object.prototype.toString.call(value).slice(8, -1);\n  if (objectTypeNames.includes(objectTypeName)) {\n    return objectTypeName;\n  }\n  return undefined;\n}", "class Type {\n  constructor(major, name, terminal) {\n    this.major = major;\n    this.majorEncoded = major << 5;\n    this.name = name;\n    this.terminal = terminal;\n  }\n  toString() {\n    return `Type[${ this.major }].${ this.name }`;\n  }\n  compare(typ) {\n    return this.major < typ.major ? -1 : this.major > typ.major ? 1 : 0;\n  }\n}\nType.uint = new Type(0, 'uint', true);\nType.negint = new Type(1, 'negint', true);\nType.bytes = new Type(2, 'bytes', true);\nType.string = new Type(3, 'string', true);\nType.array = new Type(4, 'array', false);\nType.map = new Type(5, 'map', false);\nType.tag = new Type(6, 'tag', false);\nType.float = new Type(7, 'float', true);\nType.false = new Type(7, 'false', true);\nType.true = new Type(7, 'true', true);\nType.null = new Type(7, 'null', true);\nType.undefined = new Type(7, 'undefined', true);\nType.break = new Type(7, 'break', true);\nclass Token {\n  constructor(type, value, encodedLength) {\n    this.type = type;\n    this.value = value;\n    this.encodedLength = encodedLength;\n    this.encodedBytes = undefined;\n    this.byteValue = undefined;\n  }\n  toString() {\n    return `Token[${ this.type }].${ this.value }`;\n  }\n}\nexport {\n  Type,\n  Token\n};", "import {\n  alloc,\n  concat,\n  slice\n} from './byte-utils.js';\nconst defaultChunkSize = 256;\nexport class Bl {\n  constructor(chunkSize = defaultChunkSize) {\n    this.chunkSize = chunkSize;\n    this.cursor = 0;\n    this.maxCursor = -1;\n    this.chunks = [];\n    this._initReuseChunk = null;\n  }\n  reset() {\n    this.cursor = 0;\n    this.maxCursor = -1;\n    if (this.chunks.length) {\n      this.chunks = [];\n    }\n    if (this._initReuseChunk !== null) {\n      this.chunks.push(this._initReuseChunk);\n      this.maxCursor = this._initReuseChunk.length - 1;\n    }\n  }\n  push(bytes) {\n    let topChunk = this.chunks[this.chunks.length - 1];\n    const newMax = this.cursor + bytes.length;\n    if (newMax <= this.maxCursor + 1) {\n      const chunkPos = topChunk.length - (this.maxCursor - this.cursor) - 1;\n      topChunk.set(bytes, chunkPos);\n    } else {\n      if (topChunk) {\n        const chunkPos = topChunk.length - (this.maxCursor - this.cursor) - 1;\n        if (chunkPos < topChunk.length) {\n          this.chunks[this.chunks.length - 1] = topChunk.subarray(0, chunkPos);\n          this.maxCursor = this.cursor - 1;\n        }\n      }\n      if (bytes.length < 64 && bytes.length < this.chunkSize) {\n        topChunk = alloc(this.chunkSize);\n        this.chunks.push(topChunk);\n        this.maxCursor += topChunk.length;\n        if (this._initReuseChunk === null) {\n          this._initReuseChunk = topChunk;\n        }\n        topChunk.set(bytes, 0);\n      } else {\n        this.chunks.push(bytes);\n        this.maxCursor += bytes.length;\n      }\n    }\n    this.cursor += bytes.length;\n  }\n  toBytes(reset = false) {\n    let byts;\n    if (this.chunks.length === 1) {\n      const chunk = this.chunks[0];\n      if (reset && this.cursor > chunk.length / 2) {\n        byts = this.cursor === chunk.length ? chunk : chunk.subarray(0, this.cursor);\n        this._initReuseChunk = null;\n        this.chunks = [];\n      } else {\n        byts = slice(chunk, 0, this.cursor);\n      }\n    } else {\n      byts = concat(this.chunks, this.cursor);\n    }\n    if (reset) {\n      this.reset();\n    }\n    return byts;\n  }\n}", "export const useBuffer = globalThis.process && !globalThis.process.browser && globalThis.Buffer && typeof globalThis.Buffer.isBuffer === 'function';\nconst textDecoder = new TextDecoder();\nconst textEncoder = new TextEncoder();\nfunction isBuffer(buf) {\n  return useBuffer && globalThis.Buffer.isBuffer(buf);\n}\nexport function asU8A(buf) {\n  if (!(buf instanceof Uint8Array)) {\n    return Uint8Array.from(buf);\n  }\n  return isBuffer(buf) ? new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength) : buf;\n}\nexport const toString = useBuffer ? (bytes, start, end) => {\n  return end - start > 64 ? globalThis.Buffer.from(bytes.subarray(start, end)).toString('utf8') : utf8Slice(bytes, start, end);\n} : (bytes, start, end) => {\n  return end - start > 64 ? textDecoder.decode(bytes.subarray(start, end)) : utf8Slice(bytes, start, end);\n};\nexport const fromString = useBuffer ? string => {\n  return string.length > 64 ? globalThis.Buffer.from(string) : utf8ToBytes(string);\n} : string => {\n  return string.length > 64 ? textEncoder.encode(string) : utf8ToBytes(string);\n};\nexport const fromArray = arr => {\n  return Uint8Array.from(arr);\n};\nexport const slice = useBuffer ? (bytes, start, end) => {\n  if (isBuffer(bytes)) {\n    return new Uint8Array(bytes.subarray(start, end));\n  }\n  return bytes.slice(start, end);\n} : (bytes, start, end) => {\n  return bytes.slice(start, end);\n};\nexport const concat = useBuffer ? (chunks, length) => {\n  chunks = chunks.map(c => c instanceof Uint8Array ? c : globalThis.Buffer.from(c));\n  return asU8A(globalThis.Buffer.concat(chunks, length));\n} : (chunks, length) => {\n  const out = new Uint8Array(length);\n  let off = 0;\n  for (let b of chunks) {\n    if (off + b.length > out.length) {\n      b = b.subarray(0, out.length - off);\n    }\n    out.set(b, off);\n    off += b.length;\n  }\n  return out;\n};\nexport const alloc = useBuffer ? size => {\n  return globalThis.Buffer.allocUnsafe(size);\n} : size => {\n  return new Uint8Array(size);\n};\nexport const toHex = useBuffer ? d => {\n  if (typeof d === 'string') {\n    return d;\n  }\n  return globalThis.Buffer.from(toBytes(d)).toString('hex');\n} : d => {\n  if (typeof d === 'string') {\n    return d;\n  }\n  return Array.prototype.reduce.call(toBytes(d), (p, c) => `${ p }${ c.toString(16).padStart(2, '0') }`, '');\n};\nexport const fromHex = useBuffer ? hex => {\n  if (hex instanceof Uint8Array) {\n    return hex;\n  }\n  return globalThis.Buffer.from(hex, 'hex');\n} : hex => {\n  if (hex instanceof Uint8Array) {\n    return hex;\n  }\n  if (!hex.length) {\n    return new Uint8Array(0);\n  }\n  return new Uint8Array(hex.split('').map((c, i, d) => i % 2 === 0 ? `0x${ c }${ d[i + 1] }` : '').filter(Boolean).map(e => parseInt(e, 16)));\n};\nfunction toBytes(obj) {\n  if (obj instanceof Uint8Array && obj.constructor.name === 'Uint8Array') {\n    return obj;\n  }\n  if (obj instanceof ArrayBuffer) {\n    return new Uint8Array(obj);\n  }\n  if (ArrayBuffer.isView(obj)) {\n    return new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength);\n  }\n  throw new Error('Unknown type, must be binary type');\n}\nexport function compare(b1, b2) {\n  if (isBuffer(b1) && isBuffer(b2)) {\n    return b1.compare(b2);\n  }\n  for (let i = 0; i < b1.length; i++) {\n    if (b1[i] === b2[i]) {\n      continue;\n    }\n    return b1[i] < b2[i] ? -1 : 1;\n  }\n  return 0;\n}\nfunction utf8ToBytes(string, units = Infinity) {\n  let codePoint;\n  const length = string.length;\n  let leadSurrogate = null;\n  const bytes = [];\n  for (let i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i);\n    if (codePoint > 55295 && codePoint < 57344) {\n      if (!leadSurrogate) {\n        if (codePoint > 56319) {\n          if ((units -= 3) > -1)\n            bytes.push(239, 191, 189);\n          continue;\n        } else if (i + 1 === length) {\n          if ((units -= 3) > -1)\n            bytes.push(239, 191, 189);\n          continue;\n        }\n        leadSurrogate = codePoint;\n        continue;\n      }\n      if (codePoint < 56320) {\n        if ((units -= 3) > -1)\n          bytes.push(239, 191, 189);\n        leadSurrogate = codePoint;\n        continue;\n      }\n      codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536;\n    } else if (leadSurrogate) {\n      if ((units -= 3) > -1)\n        bytes.push(239, 191, 189);\n    }\n    leadSurrogate = null;\n    if (codePoint < 128) {\n      if ((units -= 1) < 0)\n        break;\n      bytes.push(codePoint);\n    } else if (codePoint < 2048) {\n      if ((units -= 2) < 0)\n        break;\n      bytes.push(codePoint >> 6 | 192, codePoint & 63 | 128);\n    } else if (codePoint < 65536) {\n      if ((units -= 3) < 0)\n        break;\n      bytes.push(codePoint >> 12 | 224, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n    } else if (codePoint < 1114112) {\n      if ((units -= 4) < 0)\n        break;\n      bytes.push(codePoint >> 18 | 240, codePoint >> 12 & 63 | 128, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n    } else {\n      throw new Error('Invalid code point');\n    }\n  }\n  return bytes;\n}\nfunction utf8Slice(buf, offset, end) {\n  const res = [];\n  while (offset < end) {\n    const firstByte = buf[offset];\n    let codePoint = null;\n    let bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1;\n    if (offset + bytesPerSequence <= end) {\n      let secondByte, thirdByte, fourthByte, tempCodePoint;\n      switch (bytesPerSequence) {\n      case 1:\n        if (firstByte < 128) {\n          codePoint = firstByte;\n        }\n        break;\n      case 2:\n        secondByte = buf[offset + 1];\n        if ((secondByte & 192) === 128) {\n          tempCodePoint = (firstByte & 31) << 6 | secondByte & 63;\n          if (tempCodePoint > 127) {\n            codePoint = tempCodePoint;\n          }\n        }\n        break;\n      case 3:\n        secondByte = buf[offset + 1];\n        thirdByte = buf[offset + 2];\n        if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) {\n          tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63;\n          if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) {\n            codePoint = tempCodePoint;\n          }\n        }\n        break;\n      case 4:\n        secondByte = buf[offset + 1];\n        thirdByte = buf[offset + 2];\n        fourthByte = buf[offset + 3];\n        if ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) {\n          tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63;\n          if (tempCodePoint > 65535 && tempCodePoint < 1114112) {\n            codePoint = tempCodePoint;\n          }\n        }\n      }\n    }\n    if (codePoint === null) {\n      codePoint = 65533;\n      bytesPerSequence = 1;\n    } else if (codePoint > 65535) {\n      codePoint -= 65536;\n      res.push(codePoint >>> 10 & 1023 | 55296);\n      codePoint = 56320 | codePoint & 1023;\n    }\n    res.push(codePoint);\n    offset += bytesPerSequence;\n  }\n  return decodeCodePointsArray(res);\n}\nconst MAX_ARGUMENTS_LENGTH = 4096;\nexport function decodeCodePointsArray(codePoints) {\n  const len = codePoints.length;\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints);\n  }\n  let res = '';\n  let i = 0;\n  while (i < len) {\n    res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));\n  }\n  return res;\n}", "const decodeErrPrefix = 'CBOR decode error:';\nconst encodeErrPrefix = 'CBOR encode error:';\nconst uintMinorPrefixBytes = [];\nuintMinorPrefixBytes[23] = 1;\nuintMinorPrefixBytes[24] = 2;\nuintMinorPrefixBytes[25] = 3;\nuintMinorPrefixBytes[26] = 5;\nuintMinorPrefixBytes[27] = 9;\nfunction assertEnoughData(data, pos, need) {\n  if (data.length - pos < need) {\n    throw new Error(`${ decodeErrPrefix } not enough data for type`);\n  }\n}\nexport {\n  decodeErrPrefix,\n  encodeErrPrefix,\n  uintMinorPrefixBytes,\n  assertEnoughData\n};", "import {\n  Token,\n  Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport * as negint from './1negint.js';\nimport * as bytes from './2bytes.js';\nimport * as string from './3string.js';\nimport * as array from './4array.js';\nimport * as map from './5map.js';\nimport * as tag from './6tag.js';\nimport * as float from './7float.js';\nimport { decodeErrPrefix } from './common.js';\nimport { fromArray } from './byte-utils.js';\nfunction invalidMinor(data, pos, minor) {\n  throw new Error(`${ decodeErrPrefix } encountered invalid minor (${ minor }) for major ${ data[pos] >>> 5 }`);\n}\nfunction errorer(msg) {\n  return () => {\n    throw new Error(`${ decodeErrPrefix } ${ msg }`);\n  };\n}\nexport const jump = [];\nfor (let i = 0; i <= 23; i++) {\n  jump[i] = invalidMinor;\n}\njump[24] = uint.decodeUint8;\njump[25] = uint.decodeUint16;\njump[26] = uint.decodeUint32;\njump[27] = uint.decodeUint64;\njump[28] = invalidMinor;\njump[29] = invalidMinor;\njump[30] = invalidMinor;\njump[31] = invalidMinor;\nfor (let i = 32; i <= 55; i++) {\n  jump[i] = invalidMinor;\n}\njump[56] = negint.decodeNegint8;\njump[57] = negint.decodeNegint16;\njump[58] = negint.decodeNegint32;\njump[59] = negint.decodeNegint64;\njump[60] = invalidMinor;\njump[61] = invalidMinor;\njump[62] = invalidMinor;\njump[63] = invalidMinor;\nfor (let i = 64; i <= 87; i++) {\n  jump[i] = bytes.decodeBytesCompact;\n}\njump[88] = bytes.decodeBytes8;\njump[89] = bytes.decodeBytes16;\njump[90] = bytes.decodeBytes32;\njump[91] = bytes.decodeBytes64;\njump[92] = invalidMinor;\njump[93] = invalidMinor;\njump[94] = invalidMinor;\njump[95] = errorer('indefinite length bytes/strings are not supported');\nfor (let i = 96; i <= 119; i++) {\n  jump[i] = string.decodeStringCompact;\n}\njump[120] = string.decodeString8;\njump[121] = string.decodeString16;\njump[122] = string.decodeString32;\njump[123] = string.decodeString64;\njump[124] = invalidMinor;\njump[125] = invalidMinor;\njump[126] = invalidMinor;\njump[127] = errorer('indefinite length bytes/strings are not supported');\nfor (let i = 128; i <= 151; i++) {\n  jump[i] = array.decodeArrayCompact;\n}\njump[152] = array.decodeArray8;\njump[153] = array.decodeArray16;\njump[154] = array.decodeArray32;\njump[155] = array.decodeArray64;\njump[156] = invalidMinor;\njump[157] = invalidMinor;\njump[158] = invalidMinor;\njump[159] = array.decodeArrayIndefinite;\nfor (let i = 160; i <= 183; i++) {\n  jump[i] = map.decodeMapCompact;\n}\njump[184] = map.decodeMap8;\njump[185] = map.decodeMap16;\njump[186] = map.decodeMap32;\njump[187] = map.decodeMap64;\njump[188] = invalidMinor;\njump[189] = invalidMinor;\njump[190] = invalidMinor;\njump[191] = map.decodeMapIndefinite;\nfor (let i = 192; i <= 215; i++) {\n  jump[i] = tag.decodeTagCompact;\n}\njump[216] = tag.decodeTag8;\njump[217] = tag.decodeTag16;\njump[218] = tag.decodeTag32;\njump[219] = tag.decodeTag64;\njump[220] = invalidMinor;\njump[221] = invalidMinor;\njump[222] = invalidMinor;\njump[223] = invalidMinor;\nfor (let i = 224; i <= 243; i++) {\n  jump[i] = errorer('simple values are not supported');\n}\njump[244] = invalidMinor;\njump[245] = invalidMinor;\njump[246] = invalidMinor;\njump[247] = float.decodeUndefined;\njump[248] = errorer('simple values are not supported');\njump[249] = float.decodeFloat16;\njump[250] = float.decodeFloat32;\njump[251] = float.decodeFloat64;\njump[252] = invalidMinor;\njump[253] = invalidMinor;\njump[254] = invalidMinor;\njump[255] = float.decodeBreak;\nexport const quick = [];\nfor (let i = 0; i < 24; i++) {\n  quick[i] = new Token(Type.uint, i, 1);\n}\nfor (let i = -1; i >= -24; i--) {\n  quick[31 - i] = new Token(Type.negint, i, 1);\n}\nquick[64] = new Token(Type.bytes, new Uint8Array(0), 1);\nquick[96] = new Token(Type.string, '', 1);\nquick[128] = new Token(Type.array, 0, 1);\nquick[160] = new Token(Type.map, 0, 1);\nquick[244] = new Token(Type.false, false, 1);\nquick[245] = new Token(Type.true, true, 1);\nquick[246] = new Token(Type.null, null, 1);\nexport function quickEncodeToken(token) {\n  switch (token.type) {\n  case Type.false:\n    return fromArray([244]);\n  case Type.true:\n    return fromArray([245]);\n  case Type.null:\n    return fromArray([246]);\n  case Type.bytes:\n    if (!token.value.length) {\n      return fromArray([64]);\n    }\n    return;\n  case Type.string:\n    if (token.value === '') {\n      return fromArray([96]);\n    }\n    return;\n  case Type.array:\n    if (token.value === 0) {\n      return fromArray([128]);\n    }\n    return;\n  case Type.map:\n    if (token.value === 0) {\n      return fromArray([160]);\n    }\n    return;\n  case Type.uint:\n    if (token.value < 24) {\n      return fromArray([Number(token.value)]);\n    }\n    return;\n  case Type.negint:\n    if (token.value >= -24) {\n      return fromArray([31 - Number(token.value)]);\n    }\n  }\n}", "import {\n  Token,\n  Type\n} from './token.js';\nimport {\n  decodeErrPrefix,\n  assertEnoughData\n} from './common.js';\nexport const uintBoundaries = [\n  24,\n  256,\n  65536,\n  4294967296,\n  BigInt('18446744073709551616')\n];\nexport function readUint8(data, offset, options) {\n  assertEnoughData(data, offset, 1);\n  const value = data[offset];\n  if (options.strict === true && value < uintBoundaries[0]) {\n    throw new Error(`${ decodeErrPrefix } integer encoded in more bytes than necessary (strict decode)`);\n  }\n  return value;\n}\nexport function readUint16(data, offset, options) {\n  assertEnoughData(data, offset, 2);\n  const value = data[offset] << 8 | data[offset + 1];\n  if (options.strict === true && value < uintBoundaries[1]) {\n    throw new Error(`${ decodeErrPrefix } integer encoded in more bytes than necessary (strict decode)`);\n  }\n  return value;\n}\nexport function readUint32(data, offset, options) {\n  assertEnoughData(data, offset, 4);\n  const value = data[offset] * 16777216 + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3];\n  if (options.strict === true && value < uintBoundaries[2]) {\n    throw new Error(`${ decodeErrPrefix } integer encoded in more bytes than necessary (strict decode)`);\n  }\n  return value;\n}\nexport function readUint64(data, offset, options) {\n  assertEnoughData(data, offset, 8);\n  const hi = data[offset] * 16777216 + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3];\n  const lo = data[offset + 4] * 16777216 + (data[offset + 5] << 16) + (data[offset + 6] << 8) + data[offset + 7];\n  const value = (BigInt(hi) << BigInt(32)) + BigInt(lo);\n  if (options.strict === true && value < uintBoundaries[3]) {\n    throw new Error(`${ decodeErrPrefix } integer encoded in more bytes than necessary (strict decode)`);\n  }\n  if (value <= Number.MAX_SAFE_INTEGER) {\n    return Number(value);\n  }\n  if (options.allowBigInt === true) {\n    return value;\n  }\n  throw new Error(`${ decodeErrPrefix } integers outside of the safe integer range are not supported`);\n}\nexport function decodeUint8(data, pos, _minor, options) {\n  return new Token(Type.uint, readUint8(data, pos + 1, options), 2);\n}\nexport function decodeUint16(data, pos, _minor, options) {\n  return new Token(Type.uint, readUint16(data, pos + 1, options), 3);\n}\nexport function decodeUint32(data, pos, _minor, options) {\n  return new Token(Type.uint, readUint32(data, pos + 1, options), 5);\n}\nexport function decodeUint64(data, pos, _minor, options) {\n  return new Token(Type.uint, readUint64(data, pos + 1, options), 9);\n}\nexport function encodeUint(buf, token) {\n  return encodeUintValue(buf, 0, token.value);\n}\nexport function encodeUintValue(buf, major, uint) {\n  if (uint < uintBoundaries[0]) {\n    const nuint = Number(uint);\n    buf.push([major | nuint]);\n  } else if (uint < uintBoundaries[1]) {\n    const nuint = Number(uint);\n    buf.push([\n      major | 24,\n      nuint\n    ]);\n  } else if (uint < uintBoundaries[2]) {\n    const nuint = Number(uint);\n    buf.push([\n      major | 25,\n      nuint >>> 8,\n      nuint & 255\n    ]);\n  } else if (uint < uintBoundaries[3]) {\n    const nuint = Number(uint);\n    buf.push([\n      major | 26,\n      nuint >>> 24 & 255,\n      nuint >>> 16 & 255,\n      nuint >>> 8 & 255,\n      nuint & 255\n    ]);\n  } else {\n    const buint = BigInt(uint);\n    if (buint < uintBoundaries[4]) {\n      const set = [\n        major | 27,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0\n      ];\n      let lo = Number(buint & BigInt(4294967295));\n      let hi = Number(buint >> BigInt(32) & BigInt(4294967295));\n      set[8] = lo & 255;\n      lo = lo >> 8;\n      set[7] = lo & 255;\n      lo = lo >> 8;\n      set[6] = lo & 255;\n      lo = lo >> 8;\n      set[5] = lo & 255;\n      set[4] = hi & 255;\n      hi = hi >> 8;\n      set[3] = hi & 255;\n      hi = hi >> 8;\n      set[2] = hi & 255;\n      hi = hi >> 8;\n      set[1] = hi & 255;\n      buf.push(set);\n    } else {\n      throw new Error(`${ decodeErrPrefix } encountered BigInt larger than allowable range`);\n    }\n  }\n}\nencodeUint.encodedSize = function encodedSize(token) {\n  return encodeUintValue.encodedSize(token.value);\n};\nencodeUintValue.encodedSize = function encodedSize(uint) {\n  if (uint < uintBoundaries[0]) {\n    return 1;\n  }\n  if (uint < uintBoundaries[1]) {\n    return 2;\n  }\n  if (uint < uintBoundaries[2]) {\n    return 3;\n  }\n  if (uint < uintBoundaries[3]) {\n    return 5;\n  }\n  return 9;\n};\nencodeUint.compareTokens = function compareTokens(tok1, tok2) {\n  return tok1.value < tok2.value ? -1 : tok1.value > tok2.value ? 1 : 0;\n};", "import {\n  Token,\n  Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport { decodeErrPrefix } from './common.js';\nexport function decodeNegint8(data, pos, _minor, options) {\n  return new Token(Type.negint, -1 - uint.readUint8(data, pos + 1, options), 2);\n}\nexport function decodeNegint16(data, pos, _minor, options) {\n  return new Token(Type.negint, -1 - uint.readUint16(data, pos + 1, options), 3);\n}\nexport function decodeNegint32(data, pos, _minor, options) {\n  return new Token(Type.negint, -1 - uint.readUint32(data, pos + 1, options), 5);\n}\nconst neg1b = BigInt(-1);\nconst pos1b = BigInt(1);\nexport function decodeNegint64(data, pos, _minor, options) {\n  const int = uint.readUint64(data, pos + 1, options);\n  if (typeof int !== 'bigint') {\n    const value = -1 - int;\n    if (value >= Number.MIN_SAFE_INTEGER) {\n      return new Token(Type.negint, value, 9);\n    }\n  }\n  if (options.allowBigInt !== true) {\n    throw new Error(`${ decodeErrPrefix } integers outside of the safe integer range are not supported`);\n  }\n  return new Token(Type.negint, neg1b - BigInt(int), 9);\n}\nexport function encodeNegint(buf, token) {\n  const negint = token.value;\n  const unsigned = typeof negint === 'bigint' ? negint * neg1b - pos1b : negint * -1 - 1;\n  uint.encodeUintValue(buf, token.type.majorEncoded, unsigned);\n}\nencodeNegint.encodedSize = function encodedSize(token) {\n  const negint = token.value;\n  const unsigned = typeof negint === 'bigint' ? negint * neg1b - pos1b : negint * -1 - 1;\n  if (unsigned < uint.uintBoundaries[0]) {\n    return 1;\n  }\n  if (unsigned < uint.uintBoundaries[1]) {\n    return 2;\n  }\n  if (unsigned < uint.uintBoundaries[2]) {\n    return 3;\n  }\n  if (unsigned < uint.uintBoundaries[3]) {\n    return 5;\n  }\n  return 9;\n};\nencodeNegint.compareTokens = function compareTokens(tok1, tok2) {\n  return tok1.value < tok2.value ? 1 : tok1.value > tok2.value ? -1 : 0;\n};", "import {\n  Token,\n  Type\n} from './token.js';\nimport {\n  assertEnoughData,\n  decodeErrPrefix\n} from './common.js';\nimport * as uint from './0uint.js';\nimport {\n  compare,\n  fromString,\n  slice\n} from './byte-utils.js';\nfunction toToken(data, pos, prefix, length) {\n  assertEnoughData(data, pos, prefix + length);\n  const buf = slice(data, pos + prefix, pos + prefix + length);\n  return new Token(Type.bytes, buf, prefix + length);\n}\nexport function decodeBytesCompact(data, pos, minor, _options) {\n  return toToken(data, pos, 1, minor);\n}\nexport function decodeBytes8(data, pos, _minor, options) {\n  return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options));\n}\nexport function decodeBytes16(data, pos, _minor, options) {\n  return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options));\n}\nexport function decodeBytes32(data, pos, _minor, options) {\n  return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options));\n}\nexport function decodeBytes64(data, pos, _minor, options) {\n  const l = uint.readUint64(data, pos + 1, options);\n  if (typeof l === 'bigint') {\n    throw new Error(`${ decodeErrPrefix } 64-bit integer bytes lengths not supported`);\n  }\n  return toToken(data, pos, 9, l);\n}\nfunction tokenBytes(token) {\n  if (token.encodedBytes === undefined) {\n    token.encodedBytes = token.type === Type.string ? fromString(token.value) : token.value;\n  }\n  return token.encodedBytes;\n}\nexport function encodeBytes(buf, token) {\n  const bytes = tokenBytes(token);\n  uint.encodeUintValue(buf, token.type.majorEncoded, bytes.length);\n  buf.push(bytes);\n}\nencodeBytes.encodedSize = function encodedSize(token) {\n  const bytes = tokenBytes(token);\n  return uint.encodeUintValue.encodedSize(bytes.length) + bytes.length;\n};\nencodeBytes.compareTokens = function compareTokens(tok1, tok2) {\n  return compareBytes(tokenBytes(tok1), tokenBytes(tok2));\n};\nexport function compareBytes(b1, b2) {\n  return b1.length < b2.length ? -1 : b1.length > b2.length ? 1 : compare(b1, b2);\n}", "import {\n  Token,\n  Type\n} from './token.js';\nimport {\n  assertEnoughData,\n  decodeErrPrefix\n} from './common.js';\nimport * as uint from './0uint.js';\nimport { encodeBytes } from './2bytes.js';\nimport {\n  toString,\n  slice\n} from './byte-utils.js';\nfunction toToken(data, pos, prefix, length, options) {\n  const totLength = prefix + length;\n  assertEnoughData(data, pos, totLength);\n  const tok = new Token(Type.string, toString(data, pos + prefix, pos + totLength), totLength);\n  if (options.retainStringBytes === true) {\n    tok.byteValue = slice(data, pos + prefix, pos + totLength);\n  }\n  return tok;\n}\nexport function decodeStringCompact(data, pos, minor, options) {\n  return toToken(data, pos, 1, minor, options);\n}\nexport function decodeString8(data, pos, _minor, options) {\n  return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options), options);\n}\nexport function decodeString16(data, pos, _minor, options) {\n  return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options), options);\n}\nexport function decodeString32(data, pos, _minor, options) {\n  return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options), options);\n}\nexport function decodeString64(data, pos, _minor, options) {\n  const l = uint.readUint64(data, pos + 1, options);\n  if (typeof l === 'bigint') {\n    throw new Error(`${ decodeErrPrefix } 64-bit integer string lengths not supported`);\n  }\n  return toToken(data, pos, 9, l, options);\n}\nexport const encodeString = encodeBytes;", "import {\n  Token,\n  Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport { decodeErrPrefix } from './common.js';\nfunction toToken(_data, _pos, prefix, length) {\n  return new Token(Type.array, length, prefix);\n}\nexport function decodeArrayCompact(data, pos, minor, _options) {\n  return toToken(data, pos, 1, minor);\n}\nexport function decodeArray8(data, pos, _minor, options) {\n  return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options));\n}\nexport function decodeArray16(data, pos, _minor, options) {\n  return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options));\n}\nexport function decodeArray32(data, pos, _minor, options) {\n  return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options));\n}\nexport function decodeArray64(data, pos, _minor, options) {\n  const l = uint.readUint64(data, pos + 1, options);\n  if (typeof l === 'bigint') {\n    throw new Error(`${ decodeErrPrefix } 64-bit integer array lengths not supported`);\n  }\n  return toToken(data, pos, 9, l);\n}\nexport function decodeArrayIndefinite(data, pos, _minor, options) {\n  if (options.allowIndefinite === false) {\n    throw new Error(`${ decodeErrPrefix } indefinite length items not allowed`);\n  }\n  return toToken(data, pos, 1, Infinity);\n}\nexport function encodeArray(buf, token) {\n  uint.encodeUintValue(buf, Type.array.majorEncoded, token.value);\n}\nencodeArray.compareTokens = uint.encodeUint.compareTokens;\nencodeArray.encodedSize = function encodedSize(token) {\n  return uint.encodeUintValue.encodedSize(token.value);\n};", "import {\n  Token,\n  Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport { decodeErrPrefix } from './common.js';\nfunction toToken(_data, _pos, prefix, length) {\n  return new Token(Type.map, length, prefix);\n}\nexport function decodeMapCompact(data, pos, minor, _options) {\n  return toToken(data, pos, 1, minor);\n}\nexport function decodeMap8(data, pos, _minor, options) {\n  return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options));\n}\nexport function decodeMap16(data, pos, _minor, options) {\n  return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options));\n}\nexport function decodeMap32(data, pos, _minor, options) {\n  return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options));\n}\nexport function decodeMap64(data, pos, _minor, options) {\n  const l = uint.readUint64(data, pos + 1, options);\n  if (typeof l === 'bigint') {\n    throw new Error(`${ decodeErrPrefix } 64-bit integer map lengths not supported`);\n  }\n  return toToken(data, pos, 9, l);\n}\nexport function decodeMapIndefinite(data, pos, _minor, options) {\n  if (options.allowIndefinite === false) {\n    throw new Error(`${ decodeErrPrefix } indefinite length items not allowed`);\n  }\n  return toToken(data, pos, 1, Infinity);\n}\nexport function encodeMap(buf, token) {\n  uint.encodeUintValue(buf, Type.map.majorEncoded, token.value);\n}\nencodeMap.compareTokens = uint.encodeUint.compareTokens;\nencodeMap.encodedSize = function encodedSize(token) {\n  return uint.encodeUintValue.encodedSize(token.value);\n};", "import {\n  Token,\n  Type\n} from './token.js';\nimport * as uint from './0uint.js';\nexport function decodeTagCompact(_data, _pos, minor, _options) {\n  return new Token(Type.tag, minor, 1);\n}\nexport function decodeTag8(data, pos, _minor, options) {\n  return new Token(Type.tag, uint.readUint8(data, pos + 1, options), 2);\n}\nexport function decodeTag16(data, pos, _minor, options) {\n  return new Token(Type.tag, uint.readUint16(data, pos + 1, options), 3);\n}\nexport function decodeTag32(data, pos, _minor, options) {\n  return new Token(Type.tag, uint.readUint32(data, pos + 1, options), 5);\n}\nexport function decodeTag64(data, pos, _minor, options) {\n  return new Token(Type.tag, uint.readUint64(data, pos + 1, options), 9);\n}\nexport function encodeTag(buf, token) {\n  uint.encodeUintValue(buf, Type.tag.majorEncoded, token.value);\n}\nencodeTag.compareTokens = uint.encodeUint.compareTokens;\nencodeTag.encodedSize = function encodedSize(token) {\n  return uint.encodeUintValue.encodedSize(token.value);\n};", "import {\n  Token,\n  Type\n} from './token.js';\nimport { decodeErrPrefix } from './common.js';\nimport { encodeUint } from './0uint.js';\nconst MINOR_FALSE = 20;\nconst MINOR_TRUE = 21;\nconst MINOR_NULL = 22;\nconst MINOR_UNDEFINED = 23;\nexport function decodeUndefined(_data, _pos, _minor, options) {\n  if (options.allowUndefined === false) {\n    throw new Error(`${ decodeErrPrefix } undefined values are not supported`);\n  } else if (options.coerceUndefinedToNull === true) {\n    return new Token(Type.null, null, 1);\n  }\n  return new Token(Type.undefined, undefined, 1);\n}\nexport function decodeBreak(_data, _pos, _minor, options) {\n  if (options.allowIndefinite === false) {\n    throw new Error(`${ decodeErrPrefix } indefinite length items not allowed`);\n  }\n  return new Token(Type.break, undefined, 1);\n}\nfunction createToken(value, bytes, options) {\n  if (options) {\n    if (options.allowNaN === false && Number.isNaN(value)) {\n      throw new Error(`${ decodeErrPrefix } NaN values are not supported`);\n    }\n    if (options.allowInfinity === false && (value === Infinity || value === -Infinity)) {\n      throw new Error(`${ decodeErrPrefix } Infinity values are not supported`);\n    }\n  }\n  return new Token(Type.float, value, bytes);\n}\nexport function decodeFloat16(data, pos, _minor, options) {\n  return createToken(readFloat16(data, pos + 1), 3, options);\n}\nexport function decodeFloat32(data, pos, _minor, options) {\n  return createToken(readFloat32(data, pos + 1), 5, options);\n}\nexport function decodeFloat64(data, pos, _minor, options) {\n  return createToken(readFloat64(data, pos + 1), 9, options);\n}\nexport function encodeFloat(buf, token, options) {\n  const float = token.value;\n  if (float === false) {\n    buf.push([Type.float.majorEncoded | MINOR_FALSE]);\n  } else if (float === true) {\n    buf.push([Type.float.majorEncoded | MINOR_TRUE]);\n  } else if (float === null) {\n    buf.push([Type.float.majorEncoded | MINOR_NULL]);\n  } else if (float === undefined) {\n    buf.push([Type.float.majorEncoded | MINOR_UNDEFINED]);\n  } else {\n    let decoded;\n    let success = false;\n    if (!options || options.float64 !== true) {\n      encodeFloat16(float);\n      decoded = readFloat16(ui8a, 1);\n      if (float === decoded || Number.isNaN(float)) {\n        ui8a[0] = 249;\n        buf.push(ui8a.slice(0, 3));\n        success = true;\n      } else {\n        encodeFloat32(float);\n        decoded = readFloat32(ui8a, 1);\n        if (float === decoded) {\n          ui8a[0] = 250;\n          buf.push(ui8a.slice(0, 5));\n          success = true;\n        }\n      }\n    }\n    if (!success) {\n      encodeFloat64(float);\n      decoded = readFloat64(ui8a, 1);\n      ui8a[0] = 251;\n      buf.push(ui8a.slice(0, 9));\n    }\n  }\n}\nencodeFloat.encodedSize = function encodedSize(token, options) {\n  const float = token.value;\n  if (float === false || float === true || float === null || float === undefined) {\n    return 1;\n  }\n  if (!options || options.float64 !== true) {\n    encodeFloat16(float);\n    let decoded = readFloat16(ui8a, 1);\n    if (float === decoded || Number.isNaN(float)) {\n      return 3;\n    }\n    encodeFloat32(float);\n    decoded = readFloat32(ui8a, 1);\n    if (float === decoded) {\n      return 5;\n    }\n  }\n  return 9;\n};\nconst buffer = new ArrayBuffer(9);\nconst dataView = new DataView(buffer, 1);\nconst ui8a = new Uint8Array(buffer, 0);\nfunction encodeFloat16(inp) {\n  if (inp === Infinity) {\n    dataView.setUint16(0, 31744, false);\n  } else if (inp === -Infinity) {\n    dataView.setUint16(0, 64512, false);\n  } else if (Number.isNaN(inp)) {\n    dataView.setUint16(0, 32256, false);\n  } else {\n    dataView.setFloat32(0, inp);\n    const valu32 = dataView.getUint32(0);\n    const exponent = (valu32 & 2139095040) >> 23;\n    const mantissa = valu32 & 8388607;\n    if (exponent === 255) {\n      dataView.setUint16(0, 31744, false);\n    } else if (exponent === 0) {\n      dataView.setUint16(0, (inp & 2147483648) >> 16 | mantissa >> 13, false);\n    } else {\n      const logicalExponent = exponent - 127;\n      if (logicalExponent < -24) {\n        dataView.setUint16(0, 0);\n      } else if (logicalExponent < -14) {\n        dataView.setUint16(0, (valu32 & 2147483648) >> 16 | 1 << 24 + logicalExponent, false);\n      } else {\n        dataView.setUint16(0, (valu32 & 2147483648) >> 16 | logicalExponent + 15 << 10 | mantissa >> 13, false);\n      }\n    }\n  }\n}\nfunction readFloat16(ui8a, pos) {\n  if (ui8a.length - pos < 2) {\n    throw new Error(`${ decodeErrPrefix } not enough data for float16`);\n  }\n  const half = (ui8a[pos] << 8) + ui8a[pos + 1];\n  if (half === 31744) {\n    return Infinity;\n  }\n  if (half === 64512) {\n    return -Infinity;\n  }\n  if (half === 32256) {\n    return NaN;\n  }\n  const exp = half >> 10 & 31;\n  const mant = half & 1023;\n  let val;\n  if (exp === 0) {\n    val = mant * 2 ** -24;\n  } else if (exp !== 31) {\n    val = (mant + 1024) * 2 ** (exp - 25);\n  } else {\n    val = mant === 0 ? Infinity : NaN;\n  }\n  return half & 32768 ? -val : val;\n}\nfunction encodeFloat32(inp) {\n  dataView.setFloat32(0, inp, false);\n}\nfunction readFloat32(ui8a, pos) {\n  if (ui8a.length - pos < 4) {\n    throw new Error(`${ decodeErrPrefix } not enough data for float32`);\n  }\n  const offset = (ui8a.byteOffset || 0) + pos;\n  return new DataView(ui8a.buffer, offset, 4).getFloat32(0, false);\n}\nfunction encodeFloat64(inp) {\n  dataView.setFloat64(0, inp, false);\n}\nfunction readFloat64(ui8a, pos) {\n  if (ui8a.length - pos < 8) {\n    throw new Error(`${ decodeErrPrefix } not enough data for float64`);\n  }\n  const offset = (ui8a.byteOffset || 0) + pos;\n  return new DataView(ui8a.buffer, offset, 8).getFloat64(0, false);\n}\nencodeFloat.compareTokens = encodeUint.compareTokens;", "import { decodeErrPrefix } from './common.js';\nimport { Type } from './token.js';\nimport {\n  jump,\n  quick\n} from './jump.js';\nconst defaultDecodeOptions = {\n  strict: false,\n  allowIndefinite: true,\n  allowUndefined: true,\n  allowBigInt: true\n};\nclass Tokeniser {\n  constructor(data, options = {}) {\n    this.pos = 0;\n    this.data = data;\n    this.options = options;\n  }\n  done() {\n    return this.pos >= this.data.length;\n  }\n  next() {\n    const byt = this.data[this.pos];\n    let token = quick[byt];\n    if (token === undefined) {\n      const decoder = jump[byt];\n      if (!decoder) {\n        throw new Error(`${ decodeErrPrefix } no decoder for major type ${ byt >>> 5 } (byte 0x${ byt.toString(16).padStart(2, '0') })`);\n      }\n      const minor = byt & 31;\n      token = decoder(this.data, this.pos, minor, this.options);\n    }\n    this.pos += token.encodedLength;\n    return token;\n  }\n}\nconst DONE = Symbol.for('DONE');\nconst BREAK = Symbol.for('BREAK');\nfunction tokenToArray(token, tokeniser, options) {\n  const arr = [];\n  for (let i = 0; i < token.value; i++) {\n    const value = tokensToObject(tokeniser, options);\n    if (value === BREAK) {\n      if (token.value === Infinity) {\n        break;\n      }\n      throw new Error(`${ decodeErrPrefix } got unexpected break to lengthed array`);\n    }\n    if (value === DONE) {\n      throw new Error(`${ decodeErrPrefix } found array but not enough entries (got ${ i }, expected ${ token.value })`);\n    }\n    arr[i] = value;\n  }\n  return arr;\n}\nfunction tokenToMap(token, tokeniser, options) {\n  const useMaps = options.useMaps === true;\n  const obj = useMaps ? undefined : {};\n  const m = useMaps ? new Map() : undefined;\n  for (let i = 0; i < token.value; i++) {\n    const key = tokensToObject(tokeniser, options);\n    if (key === BREAK) {\n      if (token.value === Infinity) {\n        break;\n      }\n      throw new Error(`${ decodeErrPrefix } got unexpected break to lengthed map`);\n    }\n    if (key === DONE) {\n      throw new Error(`${ decodeErrPrefix } found map but not enough entries (got ${ i } [no key], expected ${ token.value })`);\n    }\n    if (useMaps !== true && typeof key !== 'string') {\n      throw new Error(`${ decodeErrPrefix } non-string keys not supported (got ${ typeof key })`);\n    }\n    if (options.rejectDuplicateMapKeys === true) {\n      if (useMaps && m.has(key) || !useMaps && key in obj) {\n        throw new Error(`${ decodeErrPrefix } found repeat map key \"${ key }\"`);\n      }\n    }\n    const value = tokensToObject(tokeniser, options);\n    if (value === DONE) {\n      throw new Error(`${ decodeErrPrefix } found map but not enough entries (got ${ i } [no value], expected ${ token.value })`);\n    }\n    if (useMaps) {\n      m.set(key, value);\n    } else {\n      obj[key] = value;\n    }\n  }\n  return useMaps ? m : obj;\n}\nfunction tokensToObject(tokeniser, options) {\n  if (tokeniser.done()) {\n    return DONE;\n  }\n  const token = tokeniser.next();\n  if (token.type === Type.break) {\n    return BREAK;\n  }\n  if (token.type.terminal) {\n    return token.value;\n  }\n  if (token.type === Type.array) {\n    return tokenToArray(token, tokeniser, options);\n  }\n  if (token.type === Type.map) {\n    return tokenToMap(token, tokeniser, options);\n  }\n  if (token.type === Type.tag) {\n    if (options.tags && typeof options.tags[token.value] === 'function') {\n      const tagged = tokensToObject(tokeniser, options);\n      return options.tags[token.value](tagged);\n    }\n    throw new Error(`${ decodeErrPrefix } tag not supported (${ token.value })`);\n  }\n  throw new Error('unsupported');\n}\nfunction decode(data, options) {\n  if (!(data instanceof Uint8Array)) {\n    throw new Error(`${ decodeErrPrefix } data to decode must be a Uint8Array`);\n  }\n  options = Object.assign({}, defaultDecodeOptions, options);\n  const tokeniser = options.tokenizer || new Tokeniser(data, options);\n  const decoded = tokensToObject(tokeniser, options);\n  if (decoded === DONE) {\n    throw new Error(`${ decodeErrPrefix } did not find any content to decode`);\n  }\n  if (decoded === BREAK) {\n    throw new Error(`${ decodeErrPrefix } got unexpected break`);\n  }\n  if (!tokeniser.done()) {\n    throw new Error(`${ decodeErrPrefix } too many terminals, data makes no sense`);\n  }\n  return decoded;\n}\nexport {\n  Tokeniser,\n  tokensToObject,\n  decode\n};", "import * as varint from './varint.js'\nimport * as Digest from './hashes/digest.js'\nimport { base58btc } from './bases/base58.js'\nimport { base32 } from './bases/base32.js'\nimport { coerce } from './bytes.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * 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\n/**\n * @template {API.Link<unknown, number, number, API.Version>} T\n * @template {string} Prefix\n * @param {T} link\n * @param {API.MultibaseEncoder<Prefix>} [base]\n * @returns {API.ToString<T, Prefix>}\n */\nexport const format = (link, base) => {\n  const { bytes, version } = link\n  switch (version) {\n    case 0:\n      return toStringV0(\n        bytes,\n        baseCache(link),\n        /** @type {API.MultibaseEncoder<\"z\">} */ (base) || base58btc.encoder\n      )\n    default:\n      return toStringV1(\n        bytes,\n        baseCache(link),\n        /** @type {API.MultibaseEncoder<Prefix>} */ (base || base32.encoder)\n      )\n  }\n}\n\n/**\n * @template {API.UnknownLink} Link\n * @param {Link} link\n * @returns {API.LinkJSON<Link>}\n */\nexport const toJSON = (link) => ({\n  '/': format(link)\n})\n\n/**\n * @template {API.UnknownLink} Link\n * @param {API.LinkJSON<Link>} json\n */\nexport const fromJSON = (json) =>\n  CID.parse(json['/'])\n\n/** @type {WeakMap<API.UnknownLink, Map<string, string>>} */\nconst cache = new WeakMap()\n\n/**\n * @param {API.UnknownLink} cid\n * @returns {Map<string, string>}\n */\nconst baseCache = cid => {\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\n/**\n * @template {unknown} [Data=unknown]\n * @template {number} [Format=number]\n * @template {number} [Alg=number]\n * @template {API.Version} [Version=API.Version]\n * @implements {API.Link<Data, Format, Alg, Version>}\n */\n\nexport class CID {\n  /**\n   * @param {Version} version - Version of the CID\n   * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param {API.MultihashDigest<Alg>} multihash - (Multi)hash of the of the content.\n   * @param {Uint8Array} bytes\n   *\n   */\n  constructor (version, code, multihash, bytes) {\n    /** @readonly */\n    this.code = code\n    /** @readonly */\n    this.version = version\n    /** @readonly */\n    this.multihash = multihash\n    /** @readonly */\n    this.bytes = bytes\n\n    // flag to serializers that this is a CID and\n    // should be treated specially\n    /** @readonly */\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 () {\n    return this\n  }\n\n  // ArrayBufferView\n  get byteOffset () {\n    return this.bytes.byteOffset\n  }\n\n  // ArrayBufferView\n  get byteLength () {\n    return this.bytes.byteLength\n  }\n\n  /**\n   * @returns {CID<Data, API.DAG_PB, API.SHA_256, 0>}\n   */\n  toV0 () {\n    switch (this.version) {\n      case 0: {\n        return /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (this)\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 /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (\n          CID.createV0(\n            /** @type {API.MultihashDigest<API.SHA_256>} */ (multihash)\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  /**\n   * @returns {CID<Data, Format, Alg, 1>}\n   */\n  toV1 () {\n    switch (this.version) {\n      case 0: {\n        const { code, digest } = this.multihash\n        const multihash = Digest.create(code, digest)\n        return /** @type {CID<Data, Format, Alg, 1>} */ (\n          CID.createV1(this.code, multihash)\n        )\n      }\n      case 1: {\n        return /** @type {CID<Data, Format, Alg, 1>} */ (this)\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  /**\n   * @param {unknown} other\n   * @returns {other is CID<Data, Format, Alg, Version>}\n   */\n  equals (other) {\n    return CID.equals(this, other)\n  }\n\n  /**\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @param {API.Link<Data, Format, Alg, Version>} self\n   * @param {unknown} other\n   * @returns {other is CID}\n   */\n  static equals (self, other) {\n    const unknown =\n      /** @type {{code?:unknown, version?:unknown, multihash?:unknown}} */ (\n        other\n      )\n    return (\n      unknown &&\n      self.code === unknown.code &&\n      self.version === unknown.version &&\n      Digest.equals(self.multihash, unknown.multihash)\n    )\n  }\n\n  /**\n   * @param {API.MultibaseEncoder<string>} [base]\n   * @returns {string}\n   */\n  toString (base) {\n    return format(this, base)\n  }\n\n  toJSON () {\n    return { '/': format(this) }\n  }\n\n  link () {\n    return this\n  }\n\n  get [Symbol.toStringTag] () {\n    return 'CID'\n  }\n\n  // Legacy\n\n  [Symbol.for('nodejs.util.inspect.custom')] () {\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   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @template {unknown} U\n   * @param {API.Link<Data, Format, Alg, Version>|U} input\n   * @returns {CID<Data, Format, Alg, Version>|null}\n   */\n  static asCID (input) {\n    if (input == null) {\n      return null\n    }\n\n    const value = /** @type {any} */ (input)\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        /** @type {API.MultihashDigest<Alg>} */ (multihash),\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 =\n        /** @type {API.MultihashDigest<Alg>} */\n        (Digest.decode(multihash))\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   *\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @param {Version} version - Version of the CID\n   * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param {API.MultihashDigest<Alg>} digest - (Multi)hash of the of the content.\n   * @returns {CID<Data, Format, Alg, Version>}\n   */\n  static create (version, code, digest) {\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   * @template {unknown} [T=unknown]\n   * @param {API.MultihashDigest<typeof SHA_256_CODE>} digest - Multihash.\n   * @returns {CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0>}\n   */\n  static createV0 (digest) {\n    return CID.create(0, DAG_PB_CODE, digest)\n  }\n\n  /**\n   * Simplified version of `create` for CIDv1.\n   *\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @param {Code} code - Content encoding format code.\n   * @param {API.MultihashDigest<Alg>} digest - Miltihash of the content.\n   * @returns {CID<Data, Code, Alg, 1>}\n   */\n  static createV1 (code, digest) {\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   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @template {API.Version} Ver\n   * @param {API.ByteView<API.Link<Data, Code, Alg, Ver>>} bytes\n   * @returns {CID<Data, Code, Alg, Ver>}\n   */\n  static decode (bytes) {\n    const [cid, remainder] = CID.decodeFirst(bytes)\n    if (remainder.length) {\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   * @template {unknown} T\n   * @template {number} C\n   * @template {number} A\n   * @template {API.Version} V\n   * @param {API.ByteView<API.Link<T, C, A, V>>} bytes\n   * @returns {[CID<T, C, A, V>, Uint8Array]}\n   */\n  static decodeFirst (bytes) {\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(/** @type {API.MultihashDigest<API.SHA_256>} */ (digest))\n        : CID.createV1(specs.codec, digest)\n    return [/** @type {CID<T, C, A, V>} */(cid), 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   * @template {unknown} T\n   * @template {number} C\n   * @template {number} A\n   * @template {API.Version} V\n   * @param {API.ByteView<API.Link<T, C, A, V>>} initialBytes\n   * @returns {{ version:V, codec:C, multihashCode:A, digestSize:number, multihashSize:number, size:number }}\n   */\n  static inspectBytes (initialBytes) {\n    let offset = 0\n    const next = () => {\n      const [i, length] = varint.decode(initialBytes.subarray(offset))\n      offset += length\n      return i\n    }\n\n    let version = /** @type {V} */ (next())\n    let codec = /** @type {C} */ (DAG_PB_CODE)\n    if (/** @type {number} */(version) === 18) {\n      // CIDv0\n      version = /** @type {V} */ (0)\n      offset = 0\n    } else {\n      codec = /** @type {C} */ (next())\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 = /** @type {A} */ (next()) // 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   * @template {string} Prefix\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @template {API.Version} Ver\n   * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n   * @param {API.MultibaseDecoder<Prefix>} [base]\n   * @returns {CID<Data, Code, Alg, Ver>}\n   */\n  static parse (source, base) {\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\n/**\n * @template {string} Prefix\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @template {API.Version} Ver\n * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n * @param {API.MultibaseDecoder<Prefix>} [base]\n * @returns {[Prefix, API.ByteView<API.Link<Data, Code, Alg, Ver>>]}\n */\nconst parseCIDtoBytes = (source, base) => {\n  switch (source[0]) {\n    // CIDv0 is parsed differently\n    case 'Q': {\n      const decoder = base || base58btc\n      return [\n        /** @type {Prefix} */ (base58btc.prefix),\n        decoder.decode(`${base58btc.prefix}${source}`)\n      ]\n    }\n    case base58btc.prefix: {\n      const decoder = base || base58btc\n      return [/** @type {Prefix} */(base58btc.prefix), decoder.decode(source)]\n    }\n    case base32.prefix: {\n      const decoder = base || base32\n      return [/** @type {Prefix} */(base32.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 [/** @type {Prefix} */(source[0]), base.decode(source)]\n    }\n  }\n}\n\n/**\n *\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<'z'>} base\n */\nconst toStringV0 = (bytes, cache, base) => {\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\n/**\n * @template {string} Prefix\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<Prefix>} base\n */\nconst toStringV1 = (bytes, cache, base) => {\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\n/**\n * @param {API.Version} version\n * @param {number} code\n * @param {Uint8Array} multihash\n * @returns {Uint8Array}\n */\nconst encodeCID = (version, code, multihash) => {\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 '../vendor/varint.js'\n\n/**\n * @param {Uint8Array} data\n * @param {number} [offset=0]\n * @returns {[number, number]}\n */\nexport const decode = (data, offset = 0) => {\n  const code = varint.decode(data, offset)\n  return [code, varint.decode.bytes]\n}\n\n/**\n * @param {number} int\n * @param {Uint8Array} target\n * @param {number} [offset=0]\n */\nexport const encodeTo = (int, target, offset = 0) => {\n  varint.encode(int, target, offset)\n  return target\n}\n\n/**\n * @param {number} int\n * @returns {number}\n */\nexport const encodingLength = (int) => {\n  return varint.encodingLength(int)\n}\n", "var encode_1 = encode;\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31);\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  encode.bytes = offset - oldOffset + 1;\n  \n  return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n  , REST$1 = 0x7F;\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      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  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 (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'\n\n/**\n * Creates a multihash digest.\n *\n * @template {number} Code\n * @param {Code} code\n * @param {Uint8Array} digest\n */\nexport const create = (code, digest) => {\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 *\n * @param {Uint8Array} multihash\n * @returns {MultihashDigest}\n */\nexport const decode = (multihash) => {\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\n/**\n * @param {MultihashDigest} a\n * @param {unknown} b\n * @returns {b is MultihashDigest}\n */\nexport const equals = (a, b) => {\n  if (a === b) {\n    return true\n  } else {\n    const data = /** @type {{code?:unknown, size?:unknown, bytes?:unknown}} */(b)\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 * @typedef {import('./interface.js').MultihashDigest} MultihashDigest\n */\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n *\n * @template {number} Code\n * @template {number} Size\n * @class\n * @implements {MultihashDigest}\n */\nexport class Digest {\n  /**\n   * Creates a multihash digest.\n   *\n   * @param {Code} code\n   * @param {Size} size\n   * @param {Uint8Array} digest\n   * @param {Uint8Array} bytes\n   */\n  constructor (code, size, digest, bytes) {\n    this.code = code\n    this.size = size\n    this.digest = digest\n    this.bytes = bytes\n  }\n}\n", "const empty = new Uint8Array(0)\n\n/**\n * @param {Uint8Array} d\n */\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n\n/**\n * @param {string} hex\n */\nconst fromHex = hex => {\n  const hexes = hex.match(/../g)\n  return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\n/**\n * @param {Uint8Array} aa\n * @param {Uint8Array} bb\n */\nconst equals = (aa, bb) => {\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\n/**\n * @param {ArrayBufferView|ArrayBuffer|Uint8Array} o\n * @returns {Uint8Array}\n */\nconst coerce = o => {\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\n/**\n * @param {any} o\n * @returns {o is ArrayBuffer|ArrayBufferView}\n */\nconst isBinary = o =>\n  o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nconst fromString = str => (new TextEncoder()).encode(str)\n\n/**\n * @param {Uint8Array} b\n * @returns {string}\n */\nconst toString = b => (new TextDecoder()).decode(b)\n\nexport { equals, coerce, isBinary, fromHex, toHex, fromString, toString, empty }\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 basex from '../../vendor/base-x.js'\nimport { coerce } from '../bytes.js'\n// Linter can't see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\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 *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.BaseEncoder}\n */\nclass Encoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   */\n  constructor (name, prefix, baseEncode) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n  }\n\n  /**\n   * @param {Uint8Array} bytes\n   * @returns {API.Multibase<Prefix>}\n   */\n  encode (bytes) {\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 * @template {string} Prefix\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 *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.UnibaseDecoder<Prefix>}\n * @implements {API.BaseDecoder}\n */\nclass Decoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseDecode) {\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    /** @private */\n    this.prefixCodePoint = /** @type {number} */ (prefix.codePointAt(0))\n    this.baseDecode = baseDecode\n  }\n\n  /**\n   * @param {string} text\n   */\n  decode (text) {\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  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n}\n\n/**\n * @template {string} Prefix\n * @typedef {Record<Prefix, API.UnibaseDecoder<Prefix>>} Decoders\n */\n\n/**\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.CombobaseDecoder<Prefix>}\n */\nclass ComposedDecoder {\n  /**\n   * @param {Decoders<Prefix>} decoders\n   */\n  constructor (decoders) {\n    this.decoders = decoders\n  }\n\n  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n\n  /**\n   * @param {string} input\n   * @returns {Uint8Array}\n   */\n  decode (input) {\n    const prefix = /** @type {Prefix} */ (input[0])\n    const decoder = this.decoders[prefix]\n    if (decoder) {\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\n/**\n * @template {string} L\n * @template {string} R\n * @param {API.UnibaseDecoder<L>|API.CombobaseDecoder<L>} left\n * @param {API.UnibaseDecoder<R>|API.CombobaseDecoder<R>} right\n * @returns {ComposedDecoder<L|R>}\n */\nexport const or = (left, right) => new ComposedDecoder(/** @type {Decoders<L|R>} */({\n  ...(left.decoders || { [/** @type API.UnibaseDecoder<L> */(left).prefix]: left }),\n  ...(right.decoders || { [/** @type API.UnibaseDecoder<R> */(right).prefix]: right })\n}))\n\n/**\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseCodec<Prefix>}\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.BaseCodec}\n * @implements {API.BaseEncoder}\n * @implements {API.BaseDecoder}\n */\nexport class Codec {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseEncode, baseDecode) {\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  /**\n   * @param {Uint8Array} input\n   */\n  encode (input) {\n    return this.encoder.encode(input)\n  }\n\n  /**\n   * @param {string} input\n   */\n  decode (input) {\n    return this.decoder.decode(input)\n  }\n}\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {(bytes:Uint8Array) => string} options.encode\n * @param {(input:string) => Uint8Array} options.decode\n * @returns {Codec<Base, Prefix>}\n */\nexport const from = ({ name, prefix, encode, decode }) =>\n  new Codec(name, prefix, encode, decode)\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @returns {Codec<Base, Prefix>}\n */\nexport const baseX = ({ prefix, name, alphabet }) => {\n  const { encode, decode } = basex(alphabet, name)\n  return from({\n    prefix,\n    name,\n    encode,\n    /**\n     * @param {string} text\n     */\n    decode: text => coerce(decode(text))\n  })\n}\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @param {string} name\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar, name) => {\n  // Build the character lookup table:\n  /** @type {Record<string, number>} */\n  const codes = {}\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))) {\n    throw new SyntaxError('Unexpected end of data')\n  }\n\n  return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\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) {\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) {\n      out += '='\n    }\n  }\n\n  return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @param {number} options.bitsPerChar\n */\nexport const rfc4648 = ({ name, prefix, bitsPerChar, alphabet }) => {\n  return from({\n    prefix,\n    name,\n    encode (input) {\n      return encode(input, alphabet, bitsPerChar)\n    },\n    decode (input) {\n      return decode(input, alphabet, bitsPerChar, name)\n    }\n  })\n}\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.\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  function encode (source) {\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  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  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", "// this is dummy module overlayed by interface.ts\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", "// this is dummy module overlayed by interface.ts\n", "import * as varint from './varint.js'\nimport * as Digest from './hashes/digest.js'\nimport { base58btc } from './bases/base58.js'\nimport { base32 } from './bases/base32.js'\nimport { coerce } from './bytes.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * 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\n/**\n * @template {API.Link<unknown, number, number, API.Version>} T\n * @template {string} Prefix\n * @param {T} link\n * @param {API.MultibaseEncoder<Prefix>} [base]\n * @returns {API.ToString<T, Prefix>}\n */\nexport const format = (link, base) => {\n  const { bytes, version } = link\n  switch (version) {\n    case 0:\n      return toStringV0(\n        bytes,\n        baseCache(link),\n        /** @type {API.MultibaseEncoder<\"z\">} */ (base) || base58btc.encoder\n      )\n    default:\n      return toStringV1(\n        bytes,\n        baseCache(link),\n        /** @type {API.MultibaseEncoder<Prefix>} */ (base || base32.encoder)\n      )\n  }\n}\n\n/**\n * @template {API.UnknownLink} Link\n * @param {Link} link\n * @returns {API.LinkJSON<Link>}\n */\nexport const toJSON = (link) => ({\n  '/': format(link)\n})\n\n/**\n * @template {API.UnknownLink} Link\n * @param {API.LinkJSON<Link>} json\n */\nexport const fromJSON = (json) =>\n  CID.parse(json['/'])\n\n/** @type {WeakMap<API.UnknownLink, Map<string, string>>} */\nconst cache = new WeakMap()\n\n/**\n * @param {API.UnknownLink} cid\n * @returns {Map<string, string>}\n */\nconst baseCache = cid => {\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\n/**\n * @template {unknown} [Data=unknown]\n * @template {number} [Format=number]\n * @template {number} [Alg=number]\n * @template {API.Version} [Version=API.Version]\n * @implements {API.Link<Data, Format, Alg, Version>}\n */\n\nexport class CID {\n  /**\n   * @param {Version} version - Version of the CID\n   * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param {API.MultihashDigest<Alg>} multihash - (Multi)hash of the of the content.\n   * @param {Uint8Array} bytes\n   *\n   */\n  constructor (version, code, multihash, bytes) {\n    /** @readonly */\n    this.code = code\n    /** @readonly */\n    this.version = version\n    /** @readonly */\n    this.multihash = multihash\n    /** @readonly */\n    this.bytes = bytes\n\n    // flag to serializers that this is a CID and\n    // should be treated specially\n    /** @readonly */\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 () {\n    return this\n  }\n\n  // ArrayBufferView\n  get byteOffset () {\n    return this.bytes.byteOffset\n  }\n\n  // ArrayBufferView\n  get byteLength () {\n    return this.bytes.byteLength\n  }\n\n  /**\n   * @returns {CID<Data, API.DAG_PB, API.SHA_256, 0>}\n   */\n  toV0 () {\n    switch (this.version) {\n      case 0: {\n        return /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (this)\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 /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (\n          CID.createV0(\n            /** @type {API.MultihashDigest<API.SHA_256>} */ (multihash)\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  /**\n   * @returns {CID<Data, Format, Alg, 1>}\n   */\n  toV1 () {\n    switch (this.version) {\n      case 0: {\n        const { code, digest } = this.multihash\n        const multihash = Digest.create(code, digest)\n        return /** @type {CID<Data, Format, Alg, 1>} */ (\n          CID.createV1(this.code, multihash)\n        )\n      }\n      case 1: {\n        return /** @type {CID<Data, Format, Alg, 1>} */ (this)\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  /**\n   * @param {unknown} other\n   * @returns {other is CID<Data, Format, Alg, Version>}\n   */\n  equals (other) {\n    return CID.equals(this, other)\n  }\n\n  /**\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @param {API.Link<Data, Format, Alg, Version>} self\n   * @param {unknown} other\n   * @returns {other is CID}\n   */\n  static equals (self, other) {\n    const unknown =\n      /** @type {{code?:unknown, version?:unknown, multihash?:unknown}} */ (\n        other\n      )\n    return (\n      unknown &&\n      self.code === unknown.code &&\n      self.version === unknown.version &&\n      Digest.equals(self.multihash, unknown.multihash)\n    )\n  }\n\n  /**\n   * @param {API.MultibaseEncoder<string>} [base]\n   * @returns {string}\n   */\n  toString (base) {\n    return format(this, base)\n  }\n\n  toJSON () {\n    return { '/': format(this) }\n  }\n\n  link () {\n    return this\n  }\n\n  get [Symbol.toStringTag] () {\n    return 'CID'\n  }\n\n  // Legacy\n\n  [Symbol.for('nodejs.util.inspect.custom')] () {\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   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @template {unknown} U\n   * @param {API.Link<Data, Format, Alg, Version>|U} input\n   * @returns {CID<Data, Format, Alg, Version>|null}\n   */\n  static asCID (input) {\n    if (input == null) {\n      return null\n    }\n\n    const value = /** @type {any} */ (input)\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        /** @type {API.MultihashDigest<Alg>} */ (multihash),\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 =\n        /** @type {API.MultihashDigest<Alg>} */\n        (Digest.decode(multihash))\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   *\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @param {Version} version - Version of the CID\n   * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param {API.MultihashDigest<Alg>} digest - (Multi)hash of the of the content.\n   * @returns {CID<Data, Format, Alg, Version>}\n   */\n  static create (version, code, digest) {\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   * @template {unknown} [T=unknown]\n   * @param {API.MultihashDigest<typeof SHA_256_CODE>} digest - Multihash.\n   * @returns {CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0>}\n   */\n  static createV0 (digest) {\n    return CID.create(0, DAG_PB_CODE, digest)\n  }\n\n  /**\n   * Simplified version of `create` for CIDv1.\n   *\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @param {Code} code - Content encoding format code.\n   * @param {API.MultihashDigest<Alg>} digest - Miltihash of the content.\n   * @returns {CID<Data, Code, Alg, 1>}\n   */\n  static createV1 (code, digest) {\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   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @template {API.Version} Ver\n   * @param {API.ByteView<API.Link<Data, Code, Alg, Ver>>} bytes\n   * @returns {CID<Data, Code, Alg, Ver>}\n   */\n  static decode (bytes) {\n    const [cid, remainder] = CID.decodeFirst(bytes)\n    if (remainder.length) {\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   * @template {unknown} T\n   * @template {number} C\n   * @template {number} A\n   * @template {API.Version} V\n   * @param {API.ByteView<API.Link<T, C, A, V>>} bytes\n   * @returns {[CID<T, C, A, V>, Uint8Array]}\n   */\n  static decodeFirst (bytes) {\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(/** @type {API.MultihashDigest<API.SHA_256>} */ (digest))\n        : CID.createV1(specs.codec, digest)\n    return [/** @type {CID<T, C, A, V>} */(cid), 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   * @template {unknown} T\n   * @template {number} C\n   * @template {number} A\n   * @template {API.Version} V\n   * @param {API.ByteView<API.Link<T, C, A, V>>} initialBytes\n   * @returns {{ version:V, codec:C, multihashCode:A, digestSize:number, multihashSize:number, size:number }}\n   */\n  static inspectBytes (initialBytes) {\n    let offset = 0\n    const next = () => {\n      const [i, length] = varint.decode(initialBytes.subarray(offset))\n      offset += length\n      return i\n    }\n\n    let version = /** @type {V} */ (next())\n    let codec = /** @type {C} */ (DAG_PB_CODE)\n    if (/** @type {number} */(version) === 18) {\n      // CIDv0\n      version = /** @type {V} */ (0)\n      offset = 0\n    } else {\n      codec = /** @type {C} */ (next())\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 = /** @type {A} */ (next()) // 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   * @template {string} Prefix\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @template {API.Version} Ver\n   * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n   * @param {API.MultibaseDecoder<Prefix>} [base]\n   * @returns {CID<Data, Code, Alg, Ver>}\n   */\n  static parse (source, base) {\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\n/**\n * @template {string} Prefix\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @template {API.Version} Ver\n * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n * @param {API.MultibaseDecoder<Prefix>} [base]\n * @returns {[Prefix, API.ByteView<API.Link<Data, Code, Alg, Ver>>]}\n */\nconst parseCIDtoBytes = (source, base) => {\n  switch (source[0]) {\n    // CIDv0 is parsed differently\n    case 'Q': {\n      const decoder = base || base58btc\n      return [\n        /** @type {Prefix} */ (base58btc.prefix),\n        decoder.decode(`${base58btc.prefix}${source}`)\n      ]\n    }\n    case base58btc.prefix: {\n      const decoder = base || base58btc\n      return [/** @type {Prefix} */(base58btc.prefix), decoder.decode(source)]\n    }\n    case base32.prefix: {\n      const decoder = base || base32\n      return [/** @type {Prefix} */(base32.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 [/** @type {Prefix} */(source[0]), base.decode(source)]\n    }\n  }\n}\n\n/**\n *\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<'z'>} base\n */\nconst toStringV0 = (bytes, cache, base) => {\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\n/**\n * @template {string} Prefix\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<Prefix>} base\n */\nconst toStringV1 = (bytes, cache, base) => {\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\n/**\n * @param {API.Version} version\n * @param {number} code\n * @param {Uint8Array} multihash\n * @returns {Uint8Array}\n */\nconst encodeCID = (version, code, multihash) => {\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 '../vendor/varint.js'\n\n/**\n * @param {Uint8Array} data\n * @param {number} [offset=0]\n * @returns {[number, number]}\n */\nexport const decode = (data, offset = 0) => {\n  const code = varint.decode(data, offset)\n  return [code, varint.decode.bytes]\n}\n\n/**\n * @param {number} int\n * @param {Uint8Array} target\n * @param {number} [offset=0]\n */\nexport const encodeTo = (int, target, offset = 0) => {\n  varint.encode(int, target, offset)\n  return target\n}\n\n/**\n * @param {number} int\n * @returns {number}\n */\nexport const encodingLength = (int) => {\n  return varint.encodingLength(int)\n}\n", "var encode_1 = encode;\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31);\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  encode.bytes = offset - oldOffset + 1;\n  \n  return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n  , REST$1 = 0x7F;\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      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  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 (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'\n\n/**\n * Creates a multihash digest.\n *\n * @template {number} Code\n * @param {Code} code\n * @param {Uint8Array} digest\n */\nexport const create = (code, digest) => {\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 *\n * @param {Uint8Array} multihash\n * @returns {MultihashDigest}\n */\nexport const decode = (multihash) => {\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\n/**\n * @param {MultihashDigest} a\n * @param {unknown} b\n * @returns {b is MultihashDigest}\n */\nexport const equals = (a, b) => {\n  if (a === b) {\n    return true\n  } else {\n    const data = /** @type {{code?:unknown, size?:unknown, bytes?:unknown}} */(b)\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 * @typedef {import('./interface.js').MultihashDigest} MultihashDigest\n */\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n *\n * @template {number} Code\n * @template {number} Size\n * @class\n * @implements {MultihashDigest}\n */\nexport class Digest {\n  /**\n   * Creates a multihash digest.\n   *\n   * @param {Code} code\n   * @param {Size} size\n   * @param {Uint8Array} digest\n   * @param {Uint8Array} bytes\n   */\n  constructor (code, size, digest, bytes) {\n    this.code = code\n    this.size = size\n    this.digest = digest\n    this.bytes = bytes\n  }\n}\n", "const empty = new Uint8Array(0)\n\n/**\n * @param {Uint8Array} d\n */\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n\n/**\n * @param {string} hex\n */\nconst fromHex = hex => {\n  const hexes = hex.match(/../g)\n  return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\n/**\n * @param {Uint8Array} aa\n * @param {Uint8Array} bb\n */\nconst equals = (aa, bb) => {\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\n/**\n * @param {ArrayBufferView|ArrayBuffer|Uint8Array} o\n * @returns {Uint8Array}\n */\nconst coerce = o => {\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\n/**\n * @param {any} o\n * @returns {o is ArrayBuffer|ArrayBufferView}\n */\nconst isBinary = o =>\n  o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nconst fromString = str => (new TextEncoder()).encode(str)\n\n/**\n * @param {Uint8Array} b\n * @returns {string}\n */\nconst toString = b => (new TextDecoder()).decode(b)\n\nexport { equals, coerce, isBinary, fromHex, toHex, fromString, toString, empty }\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 basex from '../../vendor/base-x.js'\nimport { coerce } from '../bytes.js'\n// Linter can't see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\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 *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.BaseEncoder}\n */\nclass Encoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   */\n  constructor (name, prefix, baseEncode) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n  }\n\n  /**\n   * @param {Uint8Array} bytes\n   * @returns {API.Multibase<Prefix>}\n   */\n  encode (bytes) {\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 * @template {string} Prefix\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 *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.UnibaseDecoder<Prefix>}\n * @implements {API.BaseDecoder}\n */\nclass Decoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseDecode) {\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    /** @private */\n    this.prefixCodePoint = /** @type {number} */ (prefix.codePointAt(0))\n    this.baseDecode = baseDecode\n  }\n\n  /**\n   * @param {string} text\n   */\n  decode (text) {\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  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n}\n\n/**\n * @template {string} Prefix\n * @typedef {Record<Prefix, API.UnibaseDecoder<Prefix>>} Decoders\n */\n\n/**\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.CombobaseDecoder<Prefix>}\n */\nclass ComposedDecoder {\n  /**\n   * @param {Decoders<Prefix>} decoders\n   */\n  constructor (decoders) {\n    this.decoders = decoders\n  }\n\n  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n\n  /**\n   * @param {string} input\n   * @returns {Uint8Array}\n   */\n  decode (input) {\n    const prefix = /** @type {Prefix} */ (input[0])\n    const decoder = this.decoders[prefix]\n    if (decoder) {\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\n/**\n * @template {string} L\n * @template {string} R\n * @param {API.UnibaseDecoder<L>|API.CombobaseDecoder<L>} left\n * @param {API.UnibaseDecoder<R>|API.CombobaseDecoder<R>} right\n * @returns {ComposedDecoder<L|R>}\n */\nexport const or = (left, right) => new ComposedDecoder(/** @type {Decoders<L|R>} */({\n  ...(left.decoders || { [/** @type API.UnibaseDecoder<L> */(left).prefix]: left }),\n  ...(right.decoders || { [/** @type API.UnibaseDecoder<R> */(right).prefix]: right })\n}))\n\n/**\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseCodec<Prefix>}\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.BaseCodec}\n * @implements {API.BaseEncoder}\n * @implements {API.BaseDecoder}\n */\nexport class Codec {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseEncode, baseDecode) {\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  /**\n   * @param {Uint8Array} input\n   */\n  encode (input) {\n    return this.encoder.encode(input)\n  }\n\n  /**\n   * @param {string} input\n   */\n  decode (input) {\n    return this.decoder.decode(input)\n  }\n}\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {(bytes:Uint8Array) => string} options.encode\n * @param {(input:string) => Uint8Array} options.decode\n * @returns {Codec<Base, Prefix>}\n */\nexport const from = ({ name, prefix, encode, decode }) =>\n  new Codec(name, prefix, encode, decode)\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @returns {Codec<Base, Prefix>}\n */\nexport const baseX = ({ prefix, name, alphabet }) => {\n  const { encode, decode } = basex(alphabet, name)\n  return from({\n    prefix,\n    name,\n    encode,\n    /**\n     * @param {string} text\n     */\n    decode: text => coerce(decode(text))\n  })\n}\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @param {string} name\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar, name) => {\n  // Build the character lookup table:\n  /** @type {Record<string, number>} */\n  const codes = {}\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))) {\n    throw new SyntaxError('Unexpected end of data')\n  }\n\n  return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\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) {\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) {\n      out += '='\n    }\n  }\n\n  return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @param {number} options.bitsPerChar\n */\nexport const rfc4648 = ({ name, prefix, bitsPerChar, alphabet }) => {\n  return from({\n    prefix,\n    name,\n    encode (input) {\n      return encode(input, alphabet, bitsPerChar)\n    },\n    decode (input) {\n      return decode(input, alphabet, bitsPerChar, name)\n    }\n  })\n}\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.\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  function encode (source) {\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  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  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", "// this is dummy module overlayed by interface.ts\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", "// this is dummy module overlayed by interface.ts\n", "import errcode from 'err-code'\nimport first from 'it-first'\nimport parallelBatch from 'it-parallel-batch'\nimport { fixedSize } from './chunker/fixed-size.js'\nimport { type BufferImportProgressEvents, defaultBufferImporter } from './dag-builder/buffer-importer.js'\nimport { type DAGBuilder, type DagBuilderProgressEvents, defaultDagBuilder } from './dag-builder/index.js'\nimport { type ChunkValidator, defaultChunkValidator } from './dag-builder/validate-chunks.js'\nimport { balanced, type FileLayout } from './layout/index.js'\nimport { defaultTreeBuilder } from './tree-builder.js'\nimport type { Chunker } from './chunker/index.js'\nimport type { ReducerProgressEvents } from './dag-builder/file.js'\nimport type { Blockstore } from 'interface-blockstore'\nimport type { AwaitIterable } from 'interface-store'\nimport type { UnixFS, Mtime } from 'ipfs-unixfs'\nimport type { CID, Version as CIDVersion } from 'multiformats/cid'\nimport type { ProgressOptions } from 'progress-events'\n\nexport type ByteStream = AwaitIterable<Uint8Array>\nexport type ImportContent = ByteStream | Uint8Array\n\nexport type WritableStorage = Pick<Blockstore, 'put'>\n\nexport interface FileCandidate {\n  path?: string\n  content: ImportContent\n  mtime?: Mtime\n  mode?: number\n}\n\nexport interface DirectoryCandidate {\n  path: string\n  mtime?: Mtime\n  mode?: number\n}\n\nexport type ImportCandidate = FileCandidate | DirectoryCandidate\n\nexport interface File {\n  content: AsyncIterable<Uint8Array>\n  path?: string\n  mtime?: Mtime\n  mode?: number\n  originalPath?: string\n}\n\nexport interface Directory {\n  path?: string\n  mtime?: Mtime\n  mode?: number\n  originalPath?: string\n}\n\nexport interface ImportResult {\n  cid: CID\n  size: bigint\n  path?: string\n  unixfs?: UnixFS\n}\n\nexport interface MultipleBlockImportResult extends ImportResult {\n  originalPath?: string\n}\n\nexport interface SingleBlockImportResult extends ImportResult {\n  single: true\n  originalPath?: string\n  block: Uint8Array\n}\n\nexport type InProgressImportResult = SingleBlockImportResult | MultipleBlockImportResult\n\nexport interface BufferImporterResult extends ImportResult {\n  block: Uint8Array\n}\n\nexport interface HamtHashFn { (value: Uint8Array): Promise<Uint8Array> }\nexport interface TreeBuilder { (source: AsyncIterable<InProgressImportResult>, blockstore: WritableStorage): AsyncIterable<ImportResult> }\nexport interface BufferImporter { (file: File, blockstore: WritableStorage): AsyncIterable<() => Promise<BufferImporterResult>> }\n\nexport type ImporterProgressEvents =\n  BufferImportProgressEvents |\n  DagBuilderProgressEvents |\n  ReducerProgressEvents\n\n/**\n * Options to control the importer's behaviour\n */\nexport interface ImporterOptions extends ProgressOptions<ImporterProgressEvents> {\n  /**\n   * When a file would span multiple DAGNodes, if this is true the leaf nodes\n   * will not be wrapped in `UnixFS` protobufs and will instead contain the\n   * raw file bytes. Default: true\n   */\n  rawLeaves?: boolean\n\n  /**\n   * If the file being imported is small enough to fit into one DAGNodes, store\n   * the file data in the root node along with the UnixFS metadata instead of\n   * in a leaf node which would then require additional I/O to load. Default: true\n   */\n  reduceSingleLeafToSelf?: boolean\n\n  /**\n   * What type of UnixFS node leaves should be - can be `'file'` or `'raw'`\n   * (ignored when `rawLeaves` is `true`).\n   *\n   * This option exists to simulate kubo's trickle dag which uses a combination\n   * of `'raw'` UnixFS leaves and `reduceSingleLeafToSelf: false`.\n   *\n   * For modern code the `rawLeaves: true` option should be used instead so leaves\n   * are plain Uint8Arrays without a UnixFS/Protobuf wrapper.\n   */\n  leafType?: 'file' | 'raw'\n\n  /**\n   * the CID version to use when storing the data. Default: 1\n   */\n  cidVersion?: CIDVersion\n\n  /**\n   * If the serialized node is larger than this it might be converted to a HAMT\n   * sharded directory. Default: 256KiB\n   */\n  shardSplitThresholdBytes?: number\n\n  /**\n   * How many files to import concurrently. For large numbers of small files this\n   * should be high (e.g. 50). Default: 10\n   */\n  fileImportConcurrency?: number\n\n  /**\n   * How many blocks to hash and write to the block store concurrently. For small\n   * numbers of large files this should be high (e.g. 50). Default: 50\n   */\n  blockWriteConcurrency?: number\n\n  /**\n   * If true, all imported files and folders will be contained in a directory that\n   * will correspond to the CID of the final entry yielded. Default: false\n   */\n  wrapWithDirectory?: boolean\n\n  /**\n   * The chunking strategy. See [./src/chunker/index.ts](./src/chunker/index.ts)\n   * for available chunkers. Default: fixedSize\n   */\n  chunker?: Chunker\n\n  /**\n   * How the DAG that represents files are created. See\n   * [./src/layout/index.ts](./src/layout/index.ts) for available layouts. Default: balanced\n   */\n  layout?: FileLayout\n\n  /**\n   * This option can be used to override the importer internals.\n   *\n   * This function should read `{ path, content }` entries from `source` and turn them\n   * into DAGs\n   * It should yield a `function` that returns a `Promise` that resolves to\n   * `{ cid, path, unixfs, node }` where `cid` is a `CID`, `path` is a string, `unixfs`\n   * is a UnixFS entry and `node` is a `DAGNode`.\n   * Values will be pulled from this generator in parallel - the amount of parallelisation\n   * is controlled by the `fileImportConcurrency` option (default: 50)\n   */\n  dagBuilder?: DAGBuilder\n\n  /**\n   * This option can be used to override the importer internals.\n   *\n   * This function should read `{ cid, path, unixfs, node }` entries from `source` and\n   * place them in a directory structure\n   * It should yield an object with the properties `{ cid, path, unixfs, size }` where\n   * `cid` is a `CID`, `path` is a string, `unixfs` is a UnixFS entry and `size` is a `Number`.\n   */\n  treeBuilder?: TreeBuilder\n\n  /**\n   * This option can be used to override the importer internals.\n   *\n   * This function should read `Buffer`s from `source` and persist them using `blockstore.put`\n   * or similar\n   * `entry` is the `{ path, content }` entry, where `entry.content` is an async\n   * generator that yields Buffers\n   * It should yield functions that return a Promise that resolves to an object with\n   * the properties `{ cid, unixfs, size }` where `cid` is a [CID], `unixfs` is a [UnixFS] entry and `size` is a `Number` that represents the serialized size of the [IPLD] node that holds the buffer data.\n   * Values will be pulled from this generator in parallel - the amount of\n   * parallelisation is controlled by the `blockWriteConcurrency` option (default: 10)\n   */\n  bufferImporter?: BufferImporter\n\n  /**\n   * This option can be used to override the importer internals.\n   *\n   * This function takes input from the `content` field of imported entries.\n   * It should transform them into `Buffer`s, throwing an error if it cannot.\n   * It should yield `Buffer` objects constructed from the `source` or throw an\n   * `Error`\n   */\n  chunkValidator?: ChunkValidator\n}\n\nexport type ImportCandidateStream = AsyncIterable<FileCandidate | DirectoryCandidate> | Iterable<FileCandidate | DirectoryCandidate>\n\n/**\n * The importer creates UnixFS DAGs and stores the blocks that make\n * them up in the passed blockstore.\n *\n * @example\n *\n * ```typescript\n * import { importer } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input = [{\n *   path: './foo.txt',\n *   content: Uint8Array.from([0, 1, 2, 3, 4])\n * }, {\n *   path: './bar.txt',\n *   content: Uint8Array.from([0, 1, 2, 3, 4])\n * }]\n *\n * for await (const entry of importer(input, blockstore)) {\n *   console.info(entry)\n *   // { cid: CID(), ... }\n * }\n * ```\n */\nexport async function * importer (source: ImportCandidateStream, blockstore: WritableStorage, options: ImporterOptions = {}): AsyncGenerator<ImportResult, void, unknown> {\n  let candidates: AsyncIterable<FileCandidate | DirectoryCandidate> | Iterable<FileCandidate | DirectoryCandidate>\n\n  if (Symbol.asyncIterator in source || Symbol.iterator in source) {\n    candidates = source\n  } else {\n    candidates = [source]\n  }\n\n  const wrapWithDirectory = options.wrapWithDirectory ?? false\n  const shardSplitThresholdBytes = options.shardSplitThresholdBytes ?? 262144\n  const cidVersion = options.cidVersion ?? 1\n  const rawLeaves = options.rawLeaves ?? true\n  const leafType = options.leafType ?? 'file'\n  const fileImportConcurrency = options.fileImportConcurrency ?? 50\n  const blockWriteConcurrency = options.blockWriteConcurrency ?? 10\n  const reduceSingleLeafToSelf = options.reduceSingleLeafToSelf ?? true\n\n  const chunker = options.chunker ?? fixedSize()\n  const chunkValidator = options.chunkValidator ?? defaultChunkValidator()\n  const buildDag: DAGBuilder = options.dagBuilder ?? defaultDagBuilder({\n    chunker,\n    chunkValidator,\n    wrapWithDirectory,\n    layout: options.layout ?? balanced(),\n    bufferImporter: options.bufferImporter ?? defaultBufferImporter({\n      cidVersion,\n      rawLeaves,\n      leafType,\n      onProgress: options.onProgress\n    }),\n    blockWriteConcurrency,\n    reduceSingleLeafToSelf,\n    cidVersion,\n    onProgress: options.onProgress\n  })\n  const buildTree: TreeBuilder = options.treeBuilder ?? defaultTreeBuilder({\n    wrapWithDirectory,\n    shardSplitThresholdBytes,\n    cidVersion,\n    onProgress: options.onProgress\n  })\n\n  for await (const entry of buildTree(parallelBatch(buildDag(candidates, blockstore), fileImportConcurrency), blockstore)) {\n    yield {\n      cid: entry.cid,\n      path: entry.path,\n      unixfs: entry.unixfs,\n      size: entry.size\n    }\n  }\n}\n\n/**\n * `importFile` is similar to `importer` except it accepts a single\n * `FileCandidate` and returns a promise of a single `ImportResult`\n * instead of a stream of results.\n *\n * @example\n *\n * ```typescript\n * import { importFile } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input: FileCandidate = {\n *   path: './foo.txt',\n *   content: Uint8Array.from([0, 1, 2, 3, 4])\n * }\n *\n * const entry = await importFile(input, blockstore)\n * ```\n */\nexport async function importFile (content: FileCandidate, blockstore: WritableStorage, options: ImporterOptions = {}): Promise<ImportResult> {\n  const result = await first(importer([content], blockstore, options))\n\n  if (result == null) {\n    throw errcode(new Error('Nothing imported'), 'ERR_INVALID_PARAMS')\n  }\n\n  return result\n}\n\n/**\n * `importDir` is similar to `importer` except it accepts a single\n * `DirectoryCandidate` and returns a promise of a single `ImportResult`\n * instead of a stream of results.\n *\n * @example\n *\n * ```typescript\n * import { importDirectory } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input: DirectoryCandidate = {\n *   path: './foo.txt'\n * }\n *\n * const entry = await importDirectory(input, blockstore)\n * ```\n */\nexport async function importDirectory (content: DirectoryCandidate, blockstore: WritableStorage, options: ImporterOptions = {}): Promise<ImportResult> {\n  const result = await first(importer([content], blockstore, options))\n\n  if (result == null) {\n    throw errcode(new Error('Nothing imported'), 'ERR_INVALID_PARAMS')\n  }\n\n  return result\n}\n\n/**\n * `importBytes` accepts a single Uint8Array and returns a promise\n * of a single `ImportResult`.\n *\n * @example\n *\n * ```typescript\n * import { importBytes } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input = Uint8Array.from([0, 1, 2, 3, 4])\n *\n * const entry = await importBytes(input, blockstore)\n * ```\n */\nexport async function importBytes (buf: ImportContent, blockstore: WritableStorage, options: ImporterOptions = {}): Promise<ImportResult> {\n  return importFile({\n    content: buf\n  }, blockstore, options)\n}\n\n/**\n * `importByteStream` accepts a single stream of Uint8Arrays and\n * returns a promise of a single `ImportResult`.\n *\n * @example\n *\n * ```typescript\n * import { importByteStream } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input = [\n *   Uint8Array.from([0, 1, 2, 3, 4]),\n *   Uint8Array.from([5, 6, 7, 8, 9])\n * ]\n *\n * const entry = await importByteStream(input, blockstore)\n * ```\n */\nexport async function importByteStream (bufs: ByteStream, blockstore: WritableStorage, options: ImporterOptions = {}): Promise<ImportResult> {\n  return importFile({\n    content: bufs\n  }, blockstore, options)\n}\n", "function isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Returns the first result from an (async) iterable, unless empty, in which\n * case returns `undefined`\n */\nfunction first <T> (source: Iterable<T>): T | undefined\nfunction first <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T | undefined>\nfunction first <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T | undefined> | T | undefined {\n  if (isAsyncIterable(source)) {\n    return (async () => {\n      for await (const entry of source) { // eslint-disable-line no-unreachable-loop\n        return entry\n      }\n\n      return undefined\n    })()\n  }\n\n  for (const entry of source) { // eslint-disable-line no-unreachable-loop\n    return entry\n  }\n\n  return undefined\n}\n\nexport default first\n", "import batch from 'it-batch'\n\ninterface Success<T> {\n  ok: true\n  value: T\n}\n\ninterface Failure {\n  ok: false\n  err: Error\n}\n\n/**\n * Takes an (async) iterator that emits promise-returning functions,\n * invokes them in parallel and emits the results as they become available but\n * in the same order as the input\n */\nexport default async function * parallelBatch <T> (source: AsyncIterable<() => Promise<T>> | Iterable<() => Promise<T>>, size: number = 1): AsyncGenerator<T, void, undefined> {\n  for await (const tasks of batch(source, size)) {\n    const things: Array<Promise<Success<T> | Failure>> = tasks.map(\n      async (p: () => Promise<T>) => {\n        return p().then(value => ({ ok: true, value }), err => ({ ok: false, err }))\n      })\n\n    for (let i = 0; i < things.length; i++) {\n      const result = await things[i]\n\n      if (result.ok) {\n        yield result.value\n      } else {\n        throw result.err\n      }\n    }\n  }\n}\n", "function isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Takes an (async) iterable that emits things and returns an async iterable that\n * emits those things in fixed-sized batches\n */\nfunction batch <T> (source: Iterable<T>, size?: number): Generator<T[], void, undefined>\nfunction batch <T> (source: Iterable<T> | AsyncIterable<T>, size?: number): AsyncGenerator<T[], void, undefined>\nfunction batch <T> (source: Iterable<T> | AsyncIterable<T>, size: number = 1): Generator<T[], void, undefined> | AsyncGenerator<T[], void, undefined> {\n  size = Number(size)\n\n  if (isAsyncIterable(source)) {\n    return (async function * () {\n      let things: T[] = []\n\n      if (size < 1) {\n        size = 1\n      }\n\n      if (size !== Math.round(size)) {\n        throw new Error('Batch size must be an integer')\n      }\n\n      for await (const thing of source) {\n        things.push(thing)\n\n        while (things.length >= size) {\n          yield things.slice(0, size)\n\n          things = things.slice(size)\n        }\n      }\n\n      while (things.length > 0) {\n        yield things.slice(0, size)\n\n        things = things.slice(size)\n      }\n    }())\n  }\n\n  return (function * () {\n    let things: T[] = []\n\n    if (size < 1) {\n      size = 1\n    }\n\n    if (size !== Math.round(size)) {\n      throw new Error('Batch size must be an integer')\n    }\n\n    for (const thing of source) {\n      things.push(thing)\n\n      while (things.length >= size) {\n        yield things.slice(0, size)\n\n        things = things.slice(size)\n      }\n    }\n\n    while (things.length > 0) {\n      yield things.slice(0, size)\n\n      things = things.slice(size)\n    }\n  }())\n}\n\nexport default batch\n", "import { Uint8ArrayList } from 'uint8arraylist'\nimport type { Chunker } from './index.js'\n\nexport interface FixedSizeOptions {\n  chunkSize?: number\n}\n\nconst DEFAULT_CHUNK_SIZE = 262144\n\nexport const fixedSize = (options: FixedSizeOptions = {}): Chunker => {\n  const chunkSize = options.chunkSize ?? DEFAULT_CHUNK_SIZE\n\n  return async function * fixedSizeChunker (source) {\n    let list = new Uint8ArrayList()\n    let currentLength = 0\n    let emitted = false\n\n    for await (const buffer of source) {\n      list.append(buffer)\n\n      currentLength += buffer.length\n\n      while (currentLength >= chunkSize) {\n        yield list.slice(0, chunkSize)\n        emitted = true\n\n        // throw away consumed bytes\n        if (chunkSize === list.length) {\n          list = new Uint8ArrayList()\n          currentLength = 0\n        } else {\n          const newBl = new Uint8ArrayList()\n          newBl.append(list.sublist(chunkSize))\n          list = newBl\n\n          // update our offset\n          currentLength -= chunkSize\n        }\n      }\n    }\n\n    if (!emitted || currentLength > 0) {\n      // return any remaining bytes\n      yield list.subarray(0, currentLength)\n    }\n  }\n}\n", "import { concat } from 'uint8arrays/concat'\nimport { equals } from 'uint8arrays/equals'\nimport { allocUnsafe, alloc } from 'uint8arrays/alloc'\n\nconst symbol = Symbol.for('@achingbrain/uint8arraylist')\n\nexport type Appendable = Uint8ArrayList | Uint8Array\n\nfunction findBufAndOffset (bufs: Uint8Array[], index: number) {\n  if (index == null || index < 0) {\n    throw new RangeError('index is out of bounds')\n  }\n\n  let offset = 0\n\n  for (const buf of bufs) {\n    const bufEnd = offset + buf.byteLength\n\n    if (index < bufEnd) {\n      return {\n        buf,\n        index: index - offset\n      }\n    }\n\n    offset = bufEnd\n  }\n\n  throw new RangeError('index is out of bounds')\n}\n\n/**\n * Check if object is a CID instance\n *\n * @example\n *\n * ```js\n * import { isUint8ArrayList, Uint8ArrayList } from 'uint8arraylist'\n *\n * isUint8ArrayList(true) // false\n * isUint8ArrayList([]) // false\n * isUint8ArrayList(new Uint8ArrayList()) // true\n * ```\n */\nexport function isUint8ArrayList (value: any): value is Uint8ArrayList {\n  return Boolean(value?.[symbol])\n}\n\nexport class Uint8ArrayList implements Iterable<Uint8Array> {\n  private bufs: Uint8Array[]\n  public length: number\n\n  constructor (...data: Appendable[]) {\n    // Define symbol\n    Object.defineProperty(this, symbol, { value: true })\n\n    this.bufs = []\n    this.length = 0\n\n    if (data.length > 0) {\n      this.appendAll(data)\n    }\n  }\n\n  * [Symbol.iterator] () {\n    yield * this.bufs\n  }\n\n  get byteLength () {\n    return this.length\n  }\n\n  /**\n   * Add one or more `bufs` to the end of this Uint8ArrayList\n   */\n  append (...bufs: Appendable[]) {\n    this.appendAll(bufs)\n  }\n\n  /**\n   * Add all `bufs` to the end of this Uint8ArrayList\n   */\n  appendAll (bufs: Appendable[]) {\n    let length = 0\n\n    for (const buf of bufs) {\n      if (buf instanceof Uint8Array) {\n        length += buf.byteLength\n        this.bufs.push(buf)\n      } else if (isUint8ArrayList(buf)) {\n        length += buf.byteLength\n        this.bufs.push(...buf.bufs)\n      } else {\n        throw new Error('Could not append value, must be an Uint8Array or a Uint8ArrayList')\n      }\n    }\n\n    this.length += length\n  }\n\n  /**\n   * Add one or more `bufs` to the start of this Uint8ArrayList\n   */\n  prepend (...bufs: Appendable[]) {\n    this.prependAll(bufs)\n  }\n\n  /**\n   * Add all `bufs` to the start of this Uint8ArrayList\n   */\n  prependAll (bufs: Appendable[]) {\n    let length = 0\n\n    for (const buf of bufs.reverse()) {\n      if (buf instanceof Uint8Array) {\n        length += buf.byteLength\n        this.bufs.unshift(buf)\n      } else if (isUint8ArrayList(buf)) {\n        length += buf.byteLength\n        this.bufs.unshift(...buf.bufs)\n      } else {\n        throw new Error('Could not prepend value, must be an Uint8Array or a Uint8ArrayList')\n      }\n    }\n\n    this.length += length\n  }\n\n  /**\n   * Read the value at `index`\n   */\n  get (index: number) {\n    const res = findBufAndOffset(this.bufs, index)\n\n    return res.buf[res.index]\n  }\n\n  /**\n   * Set the value at `index` to `value`\n   */\n  set (index: number, value: number) {\n    const res = findBufAndOffset(this.bufs, index)\n\n    res.buf[res.index] = value\n  }\n\n  /**\n   * Copy bytes from `buf` to the index specified by `offset`\n   */\n  write (buf: Appendable, offset: number = 0) {\n    if (buf instanceof Uint8Array) {\n      for (let i = 0; i < buf.length; i++) {\n        this.set(offset + i, buf[i])\n      }\n    } else if (isUint8ArrayList(buf)) {\n      for (let i = 0; i < buf.length; i++) {\n        this.set(offset + i, buf.get(i))\n      }\n    } else {\n      throw new Error('Could not write value, must be an Uint8Array or a Uint8ArrayList')\n    }\n  }\n\n  /**\n   * Remove bytes from the front of the pool\n   */\n  consume (bytes: number) {\n    // first, normalize the argument, in accordance with how Buffer does it\n    bytes = Math.trunc(bytes)\n\n    // do nothing if not a positive number\n    if (Number.isNaN(bytes) || bytes <= 0) {\n      return\n    }\n\n    // if consuming all bytes, skip iterating\n    if (bytes === this.byteLength) {\n      this.bufs = []\n      this.length = 0\n      return\n    }\n\n    while (this.bufs.length > 0) {\n      if (bytes >= this.bufs[0].byteLength) {\n        bytes -= this.bufs[0].byteLength\n        this.length -= this.bufs[0].byteLength\n        this.bufs.shift()\n      } else {\n        this.bufs[0] = this.bufs[0].subarray(bytes)\n        this.length -= bytes\n        break\n      }\n    }\n  }\n\n  /**\n   * Extracts a section of an array and returns a new array.\n   *\n   * This is a copy operation as it is with Uint8Arrays and Arrays\n   * - note this is different to the behaviour of Node Buffers.\n   */\n  slice (beginInclusive?: number, endExclusive?: number): Uint8Array {\n    const { bufs, length } = this._subList(beginInclusive, endExclusive)\n\n    return concat(bufs, length)\n  }\n\n  /**\n   * Returns a alloc from the given start and end element index.\n   *\n   * In the best case where the data extracted comes from a single Uint8Array\n   * internally this is a no-copy operation otherwise it is a copy operation.\n   */\n  subarray (beginInclusive?: number, endExclusive?: number): Uint8Array {\n    const { bufs, length } = this._subList(beginInclusive, endExclusive)\n\n    if (bufs.length === 1) {\n      return bufs[0]\n    }\n\n    return concat(bufs, length)\n  }\n\n  /**\n   * Returns a allocList from the given start and end element index.\n   *\n   * This is a no-copy operation.\n   */\n  sublist (beginInclusive?: number, endExclusive?: number): Uint8ArrayList {\n    const { bufs, length } = this._subList(beginInclusive, endExclusive)\n\n    const list = new Uint8ArrayList()\n    list.length = length\n    // don't loop, just set the bufs\n    list.bufs = bufs\n\n    return list\n  }\n\n  private _subList (beginInclusive?: number, endExclusive?: number) {\n    beginInclusive = beginInclusive ?? 0\n    endExclusive = endExclusive ?? this.length\n\n    if (beginInclusive < 0) {\n      beginInclusive = this.length + beginInclusive\n    }\n\n    if (endExclusive < 0) {\n      endExclusive = this.length + endExclusive\n    }\n\n    if (beginInclusive < 0 || endExclusive > this.length) {\n      throw new RangeError('index is out of bounds')\n    }\n\n    if (beginInclusive === endExclusive) {\n      return { bufs: [], length: 0 }\n    }\n\n    if (beginInclusive === 0 && endExclusive === this.length) {\n      return { bufs: [...this.bufs], length: this.length }\n    }\n\n    const bufs: Uint8Array[] = []\n    let offset = 0\n\n    for (let i = 0; i < this.bufs.length; i++) {\n      const buf = this.bufs[i]\n      const bufStart = offset\n      const bufEnd = bufStart + buf.byteLength\n\n      // for next loop\n      offset = bufEnd\n\n      if (beginInclusive >= bufEnd) {\n        // start after this buf\n        continue\n      }\n\n      const sliceStartInBuf = beginInclusive >= bufStart && beginInclusive < bufEnd\n      const sliceEndsInBuf = endExclusive > bufStart && endExclusive <= bufEnd\n\n      if (sliceStartInBuf && sliceEndsInBuf) {\n        // slice is wholly contained within this buffer\n        if (beginInclusive === bufStart && endExclusive === bufEnd) {\n          // requested whole buffer\n          bufs.push(buf)\n          break\n        }\n\n        // requested part of buffer\n        const start = beginInclusive - bufStart\n        bufs.push(buf.subarray(start, start + (endExclusive - beginInclusive)))\n        break\n      }\n\n      if (sliceStartInBuf) {\n        // slice starts in this buffer\n        if (beginInclusive === 0) {\n          // requested whole buffer\n          bufs.push(buf)\n          continue\n        }\n\n        // requested part of buffer\n        bufs.push(buf.subarray(beginInclusive - bufStart))\n        continue\n      }\n\n      if (sliceEndsInBuf) {\n        if (endExclusive === bufEnd) {\n          // requested whole buffer\n          bufs.push(buf)\n          break\n        }\n\n        // requested part of buffer\n        bufs.push(buf.subarray(0, endExclusive - bufStart))\n        break\n      }\n\n      // slice started before this buffer and ends after it\n      bufs.push(buf)\n    }\n\n    return { bufs, length: endExclusive - beginInclusive }\n  }\n\n  indexOf (search: Uint8ArrayList | Uint8Array, offset: number = 0): number {\n    if (!isUint8ArrayList(search) && !(search instanceof Uint8Array)) {\n      throw new TypeError('The \"value\" argument must be a Uint8ArrayList or Uint8Array')\n    }\n\n    const needle = search instanceof Uint8Array ? search : search.subarray()\n\n    offset = Number(offset ?? 0)\n\n    if (isNaN(offset)) {\n      offset = 0\n    }\n\n    if (offset < 0) {\n      offset = this.length + offset\n    }\n\n    if (offset < 0) {\n      offset = 0\n    }\n\n    if (search.length === 0) {\n      return offset > this.length ? this.length : offset\n    }\n\n    // https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string-search_algorithm\n    const M: number = needle.byteLength\n\n    if (M === 0) {\n      throw new TypeError('search must be at least 1 byte long')\n    }\n\n    // radix\n    const radix: number = 256\n    const rightmostPositions: Int32Array = new Int32Array(radix)\n\n    // position of the rightmost occurrence of the byte c in the pattern\n    for (let c: number = 0; c < radix; c++) {\n      // -1 for bytes not in pattern\n      rightmostPositions[c] = -1\n    }\n\n    for (let j = 0; j < M; j++) {\n      // rightmost position for bytes in pattern\n      rightmostPositions[needle[j]] = j\n    }\n\n    // Return offset of first match, -1 if no match\n    const right = rightmostPositions\n    const lastIndex = this.byteLength - needle.byteLength\n    const lastPatIndex = needle.byteLength - 1\n    let skip: number\n\n    for (let i = offset; i <= lastIndex; i += skip) {\n      skip = 0\n\n      for (let j = lastPatIndex; j >= 0; j--) {\n        const char: number = this.get(i + j)\n\n        if (needle[j] !== char) {\n          skip = Math.max(1, j - right[char])\n          break\n        }\n      }\n\n      if (skip === 0) {\n        return i\n      }\n    }\n\n    return -1\n  }\n\n  getInt8 (byteOffset: number): number {\n    const buf = this.subarray(byteOffset, byteOffset + 1)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getInt8(0)\n  }\n\n  setInt8 (byteOffset: number, value: number): void {\n    const buf = allocUnsafe(1)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setInt8(0, value)\n\n    this.write(buf, byteOffset)\n  }\n\n  getInt16 (byteOffset: number, littleEndian?: boolean): number {\n    const buf = this.subarray(byteOffset, byteOffset + 2)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getInt16(0, littleEndian)\n  }\n\n  setInt16 (byteOffset: number, value: number, littleEndian?: boolean): void {\n    const buf = alloc(2)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setInt16(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getInt32 (byteOffset: number, littleEndian?: boolean): number {\n    const buf = this.subarray(byteOffset, byteOffset + 4)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getInt32(0, littleEndian)\n  }\n\n  setInt32 (byteOffset: number, value: number, littleEndian?: boolean): void {\n    const buf = alloc(4)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setInt32(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getBigInt64 (byteOffset: number, littleEndian?: boolean): bigint {\n    const buf = this.subarray(byteOffset, byteOffset + 8)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getBigInt64(0, littleEndian)\n  }\n\n  setBigInt64 (byteOffset: number, value: bigint, littleEndian?: boolean): void {\n    const buf = alloc(8)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setBigInt64(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getUint8 (byteOffset: number): number {\n    const buf = this.subarray(byteOffset, byteOffset + 1)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getUint8(0)\n  }\n\n  setUint8 (byteOffset: number, value: number): void {\n    const buf = allocUnsafe(1)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setUint8(0, value)\n\n    this.write(buf, byteOffset)\n  }\n\n  getUint16 (byteOffset: number, littleEndian?: boolean): number {\n    const buf = this.subarray(byteOffset, byteOffset + 2)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getUint16(0, littleEndian)\n  }\n\n  setUint16 (byteOffset: number, value: number, littleEndian?: boolean): void {\n    const buf = alloc(2)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setUint16(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getUint32 (byteOffset: number, littleEndian?: boolean): number {\n    const buf = this.subarray(byteOffset, byteOffset + 4)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getUint32(0, littleEndian)\n  }\n\n  setUint32 (byteOffset: number, value: number, littleEndian?: boolean): void {\n    const buf = alloc(4)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setUint32(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getBigUint64 (byteOffset: number, littleEndian?: boolean): bigint {\n    const buf = this.subarray(byteOffset, byteOffset + 8)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getBigUint64(0, littleEndian)\n  }\n\n  setBigUint64 (byteOffset: number, value: bigint, littleEndian?: boolean): void {\n    const buf = alloc(8)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setBigUint64(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getFloat32 (byteOffset: number, littleEndian?: boolean): number {\n    const buf = this.subarray(byteOffset, byteOffset + 4)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getFloat32(0, littleEndian)\n  }\n\n  setFloat32 (byteOffset: number, value: number, littleEndian?: boolean): void {\n    const buf = alloc(4)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setFloat32(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getFloat64 (byteOffset: number, littleEndian?: boolean): number {\n    const buf = this.subarray(byteOffset, byteOffset + 8)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getFloat64(0, littleEndian)\n  }\n\n  setFloat64 (byteOffset: number, value: number, littleEndian?: boolean): void {\n    const buf = alloc(8)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setFloat64(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  equals (other: any): other is Uint8ArrayList {\n    if (other == null) {\n      return false\n    }\n\n    if (!(other instanceof Uint8ArrayList)) {\n      return false\n    }\n\n    if (other.bufs.length !== this.bufs.length) {\n      return false\n    }\n\n    for (let i = 0; i < this.bufs.length; i++) {\n      if (!equals(this.bufs[i], other.bufs[i])) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  /**\n   * Create a Uint8ArrayList from a pre-existing list of Uint8Arrays.  Use this\n   * method if you know the total size of all the Uint8Arrays ahead of time.\n   */\n  static fromUint8Arrays (bufs: Uint8Array[], length?: number): Uint8ArrayList {\n    const list = new Uint8ArrayList()\n    list.bufs = bufs\n\n    if (length == null) {\n      length = bufs.reduce((acc, curr) => acc + curr.byteLength, 0)\n    }\n\n    list.length = length\n\n    return list\n  }\n}\n\n/*\nfunction indexOf (needle: Uint8Array, haystack: Uint8Array, offset = 0) {\n  for (let i = offset; i < haystack.byteLength; i++) {\n    for (let j = 0; j < needle.length; j++) {\n      if (haystack[i + j] !== needle[j]) {\n        break\n      }\n\n      if (j === needle.byteLength -1) {\n        return i\n      }\n    }\n\n    if (haystack.byteLength - i < needle.byteLength) {\n      break\n    }\n  }\n\n  return -1\n}\n*/\n", "import { allocUnsafe } from './alloc.js'\nimport { asUint8Array } from './util/as-uint8array.js'\n\n/**\n * Returns a new Uint8Array created by concatenating the passed ArrayLikes\n */\nexport function concat (arrays: Array<ArrayLike<number>>, length?: number): Uint8Array {\n  if (length == null) {\n    length = arrays.reduce((acc, curr) => acc + curr.length, 0)\n  }\n\n  const output = allocUnsafe(length)\n  let offset = 0\n\n  for (const arr of arrays) {\n    output.set(arr, offset)\n    offset += arr.length\n  }\n\n  return asUint8Array(output)\n}\n", "import { asUint8Array } from './util/as-uint8array.js'\n\n/**\n * Returns a `Uint8Array` of the requested size. Referenced memory will\n * be initialized to 0.\n */\nexport function alloc (size: number = 0): Uint8Array {\n  if (globalThis.Buffer?.alloc != null) {\n    return asUint8Array(globalThis.Buffer.alloc(size))\n  }\n\n  return new Uint8Array(size)\n}\n\n/**\n * Where possible returns a Uint8Array of the requested size that references\n * uninitialized memory. Only use if you are certain you will immediately\n * overwrite every value in the returned `Uint8Array`.\n */\nexport function allocUnsafe (size: number = 0): Uint8Array {\n  if (globalThis.Buffer?.allocUnsafe != null) {\n    return asUint8Array(globalThis.Buffer.allocUnsafe(size))\n  }\n\n  return new Uint8Array(size)\n}\n", "\n/**\n * To guarantee Uint8Array semantics, convert nodejs Buffers\n * into vanilla Uint8Arrays\n */\nexport function asUint8Array (buf: Uint8Array): Uint8Array {\n  if (globalThis.Buffer != null) {\n    return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n  }\n\n  return buf\n}\n", "/**\n * Returns true if the two passed Uint8Arrays have the same content\n */\nexport function equals (a: Uint8Array, b: Uint8Array): boolean {\n  if (a === b) {\n    return true\n  }\n\n  if (a.byteLength !== b.byteLength) {\n    return false\n  }\n\n  for (let i = 0; i < a.byteLength; i++) {\n    if (a[i] !== b[i]) {\n      return false\n    }\n  }\n\n  return true\n}\n", "import * as dagPb from '@ipld/dag-pb'\nimport { UnixFS } from 'ipfs-unixfs'\nimport * as raw from 'multiformats/codecs/raw'\nimport { CustomProgressEvent } from 'progress-events'\nimport { persist, type PersistOptions } from '../utils/persist.js'\nimport type { BufferImporter } from '../index.js'\nimport type { CID, Version } from 'multiformats/cid'\nimport type { ProgressOptions, ProgressEvent } from 'progress-events'\n\n/**\n * Passed to the onProgress callback while importing files\n */\nexport interface ImportWriteProgress {\n  /**\n   * How many bytes we have written for this source so far - this may be\n   * bigger than the file size due to the DAG-PB wrappers of each block\n   */\n  bytesWritten: bigint\n\n  /**\n   * The CID of the block that has been written\n   */\n  cid: CID\n\n  /**\n   * The path of the file being imported, if one was specified\n   */\n  path?: string\n}\n\nexport type BufferImportProgressEvents =\n  ProgressEvent<'unixfs:importer:progress:file:write', ImportWriteProgress>\n\nexport interface BufferImporterOptions extends ProgressOptions<BufferImportProgressEvents> {\n  cidVersion: Version\n  rawLeaves: boolean\n  leafType: 'file' | 'raw'\n}\n\nexport function defaultBufferImporter (options: BufferImporterOptions): BufferImporter {\n  return async function * bufferImporter (file, blockstore) {\n    let bytesWritten = 0n\n\n    for await (let block of file.content) {\n      yield async () => { // eslint-disable-line no-loop-func\n        let unixfs\n\n        const opts: PersistOptions = {\n          codec: dagPb,\n          cidVersion: options.cidVersion,\n          onProgress: options.onProgress\n        }\n\n        if (options.rawLeaves) {\n          opts.codec = raw\n          opts.cidVersion = 1\n        } else {\n          unixfs = new UnixFS({\n            type: options.leafType,\n            data: block\n          })\n\n          block = dagPb.encode({\n            Data: unixfs.marshal(),\n            Links: []\n          })\n        }\n\n        const cid = await persist(block, blockstore, opts)\n\n        bytesWritten += BigInt(block.byteLength)\n\n        options.onProgress?.(new CustomProgressEvent<ImportWriteProgress>('unixfs:importer:progress:file:write', {\n          bytesWritten,\n          cid,\n          path: file.path\n        }))\n\n        return {\n          cid,\n          unixfs,\n          size: BigInt(block.length),\n          block\n        }\n      }\n    }\n  }\n}\n", "import { CID } from 'multiformats/cid'\nimport { decodeNode } from './pb-decode.js'\nimport { encodeNode } from './pb-encode.js'\nimport { prepare, validate, createNode, createLink } from './util.js'\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ByteView<T>} ByteView\n */\n\n/**\n * @typedef {import('./interface.js').PBLink} PBLink\n * @typedef {import('./interface.js').PBNode} PBNode\n */\n\nexport const name = 'dag-pb'\nexport const code = 0x70\n\n/**\n * @param {PBNode} node\n * @returns {ByteView<PBNode>}\n */\nexport function encode (node) {\n  validate(node)\n\n  const pbn = {}\n  if (node.Links) {\n    pbn.Links = node.Links.map((l) => {\n      const link = {}\n      if (l.Hash) {\n        link.Hash = l.Hash.bytes // cid -> bytes\n      }\n      if (l.Name !== undefined) {\n        link.Name = l.Name\n      }\n      if (l.Tsize !== undefined) {\n        link.Tsize = l.Tsize\n      }\n      return link\n    })\n  }\n  if (node.Data) {\n    pbn.Data = node.Data\n  }\n\n  return encodeNode(pbn)\n}\n\n/**\n * @param {ByteView<PBNode>} bytes\n * @returns {PBNode}\n */\nexport function decode (bytes) {\n  const pbn = decodeNode(bytes)\n\n  const node = {}\n\n  if (pbn.Data) {\n    node.Data = pbn.Data\n  }\n\n  if (pbn.Links) {\n    node.Links = pbn.Links.map((l) => {\n      const link = {}\n      try {\n        link.Hash = CID.decode(l.Hash)\n      } catch (e) {}\n      if (!link.Hash) {\n        throw new Error('Invalid Hash field found in link, expected CID')\n      }\n      if (l.Name !== undefined) {\n        link.Name = l.Name\n      }\n      if (l.Tsize !== undefined) {\n        link.Tsize = l.Tsize\n      }\n      return link\n    })\n  }\n\n  return node\n}\n\nexport { prepare, validate, createNode, createLink }\n", "import * as varint from './varint.js'\nimport * as Digest from './hashes/digest.js'\nimport { base58btc } from './bases/base58.js'\nimport { base32 } from './bases/base32.js'\nimport { coerce } from './bytes.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * 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\n/**\n * @template {API.Link<unknown, number, number, API.Version>} T\n * @template {string} Prefix\n * @param {T} link\n * @param {API.MultibaseEncoder<Prefix>} [base]\n * @returns {API.ToString<T, Prefix>}\n */\nexport const format = (link, base) => {\n  const { bytes, version } = link\n  switch (version) {\n    case 0:\n      return toStringV0(\n        bytes,\n        baseCache(link),\n        /** @type {API.MultibaseEncoder<\"z\">} */ (base) || base58btc.encoder\n      )\n    default:\n      return toStringV1(\n        bytes,\n        baseCache(link),\n        /** @type {API.MultibaseEncoder<Prefix>} */ (base || base32.encoder)\n      )\n  }\n}\n\n/**\n * @template {API.UnknownLink} Link\n * @param {Link} link\n * @returns {API.LinkJSON<Link>}\n */\nexport const toJSON = (link) => ({\n  '/': format(link)\n})\n\n/**\n * @template {API.UnknownLink} Link\n * @param {API.LinkJSON<Link>} json\n */\nexport const fromJSON = (json) =>\n  CID.parse(json['/'])\n\n/** @type {WeakMap<API.UnknownLink, Map<string, string>>} */\nconst cache = new WeakMap()\n\n/**\n * @param {API.UnknownLink} cid\n * @returns {Map<string, string>}\n */\nconst baseCache = cid => {\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\n/**\n * @template {unknown} [Data=unknown]\n * @template {number} [Format=number]\n * @template {number} [Alg=number]\n * @template {API.Version} [Version=API.Version]\n * @implements {API.Link<Data, Format, Alg, Version>}\n */\n\nexport class CID {\n  /**\n   * @param {Version} version - Version of the CID\n   * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param {API.MultihashDigest<Alg>} multihash - (Multi)hash of the of the content.\n   * @param {Uint8Array} bytes\n   *\n   */\n  constructor (version, code, multihash, bytes) {\n    /** @readonly */\n    this.code = code\n    /** @readonly */\n    this.version = version\n    /** @readonly */\n    this.multihash = multihash\n    /** @readonly */\n    this.bytes = bytes\n\n    // flag to serializers that this is a CID and\n    // should be treated specially\n    /** @readonly */\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 () {\n    return this\n  }\n\n  // ArrayBufferView\n  get byteOffset () {\n    return this.bytes.byteOffset\n  }\n\n  // ArrayBufferView\n  get byteLength () {\n    return this.bytes.byteLength\n  }\n\n  /**\n   * @returns {CID<Data, API.DAG_PB, API.SHA_256, 0>}\n   */\n  toV0 () {\n    switch (this.version) {\n      case 0: {\n        return /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (this)\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 /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (\n          CID.createV0(\n            /** @type {API.MultihashDigest<API.SHA_256>} */ (multihash)\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  /**\n   * @returns {CID<Data, Format, Alg, 1>}\n   */\n  toV1 () {\n    switch (this.version) {\n      case 0: {\n        const { code, digest } = this.multihash\n        const multihash = Digest.create(code, digest)\n        return /** @type {CID<Data, Format, Alg, 1>} */ (\n          CID.createV1(this.code, multihash)\n        )\n      }\n      case 1: {\n        return /** @type {CID<Data, Format, Alg, 1>} */ (this)\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  /**\n   * @param {unknown} other\n   * @returns {other is CID<Data, Format, Alg, Version>}\n   */\n  equals (other) {\n    return CID.equals(this, other)\n  }\n\n  /**\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @param {API.Link<Data, Format, Alg, Version>} self\n   * @param {unknown} other\n   * @returns {other is CID}\n   */\n  static equals (self, other) {\n    const unknown =\n      /** @type {{code?:unknown, version?:unknown, multihash?:unknown}} */ (\n        other\n      )\n    return (\n      unknown &&\n      self.code === unknown.code &&\n      self.version === unknown.version &&\n      Digest.equals(self.multihash, unknown.multihash)\n    )\n  }\n\n  /**\n   * @param {API.MultibaseEncoder<string>} [base]\n   * @returns {string}\n   */\n  toString (base) {\n    return format(this, base)\n  }\n\n  toJSON () {\n    return { '/': format(this) }\n  }\n\n  link () {\n    return this\n  }\n\n  get [Symbol.toStringTag] () {\n    return 'CID'\n  }\n\n  // Legacy\n\n  [Symbol.for('nodejs.util.inspect.custom')] () {\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   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @template {unknown} U\n   * @param {API.Link<Data, Format, Alg, Version>|U} input\n   * @returns {CID<Data, Format, Alg, Version>|null}\n   */\n  static asCID (input) {\n    if (input == null) {\n      return null\n    }\n\n    const value = /** @type {any} */ (input)\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        /** @type {API.MultihashDigest<Alg>} */ (multihash),\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 =\n        /** @type {API.MultihashDigest<Alg>} */\n        (Digest.decode(multihash))\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   *\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @param {Version} version - Version of the CID\n   * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param {API.MultihashDigest<Alg>} digest - (Multi)hash of the of the content.\n   * @returns {CID<Data, Format, Alg, Version>}\n   */\n  static create (version, code, digest) {\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   * @template {unknown} [T=unknown]\n   * @param {API.MultihashDigest<typeof SHA_256_CODE>} digest - Multihash.\n   * @returns {CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0>}\n   */\n  static createV0 (digest) {\n    return CID.create(0, DAG_PB_CODE, digest)\n  }\n\n  /**\n   * Simplified version of `create` for CIDv1.\n   *\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @param {Code} code - Content encoding format code.\n   * @param {API.MultihashDigest<Alg>} digest - Miltihash of the content.\n   * @returns {CID<Data, Code, Alg, 1>}\n   */\n  static createV1 (code, digest) {\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   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @template {API.Version} Ver\n   * @param {API.ByteView<API.Link<Data, Code, Alg, Ver>>} bytes\n   * @returns {CID<Data, Code, Alg, Ver>}\n   */\n  static decode (bytes) {\n    const [cid, remainder] = CID.decodeFirst(bytes)\n    if (remainder.length) {\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   * @template {unknown} T\n   * @template {number} C\n   * @template {number} A\n   * @template {API.Version} V\n   * @param {API.ByteView<API.Link<T, C, A, V>>} bytes\n   * @returns {[CID<T, C, A, V>, Uint8Array]}\n   */\n  static decodeFirst (bytes) {\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(/** @type {API.MultihashDigest<API.SHA_256>} */ (digest))\n        : CID.createV1(specs.codec, digest)\n    return [/** @type {CID<T, C, A, V>} */(cid), 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   * @template {unknown} T\n   * @template {number} C\n   * @template {number} A\n   * @template {API.Version} V\n   * @param {API.ByteView<API.Link<T, C, A, V>>} initialBytes\n   * @returns {{ version:V, codec:C, multihashCode:A, digestSize:number, multihashSize:number, size:number }}\n   */\n  static inspectBytes (initialBytes) {\n    let offset = 0\n    const next = () => {\n      const [i, length] = varint.decode(initialBytes.subarray(offset))\n      offset += length\n      return i\n    }\n\n    let version = /** @type {V} */ (next())\n    let codec = /** @type {C} */ (DAG_PB_CODE)\n    if (/** @type {number} */(version) === 18) {\n      // CIDv0\n      version = /** @type {V} */ (0)\n      offset = 0\n    } else {\n      codec = /** @type {C} */ (next())\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 = /** @type {A} */ (next()) // 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   * @template {string} Prefix\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @template {API.Version} Ver\n   * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n   * @param {API.MultibaseDecoder<Prefix>} [base]\n   * @returns {CID<Data, Code, Alg, Ver>}\n   */\n  static parse (source, base) {\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\n/**\n * @template {string} Prefix\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @template {API.Version} Ver\n * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n * @param {API.MultibaseDecoder<Prefix>} [base]\n * @returns {[Prefix, API.ByteView<API.Link<Data, Code, Alg, Ver>>]}\n */\nconst parseCIDtoBytes = (source, base) => {\n  switch (source[0]) {\n    // CIDv0 is parsed differently\n    case 'Q': {\n      const decoder = base || base58btc\n      return [\n        /** @type {Prefix} */ (base58btc.prefix),\n        decoder.decode(`${base58btc.prefix}${source}`)\n      ]\n    }\n    case base58btc.prefix: {\n      const decoder = base || base58btc\n      return [/** @type {Prefix} */(base58btc.prefix), decoder.decode(source)]\n    }\n    case base32.prefix: {\n      const decoder = base || base32\n      return [/** @type {Prefix} */(base32.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 [/** @type {Prefix} */(source[0]), base.decode(source)]\n    }\n  }\n}\n\n/**\n *\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<'z'>} base\n */\nconst toStringV0 = (bytes, cache, base) => {\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\n/**\n * @template {string} Prefix\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<Prefix>} base\n */\nconst toStringV1 = (bytes, cache, base) => {\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\n/**\n * @param {API.Version} version\n * @param {number} code\n * @param {Uint8Array} multihash\n * @returns {Uint8Array}\n */\nconst encodeCID = (version, code, multihash) => {\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 '../vendor/varint.js'\n\n/**\n * @param {Uint8Array} data\n * @param {number} [offset=0]\n * @returns {[number, number]}\n */\nexport const decode = (data, offset = 0) => {\n  const code = varint.decode(data, offset)\n  return [code, varint.decode.bytes]\n}\n\n/**\n * @param {number} int\n * @param {Uint8Array} target\n * @param {number} [offset=0]\n */\nexport const encodeTo = (int, target, offset = 0) => {\n  varint.encode(int, target, offset)\n  return target\n}\n\n/**\n * @param {number} int\n * @returns {number}\n */\nexport const encodingLength = (int) => {\n  return varint.encodingLength(int)\n}\n", "var encode_1 = encode;\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31);\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  encode.bytes = offset - oldOffset + 1;\n  \n  return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n  , REST$1 = 0x7F;\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      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  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 (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'\n\n/**\n * Creates a multihash digest.\n *\n * @template {number} Code\n * @param {Code} code\n * @param {Uint8Array} digest\n */\nexport const create = (code, digest) => {\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 *\n * @param {Uint8Array} multihash\n * @returns {MultihashDigest}\n */\nexport const decode = (multihash) => {\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\n/**\n * @param {MultihashDigest} a\n * @param {unknown} b\n * @returns {b is MultihashDigest}\n */\nexport const equals = (a, b) => {\n  if (a === b) {\n    return true\n  } else {\n    const data = /** @type {{code?:unknown, size?:unknown, bytes?:unknown}} */(b)\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 * @typedef {import('./interface.js').MultihashDigest} MultihashDigest\n */\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n *\n * @template {number} Code\n * @template {number} Size\n * @class\n * @implements {MultihashDigest}\n */\nexport class Digest {\n  /**\n   * Creates a multihash digest.\n   *\n   * @param {Code} code\n   * @param {Size} size\n   * @param {Uint8Array} digest\n   * @param {Uint8Array} bytes\n   */\n  constructor (code, size, digest, bytes) {\n    this.code = code\n    this.size = size\n    this.digest = digest\n    this.bytes = bytes\n  }\n}\n", "const empty = new Uint8Array(0)\n\n/**\n * @param {Uint8Array} d\n */\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n\n/**\n * @param {string} hex\n */\nconst fromHex = hex => {\n  const hexes = hex.match(/../g)\n  return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\n/**\n * @param {Uint8Array} aa\n * @param {Uint8Array} bb\n */\nconst equals = (aa, bb) => {\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\n/**\n * @param {ArrayBufferView|ArrayBuffer|Uint8Array} o\n * @returns {Uint8Array}\n */\nconst coerce = o => {\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\n/**\n * @param {any} o\n * @returns {o is ArrayBuffer|ArrayBufferView}\n */\nconst isBinary = o =>\n  o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nconst fromString = str => (new TextEncoder()).encode(str)\n\n/**\n * @param {Uint8Array} b\n * @returns {string}\n */\nconst toString = b => (new TextDecoder()).decode(b)\n\nexport { equals, coerce, isBinary, fromHex, toHex, fromString, toString, empty }\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 basex from '../../vendor/base-x.js'\nimport { coerce } from '../bytes.js'\n// Linter can't see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\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 *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.BaseEncoder}\n */\nclass Encoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   */\n  constructor (name, prefix, baseEncode) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n  }\n\n  /**\n   * @param {Uint8Array} bytes\n   * @returns {API.Multibase<Prefix>}\n   */\n  encode (bytes) {\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 * @template {string} Prefix\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 *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.UnibaseDecoder<Prefix>}\n * @implements {API.BaseDecoder}\n */\nclass Decoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseDecode) {\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    /** @private */\n    this.prefixCodePoint = /** @type {number} */ (prefix.codePointAt(0))\n    this.baseDecode = baseDecode\n  }\n\n  /**\n   * @param {string} text\n   */\n  decode (text) {\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  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n}\n\n/**\n * @template {string} Prefix\n * @typedef {Record<Prefix, API.UnibaseDecoder<Prefix>>} Decoders\n */\n\n/**\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.CombobaseDecoder<Prefix>}\n */\nclass ComposedDecoder {\n  /**\n   * @param {Decoders<Prefix>} decoders\n   */\n  constructor (decoders) {\n    this.decoders = decoders\n  }\n\n  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n\n  /**\n   * @param {string} input\n   * @returns {Uint8Array}\n   */\n  decode (input) {\n    const prefix = /** @type {Prefix} */ (input[0])\n    const decoder = this.decoders[prefix]\n    if (decoder) {\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\n/**\n * @template {string} L\n * @template {string} R\n * @param {API.UnibaseDecoder<L>|API.CombobaseDecoder<L>} left\n * @param {API.UnibaseDecoder<R>|API.CombobaseDecoder<R>} right\n * @returns {ComposedDecoder<L|R>}\n */\nexport const or = (left, right) => new ComposedDecoder(/** @type {Decoders<L|R>} */({\n  ...(left.decoders || { [/** @type API.UnibaseDecoder<L> */(left).prefix]: left }),\n  ...(right.decoders || { [/** @type API.UnibaseDecoder<R> */(right).prefix]: right })\n}))\n\n/**\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseCodec<Prefix>}\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.BaseCodec}\n * @implements {API.BaseEncoder}\n * @implements {API.BaseDecoder}\n */\nexport class Codec {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseEncode, baseDecode) {\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  /**\n   * @param {Uint8Array} input\n   */\n  encode (input) {\n    return this.encoder.encode(input)\n  }\n\n  /**\n   * @param {string} input\n   */\n  decode (input) {\n    return this.decoder.decode(input)\n  }\n}\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {(bytes:Uint8Array) => string} options.encode\n * @param {(input:string) => Uint8Array} options.decode\n * @returns {Codec<Base, Prefix>}\n */\nexport const from = ({ name, prefix, encode, decode }) =>\n  new Codec(name, prefix, encode, decode)\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @returns {Codec<Base, Prefix>}\n */\nexport const baseX = ({ prefix, name, alphabet }) => {\n  const { encode, decode } = basex(alphabet, name)\n  return from({\n    prefix,\n    name,\n    encode,\n    /**\n     * @param {string} text\n     */\n    decode: text => coerce(decode(text))\n  })\n}\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @param {string} name\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar, name) => {\n  // Build the character lookup table:\n  /** @type {Record<string, number>} */\n  const codes = {}\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))) {\n    throw new SyntaxError('Unexpected end of data')\n  }\n\n  return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\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) {\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) {\n      out += '='\n    }\n  }\n\n  return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @param {number} options.bitsPerChar\n */\nexport const rfc4648 = ({ name, prefix, bitsPerChar, alphabet }) => {\n  return from({\n    prefix,\n    name,\n    encode (input) {\n      return encode(input, alphabet, bitsPerChar)\n    },\n    decode (input) {\n      return decode(input, alphabet, bitsPerChar, name)\n    }\n  })\n}\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.\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  function encode (source) {\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  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  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", "// this is dummy module overlayed by interface.ts\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", "// this is dummy module overlayed by interface.ts\n", "const textDecoder = new TextDecoder()\n\n/**\n * @typedef {import('./interface.js').RawPBLink} RawPBLink\n */\n\n/**\n * @typedef {import('./interface.js').RawPBNode} RawPBNode\n */\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} offset\n * @returns {[number, number]}\n */\nfunction decodeVarint (bytes, offset) {\n  let v = 0\n\n  for (let shift = 0; ; shift += 7) {\n    /* c8 ignore next 3 */\n    if (shift >= 64) {\n      throw new Error('protobuf: varint overflow')\n    }\n    /* c8 ignore next 3 */\n    if (offset >= bytes.length) {\n      throw new Error('protobuf: unexpected end of data')\n    }\n\n    const b = bytes[offset++]\n    v += shift < 28 ? (b & 0x7f) << shift : (b & 0x7f) * (2 ** shift)\n    if (b < 0x80) {\n      break\n    }\n  }\n  return [v, offset]\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} offset\n * @returns {[Uint8Array, number]}\n */\nfunction decodeBytes (bytes, offset) {\n  let byteLen\n  ;[byteLen, offset] = decodeVarint(bytes, offset)\n  const postOffset = offset + byteLen\n\n  /* c8 ignore next 3 */\n  if (byteLen < 0 || postOffset < 0) {\n    throw new Error('protobuf: invalid length')\n  }\n  /* c8 ignore next 3 */\n  if (postOffset > bytes.length) {\n    throw new Error('protobuf: unexpected end of data')\n  }\n\n  return [bytes.subarray(offset, postOffset), postOffset]\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} index\n * @returns {[number, number, number]}\n */\nfunction decodeKey (bytes, index) {\n  let wire\n  ;[wire, index] = decodeVarint(bytes, index)\n  // [wireType, fieldNum, newIndex]\n  return [wire & 0x7, wire >> 3, index]\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {RawPBLink}\n */\nfunction decodeLink (bytes) {\n  /** @type {RawPBLink} */\n  const link = {}\n  const l = bytes.length\n  let index = 0\n\n  while (index < l) {\n    let wireType, fieldNum\n    ;[wireType, fieldNum, index] = decodeKey(bytes, index)\n\n    if (fieldNum === 1) {\n      if (link.Hash) {\n        throw new Error('protobuf: (PBLink) duplicate Hash section')\n      }\n      if (wireType !== 2) {\n        throw new Error(`protobuf: (PBLink) wrong wireType (${wireType}) for Hash`)\n      }\n      if (link.Name !== undefined) {\n        throw new Error('protobuf: (PBLink) invalid order, found Name before Hash')\n      }\n      if (link.Tsize !== undefined) {\n        throw new Error('protobuf: (PBLink) invalid order, found Tsize before Hash')\n      }\n\n      [link.Hash, index] = decodeBytes(bytes, index)\n    } else if (fieldNum === 2) {\n      if (link.Name !== undefined) {\n        throw new Error('protobuf: (PBLink) duplicate Name section')\n      }\n      if (wireType !== 2) {\n        throw new Error(`protobuf: (PBLink) wrong wireType (${wireType}) for Name`)\n      }\n      if (link.Tsize !== undefined) {\n        throw new Error('protobuf: (PBLink) invalid order, found Tsize before Name')\n      }\n\n      let byts\n      ;[byts, index] = decodeBytes(bytes, index)\n      link.Name = textDecoder.decode(byts)\n    } else if (fieldNum === 3) {\n      if (link.Tsize !== undefined) {\n        throw new Error('protobuf: (PBLink) duplicate Tsize section')\n      }\n      if (wireType !== 0) {\n        throw new Error(`protobuf: (PBLink) wrong wireType (${wireType}) for Tsize`)\n      }\n\n      [link.Tsize, index] = decodeVarint(bytes, index)\n    } else {\n      throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${fieldNum}`)\n    }\n  }\n\n  /* c8 ignore next 3 */\n  if (index > l) {\n    throw new Error('protobuf: (PBLink) unexpected end of data')\n  }\n\n  return link\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {RawPBNode}\n */\nexport function decodeNode (bytes) {\n  const l = bytes.length\n  let index = 0\n  /** @type {RawPBLink[]|void} */\n  let links\n  let linksBeforeData = false\n  /** @type {Uint8Array|void} */\n  let data\n\n  while (index < l) {\n    let wireType, fieldNum\n    ;[wireType, fieldNum, index] = decodeKey(bytes, index)\n\n    if (wireType !== 2) {\n      throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${wireType}`)\n    }\n\n    if (fieldNum === 1) {\n      if (data) {\n        throw new Error('protobuf: (PBNode) duplicate Data section')\n      }\n\n      [data, index] = decodeBytes(bytes, index)\n      if (links) {\n        linksBeforeData = true\n      }\n    } else if (fieldNum === 2) {\n      if (linksBeforeData) { // interleaved Links/Data/Links\n        throw new Error('protobuf: (PBNode) duplicate Links section')\n      } else if (!links) {\n        links = []\n      }\n      let byts\n      ;[byts, index] = decodeBytes(bytes, index)\n      links.push(decodeLink(byts))\n    } else {\n      throw new Error(`protobuf: (PBNode) invalid fieldNumber, expected 1 or 2, got ${fieldNum}`)\n    }\n  }\n\n  /* c8 ignore next 3 */\n  if (index > l) {\n    throw new Error('protobuf: (PBNode) unexpected end of data')\n  }\n\n  /** @type {RawPBNode} */\n  const node = {}\n  if (data) {\n    node.Data = data\n  }\n  node.Links = links || []\n  return node\n}\n", "const textEncoder = new TextEncoder()\nconst maxInt32 = 2 ** 32\nconst maxUInt32 = 2 ** 31\n\n/**\n * @typedef {import('./interface.js').RawPBLink} RawPBLink\n */\n\n/**\n * @typedef {import('./interface.js').RawPBNode} RawPBNode\n */\n\n// the encoders work backward from the end of the bytes array\n\n/**\n * encodeLink() is passed a slice of the parent byte array that ends where this\n * link needs to end, so it packs to the right-most part of the passed `bytes`\n *\n * @param {RawPBLink} link\n * @param {Uint8Array} bytes\n * @returns {number}\n */\nfunction encodeLink (link, bytes) {\n  let i = bytes.length\n\n  if (typeof link.Tsize === 'number') {\n    if (link.Tsize < 0) {\n      throw new Error('Tsize cannot be negative')\n    }\n    if (!Number.isSafeInteger(link.Tsize)) {\n      throw new Error('Tsize too large for encoding')\n    }\n    i = encodeVarint(bytes, i, link.Tsize) - 1\n    bytes[i] = 0x18\n  }\n\n  if (typeof link.Name === 'string') {\n    const nameBytes = textEncoder.encode(link.Name)\n    i -= nameBytes.length\n    bytes.set(nameBytes, i)\n    i = encodeVarint(bytes, i, nameBytes.length) - 1\n    bytes[i] = 0x12\n  }\n\n  if (link.Hash) {\n    i -= link.Hash.length\n    bytes.set(link.Hash, i)\n    i = encodeVarint(bytes, i, link.Hash.length) - 1\n    bytes[i] = 0xa\n  }\n\n  return bytes.length - i\n}\n\n/**\n * Encodes a PBNode into a new byte array of precisely the correct size\n *\n * @param {RawPBNode} node\n * @returns {Uint8Array}\n */\nexport function encodeNode (node) {\n  const size = sizeNode(node)\n  const bytes = new Uint8Array(size)\n  let i = size\n\n  if (node.Data) {\n    i -= node.Data.length\n    bytes.set(node.Data, i)\n    i = encodeVarint(bytes, i, node.Data.length) - 1\n    bytes[i] = 0xa\n  }\n\n  if (node.Links) {\n    for (let index = node.Links.length - 1; index >= 0; index--) {\n      const size = encodeLink(node.Links[index], bytes.subarray(0, i))\n      i -= size\n      i = encodeVarint(bytes, i, size) - 1\n      bytes[i] = 0x12\n    }\n  }\n\n  return bytes\n}\n\n/**\n * work out exactly how many bytes this link takes up\n *\n * @param {RawPBLink} link\n * @returns\n */\nfunction sizeLink (link) {\n  let n = 0\n\n  if (link.Hash) {\n    const l = link.Hash.length\n    n += 1 + l + sov(l)\n  }\n\n  if (typeof link.Name === 'string') {\n    const l = textEncoder.encode(link.Name).length\n    n += 1 + l + sov(l)\n  }\n\n  if (typeof link.Tsize === 'number') {\n    n += 1 + sov(link.Tsize)\n  }\n\n  return n\n}\n\n/**\n * Work out exactly how many bytes this node takes up\n *\n * @param {RawPBNode} node\n * @returns {number}\n */\nfunction sizeNode (node) {\n  let n = 0\n\n  if (node.Data) {\n    const l = node.Data.length\n    n += 1 + l + sov(l)\n  }\n\n  if (node.Links) {\n    for (const link of node.Links) {\n      const l = sizeLink(link)\n      n += 1 + l + sov(l)\n    }\n  }\n\n  return n\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} offset\n * @param {number} v\n * @returns {number}\n */\nfunction encodeVarint (bytes, offset, v) {\n  offset -= sov(v)\n  const base = offset\n\n  while (v >= maxUInt32) {\n    bytes[offset++] = (v & 0x7f) | 0x80\n    v /= 128\n  }\n\n  while (v >= 128) {\n    bytes[offset++] = (v & 0x7f) | 0x80\n    v >>>= 7\n  }\n\n  bytes[offset] = v\n\n  return base\n}\n\n/**\n * size of varint\n *\n * @param {number} x\n * @returns {number}\n */\nfunction sov (x) {\n  if (x % 2 === 0) {\n    x++\n  }\n  return Math.floor((len64(x) + 6) / 7)\n}\n\n/**\n * golang math/bits, how many bits does it take to represent this integer?\n *\n * @param {number} x\n * @returns {number}\n */\nfunction len64 (x) {\n  let n = 0\n  if (x >= maxInt32) {\n    x = Math.floor(x / maxInt32)\n    n = 32\n  }\n  if (x >= (1 << 16)) {\n    x >>>= 16\n    n += 16\n  }\n  if (x >= (1 << 8)) {\n    x >>>= 8\n    n += 8\n  }\n  return n + len8tab[x]\n}\n\n// golang math/bits\nconst len8tab = [\n  0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8\n]\n", "import { CID } from 'multiformats/cid'\n\n/**\n * @typedef {import('./interface.js').PBLink} PBLink\n * @typedef {import('./interface.js').PBNode} PBNode\n */\n\nconst pbNodeProperties = ['Data', 'Links']\nconst pbLinkProperties = ['Hash', 'Name', 'Tsize']\n\nconst textEncoder = new TextEncoder()\n\n/**\n * @param {PBLink} a\n * @param {PBLink} b\n * @returns {number}\n */\nfunction linkComparator (a, b) {\n  if (a === b) {\n    return 0\n  }\n\n  const abuf = a.Name ? textEncoder.encode(a.Name) : []\n  const bbuf = b.Name ? textEncoder.encode(b.Name) : []\n\n  let x = abuf.length\n  let y = bbuf.length\n\n  for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (abuf[i] !== bbuf[i]) {\n      x = abuf[i]\n      y = bbuf[i]\n      break\n    }\n  }\n\n  return x < y ? -1 : y < x ? 1 : 0\n}\n\n/**\n * @param {any} node\n * @param {string[]} properties\n * @returns {boolean}\n */\nfunction hasOnlyProperties (node, properties) {\n  return !Object.keys(node).some((p) => !properties.includes(p))\n}\n\n/**\n * Converts a CID, or a PBLink-like object to a PBLink\n *\n * @param {any} link\n * @returns {PBLink}\n */\nfunction asLink (link) {\n  if (typeof link.asCID === 'object') {\n    const Hash = CID.asCID(link)\n    if (!Hash) {\n      throw new TypeError('Invalid DAG-PB form')\n    }\n    return { Hash }\n  }\n\n  if (typeof link !== 'object' || Array.isArray(link)) {\n    throw new TypeError('Invalid DAG-PB form')\n  }\n\n  const pbl = {}\n\n  if (link.Hash) {\n    let cid = CID.asCID(link.Hash)\n    try {\n      if (!cid) {\n        if (typeof link.Hash === 'string') {\n          cid = CID.parse(link.Hash)\n        } else if (link.Hash instanceof Uint8Array) {\n          cid = CID.decode(link.Hash)\n        }\n      }\n    } catch (/** @type {any} */ e) {\n      throw new TypeError(`Invalid DAG-PB form: ${e.message}`)\n    }\n\n    if (cid) {\n      pbl.Hash = cid\n    }\n  }\n\n  if (!pbl.Hash) {\n    throw new TypeError('Invalid DAG-PB form')\n  }\n\n  if (typeof link.Name === 'string') {\n    pbl.Name = link.Name\n  }\n\n  if (typeof link.Tsize === 'number') {\n    pbl.Tsize = link.Tsize\n  }\n\n  return pbl\n}\n\n/**\n * @param {any} node\n * @returns {PBNode}\n */\nexport function prepare (node) {\n  if (node instanceof Uint8Array || typeof node === 'string') {\n    node = { Data: node }\n  }\n\n  if (typeof node !== 'object' || Array.isArray(node)) {\n    throw new TypeError('Invalid DAG-PB form')\n  }\n\n  /** @type {PBNode} */\n  const pbn = {}\n\n  if (node.Data !== undefined) {\n    if (typeof node.Data === 'string') {\n      pbn.Data = textEncoder.encode(node.Data)\n    } else if (node.Data instanceof Uint8Array) {\n      pbn.Data = node.Data\n    } else {\n      throw new TypeError('Invalid DAG-PB form')\n    }\n  }\n\n  if (node.Links !== undefined) {\n    if (Array.isArray(node.Links)) {\n      pbn.Links = node.Links.map(asLink)\n      pbn.Links.sort(linkComparator)\n    } else {\n      throw new TypeError('Invalid DAG-PB form')\n    }\n  } else {\n    pbn.Links = []\n  }\n\n  return pbn\n}\n\n/**\n * @param {PBNode} node\n */\nexport function validate (node) {\n  /*\n  type PBLink struct {\n    Hash optional Link\n    Name optional String\n    Tsize optional Int\n  }\n\n  type PBNode struct {\n    Links [PBLink]\n    Data optional Bytes\n  }\n  */\n  // @ts-ignore private property for TS\n  if (!node || typeof node !== 'object' || Array.isArray(node) || node instanceof Uint8Array || (node['/'] && node['/'] === node.bytes)) {\n    throw new TypeError('Invalid DAG-PB form')\n  }\n\n  if (!hasOnlyProperties(node, pbNodeProperties)) {\n    throw new TypeError('Invalid DAG-PB form (extraneous properties)')\n  }\n\n  if (node.Data !== undefined && !(node.Data instanceof Uint8Array)) {\n    throw new TypeError('Invalid DAG-PB form (Data must be bytes)')\n  }\n\n  if (!Array.isArray(node.Links)) {\n    throw new TypeError('Invalid DAG-PB form (Links must be a list)')\n  }\n\n  for (let i = 0; i < node.Links.length; i++) {\n    const link = node.Links[i]\n    // @ts-ignore private property for TS\n    if (!link || typeof link !== 'object' || Array.isArray(link) || link instanceof Uint8Array || (link['/'] && link['/'] === link.bytes)) {\n      throw new TypeError('Invalid DAG-PB form (bad link)')\n    }\n\n    if (!hasOnlyProperties(link, pbLinkProperties)) {\n      throw new TypeError('Invalid DAG-PB form (extraneous properties on link)')\n    }\n\n    if (link.Hash === undefined) {\n      throw new TypeError('Invalid DAG-PB form (link must have a Hash)')\n    }\n\n    // @ts-ignore private property for TS\n    if (link.Hash == null || !link.Hash['/'] || link.Hash['/'] !== link.Hash.bytes) {\n      throw new TypeError('Invalid DAG-PB form (link Hash must be a CID)')\n    }\n\n    if (link.Name !== undefined && typeof link.Name !== 'string') {\n      throw new TypeError('Invalid DAG-PB form (link Name must be a string)')\n    }\n\n    if (link.Tsize !== undefined) {\n      if (typeof link.Tsize !== 'number' || link.Tsize % 1 !== 0) {\n        throw new TypeError('Invalid DAG-PB form (link Tsize must be an integer)')\n      }\n      if (link.Tsize < 0) {\n        throw new TypeError('Invalid DAG-PB form (link Tsize cannot be negative)')\n      }\n    }\n\n    if (i > 0 && linkComparator(link, node.Links[i - 1]) === -1) {\n      throw new TypeError('Invalid DAG-PB form (links must be sorted by Name bytes)')\n    }\n  }\n}\n\n/**\n * @param {Uint8Array} data\n * @param {PBLink[]} [links=[]]\n * @returns {PBNode}\n */\nexport function createNode (data, links = []) {\n  return prepare({ Data: data, Links: links })\n}\n\n/**\n * @param {string} name\n * @param {number} size\n * @param {CID} cid\n * @returns {PBLink}\n */\nexport function createLink (name, size, cid) {\n  return asLink({ Hash: cid, Name: name, Tsize: size })\n}\n", "import errcode from 'err-code'\nimport { Data as PBData } from './unixfs.js'\n\nexport interface Mtime {\n  secs: bigint\n  nsecs?: number\n}\n\nexport type MtimeLike = Mtime | { Seconds: number, FractionalNanoseconds?: number } | [number, number] | Date\n\nconst types: Record<string, string> = {\n  Raw: 'raw',\n  Directory: 'directory',\n  File: 'file',\n  Metadata: 'metadata',\n  Symlink: 'symlink',\n  HAMTShard: 'hamt-sharded-directory'\n}\n\nconst dirTypes = [\n  'directory',\n  'hamt-sharded-directory'\n]\n\nconst DEFAULT_FILE_MODE = parseInt('0644', 8)\nconst DEFAULT_DIRECTORY_MODE = parseInt('0755', 8)\n\nexport interface UnixFSOptions {\n  type?: string\n  data?: Uint8Array\n  blockSizes?: bigint[]\n  hashType?: bigint\n  fanout?: bigint\n  mtime?: Mtime\n  mode?: number\n}\n\nclass UnixFS {\n  /**\n   * Decode from protobuf https://github.com/ipfs/specs/blob/master/UNIXFS.md\n   */\n  static unmarshal (marshaled: Uint8Array): UnixFS {\n    const message = PBData.decode(marshaled)\n\n    const data = new UnixFS({\n      type: types[message.Type != null ? message.Type.toString() : 'File'],\n      data: message.Data,\n      blockSizes: message.blocksizes,\n      mode: message.mode,\n      mtime: message.mtime != null\n        ? {\n            secs: message.mtime.Seconds ?? 0n,\n            nsecs: message.mtime.FractionalNanoseconds\n          }\n        : undefined\n    })\n\n    // make sure we honour the original mode\n    data._originalMode = message.mode ?? 0\n\n    return data\n  }\n\n  public type: string\n  public data?: Uint8Array\n  public blockSizes: bigint[]\n  public hashType?: bigint\n  public fanout?: bigint\n  public mtime?: Mtime\n\n  private _mode?: number\n  private _originalMode: number\n\n  constructor (options: UnixFSOptions = {\n    type: 'file'\n  }) {\n    const {\n      type,\n      data,\n      blockSizes,\n      hashType,\n      fanout,\n      mtime,\n      mode\n    } = options\n\n    if (type != null && !Object.values(types).includes(type)) {\n      throw errcode(new Error('Type: ' + type + ' is not valid'), 'ERR_INVALID_TYPE')\n    }\n\n    this.type = type ?? 'file'\n    this.data = data\n    this.hashType = hashType\n    this.fanout = fanout\n    this.blockSizes = blockSizes ?? []\n    this._originalMode = 0\n    this.mode = mode\n    this.mtime = mtime\n  }\n\n  set mode (mode: number | undefined) {\n    if (mode == null) {\n      this._mode = this.isDirectory() ? DEFAULT_DIRECTORY_MODE : DEFAULT_FILE_MODE\n    } else {\n      this._mode = (mode & 0xFFF)\n    }\n  }\n\n  get mode (): number | undefined {\n    return this._mode\n  }\n\n  isDirectory (): boolean {\n    return dirTypes.includes(this.type)\n  }\n\n  addBlockSize (size: bigint): void {\n    this.blockSizes.push(size)\n  }\n\n  removeBlockSize (index: number): void {\n    this.blockSizes.splice(index, 1)\n  }\n\n  /**\n   * Returns `0n` for directories or `data.length + sum(blockSizes)` for everything else\n   */\n  fileSize (): bigint {\n    if (this.isDirectory()) {\n      // dirs don't have file size\n      return 0n\n    }\n\n    let sum = 0n\n    this.blockSizes.forEach((size) => {\n      sum += size\n    })\n\n    if (this.data != null) {\n      sum += BigInt(this.data.length)\n    }\n\n    return sum\n  }\n\n  /**\n   * encode to protobuf Uint8Array\n   */\n  marshal (): Uint8Array {\n    let type\n\n    switch (this.type) {\n      case 'raw': type = PBData.DataType.Raw; break\n      case 'directory': type = PBData.DataType.Directory; break\n      case 'file': type = PBData.DataType.File; break\n      case 'metadata': type = PBData.DataType.Metadata; break\n      case 'symlink': type = PBData.DataType.Symlink; break\n      case 'hamt-sharded-directory': type = PBData.DataType.HAMTShard; break\n      default:\n        throw errcode(new Error(`Type: ${type} is not valid`), 'ERR_INVALID_TYPE')\n    }\n\n    let data = this.data\n\n    if (this.data == null || this.data.length === 0) {\n      data = undefined\n    }\n\n    let mode\n\n    if (this.mode != null) {\n      mode = (this._originalMode & 0xFFFFF000) | (this.mode ?? 0)\n\n      if (mode === DEFAULT_FILE_MODE && !this.isDirectory()) {\n        mode = undefined\n      }\n\n      if (mode === DEFAULT_DIRECTORY_MODE && this.isDirectory()) {\n        mode = undefined\n      }\n    }\n\n    let mtime\n\n    if (this.mtime != null) {\n      mtime = {\n        Seconds: this.mtime.secs,\n        FractionalNanoseconds: this.mtime.nsecs\n      }\n    }\n\n    return PBData.encode({\n      Type: type,\n      Data: data,\n      filesize: this.isDirectory() ? undefined : this.fileSize(),\n      blocksizes: this.blockSizes,\n      hashType: this.hashType,\n      fanout: this.fanout,\n      mode,\n      mtime\n    })\n  }\n}\n\nexport { UnixFS }\n", "/* eslint-disable import/export */\n/* eslint-disable complexity */\n/* eslint-disable @typescript-eslint/no-namespace */\n/* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */\n/* eslint-disable @typescript-eslint/no-empty-interface */\n\nimport { enumeration, encodeMessage, decodeMessage, message } from 'protons-runtime'\nimport type { Codec } from 'protons-runtime'\nimport type { Uint8ArrayList } from 'uint8arraylist'\n\nexport interface Data {\n  Type?: Data.DataType\n  Data?: Uint8Array\n  filesize?: bigint\n  blocksizes: bigint[]\n  hashType?: bigint\n  fanout?: bigint\n  mode?: number\n  mtime?: UnixTime\n}\n\nexport namespace Data {\n  export enum DataType {\n    Raw = 'Raw',\n    Directory = 'Directory',\n    File = 'File',\n    Metadata = 'Metadata',\n    Symlink = 'Symlink',\n    HAMTShard = 'HAMTShard'\n  }\n\n  enum __DataTypeValues {\n    Raw = 0,\n    Directory = 1,\n    File = 2,\n    Metadata = 3,\n    Symlink = 4,\n    HAMTShard = 5\n  }\n\n  export namespace DataType {\n    export const codec = (): Codec<DataType> => {\n      return enumeration<DataType>(__DataTypeValues)\n    }\n  }\n\n  let _codec: Codec<Data>\n\n  export const codec = (): Codec<Data> => {\n    if (_codec == null) {\n      _codec = message<Data>((obj, w, opts = {}) => {\n        if (opts.lengthDelimited !== false) {\n          w.fork()\n        }\n\n        if (obj.Type != null) {\n          w.uint32(8)\n          Data.DataType.codec().encode(obj.Type, w)\n        }\n\n        if (obj.Data != null) {\n          w.uint32(18)\n          w.bytes(obj.Data)\n        }\n\n        if (obj.filesize != null) {\n          w.uint32(24)\n          w.uint64(obj.filesize)\n        }\n\n        if (obj.blocksizes != null) {\n          for (const value of obj.blocksizes) {\n            w.uint32(32)\n            w.uint64(value)\n          }\n        }\n\n        if (obj.hashType != null) {\n          w.uint32(40)\n          w.uint64(obj.hashType)\n        }\n\n        if (obj.fanout != null) {\n          w.uint32(48)\n          w.uint64(obj.fanout)\n        }\n\n        if (obj.mode != null) {\n          w.uint32(56)\n          w.uint32(obj.mode)\n        }\n\n        if (obj.mtime != null) {\n          w.uint32(66)\n          UnixTime.codec().encode(obj.mtime, w)\n        }\n\n        if (opts.lengthDelimited !== false) {\n          w.ldelim()\n        }\n      }, (reader, length) => {\n        const obj: any = {\n          blocksizes: []\n        }\n\n        const end = length == null ? reader.len : reader.pos + length\n\n        while (reader.pos < end) {\n          const tag = reader.uint32()\n\n          switch (tag >>> 3) {\n            case 1:\n              obj.Type = Data.DataType.codec().decode(reader)\n              break\n            case 2:\n              obj.Data = reader.bytes()\n              break\n            case 3:\n              obj.filesize = reader.uint64()\n              break\n            case 4:\n              obj.blocksizes.push(reader.uint64())\n              break\n            case 5:\n              obj.hashType = reader.uint64()\n              break\n            case 6:\n              obj.fanout = reader.uint64()\n              break\n            case 7:\n              obj.mode = reader.uint32()\n              break\n            case 8:\n              obj.mtime = UnixTime.codec().decode(reader, reader.uint32())\n              break\n            default:\n              reader.skipType(tag & 7)\n              break\n          }\n        }\n\n        return obj\n      })\n    }\n\n    return _codec\n  }\n\n  export const encode = (obj: Partial<Data>): Uint8Array => {\n    return encodeMessage(obj, Data.codec())\n  }\n\n  export const decode = (buf: Uint8Array | Uint8ArrayList): Data => {\n    return decodeMessage(buf, Data.codec())\n  }\n}\n\nexport interface UnixTime {\n  Seconds?: bigint\n  FractionalNanoseconds?: number\n}\n\nexport namespace UnixTime {\n  let _codec: Codec<UnixTime>\n\n  export const codec = (): Codec<UnixTime> => {\n    if (_codec == null) {\n      _codec = message<UnixTime>((obj, w, opts = {}) => {\n        if (opts.lengthDelimited !== false) {\n          w.fork()\n        }\n\n        if (obj.Seconds != null) {\n          w.uint32(8)\n          w.int64(obj.Seconds)\n        }\n\n        if (obj.FractionalNanoseconds != null) {\n          w.uint32(21)\n          w.fixed32(obj.FractionalNanoseconds)\n        }\n\n        if (opts.lengthDelimited !== false) {\n          w.ldelim()\n        }\n      }, (reader, length) => {\n        const obj: any = {}\n\n        const end = length == null ? reader.len : reader.pos + length\n\n        while (reader.pos < end) {\n          const tag = reader.uint32()\n\n          switch (tag >>> 3) {\n            case 1:\n              obj.Seconds = reader.int64()\n              break\n            case 2:\n              obj.FractionalNanoseconds = reader.fixed32()\n              break\n            default:\n              reader.skipType(tag & 7)\n              break\n          }\n        }\n\n        return obj\n      })\n    }\n\n    return _codec\n  }\n\n  export const encode = (obj: Partial<UnixTime>): Uint8Array => {\n    return encodeMessage(obj, UnixTime.codec())\n  }\n\n  export const decode = (buf: Uint8Array | Uint8ArrayList): UnixTime => {\n    return decodeMessage(buf, UnixTime.codec())\n  }\n}\n\nexport interface Metadata {\n  MimeType?: string\n}\n\nexport namespace Metadata {\n  let _codec: Codec<Metadata>\n\n  export const codec = (): Codec<Metadata> => {\n    if (_codec == null) {\n      _codec = message<Metadata>((obj, w, opts = {}) => {\n        if (opts.lengthDelimited !== false) {\n          w.fork()\n        }\n\n        if (obj.MimeType != null) {\n          w.uint32(10)\n          w.string(obj.MimeType)\n        }\n\n        if (opts.lengthDelimited !== false) {\n          w.ldelim()\n        }\n      }, (reader, length) => {\n        const obj: any = {}\n\n        const end = length == null ? reader.len : reader.pos + length\n\n        while (reader.pos < end) {\n          const tag = reader.uint32()\n\n          switch (tag >>> 3) {\n            case 1:\n              obj.MimeType = reader.string()\n              break\n            default:\n              reader.skipType(tag & 7)\n              break\n          }\n        }\n\n        return obj\n      })\n    }\n\n    return _codec\n  }\n\n  export const encode = (obj: Partial<Metadata>): Uint8Array => {\n    return encodeMessage(obj, Metadata.codec())\n  }\n\n  export const decode = (buf: Uint8Array | Uint8ArrayList): Metadata => {\n    return decodeMessage(buf, Metadata.codec())\n  }\n}\n", "import type { Codec } from './codec.js'\n\nexport interface FieldDef {\n  name: string\n  codec: Codec<any>\n  optional?: true\n  repeats?: true\n  packed?: true\n}\n\nexport {\n  decodeMessage\n} from './decode.js'\n\nexport {\n  encodeMessage\n} from './encode.js'\n\nexport { enumeration } from './codecs/enum.js'\nexport { message } from './codecs/message.js'\nexport { reader, writer } from './utils.js'\nexport type { Codec, EncodeOptions } from './codec.js'\n\nexport interface Writer {\n  /**\n   * Current length\n   */\n  len: number\n\n  /**\n   * Writes an unsigned 32 bit value as a varint\n   */\n  uint32: (value: number) => Writer\n\n  /**\n   * Writes a signed 32 bit value as a varint`\n   */\n  int32: (value: number) => Writer\n\n  /**\n   * Writes a 32 bit value as a varint, zig-zag encoded\n   */\n  sint32: (value: number) => Writer\n\n  /**\n   * Writes an unsigned 64 bit value as a varint\n   */\n  uint64: (value: bigint) => Writer\n\n  /**\n   * Writes a signed 64 bit value as a varint\n   */\n  int64: (value: bigint) => Writer\n\n  /**\n   * Writes a signed 64 bit value as a varint, zig-zag encoded\n   */\n  sint64: (value: bigint) => Writer\n\n  /**\n   * Writes a boolish value as a varint\n   */\n  bool: (value: boolean) => Writer\n\n  /**\n   * Writes an unsigned 32 bit value as fixed 32 bits\n   */\n  fixed32: (value: number) => Writer\n\n  /**\n   * Writes a signed 32 bit value as fixed 32 bits\n   */\n  sfixed32: (value: number) => Writer\n\n  /**\n   * Writes an unsigned 64 bit value as fixed 64 bits\n   */\n  fixed64: (value: bigint) => Writer\n\n  /**\n   * Writes a signed 64 bit value as fixed 64 bits\n   */\n  sfixed64: (value: bigint) => Writer\n\n  /**\n   * Writes a float (32 bit)\n   */\n  float: (value: number) => Writer\n\n  /**\n   * Writes a double (64 bit float)\n   */\n  double: (value: number) => Writer\n\n  /**\n   * Writes a sequence of bytes\n   */\n  bytes: (value: Uint8Array) => Writer\n\n  /**\n   * Writes a string\n   */\n  string: (value: string) => Writer\n\n  /**\n   * Forks this writer's state by pushing it to a stack.\n   * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n   */\n  fork: () => Writer\n\n  /**\n   * Resets this instance to the last state.\n   */\n  reset: () => Writer\n\n  /**\n   * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n   */\n  ldelim: () => Writer\n\n  /**\n   * Finishes the write operation\n   */\n  finish: () => Uint8Array\n}\n\nexport interface Reader {\n  /**\n   * Read buffer\n   */\n  buf: Uint8Array\n\n  /**\n   * Read buffer position\n   */\n  pos: number\n\n  /**\n   * Read buffer length\n   */\n  len: number\n\n  /**\n   * Reads a varint as an unsigned 32 bit value\n   */\n  uint32: () => number\n\n  /**\n   * Reads a varint as a signed 32 bit value\n   */\n  int32: () => number\n\n  /**\n   * Reads a zig-zag encoded varint as a signed 32 bit value\n   */\n  sint32: () => number\n\n  /**\n   * Reads a varint as a boolean\n   */\n  bool: () => boolean\n\n  /**\n   * Reads fixed 32 bits as an unsigned 32 bit integer\n   */\n  fixed32: () => number\n\n  /**\n   * Reads fixed 32 bits as a signed 32 bit integer\n   */\n  sfixed32: () => number\n\n  /**\n   * Reads a float (32 bit) as a number\n   */\n  float: () => number\n\n  /**\n   * Reads a double (64 bit float) as a number\n   */\n  double: () => number\n\n  /**\n   * Reads a sequence of bytes preceded by its length as a varint\n   */\n  bytes: () => Uint8Array\n\n  /**\n   * Reads a string preceded by its byte length as a varint\n   */\n  string: () => string\n\n  /**\n   * Skips the specified number of bytes if specified, otherwise skips a varints`\n   */\n  skip: (length?: number) => void\n\n  /**\n   * Skips the next element of the specified wire type\n   */\n  skipType: (wireType: number) => void\n\n  /**\n   * Reads a varint as a signed 64 bit value\n   */\n  int64: () => bigint\n\n  /**\n   * Reads a varint as an unsigned 64 bit value\n   */\n  uint64: () => bigint\n\n  /**\n   * Reads a zig-zag encoded varint as a signed 64 bit value\n   */\n  sint64: () => bigint\n\n  /**\n   * Reads fixed 64 bits\n   */\n  fixed64: () => bigint\n\n  /**\n   * Reads zig-zag encoded fixed 64 bits\n   */\n  sfixed64: () => bigint\n}\n", "import type { Uint8ArrayList } from 'uint8arraylist'\n\nimport type { Codec } from './codec.js'\nimport { reader } from './utils.js'\n\nexport function decodeMessage <T> (buf: Uint8Array | Uint8ArrayList, codec: Codec<T>): T {\n  const r = reader(buf instanceof Uint8Array ? buf : buf.subarray())\n\n  return codec.decode(r)\n}\n", "// @ts-expect-error no types\nimport ReaderClass from 'protobufjs/src/reader.js'\n// @ts-expect-error no types\nimport ReaderBufferClass from 'protobufjs/src/reader_buffer.js'\n// @ts-expect-error no types\nimport util from 'protobufjs/src/util/minimal.js'\n// @ts-expect-error no types\nimport WriterClass from 'protobufjs/src/writer.js'\n// @ts-expect-error no types\nimport WriterBufferClass from 'protobufjs/src/writer_buffer.js'\n\nimport type { Reader, Writer } from './index.js'\n\nfunction configure (): void {\n  util._configure()\n  ReaderClass._configure(ReaderBufferClass)\n  WriterClass._configure(WriterBufferClass)\n}\n\n// Set up buffer utility according to the environment\nconfigure()\n\n// monkey patch the reader to add native bigint support\nconst methods = [\n  'uint64', 'int64', 'sint64', 'fixed64', 'sfixed64'\n]\n\nfunction patchReader (obj: any): any {\n  for (const method of methods) {\n    if (obj[method] == null) {\n      continue\n    }\n\n    const original = obj[method]\n    obj[method] = function (): bigint {\n      return BigInt(original.call(this).toString())\n    }\n  }\n\n  return obj\n}\n\nexport function reader (buf: Uint8Array): Reader {\n  return patchReader(new ReaderClass(buf))\n}\n\nfunction patchWriter (obj: any): any {\n  for (const method of methods) {\n    if (obj[method] == null) {\n      continue\n    }\n\n    const original = obj[method]\n    obj[method] = function (val: bigint) {\n      return original.call(this, val.toString())\n    }\n  }\n\n  return obj\n}\n\nexport function writer (): Writer {\n  return patchWriter(WriterClass.create())\n}\n", "import type { Codec } from './codec.js'\nimport { writer } from './utils.js'\n\nexport function encodeMessage <T> (message: T, codec: Codec<T>): Uint8Array {\n  const w = writer()\n\n  codec.encode(message, w, {\n    lengthDelimited: false\n  })\n\n  return w.finish()\n}\n", "\nimport { createCodec, CODEC_TYPES } from '../codec.js'\nimport type { DecodeFunction, EncodeFunction, Codec } from '../codec.js'\n\nexport function enumeration <T> (v: any): Codec<T> {\n  function findValue (val: string | number): number {\n    // Use the reverse mapping to look up the enum key for the stored value\n    // https://www.typescriptlang.org/docs/handbook/enums.html#reverse-mappings\n    if (v[val.toString()] == null) {\n      throw new Error('Invalid enum value')\n    }\n\n    return v[val]\n  }\n\n  const encode: EncodeFunction<number | string> = function enumEncode (val, writer) {\n    const enumValue = findValue(val)\n\n    writer.int32(enumValue)\n  }\n\n  const decode: DecodeFunction<number | string> = function enumDecode (reader) {\n    const val = reader.int32()\n\n    return findValue(val)\n  }\n\n  // @ts-expect-error yeah yeah\n  return createCodec('enum', CODEC_TYPES.VARINT, encode, decode)\n}\n", "import type { Writer, Reader } from './index.js'\n\n// https://developers.google.com/protocol-buffers/docs/encoding#structure\nexport enum CODEC_TYPES {\n  VARINT = 0,\n  BIT64,\n  LENGTH_DELIMITED,\n  START_GROUP,\n  END_GROUP,\n  BIT32\n}\n\nexport interface EncodeOptions {\n  lengthDelimited?: boolean\n  writeDefaults?: boolean\n}\n\nexport interface EncodeFunction<T> {\n  (value: Partial<T>, writer: Writer, opts?: EncodeOptions): void\n}\n\nexport interface DecodeFunction<T> {\n  (reader: Reader, length?: number): T\n}\n\nexport interface Codec<T> {\n  name: string\n  type: CODEC_TYPES\n  encode: EncodeFunction<T>\n  decode: DecodeFunction<T>\n}\n\nexport function createCodec <T> (name: string, type: CODEC_TYPES, encode: EncodeFunction<T>, decode: DecodeFunction<T>): Codec<T> {\n  return {\n    name,\n    type,\n    encode,\n    decode\n  }\n}\n", "import { createCodec, CODEC_TYPES, EncodeOptions } from '../codec.js'\nimport type { Codec } from '../codec.js'\nimport type { Reader, Writer } from '../index.js'\n\nexport interface Factory<A, T> {\n  new (obj: A): T\n}\n\nexport function message <T> (encode: (obj: Partial<T>, writer: Writer, opts?: EncodeOptions) => void, decode: (reader: Reader, length?: number) => T): Codec<T> {\n  return createCodec('message', CODEC_TYPES.LENGTH_DELIMITED, encode, decode)\n}\n", "// @ts-check\n\nimport { coerce } from '../bytes.js'\n\n/**\n * @template T\n * @typedef {import('./interface.js').ByteView<T>} ByteView\n */\n\nexport const name = 'raw'\nexport const code = 0x55\n\n/**\n * @param {Uint8Array} node\n * @returns {ByteView<Uint8Array>}\n */\nexport const encode = (node) => coerce(node)\n\n/**\n * @param {ByteView<Uint8Array>} data\n * @returns {Uint8Array}\n */\nexport const decode = (data) => coerce(data)\n", "\n/**\n * Progress events are emitted during long running operations\n */\nexport interface ProgressEvent<T extends string = any, D = unknown> {\n  /**\n   * The event type\n   */\n  type: T\n\n  /**\n   * Context-specific event information\n   */\n  detail: D\n}\n\n/**\n * An implementation of the ProgressEvent interface, this is essentially\n * a typed `CustomEvent` with a `type` property that lets us disambiguate\n * events passed to `progress` callbacks.\n */\nexport class CustomProgressEvent<D = unknown, T extends string = any> extends Event implements ProgressEvent<T, D> {\n  // @ts-expect-error type is a property of Event, we just declare it here for use as a type disambiguator\n  public type: T\n  public detail: D\n\n  constructor (type: T, detail?: any) {\n    super(type)\n\n    this.detail = detail\n  }\n}\n\n/**\n * Define an `onProgress` callback that can be invoked with `ProgressEvent`s\n *\n * @example\n *\n * ```typescript\n * type MyOperationProgressEvents =\n *   ProgressEvent<'operation:start'> |\n *   ProgressEvent<'operation:success', Result> |\n *   ProgressEvent<'operation:error', Error>\n *\n * export interface MyOperationOptions extends ProgressOptions<MyOperationProgressEvents> {\n *  // define options here\n * }\n * ```\n */\nexport interface ProgressOptions<Event extends ProgressEvent = any> {\n  onProgress?: (evt: Event) => void\n}\n", "import * as dagPb from '@ipld/dag-pb'\nimport { CID } from 'multiformats/cid'\nimport { sha256 } from 'multiformats/hashes/sha2'\nimport type { WritableStorage } from '../index.js'\nimport type { Version as CIDVersion } from 'multiformats/cid'\nimport type { BlockCodec } from 'multiformats/codecs/interface'\nimport type { ProgressOptions } from 'progress-events'\n\nexport interface PersistOptions extends ProgressOptions {\n  codec?: BlockCodec<any, any>\n  cidVersion: CIDVersion\n  signal?: AbortSignal\n}\n\nexport const persist = async (buffer: Uint8Array, blockstore: WritableStorage, options: PersistOptions): Promise<CID> => {\n  if (options.codec == null) {\n    options.codec = dagPb\n  }\n\n  const multihash = await sha256.digest(buffer)\n  const cid = CID.create(options.cidVersion, options.codec.code, multihash)\n\n  await blockstore.put(cid, buffer, options)\n\n  return cid\n}\n", "/* global crypto */\n\nimport { from } from './hasher.js'\n\n/**\n * @param {AlgorithmIdentifier} name\n */\nconst sha = name =>\n  /**\n   * @param {Uint8Array} data\n   */\n  async data => new Uint8Array(await crypto.subtle.digest(name, data))\n\nexport const sha256 = from({\n  name: 'sha2-256',\n  code: 0x12,\n  encode: sha('SHA-256')\n})\n\nexport const sha512 = from({\n  name: 'sha2-512',\n  code: 0x13,\n  encode: sha('SHA-512')\n})\n", "import * as Digest from './digest.js'\n\n/**\n * @template {string} Name\n * @template {number} Code\n * @param {object} options\n * @param {Name} options.name\n * @param {Code} options.code\n * @param {(input: Uint8Array) => Await<Uint8Array>} options.encode\n */\nexport const from = ({ name, code, encode }) => new Hasher(name, code, encode)\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n *\n * @template {string} Name\n * @template {number} Code\n * @class\n * @implements {MultihashHasher<Code>}\n */\nexport class Hasher {\n  /**\n   *\n   * @param {Name} name\n   * @param {Code} code\n   * @param {(input: Uint8Array) => Await<Uint8Array>} encode\n   */\n  constructor (name, code, encode) {\n    this.name = name\n    this.code = code\n    this.encode = encode\n  }\n\n  /**\n   * @param {Uint8Array} input\n   * @returns {Await<Digest.Digest<Code, number>>}\n   */\n  digest (input) {\n    if (input instanceof Uint8Array) {\n      const result = this.encode(input)\n      return result instanceof Uint8Array\n        ? Digest.create(this.code, result)\n        /* c8 ignore next 1 */\n        : result.then(digest => Digest.create(this.code, digest))\n    } else {\n      throw Error('Unknown type, must be binary type')\n      /* c8 ignore next 1 */\n    }\n  }\n}\n\n/**\n * @template {number} Alg\n * @typedef {import('./interface.js').MultihashHasher} MultihashHasher\n */\n\n/**\n * @template T\n * @typedef {Promise<T>|T} Await\n */\n", "import errCode from 'err-code'\nimport { CustomProgressEvent } from 'progress-events'\nimport { dirBuilder, type DirBuilderOptions } from './dir.js'\nimport { fileBuilder, type FileBuilderOptions } from './file.js'\nimport type { ChunkValidator } from './validate-chunks.js'\nimport type { Chunker } from '../chunker/index.js'\nimport type { Directory, File, FileCandidate, ImportCandidate, ImporterProgressEvents, InProgressImportResult, WritableStorage } from '../index.js'\nimport type { ProgressEvent, ProgressOptions } from 'progress-events'\n\n/**\n * Passed to the onProgress callback while importing files\n */\nexport interface ImportReadProgress {\n  /**\n   * How many bytes we have read from this source so far\n   */\n  bytesRead: bigint\n\n  /**\n   * The size of the current chunk\n   */\n  chunkSize: bigint\n\n  /**\n   * The path of the file being imported, if one was specified\n   */\n  path?: string\n}\n\nexport type DagBuilderProgressEvents =\n  ProgressEvent<'unixfs:importer:progress:file:read', ImportReadProgress>\n\nfunction isIterable (thing: any): thing is Iterable<any> {\n  return Symbol.iterator in thing\n}\n\nfunction isAsyncIterable (thing: any): thing is AsyncIterable<any> {\n  return Symbol.asyncIterator in thing\n}\n\nfunction contentAsAsyncIterable (content: Uint8Array | AsyncIterable<Uint8Array> | Iterable<Uint8Array>): AsyncIterable<Uint8Array> {\n  try {\n    if (content instanceof Uint8Array) {\n      return (async function * () {\n        yield content\n      }())\n    } else if (isIterable(content)) {\n      return (async function * () {\n        yield * content\n      }())\n    } else if (isAsyncIterable(content)) {\n      return content\n    }\n  } catch {\n    throw errCode(new Error('Content was invalid'), 'ERR_INVALID_CONTENT')\n  }\n\n  throw errCode(new Error('Content was invalid'), 'ERR_INVALID_CONTENT')\n}\n\nexport interface DagBuilderOptions extends FileBuilderOptions, DirBuilderOptions, ProgressOptions<ImporterProgressEvents> {\n  chunker: Chunker\n  chunkValidator: ChunkValidator\n  wrapWithDirectory: boolean\n}\n\nexport type ImporterSourceStream = AsyncIterable<ImportCandidate> | Iterable<ImportCandidate>\n\nexport interface DAGBuilder {\n  (source: ImporterSourceStream, blockstore: WritableStorage): AsyncIterable<() => Promise<InProgressImportResult>>\n}\n\nexport function defaultDagBuilder (options: DagBuilderOptions): DAGBuilder {\n  return async function * dagBuilder (source, blockstore) {\n    for await (const entry of source) {\n      let originalPath: string | undefined\n\n      if (entry.path != null) {\n        originalPath = entry.path\n        entry.path = entry.path\n          .split('/')\n          .filter(path => path != null && path !== '.')\n          .join('/')\n      }\n\n      if (isFileCandidate(entry)) {\n        const file: File = {\n          path: entry.path,\n          mtime: entry.mtime,\n          mode: entry.mode,\n          content: (async function * () {\n            let bytesRead = 0n\n\n            for await (const chunk of options.chunker(options.chunkValidator(contentAsAsyncIterable(entry.content)))) {\n              const currentChunkSize = BigInt(chunk.byteLength)\n              bytesRead += currentChunkSize\n\n              options.onProgress?.(new CustomProgressEvent<ImportReadProgress>('unixfs:importer:progress:file:read', {\n                bytesRead,\n                chunkSize: currentChunkSize,\n                path: entry.path\n              }))\n\n              yield chunk\n            }\n          })(),\n          originalPath\n        }\n\n        yield async () => fileBuilder(file, blockstore, options)\n      } else if (entry.path != null) {\n        const dir: Directory = {\n          path: entry.path,\n          mtime: entry.mtime,\n          mode: entry.mode,\n          originalPath\n        }\n\n        yield async () => dirBuilder(dir, blockstore, options)\n      } else {\n        throw new Error('Import candidate must have content or path or both')\n      }\n    }\n  }\n}\n\nfunction isFileCandidate (entry: any): entry is FileCandidate {\n  return entry.content != null\n}\n", "import { encode, prepare } from '@ipld/dag-pb'\nimport { UnixFS } from 'ipfs-unixfs'\nimport { persist } from '../utils/persist.js'\nimport type { Directory, InProgressImportResult, WritableStorage } from '../index.js'\nimport type { Version } from 'multiformats/cid'\n\nexport interface DirBuilderOptions {\n  cidVersion: Version\n  signal?: AbortSignal\n}\n\nexport const dirBuilder = async (dir: Directory, blockstore: WritableStorage, options: DirBuilderOptions): Promise<InProgressImportResult> => {\n  const unixfs = new UnixFS({\n    type: 'directory',\n    mtime: dir.mtime,\n    mode: dir.mode\n  })\n\n  const block = encode(prepare({ Data: unixfs.marshal() }))\n  const cid = await persist(block, blockstore, options)\n  const path = dir.path\n\n  return {\n    cid,\n    path,\n    unixfs,\n    size: BigInt(block.length),\n    originalPath: dir.originalPath,\n    block\n  }\n}\n", "import { encode, type PBLink, type PBNode, prepare } from '@ipld/dag-pb'\nimport { UnixFS } from 'ipfs-unixfs'\nimport parallelBatch from 'it-parallel-batch'\nimport * as rawCodec from 'multiformats/codecs/raw'\nimport { CustomProgressEvent } from 'progress-events'\nimport { persist } from '../utils/persist.js'\nimport type { BufferImporter, File, InProgressImportResult, WritableStorage, SingleBlockImportResult, ImporterProgressEvents } from '../index.js'\nimport type { FileLayout, Reducer } from '../layout/index.js'\nimport type { CID, Version } from 'multiformats/cid'\nimport type { ProgressOptions, ProgressEvent } from 'progress-events'\n\ninterface BuildFileBatchOptions {\n  bufferImporter: BufferImporter\n  blockWriteConcurrency: number\n}\n\nasync function * buildFileBatch (file: File, blockstore: WritableStorage, options: BuildFileBatchOptions): AsyncGenerator<InProgressImportResult> {\n  let count = -1\n  let previous: SingleBlockImportResult | undefined\n\n  for await (const entry of parallelBatch(options.bufferImporter(file, blockstore), options.blockWriteConcurrency)) {\n    count++\n\n    if (count === 0) {\n      // cache the first entry if case there aren't any more\n      previous = {\n        ...entry,\n        single: true\n      }\n\n      continue\n    } else if (count === 1 && (previous != null)) {\n      // we have the second block of a multiple block import so yield the first\n      yield {\n        ...previous,\n        block: undefined,\n        single: undefined\n      }\n      previous = undefined\n    }\n\n    // yield the second or later block of a multiple block import\n    yield {\n      ...entry,\n      block: undefined\n    }\n  }\n\n  if (previous != null) {\n    yield previous\n  }\n}\n\nexport interface LayoutLeafProgress {\n  /**\n   * The CID of the leaf being written\n   */\n  cid: CID\n\n  /**\n   * The path of the file being imported, if one was specified\n   */\n  path?: string\n}\n\nexport type ReducerProgressEvents =\n  ProgressEvent<'unixfs:importer:progress:file:layout', LayoutLeafProgress>\n\ninterface ReduceOptions extends ProgressOptions<ImporterProgressEvents> {\n  reduceSingleLeafToSelf: boolean\n  cidVersion: Version\n  signal?: AbortSignal\n}\n\nfunction isSingleBlockImport (result: any): result is SingleBlockImportResult {\n  return result.single === true\n}\n\nconst reduce = (file: File, blockstore: WritableStorage, options: ReduceOptions): Reducer => {\n  const reducer: Reducer = async function (leaves) {\n    if (leaves.length === 1 && isSingleBlockImport(leaves[0]) && options.reduceSingleLeafToSelf) {\n      const leaf = leaves[0]\n      let node: Uint8Array | PBNode = leaf.block\n\n      if (isSingleBlockImport(leaf) && (file.mtime !== undefined || file.mode !== undefined)) {\n        // only one leaf node which is a raw leaf - we have metadata so convert it into a\n        // UnixFS entry otherwise we'll have nowhere to store the metadata\n        leaf.unixfs = new UnixFS({\n          type: 'file',\n          mtime: file.mtime,\n          mode: file.mode,\n          data: leaf.block\n        })\n\n        node = { Data: leaf.unixfs.marshal(), Links: [] }\n\n        leaf.block = encode(prepare(node))\n\n        leaf.cid = await persist(leaf.block, blockstore, {\n          ...options,\n          cidVersion: options.cidVersion\n        })\n        leaf.size = BigInt(leaf.block.length)\n      }\n\n      options.onProgress?.(new CustomProgressEvent<LayoutLeafProgress>('unixfs:importer:progress:file:layout', {\n        cid: leaf.cid,\n        path: leaf.originalPath\n      }))\n\n      return {\n        cid: leaf.cid,\n        path: file.path,\n        unixfs: leaf.unixfs,\n        size: leaf.size,\n        originalPath: leaf.originalPath\n      }\n    }\n\n    // create a parent node and add all the leaves\n    const f = new UnixFS({\n      type: 'file',\n      mtime: file.mtime,\n      mode: file.mode\n    })\n\n    const links: PBLink[] = leaves\n      .filter(leaf => {\n        if (leaf.cid.code === rawCodec.code && leaf.size > 0) {\n          return true\n        }\n\n        if ((leaf.unixfs != null) && (leaf.unixfs.data == null) && leaf.unixfs.fileSize() > 0n) {\n          return true\n        }\n\n        return Boolean(leaf.unixfs?.data?.length)\n      })\n      .map((leaf) => {\n        if (leaf.cid.code === rawCodec.code) {\n          // node is a leaf buffer\n          f.addBlockSize(leaf.size)\n\n          return {\n            Name: '',\n            Tsize: Number(leaf.size),\n            Hash: leaf.cid\n          }\n        }\n\n        if ((leaf.unixfs == null) || (leaf.unixfs.data == null)) {\n          // node is an intermediate node\n          f.addBlockSize(leaf.unixfs?.fileSize() ?? 0n)\n        } else {\n          // node is a unixfs 'file' leaf node\n          f.addBlockSize(BigInt(leaf.unixfs.data.length))\n        }\n\n        return {\n          Name: '',\n          Tsize: Number(leaf.size),\n          Hash: leaf.cid\n        }\n      })\n\n    const node = {\n      Data: f.marshal(),\n      Links: links\n    }\n    const block = encode(prepare(node))\n    const cid = await persist(block, blockstore, options)\n\n    options.onProgress?.(new CustomProgressEvent<LayoutLeafProgress>('unixfs:importer:progress:file:layout', {\n      cid,\n      path: file.originalPath\n    }))\n\n    return {\n      cid,\n      path: file.path,\n      unixfs: f,\n      size: BigInt(block.length + node.Links.reduce((acc, curr) => acc + (curr.Tsize ?? 0), 0)),\n      originalPath: file.originalPath,\n      block\n    }\n  }\n\n  return reducer\n}\n\nexport interface FileBuilderOptions extends BuildFileBatchOptions, ReduceOptions {\n  layout: FileLayout\n}\n\nexport const fileBuilder = async (file: File, block: WritableStorage, options: FileBuilderOptions): Promise<InProgressImportResult> => {\n  return options.layout(buildFileBatch(file, block, options), reduce(file, block, options))\n}\n", "import errCode from 'err-code'\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\n\nexport interface ChunkValidator { (source: AsyncIterable<Uint8Array>): AsyncIterable<Uint8Array> }\n\nexport const defaultChunkValidator = (): ChunkValidator => {\n  return async function * validateChunks (source) {\n    for await (const content of source) {\n      if (content.length === undefined) {\n        throw errCode(new Error('Content was invalid'), 'ERR_INVALID_CONTENT')\n      }\n\n      if (typeof content === 'string' || content instanceof String) {\n        yield uint8ArrayFromString(content.toString())\n      } else if (Array.isArray(content)) {\n        yield Uint8Array.from(content)\n      } else if (content instanceof Uint8Array) {\n        yield content\n      } else {\n        throw errCode(new Error('Content was invalid'), 'ERR_INVALID_CONTENT')\n      }\n    }\n  }\n}\n", "import { asUint8Array } from './util/as-uint8array.js'\nimport bases, { type SupportedEncodings } from './util/bases.js'\n\nexport type { SupportedEncodings }\n\n/**\n * Create a `Uint8Array` from the passed string\n *\n * Supports `utf8`, `utf-8`, `hex`, and any encoding supported by the multiformats module.\n *\n * Also `ascii` which is similar to node's 'binary' encoding.\n */\nexport function fromString (string: string, encoding: SupportedEncodings = 'utf8'): Uint8Array {\n  const base = bases[encoding]\n\n  if (base == null) {\n    throw new Error(`Unsupported encoding \"${encoding}\"`)\n  }\n\n  if ((encoding === 'utf8' || encoding === 'utf-8') && globalThis.Buffer != null && globalThis.Buffer.from != null) {\n    return asUint8Array(globalThis.Buffer.from(string, 'utf-8'))\n  }\n\n  // add multibase prefix\n  return base.decoder.decode(`${base.prefix}${string}`) // eslint-disable-line @typescript-eslint/restrict-template-expressions\n}\n", "import { bases } from 'multiformats/basics'\nimport { allocUnsafe } from '../alloc.js'\nimport type { MultibaseCodec } from 'multiformats'\n\nfunction createCodec (name: string, prefix: string, encode: (buf: Uint8Array) => string, decode: (str: string) => Uint8Array): MultibaseCodec<any> {\n  return {\n    name,\n    prefix,\n    encoder: {\n      name,\n      prefix,\n      encode\n    },\n    decoder: {\n      decode\n    }\n  }\n}\n\nconst string = createCodec('utf8', 'u', (buf) => {\n  const decoder = new TextDecoder('utf8')\n  return 'u' + decoder.decode(buf)\n}, (str) => {\n  const encoder = new TextEncoder()\n  return encoder.encode(str.substring(1))\n})\n\nconst ascii = createCodec('ascii', 'a', (buf) => {\n  let string = 'a'\n\n  for (let i = 0; i < buf.length; i++) {\n    string += String.fromCharCode(buf[i])\n  }\n  return string\n}, (str) => {\n  str = str.substring(1)\n  const buf = allocUnsafe(str.length)\n\n  for (let i = 0; i < str.length; i++) {\n    buf[i] = str.charCodeAt(i)\n  }\n\n  return buf\n})\n\nexport type SupportedEncodings = 'utf8' | 'utf-8' | 'hex' | 'latin1' | 'ascii' | 'binary' | keyof typeof bases\n\nconst BASES: Record<SupportedEncodings, MultibaseCodec<any>> = {\n  utf8: string,\n  'utf-8': string,\n  hex: bases.base16,\n  latin1: ascii,\n  ascii,\n  binary: ascii,\n\n  ...bases\n}\n\nexport default BASES\n", "// @ts-check\n\nimport * as identityBase from './bases/identity.js'\nimport * as base2 from './bases/base2.js'\nimport * as base8 from './bases/base8.js'\nimport * as base10 from './bases/base10.js'\nimport * as base16 from './bases/base16.js'\nimport * as base32 from './bases/base32.js'\nimport * as base36 from './bases/base36.js'\nimport * as base58 from './bases/base58.js'\nimport * as base64 from './bases/base64.js'\nimport * as base256emoji from './bases/base256emoji.js'\nimport * as sha2 from './hashes/sha2.js'\nimport * as identity from './hashes/identity.js'\n\nimport * as raw from './codecs/raw.js'\nimport * as json from './codecs/json.js'\n\nimport { CID, hasher, digest, varint, bytes } from './index.js'\n\nconst bases = { ...identityBase, ...base2, ...base8, ...base10, ...base16, ...base32, ...base36, ...base58, ...base64, ...base256emoji }\nconst hashes = { ...sha2, ...identity }\nconst codecs = { raw, json }\n\nexport { CID, hasher, digest, varint, bytes, hashes, bases, codecs }\n", "// @ts-check\n\nimport { from } from './base.js'\nimport { fromString, toString } from '../bytes.js'\n\nexport const identity = from({\n  prefix: '\\x00',\n  name: 'identity',\n  encode: (buf) => toString(buf),\n  decode: (str) => fromString(str)\n})\n", "// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base2 = rfc4648({\n  prefix: '0',\n  name: 'base2',\n  alphabet: '01',\n  bitsPerChar: 1\n})\n", "// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base8 = rfc4648({\n  prefix: '7',\n  name: 'base8',\n  alphabet: '01234567',\n  bitsPerChar: 3\n})\n", "import { baseX } from './base.js'\n\nexport const base10 = baseX({\n  prefix: '9',\n  name: 'base10',\n  alphabet: '0123456789'\n})\n", "// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base16 = rfc4648({\n  prefix: 'f',\n  name: 'base16',\n  alphabet: '0123456789abcdef',\n  bitsPerChar: 4\n})\n\nexport const base16upper = rfc4648({\n  prefix: 'F',\n  name: 'base16upper',\n  alphabet: '0123456789ABCDEF',\n  bitsPerChar: 4\n})\n", "import { baseX } from './base.js'\n\nexport const base36 = baseX({\n  prefix: 'k',\n  name: 'base36',\n  alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n})\n\nexport const base36upper = baseX({\n  prefix: 'K',\n  name: 'base36upper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n})\n", "// @ts-check\n\nimport { 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", "import { from } from './base.js'\n\nconst alphabet = Array.from('\uD83D\uDE80\uD83E\uDE90\u2604\uD83D\uDEF0\uD83C\uDF0C\uD83C\uDF11\uD83C\uDF12\uD83C\uDF13\uD83C\uDF14\uD83C\uDF15\uD83C\uDF16\uD83C\uDF17\uD83C\uDF18\uD83C\uDF0D\uD83C\uDF0F\uD83C\uDF0E\uD83D\uDC09\u2600\uD83D\uDCBB\uD83D\uDDA5\uD83D\uDCBE\uD83D\uDCBF\uD83D\uDE02\u2764\uD83D\uDE0D\uD83E\uDD23\uD83D\uDE0A\uD83D\uDE4F\uD83D\uDC95\uD83D\uDE2D\uD83D\uDE18\uD83D\uDC4D\uD83D\uDE05\uD83D\uDC4F\uD83D\uDE01\uD83D\uDD25\uD83E\uDD70\uD83D\uDC94\uD83D\uDC96\uD83D\uDC99\uD83D\uDE22\uD83E\uDD14\uD83D\uDE06\uD83D\uDE44\uD83D\uDCAA\uD83D\uDE09\u263A\uD83D\uDC4C\uD83E\uDD17\uD83D\uDC9C\uD83D\uDE14\uD83D\uDE0E\uD83D\uDE07\uD83C\uDF39\uD83E\uDD26\uD83C\uDF89\uD83D\uDC9E\u270C\u2728\uD83E\uDD37\uD83D\uDE31\uD83D\uDE0C\uD83C\uDF38\uD83D\uDE4C\uD83D\uDE0B\uD83D\uDC97\uD83D\uDC9A\uD83D\uDE0F\uD83D\uDC9B\uD83D\uDE42\uD83D\uDC93\uD83E\uDD29\uD83D\uDE04\uD83D\uDE00\uD83D\uDDA4\uD83D\uDE03\uD83D\uDCAF\uD83D\uDE48\uD83D\uDC47\uD83C\uDFB6\uD83D\uDE12\uD83E\uDD2D\u2763\uD83D\uDE1C\uD83D\uDC8B\uD83D\uDC40\uD83D\uDE2A\uD83D\uDE11\uD83D\uDCA5\uD83D\uDE4B\uD83D\uDE1E\uD83D\uDE29\uD83D\uDE21\uD83E\uDD2A\uD83D\uDC4A\uD83E\uDD73\uD83D\uDE25\uD83E\uDD24\uD83D\uDC49\uD83D\uDC83\uD83D\uDE33\u270B\uD83D\uDE1A\uD83D\uDE1D\uD83D\uDE34\uD83C\uDF1F\uD83D\uDE2C\uD83D\uDE43\uD83C\uDF40\uD83C\uDF37\uD83D\uDE3B\uD83D\uDE13\u2B50\u2705\uD83E\uDD7A\uD83C\uDF08\uD83D\uDE08\uD83E\uDD18\uD83D\uDCA6\u2714\uD83D\uDE23\uD83C\uDFC3\uD83D\uDC90\u2639\uD83C\uDF8A\uD83D\uDC98\uD83D\uDE20\u261D\uD83D\uDE15\uD83C\uDF3A\uD83C\uDF82\uD83C\uDF3B\uD83D\uDE10\uD83D\uDD95\uD83D\uDC9D\uD83D\uDE4A\uD83D\uDE39\uD83D\uDDE3\uD83D\uDCAB\uD83D\uDC80\uD83D\uDC51\uD83C\uDFB5\uD83E\uDD1E\uD83D\uDE1B\uD83D\uDD34\uD83D\uDE24\uD83C\uDF3C\uD83D\uDE2B\u26BD\uD83E\uDD19\u2615\uD83C\uDFC6\uD83E\uDD2B\uD83D\uDC48\uD83D\uDE2E\uD83D\uDE46\uD83C\uDF7B\uD83C\uDF43\uD83D\uDC36\uD83D\uDC81\uD83D\uDE32\uD83C\uDF3F\uD83E\uDDE1\uD83C\uDF81\u26A1\uD83C\uDF1E\uD83C\uDF88\u274C\u270A\uD83D\uDC4B\uD83D\uDE30\uD83E\uDD28\uD83D\uDE36\uD83E\uDD1D\uD83D\uDEB6\uD83D\uDCB0\uD83C\uDF53\uD83D\uDCA2\uD83E\uDD1F\uD83D\uDE41\uD83D\uDEA8\uD83D\uDCA8\uD83E\uDD2C\u2708\uD83C\uDF80\uD83C\uDF7A\uD83E\uDD13\uD83D\uDE19\uD83D\uDC9F\uD83C\uDF31\uD83D\uDE16\uD83D\uDC76\uD83E\uDD74\u25B6\u27A1\u2753\uD83D\uDC8E\uD83D\uDCB8\u2B07\uD83D\uDE28\uD83C\uDF1A\uD83E\uDD8B\uD83D\uDE37\uD83D\uDD7A\u26A0\uD83D\uDE45\uD83D\uDE1F\uD83D\uDE35\uD83D\uDC4E\uD83E\uDD32\uD83E\uDD20\uD83E\uDD27\uD83D\uDCCC\uD83D\uDD35\uD83D\uDC85\uD83E\uDDD0\uD83D\uDC3E\uD83C\uDF52\uD83D\uDE17\uD83E\uDD11\uD83C\uDF0A\uD83E\uDD2F\uD83D\uDC37\u260E\uD83D\uDCA7\uD83D\uDE2F\uD83D\uDC86\uD83D\uDC46\uD83C\uDFA4\uD83D\uDE47\uD83C\uDF51\u2744\uD83C\uDF34\uD83D\uDCA3\uD83D\uDC38\uD83D\uDC8C\uD83D\uDCCD\uD83E\uDD40\uD83E\uDD22\uD83D\uDC45\uD83D\uDCA1\uD83D\uDCA9\uD83D\uDC50\uD83D\uDCF8\uD83D\uDC7B\uD83E\uDD10\uD83E\uDD2E\uD83C\uDFBC\uD83E\uDD75\uD83D\uDEA9\uD83C\uDF4E\uD83C\uDF4A\uD83D\uDC7C\uD83D\uDC8D\uD83D\uDCE3\uD83E\uDD42')\nconst alphabetBytesToChars = /** @type {string[]} */ (alphabet.reduce((p, c, i) => { p[i] = c; return p }, /** @type {string[]} */([])))\nconst alphabetCharsToBytes = /** @type {number[]} */ (alphabet.reduce((p, c, i) => { p[/** @type {number} */ (c.codePointAt(0))] = i; return p }, /** @type {number[]} */([])))\n\n/**\n * @param {Uint8Array} data\n * @returns {string}\n */\nfunction encode (data) {\n  return data.reduce((p, c) => {\n    p += alphabetBytesToChars[c]\n    return p\n  }, '')\n}\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nfunction decode (str) {\n  const byts = []\n  for (const char of str) {\n    const byt = alphabetCharsToBytes[/** @type {number} */ (char.codePointAt(0))]\n    if (byt === undefined) {\n      throw new Error(`Non-base256emoji character: ${char}`)\n    }\n    byts.push(byt)\n  }\n  return new Uint8Array(byts)\n}\n\nexport const base256emoji = from({\n  prefix: '\uD83D\uDE80',\n  name: 'base256emoji',\n  encode,\n  decode\n})\n", "import { coerce } from '../bytes.js'\nimport * as Digest from './digest.js'\n\nconst code = 0x0\nconst name = 'identity'\n\n/** @type {(input:Uint8Array) => Uint8Array} */\nconst encode = coerce\n\n/**\n * @param {Uint8Array} input\n * @returns {Digest.Digest<typeof code, number>}\n */\nconst digest = (input) => Digest.create(code, encode(input))\n\nexport const identity = { code, name, encode, digest }\n", "// @ts-check\n\n/**\n * @template T\n * @typedef {import('./interface.js').ByteView<T>} ByteView\n */\n\nconst textEncoder = new TextEncoder()\nconst textDecoder = new TextDecoder()\n\nexport const name = 'json'\nexport const code = 0x0200\n\n/**\n * @template T\n * @param {T} node\n * @returns {ByteView<T>}\n */\nexport const encode = (node) => textEncoder.encode(JSON.stringify(node))\n\n/**\n * @template T\n * @param {ByteView<T>} data\n * @returns {T}\n */\nexport const decode = (data) => JSON.parse(textDecoder.decode(data))\n", "import { CID } from './cid.js'\nimport * as varint from './varint.js'\nimport * as bytes from './bytes.js'\nimport * as hasher from './hashes/hasher.js'\nimport * as digest from './hashes/digest.js'\n// This way TS will also expose all the types from module\nexport * from './interface.js'\n\nexport { CID, hasher, digest, varint, bytes }\n", "// this is dummy module overlayed by interface.ts\n", "import type { InProgressImportResult } from '../index.js'\n\nexport interface Reducer { (leaves: InProgressImportResult[]): Promise<InProgressImportResult> }\nexport interface FileLayout { (source: AsyncIterable<InProgressImportResult> | Iterable<InProgressImportResult>, reducer: Reducer): Promise<InProgressImportResult> }\n\nexport { balanced } from './balanced.js'\nexport { flat } from './flat.js'\nexport { trickle } from './trickle.js'\n", "import batch from 'it-batch'\nimport type { FileLayout } from './index.js'\nimport type { InProgressImportResult } from '../index.js'\n\nconst DEFAULT_MAX_CHILDREN_PER_NODE = 174\n\nexport interface BalancedOptions {\n  maxChildrenPerNode?: number\n}\n\nexport function balanced (options?: BalancedOptions): FileLayout {\n  const maxChildrenPerNode = options?.maxChildrenPerNode ?? DEFAULT_MAX_CHILDREN_PER_NODE\n\n  return async function balancedLayout (source, reduce): Promise<InProgressImportResult> {\n    const roots = []\n\n    for await (const chunked of batch(source, maxChildrenPerNode)) {\n      roots.push(await reduce(chunked))\n    }\n\n    if (roots.length > 1) {\n      return balancedLayout(roots, reduce)\n    }\n\n    return roots[0]\n  }\n}\n", "import all from 'it-all'\nimport type { FileLayout } from './index.js'\nimport type { InProgressImportResult } from '../index.js'\n\nexport function flat (): FileLayout {\n  return async function flatLayout (source, reduce): Promise<InProgressImportResult> {\n    return reduce(await all(source))\n  }\n}\n", "function isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Collects all values from an (async) iterable and returns them as an array\n */\nfunction all <T> (source: Iterable<T>): T[]\nfunction all <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T[]>\nfunction all <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T[]> | T[] {\n  if (isAsyncIterable(source)) {\n    return (async () => {\n      const arr = []\n\n      for await (const entry of source) {\n        arr.push(entry)\n      }\n\n      return arr\n    })()\n  }\n\n  const arr = []\n\n  for (const entry of source) {\n    arr.push(entry)\n  }\n\n  return arr\n}\n\nexport default all\n", "import batch from 'it-batch'\nimport type { InProgressImportResult } from '../index.js'\nimport type { FileLayout, Reducer } from '../layout/index.js'\nimport type { UnixFS } from 'ipfs-unixfs'\nimport type { CID } from 'multiformats/cid'\n\nconst DEFAULT_LAYER_REPEAT = 4\nconst DEFAULT_MAX_CHILDREN_PER_NODE = 174\n\ninterface TrickleDagNode {\n  children: InProgressImportResult[]\n  depth: number\n  maxDepth: number\n  maxChildren: number\n  data?: InProgressImportResult[]\n  parent?: TrickleDagNode\n  cid?: CID\n  size?: number\n  unixfs?: UnixFS\n}\n\nexport interface TrickleOptions {\n  layerRepeat?: number\n  maxChildrenPerNode?: number\n}\n\n/**\n * @see https://github.com/ipfs/specs/pull/57#issuecomment-265205384\n */\nexport function trickle (options?: TrickleOptions): FileLayout {\n  const layerRepeat = options?.layerRepeat ?? DEFAULT_LAYER_REPEAT\n  const maxChildrenPerNode = options?.maxChildrenPerNode ?? DEFAULT_MAX_CHILDREN_PER_NODE\n\n  return async function trickleLayout (source, reduce): Promise<InProgressImportResult> {\n    const root = new Root(layerRepeat)\n    let iteration = 0\n    let maxDepth = 1\n    let subTree: SubTree = root\n\n    for await (const layer of batch(source, maxChildrenPerNode)) {\n      if (subTree.isFull()) {\n        if (subTree !== root) {\n          root.addChild(await subTree.reduce(reduce))\n        }\n\n        if (iteration > 0 && iteration % layerRepeat === 0) {\n          maxDepth++\n        }\n\n        subTree = new SubTree(maxDepth, layerRepeat, iteration)\n\n        iteration++\n      }\n\n      subTree.append(layer)\n    }\n\n    if (subTree != null && subTree !== root) {\n      root.addChild(await subTree.reduce(reduce))\n    }\n\n    return root.reduce(reduce)\n  }\n}\n\nclass SubTree {\n  public root: TrickleDagNode\n  public node: TrickleDagNode\n  public parent: TrickleDagNode\n  public maxDepth: number\n  public layerRepeat: number\n  public currentDepth: number\n  public iteration: number\n\n  constructor (maxDepth: number, layerRepeat: number, iteration: number = 0) {\n    this.maxDepth = maxDepth\n    this.layerRepeat = layerRepeat\n    this.currentDepth = 1\n    this.iteration = iteration\n\n    this.root = this.node = this.parent = {\n      children: [],\n      depth: this.currentDepth,\n      maxDepth,\n      maxChildren: (this.maxDepth - this.currentDepth) * this.layerRepeat\n    }\n  }\n\n  isFull (): boolean {\n    if (this.root.data == null) {\n      return false\n    }\n\n    if (this.currentDepth < this.maxDepth && this.node.maxChildren > 0) {\n      // can descend\n      this._addNextNodeToParent(this.node)\n\n      return false\n    }\n\n    // try to find new node from node.parent\n    const distantRelative = this._findParent(this.node, this.currentDepth)\n\n    if (distantRelative != null) {\n      this._addNextNodeToParent(distantRelative)\n\n      return false\n    }\n\n    return true\n  }\n\n  _addNextNodeToParent (parent: TrickleDagNode): void {\n    this.parent = parent\n\n    // find site for new node\n    const nextNode = {\n      children: [],\n      depth: parent.depth + 1,\n      parent,\n      maxDepth: this.maxDepth,\n      maxChildren: Math.floor(parent.children.length / this.layerRepeat) * this.layerRepeat\n    }\n\n    // @ts-expect-error nextNode is different type\n    parent.children.push(nextNode)\n\n    this.currentDepth = nextNode.depth\n    this.node = nextNode\n  }\n\n  append (layer: InProgressImportResult[]): void {\n    this.node.data = layer\n  }\n\n  async reduce (reduce: Reducer): Promise<InProgressImportResult> {\n    return this._reduce(this.root, reduce)\n  }\n\n  async _reduce (node: TrickleDagNode, reduce: Reducer): Promise<InProgressImportResult> {\n    let children: InProgressImportResult[] = []\n\n    if (node.children.length > 0) {\n      children = await Promise.all(\n        node.children\n          // @ts-expect-error data is not present on type\n          .filter(child => child.data)\n          // @ts-expect-error child is wrong type\n          .map(async child => this._reduce(child, reduce))\n      )\n    }\n\n    return reduce((node.data ?? []).concat(children))\n  }\n\n  _findParent (node: TrickleDagNode, depth: number): TrickleDagNode | undefined {\n    const parent = node.parent\n\n    if (parent == null || parent.depth === 0) {\n      return\n    }\n\n    if (parent.children.length === parent.maxChildren || parent.maxChildren === 0) {\n      // this layer is full, may be able to traverse to a different branch\n      return this._findParent(parent, depth)\n    }\n\n    return parent\n  }\n}\n\nclass Root extends SubTree {\n  constructor (layerRepeat: number) {\n    super(0, layerRepeat)\n\n    this.root.depth = 0\n    this.currentDepth = 1\n  }\n\n  addChild (child: InProgressImportResult): void {\n    this.root.children.push(child)\n  }\n\n  async reduce (reduce: Reducer): Promise<InProgressImportResult> {\n    return reduce((this.root.data ?? []).concat(this.root.children))\n  }\n}\n", "import { DirFlat } from './dir-flat.js'\nimport { Dir } from './dir.js'\nimport { flatToShard } from './flat-to-shard.js'\nimport { toPathComponents } from './utils/to-path-components.js'\nimport type { ImportResult, InProgressImportResult, TreeBuilder, WritableStorage } from './index.js'\nimport type { PersistOptions } from './utils/persist.js'\n\nexport interface AddToTreeOptions extends PersistOptions {\n  shardSplitThresholdBytes: number\n}\n\nasync function addToTree (elem: InProgressImportResult, tree: Dir, options: AddToTreeOptions): Promise<Dir> {\n  const pathElems = toPathComponents(elem.path ?? '')\n  const lastIndex = pathElems.length - 1\n  let parent = tree\n  let currentPath = ''\n\n  for (let i = 0; i < pathElems.length; i++) {\n    const pathElem = pathElems[i]\n\n    currentPath += `${currentPath !== '' ? '/' : ''}${pathElem}`\n\n    const last = (i === lastIndex)\n    parent.dirty = true\n    parent.cid = undefined\n    parent.size = undefined\n\n    if (last) {\n      await parent.put(pathElem, elem)\n      tree = await flatToShard(null, parent, options.shardSplitThresholdBytes, options)\n    } else {\n      let dir = await parent.get(pathElem)\n\n      if ((dir == null) || !(dir instanceof Dir)) {\n        dir = new DirFlat({\n          root: false,\n          dir: true,\n          parent,\n          parentKey: pathElem,\n          path: currentPath,\n          dirty: true,\n          flat: true,\n          mtime: dir?.unixfs?.mtime,\n          mode: dir?.unixfs?.mode\n        }, options)\n      }\n\n      await parent.put(pathElem, dir)\n\n      parent = dir\n    }\n  }\n\n  return tree\n}\n\nasync function * flushAndYield (tree: Dir | InProgressImportResult, blockstore: WritableStorage): AsyncGenerator<ImportResult> {\n  if (!(tree instanceof Dir)) {\n    if (tree.unixfs?.isDirectory() === true) {\n      yield tree\n    }\n\n    return\n  }\n\n  yield * tree.flush(blockstore)\n}\n\nexport interface TreeBuilderOptions extends AddToTreeOptions {\n  wrapWithDirectory: boolean\n}\n\nexport function defaultTreeBuilder (options: TreeBuilderOptions): TreeBuilder {\n  return async function * treeBuilder (source, block) {\n    let tree: Dir = new DirFlat({\n      root: true,\n      dir: true,\n      path: '',\n      dirty: true,\n      flat: true\n    }, options)\n\n    let rootDir: string | undefined\n    let singleRoot = false\n\n    for await (const entry of source) {\n      if (entry == null) {\n        continue\n      }\n\n      // if all paths are from the same root directory, we should\n      // wrap them all in that root directory\n      const dir = `${entry.originalPath ?? ''}`.split('/')[0]\n\n      if (dir != null && dir !== '') {\n        if (rootDir == null) {\n          rootDir = dir\n          singleRoot = true\n        } else if (rootDir !== dir) {\n          singleRoot = false\n        }\n      }\n\n      tree = await addToTree(entry, tree, options)\n\n      if (entry.unixfs == null || !entry.unixfs.isDirectory()) {\n        yield entry\n      }\n    }\n\n    if (options.wrapWithDirectory || (singleRoot && tree.childCount() > 1)) {\n      yield * flushAndYield(tree, block)\n    } else {\n      for await (const unwrapped of tree.eachChildSeries()) {\n        if (unwrapped == null) {\n          continue\n        }\n\n        yield * flushAndYield(unwrapped.child, block)\n      }\n    }\n  }\n}\n", "import { encode, type PBNode, prepare } from '@ipld/dag-pb'\nimport { UnixFS } from 'ipfs-unixfs'\nimport { Dir, CID_V0, CID_V1, type DirProps } from './dir.js'\nimport { persist, type PersistOptions } from './utils/persist.js'\nimport type { ImportResult, InProgressImportResult } from './index.js'\nimport type { Blockstore } from 'interface-blockstore'\nimport type { CID } from 'multiformats/cid'\n\nexport class DirFlat extends Dir {\n  private readonly _children: Map<string, InProgressImportResult | Dir>\n\n  constructor (props: DirProps, options: PersistOptions) {\n    super(props, options)\n\n    this._children = new Map()\n  }\n\n  async put (name: string, value: InProgressImportResult | Dir): Promise<void> {\n    this.cid = undefined\n    this.size = undefined\n    this.nodeSize = undefined\n\n    this._children.set(name, value)\n  }\n\n  async get (name: string): Promise<InProgressImportResult | Dir | undefined> {\n    return Promise.resolve(this._children.get(name))\n  }\n\n  childCount (): number {\n    return this._children.size\n  }\n\n  directChildrenCount (): number {\n    return this.childCount()\n  }\n\n  onlyChild (): InProgressImportResult | Dir {\n    return this._children.values().next().value\n  }\n\n  async * eachChildSeries (): AsyncGenerator<{ key: string, child: InProgressImportResult | Dir }, void, undefined> {\n    for (const [key, child] of this._children.entries()) {\n      yield {\n        key,\n        child\n      }\n    }\n  }\n\n  estimateNodeSize (): number {\n    if (this.nodeSize !== undefined) {\n      return this.nodeSize\n    }\n\n    this.nodeSize = 0\n\n    // estimate size only based on DAGLink name and CID byte lengths\n    // https://github.com/ipfs/go-unixfsnode/blob/37b47f1f917f1b2f54c207682f38886e49896ef9/data/builder/directory.go#L81-L96\n    for (const [name, child] of this._children.entries()) {\n      if (child.size != null && (child.cid != null)) {\n        this.nodeSize += name.length + (this.options.cidVersion === 1 ? CID_V1.bytes.byteLength : CID_V0.bytes.byteLength)\n      }\n    }\n\n    return this.nodeSize\n  }\n\n  async * flush (block: Blockstore): AsyncGenerator<ImportResult> {\n    const links = []\n\n    for (const [name, child] of this._children.entries()) {\n      let result: { size?: bigint | number, cid?: CID } = child\n\n      if (child instanceof Dir) {\n        for await (const entry of child.flush(block)) {\n          result = entry\n\n          yield entry\n        }\n      }\n\n      if (result.size != null && (result.cid != null)) {\n        links.push({\n          Name: name,\n          Tsize: Number(result.size),\n          Hash: result.cid\n        })\n      }\n    }\n\n    const unixfs = new UnixFS({\n      type: 'directory',\n      mtime: this.mtime,\n      mode: this.mode\n    })\n\n    const node: PBNode = { Data: unixfs.marshal(), Links: links }\n    const buffer = encode(prepare(node))\n    const cid = await persist(buffer, block, this.options)\n    const size = buffer.length + node.Links.reduce(\n      /**\n       * @param {number} acc\n       * @param {PBLink} curr\n       */\n      (acc, curr) => acc + (curr.Tsize == null ? 0 : curr.Tsize),\n      0)\n\n    this.cid = cid\n    this.size = size\n\n    yield {\n      cid,\n      unixfs,\n      path: this.path,\n      size: BigInt(size)\n    }\n  }\n}\n", "import { CID } from 'multiformats/cid'\nimport type { WritableStorage, ImportResult, InProgressImportResult } from './index.js'\nimport type { PersistOptions } from './utils/persist.js'\nimport type { Mtime, UnixFS } from 'ipfs-unixfs'\n\nexport interface DirProps {\n  root: boolean\n  dir: boolean\n  path: string\n  dirty: boolean\n  flat: boolean\n  parent?: Dir\n  parentKey?: string\n  unixfs?: UnixFS\n  mode?: number\n  mtime?: Mtime\n}\n\nexport abstract class Dir {\n  public options: PersistOptions\n  public root: boolean\n  public dir: boolean\n  public path: string\n  public dirty: boolean\n  public flat: boolean\n  public parent?: Dir\n  public parentKey?: string\n  public unixfs?: UnixFS\n  public mode?: number\n  public mtime?: Mtime\n  public cid?: CID\n  public size?: number\n  public nodeSize?: number\n\n  constructor (props: DirProps, options: PersistOptions) {\n    this.options = options ?? {}\n\n    this.root = props.root\n    this.dir = props.dir\n    this.path = props.path\n    this.dirty = props.dirty\n    this.flat = props.flat\n    this.parent = props.parent\n    this.parentKey = props.parentKey\n    this.unixfs = props.unixfs\n    this.mode = props.mode\n    this.mtime = props.mtime\n  }\n\n  abstract put (name: string, value: InProgressImportResult | Dir): Promise<void>\n  abstract get (name: string): Promise<InProgressImportResult | Dir | undefined>\n  abstract eachChildSeries (): AsyncIterable<{ key: string, child: InProgressImportResult | Dir }>\n  abstract flush (blockstore: WritableStorage): AsyncGenerator<ImportResult>\n  abstract estimateNodeSize (): number\n  abstract childCount (): number\n}\n\n// we use these to calculate the node size to use as a check for whether a directory\n// should be sharded or not. Since CIDs have a constant length and We're only\n// interested in the data length and not the actual content identifier we can use\n// any old CID instead of having to hash the data which is expensive.\nexport const CID_V0 = CID.parse('QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn')\nexport const CID_V1 = CID.parse('zdj7WbTaiJT1fgatdet9Ei9iDB5hdCxkbVyhyh8YTUnXMiwYi')\n", "import { DirFlat } from './dir-flat.js'\nimport DirSharded from './dir-sharded.js'\nimport type { Dir } from './dir.js'\nimport type { PersistOptions } from './utils/persist.js'\n\nexport async function flatToShard (child: Dir | null, dir: Dir, threshold: number, options: PersistOptions): Promise<DirSharded> {\n  let newDir = dir as DirSharded\n\n  if (dir instanceof DirFlat && dir.estimateNodeSize() > threshold) {\n    newDir = await convertToShard(dir, options)\n  }\n\n  const parent = newDir.parent\n\n  if (parent != null) {\n    if (newDir !== dir) {\n      if (child != null) {\n        child.parent = newDir\n      }\n\n      if (newDir.parentKey == null) {\n        throw new Error('No parent key found')\n      }\n\n      await parent.put(newDir.parentKey, newDir)\n    }\n\n    return flatToShard(newDir, parent, threshold, options)\n  }\n\n  return newDir\n}\n\nasync function convertToShard (oldDir: DirFlat, options: PersistOptions): Promise<DirSharded> {\n  const newDir = new DirSharded({\n    root: oldDir.root,\n    dir: true,\n    parent: oldDir.parent,\n    parentKey: oldDir.parentKey,\n    path: oldDir.path,\n    dirty: oldDir.dirty,\n    flat: false,\n    mtime: oldDir.mtime,\n    mode: oldDir.mode\n  }, options)\n\n  for await (const { key, child } of oldDir.eachChildSeries()) {\n    await newDir.put(key, child)\n  }\n\n  return newDir\n}\n", "import { encode, type PBLink, prepare } from '@ipld/dag-pb'\nimport { murmur3128 } from '@multiformats/murmur3'\nimport { createHAMT, Bucket, type BucketChild } from 'hamt-sharding'\nimport { UnixFS } from 'ipfs-unixfs'\nimport { Dir, CID_V0, CID_V1, type DirProps } from './dir.js'\nimport { persist, type PersistOptions } from './utils/persist.js'\nimport type { ImportResult, InProgressImportResult } from './index.js'\nimport type { Blockstore } from 'interface-blockstore'\n\nasync function hamtHashFn (buf: Uint8Array): Promise<Uint8Array> {\n  return (await murmur3128.encode(buf))\n    // Murmur3 outputs 128 bit but, accidentally, IPFS Go's\n    // implementation only uses the first 64, so we must do the same\n    // for parity..\n    .slice(0, 8)\n    // Invert buffer because that's how Go impl does it\n    .reverse()\n}\n\nconst HAMT_HASH_CODE = BigInt(0x22)\n\nclass DirSharded extends Dir {\n  private readonly _bucket: Bucket<InProgressImportResult | Dir>\n\n  constructor (props: DirProps, options: PersistOptions) {\n    super(props, options)\n\n    this._bucket = createHAMT({\n      hashFn: hamtHashFn,\n      bits: 8\n    })\n  }\n\n  async put (name: string, value: InProgressImportResult | Dir): Promise<void> {\n    this.cid = undefined\n    this.size = undefined\n    this.nodeSize = undefined\n\n    await this._bucket.put(name, value)\n  }\n\n  async get (name: string): Promise<InProgressImportResult | Dir | undefined> {\n    return this._bucket.get(name)\n  }\n\n  childCount (): number {\n    return this._bucket.leafCount()\n  }\n\n  directChildrenCount (): number {\n    return this._bucket.childrenCount()\n  }\n\n  onlyChild (): Bucket<InProgressImportResult | Dir> | BucketChild<InProgressImportResult | Dir> {\n    return this._bucket.onlyChild()\n  }\n\n  async * eachChildSeries (): AsyncGenerator<{ key: string, child: InProgressImportResult | Dir }> {\n    for await (const { key, value } of this._bucket.eachLeafSeries()) {\n      yield {\n        key,\n        child: value\n      }\n    }\n  }\n\n  estimateNodeSize (): number {\n    if (this.nodeSize !== undefined) {\n      return this.nodeSize\n    }\n\n    this.nodeSize = calculateSize(this._bucket, this, this.options)\n\n    return this.nodeSize\n  }\n\n  async * flush (blockstore: Blockstore): AsyncGenerator<ImportResult> {\n    for await (const entry of flush(this._bucket, blockstore, this, this.options)) {\n      yield {\n        ...entry,\n        path: this.path\n      }\n    }\n  }\n}\n\nexport default DirSharded\n\nasync function * flush (bucket: Bucket<Dir | InProgressImportResult>, blockstore: Blockstore, shardRoot: DirSharded | null, options: PersistOptions): AsyncIterable<ImportResult> {\n  const children = bucket._children\n  const links: PBLink[] = []\n  let childrenSize = 0n\n\n  for (let i = 0; i < children.length; i++) {\n    const child = children.get(i)\n\n    if (child == null) {\n      continue\n    }\n\n    const labelPrefix = i.toString(16).toUpperCase().padStart(2, '0')\n\n    if (child instanceof Bucket) {\n      let shard\n\n      for await (const subShard of flush(child, blockstore, null, options)) {\n        shard = subShard\n      }\n\n      if (shard == null) {\n        throw new Error('Could not flush sharded directory, no subshard found')\n      }\n\n      links.push({\n        Name: labelPrefix,\n        Tsize: Number(shard.size),\n        Hash: shard.cid\n      })\n      childrenSize += shard.size\n    } else if (isDir(child.value)) {\n      const dir = child.value\n      let flushedDir: ImportResult | undefined\n\n      for await (const entry of dir.flush(blockstore)) {\n        flushedDir = entry\n\n        yield flushedDir\n      }\n\n      if (flushedDir == null) {\n        throw new Error('Did not flush dir')\n      }\n\n      const label = labelPrefix + child.key\n      links.push({\n        Name: label,\n        Tsize: Number(flushedDir.size),\n        Hash: flushedDir.cid\n      })\n\n      childrenSize += flushedDir.size\n    } else {\n      const value = child.value\n\n      if (value.cid == null) {\n        continue\n      }\n\n      const label = labelPrefix + child.key\n      const size = value.size\n\n      links.push({\n        Name: label,\n        Tsize: Number(size),\n        Hash: value.cid\n      })\n      childrenSize += BigInt(size ?? 0)\n    }\n  }\n\n  // go-ipfs uses little endian, that's why we have to\n  // reverse the bit field before storing it\n  const data = Uint8Array.from(children.bitField().reverse())\n  const dir = new UnixFS({\n    type: 'hamt-sharded-directory',\n    data,\n    fanout: BigInt(bucket.tableSize()),\n    hashType: HAMT_HASH_CODE,\n    mtime: shardRoot?.mtime,\n    mode: shardRoot?.mode\n  })\n\n  const node = {\n    Data: dir.marshal(),\n    Links: links\n  }\n  const buffer = encode(prepare(node))\n  const cid = await persist(buffer, blockstore, options)\n  const size = BigInt(buffer.byteLength) + childrenSize\n\n  yield {\n    cid,\n    unixfs: dir,\n    size\n  }\n}\n\nfunction isDir (obj: any): obj is Dir {\n  return typeof obj.flush === 'function'\n}\n\nfunction calculateSize (bucket: Bucket<any>, shardRoot: DirSharded | null, options: PersistOptions): number {\n  const children = bucket._children\n  const links: PBLink[] = []\n\n  for (let i = 0; i < children.length; i++) {\n    const child = children.get(i)\n\n    if (child == null) {\n      continue\n    }\n\n    const labelPrefix = i.toString(16).toUpperCase().padStart(2, '0')\n\n    if (child instanceof Bucket) {\n      const size = calculateSize(child, null, options)\n\n      links.push({\n        Name: labelPrefix,\n        Tsize: Number(size),\n        Hash: options.cidVersion === 0 ? CID_V0 : CID_V1\n      })\n    } else if (typeof child.value.flush === 'function') {\n      const dir = child.value\n      const size = dir.nodeSize()\n\n      links.push({\n        Name: labelPrefix + child.key,\n        Tsize: Number(size),\n        Hash: options.cidVersion === 0 ? CID_V0 : CID_V1\n      })\n    } else {\n      const value = child.value\n\n      if (value.cid == null) {\n        continue\n      }\n\n      const label = labelPrefix + child.key\n      const size = value.size\n\n      links.push({\n        Name: label,\n        Tsize: Number(size),\n        Hash: value.cid\n      })\n    }\n  }\n\n  // go-ipfs uses little endian, that's why we have to\n  // reverse the bit field before storing it\n  const data = Uint8Array.from(children.bitField().reverse())\n  const dir = new UnixFS({\n    type: 'hamt-sharded-directory',\n    data,\n    fanout: BigInt(bucket.tableSize()),\n    hashType: HAMT_HASH_CODE,\n    mtime: shardRoot?.mtime,\n    mode: shardRoot?.mode\n  })\n\n  const buffer = encode(prepare({\n    Data: dir.marshal(),\n    Links: links\n  }))\n\n  return buffer.length\n}\n", "import { bytes } from 'multiformats'\nimport { from } from 'multiformats/hashes/hasher'\n// @ts-expect-error no types\nimport mur from 'murmurhash3js-revisited'\n\n/**\n * @param {number} number\n * @returns {Uint8Array}\n */\nfunction fromNumberTo32BitBuf (number) {\n  const bytes = new Array(4)\n  for (let i = 0; i < 4; i++) {\n    bytes[i] = number & 0xff\n    number = number >> 8\n  }\n  return new Uint8Array(bytes)\n}\n\nexport const murmur332 = from({\n  name: 'murmur3-32',\n  code: 0x23,\n  encode: (input) => fromNumberTo32BitBuf(mur.x86.hash32(input))\n})\n\nexport const murmur3128 = from({\n  name: 'murmur3-128',\n  code: 0x22,\n  encode: (input) => bytes.fromHex(mur.x64.hash128(input))\n})\n\n// A special-use 0x22 that truncates 64 bits, specifically for use in the UnixFS HAMT\nexport const murmur364 = from({\n  name: 'murmur3-x64-64',\n  code: 0x22,\n  encode: (input) => bytes.fromHex(mur.x64.hash128(input)).subarray(0, 8)\n})\n", "import { CID } from './cid.js'\nimport * as varint from './varint.js'\nimport * as bytes from './bytes.js'\nimport * as hasher from './hashes/hasher.js'\nimport * as digest from './hashes/digest.js'\n// This way TS will also expose all the types from module\nexport * from './interface.js'\n\nexport { CID, hasher, digest, varint, bytes }\n", "import * as varint from './varint.js'\nimport * as Digest from './hashes/digest.js'\nimport { base58btc } from './bases/base58.js'\nimport { base32 } from './bases/base32.js'\nimport { coerce } from './bytes.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * 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\n/**\n * @template {API.Link<unknown, number, number, API.Version>} T\n * @template {string} Prefix\n * @param {T} link\n * @param {API.MultibaseEncoder<Prefix>} [base]\n * @returns {API.ToString<T, Prefix>}\n */\nexport const format = (link, base) => {\n  const { bytes, version } = link\n  switch (version) {\n    case 0:\n      return toStringV0(\n        bytes,\n        baseCache(link),\n        /** @type {API.MultibaseEncoder<\"z\">} */ (base) || base58btc.encoder\n      )\n    default:\n      return toStringV1(\n        bytes,\n        baseCache(link),\n        /** @type {API.MultibaseEncoder<Prefix>} */ (base || base32.encoder)\n      )\n  }\n}\n\n/**\n * @template {API.UnknownLink} Link\n * @param {Link} link\n * @returns {API.LinkJSON<Link>}\n */\nexport const toJSON = (link) => ({\n  '/': format(link)\n})\n\n/**\n * @template {API.UnknownLink} Link\n * @param {API.LinkJSON<Link>} json\n */\nexport const fromJSON = (json) =>\n  CID.parse(json['/'])\n\n/** @type {WeakMap<API.UnknownLink, Map<string, string>>} */\nconst cache = new WeakMap()\n\n/**\n * @param {API.UnknownLink} cid\n * @returns {Map<string, string>}\n */\nconst baseCache = cid => {\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\n/**\n * @template {unknown} [Data=unknown]\n * @template {number} [Format=number]\n * @template {number} [Alg=number]\n * @template {API.Version} [Version=API.Version]\n * @implements {API.Link<Data, Format, Alg, Version>}\n */\n\nexport class CID {\n  /**\n   * @param {Version} version - Version of the CID\n   * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param {API.MultihashDigest<Alg>} multihash - (Multi)hash of the of the content.\n   * @param {Uint8Array} bytes\n   *\n   */\n  constructor (version, code, multihash, bytes) {\n    /** @readonly */\n    this.code = code\n    /** @readonly */\n    this.version = version\n    /** @readonly */\n    this.multihash = multihash\n    /** @readonly */\n    this.bytes = bytes\n\n    // flag to serializers that this is a CID and\n    // should be treated specially\n    /** @readonly */\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 () {\n    return this\n  }\n\n  // ArrayBufferView\n  get byteOffset () {\n    return this.bytes.byteOffset\n  }\n\n  // ArrayBufferView\n  get byteLength () {\n    return this.bytes.byteLength\n  }\n\n  /**\n   * @returns {CID<Data, API.DAG_PB, API.SHA_256, 0>}\n   */\n  toV0 () {\n    switch (this.version) {\n      case 0: {\n        return /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (this)\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 /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (\n          CID.createV0(\n            /** @type {API.MultihashDigest<API.SHA_256>} */ (multihash)\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  /**\n   * @returns {CID<Data, Format, Alg, 1>}\n   */\n  toV1 () {\n    switch (this.version) {\n      case 0: {\n        const { code, digest } = this.multihash\n        const multihash = Digest.create(code, digest)\n        return /** @type {CID<Data, Format, Alg, 1>} */ (\n          CID.createV1(this.code, multihash)\n        )\n      }\n      case 1: {\n        return /** @type {CID<Data, Format, Alg, 1>} */ (this)\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  /**\n   * @param {unknown} other\n   * @returns {other is CID<Data, Format, Alg, Version>}\n   */\n  equals (other) {\n    return CID.equals(this, other)\n  }\n\n  /**\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @param {API.Link<Data, Format, Alg, Version>} self\n   * @param {unknown} other\n   * @returns {other is CID}\n   */\n  static equals (self, other) {\n    const unknown =\n      /** @type {{code?:unknown, version?:unknown, multihash?:unknown}} */ (\n        other\n      )\n    return (\n      unknown &&\n      self.code === unknown.code &&\n      self.version === unknown.version &&\n      Digest.equals(self.multihash, unknown.multihash)\n    )\n  }\n\n  /**\n   * @param {API.MultibaseEncoder<string>} [base]\n   * @returns {string}\n   */\n  toString (base) {\n    return format(this, base)\n  }\n\n  toJSON () {\n    return { '/': format(this) }\n  }\n\n  link () {\n    return this\n  }\n\n  get [Symbol.toStringTag] () {\n    return 'CID'\n  }\n\n  // Legacy\n\n  [Symbol.for('nodejs.util.inspect.custom')] () {\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   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @template {unknown} U\n   * @param {API.Link<Data, Format, Alg, Version>|U} input\n   * @returns {CID<Data, Format, Alg, Version>|null}\n   */\n  static asCID (input) {\n    if (input == null) {\n      return null\n    }\n\n    const value = /** @type {any} */ (input)\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        /** @type {API.MultihashDigest<Alg>} */ (multihash),\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 =\n        /** @type {API.MultihashDigest<Alg>} */\n        (Digest.decode(multihash))\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   *\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @param {Version} version - Version of the CID\n   * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param {API.MultihashDigest<Alg>} digest - (Multi)hash of the of the content.\n   * @returns {CID<Data, Format, Alg, Version>}\n   */\n  static create (version, code, digest) {\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   * @template {unknown} [T=unknown]\n   * @param {API.MultihashDigest<typeof SHA_256_CODE>} digest - Multihash.\n   * @returns {CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0>}\n   */\n  static createV0 (digest) {\n    return CID.create(0, DAG_PB_CODE, digest)\n  }\n\n  /**\n   * Simplified version of `create` for CIDv1.\n   *\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @param {Code} code - Content encoding format code.\n   * @param {API.MultihashDigest<Alg>} digest - Miltihash of the content.\n   * @returns {CID<Data, Code, Alg, 1>}\n   */\n  static createV1 (code, digest) {\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   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @template {API.Version} Ver\n   * @param {API.ByteView<API.Link<Data, Code, Alg, Ver>>} bytes\n   * @returns {CID<Data, Code, Alg, Ver>}\n   */\n  static decode (bytes) {\n    const [cid, remainder] = CID.decodeFirst(bytes)\n    if (remainder.length) {\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   * @template {unknown} T\n   * @template {number} C\n   * @template {number} A\n   * @template {API.Version} V\n   * @param {API.ByteView<API.Link<T, C, A, V>>} bytes\n   * @returns {[CID<T, C, A, V>, Uint8Array]}\n   */\n  static decodeFirst (bytes) {\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(/** @type {API.MultihashDigest<API.SHA_256>} */ (digest))\n        : CID.createV1(specs.codec, digest)\n    return [/** @type {CID<T, C, A, V>} */(cid), 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   * @template {unknown} T\n   * @template {number} C\n   * @template {number} A\n   * @template {API.Version} V\n   * @param {API.ByteView<API.Link<T, C, A, V>>} initialBytes\n   * @returns {{ version:V, codec:C, multihashCode:A, digestSize:number, multihashSize:number, size:number }}\n   */\n  static inspectBytes (initialBytes) {\n    let offset = 0\n    const next = () => {\n      const [i, length] = varint.decode(initialBytes.subarray(offset))\n      offset += length\n      return i\n    }\n\n    let version = /** @type {V} */ (next())\n    let codec = /** @type {C} */ (DAG_PB_CODE)\n    if (/** @type {number} */(version) === 18) {\n      // CIDv0\n      version = /** @type {V} */ (0)\n      offset = 0\n    } else {\n      codec = /** @type {C} */ (next())\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 = /** @type {A} */ (next()) // 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   * @template {string} Prefix\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @template {API.Version} Ver\n   * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n   * @param {API.MultibaseDecoder<Prefix>} [base]\n   * @returns {CID<Data, Code, Alg, Ver>}\n   */\n  static parse (source, base) {\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\n/**\n * @template {string} Prefix\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @template {API.Version} Ver\n * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n * @param {API.MultibaseDecoder<Prefix>} [base]\n * @returns {[Prefix, API.ByteView<API.Link<Data, Code, Alg, Ver>>]}\n */\nconst parseCIDtoBytes = (source, base) => {\n  switch (source[0]) {\n    // CIDv0 is parsed differently\n    case 'Q': {\n      const decoder = base || base58btc\n      return [\n        /** @type {Prefix} */ (base58btc.prefix),\n        decoder.decode(`${base58btc.prefix}${source}`)\n      ]\n    }\n    case base58btc.prefix: {\n      const decoder = base || base58btc\n      return [/** @type {Prefix} */(base58btc.prefix), decoder.decode(source)]\n    }\n    case base32.prefix: {\n      const decoder = base || base32\n      return [/** @type {Prefix} */(base32.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 [/** @type {Prefix} */(source[0]), base.decode(source)]\n    }\n  }\n}\n\n/**\n *\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<'z'>} base\n */\nconst toStringV0 = (bytes, cache, base) => {\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\n/**\n * @template {string} Prefix\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<Prefix>} base\n */\nconst toStringV1 = (bytes, cache, base) => {\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\n/**\n * @param {API.Version} version\n * @param {number} code\n * @param {Uint8Array} multihash\n * @returns {Uint8Array}\n */\nconst encodeCID = (version, code, multihash) => {\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 '../vendor/varint.js'\n\n/**\n * @param {Uint8Array} data\n * @param {number} [offset=0]\n * @returns {[number, number]}\n */\nexport const decode = (data, offset = 0) => {\n  const code = varint.decode(data, offset)\n  return [code, varint.decode.bytes]\n}\n\n/**\n * @param {number} int\n * @param {Uint8Array} target\n * @param {number} [offset=0]\n */\nexport const encodeTo = (int, target, offset = 0) => {\n  varint.encode(int, target, offset)\n  return target\n}\n\n/**\n * @param {number} int\n * @returns {number}\n */\nexport const encodingLength = (int) => {\n  return varint.encodingLength(int)\n}\n", "var encode_1 = encode;\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31);\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  encode.bytes = offset - oldOffset + 1;\n  \n  return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n  , REST$1 = 0x7F;\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      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  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 (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'\n\n/**\n * Creates a multihash digest.\n *\n * @template {number} Code\n * @param {Code} code\n * @param {Uint8Array} digest\n */\nexport const create = (code, digest) => {\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 *\n * @param {Uint8Array} multihash\n * @returns {MultihashDigest}\n */\nexport const decode = (multihash) => {\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\n/**\n * @param {MultihashDigest} a\n * @param {unknown} b\n * @returns {b is MultihashDigest}\n */\nexport const equals = (a, b) => {\n  if (a === b) {\n    return true\n  } else {\n    const data = /** @type {{code?:unknown, size?:unknown, bytes?:unknown}} */(b)\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 * @typedef {import('./interface.js').MultihashDigest} MultihashDigest\n */\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n *\n * @template {number} Code\n * @template {number} Size\n * @class\n * @implements {MultihashDigest}\n */\nexport class Digest {\n  /**\n   * Creates a multihash digest.\n   *\n   * @param {Code} code\n   * @param {Size} size\n   * @param {Uint8Array} digest\n   * @param {Uint8Array} bytes\n   */\n  constructor (code, size, digest, bytes) {\n    this.code = code\n    this.size = size\n    this.digest = digest\n    this.bytes = bytes\n  }\n}\n", "const empty = new Uint8Array(0)\n\n/**\n * @param {Uint8Array} d\n */\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n\n/**\n * @param {string} hex\n */\nconst fromHex = hex => {\n  const hexes = hex.match(/../g)\n  return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\n/**\n * @param {Uint8Array} aa\n * @param {Uint8Array} bb\n */\nconst equals = (aa, bb) => {\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\n/**\n * @param {ArrayBufferView|ArrayBuffer|Uint8Array} o\n * @returns {Uint8Array}\n */\nconst coerce = o => {\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\n/**\n * @param {any} o\n * @returns {o is ArrayBuffer|ArrayBufferView}\n */\nconst isBinary = o =>\n  o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nconst fromString = str => (new TextEncoder()).encode(str)\n\n/**\n * @param {Uint8Array} b\n * @returns {string}\n */\nconst toString = b => (new TextDecoder()).decode(b)\n\nexport { equals, coerce, isBinary, fromHex, toHex, fromString, toString, empty }\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 basex from '../../vendor/base-x.js'\nimport { coerce } from '../bytes.js'\n// Linter can't see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\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 *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.BaseEncoder}\n */\nclass Encoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   */\n  constructor (name, prefix, baseEncode) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n  }\n\n  /**\n   * @param {Uint8Array} bytes\n   * @returns {API.Multibase<Prefix>}\n   */\n  encode (bytes) {\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 * @template {string} Prefix\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 *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.UnibaseDecoder<Prefix>}\n * @implements {API.BaseDecoder}\n */\nclass Decoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseDecode) {\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    /** @private */\n    this.prefixCodePoint = /** @type {number} */ (prefix.codePointAt(0))\n    this.baseDecode = baseDecode\n  }\n\n  /**\n   * @param {string} text\n   */\n  decode (text) {\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  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n}\n\n/**\n * @template {string} Prefix\n * @typedef {Record<Prefix, API.UnibaseDecoder<Prefix>>} Decoders\n */\n\n/**\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.CombobaseDecoder<Prefix>}\n */\nclass ComposedDecoder {\n  /**\n   * @param {Decoders<Prefix>} decoders\n   */\n  constructor (decoders) {\n    this.decoders = decoders\n  }\n\n  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n\n  /**\n   * @param {string} input\n   * @returns {Uint8Array}\n   */\n  decode (input) {\n    const prefix = /** @type {Prefix} */ (input[0])\n    const decoder = this.decoders[prefix]\n    if (decoder) {\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\n/**\n * @template {string} L\n * @template {string} R\n * @param {API.UnibaseDecoder<L>|API.CombobaseDecoder<L>} left\n * @param {API.UnibaseDecoder<R>|API.CombobaseDecoder<R>} right\n * @returns {ComposedDecoder<L|R>}\n */\nexport const or = (left, right) => new ComposedDecoder(/** @type {Decoders<L|R>} */({\n  ...(left.decoders || { [/** @type API.UnibaseDecoder<L> */(left).prefix]: left }),\n  ...(right.decoders || { [/** @type API.UnibaseDecoder<R> */(right).prefix]: right })\n}))\n\n/**\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseCodec<Prefix>}\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.BaseCodec}\n * @implements {API.BaseEncoder}\n * @implements {API.BaseDecoder}\n */\nexport class Codec {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseEncode, baseDecode) {\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  /**\n   * @param {Uint8Array} input\n   */\n  encode (input) {\n    return this.encoder.encode(input)\n  }\n\n  /**\n   * @param {string} input\n   */\n  decode (input) {\n    return this.decoder.decode(input)\n  }\n}\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {(bytes:Uint8Array) => string} options.encode\n * @param {(input:string) => Uint8Array} options.decode\n * @returns {Codec<Base, Prefix>}\n */\nexport const from = ({ name, prefix, encode, decode }) =>\n  new Codec(name, prefix, encode, decode)\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @returns {Codec<Base, Prefix>}\n */\nexport const baseX = ({ prefix, name, alphabet }) => {\n  const { encode, decode } = basex(alphabet, name)\n  return from({\n    prefix,\n    name,\n    encode,\n    /**\n     * @param {string} text\n     */\n    decode: text => coerce(decode(text))\n  })\n}\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @param {string} name\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar, name) => {\n  // Build the character lookup table:\n  /** @type {Record<string, number>} */\n  const codes = {}\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))) {\n    throw new SyntaxError('Unexpected end of data')\n  }\n\n  return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\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) {\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) {\n      out += '='\n    }\n  }\n\n  return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @param {number} options.bitsPerChar\n */\nexport const rfc4648 = ({ name, prefix, bitsPerChar, alphabet }) => {\n  return from({\n    prefix,\n    name,\n    encode (input) {\n      return encode(input, alphabet, bitsPerChar)\n    },\n    decode (input) {\n      return decode(input, alphabet, bitsPerChar, name)\n    }\n  })\n}\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.\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  function encode (source) {\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  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  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", "// this is dummy module overlayed by interface.ts\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", "// this is dummy module overlayed by interface.ts\n", "import * as Digest from './digest.js'\n\n/**\n * @template {string} Name\n * @template {number} Code\n * @param {object} options\n * @param {Name} options.name\n * @param {Code} options.code\n * @param {(input: Uint8Array) => Await<Uint8Array>} options.encode\n */\nexport const from = ({ name, code, encode }) => new Hasher(name, code, encode)\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n *\n * @template {string} Name\n * @template {number} Code\n * @class\n * @implements {MultihashHasher<Code>}\n */\nexport class Hasher {\n  /**\n   *\n   * @param {Name} name\n   * @param {Code} code\n   * @param {(input: Uint8Array) => Await<Uint8Array>} encode\n   */\n  constructor (name, code, encode) {\n    this.name = name\n    this.code = code\n    this.encode = encode\n  }\n\n  /**\n   * @param {Uint8Array} input\n   * @returns {Await<Digest.Digest<Code, number>>}\n   */\n  digest (input) {\n    if (input instanceof Uint8Array) {\n      const result = this.encode(input)\n      return result instanceof Uint8Array\n        ? Digest.create(this.code, result)\n        /* c8 ignore next 1 */\n        : result.then(digest => Digest.create(this.code, digest))\n    } else {\n      throw Error('Unknown type, must be binary type')\n      /* c8 ignore next 1 */\n    }\n  }\n}\n\n/**\n * @template {number} Alg\n * @typedef {import('./interface.js').MultihashHasher} MultihashHasher\n */\n\n/**\n * @template T\n * @typedef {Promise<T>|T} Await\n */\n", "// this is dummy module overlayed by interface.ts\n", "import { Bucket } from './bucket.js'\nimport type { BucketOptions, BucketPosition, BucketChild } from './bucket.js'\nimport { wrapHash } from './consumable-hash.js'\n\ninterface UserBucketOptions {\n  hashFn: (value: Uint8Array) => Promise<Uint8Array>\n  bits?: number\n}\n\nexport function createHAMT<T> (options: UserBucketOptions) {\n  if (options == null || options.hashFn == null) {\n    throw new Error('please define an options.hashFn')\n  }\n\n  const bucketOptions = {\n    bits: options.bits ?? 8,\n    hash: wrapHash(options.hashFn)\n  }\n\n  return new Bucket<T>(bucketOptions)\n}\n\nexport { Bucket }\nexport type { BucketOptions, BucketPosition, BucketChild }\n", "// @ts-expect-error\nimport SparseArray from 'sparse-array'\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport type { InfiniteHash } from './consumable-hash.js'\n\nexport interface BucketChild<V> {\n  key: string\n  value: V\n  hash: InfiniteHash\n}\n\ninterface SA<B> {\n  length: number\n  compactArray: () => B[]\n  get: (i: number) => B\n  set: (i: number, value: B) => void\n  reduce: <A> (fn: (acc: A, curr: B, index: number) => A, initial: A) => B\n  find: (fn: (item: B) => boolean) => B | undefined\n  bitField: () => number[]\n  unset: (i: number) => void\n}\n\nexport interface BucketPosition<T> {\n  bucket: Bucket<T>\n  pos: number\n  hash: InfiniteHash\n  existingChild?: BucketChild<T>\n}\n\nexport interface BucketOptions {\n  bits: number\n  hash: (value: Uint8Array | InfiniteHash) => InfiniteHash\n}\n\nexport class Bucket<T> {\n  _options: BucketOptions\n  _popCount: number\n  _parent?: Bucket<T>\n  _posAtParent: number\n  _children: SA<Bucket<T> | BucketChild<T>>\n\n  key: string | null\n\n  constructor (options: BucketOptions, parent?: Bucket<T>, posAtParent = 0) {\n    this._options = options\n    this._popCount = 0\n    this._parent = parent\n    this._posAtParent = posAtParent\n    this._children = new SparseArray()\n    this.key = null\n  }\n\n  async put (key: string, value: T) {\n    const place = await this._findNewBucketAndPos(key)\n\n    await place.bucket._putAt(place, key, value)\n  }\n\n  async get (key: string) {\n    const child = await this._findChild(key)\n\n    if (child != null) {\n      return child.value\n    }\n  }\n\n  async del (key: string) {\n    const place = await this._findPlace(key)\n    const child = place.bucket._at(place.pos)\n\n    if (child != null && child.key === key) {\n      place.bucket._delAt(place.pos)\n    }\n  }\n\n  leafCount (): number {\n    const children = this._children.compactArray()\n\n    return children.reduce((acc, child) => {\n      if (child instanceof Bucket) {\n        return acc + child.leafCount()\n      }\n\n      return acc + 1\n    }, 0)\n  }\n\n  childrenCount () {\n    return this._children.length\n  }\n\n  onlyChild () {\n    return this._children.get(0)\n  }\n\n  * eachLeafSeries (): Iterable<BucketChild<T>> {\n    const children = this._children.compactArray()\n\n    for (const child of children) {\n      if (child instanceof Bucket) {\n        yield * child.eachLeafSeries()\n      } else {\n        yield child\n      }\n    }\n  }\n\n  serialize (map: (value: BucketChild<T>, index: number) => T, reduce: (reduced: any) => any) {\n    const acc: T[] = []\n    // serialize to a custom non-sparse representation\n    return reduce(this._children.reduce((acc, child, index) => {\n      if (child != null) {\n        if (child instanceof Bucket) {\n          acc.push(child.serialize(map, reduce))\n        } else {\n          acc.push(map(child, index))\n        }\n      }\n      return acc\n    }, acc))\n  }\n\n  async asyncTransform (asyncMap: (value: BucketChild<T>) => Promise<T[]>, asyncReduce: (reduced: any) => Promise<any>) {\n    return await asyncTransformBucket(this, asyncMap, asyncReduce)\n  }\n\n  toJSON () {\n    return this.serialize(mapNode, reduceNodes)\n  }\n\n  prettyPrint () {\n    return JSON.stringify(this.toJSON(), null, '  ')\n  }\n\n  tableSize () {\n    return Math.pow(2, this._options.bits)\n  }\n\n  async _findChild (key: string) {\n    const result = await this._findPlace(key)\n    const child = result.bucket._at(result.pos)\n\n    if (child instanceof Bucket) {\n      // should not be possible, this._findPlace should always\n      // return a location for a child, not a bucket\n      return undefined\n    }\n\n    if (child != null && child.key === key) {\n      return child\n    }\n  }\n\n  async _findPlace (key: string | InfiniteHash): Promise<BucketPosition<T>> {\n    const hashValue = this._options.hash(typeof key === 'string' ? uint8ArrayFromString(key) : key)\n    const index = await hashValue.take(this._options.bits)\n\n    const child = this._children.get(index)\n\n    if (child instanceof Bucket) {\n      return await child._findPlace(hashValue)\n    }\n\n    return {\n      bucket: this,\n      pos: index,\n      hash: hashValue,\n      existingChild: child\n    }\n  }\n\n  async _findNewBucketAndPos (key: string | InfiniteHash): Promise<BucketPosition<T>> {\n    const place = await this._findPlace(key)\n\n    if ((place.existingChild != null) && place.existingChild.key !== key) {\n      // conflict\n      const bucket = new Bucket(this._options, place.bucket, place.pos)\n      place.bucket._putObjectAt(place.pos, bucket)\n\n      // put the previous value\n      const newPlace = await bucket._findPlace(place.existingChild.hash)\n      newPlace.bucket._putAt(newPlace, place.existingChild.key, place.existingChild.value)\n\n      return await bucket._findNewBucketAndPos(place.hash)\n    }\n\n    // no conflict, we found the place\n    return place\n  }\n\n  _putAt (place: BucketPosition<T>, key: string, value: T) {\n    this._putObjectAt(place.pos, {\n      key: key,\n      value: value,\n      hash: place.hash\n    })\n  }\n\n  _putObjectAt (pos: number, object: Bucket<T> | BucketChild<T>) {\n    if (this._children.get(pos) == null) {\n      this._popCount++\n    }\n    this._children.set(pos, object)\n  }\n\n  _delAt (pos: number) {\n    if (pos === -1) {\n      throw new Error('Invalid position')\n    }\n\n    if (this._children.get(pos) != null) {\n      this._popCount--\n    }\n    this._children.unset(pos)\n    this._level()\n  }\n\n  _level () {\n    if (this._parent != null && this._popCount <= 1) {\n      if (this._popCount === 1) {\n        // remove myself from parent, replacing me with my only child\n        const onlyChild = this._children.find(exists)\n\n        if ((onlyChild != null) && !(onlyChild instanceof Bucket)) {\n          const hash = onlyChild.hash\n          hash.untake(this._options.bits)\n          const place = {\n            pos: this._posAtParent,\n            hash: hash,\n            bucket: this._parent\n          }\n          this._parent._putAt(place, onlyChild.key, onlyChild.value)\n        }\n      } else {\n        this._parent._delAt(this._posAtParent)\n      }\n    }\n  }\n\n  _at (index: number) {\n    return this._children.get(index)\n  }\n}\n\nfunction exists (o: any) {\n  return Boolean(o)\n}\n\nfunction mapNode (node: any, _: number) {\n  return node.key\n}\n\nfunction reduceNodes (nodes: any) {\n  return nodes\n}\n\nasync function asyncTransformBucket<T> (bucket: Bucket<T>, asyncMap: (value: BucketChild<T>) => Promise<T[]>, asyncReduce: (reduced: any) => Promise<any>) {\n  const output = []\n\n  for (const child of bucket._children.compactArray()) {\n    if (child instanceof Bucket) {\n      await asyncTransformBucket(child, asyncMap, asyncReduce)\n    } else {\n      const mappedChildren = await asyncMap(child)\n\n      output.push({\n        bitField: bucket._children.bitField(),\n        children: mappedChildren\n      })\n    }\n  }\n\n  return await asyncReduce(output)\n}\n", "import { ConsumableBuffer } from './consumable-buffer.js'\nimport { concat as uint8ArrayConcat } from 'uint8arrays/concat'\n\nexport function wrapHash (hashFn: (value: Uint8Array) => Promise<Uint8Array>) {\n  function hashing (value: InfiniteHash | Uint8Array) {\n    if (value instanceof InfiniteHash) {\n      // already a hash. return it\n      return value\n    } else {\n      return new InfiniteHash(value, hashFn)\n    }\n  }\n\n  return hashing\n}\n\nexport class InfiniteHash {\n  _value: Uint8Array\n  _hashFn: (value: Uint8Array) => Promise<Uint8Array>\n  _depth: number\n  _availableBits: number\n  _currentBufferIndex: number\n  _buffers: ConsumableBuffer[]\n\n  constructor (value: Uint8Array, hashFn: (value: Uint8Array) => Promise<Uint8Array>) {\n    if (!(value instanceof Uint8Array)) {\n      throw new Error('can only hash Uint8Arrays')\n    }\n\n    this._value = value\n    this._hashFn = hashFn\n    this._depth = -1\n    this._availableBits = 0\n    this._currentBufferIndex = 0\n    this._buffers = []\n  }\n\n  async take (bits: number) {\n    let pendingBits = bits\n\n    while (this._availableBits < pendingBits) {\n      await this._produceMoreBits()\n    }\n\n    let result = 0\n\n    while (pendingBits > 0) {\n      const hash = this._buffers[this._currentBufferIndex]\n      const available = Math.min(hash.availableBits(), pendingBits)\n      const took = hash.take(available)\n      result = (result << available) + took\n      pendingBits -= available\n      this._availableBits -= available\n\n      if (hash.availableBits() === 0) {\n        this._currentBufferIndex++\n      }\n    }\n\n    return result\n  }\n\n  untake (bits: number) {\n    let pendingBits = bits\n\n    while (pendingBits > 0) {\n      const hash = this._buffers[this._currentBufferIndex]\n      const availableForUntake = Math.min(hash.totalBits() - hash.availableBits(), pendingBits)\n      hash.untake(availableForUntake)\n      pendingBits -= availableForUntake\n      this._availableBits += availableForUntake\n\n      if (this._currentBufferIndex > 0 && hash.totalBits() === hash.availableBits()) {\n        this._depth--\n        this._currentBufferIndex--\n      }\n    }\n  }\n\n  async _produceMoreBits () {\n    this._depth++\n\n    const value = this._depth > 0 ? uint8ArrayConcat([this._value, Uint8Array.from([this._depth])]) : this._value\n    const hashValue = await this._hashFn(value)\n    const buffer = new ConsumableBuffer(hashValue)\n\n    this._buffers.push(buffer)\n    this._availableBits += buffer.availableBits()\n  }\n}\n", "const START_MASKS = [\n  0b11111111,\n  0b11111110,\n  0b11111100,\n  0b11111000,\n  0b11110000,\n  0b11100000,\n  0b11000000,\n  0b10000000\n]\n\nconst STOP_MASKS = [\n  0b00000001,\n  0b00000011,\n  0b00000111,\n  0b00001111,\n  0b00011111,\n  0b00111111,\n  0b01111111,\n  0b11111111\n]\n\nexport class ConsumableBuffer {\n  _value: Uint8Array\n  _currentBytePos: number\n  _currentBitPos: number\n\n  constructor (value: Uint8Array) {\n    this._value = value\n    this._currentBytePos = value.length - 1\n    this._currentBitPos = 7\n  }\n\n  availableBits () {\n    return this._currentBitPos + 1 + this._currentBytePos * 8\n  }\n\n  totalBits () {\n    return this._value.length * 8\n  }\n\n  take (bits: number) {\n    let pendingBits = bits\n    let result = 0\n    while (pendingBits > 0 && this._haveBits()) {\n      const byte = this._value[this._currentBytePos]\n      const availableBits = this._currentBitPos + 1\n      const taking = Math.min(availableBits, pendingBits)\n      const value = byteBitsToInt(byte, availableBits - taking, taking)\n      result = (result << taking) + value\n\n      pendingBits -= taking\n\n      this._currentBitPos -= taking\n      if (this._currentBitPos < 0) {\n        this._currentBitPos = 7\n        this._currentBytePos--\n      }\n    }\n\n    return result\n  }\n\n  untake (bits: number) {\n    this._currentBitPos += bits\n    while (this._currentBitPos > 7) {\n      this._currentBitPos -= 8\n      this._currentBytePos += 1\n    }\n  }\n\n  _haveBits () {\n    return this._currentBytePos >= 0\n  }\n}\n\nfunction byteBitsToInt (byte: number, start: number, length: number) {\n  const mask = maskFor(start, length)\n  return (byte & mask) >>> start\n}\n\nfunction maskFor (start: number, length: number) {\n  return START_MASKS[start] & STOP_MASKS[Math.min(length + start - 1, 7)]\n}\n", "export const toPathComponents = (path: string = ''): string[] => {\n  // split on / unless escaped with \\\n  return (path\n    .trim()\n    .match(/([^\\\\/]|\\\\\\/)+/g) ?? [])\n    .filter(Boolean)\n}\n", "import * as ErrorsImport from './errors.js'\n\nexport { BaseBlockstore } from './base.js'\nexport { MemoryBlockstore } from './memory.js'\n\nexport const Errors = {\n  ...ErrorsImport\n}\n", "import errCode from 'err-code'\n\nexport function openFailedError (err?: Error): Error {\n  err = err ?? new Error('Open failed')\n  return errCode(err, 'ERR_OPEN_FAILED')\n}\n\nexport function closeFailedError (err?: Error): Error {\n  err = err ?? new Error('Close failed')\n  return errCode(err, 'ERR_CLOSE_FAILED')\n}\n\nexport function putFailedError (err?: Error): Error {\n  err = err ?? new Error('Put failed')\n  return errCode(err, 'ERR_PUT_FAILED')\n}\n\nexport function getFailedError (err?: Error): Error {\n  err = err ?? new Error('Get failed')\n  return errCode(err, 'ERR_GET_FAILED')\n}\n\nexport function deleteFailedError (err?: Error): Error {\n  err = err ?? new Error('Delete failed')\n  return errCode(err, 'ERR_DELETE_FAILED')\n}\n\nexport function hasFailedError (err?: Error): Error {\n  err = err ?? new Error('Has failed')\n  return errCode(err, 'ERR_HAS_FAILED')\n}\n\nexport function notFoundError (err?: Error): Error {\n  err = err ?? new Error('Not Found')\n  return errCode(err, 'ERR_NOT_FOUND')\n}\n\nexport function abortedError (err?: Error): Error {\n  err = err ?? new Error('Aborted')\n  return errCode(err, 'ERR_ABORTED')\n}\n", "import type { Blockstore, Pair } from 'interface-blockstore'\nimport type { AbortOptions, Await, AwaitIterable } from 'interface-store'\nimport type { CID } from 'multiformats/cid'\n\nexport class BaseBlockstore implements Blockstore {\n  has (key: CID, options?: AbortOptions): Await<boolean> {\n    return Promise.reject(new Error('.has is not implemented'))\n  }\n\n  put (key: CID, val: Uint8Array, options?: AbortOptions): Await<CID> {\n    return Promise.reject(new Error('.put is not implemented'))\n  }\n\n  async * putMany (source: AwaitIterable<Pair>, options?: AbortOptions): AwaitIterable<CID> {\n    for await (const { cid, block } of source) {\n      await this.put(cid, block, options)\n      yield cid\n    }\n  }\n\n  get (key: CID, options?: AbortOptions): Await<Uint8Array> {\n    return Promise.reject(new Error('.get is not implemented'))\n  }\n\n  async * getMany (source: AwaitIterable<CID>, options?: AbortOptions): AwaitIterable<Pair> {\n    for await (const key of source) {\n      yield {\n        cid: key,\n        block: await this.get(key, options)\n      }\n    }\n  }\n\n  async delete (key: CID, options?: AbortOptions): Promise<void> {\n    await Promise.reject(new Error('.delete is not implemented'))\n  }\n\n  async * deleteMany (source: AwaitIterable<CID>, options?: AbortOptions): AwaitIterable<CID> {\n    for await (const key of source) {\n      await this.delete(key, options)\n      yield key\n    }\n  }\n\n  /**\n   * Extending classes should override `query` or implement this method\n   */\n  async * getAll (options?: AbortOptions): AwaitIterable<Pair> { // eslint-disable-line require-yield\n    throw new Error('.getAll is not implemented')\n  }\n}\n", "import { base32 } from 'multiformats/bases/base32'\nimport { CID } from 'multiformats/cid'\nimport * as raw from 'multiformats/codecs/raw'\nimport * as Digest from 'multiformats/hashes/digest'\nimport { BaseBlockstore } from './base.js'\nimport * as Errors from './errors.js'\nimport type { Pair } from 'interface-blockstore'\nimport type { Await, AwaitIterable } from 'interface-store'\n\nexport class MemoryBlockstore extends BaseBlockstore {\n  private readonly data: Map<string, Uint8Array>\n\n  constructor () {\n    super()\n\n    this.data = new Map()\n  }\n\n  put (key: CID, val: Uint8Array): Await<CID> { // eslint-disable-line require-await\n    this.data.set(base32.encode(key.multihash.bytes), val)\n\n    return key\n  }\n\n  get (key: CID): Await<Uint8Array> {\n    const buf = this.data.get(base32.encode(key.multihash.bytes))\n\n    if (buf == null) {\n      throw Errors.notFoundError()\n    }\n\n    return buf\n  }\n\n  has (key: CID): Await<boolean> {\n    return this.data.has(base32.encode(key.multihash.bytes))\n  }\n\n  async delete (key: CID): Promise<void> {\n    this.data.delete(base32.encode(key.multihash.bytes))\n  }\n\n  async * getAll (): AwaitIterable<Pair> {\n    for (const [key, value] of this.data.entries()) {\n      yield {\n        cid: CID.createV1(raw.code, Digest.decode(base32.decode(key))),\n        block: value\n      }\n    }\n  }\n}\n", "import * as cbor from '@ipld/dag-cbor';\n\nimport type { Readable } from 'readable-stream';\n\nimport { CID } from 'multiformats/cid';\nimport { importer } from 'ipfs-unixfs-importer';\nimport { MemoryBlockstore } from 'blockstore-core';\nimport { sha256 } from 'multiformats/hashes/sha2';\n\n// a map of all supported CID hashing algorithms. This map is used to select the appropriate hasher\n// when generating a CID to compare against a provided CID\nconst hashers = {\n  [sha256.code as number]: sha256,\n};\n\n// a map of all support codecs.This map is used to select the appropriate codec\n// when generating a CID to compare against a provided CID\nconst codecs = {\n  [cbor.code as number]: cbor\n};\n\n/**\n * Utility class for creating CIDs. Exported for the convenience of developers.\n */\nexport class Cid {\n\n  /**\n   * Computes a V1 CID for the provided payload\n   * @param codecCode - the codec to use. Defaults to cbor\n   * @param multihashCode - the multihasher to use. Defaults to sha256\n   * @returns payload CID\n   * @throws {Error} codec is not supported\n   * @throws {Error} encoding fails\n   * @throws {Error} if hasher is not supported\n   */\n  public static async computeCid(\n    payload: any,\n    codecCode: number = cbor.code,\n    multihashCode: number = sha256.code\n  ): Promise<string> {\n    const codec = codecs[codecCode];\n    if (!codec) {\n      throw new Error(`codec [${codecCode}] not supported`);\n    }\n\n    const hasher = hashers[multihashCode];\n    if (!hasher) {\n      throw new Error(`multihash code [${multihashCode}] not supported`);\n    }\n\n    const payloadBytes = codec.encode(payload);\n    const payloadHash = await hasher.digest(payloadBytes);\n\n    const cid = await CID.createV1(codec.code, payloadHash);\n    return cid.toString();\n  }\n\n  /**\n   * Parses the given CID string into a {CID}.\n   */\n  public static parseCid(str: string): CID {\n    const cid: CID = CID.parse(str).toV1();\n\n    if (!codecs[cid.code]) {\n      throw new Error(`codec [${cid.code}] not supported`);\n    }\n\n    if (!hashers[cid.multihash.code]) {\n      throw new Error(`multihash code [${cid.multihash.code}] not supported`);\n    }\n\n    return cid;\n  }\n\n  /**\n   * @returns V1 CID of the DAG comprised by chunking data into unixfs DAG-PB encoded blocks\n   */\n  public static async computeDagPbCidFromBytes(content: Uint8Array): Promise<string> {\n    const asyncDataBlocks = importer([{ content }], new MemoryBlockstore(), { cidVersion: 1 });\n\n    // NOTE: the last block contains the root CID\n    let block;\n    for await (block of asyncDataBlocks) { ; }\n\n    return block ? block.cid.toString() : '';\n  }\n\n  /**\n   * @returns V1 CID of the DAG comprised by chunking data into unixfs DAG-PB encoded blocks\n   */\n  public static async computeDagPbCidFromStream(dataStream: Readable): Promise<string> {\n    const asyncDataBlocks = importer([{ content: dataStream }], new MemoryBlockstore(), { cidVersion: 1 });\n\n    // NOTE: the last block contains the root CID\n    let block;\n    for await (block of asyncDataBlocks) { ; }\n\n    return block ? block.cid.toString() : '';\n  }\n}\n", "/**\n * Wraps the given `AbortSignal` in a `Promise` that rejects if it is programmatically triggered,\n * otherwise the promise will remain in await state (will never resolve).\n */\nfunction promisifySignal<T>(signal: AbortSignal): Promise<T> {\n  return new Promise((resolve, reject) => {\n    // immediately reject if the given is signal is already aborted\n    if (signal.aborted) {\n      reject(signal.reason);\n      return;\n    }\n\n    signal.addEventListener('abort', () => {\n      reject(signal.reason);\n    });\n  });\n}\n\n/**\n * Wraps the given `Promise` such that it will reject if the `AbortSignal` is triggered.\n */\nexport async function executeUnlessAborted<T>(promise: Promise<T>, signal: AbortSignal | undefined): Promise<T> {\n  if (!signal) {\n    return promise;\n  }\n\n  return Promise.race([\n    promise,\n    promisifySignal<T>(signal),\n  ]);\n}\n", "import { Temporal } from '@js-temporal/polyfill';\n\n/**\n * sleeps for the desired duration\n * @param durationInMillisecond the desired amount of sleep time\n * @returns when the provided duration has passed\n */\nexport function sleep(durationInMillisecond: number): Promise<void> {\n  return new Promise(resolve => setTimeout(resolve, durationInMillisecond));\n}\n\n/**\n * returns an UTC ISO-8601 timestamp with microsecond precision\n * using @js-temporal/polyfill\n */\nexport function getCurrentTimeInHighPrecision(): string {\n  return Temporal.Now.instant().toString({ smallestUnit: 'microseconds' });\n}\n", "import type JSBI from 'jsbi';\nimport type { Temporal } from '..';\n\nimport { DEBUG } from './debug';\n\ntype OmitConstructor<T> = { [P in keyof T as T[P] extends new (...args: any[]) => any ? P : never]: T[P] };\n\ntype TemporalIntrinsics = Omit<typeof Temporal, 'Now' | 'Instant' | 'ZonedDateTime'> & {\n  Instant: OmitConstructor<Temporal.Instant> &\n    (new (epochNanoseconds: JSBI) => Temporal.Instant) & { prototype: typeof Temporal.Instant.prototype };\n  ZonedDateTime: OmitConstructor<Temporal.ZonedDateTime> &\n    (new (\n      epochNanoseconds: JSBI,\n      timeZone: string | Temporal.TimeZoneProtocol,\n      calendar?: string | Temporal.CalendarProtocol\n    ) => Temporal.ZonedDateTime) & {\n      prototype: typeof Temporal.ZonedDateTime.prototype;\n      from: typeof Temporal.ZonedDateTime.from;\n      compare: typeof Temporal.ZonedDateTime.compare;\n    };\n};\ntype TemporalIntrinsicRegistrations = {\n  [key in keyof TemporalIntrinsics as `Temporal.${key}`]: TemporalIntrinsics[key];\n};\ntype TemporalIntrinsicPrototypeRegistrations = {\n  [key in keyof TemporalIntrinsics as `Temporal.${key}.prototype`]: TemporalIntrinsics[key]['prototype'];\n};\ntype TemporalIntrinsicRegisteredKeys = {\n  [key in keyof TemporalIntrinsicRegistrations as `%${key}%`]: TemporalIntrinsicRegistrations[key];\n};\ntype TemporalIntrinsicPrototypeRegisteredKeys = {\n  [key in keyof TemporalIntrinsicPrototypeRegistrations as `%${key}%`]: TemporalIntrinsicPrototypeRegistrations[key];\n};\n\ntype CalendarPrototypeKeys = keyof Omit<Temporal.Calendar, typeof Symbol.toStringTag>;\ntype TemporalCalendarIntrinsicRegistrations = {\n  [key in CalendarPrototypeKeys as `Temporal.Calendar.prototype.${key}`]: Temporal.Calendar[key];\n} & {\n  'Temporal.Calendar.from': typeof Temporal.Calendar.from;\n};\ntype TemporalCalendarIntrinsicRegisteredKeys = {\n  [key in keyof TemporalCalendarIntrinsicRegistrations as `%${key}%`]: TemporalCalendarIntrinsicRegistrations[key];\n};\n\ntype TimeZonePrototypeKeys = 'getOffsetNanosecondsFor' | 'getPossibleInstantsFor';\ntype TemporalTimeZoneIntrinsicRegistrations = {\n  [key in TimeZonePrototypeKeys as `Temporal.TimeZone.prototype.${key}`]: Temporal.TimeZone[key];\n} & {\n  'Temporal.TimeZone.from': typeof Temporal.TimeZone.from;\n};\ntype TemporalTimeZoneIntrinsicRegisteredKeys = {\n  [key in keyof TemporalTimeZoneIntrinsicRegistrations as `%${key}%`]: TemporalTimeZoneIntrinsicRegistrations[key];\n};\n\nconst INTRINSICS = {} as TemporalIntrinsicRegisteredKeys &\n  TemporalIntrinsicPrototypeRegisteredKeys &\n  TemporalTimeZoneIntrinsicRegisteredKeys &\n  TemporalCalendarIntrinsicRegisteredKeys;\n\ntype customFormatFunction<T> = (\n  this: T,\n  depth: number,\n  options: { stylize: (value: unknown, type: 'number' | 'special') => string }\n) => string;\nconst customUtilInspectFormatters: Partial<{\n  [key in keyof TemporalIntrinsicRegistrations]: customFormatFunction<\n    InstanceType<TemporalIntrinsicRegistrations[key]>\n  >;\n}> = {\n  ['Temporal.Duration'](depth, options) {\n    const descr = options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special');\n    if (depth < 1) return descr;\n    const entries = [];\n    for (const prop of [\n      'years',\n      'months',\n      'weeks',\n      'days',\n      'hours',\n      'minutes',\n      'seconds',\n      'milliseconds',\n      'microseconds',\n      'nanoseconds'\n    ] as const) {\n      if (this[prop] !== 0) entries.push(`  ${prop}: ${options.stylize(this[prop], 'number')}`);\n    }\n    return descr + ' {\\n' + entries.join(',\\n') + '\\n}';\n  }\n};\n\ntype InspectFormatterOptions = { stylize: (str: string, styleType: string) => string };\nfunction defaultUtilInspectFormatter(this: any, depth: number, options: InspectFormatterOptions) {\n  return options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special');\n}\n\nexport function MakeIntrinsicClass(\n  Class: TemporalIntrinsicRegistrations[typeof name],\n  name: keyof TemporalIntrinsicRegistrations\n) {\n  Object.defineProperty(Class.prototype, Symbol.toStringTag, {\n    value: name,\n    writable: false,\n    enumerable: false,\n    configurable: true\n  });\n  if (DEBUG) {\n    Object.defineProperty(Class.prototype, Symbol.for('nodejs.util.inspect.custom'), {\n      value: customUtilInspectFormatters[name] || defaultUtilInspectFormatter,\n      writable: false,\n      enumerable: false,\n      configurable: true\n    });\n  }\n  for (const prop of Object.getOwnPropertyNames(Class)) {\n    // we know that `prop` is present, so the descriptor is never undefined\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const desc = Object.getOwnPropertyDescriptor(Class, prop)!;\n    if (!desc.configurable || !desc.enumerable) continue;\n    desc.enumerable = false;\n    Object.defineProperty(Class, prop, desc);\n  }\n  for (const prop of Object.getOwnPropertyNames(Class.prototype)) {\n    // we know that `prop` is present, so the descriptor is never undefined\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const desc = Object.getOwnPropertyDescriptor(Class.prototype, prop)!;\n    if (!desc.configurable || !desc.enumerable) continue;\n    desc.enumerable = false;\n    Object.defineProperty(Class.prototype, prop, desc);\n  }\n\n  DefineIntrinsic(name, Class);\n  DefineIntrinsic(`${name}.prototype`, Class.prototype);\n}\n\ntype IntrinsicDefinitionKeys =\n  | keyof TemporalIntrinsicRegistrations\n  | keyof TemporalIntrinsicPrototypeRegistrations\n  | keyof TemporalCalendarIntrinsicRegistrations\n  | keyof TemporalTimeZoneIntrinsicRegistrations;\nexport function DefineIntrinsic<KeyT extends keyof TemporalIntrinsicRegistrations>(\n  name: KeyT,\n  value: TemporalIntrinsicRegistrations[KeyT]\n): void;\nexport function DefineIntrinsic<KeyT extends keyof TemporalIntrinsicPrototypeRegistrations>(\n  name: KeyT,\n  value: TemporalIntrinsicPrototypeRegistrations[KeyT]\n): void;\nexport function DefineIntrinsic<KeyT extends keyof TemporalCalendarIntrinsicRegistrations>(\n  name: KeyT,\n  value: TemporalCalendarIntrinsicRegistrations[KeyT]\n): void;\nexport function DefineIntrinsic<KeyT extends keyof TemporalTimeZoneIntrinsicRegistrations>(\n  name: KeyT,\n  value: TemporalTimeZoneIntrinsicRegistrations[KeyT]\n): void;\nexport function DefineIntrinsic<KeyT>(name: KeyT, value: never): void;\nexport function DefineIntrinsic<KeyT extends IntrinsicDefinitionKeys>(name: KeyT, value: unknown): void {\n  const key: `%${IntrinsicDefinitionKeys}%` = `%${name}%`;\n  if (INTRINSICS[key] !== undefined) throw new Error(`intrinsic ${name} already exists`);\n  INTRINSICS[key] = value;\n}\nexport function GetIntrinsic<KeyT extends keyof typeof INTRINSICS>(intrinsic: KeyT): typeof INTRINSICS[KeyT] {\n  return INTRINSICS[intrinsic];\n}\n", "import type JSBI from 'jsbi';\nimport type { Temporal } from '..';\nimport type { BuiltinCalendarId, AnyTemporalType, CalendarSlot, TimeZoneSlot } from './internaltypes';\n\n// Instant\nexport const EPOCHNANOSECONDS = 'slot-epochNanoSeconds';\n\n// TimeZone\nexport const TIMEZONE_ID = 'slot-timezone-identifier';\n\n// DateTime, Date, Time, YearMonth, MonthDay\nexport const ISO_YEAR = 'slot-year';\nexport const ISO_MONTH = 'slot-month';\nexport const ISO_DAY = 'slot-day';\nexport const ISO_HOUR = 'slot-hour';\nexport const ISO_MINUTE = 'slot-minute';\nexport const ISO_SECOND = 'slot-second';\nexport const ISO_MILLISECOND = 'slot-millisecond';\nexport const ISO_MICROSECOND = 'slot-microsecond';\nexport const ISO_NANOSECOND = 'slot-nanosecond';\nexport const CALENDAR = 'slot-calendar';\n// Date, YearMonth, and MonthDay all have the same slots, disambiguation needed:\nexport const DATE_BRAND = 'slot-date-brand';\nexport const YEAR_MONTH_BRAND = 'slot-year-month-brand';\nexport const MONTH_DAY_BRAND = 'slot-month-day-brand';\n\n// ZonedDateTime\nexport const INSTANT = 'slot-cached-instant';\nexport const TIME_ZONE = 'slot-time-zone';\n\n// Duration\nexport const YEARS = 'slot-years';\nexport const MONTHS = 'slot-months';\nexport const WEEKS = 'slot-weeks';\nexport const DAYS = 'slot-days';\nexport const HOURS = 'slot-hours';\nexport const MINUTES = 'slot-minutes';\nexport const SECONDS = 'slot-seconds';\nexport const MILLISECONDS = 'slot-milliseconds';\nexport const MICROSECONDS = 'slot-microseconds';\nexport const NANOSECONDS = 'slot-nanoseconds';\n\n// Calendar\nexport const CALENDAR_ID = 'slot-calendar-identifier';\n\ninterface SlotInfo<ValueType, UsedByType extends AnyTemporalType> {\n  value: ValueType;\n  usedBy: UsedByType;\n}\n\ninterface SlotInfoRecord {\n  [k: string]: SlotInfo<unknown, AnyTemporalType>;\n}\n\ninterface Slots extends SlotInfoRecord {\n  // Instant\n  [EPOCHNANOSECONDS]: SlotInfo<JSBI, Temporal.Instant | Temporal.ZonedDateTime>; // number? JSBI?\n\n  // TimeZone\n  [TIMEZONE_ID]: SlotInfo<string, Temporal.TimeZone>;\n\n  // DateTime, Date, Time, YearMonth, MonthDay\n  [ISO_YEAR]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_MONTH]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_DAY]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_HOUR]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_MINUTE]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_SECOND]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_MILLISECOND]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_MICROSECOND]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_NANOSECOND]: SlotInfo<number, TypesWithCalendarUnits>;\n  [CALENDAR]: SlotInfo<CalendarSlot, TypesWithCalendarUnits>;\n\n  // Date, YearMonth, MonthDay common slots\n  [DATE_BRAND]: SlotInfo<true, Temporal.PlainDate>;\n  [YEAR_MONTH_BRAND]: SlotInfo<true, Temporal.PlainYearMonth>;\n  [MONTH_DAY_BRAND]: SlotInfo<true, Temporal.PlainMonthDay>;\n\n  // ZonedDateTime\n  [INSTANT]: SlotInfo<Temporal.Instant, Temporal.ZonedDateTime>;\n  [TIME_ZONE]: SlotInfo<TimeZoneSlot, Temporal.ZonedDateTime>;\n\n  // Duration\n  [YEARS]: SlotInfo<number, Temporal.Duration>;\n  [MONTHS]: SlotInfo<number, Temporal.Duration>;\n  [WEEKS]: SlotInfo<number, Temporal.Duration>;\n  [DAYS]: SlotInfo<number, Temporal.Duration>;\n  [HOURS]: SlotInfo<number, Temporal.Duration>;\n  [MINUTES]: SlotInfo<number, Temporal.Duration>;\n  [SECONDS]: SlotInfo<number, Temporal.Duration>;\n  [MILLISECONDS]: SlotInfo<number, Temporal.Duration>;\n  [MICROSECONDS]: SlotInfo<number, Temporal.Duration>;\n  [NANOSECONDS]: SlotInfo<number, Temporal.Duration>;\n\n  // Calendar\n  [CALENDAR_ID]: SlotInfo<BuiltinCalendarId, Temporal.Calendar>;\n}\n\ntype TypesWithCalendarUnits =\n  | Temporal.PlainDateTime\n  | Temporal.PlainDate\n  | Temporal.PlainTime\n  | Temporal.PlainYearMonth\n  | Temporal.PlainMonthDay\n  | Temporal.ZonedDateTime;\n\ninterface SlotsToTypes {\n  // Instant\n  [EPOCHNANOSECONDS]: Temporal.Instant;\n\n  // TimeZone\n  [TIMEZONE_ID]: Temporal.TimeZone;\n\n  // DateTime, Date, Time, YearMonth, MonthDay\n  [ISO_YEAR]: TypesWithCalendarUnits;\n  [ISO_MONTH]: TypesWithCalendarUnits;\n  [ISO_DAY]: TypesWithCalendarUnits;\n  [ISO_HOUR]: TypesWithCalendarUnits;\n  [ISO_MINUTE]: TypesWithCalendarUnits;\n  [ISO_SECOND]: TypesWithCalendarUnits;\n  [ISO_MILLISECOND]: TypesWithCalendarUnits;\n  [ISO_MICROSECOND]: TypesWithCalendarUnits;\n  [ISO_NANOSECOND]: TypesWithCalendarUnits;\n  [CALENDAR]: TypesWithCalendarUnits;\n\n  // Date, YearMonth, MonthDay common slots\n  [DATE_BRAND]: Temporal.PlainDate;\n  [YEAR_MONTH_BRAND]: Temporal.PlainYearMonth;\n  [MONTH_DAY_BRAND]: Temporal.PlainMonthDay;\n\n  // ZonedDateTime\n  [INSTANT]: Temporal.ZonedDateTime;\n  [TIME_ZONE]: Temporal.ZonedDateTime;\n\n  // Duration\n  [YEARS]: Temporal.Duration;\n  [MONTHS]: Temporal.Duration;\n  [WEEKS]: Temporal.Duration;\n  [DAYS]: Temporal.Duration;\n  [HOURS]: Temporal.Duration;\n  [MINUTES]: Temporal.Duration;\n  [SECONDS]: Temporal.Duration;\n  [MILLISECONDS]: Temporal.Duration;\n  [MICROSECONDS]: Temporal.Duration;\n  [NANOSECONDS]: Temporal.Duration;\n\n  // Calendar\n  [CALENDAR_ID]: Temporal.Calendar;\n}\n\ntype SlotKey = keyof SlotsToTypes;\n\nconst globalSlots = new WeakMap<Slots[keyof Slots]['usedBy'], Record<keyof Slots, Slots[keyof Slots]['value']>>();\n\nfunction _GetSlots(container: Slots[keyof Slots]['usedBy']) {\n  return globalSlots.get(container);\n}\n\nconst GetSlotsSymbol = Symbol.for('@@Temporal__GetSlots');\n\n// expose GetSlots to avoid dual package hazards\n(globalThis as any)[GetSlotsSymbol] ||= _GetSlots;\n\nconst GetSlots = (globalThis as any)[GetSlotsSymbol] as typeof _GetSlots;\n\nfunction _CreateSlots(container: Slots[keyof Slots]['usedBy']): void {\n  globalSlots.set(container, Object.create(null));\n}\n\nconst CreateSlotsSymbol = Symbol.for('@@Temporal__CreateSlots');\n\n// expose CreateSlots to avoid dual package hazards\n(globalThis as any)[CreateSlotsSymbol] ||= _CreateSlots;\n\nexport const CreateSlots = (globalThis as any)[CreateSlotsSymbol] as typeof _CreateSlots;\n\n// TODO: is there a better way than 9 overloads to make HasSlot into a type\n// guard that takes a variable number of parameters?\nexport function HasSlot<ID1 extends SlotKey>(container: unknown, id1: ID1): container is Slots[ID1]['usedBy'];\nexport function HasSlot<ID1 extends SlotKey, ID2 extends SlotKey>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2\n): container is Slots[ID1]['usedBy'] | Slots[ID2]['usedBy'];\nexport function HasSlot<ID1 extends SlotKey, ID2 extends SlotKey, ID3 extends SlotKey>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3\n): container is Slots[ID1]['usedBy'] | Slots[ID2]['usedBy'] | Slots[ID3]['usedBy'];\nexport function HasSlot<ID1 extends SlotKey, ID2 extends SlotKey, ID3 extends SlotKey, ID4 extends SlotKey>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4\n): container is Slots[ID1 | ID2 | ID3 | ID4]['usedBy'];\nexport function HasSlot<\n  ID1 extends SlotKey,\n  ID2 extends SlotKey,\n  ID3 extends SlotKey,\n  ID4 extends SlotKey,\n  ID5 extends SlotKey\n>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4,\n  id5: ID5\n): container is Slots[ID1 | ID2 | ID3 | ID4 | ID5]['usedBy'];\nexport function HasSlot<\n  ID1 extends SlotKey,\n  ID2 extends SlotKey,\n  ID3 extends SlotKey,\n  ID4 extends SlotKey,\n  ID5 extends SlotKey,\n  ID6 extends SlotKey\n>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4,\n  id5: ID5,\n  id6: ID6\n): container is Slots[ID1 | ID2 | ID3 | ID4 | ID5 | ID6]['usedBy'];\nexport function HasSlot<\n  ID1 extends SlotKey,\n  ID2 extends SlotKey,\n  ID3 extends SlotKey,\n  ID4 extends SlotKey,\n  ID5 extends SlotKey,\n  ID6 extends SlotKey,\n  ID7 extends SlotKey\n>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4,\n  id5: ID5,\n  id6: ID6,\n  id7: ID7\n): container is Slots[ID1 | ID2 | ID3 | ID4 | ID5 | ID6 | ID7]['usedBy'];\nexport function HasSlot<\n  ID1 extends SlotKey,\n  ID2 extends SlotKey,\n  ID3 extends SlotKey,\n  ID4 extends SlotKey,\n  ID5 extends SlotKey,\n  ID6 extends SlotKey,\n  ID7 extends SlotKey,\n  ID8 extends SlotKey\n>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4,\n  id5: ID5,\n  id6: ID6,\n  id7: ID7,\n  id8: ID8\n): container is Slots[ID1 | ID2 | ID3 | ID4 | ID5 | ID6 | ID7 | ID8]['usedBy'];\nexport function HasSlot<\n  ID1 extends SlotKey,\n  ID2 extends SlotKey,\n  ID3 extends SlotKey,\n  ID4 extends SlotKey,\n  ID5 extends SlotKey,\n  ID6 extends SlotKey,\n  ID7 extends SlotKey,\n  ID8 extends SlotKey,\n  ID9 extends SlotKey\n>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4,\n  id5: ID5,\n  id6: ID6,\n  id7: ID7,\n  id8: ID8,\n  id9: ID9\n): container is Slots[ID1 | ID2 | ID3 | ID4 | ID5 | ID6 | ID7 | ID8 | ID9]['usedBy'];\nexport function HasSlot(container: unknown, ...ids: (keyof Slots)[]): boolean {\n  if (!container || 'object' !== typeof container) return false;\n  const myslots = GetSlots(container as AnyTemporalType);\n  return !!myslots && ids.every((id) => id in myslots);\n}\nexport function GetSlot<KeyT extends keyof Slots>(\n  container: Slots[typeof id]['usedBy'],\n  id: KeyT\n): Slots[KeyT]['value'] {\n  const value = GetSlots(container)?.[id];\n  if (value === undefined) throw new TypeError(`Missing internal slot ${id}`);\n  return value;\n}\nexport function SetSlot<KeyT extends SlotKey>(\n  container: Slots[KeyT]['usedBy'],\n  id: KeyT,\n  value: Slots[KeyT]['value']\n): void {\n  const slots = GetSlots(container);\n\n  if (slots === undefined) throw new TypeError('Missing slots for the given container');\n\n  const existingSlot = slots[id];\n\n  if (existingSlot) throw new TypeError(`${id} already has set`);\n\n  slots[id] = value;\n}\n", "const tzComponent = /\\.[-A-Za-z_]|\\.\\.[-A-Za-z._]{1,12}|\\.[-A-Za-z_][-A-Za-z._]{0,12}|[A-Za-z_][-A-Za-z._]{0,13}/;\nconst offsetNoCapture = /(?:[+\\u2212-][0-2][0-9](?::?[0-5][0-9](?::?[0-5][0-9](?:[.,]\\d{1,9})?)?)?)/;\nexport const timeZoneID = new RegExp(\n  '(?:' +\n    [\n      `(?:${tzComponent.source})(?:\\\\/(?:${tzComponent.source}))*`,\n      'Etc/GMT(?:0|[-+]\\\\d{1,2})',\n      'GMT[-+]?0',\n      'EST5EDT',\n      'CST6CDT',\n      'MST7MDT',\n      'PST8PDT',\n      offsetNoCapture.source\n    ].join('|') +\n    ')'\n);\n\nconst yearpart = /(?:[+\\u2212-]\\d{6}|\\d{4})/;\nconst monthpart = /(?:0[1-9]|1[0-2])/;\nconst daypart = /(?:0[1-9]|[12]\\d|3[01])/;\nconst datesplit = new RegExp(\n  `(${yearpart.source})(?:-(${monthpart.source})-(${daypart.source})|(${monthpart.source})(${daypart.source}))`\n);\nconst timesplit = /(\\d{2})(?::(\\d{2})(?::(\\d{2})(?:[.,](\\d{1,9}))?)?|(\\d{2})(?:(\\d{2})(?:[.,](\\d{1,9}))?)?)?/;\nexport const offset = /([+\\u2212-])([01][0-9]|2[0-3])(?::?([0-5][0-9])(?::?([0-5][0-9])(?:[.,](\\d{1,9}))?)?)?/;\nconst offsetpart = new RegExp(`([zZ])|${offset.source}?`);\nexport const annotation = /\\[(!)?([a-z_][a-z0-9_-]*)=([A-Za-z0-9]+(?:-[A-Za-z0-9]+)*)\\]/g;\n\nexport const zoneddatetime = new RegExp(\n  [\n    `^${datesplit.source}`,\n    `(?:(?:T|\\\\s+)${timesplit.source}(?:${offsetpart.source})?)?`,\n    `(?:\\\\[!?(${timeZoneID.source})\\\\])?`,\n    `((?:${annotation.source})*)$`\n  ].join(''),\n  'i'\n);\n\nexport const time = new RegExp(\n  [\n    `^T?${timesplit.source}`,\n    `(?:${offsetpart.source})?`,\n    `(?:\\\\[!?${timeZoneID.source}\\\\])?`,\n    `((?:${annotation.source})*)$`\n  ].join(''),\n  'i'\n);\n\n// The short forms of YearMonth and MonthDay are only for the ISO calendar, but\n// annotations are still allowed, and will throw if the calendar annotation is\n// not ISO.\n// Non-ISO calendar YearMonth and MonthDay have to parse as a Temporal.PlainDate,\n// with the reference fields.\n// YYYYMM forbidden by ISO 8601 because ambiguous with YYMMDD, but allowed by\n// RFC 3339 and we don't allow 2-digit years, so we allow it.\n// Not ambiguous with HHMMSS because that requires a 'T' prefix\n// UTC offsets are not allowed, because they are not allowed with any date-only\n// format; also, YYYY-MM-UU is ambiguous with YYYY-MM-DD\nexport const yearmonth = new RegExp(\n  `^(${yearpart.source})-?(${monthpart.source})(?:\\\\[!?${timeZoneID.source}\\\\])?((?:${annotation.source})*)$`\n);\nexport const monthday = new RegExp(\n  `^(?:--)?(${monthpart.source})-?(${daypart.source})(?:\\\\[!?${timeZoneID.source}\\\\])?((?:${annotation.source})*)$`\n);\n\nconst fraction = /(\\d+)(?:[.,](\\d{1,9}))?/;\n\nconst durationDate = /(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)W)?(?:(\\d+)D)?/;\nconst durationTime = new RegExp(`(?:${fraction.source}H)?(?:${fraction.source}M)?(?:${fraction.source}S)?`);\nexport const duration = new RegExp(`^([+\\u2212-])?P${durationDate.source}(?:T(?!$)${durationTime.source})?$`, 'i');\n", "const ArrayIncludes = Array.prototype.includes;\nconst ArrayPrototypePush = Array.prototype.push;\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst MathMin = Math.min;\nconst MathMax = Math.max;\nconst MathAbs = Math.abs;\nconst MathFloor = Math.floor;\nconst MathSign = Math.sign;\nconst MathTrunc = Math.trunc;\nconst NumberIsNaN = Number.isNaN;\nconst NumberIsFinite = Number.isFinite;\nconst NumberCtor = Number;\nconst StringCtor = String;\nconst NumberMaxSafeInteger = Number.MAX_SAFE_INTEGER;\nconst ObjectCreate = Object.create;\nconst ObjectDefineProperty = Object.defineProperty;\nconst ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nconst ReflectApply = Reflect.apply;\nconst ReflectOwnKeys = Reflect.ownKeys;\n\nimport { DEBUG } from './debug';\nimport JSBI from 'jsbi';\n\nimport type { Temporal } from '..';\nimport type {\n  AnyTemporalLikeType,\n  UnitSmallerThanOrEqualTo,\n  CalendarProtocolParams,\n  TimeZoneProtocolParams,\n  InstantParams,\n  PlainMonthDayParams,\n  ZonedDateTimeParams,\n  CalendarParams,\n  TimeZoneParams,\n  PlainDateParams,\n  PlainTimeParams,\n  DurationParams,\n  PlainDateTimeParams,\n  PlainYearMonthParams,\n  PrimitiveFieldsOf,\n  BuiltinCalendarId,\n  Keys,\n  AnyTemporalKey,\n  CalendarSlot,\n  TimeZoneSlot\n} from './internaltypes';\nimport { GetIntrinsic } from './intrinsicclass';\nimport {\n  CreateSlots,\n  GetSlot,\n  HasSlot,\n  SetSlot,\n  EPOCHNANOSECONDS,\n  TIMEZONE_ID,\n  CALENDAR_ID,\n  INSTANT,\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  DATE_BRAND,\n  YEAR_MONTH_BRAND,\n  MONTH_DAY_BRAND,\n  TIME_ZONE,\n  CALENDAR,\n  YEARS,\n  MONTHS,\n  WEEKS,\n  DAYS,\n  HOURS,\n  MINUTES,\n  SECONDS,\n  MILLISECONDS,\n  MICROSECONDS,\n  NANOSECONDS\n} from './slots';\n\nexport const ZERO = JSBI.BigInt(0);\nconst ONE = JSBI.BigInt(1);\nconst SIXTY = JSBI.BigInt(60);\nconst TWENTY_FOUR = JSBI.BigInt(24);\nexport const THOUSAND = JSBI.BigInt(1e3);\nexport const MILLION = JSBI.BigInt(1e6);\nexport const BILLION = JSBI.BigInt(1e9);\nconst NEGATIVE_ONE = JSBI.BigInt(-1);\nconst HOUR_SECONDS = 3600;\nexport const HOUR_NANOS = JSBI.multiply(JSBI.BigInt(HOUR_SECONDS), BILLION);\nconst MINUTE_NANOS = JSBI.multiply(SIXTY, BILLION);\nconst DAY_NANOS = JSBI.multiply(HOUR_NANOS, TWENTY_FOUR);\nconst NS_MIN = JSBI.multiply(JSBI.BigInt(-86400), JSBI.BigInt(1e17));\nconst NS_MAX = JSBI.multiply(JSBI.BigInt(86400), JSBI.BigInt(1e17));\nconst YEAR_MIN = -271821;\nconst YEAR_MAX = 275760;\nconst BEFORE_FIRST_OFFSET_TRANSITION = JSBI.multiply(JSBI.BigInt(-388152), JSBI.BigInt(1e13)); // 1847-01-01T00:00:00Z\nconst ABOUT_TEN_YEARS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 10));\nconst ABOUT_ONE_YEAR_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 1));\nconst TWO_WEEKS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(2 * 7));\n\nconst BUILTIN_CALENDAR_IDS = [\n  'iso8601',\n  'hebrew',\n  'islamic',\n  'islamic-umalqura',\n  'islamic-tbla',\n  'islamic-civil',\n  'islamic-rgsa',\n  'islamicc',\n  'persian',\n  'ethiopic',\n  'ethioaa',\n  'coptic',\n  'chinese',\n  'dangi',\n  'roc',\n  'indian',\n  'buddhist',\n  'japanese',\n  'gregory'\n];\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function */\n/**\n * uncheckedAssertNarrowedType forces TypeScript to change the type of the argument to the one given in\n * the type parameter. This should only be used to help TS understand when variables change types,\n * but TS can't or won't infer this automatically. They should be used sparingly, because\n * if used incorrectly can lead to difficult-to-diagnose problems.\n * */\nexport function uncheckedAssertNarrowedType<T = unknown>(\n  arg: unknown,\n  justification: string\n): asserts arg is T extends typeof arg ? T : never {}\n/* eslint-enable */\n\ntype ArrayElement<ArrayType> = ArrayType extends readonly (infer ElementType)[] ? ElementType : never;\ntype ArrayWithNewKeys<T, Keys> = Array<ArrayElement<T> | Keys>;\n\n/**\n * In debug builds, this function verifies that the given argument \"exists\" (is not\n * null or undefined). This function becomes a no-op in the final bundles distributed via NPM.\n * @param arg\n */\nexport function assertExists<A>(arg: A): asserts arg is NonNullable<A> {\n  if (DEBUG) {\n    if (arg != null) {\n      throw new Error('Expected arg to be set.');\n    }\n  }\n}\n\nfunction isZero(value: JSBI): boolean {\n  return JSBI.equal(value, ZERO);\n}\n\ntype Stringless<T> = Exclude<T, string>;\n\nfunction GetMethod<T extends { [s in M]?: (...args: any[]) => unknown }, M extends string & keyof T>(\n  obj: T,\n  methodName: M\n): T[M];\nfunction GetMethod<\n  T extends string | { [s in M]?: (...args: any[]) => unknown },\n  M extends string & keyof Stringless<T>\n>(obj: T, methodName: M): Stringless<T>[M] | undefined;\nfunction GetMethod<\n  T extends string | { [s in M]?: undefined | ((...args: any[]) => unknown) },\n  M extends string & keyof T\n>(obj: T, methodName: M): T[M] | undefined {\n  const result = obj[methodName];\n  if (result === undefined) return undefined;\n  if (DEBUG) {\n    if (typeof result !== 'function') throw new TypeError(`'${methodName}' must be a function`);\n  }\n  return result;\n}\n\nexport function Call<T, A extends readonly any[], R>(\n  target: (this: T, ...args: A) => R,\n  thisArgument: T,\n  argumentsList: Readonly<A>\n): R {\n  const args = arguments.length > 2 ? argumentsList : [];\n  if (DEBUG) {\n    if (!Array.isArray(argumentsList)) {\n      throw new TypeError('Assertion failed: optional `argumentsList`, if provided, must be an array');\n    }\n  }\n  return ReflectApply(target, thisArgument, args);\n}\n\n// For unknown values, this narrows the result to a Record. But for union types\n// like `Temporal.DurationLike | string`, it'll strip the primitive types while\n// leaving the object type(s) unchanged.\nexport function IsObject<T>(\n  value: T\n): value is Exclude<T, string | null | undefined | number | bigint | symbol | boolean>;\nexport function IsObject(value: unknown): value is Record<string | number | symbol, unknown> {\n  return (typeof value === 'object' && value !== null) || typeof value === 'function';\n}\n\nexport function ToNumber(value: unknown): number {\n  // ES 2022's es-abstract made minor changes to ToNumber, but polyfilling these\n  // changes adds zero benefit to Temporal and brings in a lot of extra code. So\n  // we'll leave ToNumber as-is.\n  // See https://github.com/ljharb/es-abstract/blob/main/2022/ToNumber.js\n  if (typeof value === 'bigint') throw new TypeError('Cannot convert BigInt to number');\n  return NumberCtor(value);\n}\n\nfunction ToIntegerOrInfinity(value: unknown) {\n  const number = ToNumber(value);\n  if (NumberIsNaN(number) || number === 0) {\n    return 0;\n  }\n  if (!NumberIsFinite(number)) {\n    return number;\n  }\n  const integer = MathFloor(MathAbs(number));\n  if (integer === 0) {\n    return 0;\n  }\n  return MathSign(number) * integer;\n}\n\nfunction IsIntegralNumber(argument: unknown) {\n  if (typeof argument !== 'number' || NumberIsNaN(argument) || !NumberIsFinite(argument)) {\n    return false;\n  }\n  const absValue = MathAbs(argument);\n  return MathFloor(absValue) === absValue;\n}\n\nexport function ToString(value: unknown): string {\n  if (typeof value === 'symbol') {\n    throw new TypeError('Cannot convert a Symbol value to a String');\n  }\n  return StringCtor(value);\n}\n\nexport function ToIntegerWithTruncation(value: unknown): number {\n  const number = ToNumber(value);\n  if (number === 0) return 0;\n  if (NumberIsNaN(number) || !NumberIsFinite(number)) {\n    throw new RangeError('invalid number value');\n  }\n  const integer = MathTrunc(number);\n  if (integer === 0) return 0; // ℝ(value) in spec text; converts -0 to 0\n  return integer;\n}\n\nfunction ToPositiveIntegerWithTruncation(valueParam: unknown, property?: string): number {\n  const integer = ToIntegerWithTruncation(valueParam);\n  if (integer <= 0) {\n    if (property !== undefined) {\n      throw new RangeError(`property '${property}' cannot be a a number less than one`);\n    }\n    throw new RangeError('Cannot convert a number less than one to a positive integer');\n  }\n  return integer;\n}\n\nexport function ToIntegerIfIntegral(valueParam: unknown): number {\n  const number = ToNumber(valueParam);\n  if (!NumberIsFinite(number)) throw new RangeError('infinity is out of range');\n  if (!IsIntegralNumber(number)) throw new RangeError(`unsupported fractional value ${valueParam}`);\n  if (number === 0) return 0; // ℝ(value) in spec text; converts -0 to 0\n  return number;\n}\n\nfunction divmod(x: JSBI, y: JSBI): { quotient: JSBI; remainder: JSBI } {\n  const quotient = JSBI.divide(x, y);\n  const remainder = JSBI.remainder(x, y);\n  return { quotient, remainder };\n}\n\nfunction isNegativeJSBI(value: JSBI): boolean {\n  return JSBI.lessThan(value, ZERO);\n}\n\nfunction signJSBI(value: JSBI): 1 | 0 | -1 {\n  if (isZero(value)) return 0;\n  if (isNegativeJSBI(value)) return -1;\n  return 1;\n}\nfunction abs(x: JSBI): JSBI {\n  if (JSBI.lessThan(x, ZERO)) return JSBI.multiply(x, NEGATIVE_ONE);\n  return x;\n}\n\ntype BuiltinCastFunction = (v: unknown) => string | number;\nconst BUILTIN_CASTS = new Map<AnyTemporalKey, BuiltinCastFunction>([\n  ['year', ToIntegerWithTruncation],\n  ['month', ToPositiveIntegerWithTruncation],\n  ['monthCode', ToString],\n  ['day', ToPositiveIntegerWithTruncation],\n  ['hour', ToIntegerWithTruncation],\n  ['minute', ToIntegerWithTruncation],\n  ['second', ToIntegerWithTruncation],\n  ['millisecond', ToIntegerWithTruncation],\n  ['microsecond', ToIntegerWithTruncation],\n  ['nanosecond', ToIntegerWithTruncation],\n  ['years', ToIntegerIfIntegral],\n  ['months', ToIntegerIfIntegral],\n  ['weeks', ToIntegerIfIntegral],\n  ['days', ToIntegerIfIntegral],\n  ['hours', ToIntegerIfIntegral],\n  ['minutes', ToIntegerIfIntegral],\n  ['seconds', ToIntegerIfIntegral],\n  ['milliseconds', ToIntegerIfIntegral],\n  ['microseconds', ToIntegerIfIntegral],\n  ['nanoseconds', ToIntegerIfIntegral],\n  ['era', ToString],\n  ['eraYear', ToIntegerOrInfinity],\n  ['offset', ToString]\n]);\n\nconst BUILTIN_DEFAULTS = new Map([\n  ['hour', 0],\n  ['minute', 0],\n  ['second', 0],\n  ['millisecond', 0],\n  ['microsecond', 0],\n  ['nanosecond', 0]\n]);\n\n// each item is [plural, singular, category]\nconst SINGULAR_PLURAL_UNITS = [\n  ['years', 'year', 'date'],\n  ['months', 'month', 'date'],\n  ['weeks', 'week', 'date'],\n  ['days', 'day', 'date'],\n  ['hours', 'hour', 'time'],\n  ['minutes', 'minute', 'time'],\n  ['seconds', 'second', 'time'],\n  ['milliseconds', 'millisecond', 'time'],\n  ['microseconds', 'microsecond', 'time'],\n  ['nanoseconds', 'nanosecond', 'time']\n] as const;\nconst SINGULAR_FOR = new Map(SINGULAR_PLURAL_UNITS.map((e) => [e[0], e[1]] as const));\nconst PLURAL_FOR = new Map(SINGULAR_PLURAL_UNITS.map(([p, s]) => [s, p]));\nconst UNITS_DESCENDING = SINGULAR_PLURAL_UNITS.map(([, s]) => s);\n\nconst DURATION_FIELDS = Array.from(SINGULAR_FOR.keys()).sort();\n\nimport * as PARSE from './regex';\n\nconst IntlDateTimeFormatEnUsCache = new Map<string, Intl.DateTimeFormat>();\n\nfunction getIntlDateTimeFormatEnUsForTimeZone(timeZoneIdentifier: string) {\n  let instance = IntlDateTimeFormatEnUsCache.get(timeZoneIdentifier);\n  if (instance === undefined) {\n    instance = new IntlDateTimeFormat('en-us', {\n      timeZone: StringCtor(timeZoneIdentifier),\n      hour12: false,\n      era: 'short',\n      year: 'numeric',\n      month: 'numeric',\n      day: 'numeric',\n      hour: 'numeric',\n      minute: 'numeric',\n      second: 'numeric'\n    });\n    IntlDateTimeFormatEnUsCache.set(timeZoneIdentifier, instance);\n  }\n  return instance;\n}\n\nexport function ToObject<T>(value: T): T extends Record<string, unknown> ? T : object {\n  if (typeof value === 'undefined' || value === null) {\n    throw new TypeError(`Expected object not ${value}`);\n  }\n  return Object(value);\n}\n\n// Adapted from https://github.com/ljharb/es-abstract/blob/main/2022/CopyDataProperties.js\n// but simplified (e.g. removed assertions) for this polyfill to reduce bundle size.\nexport function CopyDataProperties<K extends string | symbol, T extends Record<K, unknown>>(\n  target: T,\n  source: T | undefined,\n  excludedKeys: K[],\n  excludedValues?: unknown[]\n) {\n  if (typeof source === 'undefined' || source === null) return;\n\n  const keys = ReflectOwnKeys(source) as (keyof T)[];\n  for (const nextKey of keys) {\n    if (excludedKeys.some((e) => Object.is(e, nextKey))) continue;\n    if (Object.prototype.propertyIsEnumerable.call(source, nextKey)) {\n      const propValue = source[nextKey];\n      if (excludedValues && excludedValues.some((e) => Object.is(e, propValue))) continue;\n\n      target[nextKey] = propValue;\n    }\n  }\n}\n\nexport function IsTemporalInstant(item: unknown): item is Temporal.Instant {\n  return HasSlot(item, EPOCHNANOSECONDS) && !HasSlot(item, TIME_ZONE, CALENDAR);\n}\n\nexport function IsTemporalTimeZone(item: unknown): item is Temporal.TimeZone {\n  return HasSlot(item, TIMEZONE_ID);\n}\nexport function IsTemporalCalendar(item: unknown): item is Temporal.Calendar {\n  return HasSlot(item, CALENDAR_ID);\n}\nexport function IsTemporalDuration(item: unknown): item is Temporal.Duration {\n  return HasSlot(item, YEARS, MONTHS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS);\n}\nexport function IsTemporalDate(item: unknown): item is Temporal.PlainDate {\n  return HasSlot(item, DATE_BRAND);\n}\nexport function IsTemporalTime(item: unknown): item is Temporal.PlainTime {\n  return (\n    HasSlot(item, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND) &&\n    !HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY)\n  );\n}\nexport function IsTemporalDateTime(item: unknown): item is Temporal.PlainDateTime {\n  return HasSlot(\n    item,\n    ISO_YEAR,\n    ISO_MONTH,\n    ISO_DAY,\n    ISO_HOUR,\n    ISO_MINUTE,\n    ISO_SECOND,\n    ISO_MILLISECOND,\n    ISO_MICROSECOND,\n    ISO_NANOSECOND\n  );\n}\nexport function IsTemporalYearMonth(item: unknown): item is Temporal.PlainYearMonth {\n  return HasSlot(item, YEAR_MONTH_BRAND);\n}\nexport function IsTemporalMonthDay(item: unknown): item is Temporal.PlainMonthDay {\n  return HasSlot(item, MONTH_DAY_BRAND);\n}\nexport function IsTemporalZonedDateTime(item: unknown): item is Temporal.ZonedDateTime {\n  return HasSlot(item, EPOCHNANOSECONDS, TIME_ZONE, CALENDAR);\n}\nexport function RejectTemporalLikeObject(item: AnyTemporalLikeType) {\n  if (HasSlot(item, CALENDAR) || HasSlot(item, TIME_ZONE)) {\n    throw new TypeError('with() does not support a calendar or timeZone property');\n  }\n  if (IsTemporalTime(item)) {\n    throw new TypeError('with() does not accept Temporal.PlainTime, use withPlainTime() instead');\n  }\n  if ((item as { calendar: unknown }).calendar !== undefined) {\n    throw new TypeError('with() does not support a calendar property');\n  }\n  if ((item as { timeZone: unknown }).timeZone !== undefined) {\n    throw new TypeError('with() does not support a timeZone property');\n  }\n}\nfunction ParseTemporalTimeZone(stringIdent: string) {\n  const { ianaName, offset, z } = ParseTemporalTimeZoneString(stringIdent);\n  if (ianaName) return GetCanonicalTimeZoneIdentifier(ianaName);\n  if (z) return 'UTC';\n  // if !ianaName && !z then offset must be present\n  assertExists(offset);\n  const offsetNs = ParseTimeZoneOffsetString(offset);\n  return FormatTimeZoneOffsetString(offsetNs);\n}\n\nfunction MaybeFormatCalendarAnnotation(\n  calendar: CalendarSlot,\n  showCalendar: Temporal.ShowCalendarOption['calendarName']\n): string {\n  if (showCalendar === 'never') return '';\n  return FormatCalendarAnnotation(ToTemporalCalendarIdentifier(calendar), showCalendar);\n}\n\nfunction FormatCalendarAnnotation(id: string, showCalendar: Temporal.ShowCalendarOption['calendarName']) {\n  if (showCalendar === 'never') return '';\n  if (showCalendar === 'auto' && id === 'iso8601') return '';\n  const flag = showCalendar === 'critical' ? '!' : '';\n  return `[${flag}u-ca=${id}]`;\n}\n\nfunction ParseISODateTime(isoString: string) {\n  // ZDT is the superset of fields for every other Temporal type\n  const match = PARSE.zoneddatetime.exec(isoString);\n  if (!match) throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n  let yearString = match[1];\n  if (yearString[0] === '\\u2212') yearString = `-${yearString.slice(1)}`;\n  if (yearString === '-000000') throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n  const year = ToIntegerOrInfinity(yearString);\n  const month = ToIntegerOrInfinity(match[2] || match[4]);\n  const day = ToIntegerOrInfinity(match[3] || match[5]);\n  const hour = ToIntegerOrInfinity(match[6]);\n  const hasTime = match[6] !== undefined;\n  const minute = ToIntegerOrInfinity(match[7] || match[10]);\n  let second = ToIntegerOrInfinity(match[8] || match[11]);\n  if (second === 60) second = 59;\n  const fraction = (match[9] || match[12]) + '000000000';\n  const millisecond = ToIntegerOrInfinity(fraction.slice(0, 3));\n  const microsecond = ToIntegerOrInfinity(fraction.slice(3, 6));\n  const nanosecond = ToIntegerOrInfinity(fraction.slice(6, 9));\n  let offset;\n  let z = false;\n  if (match[13]) {\n    offset = undefined;\n    z = true;\n  } else if (match[14] && match[15]) {\n    const offsetSign = match[14] === '-' || match[14] === '\\u2212' ? '-' : '+';\n    const offsetHours = match[15] || '00';\n    const offsetMinutes = match[16] || '00';\n    const offsetSeconds = match[17] || '00';\n    let offsetFraction = match[18] || '0';\n    offset = `${offsetSign}${offsetHours}:${offsetMinutes}`;\n    if (+offsetFraction) {\n      while (offsetFraction.endsWith('0')) offsetFraction = offsetFraction.slice(0, -1);\n      offset += `:${offsetSeconds}.${offsetFraction}`;\n    } else if (+offsetSeconds) {\n      offset += `:${offsetSeconds}`;\n    }\n    if (offset === '-00:00') offset = '+00:00';\n  }\n  const ianaName = match[19];\n  const annotations = match[20];\n  let calendar;\n  for (const [, critical, key, value] of annotations.matchAll(PARSE.annotation)) {\n    if (key === 'u-ca') {\n      if (calendar === undefined) calendar = value;\n    } else if (critical === '!') {\n      throw new RangeError(`Unrecognized annotation: !${key}=${value}`);\n    }\n  }\n  RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n  return {\n    year,\n    month,\n    day,\n    hasTime,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond,\n    ianaName,\n    offset,\n    z,\n    calendar\n  };\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalInstantString(isoString: string) {\n  const result = ParseISODateTime(isoString);\n  if (!result.z && !result.offset) throw new RangeError('Temporal.Instant requires a time zone offset');\n  return result;\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalZonedDateTimeString(isoString: string) {\n  const result = ParseISODateTime(isoString);\n  if (!result.ianaName) throw new RangeError('Temporal.ZonedDateTime requires a time zone ID in brackets');\n  return result;\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDateTimeString(isoString: string) {\n  return ParseISODateTime(isoString);\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDateString(isoString: string) {\n  return ParseISODateTime(isoString);\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalTimeString(isoString: string) {\n  const match = PARSE.time.exec(isoString);\n  let hour, minute, second, millisecond, microsecond, nanosecond, annotations;\n  if (match) {\n    hour = ToIntegerOrInfinity(match[1]);\n    minute = ToIntegerOrInfinity(match[2] || match[5]);\n    second = ToIntegerOrInfinity(match[3] || match[6]);\n    if (second === 60) second = 59;\n    const fraction = (match[4] || match[7]) + '000000000';\n    millisecond = ToIntegerOrInfinity(fraction.slice(0, 3));\n    microsecond = ToIntegerOrInfinity(fraction.slice(3, 6));\n    nanosecond = ToIntegerOrInfinity(fraction.slice(6, 9));\n    annotations = match[14];\n    for (const [, critical, key, value] of annotations.matchAll(PARSE.annotation)) {\n      if (key !== 'u-ca' && critical === '!') {\n        throw new RangeError(`Unrecognized annotation: !${key}=${value}`);\n      }\n    }\n    if (match[8]) throw new RangeError('Z designator not supported for PlainTime');\n  } else {\n    let z, hasTime;\n    ({ hasTime, hour, minute, second, millisecond, microsecond, nanosecond, z } = ParseISODateTime(isoString));\n    if (!hasTime) throw new RangeError(`time is missing in string: ${isoString}`);\n    if (z) throw new RangeError('Z designator not supported for PlainTime');\n  }\n  // if it's a date-time string, OK\n  if (/[tT ][0-9][0-9]/.test(isoString)) {\n    return { hour, minute, second, millisecond, microsecond, nanosecond };\n  }\n  try {\n    const { month, day } = ParseTemporalMonthDayString(isoString);\n    RejectISODate(1972, month, day);\n  } catch {\n    try {\n      const { year, month } = ParseTemporalYearMonthString(isoString);\n      RejectISODate(year, month, 1);\n    } catch {\n      return { hour, minute, second, millisecond, microsecond, nanosecond };\n    }\n  }\n  throw new RangeError(`invalid ISO 8601 time-only string ${isoString}; may need a T prefix`);\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalYearMonthString(isoString: string) {\n  const match = PARSE.yearmonth.exec(isoString);\n  let year, month, calendar, referenceISODay;\n  if (match) {\n    let yearString = match[1];\n    if (yearString[0] === '\\u2212') yearString = `-${yearString.slice(1)}`;\n    if (yearString === '-000000') throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n    year = ToIntegerOrInfinity(yearString);\n    month = ToIntegerOrInfinity(match[2]);\n    const annotations = match[3];\n    for (const [, critical, key, value] of annotations.matchAll(PARSE.annotation)) {\n      if (key === 'u-ca') {\n        if (calendar === undefined) calendar = value;\n      } else if (critical === '!') {\n        throw new RangeError(`Unrecognized annotation: !${key}=${value}`);\n      }\n    }\n    if (calendar !== undefined && calendar !== 'iso8601') {\n      throw new RangeError('YYYY-MM format is only valid with iso8601 calendar');\n    }\n  } else {\n    let z;\n    ({ year, month, calendar, day: referenceISODay, z } = ParseISODateTime(isoString));\n    if (z) throw new RangeError('Z designator not supported for PlainYearMonth');\n  }\n  return { year, month, calendar, referenceISODay };\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalMonthDayString(isoString: string) {\n  const match = PARSE.monthday.exec(isoString);\n  let month, day, calendar, referenceISOYear;\n  if (match) {\n    month = ToIntegerOrInfinity(match[1]);\n    day = ToIntegerOrInfinity(match[2]);\n    const annotations = match[3];\n    for (const [, critical, key, value] of annotations.matchAll(PARSE.annotation)) {\n      if (key === 'u-ca') {\n        if (calendar === undefined) calendar = value;\n      } else if (critical === '!') {\n        throw new RangeError(`Unrecognized annotation: !${key}=${value}`);\n      }\n    }\n    if (calendar !== undefined && calendar !== 'iso8601') {\n      throw new RangeError('MM-DD format is only valid with iso8601 calendar');\n    }\n  } else {\n    let z;\n    ({ month, day, calendar, year: referenceISOYear, z } = ParseISODateTime(isoString));\n    if (z) throw new RangeError('Z designator not supported for PlainMonthDay');\n  }\n  return { month, day, calendar, referenceISOYear };\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalTimeZoneString(stringIdent: string): Partial<{\n  ianaName: string | undefined;\n  offset: string | undefined;\n  z: boolean | undefined;\n}> {\n  const bareID = new RegExp(`^${PARSE.timeZoneID.source}$`, 'i');\n  if (bareID.test(stringIdent)) return { ianaName: stringIdent };\n  try {\n    // Try parsing ISO string instead\n    const result = ParseISODateTime(stringIdent);\n    if (result.z || result.offset || result.ianaName) {\n      return result;\n    }\n  } catch {\n    // fall through\n  }\n  throw new RangeError(`Invalid time zone: ${stringIdent}`);\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDurationString(isoString: string) {\n  const match = PARSE.duration.exec(isoString);\n  if (!match) throw new RangeError(`invalid duration: ${isoString}`);\n  if (match.slice(2).every((element) => element === undefined)) {\n    throw new RangeError(`invalid duration: ${isoString}`);\n  }\n  const sign = match[1] === '-' || match[1] === '\\u2212' ? -1 : 1;\n  const years = match[2] === undefined ? 0 : ToIntegerWithTruncation(match[2]) * sign;\n  const months = match[3] === undefined ? 0 : ToIntegerWithTruncation(match[3]) * sign;\n  const weeks = match[4] === undefined ? 0 : ToIntegerWithTruncation(match[4]) * sign;\n  const days = match[5] === undefined ? 0 : ToIntegerWithTruncation(match[5]) * sign;\n  const hours = match[6] === undefined ? 0 : ToIntegerWithTruncation(match[6]) * sign;\n  const fHours = match[7];\n  const minutesStr = match[8];\n  const fMinutes = match[9];\n  const secondsStr = match[10];\n  const fSeconds = match[11];\n  let minutes = 0;\n  let seconds = 0;\n  // fractional hours, minutes, or seconds, expressed in whole nanoseconds:\n  let excessNanoseconds = 0;\n\n  if (fHours !== undefined) {\n    if (minutesStr ?? fMinutes ?? secondsStr ?? fSeconds ?? false) {\n      throw new RangeError('only the smallest unit can be fractional');\n    }\n    excessNanoseconds = ToIntegerOrInfinity((fHours + '000000000').slice(0, 9)) * 3600 * sign;\n  } else {\n    minutes = minutesStr === undefined ? 0 : ToIntegerWithTruncation(minutesStr) * sign;\n    if (fMinutes !== undefined) {\n      if (secondsStr ?? fSeconds ?? false) {\n        throw new RangeError('only the smallest unit can be fractional');\n      }\n      excessNanoseconds = ToIntegerOrInfinity((fMinutes + '000000000').slice(0, 9)) * 60 * sign;\n    } else {\n      seconds = secondsStr === undefined ? 0 : ToIntegerWithTruncation(secondsStr) * sign;\n      if (fSeconds !== undefined) {\n        excessNanoseconds = ToIntegerOrInfinity((fSeconds + '000000000').slice(0, 9)) * sign;\n      }\n    }\n  }\n\n  const nanoseconds = excessNanoseconds % 1000;\n  const microseconds = MathTrunc(excessNanoseconds / 1000) % 1000;\n  const milliseconds = MathTrunc(excessNanoseconds / 1e6) % 1000;\n  seconds += MathTrunc(excessNanoseconds / 1e9) % 60;\n  minutes += MathTrunc(excessNanoseconds / 6e10);\n\n  RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalInstant(isoString: string) {\n  let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offset, z } =\n    ParseTemporalInstantString(isoString);\n\n  if (!z && !offset) throw new RangeError('Temporal.Instant requires a time zone offset');\n  // At least one of z or offset is defined, but TS doesn't seem to understand\n  // that we only use offset if z is not defined (and thus offset must be defined).\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-unnecessary-type-assertion\n  const offsetNs = z ? 0 : ParseTimeZoneOffsetString(offset!);\n  ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(\n    year,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond - offsetNs\n  ));\n\n  const epochNs = GetUTCEpochNanoseconds(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n  if (epochNs === null) throw new RangeError('DateTime outside of supported range');\n  return epochNs;\n}\n\nexport function RegulateISODate(\n  yearParam: number,\n  monthParam: number,\n  dayParam: number,\n  overflow: Temporal.ArithmeticOptions['overflow']\n) {\n  let year = yearParam;\n  let month = monthParam;\n  let day = dayParam;\n  switch (overflow) {\n    case 'reject':\n      RejectISODate(year, month, day);\n      break;\n    case 'constrain':\n      ({ year, month, day } = ConstrainISODate(year, month, day));\n      break;\n  }\n  return { year, month, day };\n}\n\nexport function RegulateTime(\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number,\n  overflow: Temporal.ArithmeticOptions['overflow']\n) {\n  let hour = hourParam;\n  let minute = minuteParam;\n  let second = secondParam;\n  let millisecond = millisecondParam;\n  let microsecond = microsecondParam;\n  let nanosecond = nanosecondParam;\n\n  switch (overflow) {\n    case 'reject':\n      RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n      break;\n    case 'constrain':\n      ({ hour, minute, second, millisecond, microsecond, nanosecond } = ConstrainTime(\n        hour,\n        minute,\n        second,\n        millisecond,\n        microsecond,\n        nanosecond\n      ));\n      break;\n  }\n  return { hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nexport function RegulateISOYearMonth(\n  yearParam: number,\n  monthParam: number,\n  overflow: Temporal.ArithmeticOptions['overflow']\n) {\n  let year = yearParam;\n  let month = monthParam;\n  const referenceISODay = 1;\n  switch (overflow) {\n    case 'reject':\n      RejectISODate(year, month, referenceISODay);\n      break;\n    case 'constrain':\n      ({ year, month } = ConstrainISODate(year, month));\n      break;\n  }\n  return { year, month };\n}\n\nfunction ToTemporalDurationRecord(item: Temporal.DurationLike | string) {\n  if (!IsObject(item)) {\n    return ParseTemporalDurationString(ToString(item));\n  }\n  if (IsTemporalDuration(item)) {\n    return {\n      years: GetSlot(item, YEARS),\n      months: GetSlot(item, MONTHS),\n      weeks: GetSlot(item, WEEKS),\n      days: GetSlot(item, DAYS),\n      hours: GetSlot(item, HOURS),\n      minutes: GetSlot(item, MINUTES),\n      seconds: GetSlot(item, SECONDS),\n      milliseconds: GetSlot(item, MILLISECONDS),\n      microseconds: GetSlot(item, MICROSECONDS),\n      nanoseconds: GetSlot(item, NANOSECONDS)\n    };\n  }\n  const result = {\n    years: 0,\n    months: 0,\n    weeks: 0,\n    days: 0,\n    hours: 0,\n    minutes: 0,\n    seconds: 0,\n    milliseconds: 0,\n    microseconds: 0,\n    nanoseconds: 0\n  };\n  let partial = ToTemporalPartialDurationRecord(item);\n  for (const property of DURATION_FIELDS) {\n    const value = partial[property];\n    if (value !== undefined) {\n      result[property] = value;\n    }\n  }\n  let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = result;\n  RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nfunction ToTemporalPartialDurationRecord(temporalDurationLike: Temporal.DurationLike | string) {\n  if (!IsObject(temporalDurationLike)) {\n    throw new TypeError('invalid duration-like');\n  }\n  const result: Record<typeof DURATION_FIELDS[number], number | undefined> = {\n    years: undefined,\n    months: undefined,\n    weeks: undefined,\n    days: undefined,\n    hours: undefined,\n    minutes: undefined,\n    seconds: undefined,\n    milliseconds: undefined,\n    microseconds: undefined,\n    nanoseconds: undefined\n  };\n  let any = false;\n  for (const property of DURATION_FIELDS) {\n    const value = temporalDurationLike[property];\n    if (value !== undefined) {\n      any = true;\n      result[property] = ToIntegerIfIntegral(value);\n    }\n  }\n  if (!any) {\n    throw new TypeError('invalid duration-like');\n  }\n  return result;\n}\n\nfunction ToLimitedTemporalDuration(\n  item: Temporal.DurationLike | string,\n  disallowedProperties: (keyof Temporal.DurationLike)[]\n) {\n  let record = ToTemporalDurationRecord(item);\n  for (const property of disallowedProperties) {\n    if (record[property] !== 0) {\n      throw new RangeError(\n        `Duration field ${property} not supported by Temporal.Instant. Try Temporal.ZonedDateTime instead.`\n      );\n    }\n  }\n  return record;\n}\n\nexport function ToTemporalOverflow(options: Temporal.AssignmentOptions | undefined) {\n  if (options === undefined) return 'constrain';\n  return GetOption(options, 'overflow', ['constrain', 'reject'], 'constrain');\n}\n\nexport function ToTemporalDisambiguation(options: Temporal.ToInstantOptions | undefined) {\n  if (options === undefined) return 'compatible';\n  return GetOption(options, 'disambiguation', ['compatible', 'earlier', 'later', 'reject'], 'compatible');\n}\n\nexport function ToTemporalRoundingMode(\n  options: { roundingMode?: Temporal.RoundingMode },\n  fallback: Temporal.RoundingMode\n) {\n  return GetOption(\n    options,\n    'roundingMode',\n    ['ceil', 'floor', 'expand', 'trunc', 'halfCeil', 'halfFloor', 'halfExpand', 'halfTrunc', 'halfEven'],\n    fallback\n  );\n}\n\nfunction NegateTemporalRoundingMode(roundingMode: Temporal.RoundingMode) {\n  switch (roundingMode) {\n    case 'ceil':\n      return 'floor';\n    case 'floor':\n      return 'ceil';\n    case 'halfCeil':\n      return 'halfFloor';\n    case 'halfFloor':\n      return 'halfCeil';\n    default:\n      return roundingMode;\n  }\n}\n\nexport function ToTemporalOffset(\n  options: Temporal.OffsetDisambiguationOptions | undefined,\n  fallback: Required<Temporal.OffsetDisambiguationOptions>['offset']\n) {\n  if (options === undefined) return fallback;\n  return GetOption(options, 'offset', ['prefer', 'use', 'ignore', 'reject'], fallback);\n}\n\nexport function ToCalendarNameOption(options: Temporal.ShowCalendarOption) {\n  return GetOption(options, 'calendarName', ['auto', 'always', 'never', 'critical'], 'auto');\n}\n\nexport function ToTimeZoneNameOption(options: Temporal.ZonedDateTimeToStringOptions) {\n  return GetOption(options, 'timeZoneName', ['auto', 'never', 'critical'], 'auto');\n}\n\nexport function ToShowOffsetOption(options: Temporal.ZonedDateTimeToStringOptions) {\n  return GetOption(options, 'offset', ['auto', 'never'], 'auto');\n}\n\nexport function ToTemporalRoundingIncrement(options: { roundingIncrement?: number }) {\n  let increment = options.roundingIncrement;\n  if (increment === undefined) return 1;\n  increment = ToNumber(increment);\n  if (!NumberIsFinite(increment)) {\n    throw new RangeError('roundingIncrement must be finite');\n  }\n  const integerIncrement = MathTrunc(increment);\n  if (integerIncrement < 1 || integerIncrement > 1e9) {\n    throw new RangeError(`roundingIncrement must be at least 1 and at most 1e9, not ${increment}`);\n  }\n  return integerIncrement;\n}\nexport function ValidateTemporalRoundingIncrement(increment: number, dividend: number, inclusive: boolean) {\n  const maximum = inclusive ? dividend : dividend - 1;\n  if (increment > maximum) {\n    throw new RangeError(`roundingIncrement must be at least 1 and less than ${maximum}, not ${increment}`);\n  }\n  if (dividend % increment !== 0) {\n    throw new RangeError(`Rounding increment must divide evenly into ${dividend}`);\n  }\n}\n\nexport function ToFractionalSecondDigits(\n  normalizedOptions: Temporal.ToStringPrecisionOptions\n): Temporal.ToStringPrecisionOptions['fractionalSecondDigits'] {\n  const digitsValue = normalizedOptions.fractionalSecondDigits;\n  if (digitsValue === undefined) return 'auto';\n  if (typeof digitsValue !== 'number') {\n    if (ToString(digitsValue) !== 'auto') {\n      throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digitsValue}`);\n    }\n    return 'auto';\n  }\n  const digitCount = MathFloor(digitsValue);\n  if (!NumberIsFinite(digitCount) || digitCount < 0 || digitCount > 9) {\n    throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digitsValue}`);\n  }\n  return digitCount as Exclude<Temporal.ToStringPrecisionOptions['fractionalSecondDigits'], 'auto'>;\n}\n\nexport function ToSecondsStringPrecisionRecord(\n  smallestUnit: Temporal.ToStringPrecisionOptions['smallestUnit'],\n  precision: Temporal.ToStringPrecisionOptions['fractionalSecondDigits']\n): {\n  precision: Temporal.ToStringPrecisionOptions['fractionalSecondDigits'] | 'minute';\n  unit: UnitSmallerThanOrEqualTo<'minute'>;\n  increment: number;\n} {\n  switch (smallestUnit) {\n    case 'minute':\n      return { precision: 'minute', unit: 'minute', increment: 1 };\n    case 'second':\n      return { precision: 0, unit: 'second', increment: 1 };\n    case 'millisecond':\n      return { precision: 3, unit: 'millisecond', increment: 1 };\n    case 'microsecond':\n      return { precision: 6, unit: 'microsecond', increment: 1 };\n    case 'nanosecond':\n      return { precision: 9, unit: 'nanosecond', increment: 1 };\n    default: // fall through if option not given\n  }\n  switch (precision) {\n    case 'auto':\n      return { precision, unit: 'nanosecond', increment: 1 };\n    case 0:\n      return { precision, unit: 'second', increment: 1 };\n    case 1:\n    case 2:\n    case 3:\n      return { precision, unit: 'millisecond', increment: 10 ** (3 - precision) };\n    case 4:\n    case 5:\n    case 6:\n      return { precision, unit: 'microsecond', increment: 10 ** (6 - precision) };\n    case 7:\n    case 8:\n    case 9:\n      return { precision, unit: 'nanosecond', increment: 10 ** (9 - precision) };\n    default:\n      throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${precision}`);\n  }\n}\n\nexport const REQUIRED = Symbol('~required~');\n\ninterface TemporalUnitOptionsBag {\n  smallestUnit?: Temporal.PluralUnit<Temporal.DateTimeUnit> | Temporal.DateTimeUnit;\n  largestUnit?: Temporal.PluralUnit<Temporal.DateTimeUnit> | Temporal.DateTimeUnit | 'auto';\n  unit?: Temporal.PluralUnit<Temporal.DateTimeUnit> | Temporal.DateTimeUnit;\n}\ntype UnitTypeMapping = {\n  date: Temporal.DateUnit;\n  time: Temporal.TimeUnit;\n  datetime: Temporal.DateTimeUnit;\n};\n// This type specifies the allowed defaults for each unit key type.\ntype AllowedGetTemporalUnitDefaultValues = {\n  smallestUnit: undefined;\n  largestUnit: 'auto' | undefined;\n  unit: undefined;\n};\n\nexport function GetTemporalUnit<\n  U extends keyof TemporalUnitOptionsBag,\n  T extends keyof UnitTypeMapping,\n  D extends typeof REQUIRED | UnitTypeMapping[T] | AllowedGetTemporalUnitDefaultValues[U],\n  R extends Exclude<D, typeof REQUIRED> | UnitTypeMapping[T]\n>(options: TemporalUnitOptionsBag, key: U, unitGroup: T, requiredOrDefault: D): R;\nexport function GetTemporalUnit<\n  U extends keyof TemporalUnitOptionsBag,\n  T extends keyof UnitTypeMapping,\n  D extends typeof REQUIRED | UnitTypeMapping[T] | AllowedGetTemporalUnitDefaultValues[U],\n  E extends 'auto' | Temporal.DateTimeUnit,\n  R extends UnitTypeMapping[T] | Exclude<D, typeof REQUIRED> | E\n>(options: TemporalUnitOptionsBag, key: U, unitGroup: T, requiredOrDefault: D, extraValues: ReadonlyArray<E>): R;\n// This signature of the function is NOT used in type-checking, so restricting\n// the default value via generic binding like the other overloads isn't\n// necessary.\nexport function GetTemporalUnit<\n  T extends keyof UnitTypeMapping,\n  D extends typeof REQUIRED | UnitTypeMapping[T] | 'auto' | undefined,\n  E extends 'auto' | Temporal.DateTimeUnit,\n  R extends UnitTypeMapping[T] | Exclude<D, typeof REQUIRED> | E\n>(\n  options: TemporalUnitOptionsBag,\n  key: keyof typeof options,\n  unitGroup: T,\n  requiredOrDefault: D,\n  extraValues: ReadonlyArray<E> | never[] = []\n): R {\n  const allowedSingular: Array<Temporal.DateTimeUnit | 'auto'> = [];\n  for (const [, singular, category] of SINGULAR_PLURAL_UNITS) {\n    if (unitGroup === 'datetime' || unitGroup === category) {\n      allowedSingular.push(singular);\n    }\n  }\n  allowedSingular.push(...extraValues);\n  let defaultVal: typeof REQUIRED | Temporal.DateTimeUnit | 'auto' | undefined = requiredOrDefault;\n  if (defaultVal === REQUIRED) {\n    defaultVal = undefined;\n  } else if (defaultVal !== undefined) {\n    allowedSingular.push(defaultVal);\n  }\n  const allowedValues: Array<Temporal.DateTimeUnit | Temporal.PluralUnit<Temporal.DateTimeUnit> | 'auto'> = [\n    ...allowedSingular\n  ];\n  for (const singular of allowedSingular) {\n    const plural = PLURAL_FOR.get(singular as Parameters<typeof PLURAL_FOR.get>[0]);\n    if (plural !== undefined) allowedValues.push(plural);\n  }\n  let retval = GetOption(options, key, allowedValues, defaultVal);\n  if (retval === undefined && requiredOrDefault === REQUIRED) {\n    throw new RangeError(`${key} is required`);\n  }\n  // Coerce any plural units into their singular form\n  if (SINGULAR_FOR.has(retval as Temporal.PluralUnit<Temporal.DateTimeUnit>)) {\n    // We just has-checked this, but tsc doesn't understand that.\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    return SINGULAR_FOR.get(retval as Temporal.PluralUnit<Temporal.DateTimeUnit>)! as R;\n  }\n  return retval as R;\n}\n\nexport function ToRelativeTemporalObject(options: {\n  relativeTo?:\n    | Temporal.ZonedDateTime\n    | Temporal.PlainDateTime\n    | Temporal.ZonedDateTimeLike\n    | Temporal.PlainDateTimeLike\n    | string\n    | undefined;\n}): Temporal.ZonedDateTime | Temporal.PlainDate | undefined {\n  const relativeTo = options.relativeTo;\n  if (relativeTo === undefined) return relativeTo;\n\n  let offsetBehaviour: OffsetBehaviour = 'option';\n  let matchMinutes = false;\n  let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, timeZone, offset;\n  if (IsObject(relativeTo)) {\n    if (IsTemporalZonedDateTime(relativeTo) || IsTemporalDate(relativeTo)) return relativeTo;\n    if (IsTemporalDateTime(relativeTo)) return TemporalDateTimeToDate(relativeTo);\n    calendar = GetTemporalCalendarSlotValueWithISODefault(relativeTo);\n    const fieldNames = CalendarFields(calendar, [\n      'day',\n      'hour',\n      'microsecond',\n      'millisecond',\n      'minute',\n      'month',\n      'monthCode',\n      'nanosecond',\n      'second',\n      'year'\n    ] as const);\n    type FieldNamesWithTimeZoneAndOffset = ArrayWithNewKeys<typeof fieldNames, 'timeZone' | 'offset'>;\n    (fieldNames as FieldNamesWithTimeZoneAndOffset).push('timeZone', 'offset');\n    const fields = PrepareTemporalFields(relativeTo, fieldNames, []);\n    const dateOptions = ObjectCreate(null) as Temporal.AssignmentOptions;\n    dateOptions.overflow = 'constrain';\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(\n      calendar,\n      fields,\n      dateOptions\n    ));\n    offset = fields.offset;\n    if (offset === undefined) offsetBehaviour = 'wall';\n    timeZone = fields.timeZone;\n    if (timeZone !== undefined) timeZone = ToTemporalTimeZoneSlotValue(timeZone);\n  } else {\n    let ianaName, z;\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, ianaName, offset, z } =\n      ParseISODateTime(ToString(relativeTo)));\n    if (ianaName) {\n      timeZone = ToTemporalTimeZoneSlotValue(ianaName);\n      if (z) {\n        offsetBehaviour = 'exact';\n      } else if (!offset) {\n        offsetBehaviour = 'wall';\n      }\n      matchMinutes = true;\n    } else if (z) {\n      throw new RangeError(\n        'Z designator not supported for PlainDate relativeTo; either remove the Z or add a bracketed time zone'\n      );\n    }\n    if (!calendar) calendar = 'iso8601';\n    if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n    calendar = ASCIILowercase(calendar);\n  }\n  if (timeZone === undefined) return CreateTemporalDate(year, month, day, calendar);\n  // If offset is missing here, then offsetBehavior will never be be 'option'.\n  assertExists(offset);\n  const offsetNs = offsetBehaviour === 'option' ? ParseTimeZoneOffsetString(offset) : 0;\n  const epochNanoseconds = InterpretISODateTimeOffset(\n    year,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond,\n    offsetBehaviour,\n    offsetNs,\n    timeZone,\n    'compatible',\n    'reject',\n    matchMinutes\n  );\n  return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\n\nexport function DefaultTemporalLargestUnit(\n  years: number,\n  months: number,\n  weeks: number,\n  days: number,\n  hours: number,\n  minutes: number,\n  seconds: number,\n  milliseconds: number,\n  microseconds: number,\n  nanoseconds: number\n): Temporal.DateTimeUnit {\n  for (const [prop, v] of [\n    ['years', years],\n    ['months', months],\n    ['weeks', weeks],\n    ['days', days],\n    ['hours', hours],\n    ['minutes', minutes],\n    ['seconds', seconds],\n    ['milliseconds', milliseconds],\n    ['microseconds', microseconds],\n    ['nanoseconds', nanoseconds]\n  ] as const) {\n    if (v !== 0) {\n      // All the above keys are definitely in SINGULAR_FOR\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      return SINGULAR_FOR.get(prop)!;\n    }\n  }\n  return 'nanosecond';\n}\n\nexport function LargerOfTwoTemporalUnits<T1 extends Temporal.DateTimeUnit, T2 extends Temporal.DateTimeUnit>(\n  unit1: T1,\n  unit2: T2\n) {\n  if (UNITS_DESCENDING.indexOf(unit1) > UNITS_DESCENDING.indexOf(unit2)) return unit2;\n  return unit1;\n}\n\ntype FieldCompleteness = 'complete' | 'partial';\ninterface FieldPrepareOptions {\n  emptySourceErrorMessage: string;\n}\n\n// Returns all potential owners from all Temporal Like-types for a given union\n// of keys in K.\n// e.g.\n// Owner<'nanosecond'> => PlainDateTimeLike | ZonedDateTimeLike | PlainDateTimeLike | ZonedDateTimeLike\n// Owner<'nanoseconds'> => Duration (the only type with plural keys)\ntype Owner<K extends AnyTemporalKey> =\n  // Conditional typing maps over all of the types given in AnyTemporalLikeType\n  // union\n  K extends unknown ? OwnerOf<K, AnyTemporalLikeType> : 'ThisShouldNeverHappen';\n\n// Returns T iff T has K as all of the key(s) (even if those keys are optional\n// in T), never otherwise. This is a private type for use only in the Owner type\n// above.\ntype OwnerOf<K extends AnyTemporalKey, T> =\n  // Distribute the union before passing to Required\n  // Without distributing, this is\n  // Required<ZonedDateTimeLike | DurationLike> extends Record\n  // vs (with distribution)\n  // Required<ZonedDateTimeLike> extends Record<....> | Required<DurationLike> extends Record<....>\n  T extends unknown\n    ? // All the keys in the Like-types are optional, so in order for them to\n      // 'extend Record<K,...>', where K indicates the required fields, we pass T\n      // through Required to make all the keys non-optional.\n      // Note this doesn't work the other way around: using Partial<Record<K, ..>>\n      // will always be extended by any object (as all the keys are optional).\n      Required<T> extends Record<K, unknown>\n      ? T\n      : // never is the 'identity' type for unions - nothing will be added or\n        // removed from the union.\n        never\n    : 'ThisShouldNeverHappen';\n\ntype Prop<T, K> = T extends unknown ? (K extends keyof T ? T[K] : undefined) : 'ThisShouldNeverHappen';\n\n// Resolve copies the keys and values of a given object type so that TS will\n// stop using type names in error messages / autocomplete. Generally, those\n// names can be more useful, but sometimes having the primitive object shape is\n// significantly easier to reason about (e.g. deeply-nested types).\n// Resolve is an identity function for function types.\ntype Resolve<T> =\n  // Re-mapping doesn't work very well for functions, so exclude them\n  T extends (...args: never[]) => unknown\n    ? T\n    : // Re-map all the keys in T to the same value. This forces TS into no longer\n      // using type aliases, etc.\n      { [K in keyof T]: T[K] };\n\ntype FieldObjectFromOwners<OwnerT, FieldKeys extends AnyTemporalKey> = Resolve<\n  // The resulting object type contains:\n  // - All keys in FieldKeys, which are required properties and their values\n  //   don't include undefined.\n  // - All the other keys in OwnerT that aren't in FieldKeys, which are optional\n  //   properties and their value types explicitly include undefined.\n  {\n    -readonly [k in FieldKeys]: Exclude<Prop<OwnerT, k>, undefined>;\n  } & {\n    -readonly [k in Exclude<Keys<OwnerT>, FieldKeys>]?: Prop<OwnerT, k> | undefined;\n  }\n>;\n\ntype PrepareTemporalFieldsReturn<\n  FieldKeys extends AnyTemporalKey,\n  RequiredFieldsOpt extends ReadonlyArray<FieldKeys> | FieldCompleteness,\n  OwnerT extends Owner<FieldKeys>\n> = RequiredFieldsOpt extends 'partial' ? Partial<OwnerT> : FieldObjectFromOwners<OwnerT, FieldKeys>;\nexport function PrepareTemporalFields<\n  FieldKeys extends AnyTemporalKey,\n  // Constrains the Required keys to be a subset of the given field keys\n  // This could have been written directly into the parameter type, but that\n  // causes an unintended effect where the required fields are added to the list\n  // of field keys, even if that key isn't present in 'fields'.\n  // RequiredFieldKeys extends FieldKeys,\n  RequiredFields extends ReadonlyArray<FieldKeys> | FieldCompleteness\n>(\n  bag: Partial<Record<FieldKeys, unknown>>,\n  fields: Array<FieldKeys>,\n  requiredFields: RequiredFields,\n  { emptySourceErrorMessage }: FieldPrepareOptions = { emptySourceErrorMessage: 'no supported properties found' }\n): PrepareTemporalFieldsReturn<FieldKeys, RequiredFields, Owner<FieldKeys>> {\n  const result: Partial<Record<AnyTemporalKey, unknown>> = ObjectCreate(null);\n  let any = false;\n  fields.sort();\n  for (const property of fields) {\n    let value = bag[property];\n    if (value !== undefined) {\n      any = true;\n      if (BUILTIN_CASTS.has(property)) {\n        // We just has-checked this map access, so there will definitely be a\n        // value.\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        value = BUILTIN_CASTS.get(property)!(value);\n      }\n      result[property] = value;\n    } else if (requiredFields !== 'partial') {\n      // TODO: using .call in this way is not correctly type-checked by tsc.\n      // We might need a type-safe Call wrapper?\n      if (ArrayIncludes.call(requiredFields, property)) {\n        throw new TypeError(`required property '${property}' missing or undefined`);\n      }\n      value = BUILTIN_DEFAULTS.get(property);\n      result[property] = value;\n    }\n  }\n  if (requiredFields === 'partial' && !any) {\n    throw new TypeError(emptySourceErrorMessage);\n  }\n  return result as unknown as PrepareTemporalFieldsReturn<FieldKeys, RequiredFields, Owner<FieldKeys>>;\n}\n\ninterface TimeRecord {\n  hour?: number;\n  minute?: number;\n  second?: number;\n  microsecond?: number;\n  millisecond?: number;\n  nanosecond?: number;\n}\nexport function ToTemporalTimeRecord(bag: Partial<Record<keyof TimeRecord, string | number>>): Required<TimeRecord>;\nexport function ToTemporalTimeRecord(\n  bag: Partial<Record<keyof TimeRecord, string | number | undefined>>,\n  completeness: 'partial'\n): Partial<TimeRecord>;\nexport function ToTemporalTimeRecord(\n  bag: Partial<Record<keyof TimeRecord, string | number>>,\n  completeness: 'complete'\n): Required<TimeRecord>;\nexport function ToTemporalTimeRecord(\n  bag: Partial<Record<keyof TimeRecord, string | number | undefined>>,\n  completeness: FieldCompleteness = 'complete'\n): Partial<TimeRecord> {\n  // NOTE: Field order is sorted to make the sort in PrepareTemporalFields more efficient.\n  const fields: (keyof TimeRecord)[] = ['hour', 'microsecond', 'millisecond', 'minute', 'nanosecond', 'second'];\n  const partial = PrepareTemporalFields(bag, fields, 'partial', { emptySourceErrorMessage: 'invalid time-like' });\n  const result: Partial<TimeRecord> = {};\n  for (const field of fields) {\n    const valueDesc = ObjectGetOwnPropertyDescriptor(partial, field);\n    if (valueDesc !== undefined) {\n      result[field] = valueDesc.value;\n    } else if (completeness === 'complete') {\n      result[field] = 0;\n    }\n  }\n  return result;\n}\n\nexport function ToTemporalDate(\n  itemParam: PlainDateParams['from'][0],\n  options?: PlainDateParams['from'][1]\n): Temporal.PlainDate {\n  let item = itemParam;\n  if (IsObject(item)) {\n    if (IsTemporalDate(item)) return item;\n    if (IsTemporalZonedDateTime(item)) {\n      ToTemporalOverflow(options); // validate and ignore\n      item = GetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n    }\n    if (IsTemporalDateTime(item)) {\n      ToTemporalOverflow(options); // validate and ignore\n      return CreateTemporalDate(\n        GetSlot(item, ISO_YEAR),\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, ISO_DAY),\n        GetSlot(item, CALENDAR)\n      );\n    }\n    const calendar = GetTemporalCalendarSlotValueWithISODefault(item);\n    const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year'] as const);\n    const fields = PrepareTemporalFields(item, fieldNames, []);\n    return CalendarDateFromFields(calendar, fields, options);\n  }\n  ToTemporalOverflow(options); // validate and ignore\n  let { year, month, day, calendar, z } = ParseTemporalDateString(ToString(item));\n  if (z) throw new RangeError('Z designator not supported for PlainDate');\n  if (!calendar) calendar = 'iso8601';\n  if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n  calendar = ASCIILowercase(calendar);\n  return CreateTemporalDate(year, month, day, calendar);\n}\n\nexport function InterpretTemporalDateTimeFields(\n  calendar: CalendarSlot,\n  fields: PrimitiveFieldsOf<Temporal.PlainDateTimeLike> & Parameters<typeof CalendarDateFromFields>[1],\n  options?: Temporal.AssignmentOptions\n) {\n  let { hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(fields);\n  const overflow = ToTemporalOverflow(options);\n  const date = CalendarDateFromFields(calendar, fields, options);\n  const year = GetSlot(date, ISO_YEAR);\n  const month = GetSlot(date, ISO_MONTH);\n  const day = GetSlot(date, ISO_DAY);\n  ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond,\n    overflow\n  ));\n  return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nexport function ToTemporalDateTime(item: PlainDateTimeParams['from'][0], options?: PlainDateTimeParams['from'][1]) {\n  let year: number,\n    month: number,\n    day: number,\n    hour: number,\n    minute: number,\n    second: number,\n    millisecond: number,\n    microsecond: number,\n    nanosecond: number,\n    calendar;\n  if (IsObject(item)) {\n    if (IsTemporalDateTime(item)) return item;\n    if (IsTemporalZonedDateTime(item)) {\n      ToTemporalOverflow(options); // validate and ignore\n      return GetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n    }\n    if (IsTemporalDate(item)) {\n      ToTemporalOverflow(options); // validate and ignore\n      return CreateTemporalDateTime(\n        GetSlot(item, ISO_YEAR),\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, ISO_DAY),\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        GetSlot(item, CALENDAR)\n      );\n    }\n\n    calendar = GetTemporalCalendarSlotValueWithISODefault(item);\n    const fieldNames = CalendarFields(calendar, [\n      'day',\n      'hour',\n      'microsecond',\n      'millisecond',\n      'minute',\n      'month',\n      'monthCode',\n      'nanosecond',\n      'second',\n      'year'\n    ] as const);\n    const fields = PrepareTemporalFields(item, fieldNames, []);\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(\n      calendar,\n      fields,\n      options\n    ));\n  } else {\n    ToTemporalOverflow(options); // validate and ignore\n    let z;\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, z } =\n      ParseTemporalDateTimeString(ToString(item)));\n    if (z) throw new RangeError('Z designator not supported for PlainDateTime');\n    RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n    if (!calendar) calendar = 'iso8601';\n    if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n    calendar = ASCIILowercase(calendar);\n  }\n  return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\n\nexport function ToTemporalDuration(item: DurationParams['from'][0]) {\n  if (IsTemporalDuration(item)) return item;\n  let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n    ToTemporalDurationRecord(item);\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  return new TemporalDuration(\n    years,\n    months,\n    weeks,\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds\n  );\n}\n\nexport function ToTemporalInstant(item: InstantParams['from'][0]) {\n  if (IsTemporalInstant(item)) return item;\n  if (IsTemporalZonedDateTime(item)) {\n    const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n    return new TemporalInstant(GetSlot(item, EPOCHNANOSECONDS));\n  }\n  const ns = ParseTemporalInstant(ToString(item));\n  const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n  return new TemporalInstant(ns);\n}\n\nexport function ToTemporalMonthDay(\n  itemParam: PlainMonthDayParams['from'][0],\n  options?: PlainMonthDayParams['from'][1]\n) {\n  let item = itemParam;\n  if (IsObject(item)) {\n    if (IsTemporalMonthDay(item)) return item;\n    let calendar: CalendarSlot, calendarAbsent: boolean;\n    if (HasSlot(item, CALENDAR)) {\n      calendar = GetSlot(item, CALENDAR);\n      calendarAbsent = false;\n    } else {\n      let calendarFromItem = item.calendar;\n      calendarAbsent = calendarFromItem === undefined;\n      if (calendarFromItem === undefined) calendarFromItem = 'iso8601';\n      calendar = ToTemporalCalendarSlotValue(calendarFromItem);\n    }\n    // HasSlot above adjusts the type of 'item' to include\n    // TypesWithCalendarUnits, which causes type-inference failures below.\n    // This is probably indicative of problems with HasSlot's typing.\n    const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year'] as const);\n    const fields = PrepareTemporalFields(item, fieldNames, []);\n    // Callers who omit the calendar are not writing calendar-independent\n    // code. In that case, `monthCode`/`year` can be omitted; `month` and\n    // `day` are sufficient. Add a `year` to satisfy calendar validation.\n    if (calendarAbsent && fields.month !== undefined && fields.monthCode === undefined && fields.year === undefined) {\n      fields.year = 1972;\n    }\n    return CalendarMonthDayFromFields(calendar, fields, options);\n  }\n\n  ToTemporalOverflow(options); // validate and ignore\n  let { month, day, referenceISOYear, calendar } = ParseTemporalMonthDayString(ToString(item));\n  if (calendar === undefined) calendar = 'iso8601';\n  if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n  calendar = ASCIILowercase(calendar);\n\n  if (referenceISOYear === undefined) {\n    RejectISODate(1972, month, day);\n    return CreateTemporalMonthDay(month, day, calendar);\n  }\n  const result = CreateTemporalMonthDay(month, day, calendar, referenceISOYear);\n  return CalendarMonthDayFromFields(calendar, result);\n}\n\nexport function ToTemporalTime(\n  itemParam: PlainTimeParams['from'][0],\n  overflow: NonNullable<PlainTimeParams['from'][1]>['overflow'] = 'constrain'\n) {\n  let item = itemParam;\n  let hour, minute, second, millisecond, microsecond, nanosecond;\n  if (IsObject(item)) {\n    if (IsTemporalTime(item)) return item;\n    if (IsTemporalZonedDateTime(item)) {\n      item = GetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n    }\n    if (IsTemporalDateTime(item)) {\n      const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%');\n      return new TemporalPlainTime(\n        GetSlot(item, ISO_HOUR),\n        GetSlot(item, ISO_MINUTE),\n        GetSlot(item, ISO_SECOND),\n        GetSlot(item, ISO_MILLISECOND),\n        GetSlot(item, ISO_MICROSECOND),\n        GetSlot(item, ISO_NANOSECOND)\n      );\n    }\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(item));\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      overflow\n    ));\n  } else {\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = ParseTemporalTimeString(ToString(item)));\n    RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n  }\n  const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%');\n  return new TemporalPlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\n\nexport function ToTemporalYearMonth(\n  item: PlainYearMonthParams['from'][0],\n  options?: PlainYearMonthParams['from'][1]\n): Temporal.PlainYearMonth {\n  if (IsObject(item)) {\n    if (IsTemporalYearMonth(item)) return item;\n    const calendar = GetTemporalCalendarSlotValueWithISODefault(item);\n    const fieldNames = CalendarFields(calendar, ['month', 'monthCode', 'year'] as const);\n    const fields = PrepareTemporalFields(item, fieldNames, []);\n    return CalendarYearMonthFromFields(calendar, fields, options);\n  }\n\n  ToTemporalOverflow(options); // validate and ignore\n  let { year, month, referenceISODay, calendar } = ParseTemporalYearMonthString(ToString(item));\n  if (calendar === undefined) calendar = 'iso8601';\n  if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n  calendar = ASCIILowercase(calendar);\n\n  if (referenceISODay === undefined) {\n    RejectISODate(year, month, 1);\n    return CreateTemporalYearMonth(year, month, calendar);\n  }\n  const result = CreateTemporalYearMonth(year, month, calendar, referenceISODay);\n  return CalendarYearMonthFromFields(calendar, result);\n}\n\ntype OffsetBehaviour = 'wall' | 'exact' | 'option';\n\nexport function InterpretISODateTimeOffset(\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number,\n  offsetBehaviour: OffsetBehaviour,\n  offsetNs: number,\n  timeZone: string | Temporal.TimeZoneProtocol,\n  disambiguation: NonNullable<Temporal.ToInstantOptions['disambiguation']>,\n  offsetOpt: Temporal.OffsetDisambiguationOptions['offset'],\n  matchMinute: boolean\n) {\n  const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n  const dt = new DateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n\n  if (offsetBehaviour === 'wall' || offsetOpt === 'ignore') {\n    // Simple case: ISO string without a TZ offset (or caller wants to ignore\n    // the offset), so just convert DateTime to Instant in the given time zone\n    const instant = GetInstantFor(timeZone, dt, disambiguation);\n    return GetSlot(instant, EPOCHNANOSECONDS);\n  }\n\n  // The caller wants the offset to always win ('use') OR the caller is OK\n  // with the offset winning ('prefer' or 'reject') as long as it's valid\n  // for this timezone and date/time.\n  if (offsetBehaviour === 'exact' || offsetOpt === 'use') {\n    // Calculate the instant for the input's date/time and offset\n    const epochNs = GetUTCEpochNanoseconds(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond\n    );\n    if (epochNs === null) throw new RangeError('ZonedDateTime outside of supported range');\n    return JSBI.subtract(epochNs, JSBI.BigInt(offsetNs));\n  }\n\n  // \"prefer\" or \"reject\"\n  const possibleInstants = GetPossibleInstantsFor(timeZone, dt);\n  for (const candidate of possibleInstants) {\n    const candidateOffset = GetOffsetNanosecondsFor(timeZone, candidate);\n    const roundedCandidateOffset = JSBI.toNumber(\n      RoundNumberToIncrement(JSBI.BigInt(candidateOffset), MINUTE_NANOS, 'halfExpand')\n    );\n    if (candidateOffset === offsetNs || (matchMinute && roundedCandidateOffset === offsetNs)) {\n      return GetSlot(candidate, EPOCHNANOSECONDS);\n    }\n  }\n\n  // the user-provided offset doesn't match any instants for this time\n  // zone and date/time.\n  if (offsetOpt === 'reject') {\n    const offsetStr = FormatTimeZoneOffsetString(offsetNs);\n    const timeZoneString = IsTemporalTimeZone(timeZone) ? GetSlot(timeZone, TIMEZONE_ID) : 'time zone';\n    // The tsc emit for this line rewrites to invoke the PlainDateTime's valueOf method, NOT\n    // toString (which is invoked by Node when using template literals directly).\n    // See https://github.com/microsoft/TypeScript/issues/39744 for the proposed fix in tsc emit\n    throw new RangeError(`Offset ${offsetStr} is invalid for ${dt.toString()} in ${timeZoneString}`);\n  }\n  // fall through: offsetOpt === 'prefer', but the offset doesn't match\n  // so fall back to use the time zone instead.\n  const instant = DisambiguatePossibleInstants(possibleInstants, timeZone, dt, disambiguation);\n  return GetSlot(instant, EPOCHNANOSECONDS);\n}\n\nexport function ToTemporalZonedDateTime(\n  item: ZonedDateTimeParams['from'][0],\n  options?: ZonedDateTimeParams['from'][1]\n) {\n  let year: number,\n    month: number,\n    day: number,\n    hour: number,\n    minute: number,\n    second: number,\n    millisecond: number,\n    microsecond: number,\n    nanosecond: number,\n    timeZone,\n    offset: string | undefined,\n    calendar: string | Temporal.CalendarProtocol | undefined;\n  let disambiguation: NonNullable<Temporal.ToInstantOptions['disambiguation']>;\n  let offsetOpt: NonNullable<Temporal.OffsetDisambiguationOptions['offset']>;\n  let matchMinute = false;\n  let offsetBehaviour: OffsetBehaviour = 'option';\n  if (IsObject(item)) {\n    if (IsTemporalZonedDateTime(item)) return item;\n    calendar = GetTemporalCalendarSlotValueWithISODefault(item);\n    const fieldNames: (keyof Temporal.ZonedDateTimeLike)[] = CalendarFields(calendar, [\n      'day',\n      'hour',\n      'microsecond',\n      'millisecond',\n      'minute',\n      'month',\n      'monthCode',\n      'nanosecond',\n      'second',\n      'year'\n    ] as const);\n    fieldNames.push('timeZone', 'offset');\n    const fields = PrepareTemporalFields(item, fieldNames, ['timeZone']);\n    timeZone = ToTemporalTimeZoneSlotValue(fields.timeZone);\n    offset = fields.offset;\n    if (offset === undefined) {\n      offsetBehaviour = 'wall';\n    }\n    disambiguation = ToTemporalDisambiguation(options);\n    offsetOpt = ToTemporalOffset(options, 'reject');\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(\n      calendar,\n      fields,\n      options\n    ));\n  } else {\n    let ianaName, z;\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, ianaName, offset, z, calendar } =\n      ParseTemporalZonedDateTimeString(ToString(item)));\n    timeZone = ToTemporalTimeZoneSlotValue(ianaName);\n    if (z) {\n      offsetBehaviour = 'exact';\n    } else if (!offset) {\n      offsetBehaviour = 'wall';\n    }\n    if (!calendar) calendar = 'iso8601';\n    if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n    calendar = ASCIILowercase(calendar);\n    matchMinute = true; // ISO strings may specify offset with less precision\n    disambiguation = ToTemporalDisambiguation(options);\n    offsetOpt = ToTemporalOffset(options, 'reject');\n    ToTemporalOverflow(options); // validate and ignore\n  }\n  let offsetNs = 0;\n  // The code above guarantees that if offsetBehaviour === 'option', then\n  // `offset` is not undefined.\n  if (offsetBehaviour === 'option') offsetNs = ParseTimeZoneOffsetString(offset as string);\n  const epochNanoseconds = InterpretISODateTimeOffset(\n    year,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond,\n    offsetBehaviour,\n    offsetNs,\n    timeZone,\n    disambiguation,\n    offsetOpt,\n    matchMinute\n  );\n  return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\n\nexport function CreateTemporalDateSlots(\n  result: Temporal.PlainDate,\n  isoYear: number,\n  isoMonth: number,\n  isoDay: number,\n  calendar: CalendarSlot\n) {\n  RejectISODate(isoYear, isoMonth, isoDay);\n  RejectDateRange(isoYear, isoMonth, isoDay);\n\n  CreateSlots(result);\n  SetSlot(result, ISO_YEAR, isoYear);\n  SetSlot(result, ISO_MONTH, isoMonth);\n  SetSlot(result, ISO_DAY, isoDay);\n  SetSlot(result, CALENDAR, calendar);\n  SetSlot(result, DATE_BRAND, true);\n\n  if (DEBUG) {\n    ObjectDefineProperty(result, '_repr_', {\n      value: `${result[Symbol.toStringTag]} <${TemporalDateToString(result)}>`,\n      writable: false,\n      enumerable: false,\n      configurable: false\n    });\n  }\n}\n\nexport function CreateTemporalDate(\n  isoYear: number,\n  isoMonth: number,\n  isoDay: number,\n  calendar: CalendarSlot = 'iso8601'\n) {\n  const TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%');\n  const result = ObjectCreate(TemporalPlainDate.prototype);\n  CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar);\n  return result;\n}\n\nexport function CreateTemporalDateTimeSlots(\n  result: Temporal.PlainDateTime,\n  isoYear: number,\n  isoMonth: number,\n  isoDay: number,\n  h: number,\n  min: number,\n  s: number,\n  ms: number,\n  µs: number,\n  ns: number,\n  calendar: CalendarSlot\n) {\n  RejectDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns);\n  RejectDateTimeRange(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns);\n\n  CreateSlots(result);\n  SetSlot(result, ISO_YEAR, isoYear);\n  SetSlot(result, ISO_MONTH, isoMonth);\n  SetSlot(result, ISO_DAY, isoDay);\n  SetSlot(result, ISO_HOUR, h);\n  SetSlot(result, ISO_MINUTE, min);\n  SetSlot(result, ISO_SECOND, s);\n  SetSlot(result, ISO_MILLISECOND, ms);\n  SetSlot(result, ISO_MICROSECOND, µs);\n  SetSlot(result, ISO_NANOSECOND, ns);\n  SetSlot(result, CALENDAR, calendar);\n\n  if (DEBUG) {\n    Object.defineProperty(result, '_repr_', {\n      value: `${result[Symbol.toStringTag]} <${TemporalDateTimeToString(result, 'auto')}>`,\n      writable: false,\n      enumerable: false,\n      configurable: false\n    });\n  }\n}\n\nexport function CreateTemporalDateTime(\n  isoYear: number,\n  isoMonth: number,\n  isoDay: number,\n  h: number,\n  min: number,\n  s: number,\n  ms: number,\n  µs: number,\n  ns: number,\n  calendar: CalendarSlot = 'iso8601'\n) {\n  const TemporalPlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n  const result = ObjectCreate(TemporalPlainDateTime.prototype);\n  CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar);\n  return result as Temporal.PlainDateTime;\n}\n\nexport function CreateTemporalMonthDaySlots(\n  result: Temporal.PlainMonthDay,\n  isoMonth: number,\n  isoDay: number,\n  calendar: CalendarSlot,\n  referenceISOYear: number\n) {\n  RejectISODate(referenceISOYear, isoMonth, isoDay);\n  RejectDateRange(referenceISOYear, isoMonth, isoDay);\n\n  CreateSlots(result);\n  SetSlot(result, ISO_MONTH, isoMonth);\n  SetSlot(result, ISO_DAY, isoDay);\n  SetSlot(result, ISO_YEAR, referenceISOYear);\n  SetSlot(result, CALENDAR, calendar);\n  SetSlot(result, MONTH_DAY_BRAND, true);\n\n  if (DEBUG) {\n    Object.defineProperty(result, '_repr_', {\n      value: `${result[Symbol.toStringTag]} <${TemporalMonthDayToString(result)}>`,\n      writable: false,\n      enumerable: false,\n      configurable: false\n    });\n  }\n}\n\nexport function CreateTemporalMonthDay(\n  isoMonth: number,\n  isoDay: number,\n  calendar: CalendarSlot = 'iso8601',\n  referenceISOYear = 1972\n) {\n  const TemporalPlainMonthDay = GetIntrinsic('%Temporal.PlainMonthDay%');\n  const result = ObjectCreate(TemporalPlainMonthDay.prototype);\n  CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear);\n  return result;\n}\n\nexport function CreateTemporalYearMonthSlots(\n  result: Temporal.PlainYearMonth,\n  isoYear: number,\n  isoMonth: number,\n  calendar: CalendarSlot,\n  referenceISODay: number\n) {\n  RejectISODate(isoYear, isoMonth, referenceISODay);\n  RejectYearMonthRange(isoYear, isoMonth);\n\n  CreateSlots(result);\n  SetSlot(result, ISO_YEAR, isoYear);\n  SetSlot(result, ISO_MONTH, isoMonth);\n  SetSlot(result, ISO_DAY, referenceISODay);\n  SetSlot(result, CALENDAR, calendar);\n  SetSlot(result, YEAR_MONTH_BRAND, true);\n\n  if (DEBUG) {\n    Object.defineProperty(result, '_repr_', {\n      value: `${result[Symbol.toStringTag]} <${TemporalYearMonthToString(result)}>`,\n      writable: false,\n      enumerable: false,\n      configurable: false\n    });\n  }\n}\n\nexport function CreateTemporalYearMonth(\n  isoYear: number,\n  isoMonth: number,\n  calendar: CalendarSlot = 'iso8601',\n  referenceISODay = 1\n) {\n  const TemporalPlainYearMonth = GetIntrinsic('%Temporal.PlainYearMonth%');\n  const result = ObjectCreate(TemporalPlainYearMonth.prototype);\n  CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay);\n  return result;\n}\n\nexport function CreateTemporalZonedDateTimeSlots(\n  result: Temporal.ZonedDateTime,\n  epochNanoseconds: JSBI,\n  timeZone: string | Temporal.TimeZoneProtocol,\n  calendar: CalendarSlot\n) {\n  ValidateEpochNanoseconds(epochNanoseconds);\n\n  CreateSlots(result);\n  SetSlot(result, EPOCHNANOSECONDS, epochNanoseconds);\n  SetSlot(result, TIME_ZONE, timeZone);\n  SetSlot(result, CALENDAR, calendar);\n\n  const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n  const instant = new TemporalInstant(GetSlot(result, EPOCHNANOSECONDS));\n  SetSlot(result, INSTANT, instant);\n\n  if (DEBUG) {\n    Object.defineProperty(result, '_repr_', {\n      value: `${result[Symbol.toStringTag]} <${TemporalZonedDateTimeToString(result, 'auto')}>`,\n      writable: false,\n      enumerable: false,\n      configurable: false\n    });\n  }\n}\n\nexport function CreateTemporalZonedDateTime(\n  epochNanoseconds: JSBI,\n  timeZone: string | Temporal.TimeZoneProtocol,\n  calendar: CalendarSlot = 'iso8601'\n) {\n  const TemporalZonedDateTime = GetIntrinsic('%Temporal.ZonedDateTime%');\n  const result = ObjectCreate(TemporalZonedDateTime.prototype);\n  CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar);\n  return result;\n}\n\n// TODO: should (can?) we make this generic so the field names are checked\n// against the type that the calendar is a property of?\nexport function CalendarFields<K extends AnyTemporalKey>(calendar: CalendarSlot, fieldNamesParam: ReadonlyArray<K>) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.fields%'), calendarObj, [fieldNamesParam]) as K[];\n  }\n  const fields = GetMethod(calendar, 'fields');\n  const fieldNames = Call(fields, calendar, [fieldNamesParam]);\n  const result: K[] = [];\n  for (const name of fieldNames) {\n    if (typeof name !== 'string') throw new TypeError('bad return from calendar.fields()');\n    ArrayPrototypePush.call(result, name);\n  }\n  return result;\n}\n\nexport function CalendarMergeFields<Base extends Record<string, unknown>, ToAdd extends Record<string, unknown>>(\n  calendar: CalendarSlot,\n  fields: Base,\n  additionalFields: ToAdd\n) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.mergeFields%'), calendarObj, [\n      fields,\n      additionalFields\n    ]) as Base & ToAdd;\n  }\n  const mergeFields = GetMethod(calendar, 'mergeFields');\n  const result = Call(mergeFields, calendar, [fields, additionalFields]);\n  if (!IsObject(result)) throw new TypeError('bad return from calendar.mergeFields()');\n  return result as Base & ToAdd;\n}\n\nexport function CalendarDateAdd(\n  calendar: CalendarSlot,\n  date: CalendarProtocolParams['dateAdd'][0],\n  duration: CalendarProtocolParams['dateAdd'][1],\n  options: CalendarProtocolParams['dateAdd'][2],\n  dateAddParam?: Temporal.CalendarProtocol['dateAdd'] | undefined\n) {\n  let dateAdd = dateAddParam;\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.dateAdd%'), calendarObj, [date, duration, options]);\n  }\n  if (dateAdd === undefined) {\n    dateAdd = GetMethod(calendar, 'dateAdd');\n  }\n  const result = ReflectApply(dateAdd, calendar, [date, duration, options]);\n  if (!IsTemporalDate(result)) throw new TypeError('invalid result');\n  return result;\n}\n\nfunction CalendarDateUntil(\n  calendar: CalendarSlot,\n  date: CalendarProtocolParams['dateUntil'][0],\n  otherDate: CalendarProtocolParams['dateUntil'][1],\n  options: CalendarProtocolParams['dateUntil'][2],\n  dateUntilParam?: Temporal.CalendarProtocol['dateUntil'] | undefined\n) {\n  let dateUntil = dateUntilParam;\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.dateUntil%'), calendarObj, [date, otherDate, options]);\n  }\n  if (dateUntil === undefined) {\n    dateUntil = GetMethod(calendar, 'dateUntil');\n  }\n  const result = ReflectApply(dateUntil, calendar, [date, otherDate, options]);\n  if (!IsTemporalDuration(result)) throw new TypeError('invalid result');\n  return result;\n}\n\nexport function CalendarYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['year'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.year%'), calendarObj, [dateLike]);\n  }\n  const year = GetMethod(calendar, 'year');\n  let result = Call(year, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar year result must be an integer');\n  }\n  if (!IsIntegralNumber(result)) {\n    throw new RangeError('calendar year result must be an integer');\n  }\n  return result;\n}\n\nexport function CalendarMonth(calendar: CalendarSlot, dateLike: CalendarProtocolParams['month'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.month%'), calendarObj, [dateLike]);\n  }\n  const month = GetMethod(calendar, 'month');\n  let result = Call(month, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar month result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar month result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarMonthCode(calendar: CalendarSlot, dateLike: CalendarProtocolParams['monthCode'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.monthCode%'), calendarObj, [dateLike]);\n  }\n  const monthCode = GetMethod(calendar, 'monthCode');\n  let result = Call(monthCode, calendar, [dateLike]);\n  if (typeof result !== 'string') {\n    throw new TypeError('calendar monthCode result must be a string');\n  }\n  return result;\n}\n\nexport function CalendarDay(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.day%'), calendarObj, [dateLike]);\n  }\n  const day = GetMethod(calendar, 'day');\n  const result = Call(day, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar day result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar day result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarEra(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.era%'), calendarObj, [dateLike]);\n  }\n  const era = GetMethod(calendar, 'era');\n  let result = Call(era, calendar, [dateLike]);\n  if (result === undefined) {\n    return result;\n  }\n  if (typeof result !== 'string') {\n    throw new TypeError('calendar era result must be a string or undefined');\n  }\n  return result;\n}\n\nexport function CalendarEraYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.eraYear%'), calendarObj, [dateLike]);\n  }\n  const eraYear = GetMethod(calendar, 'eraYear');\n  let result = Call(eraYear, calendar, [dateLike]);\n  if (result === undefined) {\n    return result;\n  }\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar eraYear result must be an integer or undefined');\n  }\n  if (!IsIntegralNumber(result)) {\n    throw new RangeError('calendar eraYear result must be an integer or undefined');\n  }\n  return result;\n}\n\nexport function CalendarDayOfWeek(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.dayOfWeek%'), calendarObj, [dateLike]);\n  }\n  const dayOfWeek = GetMethod(calendar, 'dayOfWeek');\n  const result = Call(dayOfWeek, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar dayOfWeek result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar dayOfWeek result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarDayOfYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.dayOfYear%'), calendarObj, [dateLike]);\n  }\n  const dayOfYear = GetMethod(calendar, 'dayOfYear');\n  const result = Call(dayOfYear, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar dayOfYear result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar dayOfYear result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarWeekOfYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.weekOfYear%'), calendarObj, [dateLike]);\n  }\n  const weekOfYear = GetMethod(calendar, 'weekOfYear');\n  const result = Call(weekOfYear, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar weekOfYear result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar weekOfYear result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarYearOfWeek(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.yearOfWeek%'), calendarObj, [dateLike]);\n  }\n  const yearOfWeek = GetMethod(calendar, 'yearOfWeek');\n  const result = Call(yearOfWeek, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar yearOfWeek result must be an integer');\n  }\n  if (!IsIntegralNumber(result)) {\n    throw new RangeError('calendar yearOfWeek result must be an integer');\n  }\n  return result;\n}\n\nexport function CalendarDaysInWeek(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.daysInWeek%'), calendarObj, [dateLike]);\n  }\n  const daysInWeek = GetMethod(calendar, 'daysInWeek');\n  const result = Call(daysInWeek, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar daysInWeek result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar daysInWeek result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarDaysInMonth(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.daysInMonth%'), calendarObj, [dateLike]);\n  }\n  const daysInMonth = GetMethod(calendar, 'daysInMonth');\n  const result = Call(daysInMonth, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar daysInMonth result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar daysInMonth result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarDaysInYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.daysInYear%'), calendarObj, [dateLike]);\n  }\n  const daysInYear = GetMethod(calendar, 'daysInYear');\n  const result = Call(daysInYear, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar daysInYear result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar daysInYear result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarMonthsInYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.monthsInYear%'), calendarObj, [dateLike]);\n  }\n  const monthsInYear = GetMethod(calendar, 'monthsInYear');\n  const result = Call(monthsInYear, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar monthsInYear result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar monthsInYear result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarInLeapYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.inLeapYear%'), calendarObj, [dateLike]);\n  }\n  const inLeapYear = GetMethod(calendar, 'inLeapYear');\n  const result = Call(inLeapYear, calendar, [dateLike]);\n  if (typeof result !== 'boolean') {\n    throw new TypeError('calendar inLeapYear result must be a boolean');\n  }\n  return result;\n}\n\ntype MaybeCalendarProtocol = Partial<Omit<Temporal.CalendarProtocol, 'toString' | 'toJSON'>>;\nfunction ObjectImplementsTemporalCalendarProtocol(object: MaybeCalendarProtocol) {\n  if (IsTemporalCalendar(object)) return true;\n  return (\n    'dateAdd' in object &&\n    'dateFromFields' in object &&\n    'dateUntil' in object &&\n    'day' in object &&\n    'dayOfWeek' in object &&\n    'dayOfYear' in object &&\n    'daysInMonth' in object &&\n    'daysInWeek' in object &&\n    'daysInYear' in object &&\n    'fields' in object &&\n    'id' in object &&\n    'inLeapYear' in object &&\n    'mergeFields' in object &&\n    'month' in object &&\n    'monthCode' in object &&\n    'monthDayFromFields' in object &&\n    'monthsInYear' in object &&\n    'weekOfYear' in object &&\n    'year' in object &&\n    'yearMonthFromFields' in object &&\n    'yearOfWeek' in object\n  );\n}\n\nexport function ToTemporalCalendarSlotValue(calendarLike: string): string;\nexport function ToTemporalCalendarSlotValue(calendarLike: Temporal.CalendarProtocol): Temporal.CalendarProtocol;\nexport function ToTemporalCalendarSlotValue(calendarLike: Temporal.CalendarLike): string | Temporal.CalendarProtocol;\nexport function ToTemporalCalendarSlotValue(calendarLike: CalendarParams['from'][0]) {\n  if (IsObject(calendarLike)) {\n    if (HasSlot(calendarLike, CALENDAR)) return GetSlot(calendarLike, CALENDAR);\n    if (!ObjectImplementsTemporalCalendarProtocol(calendarLike)) {\n      throw new TypeError('expected a Temporal.Calendar or object implementing the Temporal.Calendar protocol');\n    }\n    return calendarLike;\n  }\n  const identifier = ToString(calendarLike);\n  if (IsBuiltinCalendar(identifier)) return ASCIILowercase(identifier);\n  let calendar;\n  try {\n    ({ calendar } = ParseISODateTime(identifier));\n  } catch {\n    try {\n      ({ calendar } = ParseTemporalYearMonthString(identifier));\n    } catch {\n      ({ calendar } = ParseTemporalMonthDayString(identifier));\n    }\n  }\n  if (!calendar) calendar = 'iso8601';\n  if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n  return ASCIILowercase(calendar);\n}\n\nfunction GetTemporalCalendarSlotValueWithISODefault(item: { calendar?: Temporal.CalendarLike }): CalendarSlot {\n  if (HasSlot(item, CALENDAR)) return GetSlot(item, CALENDAR);\n  const { calendar } = item;\n  if (calendar === undefined) return 'iso8601';\n  return ToTemporalCalendarSlotValue(calendar);\n}\n\nexport function ToTemporalCalendarIdentifier(slotValue: CalendarSlot) {\n  if (typeof slotValue === 'string') return slotValue;\n  const result = slotValue.id;\n  if (typeof result !== 'string') throw new TypeError('calendar.id should be a string');\n  return result;\n}\n\nexport function ToTemporalCalendarObject(slotValue: CalendarSlot) {\n  if (IsObject(slotValue)) return slotValue;\n  const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n  return new TemporalCalendar(slotValue);\n}\n\nexport function CalendarEquals(one: CalendarSlot, two: CalendarSlot) {\n  if (one === two) return true;\n  const cal1 = ToTemporalCalendarIdentifier(one);\n  const cal2 = ToTemporalCalendarIdentifier(two);\n  return cal1 === cal2;\n}\n\n// This operation is not in the spec, it implements the following:\n// \"If ? CalendarEquals(one, two) is false, throw a RangeError exception.\"\n// This is so that we can build an informative error message without\n// re-getting the .id properties.\nfunction ThrowIfCalendarsNotEqual(one: CalendarSlot, two: CalendarSlot, errorMessageAction: string) {\n  if (one === two) return;\n  const cal1 = ToTemporalCalendarIdentifier(one);\n  const cal2 = ToTemporalCalendarIdentifier(two);\n  if (cal1 !== cal2) {\n    throw new RangeError(`cannot ${errorMessageAction} of ${cal1} and ${cal2} calendars`);\n  }\n}\n\nexport function ConsolidateCalendars(one: CalendarSlot, two: CalendarSlot) {\n  if (one === two) return two;\n  const sOne = ToTemporalCalendarIdentifier(one);\n  const sTwo = ToTemporalCalendarIdentifier(two);\n  if (sOne === sTwo || sOne === 'iso8601') {\n    return two;\n  } else if (sTwo === 'iso8601') {\n    return one;\n  } else {\n    throw new RangeError('irreconcilable calendars');\n  }\n}\n\nexport function CalendarDateFromFields(\n  calendar: CalendarSlot,\n  fields: CalendarProtocolParams['dateFromFields'][0],\n  options?: Partial<CalendarProtocolParams['dateFromFields'][1]>,\n  dateFromFieldsParam?: Temporal.CalendarProtocol['dateFromFields']\n) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.dateFromFields%'), calendarObj, [fields, options]);\n  }\n  const dateFromFields = dateFromFieldsParam ?? GetMethod(calendar, 'dateFromFields');\n  const result = Call(dateFromFields, calendar, [fields, options]);\n  if (!IsTemporalDate(result)) throw new TypeError('invalid result');\n  return result;\n}\n\nexport function CalendarYearMonthFromFields(\n  calendar: CalendarSlot,\n  fields: CalendarProtocolParams['yearMonthFromFields'][0],\n  options?: CalendarProtocolParams['yearMonthFromFields'][1]\n) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.yearMonthFromFields%'), calendarObj, [fields, options]);\n  }\n  const yearMonthFromFields = GetMethod(calendar, 'yearMonthFromFields');\n  let result = Call(yearMonthFromFields, calendar, [fields, options]);\n  if (!IsTemporalYearMonth(result)) throw new TypeError('invalid result');\n  return result;\n}\n\nexport function CalendarMonthDayFromFields(\n  calendar: CalendarSlot,\n  fields: CalendarProtocolParams['monthDayFromFields'][0],\n  options?: CalendarProtocolParams['monthDayFromFields'][1]\n) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.monthDayFromFields%'), calendarObj, [fields, options]);\n  }\n  const monthDayFromFields = GetMethod(calendar, 'monthDayFromFields');\n  let result = Call(monthDayFromFields, calendar, [fields, options]);\n  if (!IsTemporalMonthDay(result)) throw new TypeError('invalid result');\n  return result;\n}\n\ntype MaybeTimeZoneProtocol = Partial<\n  Pick<Temporal.TimeZoneProtocol, 'getOffsetNanosecondsFor' | 'getPossibleInstantsFor'>\n>;\nfunction ObjectImplementsTemporalTimeZoneProtocol(object: MaybeTimeZoneProtocol) {\n  if (IsTemporalTimeZone(object)) return true;\n  return 'getOffsetNanosecondsFor' in object && 'getPossibleInstantsFor' in object && 'id' in object;\n}\n\nexport function ToTemporalTimeZoneSlotValue(temporalTimeZoneLike: string): string;\nexport function ToTemporalTimeZoneSlotValue(temporalTimeZoneLike: Temporal.TimeZoneProtocol): Temporal.TimeZoneProtocol;\nexport function ToTemporalTimeZoneSlotValue(\n  temporalTimeZoneLike: Temporal.TimeZoneLike\n): string | Temporal.TimeZoneProtocol;\nexport function ToTemporalTimeZoneSlotValue(temporalTimeZoneLike: TimeZoneParams['from'][0]) {\n  if (IsObject(temporalTimeZoneLike)) {\n    if (IsTemporalZonedDateTime(temporalTimeZoneLike)) return GetSlot(temporalTimeZoneLike, TIME_ZONE);\n    if (!ObjectImplementsTemporalTimeZoneProtocol(temporalTimeZoneLike)) {\n      throw new TypeError('expected a Temporal.TimeZone or object implementing the Temporal.TimeZone protocol');\n    }\n    return temporalTimeZoneLike;\n  }\n  const identifier = ToString(temporalTimeZoneLike);\n  return ParseTemporalTimeZone(identifier);\n}\n\nexport function ToTemporalTimeZoneIdentifier(slotValue: TimeZoneSlot) {\n  if (typeof slotValue === 'string') return slotValue;\n  const result = slotValue.id;\n  if (typeof result !== 'string') throw new TypeError('timeZone.id should be a string');\n  return result;\n}\n\nexport function ToTemporalTimeZoneObject(slotValue: TimeZoneSlot) {\n  if (IsObject(slotValue)) return slotValue;\n  const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n  return new TemporalTimeZone(slotValue);\n}\n\nexport function TimeZoneEquals(one: string | Temporal.TimeZoneProtocol, two: string | Temporal.TimeZoneProtocol) {\n  if (one === two) return true;\n  const tz1 = ToTemporalTimeZoneIdentifier(one);\n  const tz2 = ToTemporalTimeZoneIdentifier(two);\n  return tz1 === tz2;\n}\n\nexport function TemporalDateTimeToDate(dateTime: Temporal.PlainDateTime) {\n  return CreateTemporalDate(\n    GetSlot(dateTime, ISO_YEAR),\n    GetSlot(dateTime, ISO_MONTH),\n    GetSlot(dateTime, ISO_DAY),\n    GetSlot(dateTime, CALENDAR)\n  );\n}\n\nexport function TemporalDateTimeToTime(dateTime: Temporal.PlainDateTime) {\n  const Time = GetIntrinsic('%Temporal.PlainTime%');\n  return new Time(\n    GetSlot(dateTime, ISO_HOUR),\n    GetSlot(dateTime, ISO_MINUTE),\n    GetSlot(dateTime, ISO_SECOND),\n    GetSlot(dateTime, ISO_MILLISECOND),\n    GetSlot(dateTime, ISO_MICROSECOND),\n    GetSlot(dateTime, ISO_NANOSECOND)\n  );\n}\n\nexport function GetOffsetNanosecondsFor(\n  timeZone: string | Temporal.TimeZoneProtocol,\n  instant: TimeZoneProtocolParams['getOffsetNanosecondsFor'][0],\n  getOffsetNanosecondsForParam?: Temporal.TimeZoneProtocol['getOffsetNanosecondsFor']\n) {\n  if (typeof timeZone === 'string') {\n    const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n    const timeZoneObject = new TemporalTimeZone(timeZone);\n    return Call(GetIntrinsic('%Temporal.TimeZone.prototype.getOffsetNanosecondsFor%'), timeZoneObject, [instant]);\n  }\n  const getOffsetNanosecondsFor = getOffsetNanosecondsForParam ?? GetMethod(timeZone, 'getOffsetNanosecondsFor');\n  const offsetNs = Call(getOffsetNanosecondsFor, timeZone, [instant]);\n  if (typeof offsetNs !== 'number') {\n    throw new TypeError('bad return from getOffsetNanosecondsFor');\n  }\n  if (!IsIntegralNumber(offsetNs) || MathAbs(offsetNs) >= 86400e9) {\n    throw new RangeError('out-of-range return from getOffsetNanosecondsFor');\n  }\n  return offsetNs;\n}\n\nexport function GetOffsetStringFor(timeZone: string | Temporal.TimeZoneProtocol, instant: Temporal.Instant) {\n  const offsetNs = GetOffsetNanosecondsFor(timeZone, instant);\n  return FormatTimeZoneOffsetString(offsetNs);\n}\n\nexport function GetPlainDateTimeFor(\n  timeZone: string | Temporal.TimeZoneProtocol,\n  instant: Temporal.Instant,\n  calendar: CalendarSlot\n) {\n  const ns = GetSlot(instant, EPOCHNANOSECONDS);\n  const offsetNs = GetOffsetNanosecondsFor(timeZone, instant);\n  let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(ns);\n  ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(\n    year,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond + offsetNs\n  ));\n  return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\n\nexport function GetInstantFor(\n  timeZone: string | Temporal.TimeZoneProtocol,\n  dateTime: Temporal.PlainDateTime,\n  disambiguation: NonNullable<Temporal.ToInstantOptions['disambiguation']>\n) {\n  const possibleInstants = GetPossibleInstantsFor(timeZone, dateTime);\n  return DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation);\n}\n\nfunction DisambiguatePossibleInstants(\n  possibleInstants: Temporal.Instant[],\n  timeZone: string | Temporal.TimeZoneProtocol,\n  dateTime: Temporal.PlainDateTime,\n  disambiguation: NonNullable<Temporal.ToInstantOptions['disambiguation']>\n) {\n  const Instant = GetIntrinsic('%Temporal.Instant%');\n  const numInstants = possibleInstants.length;\n\n  if (numInstants === 1) return possibleInstants[0];\n  if (numInstants) {\n    switch (disambiguation) {\n      case 'compatible':\n      // fall through because 'compatible' means 'earlier' for \"fall back\" transitions\n      case 'earlier':\n        return possibleInstants[0];\n      case 'later':\n        return possibleInstants[numInstants - 1];\n      case 'reject': {\n        throw new RangeError('multiple instants found');\n      }\n    }\n  }\n\n  const year = GetSlot(dateTime, ISO_YEAR);\n  const month = GetSlot(dateTime, ISO_MONTH);\n  const day = GetSlot(dateTime, ISO_DAY);\n  const hour = GetSlot(dateTime, ISO_HOUR);\n  const minute = GetSlot(dateTime, ISO_MINUTE);\n  const second = GetSlot(dateTime, ISO_SECOND);\n  const millisecond = GetSlot(dateTime, ISO_MILLISECOND);\n  const microsecond = GetSlot(dateTime, ISO_MICROSECOND);\n  const nanosecond = GetSlot(dateTime, ISO_NANOSECOND);\n  const utcns = GetUTCEpochNanoseconds(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n  if (utcns === null) throw new RangeError('DateTime outside of supported range');\n  const dayBefore = new Instant(JSBI.subtract(utcns, DAY_NANOS));\n  const dayAfter = new Instant(JSBI.add(utcns, DAY_NANOS));\n  const offsetBefore = GetOffsetNanosecondsFor(timeZone, dayBefore);\n  const offsetAfter = GetOffsetNanosecondsFor(timeZone, dayAfter);\n  const nanoseconds = offsetAfter - offsetBefore;\n  switch (disambiguation) {\n    case 'earlier': {\n      const calendar = GetSlot(dateTime, CALENDAR);\n      const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n      const earlier = AddDateTime(\n        year,\n        month,\n        day,\n        hour,\n        minute,\n        second,\n        millisecond,\n        microsecond,\n        nanosecond,\n        calendar,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        -nanoseconds,\n        undefined\n      );\n      const earlierPlainDateTime = new PlainDateTime(\n        earlier.year,\n        earlier.month,\n        earlier.day,\n        earlier.hour,\n        earlier.minute,\n        earlier.second,\n        earlier.millisecond,\n        earlier.microsecond,\n        earlier.nanosecond,\n        calendar\n      );\n      return GetPossibleInstantsFor(timeZone, earlierPlainDateTime)[0];\n    }\n    case 'compatible':\n    // fall through because 'compatible' means 'later' for \"spring forward\" transitions\n    case 'later': {\n      const calendar = GetSlot(dateTime, CALENDAR);\n      const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n      const later = AddDateTime(\n        year,\n        month,\n        day,\n        hour,\n        minute,\n        second,\n        millisecond,\n        microsecond,\n        nanosecond,\n        calendar,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        nanoseconds,\n        undefined\n      );\n      const laterPlainDateTime = new PlainDateTime(\n        later.year,\n        later.month,\n        later.day,\n        later.hour,\n        later.minute,\n        later.second,\n        later.millisecond,\n        later.microsecond,\n        later.nanosecond,\n        calendar\n      );\n      const possible = GetPossibleInstantsFor(timeZone, laterPlainDateTime);\n      return possible[possible.length - 1];\n    }\n    case 'reject': {\n      throw new RangeError('no such instant found');\n    }\n  }\n}\n\nfunction GetPossibleInstantsFor(\n  timeZone: string | Temporal.TimeZoneProtocol,\n  dateTime: TimeZoneProtocolParams['getPossibleInstantsFor'][0],\n  getPossibleInstantsForParam?: Temporal.TimeZoneProtocol['getPossibleInstantsFor']\n) {\n  if (typeof timeZone === 'string') {\n    const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n    const timeZoneObject = new TemporalTimeZone(timeZone);\n    return Call(GetIntrinsic('%Temporal.TimeZone.prototype.getPossibleInstantsFor%'), timeZoneObject, [dateTime]);\n  }\n  const getPossibleInstantsFor = getPossibleInstantsForParam ?? GetMethod(timeZone, 'getPossibleInstantsFor');\n  const possibleInstants = Call(getPossibleInstantsFor, timeZone, [dateTime]);\n  const result: Temporal.Instant[] = [];\n  for (const instant of possibleInstants) {\n    if (!IsTemporalInstant(instant)) {\n      throw new TypeError('bad return from getPossibleInstantsFor');\n    }\n    ArrayPrototypePush.call(result, instant);\n  }\n  return result;\n}\n\nexport function ISOYearString(year: number) {\n  let yearString;\n  if (year < 0 || year > 9999) {\n    const sign = year < 0 ? '-' : '+';\n    const yearNumber = MathAbs(year);\n    yearString = sign + `000000${yearNumber}`.slice(-6);\n  } else {\n    yearString = `0000${year}`.slice(-4);\n  }\n  return yearString;\n}\n\nexport function ISODateTimePartString(part: number) {\n  return `00${part}`.slice(-2);\n}\nexport function FormatSecondsStringPart(\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number,\n  precision: ReturnType<typeof ToSecondsStringPrecisionRecord>['precision']\n) {\n  if (precision === 'minute') return '';\n\n  const secs = `:${ISODateTimePartString(second)}`;\n  let fractionNumber = millisecond * 1e6 + microsecond * 1e3 + nanosecond;\n  let fraction: string;\n\n  if (precision === 'auto') {\n    if (fractionNumber === 0) return secs;\n    fraction = `${fractionNumber}`.padStart(9, '0');\n    while (fraction[fraction.length - 1] === '0') fraction = fraction.slice(0, -1);\n  } else {\n    if (precision === 0) return secs;\n    fraction = `${fractionNumber}`.padStart(9, '0').slice(0, precision);\n  }\n  return `${secs}.${fraction}`;\n}\n\nexport function TemporalInstantToString(\n  instant: Temporal.Instant,\n  timeZone: string | Temporal.TimeZoneProtocol | undefined,\n  precision: ReturnType<typeof ToSecondsStringPrecisionRecord>['precision']\n) {\n  let outputTimeZone = timeZone;\n  if (outputTimeZone === undefined) outputTimeZone = 'UTC';\n  const dateTime = GetPlainDateTimeFor(outputTimeZone, instant, 'iso8601');\n  const year = ISOYearString(GetSlot(dateTime, ISO_YEAR));\n  const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH));\n  const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY));\n  const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR));\n  const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE));\n  const seconds = FormatSecondsStringPart(\n    GetSlot(dateTime, ISO_SECOND),\n    GetSlot(dateTime, ISO_MILLISECOND),\n    GetSlot(dateTime, ISO_MICROSECOND),\n    GetSlot(dateTime, ISO_NANOSECOND),\n    precision\n  );\n  let timeZoneString = 'Z';\n  if (timeZone !== undefined) {\n    const offsetNs = GetOffsetNanosecondsFor(outputTimeZone, instant);\n    timeZoneString = FormatISOTimeZoneOffsetString(offsetNs);\n  }\n  return `${year}-${month}-${day}T${hour}:${minute}${seconds}${timeZoneString}`;\n}\n\ninterface ToStringOptions {\n  unit: ReturnType<typeof ToSecondsStringPrecisionRecord>['unit'];\n  increment: number;\n  roundingMode: ReturnType<typeof ToTemporalRoundingMode>;\n}\n\nexport function TemporalDurationToString(\n  duration: Temporal.Duration,\n  precision: Temporal.ToStringPrecisionOptions['fractionalSecondDigits'] = 'auto',\n  options: ToStringOptions | undefined = undefined\n) {\n  function formatNumber(num: number) {\n    if (num <= NumberMaxSafeInteger) return num.toString(10);\n    return JSBI.BigInt(num).toString(10);\n  }\n\n  const years = GetSlot(duration, YEARS);\n  const months = GetSlot(duration, MONTHS);\n  const weeks = GetSlot(duration, WEEKS);\n  const days = GetSlot(duration, DAYS);\n  const hours = GetSlot(duration, HOURS);\n  const minutes = GetSlot(duration, MINUTES);\n  let seconds = GetSlot(duration, SECONDS);\n  let ms = GetSlot(duration, MILLISECONDS);\n  let µs = GetSlot(duration, MICROSECONDS);\n  let ns = GetSlot(duration, NANOSECONDS);\n  const sign = DurationSign(years, months, weeks, days, hours, minutes, seconds, ms, µs, ns);\n\n  if (options) {\n    const { unit, increment, roundingMode } = options;\n    ({\n      seconds,\n      milliseconds: ms,\n      microseconds: µs,\n      nanoseconds: ns\n    } = RoundDuration(0, 0, 0, 0, 0, 0, seconds, ms, µs, ns, increment, unit, roundingMode));\n  }\n\n  const dateParts: string[] = [];\n  if (years) dateParts.push(`${formatNumber(MathAbs(years))}Y`);\n  if (months) dateParts.push(`${formatNumber(MathAbs(months))}M`);\n  if (weeks) dateParts.push(`${formatNumber(MathAbs(weeks))}W`);\n  if (days) dateParts.push(`${formatNumber(MathAbs(days))}D`);\n\n  const timeParts: string[] = [];\n  if (hours) timeParts.push(`${formatNumber(MathAbs(hours))}H`);\n  if (minutes) timeParts.push(`${formatNumber(MathAbs(minutes))}M`);\n\n  const secondParts: string[] = [];\n  let total = TotalDurationNanoseconds(0, 0, 0, seconds, ms, µs, ns, 0);\n  let nsBigInt: JSBI, µsBigInt: JSBI, msBigInt: JSBI, secondsBigInt: JSBI;\n  ({ quotient: total, remainder: nsBigInt } = divmod(total, THOUSAND));\n  ({ quotient: total, remainder: µsBigInt } = divmod(total, THOUSAND));\n  ({ quotient: secondsBigInt, remainder: msBigInt } = divmod(total, THOUSAND));\n  const fraction =\n    MathAbs(JSBI.toNumber(msBigInt)) * 1e6 + MathAbs(JSBI.toNumber(µsBigInt)) * 1e3 + MathAbs(JSBI.toNumber(nsBigInt));\n  let decimalPart;\n  if (precision === 'auto') {\n    if (fraction !== 0) {\n      decimalPart = `${fraction}`.padStart(9, '0');\n      while (decimalPart[decimalPart.length - 1] === '0') {\n        decimalPart = decimalPart.slice(0, -1);\n      }\n    }\n  } else if (precision !== 0) {\n    decimalPart = `${fraction}`.padStart(9, '0').slice(0, precision);\n  }\n  if (decimalPart) secondParts.unshift('.', decimalPart);\n  if (!JSBI.equal(secondsBigInt, ZERO) || secondParts.length || precision !== 'auto') {\n    secondParts.unshift(abs(secondsBigInt).toString());\n  }\n  if (secondParts.length) timeParts.push(`${secondParts.join('')}S`);\n  if (timeParts.length) timeParts.unshift('T');\n  if (!dateParts.length && !timeParts.length) return 'PT0S';\n  return `${sign < 0 ? '-' : ''}P${dateParts.join('')}${timeParts.join('')}`;\n}\n\nexport function TemporalDateToString(\n  date: Temporal.PlainDate,\n  showCalendar: Temporal.ShowCalendarOption['calendarName'] = 'auto'\n) {\n  const year = ISOYearString(GetSlot(date, ISO_YEAR));\n  const month = ISODateTimePartString(GetSlot(date, ISO_MONTH));\n  const day = ISODateTimePartString(GetSlot(date, ISO_DAY));\n  const calendar = MaybeFormatCalendarAnnotation(GetSlot(date, CALENDAR), showCalendar);\n  return `${year}-${month}-${day}${calendar}`;\n}\n\nexport function TemporalDateTimeToString(\n  dateTime: Temporal.PlainDateTime,\n  precision: ReturnType<typeof ToSecondsStringPrecisionRecord>['precision'],\n  showCalendar: ReturnType<typeof ToCalendarNameOption> = 'auto',\n  options: ToStringOptions | undefined = undefined\n) {\n  let year = GetSlot(dateTime, ISO_YEAR);\n  let month = GetSlot(dateTime, ISO_MONTH);\n  let day = GetSlot(dateTime, ISO_DAY);\n  let hour = GetSlot(dateTime, ISO_HOUR);\n  let minute = GetSlot(dateTime, ISO_MINUTE);\n  let second = GetSlot(dateTime, ISO_SECOND);\n  let millisecond = GetSlot(dateTime, ISO_MILLISECOND);\n  let microsecond = GetSlot(dateTime, ISO_MICROSECOND);\n  let nanosecond = GetSlot(dateTime, ISO_NANOSECOND);\n\n  if (options) {\n    const { unit, increment, roundingMode } = options;\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = RoundISODateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      increment,\n      unit,\n      roundingMode\n    ));\n  }\n\n  const yearString = ISOYearString(year);\n  const monthString = ISODateTimePartString(month);\n  const dayString = ISODateTimePartString(day);\n  const hourString = ISODateTimePartString(hour);\n  const minuteString = ISODateTimePartString(minute);\n  const secondsString = FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision);\n  const calendar = MaybeFormatCalendarAnnotation(GetSlot(dateTime, CALENDAR), showCalendar);\n  return `${yearString}-${monthString}-${dayString}T${hourString}:${minuteString}${secondsString}${calendar}`;\n}\n\nexport function TemporalMonthDayToString(\n  monthDay: Temporal.PlainMonthDay,\n  showCalendar: Temporal.ShowCalendarOption['calendarName'] = 'auto'\n) {\n  const month = ISODateTimePartString(GetSlot(monthDay, ISO_MONTH));\n  const day = ISODateTimePartString(GetSlot(monthDay, ISO_DAY));\n  let resultString = `${month}-${day}`;\n  const calendar = GetSlot(monthDay, CALENDAR);\n  const calendarID = ToTemporalCalendarIdentifier(calendar);\n  if (showCalendar === 'always' || showCalendar === 'critical' || calendarID !== 'iso8601') {\n    const year = ISOYearString(GetSlot(monthDay, ISO_YEAR));\n    resultString = `${year}-${resultString}`;\n  }\n  const calendarString = FormatCalendarAnnotation(calendarID, showCalendar);\n  if (calendarString) resultString += calendarString;\n  return resultString;\n}\n\nexport function TemporalYearMonthToString(\n  yearMonth: Temporal.PlainYearMonth,\n  showCalendar: Temporal.ShowCalendarOption['calendarName'] = 'auto'\n) {\n  const year = ISOYearString(GetSlot(yearMonth, ISO_YEAR));\n  const month = ISODateTimePartString(GetSlot(yearMonth, ISO_MONTH));\n  let resultString = `${year}-${month}`;\n  const calendar = GetSlot(yearMonth, CALENDAR);\n  const calendarID = ToTemporalCalendarIdentifier(calendar);\n  if (showCalendar === 'always' || showCalendar === 'critical' || calendarID !== 'iso8601') {\n    const day = ISODateTimePartString(GetSlot(yearMonth, ISO_DAY));\n    resultString += `-${day}`;\n  }\n  const calendarString = FormatCalendarAnnotation(calendarID, showCalendar);\n  if (calendarString) resultString += calendarString;\n  return resultString;\n}\n\nexport function TemporalZonedDateTimeToString(\n  zdt: Temporal.ZonedDateTime,\n  precision: ReturnType<typeof ToSecondsStringPrecisionRecord>['precision'],\n  showCalendar: ReturnType<typeof ToCalendarNameOption> = 'auto',\n  showTimeZone: ReturnType<typeof ToTimeZoneNameOption> = 'auto',\n  showOffset: ReturnType<typeof ToShowOffsetOption> = 'auto',\n  options: ToStringOptions | undefined = undefined\n) {\n  let instant = GetSlot(zdt, INSTANT);\n\n  if (options) {\n    const { unit, increment, roundingMode } = options;\n    const ns = RoundInstant(GetSlot(zdt, EPOCHNANOSECONDS), increment, unit, roundingMode);\n    const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n    instant = new TemporalInstant(ns);\n  }\n\n  const tz = GetSlot(zdt, TIME_ZONE);\n  const dateTime = GetPlainDateTimeFor(tz, instant, 'iso8601');\n\n  const year = ISOYearString(GetSlot(dateTime, ISO_YEAR));\n  const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH));\n  const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY));\n  const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR));\n  const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE));\n  const seconds = FormatSecondsStringPart(\n    GetSlot(dateTime, ISO_SECOND),\n    GetSlot(dateTime, ISO_MILLISECOND),\n    GetSlot(dateTime, ISO_MICROSECOND),\n    GetSlot(dateTime, ISO_NANOSECOND),\n    precision\n  );\n  let result = `${year}-${month}-${day}T${hour}:${minute}${seconds}`;\n  if (showOffset !== 'never') {\n    const offsetNs = GetOffsetNanosecondsFor(tz, instant);\n    result += FormatISOTimeZoneOffsetString(offsetNs);\n  }\n  if (showTimeZone !== 'never') {\n    const identifier = ToTemporalTimeZoneIdentifier(tz);\n    const flag = showTimeZone === 'critical' ? '!' : '';\n    result += `[${flag}${identifier}]`;\n  }\n  result += MaybeFormatCalendarAnnotation(GetSlot(zdt, CALENDAR), showCalendar);\n  return result;\n}\n\nexport function IsTimeZoneOffsetString(string: string) {\n  return OFFSET.test(StringCtor(string));\n}\n\nexport function ParseTimeZoneOffsetString(string: string): number {\n  const match = OFFSET.exec(StringCtor(string));\n  if (!match) {\n    throw new RangeError(`invalid time zone offset: ${string}`);\n  }\n  const sign = match[1] === '-' || match[1] === '\\u2212' ? -1 : +1;\n  const hours = +match[2];\n  const minutes = +(match[3] || 0);\n  const seconds = +(match[4] || 0);\n  const nanoseconds = +((match[5] || 0) + '000000000').slice(0, 9);\n  return sign * (((hours * 60 + minutes) * 60 + seconds) * 1e9 + nanoseconds);\n}\n\nexport function GetCanonicalTimeZoneIdentifier(timeZoneIdentifier: string): string {\n  if (IsTimeZoneOffsetString(timeZoneIdentifier)) {\n    const offsetNs = ParseTimeZoneOffsetString(timeZoneIdentifier);\n    return FormatTimeZoneOffsetString(offsetNs);\n  }\n  const formatter = getIntlDateTimeFormatEnUsForTimeZone(StringCtor(timeZoneIdentifier));\n  return formatter.resolvedOptions().timeZone;\n}\n\nexport function GetNamedTimeZoneOffsetNanoseconds(id: string, epochNanoseconds: JSBI) {\n  const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } =\n    GetNamedTimeZoneDateTimeParts(id, epochNanoseconds);\n\n  // The pattern of leap years in the ISO 8601 calendar repeats every 400\n  // years. To avoid overflowing at the edges of the range, we reduce the year\n  // to the remainder after dividing by 400, and then add back all the\n  // nanoseconds from the multiples of 400 years at the end.\n  const reducedYear = year % 400;\n  const yearCycles = (year - reducedYear) / 400;\n  const nsIn400YearCycle = JSBI.multiply(JSBI.BigInt(400 * 365 + 97), DAY_NANOS);\n\n  const reducedUTC = GetUTCEpochNanoseconds(\n    reducedYear,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond\n  );\n  assertExists(reducedUTC);\n  const utc = JSBI.add(reducedUTC, JSBI.multiply(nsIn400YearCycle, JSBI.BigInt(yearCycles)));\n  return JSBI.toNumber(JSBI.subtract(utc, epochNanoseconds));\n}\n\nfunction FormatTimeZoneOffsetString(offsetNanosecondsParam: number): string {\n  const sign = offsetNanosecondsParam < 0 ? '-' : '+';\n  const offsetNanoseconds = MathAbs(offsetNanosecondsParam);\n  const nanoseconds = offsetNanoseconds % 1e9;\n  const seconds = MathFloor(offsetNanoseconds / 1e9) % 60;\n  const minutes = MathFloor(offsetNanoseconds / 60e9) % 60;\n  const hours = MathFloor(offsetNanoseconds / 3600e9);\n\n  const hourString = ISODateTimePartString(hours);\n  const minuteString = ISODateTimePartString(minutes);\n  const secondString = ISODateTimePartString(seconds);\n  let post = '';\n  if (nanoseconds) {\n    let fraction = `${nanoseconds}`.padStart(9, '0');\n    while (fraction[fraction.length - 1] === '0') fraction = fraction.slice(0, -1);\n    post = `:${secondString}.${fraction}`;\n  } else if (seconds) {\n    post = `:${secondString}`;\n  }\n  return `${sign}${hourString}:${minuteString}${post}`;\n}\n\nfunction FormatISOTimeZoneOffsetString(offsetNanosecondsParam: number): string {\n  let offsetNanoseconds = JSBI.toNumber(\n    RoundNumberToIncrement(JSBI.BigInt(offsetNanosecondsParam), MINUTE_NANOS, 'halfExpand')\n  );\n  const sign = offsetNanoseconds < 0 ? '-' : '+';\n  offsetNanoseconds = MathAbs(offsetNanoseconds);\n  const minutes = (offsetNanoseconds / 60e9) % 60;\n  const hours = MathFloor(offsetNanoseconds / 3600e9);\n\n  const hourString = ISODateTimePartString(hours);\n  const minuteString = ISODateTimePartString(minutes);\n  return `${sign}${hourString}:${minuteString}`;\n}\nexport function GetUTCEpochNanoseconds(\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number\n) {\n  // Note: Date.UTC() interprets one and two-digit years as being in the\n  // 20th century, so don't use it\n  const legacyDate = new Date();\n  legacyDate.setUTCHours(hour, minute, second, millisecond);\n  legacyDate.setUTCFullYear(year, month - 1, day);\n  const ms = legacyDate.getTime();\n  if (NumberIsNaN(ms)) return null;\n  let ns = JSBI.multiply(JSBI.BigInt(ms), MILLION);\n  ns = JSBI.add(ns, JSBI.multiply(JSBI.BigInt(microsecond), THOUSAND));\n  ns = JSBI.add(ns, JSBI.BigInt(nanosecond));\n  if (JSBI.lessThan(ns, NS_MIN) || JSBI.greaterThan(ns, NS_MAX)) return null;\n  return ns;\n}\n\nfunction GetISOPartsFromEpoch(epochNanoseconds: JSBI) {\n  const { quotient, remainder } = divmod(epochNanoseconds, MILLION);\n  let epochMilliseconds = JSBI.toNumber(quotient);\n  let nanos = JSBI.toNumber(remainder);\n  if (nanos < 0) {\n    nanos += 1e6;\n    epochMilliseconds -= 1;\n  }\n  const microsecond = MathFloor(nanos / 1e3) % 1e3;\n  const nanosecond = nanos % 1e3;\n\n  const item = new Date(epochMilliseconds);\n  const year = item.getUTCFullYear();\n  const month = item.getUTCMonth() + 1;\n  const day = item.getUTCDate();\n  const hour = item.getUTCHours();\n  const minute = item.getUTCMinutes();\n  const second = item.getUTCSeconds();\n  const millisecond = item.getUTCMilliseconds();\n\n  return { epochMilliseconds, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function GetNamedTimeZoneDateTimeParts(id: string, epochNanoseconds: JSBI) {\n  const { epochMilliseconds, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(epochNanoseconds);\n  const { year, month, day, hour, minute, second } = GetFormatterParts(id, epochMilliseconds);\n  return BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n}\n\nfunction maxJSBI(one: JSBI, two: JSBI) {\n  return JSBI.lessThan(one, two) ? two : one;\n}\n\n/**\n * Our best guess at how far in advance new rules will be put into the TZDB for\n * future offset transitions. We'll pick 10 years but can always revise it if\n * we find that countries are being unusually proactive in their announcing\n * of offset changes.\n */\nfunction afterLatestPossibleTzdbRuleChange() {\n  return JSBI.add(SystemUTCEpochNanoSeconds(), ABOUT_TEN_YEARS_NANOS);\n}\n\nexport function GetNamedTimeZoneNextTransition(id: string, epochNanoseconds: JSBI): JSBI | null {\n  if (JSBI.lessThan(epochNanoseconds, BEFORE_FIRST_OFFSET_TRANSITION)) {\n    return GetNamedTimeZoneNextTransition(id, BEFORE_FIRST_OFFSET_TRANSITION);\n  }\n  // Decide how far in the future after `epochNanoseconds` we'll look for an\n  // offset change. There are two cases:\n  // 1. If it's a past date (or a date in the near future) then it's possible\n  //    that the time zone may have newly added DST in the next few years. So\n  //    we'll have to look from the provided time until a few years after the\n  //    current system time. (Changes to DST policy are usually announced a few\n  //    years in the future.) Note that the first DST anywhere started in 1847,\n  //    so we'll start checks in 1847 instead of wasting cycles on years where\n  //    there will never be transitions.\n  // 2. If it's a future date beyond the next few years, then we'll just assume\n  //    that the latest DST policy in TZDB will still be in effect.  In this\n  //    case, we only need to look one year in the future to see if there are\n  //    any DST transitions.  We actually only need to look 9-10 months because\n  //    DST has two transitions per year, but we'll use a year just to be safe.\n  const oneYearLater = JSBI.add(epochNanoseconds, ABOUT_ONE_YEAR_NANOS);\n  const uppercap = maxJSBI(afterLatestPossibleTzdbRuleChange(), oneYearLater);\n  // The first transition (in any timezone) recorded in the TZDB was in 1847, so\n  // start there if an earlier date is supplied.\n  let leftNanos = maxJSBI(BEFORE_FIRST_OFFSET_TRANSITION, epochNanoseconds);\n  const leftOffsetNs = GetNamedTimeZoneOffsetNanoseconds(id, leftNanos);\n  let rightNanos = leftNanos;\n  let rightOffsetNs = leftOffsetNs;\n  while (leftOffsetNs === rightOffsetNs && JSBI.lessThan(JSBI.BigInt(leftNanos), uppercap)) {\n    rightNanos = JSBI.add(leftNanos, TWO_WEEKS_NANOS);\n    if (JSBI.greaterThan(rightNanos, NS_MAX)) return null;\n    rightOffsetNs = GetNamedTimeZoneOffsetNanoseconds(id, rightNanos);\n    if (leftOffsetNs === rightOffsetNs) {\n      leftNanos = rightNanos;\n    }\n  }\n  if (leftOffsetNs === rightOffsetNs) return null;\n  const result = bisect(\n    (epochNs: JSBI) => GetNamedTimeZoneOffsetNanoseconds(id, epochNs),\n    leftNanos,\n    rightNanos,\n    leftOffsetNs,\n    rightOffsetNs\n  );\n  return result;\n}\n\nexport function GetNamedTimeZonePreviousTransition(id: string, epochNanoseconds: JSBI): JSBI | null {\n  // If a time zone uses DST (at the time of `epochNanoseconds`), then we only\n  // have to look back one year to find a transition. But if it doesn't use DST,\n  // then we need to look all the way back to 1847 (the earliest rule in the\n  // TZDB) to see if it had other offset transitions in the past. Looping back\n  // from a far-future date to 1847 is very slow (minutes of 100% CPU!), and is\n  // also unnecessary because DST rules aren't put into the TZDB more than a few\n  // years in the future because the political changes in time zones happen with\n  // only a few years' warning. Therefore, if a far-future date is provided,\n  // then we'll run the check in two parts:\n  // 1. First, we'll look back for up to one year to see if the latest TZDB\n  //    rules have DST.\n  // 2. If not, then we'll \"fast-reverse\" back to a few years later than the\n  //    current system time, and then look back to 1847. This reduces the\n  //    worst-case loop from 273K years to 175 years, for a ~1500x improvement\n  //    in worst-case perf.\n  const afterLatestRule = afterLatestPossibleTzdbRuleChange();\n  const isFarFuture = JSBI.greaterThan(epochNanoseconds, afterLatestRule);\n  const lowercap = isFarFuture ? JSBI.subtract(epochNanoseconds, ABOUT_ONE_YEAR_NANOS) : BEFORE_FIRST_OFFSET_TRANSITION;\n\n  // TODO: proposal-temporal polyfill has different code for very similar\n  // optimizations as above, as well as in GetNamedTimeZonePreviousTransition.\n  // We should figure out if we should change one polyfill to match the other.\n\n  // We assume most time zones either have regular DST rules that extend\n  // indefinitely into the future, or they have no DST transitions between now\n  // and next year. Africa/Casablanca and Africa/El_Aaiun are unique cases\n  // that fit neither of these. Their irregular DST transitions are\n  // precomputed until 2087 in the current time zone database, so requesting\n  // the previous transition for an instant far in the future may take an\n  // extremely long time as it loops backward 2 weeks at a time.\n  if (id === 'Africa/Casablanca' || id === 'Africa/El_Aaiun') {\n    const lastPrecomputed = GetSlot(ToTemporalInstant('2088-01-01T00Z'), EPOCHNANOSECONDS);\n    if (JSBI.lessThan(lastPrecomputed, epochNanoseconds)) {\n      return GetNamedTimeZonePreviousTransition(id, lastPrecomputed);\n    }\n  }\n\n  let rightNanos = JSBI.subtract(epochNanoseconds, ONE);\n  if (JSBI.lessThan(rightNanos, BEFORE_FIRST_OFFSET_TRANSITION)) return null;\n  const rightOffsetNs = GetNamedTimeZoneOffsetNanoseconds(id, rightNanos);\n  let leftNanos = rightNanos;\n  let leftOffsetNs = rightOffsetNs;\n  while (rightOffsetNs === leftOffsetNs && JSBI.greaterThan(rightNanos, lowercap)) {\n    leftNanos = JSBI.subtract(rightNanos, TWO_WEEKS_NANOS);\n    if (JSBI.lessThan(leftNanos, BEFORE_FIRST_OFFSET_TRANSITION)) return null;\n    leftOffsetNs = GetNamedTimeZoneOffsetNanoseconds(id, leftNanos);\n    if (rightOffsetNs === leftOffsetNs) {\n      rightNanos = leftNanos;\n    }\n  }\n  if (rightOffsetNs === leftOffsetNs) {\n    if (isFarFuture) {\n      // There was no DST after looking back one year, which means that the most\n      // recent TZDB rules don't have any recurring transitions. To check for\n      // transitions in older rules, back up to a few years after the current\n      // date and then look all the way back to 1847. Note that we move back one\n      // day from the latest possible rule so that when the recursion runs it\n      // won't consider the new time to be \"far future\" because the system clock\n      // has advanced in the meantime.\n      const newTimeToCheck = JSBI.subtract(afterLatestRule, DAY_NANOS);\n      return GetNamedTimeZonePreviousTransition(id, newTimeToCheck);\n    }\n    return null;\n  }\n  const result = bisect(\n    (epochNs: JSBI) => GetNamedTimeZoneOffsetNanoseconds(id, epochNs),\n    leftNanos,\n    rightNanos,\n    leftOffsetNs,\n    rightOffsetNs\n  );\n  return result;\n}\n\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function parseFromEnUsFormat(datetime: string) {\n  const parts = datetime.split(/[^\\w]+/);\n\n  if (parts.length !== 7) {\n    throw new RangeError(`expected 7 parts in \"${datetime}`);\n  }\n\n  const month = +parts[0];\n  const day = +parts[1];\n  let year = +parts[2];\n  const era = parts[3].toUpperCase();\n  if (era === 'B' || era === 'BC') {\n    year = -year + 1;\n  } else if (era !== 'A' && era !== 'AD') {\n    throw new RangeError(`Unknown era ${era} in \"${datetime}`);\n  }\n  let hour = +parts[4];\n  if (hour === 24) {\n    // bugs.chromium.org/p/chromium/issues/detail?id=1045791\n    hour = 0;\n  }\n  const minute = +parts[5];\n  const second = +parts[6];\n\n  if (\n    !NumberIsFinite(year) ||\n    !NumberIsFinite(month) ||\n    !NumberIsFinite(day) ||\n    !NumberIsFinite(hour) ||\n    !NumberIsFinite(minute) ||\n    !NumberIsFinite(second)\n  ) {\n    throw new RangeError(`Invalid number in \"${datetime}`);\n  }\n\n  return { year, month, day, hour, minute, second };\n}\n\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function GetFormatterParts(timeZone: string, epochMilliseconds: number) {\n  const formatter = getIntlDateTimeFormatEnUsForTimeZone(timeZone);\n  // Using `format` instead of `formatToParts` for compatibility with older clients\n  const datetime = formatter.format(new Date(epochMilliseconds));\n  return parseFromEnUsFormat(datetime);\n}\n\nexport function GetNamedTimeZoneEpochNanoseconds(\n  id: string,\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number\n) {\n  const ns = GetUTCEpochNanoseconds(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n  if (ns === null) throw new RangeError('DateTime outside of supported range');\n  let nsEarlier = JSBI.subtract(ns, DAY_NANOS);\n  if (JSBI.lessThan(nsEarlier, NS_MIN)) nsEarlier = ns;\n  let nsLater = JSBI.add(ns, DAY_NANOS);\n  if (JSBI.greaterThan(nsLater, NS_MAX)) nsLater = ns;\n  const earliest = GetNamedTimeZoneOffsetNanoseconds(id, nsEarlier);\n  const latest = GetNamedTimeZoneOffsetNanoseconds(id, nsLater);\n  const found = earliest === latest ? [earliest] : [earliest, latest];\n  return found\n    .map((offsetNanoseconds) => {\n      const epochNanoseconds = JSBI.subtract(ns, JSBI.BigInt(offsetNanoseconds));\n      const parts = GetNamedTimeZoneDateTimeParts(id, epochNanoseconds);\n      if (\n        year !== parts.year ||\n        month !== parts.month ||\n        day !== parts.day ||\n        hour !== parts.hour ||\n        minute !== parts.minute ||\n        second !== parts.second ||\n        millisecond !== parts.millisecond ||\n        microsecond !== parts.microsecond ||\n        nanosecond !== parts.nanosecond\n      ) {\n        return undefined;\n      }\n      return epochNanoseconds;\n    })\n    .filter((x) => x !== undefined) as JSBI[];\n}\n\nexport function LeapYear(year: number) {\n  if (undefined === year) return false;\n  const isDiv4 = year % 4 === 0;\n  const isDiv100 = year % 100 === 0;\n  const isDiv400 = year % 400 === 0;\n  return isDiv4 && (!isDiv100 || isDiv400);\n}\n\nexport function ISODaysInMonth(year: number, month: number) {\n  const DoM = {\n    standard: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n    leapyear: [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n  };\n  return DoM[LeapYear(year) ? 'leapyear' : 'standard'][month - 1];\n}\n\nexport function DayOfWeek(year: number, month: number, day: number) {\n  const m = month + (month < 3 ? 10 : -2);\n  const Y = year - (month < 3 ? 1 : 0);\n\n  const c = MathFloor(Y / 100);\n  const y = Y - c * 100;\n  const d = day;\n\n  const pD = d;\n  const pM = MathFloor(2.6 * m - 0.2);\n  const pY = y + MathFloor(y / 4);\n  const pC = MathFloor(c / 4) - 2 * c;\n\n  const dow = (pD + pM + pY + pC) % 7;\n\n  return dow + (dow <= 0 ? 7 : 0);\n}\n\nexport function DayOfYear(year: number, month: number, day: number) {\n  let days = day;\n  for (let m = month - 1; m > 0; m--) {\n    days += ISODaysInMonth(year, m);\n  }\n  return days;\n}\n\nexport function WeekOfYear(year: number, month: number, day: number) {\n  const doy = DayOfYear(year, month, day);\n  const dow = DayOfWeek(year, month, day) || 7;\n  const doj = DayOfWeek(year, 1, 1);\n\n  const week = MathFloor((doy - dow + 10) / 7);\n\n  if (week < 1) {\n    if (doj === 5 || (doj === 6 && LeapYear(year - 1))) {\n      return { week: 53, year: year - 1 };\n    } else {\n      return { week: 52, year: year - 1 };\n    }\n  }\n  if (week === 53) {\n    if ((LeapYear(year) ? 366 : 365) - doy < 4 - dow) {\n      return { week: 1, year: year + 1 };\n    }\n  }\n\n  return { week, year };\n}\n\nexport function DurationSign(\n  y: number,\n  mon: number,\n  w: number,\n  d: number,\n  h: number,\n  min: number,\n  s: number,\n  ms: number,\n  µs: number,\n  ns: number\n) {\n  for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) {\n    if (prop !== 0) return prop < 0 ? -1 : 1;\n  }\n  return 0;\n}\n\nfunction BalanceISOYearMonth(yearParam: number, monthParam: number) {\n  let year = yearParam;\n  let month = monthParam;\n  if (!NumberIsFinite(year) || !NumberIsFinite(month)) throw new RangeError('infinity is out of range');\n  month -= 1;\n  year += MathFloor(month / 12);\n  month %= 12;\n  if (month < 0) month += 12;\n  month += 1;\n  return { year, month };\n}\n\nfunction BalanceISODate(yearParam: number, monthParam: number, dayParam: number) {\n  let year = yearParam;\n  let month = monthParam;\n  let day = dayParam;\n  if (!NumberIsFinite(day)) throw new RangeError('infinity is out of range');\n  ({ year, month } = BalanceISOYearMonth(year, month));\n\n  // The pattern of leap years in the ISO 8601 calendar repeats every 400\n  // years. So if we have more than 400 years in days, there's no need to\n  // convert days to a year 400 times. We can convert a multiple of 400 all at\n  // once.\n  const daysIn400YearCycle = 400 * 365 + 97;\n  if (MathAbs(day) > daysIn400YearCycle) {\n    const nCycles = MathTrunc(day / daysIn400YearCycle);\n    year += 400 * nCycles;\n    day -= nCycles * daysIn400YearCycle;\n  }\n\n  let daysInYear = 0;\n  let testYear = month > 2 ? year : year - 1;\n  while (((daysInYear = LeapYear(testYear) ? 366 : 365), day < -daysInYear)) {\n    year -= 1;\n    testYear -= 1;\n    day += daysInYear;\n  }\n  testYear += 1;\n  while (((daysInYear = LeapYear(testYear) ? 366 : 365), day > daysInYear)) {\n    year += 1;\n    testYear += 1;\n    day -= daysInYear;\n  }\n\n  while (day < 1) {\n    ({ year, month } = BalanceISOYearMonth(year, month - 1));\n    day += ISODaysInMonth(year, month);\n  }\n  while (day > ISODaysInMonth(year, month)) {\n    day -= ISODaysInMonth(year, month);\n    ({ year, month } = BalanceISOYearMonth(year, month + 1));\n  }\n\n  return { year, month, day };\n}\n\nfunction BalanceISODateTime(\n  yearParam: number,\n  monthParam: number,\n  dayParam: number,\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number\n) {\n  const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(\n    hourParam,\n    minuteParam,\n    secondParam,\n    millisecondParam,\n    microsecondParam,\n    nanosecondParam\n  );\n  const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays);\n  return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nfunction BalanceTime(\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number\n) {\n  let hour = JSBI.BigInt(hourParam);\n  let minute = JSBI.BigInt(minuteParam);\n  let second = JSBI.BigInt(secondParam);\n  let millisecond = JSBI.BigInt(millisecondParam);\n  let microsecond = JSBI.BigInt(microsecondParam);\n  let nanosecond = JSBI.BigInt(nanosecondParam);\n  let quotient;\n\n  ({ quotient, remainder: nanosecond } = NonNegativeBigIntDivmod(nanosecond, THOUSAND));\n  microsecond = JSBI.add(microsecond, quotient);\n\n  ({ quotient, remainder: microsecond } = NonNegativeBigIntDivmod(microsecond, THOUSAND));\n  millisecond = JSBI.add(millisecond, quotient);\n\n  ({ quotient, remainder: millisecond } = NonNegativeBigIntDivmod(millisecond, THOUSAND));\n  second = JSBI.add(second, quotient);\n\n  ({ quotient, remainder: second } = NonNegativeBigIntDivmod(second, SIXTY));\n  minute = JSBI.add(minute, quotient);\n\n  ({ quotient, remainder: minute } = NonNegativeBigIntDivmod(minute, SIXTY));\n  hour = JSBI.add(hour, quotient);\n\n  ({ quotient, remainder: hour } = NonNegativeBigIntDivmod(hour, TWENTY_FOUR));\n\n  return {\n    deltaDays: JSBI.toNumber(quotient),\n    hour: JSBI.toNumber(hour),\n    minute: JSBI.toNumber(minute),\n    second: JSBI.toNumber(second),\n    millisecond: JSBI.toNumber(millisecond),\n    microsecond: JSBI.toNumber(microsecond),\n    nanosecond: JSBI.toNumber(nanosecond)\n  };\n}\n\nexport function TotalDurationNanoseconds(\n  daysParam: number,\n  hoursParam: number | JSBI,\n  minutesParam: number | JSBI,\n  secondsParam: number | JSBI,\n  millisecondsParam: number | JSBI,\n  microsecondsParam: number | JSBI,\n  nanosecondsParam: number | JSBI,\n  offsetShift: number\n) {\n  const days: JSBI = JSBI.BigInt(daysParam);\n  let nanoseconds: JSBI = JSBI.BigInt(nanosecondsParam);\n  if (daysParam !== 0) nanoseconds = JSBI.subtract(JSBI.BigInt(nanosecondsParam), JSBI.BigInt(offsetShift));\n  const hours = JSBI.add(JSBI.BigInt(hoursParam), JSBI.multiply(days, JSBI.BigInt(24)));\n  const minutes = JSBI.add(JSBI.BigInt(minutesParam), JSBI.multiply(hours, SIXTY));\n  const seconds = JSBI.add(JSBI.BigInt(secondsParam), JSBI.multiply(minutes, SIXTY));\n  const milliseconds = JSBI.add(JSBI.BigInt(millisecondsParam), JSBI.multiply(seconds, THOUSAND));\n  const microseconds = JSBI.add(JSBI.BigInt(microsecondsParam), JSBI.multiply(milliseconds, THOUSAND));\n  return JSBI.add(JSBI.BigInt(nanoseconds), JSBI.multiply(microseconds, THOUSAND));\n}\n\nfunction NanosecondsToDays(nanosecondsParam: JSBI, relativeTo: ReturnType<typeof ToRelativeTemporalObject>) {\n  const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n  const sign = MathSign(JSBI.toNumber(nanosecondsParam));\n  let nanoseconds = JSBI.BigInt(nanosecondsParam);\n  let dayLengthNs = 86400e9;\n  if (sign === 0) return { days: 0, nanoseconds: ZERO, dayLengthNs };\n  if (!IsTemporalZonedDateTime(relativeTo)) {\n    let days: JSBI;\n    ({ quotient: days, remainder: nanoseconds } = divmod(nanoseconds, JSBI.BigInt(dayLengthNs)));\n    return { days: JSBI.toNumber(days), nanoseconds, dayLengthNs };\n  }\n\n  const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS);\n  const start = GetSlot(relativeTo, INSTANT);\n  const endNs = JSBI.add(startNs, nanoseconds);\n  const end = new TemporalInstant(endNs);\n  const timeZone = GetSlot(relativeTo, TIME_ZONE);\n  const calendar = GetSlot(relativeTo, CALENDAR);\n\n  // Find the difference in days only.\n  const dtStart = GetPlainDateTimeFor(timeZone, start, calendar);\n  const dtEnd = GetPlainDateTimeFor(timeZone, end, calendar);\n  let { days: daysNumber } = DifferenceISODateTime(\n    GetSlot(dtStart, ISO_YEAR),\n    GetSlot(dtStart, ISO_MONTH),\n    GetSlot(dtStart, ISO_DAY),\n    GetSlot(dtStart, ISO_HOUR),\n    GetSlot(dtStart, ISO_MINUTE),\n    GetSlot(dtStart, ISO_SECOND),\n    GetSlot(dtStart, ISO_MILLISECOND),\n    GetSlot(dtStart, ISO_MICROSECOND),\n    GetSlot(dtStart, ISO_NANOSECOND),\n    GetSlot(dtEnd, ISO_YEAR),\n    GetSlot(dtEnd, ISO_MONTH),\n    GetSlot(dtEnd, ISO_DAY),\n    GetSlot(dtEnd, ISO_HOUR),\n    GetSlot(dtEnd, ISO_MINUTE),\n    GetSlot(dtEnd, ISO_SECOND),\n    GetSlot(dtEnd, ISO_MILLISECOND),\n    GetSlot(dtEnd, ISO_MICROSECOND),\n    GetSlot(dtEnd, ISO_NANOSECOND),\n    calendar,\n    'day',\n    ObjectCreate(null) as Temporal.DifferenceOptions<Temporal.DateTimeUnit>\n  );\n  let intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, daysNumber, 0, 0, 0, 0, 0, 0);\n  // may disambiguate\n\n  // If clock time after addition was in the middle of a skipped period, the\n  // endpoint was disambiguated to a later clock time. So it's possible that\n  // the resulting disambiguated result is later than endNs. If so, then back\n  // up one day and try again. Repeat if necessary (some transitions are\n  // > 24 hours) until either there's zero days left or the date duration is\n  // back inside the period where it belongs. Note that this case only can\n  // happen for positive durations because the only direction that\n  // `disambiguation: 'compatible'` can change clock time is forwards.\n  let daysBigInt = JSBI.BigInt(daysNumber);\n  if (sign === 1) {\n    while (JSBI.greaterThan(daysBigInt, ZERO) && JSBI.greaterThan(intermediateNs, endNs)) {\n      daysBigInt = JSBI.subtract(daysBigInt, ONE);\n      intermediateNs = AddZonedDateTime(\n        start,\n        timeZone,\n        calendar,\n        0,\n        0,\n        0,\n        JSBI.toNumber(daysBigInt),\n        0,\n        0,\n        0,\n        0,\n        0,\n        0\n      );\n      // may do disambiguation\n    }\n  }\n  nanoseconds = JSBI.subtract(endNs, intermediateNs);\n\n  let isOverflow = false;\n  let relativeInstant = new TemporalInstant(intermediateNs);\n  do {\n    // calculate length of the next day (day that contains the time remainder)\n    const oneDayFartherNs = AddZonedDateTime(relativeInstant, timeZone, calendar, 0, 0, 0, sign, 0, 0, 0, 0, 0, 0);\n    const relativeNs = GetSlot(relativeInstant, EPOCHNANOSECONDS);\n    dayLengthNs = JSBI.toNumber(JSBI.subtract(oneDayFartherNs, relativeNs));\n    isOverflow = JSBI.greaterThanOrEqual(\n      JSBI.multiply(JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs)), JSBI.BigInt(sign)),\n      ZERO\n    );\n    if (isOverflow) {\n      nanoseconds = JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs));\n      relativeInstant = new TemporalInstant(oneDayFartherNs);\n      daysBigInt = JSBI.add(daysBigInt, JSBI.BigInt(sign));\n    }\n  } while (isOverflow);\n  if (!isZero(daysBigInt) && signJSBI(daysBigInt) !== sign) {\n    throw new RangeError('Time zone or calendar converted nanoseconds into a number of days with the opposite sign');\n  }\n  if (!isZero(nanoseconds) && signJSBI(nanoseconds) !== sign) {\n    if (isNegativeJSBI(nanoseconds) && sign === 1) {\n      throw new Error('assert not reached');\n    }\n    throw new RangeError('Time zone or calendar ended up with a remainder of nanoseconds with the opposite sign');\n  }\n  if (JSBI.greaterThanOrEqual(abs(nanoseconds), abs(JSBI.BigInt(dayLengthNs)))) {\n    throw new Error('assert not reached');\n  }\n  return { days: JSBI.toNumber(daysBigInt), nanoseconds, dayLengthNs: MathAbs(dayLengthNs) };\n}\n\nexport function BalanceDuration(\n  daysParam: number,\n  hoursParam: number | JSBI,\n  minutesParam: number | JSBI,\n  secondsParam: number | JSBI,\n  millisecondsParam: number | JSBI,\n  microsecondsParam: number | JSBI,\n  nanosecondsParam: number | JSBI,\n  largestUnit: Temporal.DateTimeUnit,\n  relativeTo: ReturnType<typeof ToRelativeTemporalObject> = undefined\n) {\n  let result = BalancePossiblyInfiniteDuration(\n    daysParam,\n    hoursParam,\n    minutesParam,\n    secondsParam,\n    millisecondsParam,\n    microsecondsParam,\n    nanosecondsParam,\n    largestUnit,\n    relativeTo\n  );\n  if (result === 'positive overflow' || result === 'negative overflow') {\n    throw new RangeError('Duration out of range');\n  } else {\n    return result;\n  }\n}\n\nexport function BalancePossiblyInfiniteDuration(\n  daysParam: number,\n  hoursParam: number | JSBI,\n  minutesParam: number | JSBI,\n  secondsParam: number | JSBI,\n  millisecondsParam: number | JSBI,\n  microsecondsParam: number | JSBI,\n  nanosecondsParam: number | JSBI,\n  largestUnit: Temporal.DateTimeUnit,\n  relativeTo: ReturnType<typeof ToRelativeTemporalObject> = undefined\n) {\n  let days = daysParam;\n  let nanosecondsBigInt: JSBI,\n    microsecondsBigInt: JSBI,\n    millisecondsBigInt: JSBI,\n    secondsBigInt: JSBI,\n    minutesBigInt: JSBI,\n    hoursBigInt: JSBI;\n  if (IsTemporalZonedDateTime(relativeTo)) {\n    const endNs = AddZonedDateTime(\n      GetSlot(relativeTo, INSTANT),\n      GetSlot(relativeTo, TIME_ZONE),\n      GetSlot(relativeTo, CALENDAR),\n      0,\n      0,\n      0,\n      days,\n      hoursParam,\n      minutesParam,\n      secondsParam,\n      millisecondsParam,\n      microsecondsParam,\n      nanosecondsParam\n    );\n    const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS);\n    nanosecondsBigInt = JSBI.subtract(endNs, startNs);\n  } else {\n    nanosecondsBigInt = TotalDurationNanoseconds(\n      days,\n      hoursParam,\n      minutesParam,\n      secondsParam,\n      millisecondsParam,\n      microsecondsParam,\n      nanosecondsParam,\n      0\n    );\n  }\n  if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week' || largestUnit === 'day') {\n    ({ days, nanoseconds: nanosecondsBigInt } = NanosecondsToDays(nanosecondsBigInt, relativeTo));\n  } else {\n    days = 0;\n  }\n\n  const sign = JSBI.lessThan(nanosecondsBigInt, ZERO) ? -1 : 1;\n  nanosecondsBigInt = abs(nanosecondsBigInt);\n  microsecondsBigInt = millisecondsBigInt = secondsBigInt = minutesBigInt = hoursBigInt = ZERO;\n\n  switch (largestUnit) {\n    case 'year':\n    case 'month':\n    case 'week':\n    case 'day':\n    case 'hour':\n      ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n      ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n      ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n      ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY));\n      ({ quotient: hoursBigInt, remainder: minutesBigInt } = divmod(minutesBigInt, SIXTY));\n      break;\n    case 'minute':\n      ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n      ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n      ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n      ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY));\n      break;\n    case 'second':\n      ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n      ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n      ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n      break;\n    case 'millisecond':\n      ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n      ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n      break;\n    case 'microsecond':\n      ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n      break;\n    case 'nanosecond':\n      break;\n    default:\n      throw new Error('assert not reached');\n  }\n\n  const hours = JSBI.toNumber(hoursBigInt) * sign;\n  const minutes = JSBI.toNumber(minutesBigInt) * sign;\n  const seconds = JSBI.toNumber(secondsBigInt) * sign;\n  const milliseconds = JSBI.toNumber(millisecondsBigInt) * sign;\n  const microseconds = JSBI.toNumber(microsecondsBigInt) * sign;\n  const nanoseconds = JSBI.toNumber(nanosecondsBigInt) * sign;\n\n  for (const prop of [days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds]) {\n    if (!NumberIsFinite(prop)) {\n      if (sign === 1) {\n        return 'positive overflow' as const;\n      } else {\n        return 'negative overflow' as const;\n      }\n    }\n  }\n\n  return { days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nexport function UnbalanceDurationRelative(\n  yearsParam: number,\n  monthsParam: number,\n  weeksParam: number,\n  daysParam: number,\n  largestUnit: Temporal.DateTimeUnit,\n  relativeToParam: ReturnType<typeof ToRelativeTemporalObject>\n): {\n  years: number;\n  months: number;\n  weeks: number;\n  days: number;\n} {\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  const sign = DurationSign(yearsParam, monthsParam, weeksParam, daysParam, 0, 0, 0, 0, 0, 0);\n  if (sign === 0) return { years: yearsParam, months: monthsParam, weeks: weeksParam, days: daysParam };\n  const signBI = JSBI.BigInt(sign);\n\n  let years = JSBI.BigInt(yearsParam);\n  let months = JSBI.BigInt(monthsParam);\n  let weeks = JSBI.BigInt(weeksParam);\n  let days = JSBI.BigInt(daysParam);\n\n  let calendar;\n  let relativeTo: Temporal.PlainDate | undefined;\n  if (relativeToParam) {\n    relativeTo = ToTemporalDate(relativeToParam);\n    calendar = GetSlot(relativeTo, CALENDAR);\n  }\n\n  const oneYear = new TemporalDuration(sign);\n  const oneMonth = new TemporalDuration(0, sign);\n  const oneWeek = new TemporalDuration(0, 0, sign);\n\n  switch (largestUnit) {\n    case 'year':\n      // no-op\n      break;\n    case 'month':\n      {\n        if (!calendar) throw new RangeError('a starting point is required for months balancing');\n        assertExists(relativeTo);\n        // balance years down to months\n        let dateAdd, dateUntil;\n        if (typeof calendar !== 'string') {\n          dateAdd = GetMethod(calendar, 'dateAdd');\n          dateUntil = GetMethod(calendar, 'dateUntil');\n        }\n        while (!isZero(years)) {\n          const newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n          const untilOptions = ObjectCreate(null) as Temporal.DifferenceOptions<typeof largestUnit>;\n          untilOptions.largestUnit = 'month';\n          const untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n          const oneYearMonths = JSBI.BigInt(GetSlot(untilResult, MONTHS));\n          relativeTo = newRelativeTo;\n          months = JSBI.add(months, oneYearMonths);\n          years = JSBI.subtract(years, signBI);\n        }\n      }\n      break;\n    case 'week': {\n      if (!calendar) throw new RangeError('a starting point is required for weeks balancing');\n      assertExists(relativeTo);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      // balance years down to days\n      while (!isZero(years)) {\n        let oneYearDays;\n        ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd));\n        days = JSBI.add(days, JSBI.BigInt(oneYearDays));\n        years = JSBI.subtract(years, signBI);\n      }\n\n      // balance months down to days\n      while (!isZero(months)) {\n        let oneMonthDays;\n        ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n        days = JSBI.add(days, JSBI.BigInt(oneMonthDays));\n        months = JSBI.subtract(months, signBI);\n      }\n      break;\n    }\n    default: {\n      // balance years down to days\n      if (isZero(years) && isZero(months) && isZero(weeks)) break;\n      if (!calendar) throw new RangeError('a starting point is required for balancing calendar units');\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      while (!isZero(years)) {\n        assertExists(relativeTo);\n        let oneYearDays;\n        ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd));\n        days = JSBI.add(days, JSBI.BigInt(oneYearDays));\n        years = JSBI.subtract(years, signBI);\n      }\n\n      // balance months down to days\n      while (!isZero(months)) {\n        assertExists(relativeTo);\n        let oneMonthDays;\n        ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n        days = JSBI.add(days, JSBI.BigInt(oneMonthDays));\n        months = JSBI.subtract(months, signBI);\n      }\n\n      // balance weeks down to days\n      while (!isZero(weeks)) {\n        assertExists(relativeTo);\n        let oneWeekDays;\n        ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));\n        days = JSBI.add(days, JSBI.BigInt(oneWeekDays));\n        weeks = JSBI.subtract(weeks, signBI);\n      }\n      break;\n    }\n  }\n\n  return {\n    years: JSBI.toNumber(years),\n    months: JSBI.toNumber(months),\n    weeks: JSBI.toNumber(weeks),\n    days: JSBI.toNumber(days)\n  };\n}\n\nexport function BalanceDurationRelative(\n  yearsParam: number,\n  monthsParam: number,\n  weeksParam: number,\n  daysParam: number,\n  largestUnit: Temporal.DateTimeUnit,\n  relativeToParam: ReturnType<typeof ToRelativeTemporalObject>\n): {\n  years: number;\n  months: number;\n  weeks: number;\n  days: number;\n} {\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  const sign = DurationSign(yearsParam, monthsParam, weeksParam, daysParam, 0, 0, 0, 0, 0, 0);\n  if (sign === 0) return { years: yearsParam, months: monthsParam, weeks: weeksParam, days: daysParam };\n  const signBI = JSBI.BigInt(sign);\n\n  let years = JSBI.BigInt(yearsParam);\n  let months = JSBI.BigInt(monthsParam);\n  let weeks = JSBI.BigInt(weeksParam);\n  let days = JSBI.BigInt(daysParam);\n\n  let calendar;\n  let relativeTo: Temporal.PlainDate | undefined;\n  if (relativeToParam) {\n    relativeTo = ToTemporalDate(relativeToParam);\n    calendar = GetSlot(relativeTo, CALENDAR);\n  }\n\n  const oneYear = new TemporalDuration(sign);\n  const oneMonth = new TemporalDuration(0, sign);\n  const oneWeek = new TemporalDuration(0, 0, sign);\n\n  switch (largestUnit) {\n    case 'year': {\n      if (!calendar) throw new RangeError('a starting point is required for years balancing');\n      assertExists(relativeTo);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      // balance days up to years\n      let newRelativeTo, oneYearDays;\n      ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd));\n      while (JSBI.greaterThanOrEqual(abs(days), JSBI.BigInt(MathAbs(oneYearDays)))) {\n        days = JSBI.subtract(days, JSBI.BigInt(oneYearDays));\n        years = JSBI.add(years, signBI);\n        relativeTo = newRelativeTo;\n        ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd));\n      }\n\n      // balance days up to months\n      let oneMonthDays;\n      ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      while (JSBI.greaterThanOrEqual(abs(days), JSBI.BigInt(MathAbs(oneMonthDays)))) {\n        days = JSBI.subtract(days, JSBI.BigInt(oneMonthDays));\n        months = JSBI.add(months, signBI);\n        relativeTo = newRelativeTo;\n        ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      }\n\n      // balance months up to years\n      newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n      const dateUntil = typeof calendar !== 'string' ? GetMethod(calendar, 'dateUntil') : undefined;\n      const untilOptions = ObjectCreate(null) as Temporal.DifferenceOptions<'month'>;\n      untilOptions.largestUnit = 'month';\n      let untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n      let oneYearMonths = GetSlot(untilResult, MONTHS);\n      while (JSBI.greaterThanOrEqual(abs(months), JSBI.BigInt(MathAbs(oneYearMonths)))) {\n        months = JSBI.subtract(months, JSBI.BigInt(oneYearMonths));\n        years = JSBI.add(years, signBI);\n        relativeTo = newRelativeTo;\n        newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n        const untilOptions = ObjectCreate(null) as Temporal.DifferenceOptions<'month'>;\n        untilOptions.largestUnit = 'month';\n        untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n        oneYearMonths = GetSlot(untilResult, MONTHS);\n      }\n      break;\n    }\n    case 'month': {\n      if (!calendar) throw new RangeError('a starting point is required for months balancing');\n      assertExists(relativeTo);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      // balance days up to months\n      let newRelativeTo, oneMonthDays;\n      ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      while (JSBI.greaterThanOrEqual(abs(days), JSBI.BigInt(MathAbs(oneMonthDays)))) {\n        days = JSBI.subtract(days, JSBI.BigInt(oneMonthDays));\n        months = JSBI.add(months, signBI);\n        relativeTo = newRelativeTo;\n        ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      }\n      break;\n    }\n    case 'week': {\n      if (!calendar) throw new RangeError('a starting point is required for weeks balancing');\n      assertExists(relativeTo);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      // balance days up to weeks\n      let newRelativeTo, oneWeekDays;\n      ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));\n      while (JSBI.greaterThanOrEqual(abs(days), JSBI.BigInt(MathAbs(oneWeekDays)))) {\n        days = JSBI.subtract(days, JSBI.BigInt(oneWeekDays));\n        weeks = JSBI.add(weeks, signBI);\n        relativeTo = newRelativeTo;\n        ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));\n      }\n      break;\n    }\n    default:\n      // no-op\n      break;\n  }\n\n  return {\n    years: JSBI.toNumber(years),\n    months: JSBI.toNumber(months),\n    weeks: JSBI.toNumber(weeks),\n    days: JSBI.toNumber(days)\n  };\n}\n\nexport function CalculateOffsetShift(\n  relativeTo: ReturnType<typeof ToRelativeTemporalObject>,\n  y: number,\n  mon: number,\n  w: number,\n  d: number\n) {\n  if (IsTemporalZonedDateTime(relativeTo)) {\n    const instant = GetSlot(relativeTo, INSTANT);\n    const timeZone = GetSlot(relativeTo, TIME_ZONE);\n    const calendar = GetSlot(relativeTo, CALENDAR);\n    const offsetBefore = GetOffsetNanosecondsFor(timeZone, instant);\n    const after = AddZonedDateTime(instant, timeZone, calendar, y, mon, w, d, 0, 0, 0, 0, 0, 0);\n    const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n    const instantAfter = new TemporalInstant(after);\n    const offsetAfter = GetOffsetNanosecondsFor(timeZone, instantAfter);\n    return offsetAfter - offsetBefore;\n  }\n  return 0;\n}\n\nexport function CreateNegatedTemporalDuration(duration: Temporal.Duration) {\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  return new TemporalDuration(\n    -GetSlot(duration, YEARS),\n    -GetSlot(duration, MONTHS),\n    -GetSlot(duration, WEEKS),\n    -GetSlot(duration, DAYS),\n    -GetSlot(duration, HOURS),\n    -GetSlot(duration, MINUTES),\n    -GetSlot(duration, SECONDS),\n    -GetSlot(duration, MILLISECONDS),\n    -GetSlot(duration, MICROSECONDS),\n    -GetSlot(duration, NANOSECONDS)\n  );\n}\n\nexport function ConstrainToRange(value: number | undefined, min: number, max: number) {\n  // Math.Max accepts undefined values and returns NaN. Undefined values are\n  // used for optional params in the method below.\n  return MathMin(max, MathMax(min, value as number));\n}\nfunction ConstrainISODate(year: number, monthParam: number, dayParam?: number) {\n  const month = ConstrainToRange(monthParam, 1, 12);\n  const day = ConstrainToRange(dayParam, 1, ISODaysInMonth(year, month));\n  return { year, month, day };\n}\n\nfunction ConstrainTime(\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number\n) {\n  const hour = ConstrainToRange(hourParam, 0, 23);\n  const minute = ConstrainToRange(minuteParam, 0, 59);\n  const second = ConstrainToRange(secondParam, 0, 59);\n  const millisecond = ConstrainToRange(millisecondParam, 0, 999);\n  const microsecond = ConstrainToRange(microsecondParam, 0, 999);\n  const nanosecond = ConstrainToRange(nanosecondParam, 0, 999);\n  return { hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nexport function RejectToRange(value: number, min: number, max: number) {\n  if (value < min || value > max) throw new RangeError(`value out of range: ${min} <= ${value} <= ${max}`);\n}\n\nfunction RejectISODate(year: number, month: number, day: number) {\n  RejectToRange(month, 1, 12);\n  RejectToRange(day, 1, ISODaysInMonth(year, month));\n}\n\nfunction RejectDateRange(year: number, month: number, day: number) {\n  // Noon avoids trouble at edges of DateTime range (excludes midnight)\n  RejectDateTimeRange(year, month, day, 12, 0, 0, 0, 0, 0);\n}\n\nexport function RejectTime(\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number\n) {\n  RejectToRange(hour, 0, 23);\n  RejectToRange(minute, 0, 59);\n  RejectToRange(second, 0, 59);\n  RejectToRange(millisecond, 0, 999);\n  RejectToRange(microsecond, 0, 999);\n  RejectToRange(nanosecond, 0, 999);\n}\n\nfunction RejectDateTime(\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number\n) {\n  RejectISODate(year, month, day);\n  RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\n\nfunction RejectDateTimeRange(\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number\n) {\n  RejectToRange(year, YEAR_MIN, YEAR_MAX);\n  // Reject any DateTime 24 hours or more outside the Instant range\n  if (\n    (year === YEAR_MIN &&\n      null ==\n        GetUTCEpochNanoseconds(year, month, day + 1, hour, minute, second, millisecond, microsecond, nanosecond - 1)) ||\n    (year === YEAR_MAX &&\n      null ==\n        GetUTCEpochNanoseconds(year, month, day - 1, hour, minute, second, millisecond, microsecond, nanosecond + 1))\n  ) {\n    throw new RangeError('DateTime outside of supported range');\n  }\n}\n\nexport function ValidateEpochNanoseconds(epochNanoseconds: JSBI) {\n  if (JSBI.lessThan(epochNanoseconds, NS_MIN) || JSBI.greaterThan(epochNanoseconds, NS_MAX)) {\n    throw new RangeError('Instant outside of supported range');\n  }\n}\n\nfunction RejectYearMonthRange(year: number, month: number) {\n  RejectToRange(year, YEAR_MIN, YEAR_MAX);\n  if (year === YEAR_MIN) {\n    RejectToRange(month, 4, 12);\n  } else if (year === YEAR_MAX) {\n    RejectToRange(month, 1, 9);\n  }\n}\n\nexport function RejectDuration(\n  y: number,\n  mon: number,\n  w: number,\n  d: number,\n  h: number,\n  min: number,\n  s: number,\n  ms: number,\n  µs: number,\n  ns: number\n) {\n  const sign = DurationSign(y, mon, w, d, h, min, s, ms, µs, ns);\n  for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) {\n    if (!NumberIsFinite(prop)) throw new RangeError('infinite values not allowed as duration fields');\n    const propSign = MathSign(prop);\n    if (propSign !== 0 && propSign !== sign) throw new RangeError('mixed-sign values not allowed as duration fields');\n  }\n}\n\nexport function DifferenceISODate<Allowed extends Temporal.DateTimeUnit>(\n  y1: number,\n  m1: number,\n  d1: number,\n  y2: number,\n  m2: number,\n  d2: number,\n  largestUnit: Allowed\n) {\n  switch (largestUnit) {\n    case 'year':\n    case 'month': {\n      const sign = -CompareISODate(y1, m1, d1, y2, m2, d2);\n      if (sign === 0) return { years: 0, months: 0, weeks: 0, days: 0 };\n\n      const start = { year: y1, month: m1, day: d1 };\n      const end = { year: y2, month: m2, day: d2 };\n\n      let years = end.year - start.year;\n      let mid = AddISODate(y1, m1, d1, years, 0, 0, 0, 'constrain');\n      let midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2);\n      if (midSign === 0) {\n        return largestUnit === 'year'\n          ? { years, months: 0, weeks: 0, days: 0 }\n          : { years: 0, months: years * 12, weeks: 0, days: 0 };\n      }\n      let months = end.month - start.month;\n      if (midSign !== sign) {\n        years -= sign;\n        months += sign * 12;\n      }\n      mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain');\n      midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2);\n      if (midSign === 0) {\n        return largestUnit === 'year'\n          ? { years, months, weeks: 0, days: 0 }\n          : { years: 0, months: months + years * 12, weeks: 0, days: 0 };\n      }\n      if (midSign !== sign) {\n        // The end date is later in the month than mid date (or earlier for\n        // negative durations). Back up one month.\n        months -= sign;\n        if (months === -sign) {\n          years -= sign;\n          months = 11 * sign;\n        }\n        mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain');\n      }\n\n      let days = 0;\n      // If we get here, months and years are correct (no overflow), and `mid`\n      // is within the range from `start` to `end`. To count the days between\n      // `mid` and `end`, there are 3 cases:\n      // 1) same month: use simple subtraction\n      // 2) end is previous month from intermediate (negative duration)\n      // 3) end is next month from intermediate (positive duration)\n      if (mid.month === end.month) {\n        // 1) same month: use simple subtraction\n        days = end.day - mid.day;\n      } else if (sign < 0) {\n        // 2) end is previous month from intermediate (negative duration)\n        // Example: intermediate: Feb 1, end: Jan 30, DaysInMonth = 31, days = -2\n        days = -mid.day - (ISODaysInMonth(end.year, end.month) - end.day);\n      } else {\n        // 3) end is next month from intermediate (positive duration)\n        // Example: intermediate: Jan 29, end: Feb 1, DaysInMonth = 31, days = 3\n        days = end.day + (ISODaysInMonth(mid.year, mid.month) - mid.day);\n      }\n\n      if (largestUnit === 'month') {\n        months += years * 12;\n        years = 0;\n      }\n      return { years, months, weeks: 0, days };\n    }\n    case 'week':\n    case 'day': {\n      let larger, smaller, sign;\n      if (CompareISODate(y1, m1, d1, y2, m2, d2) < 0) {\n        smaller = { year: y1, month: m1, day: d1 };\n        larger = { year: y2, month: m2, day: d2 };\n        sign = 1;\n      } else {\n        smaller = { year: y2, month: m2, day: d2 };\n        larger = { year: y1, month: m1, day: d1 };\n        sign = -1;\n      }\n      let days = DayOfYear(larger.year, larger.month, larger.day) - DayOfYear(smaller.year, smaller.month, smaller.day);\n      for (let year = smaller.year; year < larger.year; ++year) {\n        days += LeapYear(year) ? 366 : 365;\n      }\n      let weeks = 0;\n      if (largestUnit === 'week') {\n        weeks = MathFloor(days / 7);\n        days %= 7;\n      }\n      weeks *= sign;\n      days *= sign;\n      return { years: 0, months: 0, weeks, days };\n    }\n    default:\n      throw new Error('assert not reached');\n  }\n}\n\nfunction DifferenceTime(\n  h1: number,\n  min1: number,\n  s1: number,\n  ms1: number,\n  µs1: number,\n  ns1: number,\n  h2: number,\n  min2: number,\n  s2: number,\n  ms2: number,\n  µs2: number,\n  ns2: number\n) {\n  let hours = h2 - h1;\n  let minutes = min2 - min1;\n  let seconds = s2 - s1;\n  let milliseconds = ms2 - ms1;\n  let microseconds = µs2 - µs1;\n  let nanoseconds = ns2 - ns1;\n\n  const sign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  hours *= sign;\n  minutes *= sign;\n  seconds *= sign;\n  milliseconds *= sign;\n  microseconds *= sign;\n  nanoseconds *= sign;\n\n  let deltaDays = 0;\n  ({\n    deltaDays,\n    hour: hours,\n    minute: minutes,\n    second: seconds,\n    millisecond: milliseconds,\n    microsecond: microseconds,\n    nanosecond: nanoseconds\n  } = BalanceTime(hours, minutes, seconds, milliseconds, microseconds, nanoseconds));\n\n  if (deltaDays != 0) throw new Error('assertion failure in DifferenceTime: _bt_.[[Days]] should be 0');\n  hours *= sign;\n  minutes *= sign;\n  seconds *= sign;\n  milliseconds *= sign;\n  microseconds *= sign;\n  nanoseconds *= sign;\n\n  return { hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nfunction DifferenceInstant(\n  ns1: JSBI,\n  ns2: JSBI,\n  increment: number,\n  smallestUnit: keyof typeof nsPerTimeUnit,\n  largestUnit: keyof typeof nsPerTimeUnit,\n  roundingMode: Temporal.RoundingMode\n) {\n  const diff = JSBI.subtract(ns2, ns1);\n\n  let hours = 0;\n  let minutes = 0;\n  let nanoseconds = JSBI.toNumber(JSBI.remainder(diff, THOUSAND));\n  let microseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(diff, THOUSAND), THOUSAND));\n  let milliseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(diff, MILLION), THOUSAND));\n  let seconds = JSBI.toNumber(JSBI.divide(diff, BILLION));\n\n  ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    increment,\n    smallestUnit,\n    roundingMode\n  ));\n  return BalanceDuration(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit);\n}\n\nfunction DifferenceISODateTime(\n  y1Param: number,\n  mon1Param: number,\n  d1Param: number,\n  h1: number,\n  min1: number,\n  s1: number,\n  ms1: number,\n  µs1: number,\n  ns1: number,\n  y2: number,\n  mon2: number,\n  d2: number,\n  h2: number,\n  min2: number,\n  s2: number,\n  ms2: number,\n  µs2: number,\n  ns2: number,\n  calendar: CalendarSlot,\n  largestUnit: Temporal.DateTimeUnit,\n  options: Temporal.DifferenceOptions<Temporal.DateTimeUnit> | undefined\n) {\n  let y1 = y1Param;\n  let mon1 = mon1Param;\n  let d1 = d1Param;\n\n  let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(\n    h1,\n    min1,\n    s1,\n    ms1,\n    µs1,\n    ns1,\n    h2,\n    min2,\n    s2,\n    ms2,\n    µs2,\n    ns2\n  );\n\n  const timeSign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  const dateSign = CompareISODate(y2, mon2, d2, y1, mon1, d1);\n  if (dateSign === -timeSign) {\n    ({ year: y1, month: mon1, day: d1 } = BalanceISODate(y1, mon1, d1 - timeSign));\n    ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n      -timeSign,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      largestUnit\n    ));\n  }\n\n  const date1 = CreateTemporalDate(y1, mon1, d1, calendar);\n  const date2 = CreateTemporalDate(y2, mon2, d2, calendar);\n  const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit);\n  const untilOptions = CopyOptions(options);\n  untilOptions.largestUnit = dateLargestUnit;\n  // TODO untilOptions doesn't want to compile as it seems that smallestUnit is not clamped?\n  // Type 'SmallestUnit<DateTimeUnit> | undefined' is not assignable to type\n  //      'SmallestUnit<\"year\" | \"month\" | \"day\" | \"week\"> | undefined'.\n  // Type '\"hour\"' is not assignable to type\n  //      'SmallestUnit<\"year\" | \"month\" | \"day\" | \"week\"> | undefined'.ts(2345)\n  let { years, months, weeks, days } = CalendarDateUntil(calendar, date1, date2, untilOptions as any);\n  // Signs of date part and time part may not agree; balance them together\n  ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    largestUnit\n  ));\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nfunction DifferenceZonedDateTime(\n  ns1: JSBI,\n  ns2: JSBI,\n  timeZone: string | Temporal.TimeZoneProtocol,\n  calendar: CalendarSlot,\n  largestUnit: Temporal.DateTimeUnit,\n  options: Temporal.DifferenceOptions<Temporal.DateTimeUnit>\n) {\n  const nsDiff = JSBI.subtract(ns2, ns1);\n  if (JSBI.equal(nsDiff, ZERO)) {\n    return {\n      years: 0,\n      months: 0,\n      weeks: 0,\n      days: 0,\n      hours: 0,\n      minutes: 0,\n      seconds: 0,\n      milliseconds: 0,\n      microseconds: 0,\n      nanoseconds: 0\n    };\n  }\n\n  // Find the difference in dates only.\n  const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n  const start = new TemporalInstant(ns1);\n  const end = new TemporalInstant(ns2);\n  const dtStart = GetPlainDateTimeFor(timeZone, start, calendar);\n  const dtEnd = GetPlainDateTimeFor(timeZone, end, calendar);\n  let { years, months, weeks, days } = DifferenceISODateTime(\n    GetSlot(dtStart, ISO_YEAR),\n    GetSlot(dtStart, ISO_MONTH),\n    GetSlot(dtStart, ISO_DAY),\n    GetSlot(dtStart, ISO_HOUR),\n    GetSlot(dtStart, ISO_MINUTE),\n    GetSlot(dtStart, ISO_SECOND),\n    GetSlot(dtStart, ISO_MILLISECOND),\n    GetSlot(dtStart, ISO_MICROSECOND),\n    GetSlot(dtStart, ISO_NANOSECOND),\n    GetSlot(dtEnd, ISO_YEAR),\n    GetSlot(dtEnd, ISO_MONTH),\n    GetSlot(dtEnd, ISO_DAY),\n    GetSlot(dtEnd, ISO_HOUR),\n    GetSlot(dtEnd, ISO_MINUTE),\n    GetSlot(dtEnd, ISO_SECOND),\n    GetSlot(dtEnd, ISO_MILLISECOND),\n    GetSlot(dtEnd, ISO_MICROSECOND),\n    GetSlot(dtEnd, ISO_NANOSECOND),\n    calendar,\n    largestUnit,\n    options\n  );\n  const intermediateNs = AddZonedDateTime(start, timeZone, calendar, years, months, weeks, 0, 0, 0, 0, 0, 0, 0);\n  // may disambiguate\n  let timeRemainderNs = JSBI.subtract(ns2, intermediateNs);\n  const intermediate = CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar);\n  ({ nanoseconds: timeRemainderNs, days } = NanosecondsToDays(timeRemainderNs, intermediate));\n\n  // Finally, merge the date and time durations and return the merged result.\n  const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    JSBI.toNumber(timeRemainderNs),\n    'hour'\n  );\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\ntype DifferenceOperation = 'since' | 'until';\n\nfunction GetDifferenceSettings<T extends Temporal.DateTimeUnit>(\n  op: DifferenceOperation,\n  options: Temporal.DifferenceOptions<T>,\n  group: 'datetime' | 'date' | 'time',\n  disallowed: (Temporal.DateTimeUnit | 'auto')[],\n  fallbackSmallest: T,\n  smallestLargestDefaultUnit: T\n) {\n  const ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce((allowed, unitInfo) => {\n    const p = unitInfo[0];\n    const s = unitInfo[1];\n    const c = unitInfo[2];\n    if ((group === 'datetime' || c === group) && !disallowed.includes(s)) {\n      allowed.push(s, p);\n    }\n    return allowed;\n  }, [] as (Temporal.DateTimeUnit | Temporal.PluralUnit<Temporal.DateTimeUnit>)[]);\n\n  let largestUnit = GetTemporalUnit(options, 'largestUnit', group, 'auto');\n  if (disallowed.includes(largestUnit)) {\n    throw new RangeError(`largestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${largestUnit}`);\n  }\n\n  const roundingIncrement = ToTemporalRoundingIncrement(options);\n\n  let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n  if (op === 'since') roundingMode = NegateTemporalRoundingMode(roundingMode);\n\n  const smallestUnit = GetTemporalUnit(options, 'smallestUnit', group, fallbackSmallest);\n  if (disallowed.includes(smallestUnit)) {\n    throw new RangeError(`smallestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${smallestUnit}`);\n  }\n\n  const defaultLargestUnit = LargerOfTwoTemporalUnits(smallestLargestDefaultUnit, smallestUnit);\n  if (largestUnit === 'auto') largestUnit = defaultLargestUnit;\n  if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n    throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n  }\n  const MAX_DIFFERENCE_INCREMENTS: { [k in Temporal.DateTimeUnit]?: number } = {\n    hour: 24,\n    minute: 60,\n    second: 60,\n    millisecond: 1000,\n    microsecond: 1000,\n    nanosecond: 1000\n  };\n  const maximum = MAX_DIFFERENCE_INCREMENTS[smallestUnit];\n  if (maximum !== undefined) ValidateTemporalRoundingIncrement(roundingIncrement, maximum, false);\n\n  return { largestUnit: largestUnit as T, roundingIncrement, roundingMode, smallestUnit: smallestUnit as T };\n}\n\nexport function DifferenceTemporalInstant(\n  operation: DifferenceOperation,\n  instant: Temporal.Instant,\n  otherParam: InstantParams['until'][0],\n  options: InstantParams['until'][1] | undefined\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalInstant(otherParam);\n\n  const resolvedOptions = CopyOptions(options);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'time', [], 'nanosecond', 'second');\n\n  const onens = GetSlot(instant, EPOCHNANOSECONDS);\n  const twons = GetSlot(other, EPOCHNANOSECONDS);\n  let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(\n    onens,\n    twons,\n    settings.roundingIncrement,\n    settings.smallestUnit,\n    settings.largestUnit,\n    settings.roundingMode\n  );\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(\n    0,\n    0,\n    0,\n    0,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n}\n\nexport function DifferenceTemporalPlainDate(\n  operation: DifferenceOperation,\n  plainDate: Temporal.PlainDate,\n  otherParam: PlainDateParams['until'][0],\n  options: PlainDateParams['until'][1]\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalDate(otherParam);\n  const calendar = GetSlot(plainDate, CALENDAR);\n  const otherCalendar = GetSlot(other, CALENDAR);\n  ThrowIfCalendarsNotEqual(calendar, otherCalendar, 'compute difference between dates');\n\n  const resolvedOptions = CopyOptions(options);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'date', [], 'day', 'day');\n  resolvedOptions.largestUnit = settings.largestUnit;\n\n  let { years, months, weeks, days } = CalendarDateUntil(calendar, plainDate, other, resolvedOptions);\n\n  if (settings.smallestUnit !== 'day' || settings.roundingIncrement !== 1) {\n    ({ years, months, weeks, days } = RoundDuration(\n      years,\n      months,\n      weeks,\n      days,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      settings.roundingIncrement,\n      settings.smallestUnit,\n      settings.roundingMode,\n      plainDate\n    ));\n  }\n\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(sign * years, sign * months, sign * weeks, sign * days, 0, 0, 0, 0, 0, 0);\n}\n\nexport function DifferenceTemporalPlainDateTime(\n  operation: DifferenceOperation,\n  plainDateTime: Temporal.PlainDateTime,\n  otherParam: PlainDateTimeParams['until'][0],\n  options: PlainDateTimeParams['until'][1]\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalDateTime(otherParam);\n  const calendar = GetSlot(plainDateTime, CALENDAR);\n  const otherCalendar = GetSlot(other, CALENDAR);\n  ThrowIfCalendarsNotEqual(calendar, otherCalendar, 'compute difference between dates');\n\n  const resolvedOptions = CopyOptions(options);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'datetime', [], 'nanosecond', 'day');\n\n  let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n    DifferenceISODateTime(\n      GetSlot(plainDateTime, ISO_YEAR),\n      GetSlot(plainDateTime, ISO_MONTH),\n      GetSlot(plainDateTime, ISO_DAY),\n      GetSlot(plainDateTime, ISO_HOUR),\n      GetSlot(plainDateTime, ISO_MINUTE),\n      GetSlot(plainDateTime, ISO_SECOND),\n      GetSlot(plainDateTime, ISO_MILLISECOND),\n      GetSlot(plainDateTime, ISO_MICROSECOND),\n      GetSlot(plainDateTime, ISO_NANOSECOND),\n      GetSlot(other, ISO_YEAR),\n      GetSlot(other, ISO_MONTH),\n      GetSlot(other, ISO_DAY),\n      GetSlot(other, ISO_HOUR),\n      GetSlot(other, ISO_MINUTE),\n      GetSlot(other, ISO_SECOND),\n      GetSlot(other, ISO_MILLISECOND),\n      GetSlot(other, ISO_MICROSECOND),\n      GetSlot(other, ISO_NANOSECOND),\n      calendar,\n      settings.largestUnit,\n      resolvedOptions\n    );\n\n  const relativeTo = TemporalDateTimeToDate(plainDateTime);\n  ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(\n    years,\n    months,\n    weeks,\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    settings.roundingIncrement,\n    settings.smallestUnit,\n    settings.roundingMode,\n    relativeTo\n  ));\n  ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    settings.largestUnit\n  ));\n\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(\n    sign * years,\n    sign * months,\n    sign * weeks,\n    sign * days,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n}\n\nexport function DifferenceTemporalPlainTime(\n  operation: DifferenceOperation,\n  plainTime: Temporal.PlainTime,\n  otherParam: PlainTimeParams['until'][0],\n  options: PlainTimeParams['until'][1]\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalTime(otherParam);\n\n  const resolvedOptions = CopyOptions(options);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'time', [], 'nanosecond', 'hour');\n\n  let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(\n    GetSlot(plainTime, ISO_HOUR),\n    GetSlot(plainTime, ISO_MINUTE),\n    GetSlot(plainTime, ISO_SECOND),\n    GetSlot(plainTime, ISO_MILLISECOND),\n    GetSlot(plainTime, ISO_MICROSECOND),\n    GetSlot(plainTime, ISO_NANOSECOND),\n    GetSlot(other, ISO_HOUR),\n    GetSlot(other, ISO_MINUTE),\n    GetSlot(other, ISO_SECOND),\n    GetSlot(other, ISO_MILLISECOND),\n    GetSlot(other, ISO_MICROSECOND),\n    GetSlot(other, ISO_NANOSECOND)\n  );\n  ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(\n    0,\n    0,\n    0,\n    0,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    settings.roundingIncrement,\n    settings.smallestUnit,\n    settings.roundingMode\n  ));\n  ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n    0,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    settings.largestUnit\n  ));\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(\n    0,\n    0,\n    0,\n    0,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n}\n\nexport function DifferenceTemporalPlainYearMonth(\n  operation: DifferenceOperation,\n  yearMonth: Temporal.PlainYearMonth,\n  otherParam: PlainYearMonthParams['until'][0],\n  options: PlainYearMonthParams['until'][1]\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalYearMonth(otherParam);\n  const calendar = GetSlot(yearMonth, CALENDAR);\n  const otherCalendar = GetSlot(other, CALENDAR);\n  ThrowIfCalendarsNotEqual(calendar, otherCalendar, 'compute difference between months');\n\n  const resolvedOptions = CopyOptions(options);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'date', ['week', 'day'], 'month', 'year');\n  resolvedOptions.largestUnit = settings.largestUnit;\n\n  const fieldNames = CalendarFields(calendar, ['monthCode', 'year']) as AnyTemporalKey[];\n  const thisFields = PrepareTemporalFields(yearMonth, fieldNames, []);\n  thisFields.day = 1;\n  const thisDate = CalendarDateFromFields(calendar, thisFields);\n  const otherFields = PrepareTemporalFields(other, fieldNames, []);\n  otherFields.day = 1;\n  const otherDate = CalendarDateFromFields(calendar, otherFields);\n\n  let { years, months } = CalendarDateUntil(calendar, thisDate, otherDate, resolvedOptions);\n\n  if (settings.smallestUnit !== 'month' || settings.roundingIncrement !== 1) {\n    ({ years, months } = RoundDuration(\n      years,\n      months,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      settings.roundingIncrement,\n      settings.smallestUnit,\n      settings.roundingMode,\n      thisDate\n    ));\n  }\n\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(sign * years, sign * months, 0, 0, 0, 0, 0, 0, 0, 0);\n}\n\nexport function DifferenceTemporalZonedDateTime(\n  operation: DifferenceOperation,\n  zonedDateTime: Temporal.ZonedDateTime,\n  otherParam: ZonedDateTimeParams['until'][0],\n  options: ZonedDateTimeParams['until'][1]\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalZonedDateTime(otherParam);\n  const calendar = GetSlot(zonedDateTime, CALENDAR);\n  const otherCalendar = GetSlot(other, CALENDAR);\n  ThrowIfCalendarsNotEqual(calendar, otherCalendar, 'compute difference between dates');\n\n  const resolvedOptions = CopyOptions(options);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'datetime', [], 'nanosecond', 'hour');\n  resolvedOptions.largestUnit = settings.largestUnit;\n\n  const ns1 = GetSlot(zonedDateTime, EPOCHNANOSECONDS);\n  const ns2 = GetSlot(other, EPOCHNANOSECONDS);\n  let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds;\n  if (\n    settings.largestUnit !== 'year' &&\n    settings.largestUnit !== 'month' &&\n    settings.largestUnit !== 'week' &&\n    settings.largestUnit !== 'day'\n  ) {\n    // The user is only asking for a time difference, so return difference of instants.\n    years = 0;\n    months = 0;\n    weeks = 0;\n    days = 0;\n    ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(\n      ns1,\n      ns2,\n      settings.roundingIncrement,\n      settings.smallestUnit as Temporal.TimeUnit,\n      settings.largestUnit as Temporal.TimeUnit,\n      settings.roundingMode\n    ));\n  } else {\n    const timeZone = GetSlot(zonedDateTime, TIME_ZONE);\n    if (!TimeZoneEquals(timeZone, GetSlot(other, TIME_ZONE))) {\n      throw new RangeError(\n        \"When calculating difference between time zones, largestUnit must be 'hours' \" +\n          'or smaller because day lengths can vary between time zones due to DST or time zone offset changes.'\n      );\n    }\n    ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n      DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, settings.largestUnit, resolvedOptions));\n    ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(\n      years,\n      months,\n      weeks,\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      settings.roundingIncrement,\n      settings.smallestUnit,\n      settings.roundingMode,\n      zonedDateTime\n    ));\n    ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n      AdjustRoundedDurationDays(\n        years,\n        months,\n        weeks,\n        days,\n        hours,\n        minutes,\n        seconds,\n        milliseconds,\n        microseconds,\n        nanoseconds,\n        settings.roundingIncrement,\n        settings.smallestUnit,\n        settings.roundingMode,\n        zonedDateTime\n      ));\n  }\n\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(\n    sign * years,\n    sign * months,\n    sign * weeks,\n    sign * days,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n}\n\nexport function AddISODate(\n  yearParam: number,\n  monthParam: number,\n  dayParam: number,\n  yearsParam: number,\n  monthsParam: number,\n  weeksParam: number,\n  daysParam: number,\n  overflow: Temporal.ArithmeticOptions['overflow']\n) {\n  let year = yearParam;\n  let month = monthParam;\n  let day = dayParam;\n  let years = yearsParam;\n  let months = monthsParam;\n  let weeks = weeksParam;\n  let days = daysParam;\n\n  year += years;\n  month += months;\n  ({ year, month } = BalanceISOYearMonth(year, month));\n  ({ year, month, day } = RegulateISODate(year, month, day, overflow));\n  days += 7 * weeks;\n  day += days;\n  ({ year, month, day } = BalanceISODate(year, month, day));\n  return { year, month, day };\n}\n\nfunction AddTime(\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number,\n  hours: number,\n  minutes: number,\n  seconds: number,\n  milliseconds: number,\n  microseconds: number,\n  nanoseconds: number\n) {\n  let hour = hourParam;\n  let minute = minuteParam;\n  let second = secondParam;\n  let millisecond = millisecondParam;\n  let microsecond = microsecondParam;\n  let nanosecond = nanosecondParam;\n\n  hour += hours;\n  minute += minutes;\n  second += seconds;\n  millisecond += milliseconds;\n  microsecond += microseconds;\n  nanosecond += nanoseconds;\n  let deltaDays = 0;\n  ({ deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond\n  ));\n  return { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nfunction AddDuration(\n  y1: number,\n  mon1: number,\n  w1: number,\n  d1: number,\n  h1: number,\n  min1: number,\n  s1: number,\n  ms1: number,\n  µs1: number,\n  ns1: number,\n  y2: number,\n  mon2: number,\n  w2: number,\n  d2: number,\n  h2: number,\n  min2: number,\n  s2: number,\n  ms2: number,\n  µs2: number,\n  ns2: number,\n  relativeTo: ReturnType<typeof ToRelativeTemporalObject>\n) {\n  const largestUnit1 = DefaultTemporalLargestUnit(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1);\n  const largestUnit2 = DefaultTemporalLargestUnit(y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2);\n  const largestUnit = LargerOfTwoTemporalUnits(largestUnit1, largestUnit2);\n\n  let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds;\n  if (!relativeTo) {\n    if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week') {\n      throw new RangeError('relativeTo is required for years, months, or weeks arithmetic');\n    }\n    years = months = weeks = 0;\n    ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n      d1 + d2,\n      JSBI.add(JSBI.BigInt(h1), JSBI.BigInt(h2)),\n      JSBI.add(JSBI.BigInt(min1), JSBI.BigInt(min2)),\n      JSBI.add(JSBI.BigInt(s1), JSBI.BigInt(s2)),\n      JSBI.add(JSBI.BigInt(ms1), JSBI.BigInt(ms2)),\n      JSBI.add(JSBI.BigInt(µs1), JSBI.BigInt(µs2)),\n      JSBI.add(JSBI.BigInt(ns1), JSBI.BigInt(ns2)),\n      largestUnit\n    ));\n  } else if (IsTemporalDate(relativeTo)) {\n    const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n    const calendar = GetSlot(relativeTo, CALENDAR);\n\n    const dateDuration1 = new TemporalDuration(y1, mon1, w1, d1, 0, 0, 0, 0, 0, 0);\n    const dateDuration2 = new TemporalDuration(y2, mon2, w2, d2, 0, 0, 0, 0, 0, 0);\n    const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n    const intermediate = CalendarDateAdd(calendar, relativeTo, dateDuration1, undefined, dateAdd);\n    const end = CalendarDateAdd(calendar, intermediate, dateDuration2, undefined, dateAdd);\n\n    const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit) as Temporal.DateUnit;\n    const differenceOptions = ObjectCreate(null) as Temporal.DifferenceOptions<Temporal.DateUnit>;\n    differenceOptions.largestUnit = dateLargestUnit;\n    ({ years, months, weeks, days } = CalendarDateUntil(calendar, relativeTo, end, differenceOptions));\n    // Signs of date part and time part may not agree; balance them together\n    ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n      days,\n      JSBI.add(JSBI.BigInt(h1), JSBI.BigInt(h2)),\n      JSBI.add(JSBI.BigInt(min1), JSBI.BigInt(min2)),\n      JSBI.add(JSBI.BigInt(s1), JSBI.BigInt(s2)),\n      JSBI.add(JSBI.BigInt(ms1), JSBI.BigInt(ms2)),\n      JSBI.add(JSBI.BigInt(µs1), JSBI.BigInt(µs2)),\n      JSBI.add(JSBI.BigInt(ns1), JSBI.BigInt(ns2)),\n      largestUnit\n    ));\n  } else {\n    // relativeTo is a ZonedDateTime\n    const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n    const timeZone = GetSlot(relativeTo, TIME_ZONE);\n    const calendar = GetSlot(relativeTo, CALENDAR);\n    const intermediateNs = AddZonedDateTime(\n      GetSlot(relativeTo, INSTANT),\n      timeZone,\n      calendar,\n      y1,\n      mon1,\n      w1,\n      d1,\n      h1,\n      min1,\n      s1,\n      ms1,\n      µs1,\n      ns1\n    );\n    const endNs = AddZonedDateTime(\n      new TemporalInstant(intermediateNs),\n      timeZone,\n      calendar,\n      y2,\n      mon2,\n      w2,\n      d2,\n      h2,\n      min2,\n      s2,\n      ms2,\n      µs2,\n      ns2\n    );\n    if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') {\n      // The user is only asking for a time difference, so return difference of instants.\n      years = 0;\n      months = 0;\n      weeks = 0;\n      days = 0;\n      ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(\n        GetSlot(relativeTo, EPOCHNANOSECONDS),\n        endNs,\n        1,\n        'nanosecond',\n        largestUnit,\n        'halfExpand'\n      ));\n    } else {\n      ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n        DifferenceZonedDateTime(\n          GetSlot(relativeTo, EPOCHNANOSECONDS),\n          endNs,\n          timeZone,\n          calendar,\n          largestUnit,\n          ObjectCreate(null) as Temporal.DifferenceOptions<Temporal.DateTimeUnit>\n        ));\n    }\n  }\n\n  RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nfunction AddInstant(\n  epochNanoseconds: JSBI,\n  h: number | JSBI,\n  min: number | JSBI,\n  s: number | JSBI,\n  ms: number | JSBI,\n  µs: number | JSBI,\n  ns: number | JSBI\n) {\n  let sum = ZERO;\n  sum = JSBI.add(sum, JSBI.BigInt(ns));\n  sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(µs), THOUSAND));\n  sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(ms), MILLION));\n  sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(s), BILLION));\n  sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(min), JSBI.BigInt(60 * 1e9)));\n  sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(h), JSBI.BigInt(60 * 60 * 1e9)));\n\n  const result = JSBI.add(epochNanoseconds, sum);\n  ValidateEpochNanoseconds(result);\n  return result;\n}\n\nfunction AddDateTime(\n  year: number,\n  month: number,\n  day: number,\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number,\n  calendar: CalendarSlot,\n  years: number,\n  months: number,\n  weeks: number,\n  daysParam: number,\n  hours: number,\n  minutes: number,\n  seconds: number,\n  milliseconds: number,\n  microseconds: number,\n  nanoseconds: number,\n  options?: Temporal.ArithmeticOptions\n) {\n  let days = daysParam;\n  // Add the time part\n  let { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(\n    hourParam,\n    minuteParam,\n    secondParam,\n    millisecondParam,\n    microsecondParam,\n    nanosecondParam,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds\n  );\n  days += deltaDays;\n\n  // Delegate the date part addition to the calendar\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  const datePart = CreateTemporalDate(year, month, day, calendar);\n  const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n  const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options);\n\n  return {\n    year: GetSlot(addedDate, ISO_YEAR),\n    month: GetSlot(addedDate, ISO_MONTH),\n    day: GetSlot(addedDate, ISO_DAY),\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond\n  };\n}\n\nexport function AddZonedDateTime(\n  instant: Temporal.Instant,\n  timeZone: string | Temporal.TimeZoneProtocol,\n  calendar: CalendarSlot,\n  years: number,\n  months: number,\n  weeks: number,\n  days: number,\n  h: number | JSBI,\n  min: number | JSBI,\n  s: number | JSBI,\n  ms: number | JSBI,\n  µs: number | JSBI,\n  ns: number | JSBI,\n  options?: Temporal.ArithmeticOptions\n) {\n  // If only time is to be added, then use Instant math. It's not OK to fall\n  // through to the date/time code below because compatible disambiguation in\n  // the PlainDateTime=>Instant conversion will change the offset of any\n  // ZonedDateTime in the repeated clock time after a backwards transition.\n  // When adding/subtracting time units and not dates, this disambiguation is\n  // not expected and so is avoided below via a fast path for time-only\n  // arithmetic.\n  // BTW, this behavior is similar in spirit to offset: 'prefer' in `with`.\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  if (DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0) === 0) {\n    return AddInstant(GetSlot(instant, EPOCHNANOSECONDS), h, min, s, ms, µs, ns);\n  }\n\n  // RFC 5545 requires the date portion to be added in calendar days and the\n  // time portion to be added in exact time.\n  const dt = GetPlainDateTimeFor(timeZone, instant, calendar);\n  const datePart = CreateTemporalDate(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), calendar);\n  const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n  const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options);\n  const dtIntermediate = CreateTemporalDateTime(\n    GetSlot(addedDate, ISO_YEAR),\n    GetSlot(addedDate, ISO_MONTH),\n    GetSlot(addedDate, ISO_DAY),\n    GetSlot(dt, ISO_HOUR),\n    GetSlot(dt, ISO_MINUTE),\n    GetSlot(dt, ISO_SECOND),\n    GetSlot(dt, ISO_MILLISECOND),\n    GetSlot(dt, ISO_MICROSECOND),\n    GetSlot(dt, ISO_NANOSECOND),\n    calendar\n  );\n\n  // Note that 'compatible' is used below because this disambiguation behavior\n  // is required by RFC 5545.\n  const instantIntermediate = GetInstantFor(timeZone, dtIntermediate, 'compatible');\n  return AddInstant(GetSlot(instantIntermediate, EPOCHNANOSECONDS), h, min, s, ms, µs, ns);\n}\n\ntype AddSubtractOperation = 'add' | 'subtract';\n\nexport function AddDurationToOrSubtractDurationFromDuration(\n  operation: AddSubtractOperation,\n  duration: Temporal.Duration,\n  other: DurationParams['add'][0],\n  optionsParam: DurationParams['add'][1]\n): Temporal.Duration {\n  const sign = operation === 'subtract' ? -1 : 1;\n  let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n    ToTemporalDurationRecord(other);\n  const options = GetOptionsObject(optionsParam);\n  const relativeTo = ToRelativeTemporalObject(options);\n  ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = AddDuration(\n    GetSlot(duration, YEARS),\n    GetSlot(duration, MONTHS),\n    GetSlot(duration, WEEKS),\n    GetSlot(duration, DAYS),\n    GetSlot(duration, HOURS),\n    GetSlot(duration, MINUTES),\n    GetSlot(duration, SECONDS),\n    GetSlot(duration, MILLISECONDS),\n    GetSlot(duration, MICROSECONDS),\n    GetSlot(duration, NANOSECONDS),\n    sign * years,\n    sign * months,\n    sign * weeks,\n    sign * days,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds,\n    relativeTo\n  ));\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\n\nexport function AddDurationToOrSubtractDurationFromInstant(\n  operation: AddSubtractOperation,\n  instant: Temporal.Instant,\n  durationLike: InstantParams['add'][0]\n): Temporal.Instant {\n  const sign = operation === 'subtract' ? -1 : 1;\n  const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToLimitedTemporalDuration(durationLike, [\n    'years',\n    'months',\n    'weeks',\n    'days'\n  ]);\n  const ns = AddInstant(\n    GetSlot(instant, EPOCHNANOSECONDS),\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n  const Instant = GetIntrinsic('%Temporal.Instant%');\n  return new Instant(ns);\n}\n\nexport function AddDurationToOrSubtractDurationFromPlainDateTime(\n  operation: AddSubtractOperation,\n  dateTime: Temporal.PlainDateTime,\n  durationLike: PlainDateTimeParams['add'][0],\n  optionsParam: PlainDateTimeParams['add'][1]\n): Temporal.PlainDateTime {\n  const sign = operation === 'subtract' ? -1 : 1;\n  const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n    ToTemporalDurationRecord(durationLike);\n  const options = GetOptionsObject(optionsParam);\n  const calendar = GetSlot(dateTime, CALENDAR);\n  const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = AddDateTime(\n    GetSlot(dateTime, ISO_YEAR),\n    GetSlot(dateTime, ISO_MONTH),\n    GetSlot(dateTime, ISO_DAY),\n    GetSlot(dateTime, ISO_HOUR),\n    GetSlot(dateTime, ISO_MINUTE),\n    GetSlot(dateTime, ISO_SECOND),\n    GetSlot(dateTime, ISO_MILLISECOND),\n    GetSlot(dateTime, ISO_MICROSECOND),\n    GetSlot(dateTime, ISO_NANOSECOND),\n    calendar,\n    sign * years,\n    sign * months,\n    sign * weeks,\n    sign * days,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds,\n    options\n  );\n  return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\n\nexport function AddDurationToOrSubtractDurationFromPlainTime(\n  operation: AddSubtractOperation,\n  temporalTime: Temporal.PlainTime,\n  durationLike: PlainTimeParams['add'][0]\n): Temporal.PlainTime {\n  const sign = operation === 'subtract' ? -1 : 1;\n  const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n  let { hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(\n    GetSlot(temporalTime, ISO_HOUR),\n    GetSlot(temporalTime, ISO_MINUTE),\n    GetSlot(temporalTime, ISO_SECOND),\n    GetSlot(temporalTime, ISO_MILLISECOND),\n    GetSlot(temporalTime, ISO_MICROSECOND),\n    GetSlot(temporalTime, ISO_NANOSECOND),\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n  ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond,\n    'reject'\n  ));\n  const PlainTime = GetIntrinsic('%Temporal.PlainTime%');\n  return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\n\nexport function AddDurationToOrSubtractDurationFromPlainYearMonth(\n  operation: AddSubtractOperation,\n  yearMonth: Temporal.PlainYearMonth,\n  durationLike: PlainYearMonthParams['add'][0],\n  optionsParam: PlainYearMonthParams['add'][1]\n): Temporal.PlainYearMonth {\n  let duration = ToTemporalDurationRecord(durationLike);\n  if (operation === 'subtract') {\n    duration = {\n      years: -duration.years,\n      months: -duration.months,\n      weeks: -duration.weeks,\n      days: -duration.days,\n      hours: -duration.hours,\n      minutes: -duration.minutes,\n      seconds: -duration.seconds,\n      milliseconds: -duration.milliseconds,\n      microseconds: -duration.microseconds,\n      nanoseconds: -duration.nanoseconds\n    };\n  }\n  let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = duration;\n  ({ days } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 'day'));\n\n  const options = GetOptionsObject(optionsParam);\n\n  const calendar = GetSlot(yearMonth, CALENDAR);\n  const fieldNames = CalendarFields(calendar, ['monthCode', 'year'] as const);\n  const fields = PrepareTemporalFields(yearMonth, fieldNames, []);\n  const fieldsCopy = ObjectCreate(null);\n  CopyDataProperties(fieldsCopy, fields, []);\n  fields.day = 1;\n  // PrepareTemporalFields returns a type where 'day' is potentially undefined,\n  // but TS doesn't narrow the type as a result of the assignment above.\n  uncheckedAssertNarrowedType<typeof fields & { day: number }>(fields, '`day` is guaranteed to be non-undefined');\n  let startDate = CalendarDateFromFields(calendar, fields);\n  const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n  const dateAdd = GetMethod(calendar, 'dateAdd');\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  if (sign < 0) {\n    const oneMonthDuration = new Duration(0, 1, 0, 0, 0, 0, 0, 0, 0, 0);\n    const nextMonth = CalendarDateAdd(calendar, startDate, oneMonthDuration, undefined, dateAdd);\n    const minusDayDuration = new Duration(0, 0, 0, -1, 0, 0, 0, 0, 0, 0);\n    const endOfMonth = CalendarDateAdd(calendar, nextMonth, minusDayDuration, undefined, dateAdd);\n    fieldsCopy.day = CalendarDay(calendar, endOfMonth);\n    startDate = CalendarDateFromFields(calendar, fieldsCopy);\n  }\n  const durationToAdd = new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n  const optionsCopy = CopyOptions(options);\n  const addedDate = CalendarDateAdd(calendar, startDate, durationToAdd, options, dateAdd);\n  const addedDateFields = PrepareTemporalFields(addedDate, fieldNames, []);\n\n  return CalendarYearMonthFromFields(calendar, addedDateFields, optionsCopy);\n}\n\nexport function AddDurationToOrSubtractDurationFromZonedDateTime(\n  operation: AddSubtractOperation,\n  zonedDateTime: Temporal.ZonedDateTime,\n  durationLike: ZonedDateTimeParams['add'][0],\n  optionsParam: ZonedDateTimeParams['add'][1]\n): Temporal.ZonedDateTime {\n  const sign = operation === 'subtract' ? -1 : 1;\n  const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n    ToTemporalDurationRecord(durationLike);\n  const options = GetOptionsObject(optionsParam);\n  const timeZone = GetSlot(zonedDateTime, TIME_ZONE);\n  const calendar = GetSlot(zonedDateTime, CALENDAR);\n  const epochNanoseconds = AddZonedDateTime(\n    GetSlot(zonedDateTime, INSTANT),\n    timeZone,\n    calendar,\n    sign * years,\n    sign * months,\n    sign * weeks,\n    sign * days,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds,\n    options\n  );\n  return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\n\nfunction RoundNumberToIncrement(quantity: JSBI, increment: JSBI, mode: Temporal.RoundingMode) {\n  if (JSBI.equal(increment, ONE)) return quantity;\n  let { quotient, remainder } = divmod(quantity, increment);\n  if (JSBI.equal(remainder, ZERO)) return quantity;\n  const sign = JSBI.lessThan(remainder, ZERO) ? -1 : 1;\n  const tiebreaker = abs(JSBI.multiply(remainder, JSBI.BigInt(2)));\n  const tie = JSBI.equal(tiebreaker, increment);\n  const expandIsNearer = JSBI.greaterThan(tiebreaker, increment);\n  switch (mode) {\n    case 'ceil':\n      if (sign > 0) quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      break;\n    case 'floor':\n      if (sign < 0) quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      break;\n    case 'expand':\n      // always expand if there is a remainder\n      quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      break;\n    case 'trunc':\n      // no change needed, because divmod is a truncation\n      break;\n    case 'halfCeil':\n      if (expandIsNearer || (tie && sign > 0)) {\n        quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      }\n      break;\n    case 'halfFloor':\n      if (expandIsNearer || (tie && sign < 0)) {\n        quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      }\n      break;\n    case 'halfExpand':\n      // \"half up away from zero\"\n      if (expandIsNearer || tie) {\n        quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      }\n      break;\n    case 'halfTrunc':\n      if (expandIsNearer) {\n        quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      }\n      break;\n    case 'halfEven':\n      if (expandIsNearer || (tie && JSBI.toNumber(JSBI.remainder(abs(quotient), JSBI.BigInt(2))) === 1)) {\n        quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      }\n      break;\n  }\n  return JSBI.multiply(quotient, increment);\n}\n\nexport function RoundInstant(\n  epochNs: JSBI,\n  increment: number,\n  unit: keyof typeof nsPerTimeUnit,\n  roundingMode: Temporal.RoundingMode\n) {\n  let { remainder } = NonNegativeBigIntDivmod(epochNs, DAY_NANOS);\n  const wholeDays = JSBI.subtract(epochNs, remainder);\n  const roundedRemainder = RoundNumberToIncrement(\n    remainder,\n    JSBI.BigInt(nsPerTimeUnit[unit] * increment),\n    roundingMode\n  );\n  return JSBI.add(wholeDays, roundedRemainder);\n}\n\nexport function RoundISODateTime(\n  yearParam: number,\n  monthParam: number,\n  dayParam: number,\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number,\n  increment: number,\n  unit: UnitSmallerThanOrEqualTo<'day'>,\n  roundingMode: Temporal.RoundingMode,\n  dayLengthNs = 86400e9\n) {\n  const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = RoundTime(\n    hourParam,\n    minuteParam,\n    secondParam,\n    millisecondParam,\n    microsecondParam,\n    nanosecondParam,\n    increment,\n    unit,\n    roundingMode,\n    dayLengthNs\n  );\n  const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays);\n  return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nexport function RoundTime(\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number,\n  increment: number,\n  unit: keyof typeof nsPerTimeUnit | 'day',\n  roundingMode: Temporal.RoundingMode,\n  dayLengthNs = 86400e9\n) {\n  let quantity = ZERO;\n  switch (unit) {\n    case 'day':\n    case 'hour':\n      quantity = JSBI.BigInt(hour);\n    // fall through\n    case 'minute':\n      quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(minute));\n    // fall through\n    case 'second':\n      quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(second));\n    // fall through\n    case 'millisecond':\n      quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(millisecond));\n    // fall through\n    case 'microsecond':\n      quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(microsecond));\n    // fall through\n    case 'nanosecond':\n      quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(nanosecond));\n  }\n  const nsPerUnit = unit === 'day' ? dayLengthNs : nsPerTimeUnit[unit];\n  const rounded = RoundNumberToIncrement(quantity, JSBI.BigInt(nsPerUnit * increment), roundingMode);\n  const result = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(nsPerUnit)));\n  switch (unit) {\n    case 'day':\n      return { deltaDays: result, hour: 0, minute: 0, second: 0, millisecond: 0, microsecond: 0, nanosecond: 0 };\n    case 'hour':\n      return BalanceTime(result, 0, 0, 0, 0, 0);\n    case 'minute':\n      return BalanceTime(hour, result, 0, 0, 0, 0);\n    case 'second':\n      return BalanceTime(hour, minute, result, 0, 0, 0);\n    case 'millisecond':\n      return BalanceTime(hour, minute, second, result, 0, 0);\n    case 'microsecond':\n      return BalanceTime(hour, minute, second, millisecond, result, 0);\n    case 'nanosecond':\n      return BalanceTime(hour, minute, second, millisecond, microsecond, result);\n    default:\n      throw new Error(`Invalid unit ${unit}`);\n  }\n}\n\nfunction DaysUntil(\n  earlier: Temporal.PlainDate | Temporal.PlainDateTime | Temporal.ZonedDateTime,\n  later: Temporal.PlainDate | Temporal.PlainDateTime | Temporal.ZonedDateTime\n) {\n  return DifferenceISODate(\n    GetSlot(earlier, ISO_YEAR),\n    GetSlot(earlier, ISO_MONTH),\n    GetSlot(earlier, ISO_DAY),\n    GetSlot(later, ISO_YEAR),\n    GetSlot(later, ISO_MONTH),\n    GetSlot(later, ISO_DAY),\n    'day'\n  ).days;\n}\n\nfunction MoveRelativeDate(\n  calendar: CalendarSlot,\n  relativeToParam: NonNullable<ReturnType<typeof ToRelativeTemporalObject>>,\n  duration: Temporal.Duration,\n  dateAdd: Temporal.CalendarProtocol['dateAdd'] | undefined\n) {\n  const later = CalendarDateAdd(calendar, relativeToParam, duration, undefined, dateAdd);\n  const days = DaysUntil(relativeToParam, later);\n  return { relativeTo: later, days };\n}\n\nexport function MoveRelativeZonedDateTime(\n  relativeTo: Temporal.ZonedDateTime,\n  years: number,\n  months: number,\n  weeks: number,\n  days: number\n) {\n  const timeZone = GetSlot(relativeTo, TIME_ZONE);\n  const calendar = GetSlot(relativeTo, CALENDAR);\n  const intermediateNs = AddZonedDateTime(\n    GetSlot(relativeTo, INSTANT),\n    timeZone,\n    calendar,\n    years,\n    months,\n    weeks,\n    days,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0\n  );\n  return CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar);\n}\n\nexport function AdjustRoundedDurationDays(\n  yearsParam: number,\n  monthsParam: number,\n  weeksParam: number,\n  daysParam: number,\n  hoursParam: number,\n  minutesParam: number,\n  secondsParam: number,\n  millisecondsParam: number,\n  microsecondsParam: number,\n  nanosecondsParam: number,\n  increment: number,\n  unit: Temporal.DateTimeUnit,\n  roundingMode: Temporal.RoundingMode,\n  relativeTo: ReturnType<typeof ToRelativeTemporalObject>\n) {\n  let years = yearsParam;\n  let months = monthsParam;\n  let weeks = weeksParam;\n  let days = daysParam;\n  let hours = hoursParam;\n  let minutes = minutesParam;\n  let seconds = secondsParam;\n  let milliseconds = millisecondsParam;\n  let microseconds = microsecondsParam;\n  let nanoseconds = nanosecondsParam;\n  if (\n    !IsTemporalZonedDateTime(relativeTo) ||\n    unit === 'year' ||\n    unit === 'month' ||\n    unit === 'week' ||\n    unit === 'day' ||\n    (unit === 'nanosecond' && increment === 1)\n  ) {\n    return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n  }\n\n  // There's one more round of rounding possible: if relativeTo is a\n  // ZonedDateTime, the time units could have rounded up into enough hours\n  // to exceed the day length. If this happens, grow the date part by a\n  // single day and re-run exact time rounding on the smaller remainder. DO\n  // NOT RECURSE, because once the extra hours are sucked up into the date\n  // duration, there's no way for another full day to come from the next\n  // round of rounding. And if it were possible (e.g. contrived calendar\n  // with 30-minute-long \"days\") then it'd risk an infinite loop.\n  let timeRemainderNs = TotalDurationNanoseconds(\n    0,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    0\n  );\n  const direction = MathSign(JSBI.toNumber(timeRemainderNs));\n\n  const timeZone = GetSlot(relativeTo, TIME_ZONE);\n  const calendar = GetSlot(relativeTo, CALENDAR);\n  const dayStart = AddZonedDateTime(\n    GetSlot(relativeTo, INSTANT),\n    timeZone,\n    calendar,\n    years,\n    months,\n    weeks,\n    days,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0\n  );\n  const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n  const dayEnd = AddZonedDateTime(\n    new TemporalInstant(dayStart),\n    timeZone,\n    calendar,\n    0,\n    0,\n    0,\n    direction,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0\n  );\n  const dayLengthNs = JSBI.subtract(dayEnd, dayStart);\n\n  if (\n    JSBI.greaterThanOrEqual(JSBI.multiply(JSBI.subtract(timeRemainderNs, dayLengthNs), JSBI.BigInt(direction)), ZERO)\n  ) {\n    ({ years, months, weeks, days } = AddDuration(\n      years,\n      months,\n      weeks,\n      days,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      direction,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      relativeTo\n    ));\n    timeRemainderNs = RoundInstant(JSBI.subtract(timeRemainderNs, dayLengthNs), increment, unit, roundingMode);\n    ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      JSBI.toNumber(timeRemainderNs),\n      'hour'\n    ));\n  }\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nexport function RoundDuration(\n  yearsParam: number,\n  monthsParam: number,\n  weeksParam: number,\n  daysParam: number,\n  hoursParam: number,\n  minutesParam: number,\n  secondsParam: number,\n  millisecondsParam: number,\n  microsecondsParam: number,\n  nanosecondsParam: number,\n  increment: number,\n  unit: Temporal.DateTimeUnit,\n  roundingMode: Temporal.RoundingMode,\n  relativeToParam: ReturnType<typeof ToRelativeTemporalObject> = undefined\n) {\n  let years = yearsParam;\n  let months = monthsParam;\n  let weeks = weeksParam;\n  let days = daysParam;\n  let hours = hoursParam;\n  let minutes = minutesParam;\n  let seconds = secondsParam;\n  let milliseconds = millisecondsParam;\n  let microseconds = microsecondsParam;\n  let nanoseconds = JSBI.BigInt(nanosecondsParam);\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  let calendar, zdtRelative;\n  // A cast is used below because relativeTo will be either PlainDate or\n  // undefined for the rest of this long method (after any ZDT=>PlainDate\n  // conversion below), and TS isn't smart enough to know that the type has\n  // changed. See https://github.com/microsoft/TypeScript/issues/27706.\n  let relativeTo = relativeToParam as Temporal.PlainDate | undefined;\n  if (relativeTo) {\n    if (IsTemporalZonedDateTime(relativeTo)) {\n      zdtRelative = relativeTo;\n      relativeTo = ToTemporalDate(relativeTo);\n    } else if (!IsTemporalDate(relativeTo)) {\n      throw new TypeError('starting point must be PlainDate or ZonedDateTime');\n    }\n    calendar = GetSlot(relativeTo, CALENDAR);\n  }\n\n  // First convert time units up to days, if rounding to days or higher units.\n  // If rounding relative to a ZonedDateTime, then some days may not be 24h.\n  // TS doesn't know that `dayLengthNs` is only used if the unit is day or\n  // larger. We'll cast away `undefined` when it's used lower down below.\n  let dayLengthNs: JSBI | undefined;\n  if (unit === 'year' || unit === 'month' || unit === 'week' || unit === 'day') {\n    nanoseconds = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanosecondsParam, 0);\n    let intermediate;\n    if (zdtRelative) {\n      intermediate = MoveRelativeZonedDateTime(zdtRelative, years, months, weeks, days);\n    }\n    let deltaDays;\n    let dayLength: number;\n    ({ days: deltaDays, nanoseconds, dayLengthNs: dayLength } = NanosecondsToDays(nanoseconds, intermediate));\n    dayLengthNs = JSBI.BigInt(dayLength);\n    days += deltaDays;\n    hours = minutes = seconds = milliseconds = microseconds = 0;\n  }\n\n  let total: number;\n  switch (unit) {\n    case 'year': {\n      if (!calendar) throw new RangeError('A starting point is required for years rounding');\n      assertExists(relativeTo);\n\n      // convert months and weeks to days by calculating difference(\n      // relativeTo + years, relativeTo + { years, months, weeks })\n      const yearsDuration = new TemporalDuration(years);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      const yearsLater = CalendarDateAdd(calendar, relativeTo, yearsDuration, undefined, dateAdd);\n      const yearsMonthsWeeks = new TemporalDuration(years, months, weeks);\n      const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd);\n      const monthsWeeksInDays = DaysUntil(yearsLater, yearsMonthsWeeksLater);\n      relativeTo = yearsLater;\n      days += monthsWeeksInDays;\n\n      const wholeDays = new TemporalDuration(0, 0, 0, days);\n      const wholeDaysLater = CalendarDateAdd(calendar, relativeTo, wholeDays, undefined, dateAdd);\n      const untilOptions = ObjectCreate(null) as Temporal.DifferenceOptions<typeof unit>;\n      untilOptions.largestUnit = 'year';\n      const yearsPassed = CalendarDateUntil(calendar, relativeTo, wholeDaysLater, untilOptions).years;\n      years += yearsPassed;\n      const oldRelativeTo = relativeTo;\n      const yearsPassedDuration = new TemporalDuration(yearsPassed);\n      relativeTo = CalendarDateAdd(calendar, relativeTo, yearsPassedDuration, undefined, dateAdd);\n      const daysPassed = DaysUntil(oldRelativeTo, relativeTo);\n      days -= daysPassed;\n      const oneYear = new TemporalDuration(days < 0 ? -1 : 1);\n      let { days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd);\n\n      // Note that `nanoseconds` below (here and in similar code for months,\n      // weeks, and days further below) isn't actually nanoseconds for the\n      // full date range.  Instead, it's a BigInt representation of total\n      // days multiplied by the number of nanoseconds in the last day of\n      // the duration. This lets us do days-or-larger rounding using BigInt\n      // math which reduces precision loss.\n      oneYearDays = MathAbs(oneYearDays);\n      // dayLengthNs is never undefined if unit is `day` or larger.\n      assertExists(dayLengthNs);\n      const divisor = JSBI.multiply(JSBI.BigInt(oneYearDays), dayLengthNs);\n      nanoseconds = JSBI.add(\n        JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(years)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)),\n        nanoseconds\n      );\n      const rounded = RoundNumberToIncrement(nanoseconds, JSBI.multiply(divisor, JSBI.BigInt(increment)), roundingMode);\n      total = BigIntDivideToNumber(nanoseconds, divisor);\n      years = JSBI.toNumber(JSBI.divide(rounded, divisor));\n      nanoseconds = ZERO;\n      months = weeks = days = 0;\n      break;\n    }\n    case 'month': {\n      if (!calendar) throw new RangeError('A starting point is required for months rounding');\n      assertExists(relativeTo);\n\n      // convert weeks to days by calculating difference(relativeTo +\n      //   { years, months }, relativeTo + { years, months, weeks })\n      const yearsMonths = new TemporalDuration(years, months);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      const yearsMonthsLater = CalendarDateAdd(calendar, relativeTo, yearsMonths, undefined, dateAdd);\n      const yearsMonthsWeeks = new TemporalDuration(years, months, weeks);\n      const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd);\n      const weeksInDays = DaysUntil(yearsMonthsLater, yearsMonthsWeeksLater);\n      relativeTo = yearsMonthsLater;\n      days += weeksInDays;\n\n      // Months may be different lengths of days depending on the calendar,\n      // convert days to months in a loop as described above under 'years'.\n      const sign = MathSign(days);\n      const oneMonth = new TemporalDuration(0, days < 0 ? -1 : 1);\n      let oneMonthDays: number;\n      ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n        months += sign;\n        days -= oneMonthDays;\n        ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      }\n      oneMonthDays = MathAbs(oneMonthDays);\n      // dayLengthNs is never undefined if unit is `day` or larger.\n      assertExists(dayLengthNs);\n      const divisor = JSBI.multiply(JSBI.BigInt(oneMonthDays), dayLengthNs);\n      nanoseconds = JSBI.add(\n        JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(months)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)),\n        nanoseconds\n      );\n      const rounded = RoundNumberToIncrement(nanoseconds, JSBI.multiply(divisor, JSBI.BigInt(increment)), roundingMode);\n      total = BigIntDivideToNumber(nanoseconds, divisor);\n      months = JSBI.toNumber(JSBI.divide(rounded, divisor));\n      nanoseconds = ZERO;\n      weeks = days = 0;\n      break;\n    }\n    case 'week': {\n      if (!calendar) throw new RangeError('A starting point is required for weeks rounding');\n      assertExists(relativeTo);\n\n      // Weeks may be different lengths of days depending on the calendar,\n      // convert days to weeks in a loop as described above under 'years'.\n      const sign = MathSign(days);\n      const oneWeek = new TemporalDuration(0, 0, days < 0 ? -1 : 1);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      let oneWeekDays;\n      ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));\n      while (MathAbs(days) >= MathAbs(oneWeekDays)) {\n        weeks += sign;\n        days -= oneWeekDays;\n        ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));\n      }\n      oneWeekDays = MathAbs(oneWeekDays);\n      // dayLengthNs is never undefined if unit is `day` or larger.\n      assertExists(dayLengthNs);\n      const divisor = JSBI.multiply(JSBI.BigInt(oneWeekDays), dayLengthNs);\n      nanoseconds = JSBI.add(\n        JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(weeks)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)),\n        nanoseconds\n      );\n      const rounded = RoundNumberToIncrement(nanoseconds, JSBI.multiply(divisor, JSBI.BigInt(increment)), roundingMode);\n      total = BigIntDivideToNumber(nanoseconds, divisor);\n      weeks = JSBI.toNumber(JSBI.divide(rounded, divisor));\n      nanoseconds = ZERO;\n      days = 0;\n      break;\n    }\n    case 'day': {\n      // dayLengthNs is never undefined if unit is `day` or larger.\n      assertExists(dayLengthNs);\n      const divisor = dayLengthNs;\n      nanoseconds = JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(days)), nanoseconds);\n      const rounded = RoundNumberToIncrement(nanoseconds, JSBI.multiply(divisor, JSBI.BigInt(increment)), roundingMode);\n      total = BigIntDivideToNumber(nanoseconds, divisor);\n      days = JSBI.toNumber(JSBI.divide(rounded, divisor));\n      nanoseconds = ZERO;\n      break;\n    }\n    case 'hour': {\n      const divisor = 3600e9;\n      let allNanoseconds = JSBI.multiply(JSBI.BigInt(hours), JSBI.BigInt(3600e9));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9)));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n      allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n      total = BigIntDivideToNumber(allNanoseconds, JSBI.BigInt(divisor));\n      const rounded = RoundNumberToIncrement(allNanoseconds, JSBI.BigInt(divisor * increment), roundingMode);\n      hours = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n      nanoseconds = ZERO;\n      minutes = seconds = milliseconds = microseconds = 0;\n      break;\n    }\n    case 'minute': {\n      const divisor = 60e9;\n      let allNanoseconds = JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n      allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n      total = BigIntDivideToNumber(allNanoseconds, JSBI.BigInt(divisor));\n      const rounded = RoundNumberToIncrement(allNanoseconds, JSBI.BigInt(divisor * increment), roundingMode);\n      minutes = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n      nanoseconds = ZERO;\n      seconds = milliseconds = microseconds = 0;\n      break;\n    }\n    case 'second': {\n      const divisor = 1e9;\n      let allNanoseconds = JSBI.multiply(JSBI.BigInt(seconds), BILLION);\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n      allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n      total = BigIntDivideToNumber(allNanoseconds, JSBI.BigInt(divisor));\n      const rounded = RoundNumberToIncrement(allNanoseconds, JSBI.BigInt(divisor * increment), roundingMode);\n      seconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n      nanoseconds = ZERO;\n      milliseconds = microseconds = 0;\n      break;\n    }\n    case 'millisecond': {\n      const divisor = 1e6;\n      let allNanoseconds = JSBI.multiply(JSBI.BigInt(milliseconds), MILLION);\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n      allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n      total = BigIntDivideToNumber(allNanoseconds, JSBI.BigInt(divisor));\n      const rounded = RoundNumberToIncrement(allNanoseconds, JSBI.BigInt(divisor * increment), roundingMode);\n      milliseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n      nanoseconds = ZERO;\n      microseconds = 0;\n      break;\n    }\n    case 'microsecond': {\n      const divisor = 1e3;\n      let allNanoseconds = JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND);\n      allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n      total = BigIntDivideToNumber(allNanoseconds, JSBI.BigInt(divisor));\n      const rounded = RoundNumberToIncrement(allNanoseconds, JSBI.BigInt(divisor * increment), roundingMode);\n      microseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n      nanoseconds = ZERO;\n      break;\n    }\n    case 'nanosecond': {\n      total = JSBI.toNumber(nanoseconds);\n      nanoseconds = RoundNumberToIncrement(JSBI.BigInt(nanoseconds), JSBI.BigInt(increment), roundingMode);\n      break;\n    }\n  }\n  return {\n    years,\n    months,\n    weeks,\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds: JSBI.toNumber(nanoseconds),\n    total\n  };\n}\n\nexport function CompareISODate(y1: number, m1: number, d1: number, y2: number, m2: number, d2: number) {\n  for (const [x, y] of [\n    [y1, y2],\n    [m1, m2],\n    [d1, d2]\n  ]) {\n    if (x !== y) return ComparisonResult(x - y);\n  }\n  return 0;\n}\n\n// Not abstract operations from the spec\n\nfunction NonNegativeBigIntDivmod(x: JSBI, y: JSBI) {\n  let { quotient, remainder } = divmod(x, y);\n  if (JSBI.lessThan(remainder, ZERO)) {\n    quotient = JSBI.subtract(quotient, ONE);\n    remainder = JSBI.add(remainder, y);\n  }\n  return { quotient, remainder };\n}\n\nexport function BigIntFloorDiv(left: JSBI, right: JSBI) {\n  const { quotient, remainder } = divmod(left, right);\n  if (!isZero(remainder) && !isNegativeJSBI(left) != !isNegativeJSBI(right)) {\n    return JSBI.subtract(quotient, ONE);\n  }\n  return quotient;\n}\n\n/** Divide two JSBIs, and return the result as a Number, including the remainder. */\nexport function BigIntDivideToNumber(dividend: JSBI, divisor: JSBI) {\n  const { quotient, remainder } = divmod(dividend, divisor);\n  const result = JSBI.toNumber(quotient) + JSBI.toNumber(remainder) / JSBI.toNumber(divisor);\n  return result;\n}\n\n// Defaults to native bigint, or something \"native bigint-like\".\n// For users of Temporal that are running in environments without native BigInt,\n// the only guarantee we should give is that the returned object's toString will\n// return a string containing an accurate base 10 value of this bigint. This\n// form factor should correctly interop with other bigint compat libraries\n// easily.\ntype ExternalBigInt = bigint;\n\nexport function ToBigIntExternal(arg: unknown): ExternalBigInt {\n  const jsbiBI = ToBigInt(arg);\n  if (typeof (globalThis as any).BigInt !== 'undefined') return (globalThis as any).BigInt(jsbiBI.toString(10));\n  return jsbiBI as unknown as ExternalBigInt;\n}\n\nexport function ToBigInt(arg: unknown): JSBI {\n  let prim = arg;\n  if (typeof arg === 'object') {\n    const toPrimFn = (arg as { [Symbol.toPrimitive]: unknown })[Symbol.toPrimitive];\n    if (toPrimFn && typeof toPrimFn === 'function') {\n      prim = ReflectApply(toPrimFn, arg, ['number']);\n    }\n  }\n\n  // The AO ToBigInt throws on numbers because it does not allow implicit\n  // conversion between number and bigint (unlike the bigint constructor).\n  if (typeof prim === 'number') {\n    throw new TypeError('cannot convert number to bigint');\n  }\n  if (typeof prim === 'bigint') {\n    // JSBI doesn't know anything about the bigint type, and intentionally\n    // assumes it doesn't exist. Passing one to the BigInt function will throw\n    // an error.\n    return JSBI.BigInt(prim.toString(10));\n  }\n  // JSBI will properly coerce types into a BigInt the same as the native BigInt\n  // constructor will, with the exception of native bigint which is handled\n  // above.\n  // As of 2023-04-07, the only runtime type that neither of those can handle is\n  // 'symbol', and both native bigint and the JSBI.BigInt function will throw an\n  // error if they are given a Symbol.\n  return JSBI.BigInt(prim as string | boolean | object);\n}\n\n// Note: This method returns values with bogus nanoseconds based on the previous iteration's\n// milliseconds. That way there is a guarantee that the full nanoseconds are always going to be\n// increasing at least and that the microsecond and nanosecond fields are likely to be non-zero.\nexport const SystemUTCEpochNanoSeconds: () => JSBI = (() => {\n  let ns = JSBI.BigInt(Date.now() % 1e6);\n  return () => {\n    const ms = JSBI.BigInt(Date.now());\n    const result = JSBI.add(JSBI.multiply(ms, MILLION), ns);\n    ns = JSBI.remainder(ms, MILLION);\n    if (JSBI.greaterThan(result, NS_MAX)) return NS_MAX;\n    if (JSBI.lessThan(result, NS_MIN)) return NS_MIN;\n    return result;\n  };\n})();\n\nexport function DefaultTimeZone() {\n  return new IntlDateTimeFormat().resolvedOptions().timeZone;\n}\n\nexport function ComparisonResult(value: number) {\n  return value < 0 ? -1 : value > 0 ? 1 : (value as 0);\n}\n\nexport function GetOptionsObject<T>(options: T) {\n  if (options === undefined) return ObjectCreate(null) as NonNullable<T>;\n  if (IsObject(options) && options !== null) return options;\n  throw new TypeError(`Options parameter must be an object, not ${options === null ? 'null' : `${typeof options}`}`);\n}\n\nexport function CreateOnePropObject<K extends string, V>(propName: K, propValue: V): { [k in K]: V } {\n  const o = ObjectCreate(null);\n  o[propName] = propValue;\n  return o;\n}\n\nfunction CopyOptions<T extends { [s in K]?: unknown }, K extends string & keyof T>(options: T | undefined) {\n  const optionsCopy = ObjectCreate(null) as T;\n  CopyDataProperties(optionsCopy, GetOptionsObject(options), []);\n  return optionsCopy;\n}\n\ntype StringlyTypedKeys<T> = Exclude<keyof T, symbol | number>;\nfunction GetOption<P extends StringlyTypedKeys<O>, O extends Partial<Record<P, unknown>>>(\n  options: O,\n  property: P,\n  allowedValues: ReadonlyArray<O[P]>,\n  fallback: undefined\n): O[P];\nfunction GetOption<\n  P extends StringlyTypedKeys<O>,\n  O extends Partial<Record<P, unknown>>,\n  Fallback extends Required<O>[P] | undefined\n>(\n  options: O,\n  property: P,\n  allowedValues: ReadonlyArray<O[P]>,\n  fallback: Fallback\n): Fallback extends undefined ? O[P] | undefined : Required<O>[P];\nfunction GetOption<\n  P extends StringlyTypedKeys<O>,\n  O extends Partial<Record<P, unknown>>,\n  Fallback extends Required<O>[P] | undefined\n>(\n  options: O,\n  property: P,\n  allowedValues: ReadonlyArray<O[P]>,\n  fallback: O[P]\n): Fallback extends undefined ? O[P] | undefined : Required<O>[P] {\n  let value = options[property];\n  if (value !== undefined) {\n    value = ToString(value) as O[P];\n    if (!allowedValues.includes(value)) {\n      throw new RangeError(`${property} must be one of ${allowedValues.join(', ')}, not ${value}`);\n    }\n    return value;\n  }\n  return fallback;\n}\n\nexport function IsBuiltinCalendar(id: string): id is BuiltinCalendarId {\n  return BUILTIN_CALENDAR_IDS.includes(ASCIILowercase(id));\n}\n\nexport function ASCIILowercase<T extends string>(str: T): T {\n  // The spec defines this operation distinct from String.prototype.lowercase,\n  // so we'll follow the spec here. Note that nasty security issues that can\n  // happen for some use cases if you're comparing case-modified non-ASCII\n  // values. For example, Turkish's \"I\" character was the source of a security\n  // issue involving \"file://\" URLs. See\n  // https://haacked.com/archive/2012/07/05/turkish-i-problem-and-why-you-should-care.aspx/.\n  return str.replace(/[A-Z]/g, (l) => {\n    const code = l.charCodeAt(0);\n    return String.fromCharCode(code + 0x20);\n  }) as T;\n}\n\nconst OFFSET = new RegExp(`^${PARSE.offset.source}$`);\n\nfunction bisect(\n  getState: (epochNs: JSBI) => number,\n  leftParam: JSBI,\n  rightParam: JSBI,\n  lstateParam: number = getState(leftParam),\n  rstateParam: number = getState(rightParam)\n) {\n  // This doesn't make much sense - why do these get converted unnecessarily?\n  let left = JSBI.BigInt(leftParam);\n  let right = JSBI.BigInt(rightParam);\n  let lstate = lstateParam;\n  let rstate = rstateParam;\n  while (JSBI.greaterThan(JSBI.subtract(right, left), ONE)) {\n    const middle = JSBI.divide(JSBI.add(left, right), JSBI.BigInt(2));\n    const mstate = getState(middle);\n    if (mstate === lstate) {\n      left = middle;\n      lstate = mstate;\n    } else if (mstate === rstate) {\n      right = middle;\n      rstate = mstate;\n    } else {\n      throw new Error(`invalid state in bisection ${lstate} - ${mstate} - ${rstate}`);\n    }\n  }\n  return right;\n}\n\nconst nsPerTimeUnit = {\n  hour: 3600e9,\n  minute: 60e9,\n  second: 1e9,\n  millisecond: 1e6,\n  microsecond: 1e3,\n  nanosecond: 1\n};\n", "import * as ES from './ecmascript';\nimport { GetIntrinsic } from './intrinsicclass';\nimport {\n  GetSlot,\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  CALENDAR\n} from './slots';\nimport type { Temporal, Intl } from '..';\nimport type { DateTimeFormatParams as Params, DateTimeFormatReturn as Return } from './internaltypes';\n\nconst DATE = Symbol('date');\nconst YM = Symbol('ym');\nconst MD = Symbol('md');\nconst TIME = Symbol('time');\nconst DATETIME = Symbol('datetime');\nconst INST = Symbol('instant');\nconst ORIGINAL = Symbol('original');\nconst TZ_RESOLVED = Symbol('timezone');\nconst CAL_ID = Symbol('calendar-id');\nconst LOCALE = Symbol('locale');\nconst OPTIONS = Symbol('options');\n\nconst descriptor = <T extends (...args: any[]) => any>(value: T) => {\n  return {\n    value,\n    enumerable: true,\n    writable: false,\n    configurable: true\n  };\n};\n\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst ObjectAssign = Object.assign;\nconst ObjectHasOwnProperty = Object.prototype.hasOwnProperty;\nconst ReflectApply = Reflect.apply;\n\ninterface CustomFormatters {\n  [DATE]: typeof dateAmend | globalThis.Intl.DateTimeFormat;\n  [YM]: typeof yearMonthAmend | typeof globalThis.Intl.DateTimeFormat;\n  [MD]: typeof monthDayAmend | typeof globalThis.Intl.DateTimeFormat;\n  [TIME]: typeof timeAmend | typeof globalThis.Intl.DateTimeFormat;\n  [DATETIME]: typeof datetimeAmend | typeof globalThis.Intl.DateTimeFormat;\n  [INST]: typeof instantAmend | typeof globalThis.Intl.DateTimeFormat;\n}\n\ninterface PrivateProps extends CustomFormatters {\n  [ORIGINAL]: globalThis.Intl.DateTimeFormat;\n  [TZ_RESOLVED]: string | Temporal.TimeZoneProtocol;\n  [CAL_ID]: globalThis.Intl.ResolvedDateTimeFormatOptions['calendar'];\n  [LOCALE]: globalThis.Intl.ResolvedDateTimeFormatOptions['locale'];\n  [OPTIONS]: Intl.DateTimeFormatOptions;\n}\n\ntype OptionsAmenderFunction = (options: Intl.DateTimeFormatOptions) => globalThis.Intl.DateTimeFormatOptions;\ntype FormatterOrAmender = globalThis.Intl.DateTimeFormat | OptionsAmenderFunction;\n\n// Construction of built-in Intl.DateTimeFormat objects is sloooooow,\n// so we'll only create those instances when we need them.\n// See https://bugs.chromium.org/p/v8/issues/detail?id=6528\nfunction getPropLazy<T extends PrivateProps, P extends keyof CustomFormatters>(\n  obj: T,\n  prop: P\n): globalThis.Intl.DateTimeFormat {\n  let val = obj[prop] as FormatterOrAmender;\n  if (typeof val === 'function') {\n    // If we get here, `val` is an \"amender function\". It will take the user's\n    // options and transform them into suitable options to be passed into the\n    // built-in (non-polyfill) Intl.DateTimeFormat constructor. These options\n    // will vary depending on the Temporal type, so that's why we store separate\n    // formatters in separate props on the polyfill's DateTimeFormat instances.\n    // The efficiency happens because we don't create an (expensive) formatter\n    // until the user calls toLocaleString for that Temporal type.\n    val = new IntlDateTimeFormat(obj[LOCALE], val(obj[OPTIONS]));\n    // TODO: can this be typed more cleanly?\n    (obj[prop] as globalThis.Intl.DateTimeFormat) = val;\n  }\n  return val;\n}\n\ntype DateTimeFormatImpl = Intl.DateTimeFormat & PrivateProps;\n\nfunction DateTimeFormatImpl(\n  this: Intl.DateTimeFormat & PrivateProps,\n  locale: Params['constructor'][0] = undefined,\n  optionsParam: Params['constructor'][1] = {}\n) {\n  if (!(this instanceof DateTimeFormatImpl)) {\n    type Construct = new (\n      locale: Params['constructor'][0],\n      optionsParam: Params['constructor'][1]\n    ) => Intl.DateTimeFormat;\n    return new (DateTimeFormatImpl as unknown as Construct)(locale, optionsParam);\n  }\n  const hasOptions = typeof optionsParam !== 'undefined';\n  const options = hasOptions ? ObjectAssign({}, optionsParam) : {};\n  // TODO: remove type assertion after Temporal types land in TS lib types\n  const original = new IntlDateTimeFormat(locale, options as globalThis.Intl.DateTimeFormatOptions);\n  const ro = original.resolvedOptions();\n\n  // DateTimeFormat instances are very expensive to create. Therefore, they will\n  // be lazily created only when needed, using the locale and options provided.\n  // But it's possible for callers to mutate those inputs before lazy creation\n  // happens. For this reason, we clone the inputs instead of caching the\n  // original objects. To avoid the complexity of deep cloning any inputs that\n  // are themselves objects (e.g. the locales array, or options property values\n  // that will be coerced to strings), we rely on `resolvedOptions()` to do the\n  // coercion and cloning for us. Unfortunately, we can't just use the resolved\n  // options as-is because our options-amending logic adds additional fields if\n  // the user doesn't supply any unit fields like year, month, day, hour, etc.\n  // Therefore, we limit the properties in the clone to properties that were\n  // present in the original input.\n  if (hasOptions) {\n    const clonedResolved = ObjectAssign({}, ro);\n    for (const prop in clonedResolved) {\n      if (!ReflectApply(ObjectHasOwnProperty, options, [prop])) {\n        delete clonedResolved[prop as keyof typeof clonedResolved];\n      }\n    }\n    this[OPTIONS] = clonedResolved as Intl.DateTimeFormatOptions;\n  } else {\n    this[OPTIONS] = options;\n  }\n\n  this[LOCALE] = ro.locale;\n  this[ORIGINAL] = original;\n  this[TZ_RESOLVED] = ro.timeZone;\n  this[CAL_ID] = ro.calendar;\n  this[DATE] = dateAmend;\n  this[YM] = yearMonthAmend;\n  this[MD] = monthDayAmend;\n  this[TIME] = timeAmend;\n  this[DATETIME] = datetimeAmend;\n  this[INST] = instantAmend;\n  return undefined; // TODO: I couldn't satisfy TS without adding this. Is there another way?\n}\n\nObject.defineProperty(DateTimeFormatImpl, 'name', {\n  writable: true,\n  value: 'DateTimeFormat'\n});\n\nDateTimeFormatImpl.supportedLocalesOf = function (\n  locales: Params['supportedLocalesOf'][0],\n  options: Params['supportedLocalesOf'][1]\n) {\n  return IntlDateTimeFormat.supportedLocalesOf(locales, options as globalThis.Intl.DateTimeFormatOptions);\n};\n\nconst propertyDescriptors: Partial<Record<keyof Intl.DateTimeFormat, PropertyDescriptor>> = {\n  resolvedOptions: descriptor(resolvedOptions),\n  format: descriptor(format),\n  formatRange: descriptor(formatRange)\n};\n\nif ('formatToParts' in IntlDateTimeFormat.prototype) {\n  propertyDescriptors.formatToParts = descriptor(formatToParts);\n}\n\nif ('formatRangeToParts' in IntlDateTimeFormat.prototype) {\n  propertyDescriptors.formatRangeToParts = descriptor(formatRangeToParts);\n}\n\nDateTimeFormatImpl.prototype = Object.create(IntlDateTimeFormat.prototype, propertyDescriptors);\n\n// Ensure that the prototype isn't writeable.\nObject.defineProperty(DateTimeFormatImpl, 'prototype', {\n  writable: false,\n  enumerable: false,\n  configurable: false\n});\n\nexport const DateTimeFormat = DateTimeFormatImpl as unknown as typeof Intl.DateTimeFormat;\n\nfunction resolvedOptions(this: DateTimeFormatImpl): Return['resolvedOptions'] {\n  return this[ORIGINAL].resolvedOptions();\n}\n\n// TODO: investigate why there's a rest parameter here. Does this function really need to accept extra params?\n// And if so, why doesn't formatRange also accept extra params?\nfunction format<P extends readonly unknown[]>(\n  this: DateTimeFormatImpl,\n  datetime: Params['format'][0],\n  ...rest: P\n): Return['format'] {\n  let { instant, formatter } = extractOverrides(datetime, this);\n  if (instant && formatter) {\n    return formatter.format(instant.epochMilliseconds);\n  }\n  // Support spreading additional args for future expansion of this Intl method\n  type AllowExtraParams = (datetime: Parameters<Intl.DateTimeFormat['format']>[0], ...rest: P) => Return['format'];\n  return (this[ORIGINAL].format as unknown as AllowExtraParams)(datetime, ...rest);\n}\n\nfunction formatToParts<P extends readonly unknown[]>(\n  this: DateTimeFormatImpl,\n  datetime: Params['formatToParts'][0],\n  ...rest: P\n): Return['formatToParts'] {\n  let { instant, formatter } = extractOverrides(datetime, this);\n  if (instant && formatter) {\n    return formatter.formatToParts(instant.epochMilliseconds);\n  }\n  // Support spreading additional args for future expansion of this Intl method\n  type AllowExtraParams = (\n    datetime: Parameters<Intl.DateTimeFormat['formatToParts']>[0],\n    ...rest: P\n  ) => Return['formatToParts'];\n  return (this[ORIGINAL].formatToParts as unknown as AllowExtraParams)(datetime, ...rest);\n}\n\nfunction formatRange(this: DateTimeFormatImpl, a: Params['formatRange'][0], b: Params['formatRange'][1]) {\n  if (isTemporalObject(a) || isTemporalObject(b)) {\n    if (!sameTemporalType(a, b)) {\n      throw new TypeError('Intl.DateTimeFormat.formatRange accepts two values of the same type');\n    }\n    const { instant: aa, formatter: aformatter } = extractOverrides(a as unknown as TypesWithToLocaleString, this);\n    const { instant: bb, formatter: bformatter } = extractOverrides(b as unknown as TypesWithToLocaleString, this);\n    if (aa && bb && aformatter && bformatter && aformatter === bformatter) {\n      // TODO: Remove type assertion after this method lands in TS lib types\n      return (aformatter as Intl.DateTimeFormat).formatRange(aa.epochMilliseconds, bb.epochMilliseconds);\n    }\n  }\n  // TODO: Remove type assertion after this method lands in TS lib types\n  return (this[ORIGINAL] as Intl.DateTimeFormat).formatRange(a, b);\n}\n\nfunction formatRangeToParts(\n  this: DateTimeFormatImpl,\n  a: Params['formatRangeToParts'][0],\n  b: Params['formatRangeToParts'][1]\n) {\n  if (isTemporalObject(a) || isTemporalObject(b)) {\n    if (!sameTemporalType(a, b)) {\n      throw new TypeError('Intl.DateTimeFormat.formatRangeToParts accepts two values of the same type');\n    }\n    const { instant: aa, formatter: aformatter } = extractOverrides(a, this);\n    const { instant: bb, formatter: bformatter } = extractOverrides(b, this);\n    if (aa && bb && aformatter && bformatter && aformatter === bformatter) {\n      // TODO: Remove type assertion after this method lands in TS lib types\n      return (aformatter as Intl.DateTimeFormat).formatRangeToParts(aa.epochMilliseconds, bb.epochMilliseconds);\n    }\n  }\n  // TODO: Remove type assertion after this method lands in TS lib types\n  return (this[ORIGINAL] as Intl.DateTimeFormat).formatRangeToParts(a, b);\n}\n\n// \"false\" is a signal to delete this option\ntype MaybeFalseOptions = {\n  [K in keyof Intl.DateTimeFormatOptions]?: Intl.DateTimeFormatOptions[K] | false;\n};\n\nfunction amend(optionsParam: Intl.DateTimeFormatOptions = {}, amended: MaybeFalseOptions = {}) {\n  const options = ObjectAssign({}, optionsParam);\n  for (const opt of [\n    'year',\n    'month',\n    'day',\n    'hour',\n    'minute',\n    'second',\n    'weekday',\n    'dayPeriod',\n    'timeZoneName',\n    'dateStyle',\n    'timeStyle'\n  ] as const) {\n    // TODO: can this be typed more cleanly?\n    type OptionMaybeFalse = typeof options[typeof opt] | false;\n    (options[opt] as OptionMaybeFalse) = opt in amended ? amended[opt] : options[opt];\n    if ((options[opt] as OptionMaybeFalse) === false || options[opt] === undefined) delete options[opt];\n  }\n  return options as globalThis.Intl.DateTimeFormatOptions;\n}\n\ntype OptionsType<T extends TypesWithToLocaleString> = NonNullable<Parameters<T['toLocaleString']>[1]>;\n\nfunction timeAmend(optionsParam: OptionsType<Temporal.PlainTime>) {\n  let options = amend(optionsParam, {\n    year: false,\n    month: false,\n    day: false,\n    weekday: false,\n    timeZoneName: false,\n    dateStyle: false\n  });\n  if (!hasTimeOptions(options)) {\n    options = ObjectAssign({}, options, {\n      hour: 'numeric',\n      minute: 'numeric',\n      second: 'numeric'\n    });\n  }\n  return options;\n}\n\nfunction yearMonthAmend(optionsParam: OptionsType<Temporal.PlainYearMonth>) {\n  let options = amend(optionsParam, {\n    day: false,\n    hour: false,\n    minute: false,\n    second: false,\n    weekday: false,\n    dayPeriod: false,\n    timeZoneName: false,\n    dateStyle: false,\n    timeStyle: false\n  });\n  if (!('year' in options || 'month' in options)) {\n    options = ObjectAssign(options, { year: 'numeric', month: 'numeric' });\n  }\n  return options;\n}\n\nfunction monthDayAmend(optionsParam: OptionsType<Temporal.PlainMonthDay>) {\n  let options = amend(optionsParam, {\n    year: false,\n    hour: false,\n    minute: false,\n    second: false,\n    weekday: false,\n    dayPeriod: false,\n    timeZoneName: false,\n    dateStyle: false,\n    timeStyle: false\n  });\n  if (!('month' in options || 'day' in options)) {\n    options = ObjectAssign({}, options, { month: 'numeric', day: 'numeric' });\n  }\n  return options;\n}\n\nfunction dateAmend(optionsParam: OptionsType<Temporal.PlainDate>) {\n  let options = amend(optionsParam, {\n    hour: false,\n    minute: false,\n    second: false,\n    dayPeriod: false,\n    timeZoneName: false,\n    timeStyle: false\n  });\n  if (!hasDateOptions(options)) {\n    options = ObjectAssign({}, options, {\n      year: 'numeric',\n      month: 'numeric',\n      day: 'numeric'\n    });\n  }\n  return options;\n}\n\nfunction datetimeAmend(optionsParam: OptionsType<Temporal.PlainDateTime>) {\n  let options = amend(optionsParam, { timeZoneName: false });\n  if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n    options = ObjectAssign({}, options, {\n      year: 'numeric',\n      month: 'numeric',\n      day: 'numeric',\n      hour: 'numeric',\n      minute: 'numeric',\n      second: 'numeric'\n    });\n  }\n  return options;\n}\n\nfunction instantAmend(optionsParam: OptionsType<Temporal.Instant>) {\n  let options = optionsParam;\n  if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n    options = ObjectAssign({}, options, {\n      year: 'numeric',\n      month: 'numeric',\n      day: 'numeric',\n      hour: 'numeric',\n      minute: 'numeric',\n      second: 'numeric'\n    });\n  }\n  return options;\n}\n\nfunction hasDateOptions(options: OptionsType<TypesWithToLocaleString>) {\n  return 'year' in options || 'month' in options || 'day' in options || 'weekday' in options || 'dateStyle' in options;\n}\n\nfunction hasTimeOptions(options: OptionsType<TypesWithToLocaleString>) {\n  return (\n    'hour' in options || 'minute' in options || 'second' in options || 'timeStyle' in options || 'dayPeriod' in options\n  );\n}\n\nfunction isTemporalObject(\n  obj: unknown\n): obj is\n  | Temporal.PlainDate\n  | Temporal.PlainTime\n  | Temporal.PlainDateTime\n  | Temporal.ZonedDateTime\n  | Temporal.PlainYearMonth\n  | Temporal.PlainMonthDay\n  | Temporal.Instant {\n  return (\n    ES.IsTemporalDate(obj) ||\n    ES.IsTemporalTime(obj) ||\n    ES.IsTemporalDateTime(obj) ||\n    ES.IsTemporalZonedDateTime(obj) ||\n    ES.IsTemporalYearMonth(obj) ||\n    ES.IsTemporalMonthDay(obj) ||\n    ES.IsTemporalInstant(obj)\n  );\n}\n\nfunction sameTemporalType(x: unknown, y: unknown) {\n  if (!isTemporalObject(x) || !isTemporalObject(y)) return false;\n  if (ES.IsTemporalTime(x) && !ES.IsTemporalTime(y)) return false;\n  if (ES.IsTemporalDate(x) && !ES.IsTemporalDate(y)) return false;\n  if (ES.IsTemporalDateTime(x) && !ES.IsTemporalDateTime(y)) return false;\n  if (ES.IsTemporalZonedDateTime(x) && !ES.IsTemporalZonedDateTime(y)) return false;\n  if (ES.IsTemporalYearMonth(x) && !ES.IsTemporalYearMonth(y)) return false;\n  if (ES.IsTemporalMonthDay(x) && !ES.IsTemporalMonthDay(y)) return false;\n  if (ES.IsTemporalInstant(x) && !ES.IsTemporalInstant(y)) return false;\n  return true;\n}\n\ntype TypesWithToLocaleString =\n  | Temporal.PlainDateTime\n  | Temporal.PlainDate\n  | Temporal.PlainTime\n  | Temporal.PlainYearMonth\n  | Temporal.PlainMonthDay\n  | Temporal.ZonedDateTime\n  | Temporal.Instant;\n\nfunction extractOverrides(temporalObj: Params['format'][0], main: DateTimeFormatImpl) {\n  const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n\n  if (ES.IsTemporalTime(temporalObj)) {\n    const hour = GetSlot(temporalObj, ISO_HOUR);\n    const minute = GetSlot(temporalObj, ISO_MINUTE);\n    const second = GetSlot(temporalObj, ISO_SECOND);\n    const millisecond = GetSlot(temporalObj, ISO_MILLISECOND);\n    const microsecond = GetSlot(temporalObj, ISO_MICROSECOND);\n    const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND);\n    const datetime = new DateTime(1970, 1, 1, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]);\n    return {\n      instant: ES.GetInstantFor(main[TZ_RESOLVED], datetime, 'compatible'),\n      formatter: getPropLazy(main, TIME)\n    };\n  }\n\n  if (ES.IsTemporalYearMonth(temporalObj)) {\n    const isoYear = GetSlot(temporalObj, ISO_YEAR);\n    const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n    const referenceISODay = GetSlot(temporalObj, ISO_DAY);\n    const calendar = ES.ToTemporalCalendarIdentifier(GetSlot(temporalObj, CALENDAR));\n    if (calendar !== main[CAL_ID]) {\n      throw new RangeError(\n        `cannot format PlainYearMonth with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`\n      );\n    }\n    const datetime = new DateTime(isoYear, isoMonth, referenceISODay, 12, 0, 0, 0, 0, 0, calendar);\n    return {\n      instant: ES.GetInstantFor(main[TZ_RESOLVED], datetime, 'compatible'),\n      formatter: getPropLazy(main, YM)\n    };\n  }\n\n  if (ES.IsTemporalMonthDay(temporalObj)) {\n    const referenceISOYear = GetSlot(temporalObj, ISO_YEAR);\n    const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n    const isoDay = GetSlot(temporalObj, ISO_DAY);\n    const calendar = ES.ToTemporalCalendarIdentifier(GetSlot(temporalObj, CALENDAR));\n    if (calendar !== main[CAL_ID]) {\n      throw new RangeError(\n        `cannot format PlainMonthDay with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`\n      );\n    }\n    const datetime = new DateTime(referenceISOYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, calendar);\n    return {\n      instant: ES.GetInstantFor(main[TZ_RESOLVED], datetime, 'compatible'),\n      formatter: getPropLazy(main, MD)\n    };\n  }\n\n  if (ES.IsTemporalDate(temporalObj)) {\n    const isoYear = GetSlot(temporalObj, ISO_YEAR);\n    const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n    const isoDay = GetSlot(temporalObj, ISO_DAY);\n    const calendar = ES.ToTemporalCalendarIdentifier(GetSlot(temporalObj, CALENDAR));\n    if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n      throw new RangeError(`cannot format PlainDate with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n    }\n    const datetime = new DateTime(isoYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, main[CAL_ID]);\n    return {\n      instant: ES.GetInstantFor(main[TZ_RESOLVED], datetime, 'compatible'),\n      formatter: getPropLazy(main, DATE)\n    };\n  }\n\n  if (ES.IsTemporalDateTime(temporalObj)) {\n    const isoYear = GetSlot(temporalObj, ISO_YEAR);\n    const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n    const isoDay = GetSlot(temporalObj, ISO_DAY);\n    const hour = GetSlot(temporalObj, ISO_HOUR);\n    const minute = GetSlot(temporalObj, ISO_MINUTE);\n    const second = GetSlot(temporalObj, ISO_SECOND);\n    const millisecond = GetSlot(temporalObj, ISO_MILLISECOND);\n    const microsecond = GetSlot(temporalObj, ISO_MICROSECOND);\n    const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND);\n    const calendar = ES.ToTemporalCalendarIdentifier(GetSlot(temporalObj, CALENDAR));\n    if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n      throw new RangeError(\n        `cannot format PlainDateTime with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`\n      );\n    }\n    let datetime = temporalObj;\n    if (calendar === 'iso8601') {\n      datetime = new DateTime(\n        isoYear,\n        isoMonth,\n        isoDay,\n        hour,\n        minute,\n        second,\n        millisecond,\n        microsecond,\n        nanosecond,\n        main[CAL_ID]\n      );\n    }\n    return {\n      instant: ES.GetInstantFor(main[TZ_RESOLVED], datetime, 'compatible'),\n      formatter: getPropLazy(main, DATETIME)\n    };\n  }\n\n  if (ES.IsTemporalZonedDateTime(temporalObj)) {\n    throw new TypeError(\n      'Temporal.ZonedDateTime not supported in DateTimeFormat methods. Use toLocaleString() instead.'\n    );\n  }\n\n  if (ES.IsTemporalInstant(temporalObj)) {\n    return {\n      instant: temporalObj,\n      formatter: getPropLazy(main, INST)\n    };\n  }\n\n  return {};\n}\n", "import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { EPOCHNANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { InstantParams as Params, InstantReturn as Return } from './internaltypes';\n\nimport JSBI from 'jsbi';\nimport { BILLION, MILLION, THOUSAND } from './ecmascript';\n\nexport class Instant implements Temporal.Instant {\n  constructor(epochNanoseconds: bigint | JSBI) {\n    // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only\n    //       to improve the error message.\n    if (arguments.length < 1) {\n      throw new TypeError('missing argument: epochNanoseconds is required');\n    }\n\n    const ns = ES.ToBigInt(epochNanoseconds);\n    ES.ValidateEpochNanoseconds(ns);\n    CreateSlots(this);\n    SetSlot(this, EPOCHNANOSECONDS, ns);\n\n    if (DEBUG) {\n      const repr = ES.TemporalInstantToString(this, undefined, 'auto');\n      Object.defineProperty(this, '_repr_', {\n        value: `${this[Symbol.toStringTag]} <${repr}>`,\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n\n  get epochSeconds(): Return['epochSeconds'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const value = GetSlot(this, EPOCHNANOSECONDS);\n    return JSBI.toNumber(ES.BigIntFloorDiv(value, BILLION));\n  }\n  get epochMilliseconds(): Return['epochMilliseconds'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS));\n    return JSBI.toNumber(ES.BigIntFloorDiv(value, MILLION));\n  }\n  get epochMicroseconds(): Return['epochMicroseconds'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS));\n    return ES.ToBigIntExternal(ES.BigIntFloorDiv(value, THOUSAND));\n  }\n  get epochNanoseconds(): Return['epochNanoseconds'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.ToBigIntExternal(JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS)));\n  }\n\n  add(temporalDurationLike: Params['add'][0]): Return['add'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromInstant('add', this, temporalDurationLike);\n  }\n  subtract(temporalDurationLike: Params['subtract'][0]): Return['subtract'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromInstant('subtract', this, temporalDurationLike);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalInstant('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalInstant('since', this, other, options);\n  }\n  round(roundToParam: Params['round'][0]): Return['round'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    if (roundToParam === undefined) throw new TypeError('options parameter is required');\n    const roundTo =\n      typeof roundToParam === 'string'\n        ? (ES.CreateOnePropObject('smallestUnit', roundToParam) as Exclude<typeof roundToParam, string>)\n        : ES.GetOptionsObject(roundToParam);\n    const roundingIncrement = ES.ToTemporalRoundingIncrement(roundTo);\n    const roundingMode = ES.ToTemporalRoundingMode(roundTo, 'halfExpand');\n    const smallestUnit = ES.GetTemporalUnit(roundTo, 'smallestUnit', 'time', ES.REQUIRED);\n    const maximumIncrements = {\n      hour: 24,\n      minute: 1440,\n      second: 86400,\n      millisecond: 86400e3,\n      microsecond: 86400e6,\n      nanosecond: 86400e9\n    };\n    ES.ValidateTemporalRoundingIncrement(roundingIncrement, maximumIncrements[smallestUnit], true);\n    const ns = GetSlot(this, EPOCHNANOSECONDS);\n    const roundedNs = ES.RoundInstant(ns, roundingIncrement, smallestUnit, roundingMode);\n    return new Instant(roundedNs);\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalInstant(otherParam);\n    const one = GetSlot(this, EPOCHNANOSECONDS);\n    const two = GetSlot(other, EPOCHNANOSECONDS);\n    return JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const digits = ES.ToFractionalSecondDigits(options);\n    const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n    const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n    if (smallestUnit === 'hour') throw new RangeError('smallestUnit must be a time unit other than \"hour\"');\n    let timeZone = options.timeZone;\n    if (timeZone !== undefined) timeZone = ES.ToTemporalTimeZoneSlotValue(timeZone);\n    const { precision, unit, increment } = ES.ToSecondsStringPrecisionRecord(smallestUnit, digits);\n    const ns = GetSlot(this, EPOCHNANOSECONDS);\n    const roundedNs = ES.RoundInstant(ns, increment, unit, roundingMode);\n    const roundedInstant = new Instant(roundedNs);\n    return ES.TemporalInstantToString(roundedInstant, timeZone as Temporal.TimeZoneProtocol, precision);\n  }\n  toJSON(): string {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalInstantToString(this, undefined, 'auto');\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.Instant');\n  }\n  toZonedDateTime(item: Params['toZonedDateTime'][0]): Return['toZonedDateTime'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(item)) {\n      throw new TypeError('invalid argument in toZonedDateTime');\n    }\n    const calendarLike = item.calendar;\n    if (calendarLike === undefined) {\n      throw new TypeError('missing calendar property in toZonedDateTime');\n    }\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarLike);\n    const temporalTimeZoneLike = item.timeZone;\n    if (temporalTimeZoneLike === undefined) {\n      throw new TypeError('missing timeZone property in toZonedDateTime');\n    }\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(temporalTimeZoneLike);\n    return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  toZonedDateTimeISO(timeZoneParam: Params['toZonedDateTimeISO'][0]): Return['toZonedDateTimeISO'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(timeZoneParam);\n    return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, 'iso8601');\n  }\n\n  static fromEpochSeconds(epochSecondsParam: Params['fromEpochSeconds'][0]): Return['fromEpochSeconds'] {\n    const epochSeconds = ES.ToNumber(epochSecondsParam);\n    const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochSeconds), BILLION);\n    ES.ValidateEpochNanoseconds(epochNanoseconds);\n    return new Instant(epochNanoseconds);\n  }\n  static fromEpochMilliseconds(\n    epochMillisecondsParam: Params['fromEpochMilliseconds'][0]\n  ): Return['fromEpochMilliseconds'] {\n    const epochMilliseconds = ES.ToNumber(epochMillisecondsParam);\n    const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochMilliseconds), MILLION);\n    ES.ValidateEpochNanoseconds(epochNanoseconds);\n    return new Instant(epochNanoseconds);\n  }\n  static fromEpochMicroseconds(\n    epochMicrosecondsParam: Params['fromEpochMicroseconds'][0]\n  ): Return['fromEpochMicroseconds'] {\n    const epochMicroseconds = ES.ToBigInt(epochMicrosecondsParam);\n    const epochNanoseconds = JSBI.multiply(epochMicroseconds, THOUSAND);\n    ES.ValidateEpochNanoseconds(epochNanoseconds);\n    return new Instant(epochNanoseconds);\n  }\n  static fromEpochNanoseconds(\n    epochNanosecondsParam: Params['fromEpochNanoseconds'][0]\n  ): Return['fromEpochNanoseconds'] {\n    const epochNanoseconds = ES.ToBigInt(epochNanosecondsParam);\n    ES.ValidateEpochNanoseconds(epochNanoseconds);\n    return new Instant(epochNanoseconds);\n  }\n  static from(item: Params['from'][0]): Return['from'] {\n    if (ES.IsTemporalInstant(item)) {\n      return new Instant(GetSlot(item, EPOCHNANOSECONDS));\n    }\n    return ES.ToTemporalInstant(item);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalInstant(oneParam);\n    const two = ES.ToTemporalInstant(twoParam);\n    const oneNs = GetSlot(one, EPOCHNANOSECONDS);\n    const twoNs = GetSlot(two, EPOCHNANOSECONDS);\n    if (JSBI.lessThan(oneNs, twoNs)) return -1;\n    if (JSBI.greaterThan(oneNs, twoNs)) return 1;\n    return 0;\n  }\n  [Symbol.toStringTag]!: 'Temporal.Instant';\n}\n\nMakeIntrinsicClass(Instant, 'Temporal.Instant');\n", "import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass, DefineIntrinsic } from './intrinsicclass';\nimport {\n  CALENDAR_ID,\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  YEARS,\n  MONTHS,\n  WEEKS,\n  DAYS,\n  HOURS,\n  MINUTES,\n  SECONDS,\n  MILLISECONDS,\n  MICROSECONDS,\n  NANOSECONDS,\n  CreateSlots,\n  GetSlot,\n  HasSlot,\n  SetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport type {\n  BuiltinCalendarId,\n  CalendarParams as Params,\n  CalendarReturn as Return,\n  AnyTemporalKey,\n  CalendarSlot\n} from './internaltypes';\n\nconst ArrayIncludes = Array.prototype.includes;\nconst ArrayPrototypePush = Array.prototype.push;\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst ArraySort = Array.prototype.sort;\nconst MathAbs = Math.abs;\nconst MathFloor = Math.floor;\nconst ObjectCreate = Object.create;\nconst ObjectEntries = Object.entries;\nconst OriginalSet = Set;\nconst ReflectOwnKeys = Reflect.ownKeys;\nconst SetPrototypeAdd = Set.prototype.add;\nconst SetPrototypeValues = Set.prototype.values;\n\n/**\n * Shape of internal implementation of each built-in calendar. Note that\n * parameter types are simpler than CalendarProtocol because the `Calendar`\n * class performs validation and parameter normalization before handing control\n * over to CalendarImpl.\n *\n * There are two instances of this interface: one for the ISO calendar and\n * another that handles logic that's the same across all non-ISO calendars. The\n * latter is cloned for each non-ISO calendar at the end of this file.\n */\ninterface CalendarImpl {\n  year(date: Temporal.PlainDate | Temporal.PlainYearMonth): number;\n  month(date: Temporal.PlainDate | Temporal.PlainYearMonth | Temporal.PlainMonthDay): number;\n  monthCode(date: Temporal.PlainDate | Temporal.PlainYearMonth | Temporal.PlainMonthDay): string;\n  day(date: Temporal.PlainDate | Temporal.PlainMonthDay): number;\n  era(date: Temporal.PlainDate | Temporal.PlainYearMonth): string | undefined;\n  eraYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): number | undefined;\n  dayOfWeek(date: Temporal.PlainDate): number;\n  dayOfYear(date: Temporal.PlainDate): number;\n  weekOfYear(date: Temporal.PlainDate): number;\n  yearOfWeek(date: Temporal.PlainDate): number;\n  daysInWeek(date: Temporal.PlainDate): number;\n  daysInMonth(date: Temporal.PlainDate | Temporal.PlainYearMonth): number;\n  daysInYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): number;\n  monthsInYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): number;\n  inLeapYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): boolean;\n  dateFromFields(\n    fields: Params['dateFromFields'][0],\n    options: NonNullable<Params['dateFromFields'][1]>,\n    calendar: string\n  ): Temporal.PlainDate;\n  yearMonthFromFields(\n    fields: Params['yearMonthFromFields'][0],\n    options: NonNullable<Params['yearMonthFromFields'][1]>,\n    calendar: string\n  ): Temporal.PlainYearMonth;\n  monthDayFromFields(\n    fields: Params['monthDayFromFields'][0],\n    options: NonNullable<Params['monthDayFromFields'][1]>,\n    calendar: string\n  ): Temporal.PlainMonthDay;\n  dateAdd(\n    date: Temporal.PlainDate,\n    years: number,\n    months: number,\n    weeks: number,\n    days: number,\n    overflow: Overflow,\n    calendar: string\n  ): Temporal.PlainDate;\n  dateUntil(\n    one: Temporal.PlainDate,\n    two: Temporal.PlainDate,\n    largestUnit: 'year' | 'month' | 'week' | 'day'\n  ): { years: number; months: number; weeks: number; days: number };\n  fields(fields: string[]): string[];\n  fieldKeysToIgnore(keys: string[]): string[];\n}\n\ntype CalendarImplementations = {\n  [k in BuiltinCalendarId]: CalendarImpl;\n};\n\n/**\n * Implementations for each calendar.\n * Registration for each of these calendars happens throughout this file. The ISO and non-ISO calendars are registered\n * separately - look for 'iso8601' for the ISO calendar registration, and all non-ISO calendar registrations happens\n * at the bottom of the file.\n */\nconst impl: CalendarImplementations = {} as unknown as CalendarImplementations;\n\n/**\n * Thin wrapper around the implementation of each built-in calendar. This\n * class's methods follow a similar pattern:\n * 1. Validate parameters\n * 2. Fill in default options (for methods where options are present)\n * 3. Simplify and/or normalize parameters. For example, some methods accept\n *    PlainDate, PlainDateTime, ZonedDateTime, etc. and these are normalized to\n *    PlainDate.\n * 4. Look up the ID of the built-in calendar\n * 5. Fetch the implementation object for that ID.\n * 6. Call the corresponding method in the implementation object.\n */\nexport class Calendar implements Temporal.Calendar {\n  constructor(idParam: Params['constructor'][0]) {\n    // Note: if the argument is not passed, IsBuiltinCalendar(\"undefined\") will fail. This check\n    //       exists only to improve the error message.\n    if (arguments.length < 1) {\n      throw new RangeError('missing argument: id is required');\n    }\n\n    const id = ES.ToString(idParam);\n    if (!ES.IsBuiltinCalendar(id)) throw new RangeError(`invalid calendar identifier ${id}`);\n    CreateSlots(this);\n    SetSlot(this, CALENDAR_ID, ES.ASCIILowercase(id));\n\n    if (DEBUG) {\n      Object.defineProperty(this, '_repr_', {\n        value: `${this[Symbol.toStringTag]} <${id}>`,\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n  get id(): Return['id'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, CALENDAR_ID);\n  }\n  dateFromFields(\n    fields: Params['dateFromFields'][0],\n    optionsParam: Params['dateFromFields'][1] = undefined\n  ): Return['dateFromFields'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(fields)) throw new TypeError('invalid fields');\n    const options = ES.GetOptionsObject(optionsParam);\n    const id = GetSlot(this, CALENDAR_ID);\n    return impl[id].dateFromFields(fields, options, id);\n  }\n  yearMonthFromFields(\n    fields: Params['yearMonthFromFields'][0],\n    optionsParam: Params['yearMonthFromFields'][1] = undefined\n  ): Return['yearMonthFromFields'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(fields)) throw new TypeError('invalid fields');\n    const options = ES.GetOptionsObject(optionsParam);\n    const id = GetSlot(this, CALENDAR_ID);\n    return impl[id].yearMonthFromFields(fields, options, id);\n  }\n  monthDayFromFields(\n    fields: Params['monthDayFromFields'][0],\n    optionsParam: Params['monthDayFromFields'][1] = undefined\n  ): Return['monthDayFromFields'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(fields)) throw new TypeError('invalid fields');\n    const options = ES.GetOptionsObject(optionsParam);\n    const id = GetSlot(this, CALENDAR_ID);\n    return impl[id].monthDayFromFields(fields, options, id);\n  }\n  fields(fields: Params['fields'][0]): Return['fields'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const fieldsArray = [] as string[];\n    const allowed = new Set([\n      'year',\n      'month',\n      'monthCode',\n      'day',\n      'hour',\n      'minute',\n      'second',\n      'millisecond',\n      'microsecond',\n      'nanosecond'\n    ]);\n    for (const name of fields) {\n      if (typeof name !== 'string') throw new TypeError('invalid fields');\n      if (!allowed.has(name)) throw new RangeError(`invalid field name ${name}`);\n      allowed.delete(name);\n      ArrayPrototypePush.call(fieldsArray, name);\n    }\n    return impl[GetSlot(this, CALENDAR_ID)].fields(fieldsArray);\n  }\n  mergeFields(\n    fieldsParam: Params['mergeFields'][0],\n    additionalFieldsParam: Params['mergeFields'][1]\n  ): Return['mergeFields'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const fields = ES.ToObject(fieldsParam);\n    const fieldsCopy = ObjectCreate(null);\n    ES.CopyDataProperties(fieldsCopy, fields, [], [undefined]);\n    const additionalFields = ES.ToObject(additionalFieldsParam);\n    const additionalFieldsCopy = ObjectCreate(null);\n    ES.CopyDataProperties(additionalFieldsCopy, additionalFields, [], [undefined]);\n    const additionalKeys = ReflectOwnKeys(additionalFieldsCopy) as (keyof typeof additionalFields)[];\n    const overriddenKeys = impl[GetSlot(this, CALENDAR_ID)].fieldKeysToIgnore(additionalKeys);\n    const merged = ObjectCreate(null);\n    const fieldsKeys = ReflectOwnKeys(fieldsCopy);\n    for (const key of fieldsKeys) {\n      let propValue = undefined;\n      if (ES.Call(ArrayIncludes, overriddenKeys, [key])) propValue = additionalFieldsCopy[key];\n      else propValue = fieldsCopy[key];\n      if (propValue !== undefined) merged[key] = propValue;\n    }\n    ES.CopyDataProperties(merged, additionalFieldsCopy, []);\n    return merged;\n  }\n  dateAdd(\n    dateParam: Params['dateAdd'][0],\n    durationParam: Params['dateAdd'][1],\n    optionsParam: Params['dateAdd'][2] = undefined\n  ): Return['dateAdd'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    const duration = ES.ToTemporalDuration(durationParam);\n    const options = ES.GetOptionsObject(optionsParam);\n    const overflow = ES.ToTemporalOverflow(options);\n    const { days } = ES.BalanceDuration(\n      GetSlot(duration, DAYS),\n      GetSlot(duration, HOURS),\n      GetSlot(duration, MINUTES),\n      GetSlot(duration, SECONDS),\n      GetSlot(duration, MILLISECONDS),\n      GetSlot(duration, MICROSECONDS),\n      GetSlot(duration, NANOSECONDS),\n      'day'\n    );\n    const id = GetSlot(this, CALENDAR_ID);\n    return impl[id].dateAdd(\n      date,\n      GetSlot(duration, YEARS),\n      GetSlot(duration, MONTHS),\n      GetSlot(duration, WEEKS),\n      days,\n      overflow,\n      id\n    );\n  }\n  dateUntil(\n    oneParam: Params['dateUntil'][0],\n    twoParam: Params['dateUntil'][1],\n    optionsParam: Params['dateUntil'][2] = undefined\n  ): Return['dateUntil'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const one = ES.ToTemporalDate(oneParam);\n    const two = ES.ToTemporalDate(twoParam);\n    const options = ES.GetOptionsObject(optionsParam);\n    let largestUnit = ES.GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n    if (largestUnit === 'auto') largestUnit = 'day';\n    const { years, months, weeks, days } = impl[GetSlot(this, CALENDAR_ID)].dateUntil(one, two, largestUnit);\n    const Duration = GetIntrinsic('%Temporal.Duration%');\n    return new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n  }\n  year(dateParam: Params['year'][0]): Return['year'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].year(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  month(dateParam: Params['month'][0]): Return['month'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (ES.IsTemporalMonthDay(date)) throw new TypeError('use monthCode on PlainMonthDay instead');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].month(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  monthCode(dateParam: Params['monthCode'][0]): Return['monthCode'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date) && !ES.IsTemporalMonthDay(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].monthCode(\n      date as Temporal.PlainDate | Temporal.PlainMonthDay | Temporal.PlainYearMonth\n    );\n  }\n  day(dateParam: Params['day'][0]): Return['day'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalMonthDay(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].day(date as Temporal.PlainDate | Temporal.PlainMonthDay);\n  }\n  era(dateParam: Params['era'][0]): Return['era'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].era(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  eraYear(dateParam: Params['eraYear'][0]): Return['eraYear'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].eraYear(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  dayOfWeek(dateParam: Params['dayOfWeek'][0]): Return['dayOfWeek'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    return impl[GetSlot(this, CALENDAR_ID)].dayOfWeek(date);\n  }\n  dayOfYear(dateParam: Params['dayOfYear'][0]): Return['dayOfYear'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    return impl[GetSlot(this, CALENDAR_ID)].dayOfYear(date);\n  }\n  weekOfYear(dateParam: Params['weekOfYear'][0]): Return['weekOfYear'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    return impl[GetSlot(this, CALENDAR_ID)].weekOfYear(date);\n  }\n  yearOfWeek(dateParam: Params['yearOfWeek'][0]): Return['yearOfWeek'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    return impl[GetSlot(this, CALENDAR_ID)].yearOfWeek(date);\n  }\n  daysInWeek(dateParam: Params['daysInWeek'][0]): Return['daysInWeek'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    return impl[GetSlot(this, CALENDAR_ID)].daysInWeek(date);\n  }\n  daysInMonth(dateParam: Params['daysInMonth'][0]): Return['daysInMonth'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].daysInMonth(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  daysInYear(dateParam: Params['daysInYear'][0]): Return['daysInYear'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].daysInYear(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  monthsInYear(dateParam: Params['monthsInYear'][0]): Return['monthsInYear'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].monthsInYear(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  inLeapYear(dateParam: Params['inLeapYear'][0]): Return['inLeapYear'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].inLeapYear(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  toString(): string {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, CALENDAR_ID);\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, CALENDAR_ID);\n  }\n  static from(item: Params['from'][0]): Return['from'] {\n    const calendarSlotValue = ES.ToTemporalCalendarSlotValue(item);\n    return ES.ToTemporalCalendarObject(calendarSlotValue);\n  }\n  [Symbol.toStringTag]!: 'Temporal.Calendar';\n}\n\nMakeIntrinsicClass(Calendar, 'Temporal.Calendar');\nDefineIntrinsic('Temporal.Calendar.from', Calendar.from);\nDefineIntrinsic('Temporal.Calendar.prototype.dateAdd', Calendar.prototype.dateAdd);\nDefineIntrinsic('Temporal.Calendar.prototype.dateFromFields', Calendar.prototype.dateFromFields);\nDefineIntrinsic('Temporal.Calendar.prototype.dateUntil', Calendar.prototype.dateUntil);\nDefineIntrinsic('Temporal.Calendar.prototype.day', Calendar.prototype.day);\nDefineIntrinsic('Temporal.Calendar.prototype.dayOfWeek', Calendar.prototype.dayOfWeek);\nDefineIntrinsic('Temporal.Calendar.prototype.dayOfYear', Calendar.prototype.dayOfYear);\nDefineIntrinsic('Temporal.Calendar.prototype.daysInMonth', Calendar.prototype.daysInMonth);\nDefineIntrinsic('Temporal.Calendar.prototype.daysInWeek', Calendar.prototype.daysInWeek);\nDefineIntrinsic('Temporal.Calendar.prototype.daysInYear', Calendar.prototype.daysInYear);\nDefineIntrinsic('Temporal.Calendar.prototype.era', Calendar.prototype.era);\nDefineIntrinsic('Temporal.Calendar.prototype.eraYear', Calendar.prototype.eraYear);\nDefineIntrinsic('Temporal.Calendar.prototype.fields', Calendar.prototype.fields);\nDefineIntrinsic('Temporal.Calendar.prototype.inLeapYear', Calendar.prototype.inLeapYear);\nDefineIntrinsic('Temporal.Calendar.prototype.mergeFields', Calendar.prototype.mergeFields);\nDefineIntrinsic('Temporal.Calendar.prototype.month', Calendar.prototype.month);\nDefineIntrinsic('Temporal.Calendar.prototype.monthCode', Calendar.prototype.monthCode);\nDefineIntrinsic('Temporal.Calendar.prototype.monthDayFromFields', Calendar.prototype.monthDayFromFields);\nDefineIntrinsic('Temporal.Calendar.prototype.monthsInYear', Calendar.prototype.monthsInYear);\nDefineIntrinsic('Temporal.Calendar.prototype.weekOfYear', Calendar.prototype.weekOfYear);\nDefineIntrinsic('Temporal.Calendar.prototype.year', Calendar.prototype.year);\nDefineIntrinsic('Temporal.Calendar.prototype.yearMonthFromFields', Calendar.prototype.yearMonthFromFields);\nDefineIntrinsic('Temporal.Calendar.prototype.yearOfWeek', Calendar.prototype.yearOfWeek);\n\n/**\n * Implementation for the ISO 8601 calendar. This is the only calendar that's\n * guaranteed to be supported by all ECMAScript implementations, including those\n * without Intl (ECMA-402) support.\n */\nimpl['iso8601'] = {\n  dateFromFields(fieldsParam, options, calendarSlotValue) {\n    let fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['year', 'day']);\n    const overflow = ES.ToTemporalOverflow(options);\n    fields = resolveNonLunisolarMonth(fields);\n    let { year, month, day } = fields;\n    ({ year, month, day } = ES.RegulateISODate(year, month, day, overflow));\n    return ES.CreateTemporalDate(year, month, day, calendarSlotValue);\n  },\n  yearMonthFromFields(fieldsParam, options, calendarSlotValue) {\n    let fields = ES.PrepareTemporalFields(fieldsParam, ['month', 'monthCode', 'year'], ['year']);\n    const overflow = ES.ToTemporalOverflow(options);\n    fields = resolveNonLunisolarMonth(fields);\n    let { year, month } = fields;\n    ({ year, month } = ES.RegulateISOYearMonth(year, month, overflow));\n    return ES.CreateTemporalYearMonth(year, month, calendarSlotValue, /* referenceISODay = */ 1);\n  },\n  monthDayFromFields(fieldsParam, options, calendarSlotValue) {\n    let fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['day']);\n    const overflow = ES.ToTemporalOverflow(options);\n    if (fields.month !== undefined && fields.year === undefined && fields.monthCode === undefined) {\n      throw new TypeError('either year or monthCode required with month');\n    }\n    const useYear = fields.monthCode === undefined;\n    const referenceISOYear = 1972;\n    fields = resolveNonLunisolarMonth(fields);\n    let { month, day, year } = fields;\n    ({ month, day } = ES.RegulateISODate(useYear ? year : referenceISOYear, month, day, overflow));\n    return ES.CreateTemporalMonthDay(month, day, calendarSlotValue, referenceISOYear);\n  },\n  fields(fields) {\n    return fields;\n  },\n  fieldKeysToIgnore(keys) {\n    const result = new OriginalSet();\n    for (let ix = 0; ix < keys.length; ix++) {\n      const key = keys[ix];\n      ES.Call(SetPrototypeAdd, result, [key]);\n      if (key === 'month') {\n        ES.Call(SetPrototypeAdd, result, ['monthCode']);\n      } else if (key === 'monthCode') {\n        ES.Call(SetPrototypeAdd, result, ['month']);\n      }\n    }\n    return [...ES.Call(SetPrototypeValues, result, [])];\n  },\n  dateAdd(date, years, months, weeks, days, overflow, calendarSlotValue) {\n    let year = GetSlot(date, ISO_YEAR);\n    let month = GetSlot(date, ISO_MONTH);\n    let day = GetSlot(date, ISO_DAY);\n    ({ year, month, day } = ES.AddISODate(year, month, day, years, months, weeks, days, overflow));\n    return ES.CreateTemporalDate(year, month, day, calendarSlotValue);\n  },\n  dateUntil(one, two, largestUnit) {\n    return ES.DifferenceISODate(\n      GetSlot(one, ISO_YEAR),\n      GetSlot(one, ISO_MONTH),\n      GetSlot(one, ISO_DAY),\n      GetSlot(two, ISO_YEAR),\n      GetSlot(two, ISO_MONTH),\n      GetSlot(two, ISO_DAY),\n      largestUnit\n    );\n  },\n  year(date) {\n    return GetSlot(date, ISO_YEAR);\n  },\n  era() {\n    return undefined;\n  },\n  eraYear() {\n    return undefined;\n  },\n  month(date) {\n    return GetSlot(date, ISO_MONTH);\n  },\n  monthCode(date) {\n    return buildMonthCode(GetSlot(date, ISO_MONTH));\n  },\n  day(date) {\n    return GetSlot(date, ISO_DAY);\n  },\n  dayOfWeek(date) {\n    return ES.DayOfWeek(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n  },\n  dayOfYear(date) {\n    return ES.DayOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n  },\n  weekOfYear(date) {\n    return ES.WeekOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY)).week;\n  },\n  yearOfWeek(date) {\n    return ES.WeekOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY)).year;\n  },\n  daysInWeek() {\n    return 7;\n  },\n  daysInMonth(date) {\n    return ES.ISODaysInMonth(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH));\n  },\n  daysInYear(dateParam) {\n    let date = dateParam;\n    if (!HasSlot(date, ISO_YEAR)) date = ES.ToTemporalDate(date);\n    return ES.LeapYear(GetSlot(date, ISO_YEAR)) ? 366 : 365;\n  },\n  monthsInYear() {\n    return 12;\n  },\n  inLeapYear(dateParam) {\n    let date = dateParam;\n    if (!HasSlot(date, ISO_YEAR)) date = ES.ToTemporalDate(date);\n    return ES.LeapYear(GetSlot(date, ISO_YEAR));\n  }\n};\n\n// Note: Built-in calendars other than iso8601 are not part of the Temporal\n// proposal for ECMA-262. These calendars will be standardized as part of\n// ECMA-402. Code below here includes an implementation of these calendars to\n// validate the Temporal API and to get feedback. However, native non-ISO\n// calendar behavior is at least somewhat implementation-defined, so may not\n// match this polyfill's output exactly.\n//\n// Some ES implementations don't include ECMA-402. For this reason, it's helpful\n// to ensure a clean separation between the ISO calendar implementation which is\n// a part of ECMA-262 and the non-ISO calendar implementation which requires\n// ECMA-402.\n//\n// To ensure this separation, the implementation is split. A `CalendarImpl`\n// interface defines the common operations between both ISO and non-ISO\n// calendars.\n\n/**\n * This type is passed through from Calendar#dateFromFields().\n * `monthExtra` is additional information used internally to identify lunisolar leap months.\n */\ntype CalendarDateFields = Params['dateFromFields'][0] & { monthExtra?: string };\n\n/**\n * This is a \"fully populated\" calendar date record. It's only lacking\n * `era`/`eraYear` (which may not be present in all calendars) and `monthExtra`\n * which is only used in some cases.\n */\ntype FullCalendarDate = {\n  era?: string;\n  eraYear?: number;\n  year: number;\n  month: number;\n  monthCode: string;\n  day: number;\n  monthExtra?: string;\n};\n\n// The types below are various subsets of calendar dates\ntype CalendarYMD = { year: number; month: number; day: number };\ntype CalendarYM = { year: number; month: number };\ntype CalendarYearOnly = { year: number };\ntype EraAndEraYear = { era: string; eraYear: number };\n\n/** Record representing YMD of an ISO calendar date */\ntype IsoYMD = { year: number; month: number; day: number };\n\ntype Overflow = NonNullable<Temporal.AssignmentOptions['overflow']>;\n\nfunction monthCodeNumberPart(monthCode: string) {\n  if (!monthCode.startsWith('M')) {\n    throw new RangeError(`Invalid month code: ${monthCode}.  Month codes must start with M.`);\n  }\n  const month = +monthCode.slice(1);\n  if (isNaN(month)) throw new RangeError(`Invalid month code: ${monthCode}`);\n  return month;\n}\n\nfunction buildMonthCode(month: number | string, leap = false) {\n  return `M${month.toString().padStart(2, '0')}${leap ? 'L' : ''}`;\n}\n\n/**\n * Safely merge a month, monthCode pair into an integer month.\n * If both are present, make sure they match.\n * This logic doesn't work for lunisolar calendars!\n * */\nfunction resolveNonLunisolarMonth<T extends { monthCode?: string; month?: number }>(\n  calendarDate: T,\n  overflow: Overflow | undefined = undefined,\n  monthsPerYear = 12\n) {\n  let { month, monthCode } = calendarDate;\n  if (monthCode === undefined) {\n    if (month === undefined) throw new TypeError('Either month or monthCode are required');\n    // The ISO calendar uses the default (undefined) value because it does\n    // constrain/reject after this method returns. Non-ISO calendars, however,\n    // rely on this function to constrain/reject out-of-range `month` values.\n    if (overflow === 'reject') ES.RejectToRange(month, 1, monthsPerYear);\n    if (overflow === 'constrain') month = ES.ConstrainToRange(month, 1, monthsPerYear);\n    monthCode = buildMonthCode(month);\n  } else {\n    const numberPart = monthCodeNumberPart(monthCode);\n    if (month !== undefined && month !== numberPart) {\n      throw new RangeError(`monthCode ${monthCode} and month ${month} must match if both are present`);\n    }\n    if (monthCode !== buildMonthCode(numberPart)) {\n      throw new RangeError(`Invalid month code: ${monthCode}`);\n    }\n    month = numberPart;\n    if (month < 1 || month > monthsPerYear) throw new RangeError(`Invalid monthCode: ${monthCode}`);\n  }\n  return { ...calendarDate, month, monthCode };\n}\n\ntype CachedTypes = Temporal.PlainYearMonth | Temporal.PlainDate | Temporal.PlainMonthDay;\n\n/**\n * This prototype implementation of non-ISO calendars makes many repeated calls\n * to Intl APIs which may be slow (e.g. >0.2ms). This trivial cache will speed\n * up these repeat accesses. Each cache instance is associated (via a WeakMap)\n * to a specific Temporal object, which speeds up multiple calendar calls on the\n * same Temporal object instance.  No invalidation or pruning is necessary\n * because each object's cache is thrown away when the object is GC-ed.\n */\nclass OneObjectCache {\n  map = new Map();\n  calls = 0;\n  now: number;\n  hits = 0;\n  misses = 0;\n  constructor(cacheToClone?: OneObjectCache) {\n    this.now = globalThis.performance ? globalThis.performance.now() : Date.now();\n    if (cacheToClone !== undefined) {\n      let i = 0;\n      for (const entry of cacheToClone.map.entries()) {\n        if (++i > OneObjectCache.MAX_CACHE_ENTRIES) break;\n        this.map.set(...entry);\n      }\n    }\n  }\n  get(key: string) {\n    const result = this.map.get(key);\n    if (result) {\n      this.hits++;\n      this.report();\n    }\n    this.calls++;\n    return result;\n  }\n  set(key: string, value: unknown) {\n    this.map.set(key, value);\n    this.misses++;\n    this.report();\n  }\n  report() {\n    /*\n    if (this.calls === 0) return;\n    const ms = (globalThis.performance ? globalThis.performance.now() : Date.now()) - this.now;\n    const hitRate = ((100 * this.hits) / this.calls).toFixed(0);\n    console.log(`${this.calls} calls in ${ms.toFixed(2)}ms. Hits: ${this.hits} (${hitRate}%). Misses: ${this.misses}.`);\n    */\n  }\n  setObject(obj: CachedTypes) {\n    if (OneObjectCache.objectMap.get(obj)) throw new RangeError('object already cached');\n    OneObjectCache.objectMap.set(obj, this);\n    this.report();\n  }\n\n  static objectMap = new WeakMap();\n  static MAX_CACHE_ENTRIES = 1000;\n\n  /**\n   * Returns a WeakMap-backed cache that's used to store expensive results\n   * that are associated with a particular Temporal object instance.\n   *\n   * @param obj - object to associate with the cache\n   */\n  static getCacheForObject(obj: CachedTypes) {\n    let cache = OneObjectCache.objectMap.get(obj);\n    if (!cache) {\n      cache = new OneObjectCache();\n      OneObjectCache.objectMap.set(obj, cache);\n    }\n    return cache;\n  }\n}\n\nfunction toUtcIsoDateString({ isoYear, isoMonth, isoDay }: { isoYear: number; isoMonth: number; isoDay: number }) {\n  const yearString = ES.ISOYearString(isoYear);\n  const monthString = ES.ISODateTimePartString(isoMonth);\n  const dayString = ES.ISODateTimePartString(isoDay);\n  return `${yearString}-${monthString}-${dayString}T00:00Z`;\n}\n\nfunction simpleDateDiff(one: CalendarYMD, two: CalendarYMD) {\n  return {\n    years: one.year - two.year,\n    months: one.month - two.month,\n    days: one.day - two.day\n  };\n}\n\n/**\n * Implementation helper that's common to all non-ISO calendars\n */\nabstract class HelperBase {\n  abstract id: BuiltinCalendarId;\n  abstract monthsInYear(calendarDate: CalendarYearOnly, cache?: OneObjectCache): number;\n  abstract maximumMonthLength(calendarDate?: CalendarYM): number;\n  abstract minimumMonthLength(calendarDate?: CalendarYM): number;\n  abstract estimateIsoDate(calendarDate: CalendarYMD): IsoYMD;\n  abstract inLeapYear(calendarDate: CalendarYearOnly, cache?: OneObjectCache): boolean;\n  abstract calendarType: 'solar' | 'lunar' | 'lunisolar';\n  reviseIntlEra?<T extends Partial<EraAndEraYear>>(calendarDate: T, isoDate: IsoYMD): T;\n  constantEra?: string;\n  checkIcuBugs?(isoDate: IsoYMD): void;\n  private formatter?: globalThis.Intl.DateTimeFormat;\n  getFormatter() {\n    // `new Intl.DateTimeFormat()` is amazingly slow and chews up RAM. Per\n    // https://bugs.chromium.org/p/v8/issues/detail?id=6528#c4, we cache one\n    // DateTimeFormat instance per calendar. Caching is lazy so we only pay for\n    // calendars that are used. Note that the nonIsoHelperBase object is spread\n    // into each each calendar's implementation before any cache is created, so\n    // each calendar gets its own separate cached formatter.\n    if (typeof this.formatter === 'undefined') {\n      this.formatter = new IntlDateTimeFormat(`en-US-u-ca-${this.id}`, {\n        day: 'numeric',\n        month: 'numeric',\n        year: 'numeric',\n        era: this.eraLength,\n        timeZone: 'UTC'\n      });\n    }\n    return this.formatter;\n  }\n  isoToCalendarDate(isoDate: IsoYMD, cache: OneObjectCache): FullCalendarDate {\n    const { year: isoYear, month: isoMonth, day: isoDay } = isoDate;\n    const key = JSON.stringify({ func: 'isoToCalendarDate', isoYear, isoMonth, isoDay, id: this.id });\n    const cached = cache.get(key);\n    if (cached) return cached;\n\n    const dateTimeFormat = this.getFormatter();\n    let parts, isoString;\n    try {\n      isoString = toUtcIsoDateString({ isoYear, isoMonth, isoDay });\n      parts = dateTimeFormat.formatToParts(new Date(isoString));\n    } catch (e: unknown) {\n      throw new RangeError(`Invalid ISO date: ${JSON.stringify({ isoYear, isoMonth, isoDay })}`);\n    }\n    const result: Partial<FullCalendarDate> = {};\n    for (let { type, value } of parts) {\n      if (type === 'year') result.eraYear = +value;\n      // TODO: remove this type annotation when `relatedYear` gets into TS lib types\n      if (type === ('relatedYear' as Intl.DateTimeFormatPartTypes)) result.eraYear = +value;\n      if (type === 'month') {\n        const matches = /^([0-9]*)(.*?)$/.exec(value);\n        if (!matches || matches.length != 3 || (!matches[1] && !matches[2])) {\n          throw new RangeError(`Unexpected month: ${value}`);\n        }\n        // If the month has no numeric part (should only see this for the Hebrew\n        // calendar with newer FF / Chromium versions; see\n        // https://bugzilla.mozilla.org/show_bug.cgi?id=1751833) then set a\n        // placeholder month index of `1` and rely on the derived class to\n        // calculate the correct month index from the month name stored in\n        // `monthExtra`.\n        result.month = matches[1] ? +matches[1] : 1;\n        if (result.month < 1) {\n          throw new RangeError(\n            `Invalid month ${value} from ${isoString}[u-ca-${this.id}]` +\n              ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10527)'\n          );\n        }\n        if (result.month > 13) {\n          throw new RangeError(\n            `Invalid month ${value} from ${isoString}[u-ca-${this.id}]` +\n              ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10529)'\n          );\n        }\n\n        // The ICU formats for the Hebrew calendar no longer support a numeric\n        // month format. So we'll rely on the derived class to interpret it.\n        // `monthExtra` is also used on the Chinese calendar to handle a suffix\n        // \"bis\" indicating a leap month.\n        if (matches[2]) result.monthExtra = matches[2];\n      }\n      if (type === 'day') result.day = +value;\n      if (this.hasEra && type === 'era' && value != null && value !== '') {\n        // The convention for Temporal era values is lowercase, so following\n        // that convention in this prototype. Punctuation is removed, accented\n        // letters are normalized, and spaces are replaced with dashes.\n        // E.g.: \"ERA0\" => \"era0\", \"Before R.O.C.\" => \"before-roc\", \"En’ō\" => \"eno\"\n        // The call to normalize() and the replacement regex deals with era\n        // names that contain non-ASCII characters like Japanese eras. Also\n        // ignore extra content in parentheses like JPN era date ranges.\n        value = value.split(' (')[0];\n        result.era = value\n          .normalize('NFD')\n          .replace(/[^-0-9 \\p{L}]/gu, '')\n          .replace(' ', '-')\n          .toLowerCase();\n      }\n    }\n    if (result.eraYear === undefined) {\n      // Node 12 has outdated ICU data that lacks the `relatedYear` field in the\n      // output of Intl.DateTimeFormat.formatToParts.\n      throw new RangeError(\n        `Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`\n      );\n    }\n    // Translate eras that may be handled differently by Temporal vs. by Intl\n    // (e.g. Japanese pre-Meiji eras). See https://github.com/tc39/proposal-temporal/issues/526.\n    if (this.reviseIntlEra) {\n      const { era, eraYear } = this.reviseIntlEra(result, isoDate);\n      result.era = era;\n      result.eraYear = eraYear;\n    }\n    if (this.checkIcuBugs) this.checkIcuBugs(isoDate);\n\n    const calendarDate = this.adjustCalendarDate(result, cache, 'constrain', true);\n    if (calendarDate.year === undefined) throw new RangeError(`Missing year converting ${JSON.stringify(isoDate)}`);\n    if (calendarDate.month === undefined) throw new RangeError(`Missing month converting ${JSON.stringify(isoDate)}`);\n    if (calendarDate.day === undefined) throw new RangeError(`Missing day converting ${JSON.stringify(isoDate)}`);\n    cache.set(key, calendarDate);\n    // Also cache the reverse mapping\n    ['constrain', 'reject'].forEach((overflow) => {\n      const keyReverse = JSON.stringify({\n        func: 'calendarToIsoDate',\n        year: calendarDate.year,\n        month: calendarDate.month,\n        day: calendarDate.day,\n        overflow,\n        id: this.id\n      });\n      cache.set(keyReverse, isoDate);\n    });\n    return calendarDate;\n  }\n  validateCalendarDate(calendarDate: Partial<FullCalendarDate>): asserts calendarDate is FullCalendarDate {\n    const { era, month, year, day, eraYear, monthCode, monthExtra } = calendarDate;\n    // When there's a suffix (e.g. \"5bis\" for a leap month in Chinese calendar)\n    // the derived class must deal with it.\n    if (monthExtra !== undefined) throw new RangeError('Unexpected `monthExtra` value');\n    if (year === undefined && eraYear === undefined) throw new TypeError('year or eraYear is required');\n    if (month === undefined && monthCode === undefined) throw new TypeError('month or monthCode is required');\n    if (day === undefined) throw new RangeError('Missing day');\n    if (monthCode !== undefined) {\n      if (typeof monthCode !== 'string') {\n        throw new RangeError(`monthCode must be a string, not ${typeof monthCode}`);\n      }\n      if (!/^M([01]?\\d)(L?)$/.test(monthCode)) throw new RangeError(`Invalid monthCode: ${monthCode}`);\n    }\n    if (this.constantEra) {\n      if (era !== undefined && era !== this.constantEra) {\n        throw new RangeError(`era must be ${this.constantEra}, not ${era}`);\n      }\n      if (eraYear !== undefined && year !== undefined && eraYear !== year) {\n        throw new RangeError(`eraYear ${eraYear} does not match year ${year}`);\n      }\n    }\n    if (this.hasEra) {\n      if ((calendarDate['era'] === undefined) !== (calendarDate['eraYear'] === undefined)) {\n        throw new RangeError(\"properties 'era' and 'eraYear' must be provided together\");\n      }\n    }\n  }\n  /**\n   * Allows derived calendars to add additional fields and/or to make\n   * adjustments e.g. to set the era based on the date or to revise the month\n   * number in lunisolar calendars per\n   * https://github.com/tc39/proposal-temporal/issues/1203.\n   *\n   * The base implementation fills in missing values by assuming the simplest\n   * possible calendar:\n   * - no eras or a constant era defined in `.constantEra`\n   * - non-lunisolar calendar (no leap months)\n   * */\n  adjustCalendarDate(\n    calendarDateParam: Partial<FullCalendarDate>,\n    cache: OneObjectCache | undefined = undefined,\n    overflow: Overflow = 'constrain',\n    // This param is only used by derived classes\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    fromLegacyDate = false\n  ): FullCalendarDate {\n    if (this.calendarType === 'lunisolar') throw new RangeError('Override required for lunisolar calendars');\n    let calendarDate = calendarDateParam;\n    this.validateCalendarDate(calendarDate);\n    // For calendars that always use the same era, set it here so that derived\n    // calendars won't need to implement this method simply to set the era.\n    if (this.constantEra) {\n      // year and eraYear always match when there's only one possible era\n      const { year, eraYear } = calendarDate;\n      calendarDate = {\n        ...calendarDate,\n        era: this.constantEra,\n        year: year !== undefined ? year : eraYear,\n        eraYear: eraYear !== undefined ? eraYear : year\n      };\n    }\n\n    const largestMonth = this.monthsInYear(calendarDate as CalendarYearOnly, cache);\n    let { month, monthCode } = calendarDate;\n\n    ({ month, monthCode } = resolveNonLunisolarMonth(calendarDate, overflow, largestMonth));\n    return { ...(calendarDate as typeof calendarDate & CalendarYMD), month, monthCode };\n  }\n  regulateMonthDayNaive(calendarDate: FullCalendarDate, overflow: Overflow, cache: OneObjectCache): FullCalendarDate {\n    const largestMonth = this.monthsInYear(calendarDate, cache);\n    let { month, day } = calendarDate;\n    if (overflow === 'reject') {\n      ES.RejectToRange(month, 1, largestMonth);\n      ES.RejectToRange(day, 1, this.maximumMonthLength(calendarDate));\n    } else {\n      month = ES.ConstrainToRange(month, 1, largestMonth);\n      day = ES.ConstrainToRange(day, 1, this.maximumMonthLength({ ...calendarDate, month }));\n    }\n    return { ...calendarDate, month, day };\n  }\n  calendarToIsoDate(dateParam: CalendarDateFields, overflow: Overflow = 'constrain', cache: OneObjectCache): IsoYMD {\n    const originalDate = dateParam as Partial<FullCalendarDate>;\n    // First, normalize the calendar date to ensure that (year, month, day)\n    // are all present, converting monthCode and eraYear if needed.\n    let date = this.adjustCalendarDate(dateParam, cache, overflow, false);\n\n    // Fix obviously out-of-bounds values. Values that are valid generally, but\n    // not in this particular year, may not be caught here for some calendars.\n    // If so, these will be handled lower below.\n    date = this.regulateMonthDayNaive(date, overflow, cache);\n\n    const { year, month, day } = date;\n    const key = JSON.stringify({ func: 'calendarToIsoDate', year, month, day, overflow, id: this.id });\n    let cached = cache.get(key);\n    if (cached) return cached;\n    // If YMD are present in the input but the input has been constrained\n    // already, then cache both the original value and the constrained value.\n    let keyOriginal;\n    if (\n      originalDate.year !== undefined &&\n      originalDate.month !== undefined &&\n      originalDate.day !== undefined &&\n      (originalDate.year !== date.year || originalDate.month !== date.month || originalDate.day !== date.day)\n    ) {\n      keyOriginal = JSON.stringify({\n        func: 'calendarToIsoDate',\n        year: originalDate.year,\n        month: originalDate.month,\n        day: originalDate.day,\n        overflow,\n        id: this.id\n      });\n      cached = cache.get(keyOriginal);\n      if (cached) return cached;\n    }\n\n    // First, try to roughly guess the result\n    let isoEstimate = this.estimateIsoDate({ year, month, day });\n    const calculateSameMonthResult = (diffDays: number) => {\n      // If the estimate is in the same year & month as the target, then we can\n      // calculate the result exactly and short-circuit any additional logic.\n      // This optimization assumes that months are continuous. It would break if\n      // a calendar skipped days, like the Julian->Gregorian switchover. But the\n      // only ICU calendars that currently skip days (japanese/roc/buddhist) is\n      // a bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)\n      // that's currently detected by `checkIcuBugs()` which will throw. So\n      // this optimization should be safe for all ICU calendars.\n      let testIsoEstimate = this.addDaysIso(isoEstimate, diffDays);\n      if (date.day > this.minimumMonthLength(date)) {\n        // There's a chance that the calendar date is out of range. Throw or\n        // constrain if so.\n        let testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache);\n        while (testCalendarDate.month !== month || testCalendarDate.year !== year) {\n          if (overflow === 'reject') {\n            throw new RangeError(`day ${day} does not exist in month ${month} of year ${year}`);\n          }\n          // Back up a day at a time until we're not hanging over the month end\n          testIsoEstimate = this.addDaysIso(testIsoEstimate, -1);\n          testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache);\n        }\n      }\n      return testIsoEstimate;\n    };\n    let sign = 0;\n    let roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n    let diff = simpleDateDiff(date, roundtripEstimate);\n    if (diff.years !== 0 || diff.months !== 0 || diff.days !== 0) {\n      const diffTotalDaysEstimate = diff.years * 365 + diff.months * 30 + diff.days;\n      isoEstimate = this.addDaysIso(isoEstimate, diffTotalDaysEstimate);\n      roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n      diff = simpleDateDiff(date, roundtripEstimate);\n      if (diff.years === 0 && diff.months === 0) {\n        isoEstimate = calculateSameMonthResult(diff.days);\n      } else {\n        sign = this.compareCalendarDates(date, roundtripEstimate);\n      }\n    }\n    // If the initial guess is not in the same month, then then bisect the\n    // distance to the target, starting with 8 days per step.\n    let increment = 8;\n    while (sign) {\n      isoEstimate = this.addDaysIso(isoEstimate, sign * increment);\n      const oldRoundtripEstimate = roundtripEstimate;\n      roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n      const oldSign = sign;\n      sign = this.compareCalendarDates(date, roundtripEstimate);\n      if (sign) {\n        diff = simpleDateDiff(date, roundtripEstimate);\n        if (diff.years === 0 && diff.months === 0) {\n          isoEstimate = calculateSameMonthResult(diff.days);\n          // Signal the loop condition that there's a match.\n          sign = 0;\n        } else if (oldSign && sign !== oldSign) {\n          if (increment > 1) {\n            // If the estimate overshot the target, try again with a smaller increment\n            // in the reverse direction.\n            increment /= 2;\n          } else {\n            // Increment is 1, and neither the previous estimate nor the new\n            // estimate is correct. The only way that can happen is if the\n            // original date was an invalid value that will be constrained or\n            // rejected here.\n            if (overflow === 'reject') {\n              throw new RangeError(`Can't find ISO date from calendar date: ${JSON.stringify({ ...originalDate })}`);\n            } else {\n              // To constrain, pick the earliest value\n              const order = this.compareCalendarDates(roundtripEstimate, oldRoundtripEstimate);\n              // If current value is larger, then back up to the previous value.\n              if (order > 0) isoEstimate = this.addDaysIso(isoEstimate, -1);\n              sign = 0;\n            }\n          }\n        }\n      }\n    }\n    cache.set(key, isoEstimate);\n    if (keyOriginal) cache.set(keyOriginal, isoEstimate);\n    if (\n      date.year === undefined ||\n      date.month === undefined ||\n      date.day === undefined ||\n      date.monthCode === undefined ||\n      (this.hasEra && (date.era === undefined || date.eraYear === undefined))\n    ) {\n      throw new RangeError('Unexpected missing property');\n    }\n    return isoEstimate;\n  }\n  temporalToCalendarDate(\n    date: Temporal.PlainDate | Temporal.PlainMonthDay | Temporal.PlainYearMonth,\n    cache: OneObjectCache\n  ): FullCalendarDate {\n    const isoDate = { year: GetSlot(date, ISO_YEAR), month: GetSlot(date, ISO_MONTH), day: GetSlot(date, ISO_DAY) };\n    const result = this.isoToCalendarDate(isoDate, cache);\n    return result;\n  }\n  compareCalendarDates(date1Param: Partial<CalendarYMD>, date2Param: Partial<CalendarYMD>): 0 | 1 | -1 {\n    // `date1` and `date2` are already records. The calls below simply validate\n    // that all three required fields are present.\n    const date1 = ES.PrepareTemporalFields(date1Param, ['day', 'month', 'year'], ['day', 'month', 'year']);\n    const date2 = ES.PrepareTemporalFields(date2Param, ['day', 'month', 'year'], ['day', 'month', 'year']);\n    if (date1.year !== date2.year) return ES.ComparisonResult(date1.year - date2.year);\n    if (date1.month !== date2.month) return ES.ComparisonResult(date1.month - date2.month);\n    if (date1.day !== date2.day) return ES.ComparisonResult(date1.day - date2.day);\n    return 0;\n  }\n  /** Ensure that a calendar date actually exists. If not, return the closest earlier date. */\n  regulateDate(calendarDate: CalendarYMD, overflow: Overflow = 'constrain', cache: OneObjectCache): FullCalendarDate {\n    const isoDate = this.calendarToIsoDate(calendarDate, overflow, cache);\n    return this.isoToCalendarDate(isoDate, cache);\n  }\n  addDaysIso(isoDate: IsoYMD, days: number): IsoYMD {\n    const added = ES.AddISODate(isoDate.year, isoDate.month, isoDate.day, 0, 0, 0, days, 'constrain');\n    return added;\n  }\n  addDaysCalendar(calendarDate: CalendarYMD, days: number, cache: OneObjectCache): FullCalendarDate {\n    const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n    const addedIso = this.addDaysIso(isoDate, days);\n    const addedCalendar = this.isoToCalendarDate(addedIso, cache);\n    return addedCalendar;\n  }\n  addMonthsCalendar(\n    calendarDateParam: CalendarYMD,\n    months: number,\n    overflow: Overflow,\n    cache: OneObjectCache\n  ): CalendarYMD {\n    let calendarDate = calendarDateParam;\n    const { day } = calendarDate;\n    for (let i = 0, absMonths = MathAbs(months); i < absMonths; i++) {\n      const { month } = calendarDate;\n      const oldCalendarDate = calendarDate;\n      const days =\n        months < 0\n          ? -Math.max(day, this.daysInPreviousMonth(calendarDate, cache))\n          : this.daysInMonth(calendarDate, cache);\n      const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n      let addedIso = this.addDaysIso(isoDate, days);\n      calendarDate = this.isoToCalendarDate(addedIso, cache);\n\n      // Normally, we can advance one month by adding the number of days in the\n      // current month. However, if we're at the end of the current month and\n      // the next month has fewer days, then we rolled over to the after-next\n      // month. Below we detect this condition and back up until we're back in\n      // the desired month.\n      if (months > 0) {\n        const monthsInOldYear = this.monthsInYear(oldCalendarDate, cache);\n        while (calendarDate.month - 1 !== month % monthsInOldYear) {\n          addedIso = this.addDaysIso(addedIso, -1);\n          calendarDate = this.isoToCalendarDate(addedIso, cache);\n        }\n      }\n\n      if (calendarDate.day !== day) {\n        // try to retain the original day-of-month, if possible\n        calendarDate = this.regulateDate({ ...calendarDate, day }, 'constrain', cache);\n      }\n    }\n    if (overflow === 'reject' && calendarDate.day !== day) {\n      throw new RangeError(`Day ${day} does not exist in resulting calendar month`);\n    }\n    return calendarDate;\n  }\n  addCalendar(\n    calendarDate: CalendarYMD & { monthCode: string },\n    { years = 0, months = 0, weeks = 0, days = 0 },\n    overflow: Overflow,\n    cache: OneObjectCache\n  ): FullCalendarDate {\n    const { year, day, monthCode } = calendarDate;\n    const addedYears = this.adjustCalendarDate({ year: year + years, monthCode, day }, cache);\n    const addedMonths = this.addMonthsCalendar(addedYears, months, overflow, cache);\n    const initialDays = days + weeks * 7;\n    const addedDays = this.addDaysCalendar(addedMonths, initialDays, cache);\n    return addedDays;\n  }\n  untilCalendar(\n    calendarOne: FullCalendarDate,\n    calendarTwo: FullCalendarDate,\n    largestUnit: Temporal.DateUnit,\n    cache: OneObjectCache\n  ): { years: number; months: number; weeks: number; days: number } {\n    let days = 0;\n    let weeks = 0;\n    let months = 0;\n    let years = 0;\n    switch (largestUnit) {\n      case 'day':\n        days = this.calendarDaysUntil(calendarOne, calendarTwo, cache);\n        break;\n      case 'week': {\n        const totalDays = this.calendarDaysUntil(calendarOne, calendarTwo, cache);\n        days = totalDays % 7;\n        weeks = (totalDays - days) / 7;\n        break;\n      }\n      case 'month':\n      case 'year': {\n        const sign = this.compareCalendarDates(calendarTwo, calendarOne);\n        if (!sign) {\n          return { years: 0, months: 0, weeks: 0, days: 0 };\n        }\n        const diffYears = calendarTwo.year - calendarOne.year;\n        const diffDays = calendarTwo.day - calendarOne.day;\n        if (largestUnit === 'year' && diffYears) {\n          let diffInYearSign = 0;\n          if (calendarTwo.monthCode > calendarOne.monthCode) diffInYearSign = 1;\n          if (calendarTwo.monthCode < calendarOne.monthCode) diffInYearSign = -1;\n          if (!diffInYearSign) diffInYearSign = Math.sign(diffDays);\n          const isOneFurtherInYear = diffInYearSign * sign < 0;\n          years = isOneFurtherInYear ? diffYears - sign : diffYears;\n        }\n        const yearsAdded = years ? this.addCalendar(calendarOne, { years }, 'constrain', cache) : calendarOne;\n        // Now we have less than one year remaining. Add one month at a time\n        // until we go over the target, then back up one month and calculate\n        // remaining days and weeks.\n        let current;\n        let next: CalendarYMD = yearsAdded;\n        do {\n          months += sign;\n          current = next;\n          next = this.addMonthsCalendar(current, sign, 'constrain', cache);\n          if (next.day !== calendarOne.day) {\n            // In case the day was constrained down, try to un-constrain it\n            next = this.regulateDate({ ...next, day: calendarOne.day }, 'constrain', cache);\n          }\n        } while (this.compareCalendarDates(calendarTwo, next) * sign >= 0);\n        months -= sign; // correct for loop above which overshoots by 1\n        const remainingDays = this.calendarDaysUntil(current, calendarTwo, cache);\n        days = remainingDays;\n        break;\n      }\n    }\n    return { years, months, weeks, days };\n  }\n  daysInMonth(calendarDate: CalendarYMD, cache: OneObjectCache): number {\n    // Add enough days to roll over to the next month. One we're in the next\n    // month, we can calculate the length of the current month. NOTE: This\n    // algorithm assumes that months are continuous. It would break if a\n    // calendar skipped days, like the Julian->Gregorian switchover. But the\n    // only ICU calendars that currently skip days (japanese/roc/buddhist) is a\n    // bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)\n    // that's currently detected by `checkIcuBugs()` which will throw. So this\n    // code should be safe for all ICU calendars.\n    const { day } = calendarDate;\n    const max = this.maximumMonthLength(calendarDate);\n    const min = this.minimumMonthLength(calendarDate);\n    // easiest case: we already know the month length if min and max are the same.\n    if (min === max) return min;\n\n    // Add enough days to get into the next month, without skipping it\n    const increment = day <= max - min ? max : min;\n    const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n    const addedIsoDate = this.addDaysIso(isoDate, increment);\n    const addedCalendarDate = this.isoToCalendarDate(addedIsoDate, cache);\n\n    // Now back up to the last day of the original month\n    const endOfMonthIso = this.addDaysIso(addedIsoDate, -addedCalendarDate.day);\n    const endOfMonthCalendar = this.isoToCalendarDate(endOfMonthIso, cache);\n    return endOfMonthCalendar.day;\n  }\n  daysInPreviousMonth(calendarDate: CalendarYMD, cache: OneObjectCache): number {\n    const { day, month, year } = calendarDate;\n\n    // Check to see if we already know the month length, and return it if so\n    const previousMonthYear = month > 1 ? year : year - 1;\n    let previousMonthDate = { year: previousMonthYear, month, day: 1 };\n    const previousMonth = month > 1 ? month - 1 : this.monthsInYear(previousMonthDate, cache);\n    previousMonthDate = { ...previousMonthDate, month: previousMonth };\n    const min = this.minimumMonthLength(previousMonthDate);\n    const max = this.maximumMonthLength(previousMonthDate);\n    if (min === max) return max;\n\n    const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n    const lastDayOfPreviousMonthIso = this.addDaysIso(isoDate, -day);\n    const lastDayOfPreviousMonthCalendar = this.isoToCalendarDate(lastDayOfPreviousMonthIso, cache);\n    return lastDayOfPreviousMonthCalendar.day;\n  }\n  startOfCalendarYear(calendarDate: CalendarYearOnly): CalendarYMD & { monthCode: string } {\n    return { year: calendarDate.year, month: 1, monthCode: 'M01', day: 1 };\n  }\n  startOfCalendarMonth(calendarDate: CalendarYM): CalendarYMD {\n    return { year: calendarDate.year, month: calendarDate.month, day: 1 };\n  }\n  calendarDaysUntil(calendarOne: CalendarYMD, calendarTwo: CalendarYMD, cache: OneObjectCache): number {\n    const oneIso = this.calendarToIsoDate(calendarOne, 'constrain', cache);\n    const twoIso = this.calendarToIsoDate(calendarTwo, 'constrain', cache);\n    return this.isoDaysUntil(oneIso, twoIso);\n  }\n  isoDaysUntil(oneIso: IsoYMD, twoIso: IsoYMD): number {\n    const duration = ES.DifferenceISODate(\n      oneIso.year,\n      oneIso.month,\n      oneIso.day,\n      twoIso.year,\n      twoIso.month,\n      twoIso.day,\n      'day'\n    );\n    return duration.days;\n  }\n  // The short era format works for all calendars except Japanese, which will\n  // override.\n  eraLength: Intl.DateTimeFormatOptions['era'] = 'short';\n  // All built-in calendars except Chinese/Dangi and Hebrew use an era\n  hasEra = true;\n  // See https://github.com/tc39/proposal-temporal/issues/1784\n  erasBeginMidYear = false;\n  monthDayFromFields(fields: FullCalendarDate, overflow: Overflow, cache: OneObjectCache): IsoYMD {\n    let { monthCode, day } = fields;\n    if (monthCode === undefined) {\n      let { year, era, eraYear } = fields;\n      if (year === undefined && (era === undefined || eraYear === undefined)) {\n        throw new TypeError('when `monthCode` is omitted, `year` (or `era` and `eraYear`) and `month` are required');\n      }\n      // Apply overflow behaviour to year/month/day, to get correct monthCode/day\n      ({ monthCode, day } = this.isoToCalendarDate(this.calendarToIsoDate(fields, overflow, cache), cache));\n    }\n\n    let isoYear, isoMonth, isoDay;\n    let closestCalendar, closestIso;\n    // Look backwards starting from one of the calendar years spanning ISO year\n    // 1972, up to 100 calendar years prior, to find a year that has this month\n    // and day. Normal months and days will match immediately, but for leap days\n    // and leap months we may have to look for a while.\n    const startDateIso = { year: 1972, month: 12, day: 31 };\n    const calendarOfStartDateIso = this.isoToCalendarDate(startDateIso, cache);\n    // Note: relies on lexicographical ordering of monthCodes\n    const calendarYear =\n      calendarOfStartDateIso.monthCode > monthCode ||\n      (calendarOfStartDateIso.monthCode === monthCode && calendarOfStartDateIso.day >= day)\n        ? calendarOfStartDateIso.year\n        : calendarOfStartDateIso.year - 1;\n    for (let i = 0; i < 100; i++) {\n      const testCalendarDate: FullCalendarDate = this.adjustCalendarDate(\n        { day, monthCode, year: calendarYear - i },\n        cache\n      );\n      const isoDate = this.calendarToIsoDate(testCalendarDate, 'constrain', cache);\n      const roundTripCalendarDate = this.isoToCalendarDate(isoDate, cache);\n      ({ year: isoYear, month: isoMonth, day: isoDay } = isoDate);\n      if (roundTripCalendarDate.monthCode === monthCode && roundTripCalendarDate.day === day) {\n        return { month: isoMonth, day: isoDay, year: isoYear };\n      } else if (overflow === 'constrain') {\n        // non-ISO constrain algorithm tries to find the closest date in a matching month\n        if (\n          closestCalendar === undefined ||\n          (roundTripCalendarDate.monthCode === closestCalendar.monthCode &&\n            roundTripCalendarDate.day > closestCalendar.day)\n        ) {\n          closestCalendar = roundTripCalendarDate;\n          closestIso = isoDate;\n        }\n      }\n    }\n    if (overflow === 'constrain' && closestIso !== undefined) return closestIso;\n    throw new RangeError(`No recent ${this.id} year with monthCode ${monthCode} and day ${day}`);\n  }\n}\n\ninterface HebrewMonthInfo {\n  [m: string]: (\n    | {\n        leap: undefined;\n        regular: number;\n      }\n    | {\n        leap: number;\n        regular: undefined;\n      }\n    | {\n        leap: number;\n        regular: number;\n      }\n  ) & {\n    monthCode: string;\n    days:\n      | number\n      | {\n          min: number;\n          max: number;\n        };\n  };\n}\n\nclass HebrewHelper extends HelperBase {\n  id = 'hebrew' as const;\n  calendarType = 'lunisolar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly) {\n    const { year } = calendarDate;\n    // FYI: In addition to adding a month in leap years, the Hebrew calendar\n    // also has per-year changes to the number of days of Heshvan and Kislev.\n    // Given that these can be calculated by counting the number of days in\n    // those months, I assume that these DO NOT need to be exposed as\n    // Hebrew-only prototype fields or methods.\n    return (7 * year + 1) % 19 < 7;\n  }\n  monthsInYear(calendarDate: CalendarYearOnly) {\n    return this.inLeapYear(calendarDate) ? 13 : 12;\n  }\n  minimumMonthLength(calendarDate: CalendarYM) {\n    return this.minMaxMonthLength(calendarDate, 'min');\n  }\n  maximumMonthLength(calendarDate: CalendarYM) {\n    return this.minMaxMonthLength(calendarDate, 'max');\n  }\n  minMaxMonthLength(calendarDate: CalendarYM, minOrMax: 'min' | 'max') {\n    const { month, year } = calendarDate;\n    const monthCode = this.getMonthCode(year, month);\n    const monthInfo = ObjectEntries(this.months).find((m) => m[1].monthCode === monthCode);\n    if (monthInfo === undefined) throw new RangeError(`unmatched Hebrew month: ${month}`);\n    const daysInMonth = monthInfo[1].days;\n    return typeof daysInMonth === 'number' ? daysInMonth : daysInMonth[minOrMax];\n  }\n  /** Take a guess at what ISO date a particular calendar date corresponds to */\n  estimateIsoDate(calendarDate: CalendarYMD) {\n    const { year } = calendarDate;\n    return { year: year - 3760, month: 1, day: 1 };\n  }\n  months: HebrewMonthInfo = {\n    Tishri: { leap: 1, regular: 1, monthCode: 'M01', days: 30 },\n    Heshvan: { leap: 2, regular: 2, monthCode: 'M02', days: { min: 29, max: 30 } },\n    Kislev: { leap: 3, regular: 3, monthCode: 'M03', days: { min: 29, max: 30 } },\n    Tevet: { leap: 4, regular: 4, monthCode: 'M04', days: 29 },\n    Shevat: { leap: 5, regular: 5, monthCode: 'M05', days: 30 },\n    Adar: { leap: undefined, regular: 6, monthCode: 'M06', days: 29 },\n    'Adar I': { leap: 6, regular: undefined, monthCode: 'M05L', days: 30 },\n    'Adar II': { leap: 7, regular: undefined, monthCode: 'M06', days: 29 },\n    Nisan: { leap: 8, regular: 7, monthCode: 'M07', days: 30 },\n    Iyar: { leap: 9, regular: 8, monthCode: 'M08', days: 29 },\n    Sivan: { leap: 10, regular: 9, monthCode: 'M09', days: 30 },\n    Tamuz: { leap: 11, regular: 10, monthCode: 'M10', days: 29 },\n    Av: { leap: 12, regular: 11, monthCode: 'M11', days: 30 },\n    Elul: { leap: 13, regular: 12, monthCode: 'M12', days: 29 }\n  };\n  getMonthCode(year: number, month: number) {\n    if (this.inLeapYear({ year })) {\n      return month === 6 ? buildMonthCode(5, true) : buildMonthCode(month < 6 ? month : month - 1);\n    } else {\n      return buildMonthCode(month);\n    }\n  }\n  override adjustCalendarDate(\n    calendarDate: Partial<FullCalendarDate>,\n    cache?: OneObjectCache,\n    overflow: Overflow = 'constrain',\n    fromLegacyDate = false\n  ): FullCalendarDate {\n    // The incoming type is actually CalendarDate (same as args to\n    // Calendar.dateFromParams) but TS isn't smart enough to follow all the\n    // reassignments below, so as an alternative to 10+ type casts, we'll lie\n    // here and claim that the type has `day` and `year` filled in already.\n    let { year, eraYear, month, monthCode, day, monthExtra } = calendarDate as Omit<\n      typeof calendarDate,\n      'year' | 'day'\n    > & { year: number; day: number };\n    if (year === undefined && eraYear !== undefined) year = eraYear;\n    if (eraYear === undefined && year !== undefined) eraYear = year;\n    if (fromLegacyDate) {\n      // In Pre Node-14 V8, DateTimeFormat.formatToParts `month: 'numeric'`\n      // output returns the numeric equivalent of `month` as a string, meaning\n      // that `'6'` in a leap year is Adar I, while `'6'` in a non-leap year\n      // means Adar. In this case, `month` will already be correct and no action\n      // is needed. However, in Node 14 and later formatToParts returns the name\n      // of the Hebrew month (e.g. \"Tevet\"), so we'll need to look up the\n      // correct `month` using the string name as a key.\n      if (monthExtra) {\n        const monthInfo = this.months[monthExtra];\n        if (!monthInfo) throw new RangeError(`Unrecognized month from formatToParts: ${monthExtra}`);\n        month = this.inLeapYear({ year }) ? monthInfo.leap : monthInfo.regular;\n      }\n      // Because we're getting data from legacy Date, then `month` will always be present\n      monthCode = this.getMonthCode(year, month as number);\n      const result = { year, month: month as number, day, era: undefined as string | undefined, eraYear, monthCode };\n      return result;\n    } else {\n      // When called without input coming from legacy Date output, simply ensure\n      // that all fields are present.\n      this.validateCalendarDate(calendarDate);\n      if (month === undefined) {\n        if ((monthCode as string).endsWith('L')) {\n          if (monthCode !== 'M05L') {\n            throw new RangeError(`Hebrew leap month must have monthCode M05L, not ${monthCode}`);\n          }\n          month = 6;\n          if (!this.inLeapYear({ year })) {\n            if (overflow === 'reject') {\n              throw new RangeError(`Hebrew monthCode M05L is invalid in year ${year} which is not a leap year`);\n            } else {\n              // constrain to same day of next month (Adar)\n              month = 6;\n              monthCode = 'M06';\n            }\n          }\n        } else {\n          month = monthCodeNumberPart(monthCode as string);\n          // if leap month is before this one, the month index is one more than the month code\n          if (this.inLeapYear({ year }) && month >= 6) month++;\n          const largestMonth = this.monthsInYear({ year });\n          if (month < 1 || month > largestMonth) throw new RangeError(`Invalid monthCode: ${monthCode}`);\n        }\n      } else {\n        if (overflow === 'reject') {\n          ES.RejectToRange(month, 1, this.monthsInYear({ year }));\n          ES.RejectToRange(day, 1, this.maximumMonthLength({ year, month }));\n        } else {\n          month = ES.ConstrainToRange(month, 1, this.monthsInYear({ year }));\n          day = ES.ConstrainToRange(day, 1, this.maximumMonthLength({ year, month }));\n        }\n        if (monthCode === undefined) {\n          monthCode = this.getMonthCode(year, month);\n        } else {\n          const calculatedMonthCode = this.getMonthCode(year, month);\n          if (calculatedMonthCode !== monthCode) {\n            throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Hebrew year ${year}`);\n          }\n        }\n      }\n      return { ...calendarDate, day, month, monthCode: monthCode as string, year, eraYear };\n    }\n  }\n  // All built-in calendars except Chinese/Dangi and Hebrew use an era\n  override hasEra = false;\n}\n\n/**\n * For Temporal purposes, the Islamic calendar is simple because it's always the\n * same 12 months in the same order.\n */\nabstract class IslamicBaseHelper extends HelperBase {\n  abstract override id: BuiltinCalendarId;\n  calendarType = 'lunar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly, cache: OneObjectCache) {\n    // In leap years, the 12th month has 30 days. In non-leap years: 29.\n    const days = this.daysInMonth({ year: calendarDate.year, month: 12, day: 1 }, cache);\n    return days === 30;\n  }\n  monthsInYear(/* calendarYear, cache */) {\n    return 12;\n  }\n  minimumMonthLength(/* calendarDate */) {\n    return 29;\n  }\n  maximumMonthLength(/* calendarDate */) {\n    return 30;\n  }\n  DAYS_PER_ISLAMIC_YEAR = 354 + 11 / 30;\n  DAYS_PER_ISO_YEAR = 365.2425;\n  override constantEra = 'ah';\n  estimateIsoDate(calendarDate: CalendarYMD) {\n    const { year } = this.adjustCalendarDate(calendarDate);\n    return { year: MathFloor((year * this.DAYS_PER_ISLAMIC_YEAR) / this.DAYS_PER_ISO_YEAR) + 622, month: 1, day: 1 };\n  }\n}\n\n// There are 6 Islamic calendars with the same implementation in this polyfill.\n// They vary only in their ID. They do emit different output from the underlying\n// Intl implementation, but our code for each of them is identical.\nclass IslamicHelper extends IslamicBaseHelper {\n  id = 'islamic' as const;\n}\nclass IslamicUmalquraHelper extends IslamicBaseHelper {\n  id = 'islamic-umalqura' as const;\n}\nclass IslamicTblaHelper extends IslamicBaseHelper {\n  id = 'islamic-tbla' as const;\n}\nclass IslamicCivilHelper extends IslamicBaseHelper {\n  id = 'islamic-civil' as const;\n}\nclass IslamicRgsaHelper extends IslamicBaseHelper {\n  id = 'islamic-rgsa' as const;\n}\nclass IslamicCcHelper extends IslamicBaseHelper {\n  id = 'islamicc' as const;\n}\n\nclass PersianHelper extends HelperBase {\n  id = 'persian' as const;\n  calendarType = 'solar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly, cache: OneObjectCache) {\n    // Same logic (count days in the last month) for Persian as for Islamic,\n    // even though Persian is solar and Islamic is lunar.\n    return IslamicHelper.prototype.inLeapYear.call(this, calendarDate, cache);\n  }\n  monthsInYear(/* calendarYear, cache */) {\n    return 12;\n  }\n  minimumMonthLength(calendarDate: CalendarYM) {\n    const { month } = calendarDate;\n    if (month === 12) return 29;\n    return month <= 6 ? 31 : 30;\n  }\n  maximumMonthLength(calendarDate: CalendarYM) {\n    const { month } = calendarDate;\n    if (month === 12) return 30;\n    return month <= 6 ? 31 : 30;\n  }\n  override constantEra = 'ap';\n  estimateIsoDate(calendarDate: CalendarYMD) {\n    const { year } = this.adjustCalendarDate(calendarDate);\n    return { year: year + 621, month: 1, day: 1 };\n  }\n}\n\ninterface IndianMonthInfo {\n  [month: number]: {\n    length: number;\n    month: number;\n    day: number;\n    leap?: {\n      length: number;\n      month: number;\n      day: number;\n    };\n    nextYear?: true | undefined;\n  };\n}\n\nclass IndianHelper extends HelperBase {\n  id = 'indian' as const;\n  calendarType = 'solar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly) {\n    // From https://en.wikipedia.org/wiki/Indian_national_calendar:\n    // Years are counted in the Saka era, which starts its year 0 in the year 78\n    // of the Common Era. To determine leap years, add 78 to the Saka year – if\n    // the result is a leap year in the Gregorian calendar, then the Saka year\n    // is a leap year as well.\n    return isGregorianLeapYear(calendarDate.year + 78);\n  }\n  monthsInYear(/* calendarYear, cache */) {\n    return 12;\n  }\n  minimumMonthLength(calendarDate: CalendarYM) {\n    return this.getMonthInfo(calendarDate).length;\n  }\n  maximumMonthLength(calendarDate: CalendarYM) {\n    return this.getMonthInfo(calendarDate).length;\n  }\n  override constantEra = 'saka';\n  // Indian months always start at the same well-known Gregorian month and\n  // day. So this conversion is easy and fast. See\n  // https://en.wikipedia.org/wiki/Indian_national_calendar\n  months: IndianMonthInfo = {\n    1: { length: 30, month: 3, day: 22, leap: { length: 31, month: 3, day: 21 } },\n    2: { length: 31, month: 4, day: 21 },\n    3: { length: 31, month: 5, day: 22 },\n    4: { length: 31, month: 6, day: 22 },\n    5: { length: 31, month: 7, day: 23 },\n    6: { length: 31, month: 8, day: 23 },\n    7: { length: 30, month: 9, day: 23 },\n    8: { length: 30, month: 10, day: 23 },\n    9: { length: 30, month: 11, day: 22 },\n    10: { length: 30, month: 12, day: 22 },\n    11: { length: 30, month: 1, nextYear: true, day: 21 },\n    12: { length: 30, month: 2, nextYear: true, day: 20 }\n  };\n  getMonthInfo(calendarDate: CalendarYM) {\n    const { month } = calendarDate;\n    let monthInfo = this.months[month];\n    if (monthInfo === undefined) throw new RangeError(`Invalid month: ${month}`);\n    if (this.inLeapYear(calendarDate) && monthInfo.leap) monthInfo = monthInfo.leap;\n    return monthInfo;\n  }\n  estimateIsoDate(calendarDateParam: CalendarYMD) {\n    // FYI, this \"estimate\" is always the exact ISO date, which makes the Indian\n    // calendar fast!\n    const calendarDate = this.adjustCalendarDate(calendarDateParam);\n    const monthInfo = this.getMonthInfo(calendarDate);\n    const isoYear = calendarDate.year + 78 + (monthInfo.nextYear ? 1 : 0);\n    const isoMonth = monthInfo.month;\n    const isoDay = monthInfo.day;\n    const isoDate = ES.AddISODate(isoYear, isoMonth, isoDay, 0, 0, 0, calendarDate.day - 1, 'constrain');\n    return isoDate;\n  }\n  // https://bugs.chromium.org/p/v8/issues/detail?id=10529 causes Intl's Indian\n  // calendar output to fail for all dates before 0001-01-01 ISO.  For example,\n  // in Node 12 0000-01-01 is calculated as 6146/12/-583 instead of 10/11/-79 as\n  // expected.\n  vulnerableToBceBug =\n    new Date('0000-01-01T00:00Z').toLocaleDateString('en-US-u-ca-indian', { timeZone: 'UTC' }) !== '10/11/-79 Saka';\n  override checkIcuBugs(isoDate: IsoYMD) {\n    if (this.vulnerableToBceBug && isoDate.year < 1) {\n      throw new RangeError(\n        `calendar '${this.id}' is broken for ISO dates before 0001-01-01` +\n          ' (see https://bugs.chromium.org/p/v8/issues/detail?id=10529)'\n      );\n    }\n  }\n}\n\n/**\n * Era metadata defined for each calendar.\n * TODO: instead of optional properties, this should really have rules\n * encoded in the type, e.g. isoEpoch is required unless reverseOf is present.\n *  */\ninterface InputEra {\n  /** name of the era */\n  name: string;\n\n  /**\n   * Signed calendar year where this era begins.Will be\n   * 1 (or 0 for zero-based eras) for the anchor era assuming that `year`\n   * numbering starts at the beginning of the anchor era, which is true\n   * for all ICU calendars except Japanese. If an era starts mid-year\n   * then a calendar month and day are included. Otherwise\n   * `{ month: 1, day: 1 }` is assumed.\n   */\n  anchorEpoch?: CalendarYearOnly | CalendarYMD;\n\n  /** ISO date of the first day of this era */\n  isoEpoch?: { year: number; month: number; day: number };\n\n  /**\n   * If present, then this era counts years backwards like BC\n   * and this property points to the forward era. This must be\n   * the last (oldest) era in the array.\n   * */\n  reverseOf?: string;\n\n  /**\n   * If true, the era's years are 0-based. If omitted or false,\n   * then the era's years are 1-based.\n   * */\n  hasYearZero?: boolean;\n\n  /**\n   * Override if this era is the anchor. Not normally used because\n   * anchor eras are inferred.\n   * */\n  isAnchor?: boolean;\n}\n/**\n * Transformation of the `InputEra` type with all fields filled in by\n * `adjustEras()`\n * */\ninterface Era {\n  /** name of the era */\n  name: string;\n\n  /**\n   * alternate name of the era used in old versions of ICU data\n   * format is `era{n}` where n is the zero-based index of the era\n   * with the oldest era being 0.\n   * */\n  genericName: string;\n\n  /**\n   * Signed calendar year where this era begins. Will be 1 (or 0 for zero-based\n   * eras) for the anchor era assuming that `year` numbering starts at the\n   * beginning of the anchor era, which is true for all ICU calendars except\n   * Japanese. For input, the month and day are optional. If an era starts\n   * mid-year then a calendar month and day are included.\n   * Otherwise `{ month: 1, day: 1 }` is assumed.\n   */\n  anchorEpoch: CalendarYMD;\n\n  /** ISO date of the first day of this era */\n  isoEpoch: IsoYMD;\n\n  /**\n   * If present, then this era counts years backwards like BC\n   * and this property points to the forward era. This must be\n   * the last (oldest) era in the array.\n   * */\n  reverseOf?: Era;\n\n  /**\n   * If true, the era's years are 0-based. If omitted or false,\n   * then the era's years are 1-based.\n   * */\n  hasYearZero?: boolean;\n\n  /**\n   * Override if this era is the anchor. Not normally used because\n   * anchor eras are inferred.\n   * */\n  isAnchor?: boolean;\n}\n\n/**\n * This function adds additional metadata that makes it easier to work with\n * eras. Note that it mutates and normalizes the original era objects, which is\n * OK because this is non-observable, internal-only metadata.\n *\n * The result is an array of eras with the shape defined above.\n * */\nfunction adjustEras(erasParam: InputEra[]): { eras: Era[]; anchorEra: Era } {\n  let eras: (InputEra | Era)[] = erasParam;\n  if (eras.length === 0) {\n    throw new RangeError('Invalid era data: eras are required');\n  }\n  if (eras.length === 1 && eras[0].reverseOf) {\n    throw new RangeError('Invalid era data: anchor era cannot count years backwards');\n  }\n  if (eras.length === 1 && !eras[0].name) {\n    throw new RangeError('Invalid era data: at least one named era is required');\n  }\n  if (eras.filter((e) => e.reverseOf != null).length > 1) {\n    throw new RangeError('Invalid era data: only one era can count years backwards');\n  }\n\n  // Find the \"anchor era\" which is the era used for (era-less) `year`. Reversed\n  // eras can never be anchors. The era without an `anchorEpoch` property is the\n  // anchor.\n  let anchorEra: Era | InputEra | undefined;\n  eras.forEach((e) => {\n    if (e.isAnchor || (!e.anchorEpoch && !e.reverseOf)) {\n      if (anchorEra) throw new RangeError('Invalid era data: cannot have multiple anchor eras');\n      anchorEra = e;\n      e.anchorEpoch = { year: e.hasYearZero ? 0 : 1 };\n    } else if (!e.name) {\n      throw new RangeError('If era name is blank, it must be the anchor era');\n    }\n  });\n\n  // If the era name is undefined, then it's an anchor that doesn't interact\n  // with eras at all. For example, Japanese `year` is always the same as ISO\n  // `year`.  So this \"era\" is the anchor era but isn't used for era matching.\n  // Strip it from the list that's returned.\n  eras = eras.filter((e) => e.name);\n\n  eras.forEach((e) => {\n    // Some eras are mirror images of another era e.g. B.C. is the reverse of A.D.\n    // Replace the string-valued \"reverseOf\" property with the actual era object\n    // that's reversed.\n    const { reverseOf } = e;\n    if (reverseOf) {\n      const reversedEra = eras.find((era) => era.name === reverseOf);\n      if (reversedEra === undefined) throw new RangeError(`Invalid era data: unmatched reverseOf era: ${reverseOf}`);\n      e.reverseOf = reversedEra as Era;\n      e.anchorEpoch = reversedEra.anchorEpoch;\n      e.isoEpoch = reversedEra.isoEpoch;\n    }\n    type YMD = {\n      year: number;\n      month: number;\n      day: number;\n    };\n    if ((e.anchorEpoch as YMD).month === undefined) (e.anchorEpoch as YMD).month = 1;\n    if ((e.anchorEpoch as YMD).day === undefined) (e.anchorEpoch as YMD).day = 1;\n  });\n\n  // Ensure that the latest epoch is first in the array. This lets us try to\n  // match eras in index order, with the last era getting the remaining older\n  // years. Any reverse-signed era must be at the end.\n  ArraySort.call(eras, (e1, e2) => {\n    if (e1.reverseOf) return 1;\n    if (e2.reverseOf) return -1;\n    if (!e1.isoEpoch || !e2.isoEpoch) throw new RangeError('Invalid era data: missing ISO epoch');\n    return e2.isoEpoch.year - e1.isoEpoch.year;\n  });\n\n  // If there's a reversed era, then the one before it must be the era that's\n  // being reversed.\n  const lastEraReversed = eras[eras.length - 1].reverseOf;\n  if (lastEraReversed) {\n    if (lastEraReversed !== eras[eras.length - 2]) throw new RangeError('Invalid era data: invalid reverse-sign era');\n  }\n\n  // Finally, add a \"genericName\" property in the format \"era{n} where `n` is\n  // zero-based index, with the oldest era being zero. This format is used by\n  // older versions of ICU data.\n  eras.forEach((e, i) => {\n    (e as Era).genericName = `era${eras.length - 1 - i}`;\n  });\n\n  return { eras: eras as Era[], anchorEra: (anchorEra || eras[0]) as Era };\n}\n\nfunction isGregorianLeapYear(year: number) {\n  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\n/** Base for all Gregorian-like calendars. */\nabstract class GregorianBaseHelper extends HelperBase {\n  id: BuiltinCalendarId;\n  eras: Era[];\n  anchorEra: Era;\n\n  constructor(id: BuiltinCalendarId, originalEras: InputEra[]) {\n    super();\n    this.id = id;\n    const { eras, anchorEra } = adjustEras(originalEras);\n    this.anchorEra = anchorEra;\n    this.eras = eras;\n  }\n  calendarType = 'solar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly) {\n    // Calendars that don't override this method use the same months and leap\n    // years as Gregorian. Once we know the ISO year corresponding to the\n    // calendar year, we'll know if it's a leap year or not.\n    const { year } = this.estimateIsoDate({ month: 1, day: 1, year: calendarDate.year });\n    return isGregorianLeapYear(year);\n  }\n  monthsInYear(/* calendarDate */) {\n    return 12;\n  }\n  minimumMonthLength(calendarDate: CalendarYM): number {\n    const { month } = calendarDate;\n    if (month === 2) return this.inLeapYear(calendarDate) ? 29 : 28;\n    return [4, 6, 9, 11].indexOf(month) >= 0 ? 30 : 31;\n  }\n  maximumMonthLength(calendarDate: CalendarYM): number {\n    return this.minimumMonthLength(calendarDate);\n  }\n  /** Fill in missing parts of the (year, era, eraYear) tuple */\n  completeEraYear(calendarDate: Partial<FullCalendarDate>) {\n    const checkField = (name: keyof FullCalendarDate, value: string | number | undefined) => {\n      const currentValue = calendarDate[name];\n      if (currentValue != null && currentValue != value) {\n        throw new RangeError(`Input ${name} ${currentValue} doesn't match calculated value ${value}`);\n      }\n    };\n    const eraFromYear = (year: number) => {\n      let eraYear;\n      const adjustedCalendarDate = { ...calendarDate, year };\n      const matchingEra = this.eras.find((e, i) => {\n        if (i === this.eras.length - 1) {\n          if (e.reverseOf) {\n            // This is a reverse-sign era (like BCE) which must be the oldest\n            // era. Count years backwards.\n            if (year > 0) throw new RangeError(`Signed year ${year} is invalid for era ${e.name}`);\n            eraYear = e.anchorEpoch.year - year;\n            return true;\n          }\n          // last era always gets all \"leftover\" (older than epoch) years,\n          // so no need for a comparison like below.\n          eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1);\n          return true;\n        }\n        const comparison = this.compareCalendarDates(adjustedCalendarDate, e.anchorEpoch);\n        if (comparison >= 0) {\n          eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1);\n          return true;\n        }\n        return false;\n      });\n      if (!matchingEra) throw new RangeError(`Year ${year} was not matched by any era`);\n      return { eraYear: eraYear as unknown as number, era: matchingEra.name };\n    };\n\n    let { year, eraYear, era } = calendarDate;\n    if (year != null) {\n      ({ eraYear, era } = eraFromYear(year));\n      checkField('era', era);\n      checkField('eraYear', eraYear);\n    } else if (eraYear != null) {\n      const matchingEra =\n        era === undefined ? undefined : this.eras.find((e) => e.name === era || e.genericName === era);\n      if (!matchingEra) throw new RangeError(`Era ${era} (ISO year ${eraYear}) was not matched by any era`);\n      if (eraYear < 1 && matchingEra.reverseOf) {\n        throw new RangeError(`Years in ${era} era must be positive, not ${year}`);\n      }\n      if (matchingEra.reverseOf) {\n        year = matchingEra.anchorEpoch.year - eraYear;\n      } else {\n        year = eraYear + matchingEra.anchorEpoch.year - (matchingEra.hasYearZero ? 0 : 1);\n      }\n      checkField('year', year);\n      // We'll accept dates where the month/day is earlier than the start of\n      // the era or after its end as long as it's in the same year. If that\n      // happens, we'll adjust the era/eraYear pair to be the correct era for\n      // the `year`.\n      ({ eraYear, era } = eraFromYear(year));\n    } else {\n      throw new RangeError('Either `year` or `eraYear` and `era` are required');\n    }\n    return { ...calendarDate, year, eraYear, era };\n  }\n  override adjustCalendarDate(\n    calendarDateParam: Partial<FullCalendarDate>,\n    cache?: OneObjectCache,\n    overflow: Overflow = 'constrain'\n  ): FullCalendarDate {\n    let calendarDate = calendarDateParam;\n    // Because this is not a lunisolar calendar, it's safe to convert monthCode to a number\n    const { month, monthCode } = calendarDate;\n    if (month === undefined) calendarDate = { ...calendarDate, month: monthCodeNumberPart(monthCode as string) };\n    this.validateCalendarDate(calendarDate);\n    calendarDate = this.completeEraYear(calendarDate);\n    return super.adjustCalendarDate(calendarDate, cache, overflow);\n  }\n  estimateIsoDate(calendarDateParam: CalendarYMD) {\n    const calendarDate = this.adjustCalendarDate(calendarDateParam);\n    const { year, month, day } = calendarDate;\n    const { anchorEra } = this;\n    const isoYearEstimate = year + anchorEra.isoEpoch.year - (anchorEra.hasYearZero ? 0 : 1);\n    return ES.RegulateISODate(isoYearEstimate, month, day, 'constrain');\n  }\n  // Several calendars based on the Gregorian calendar use Julian dates (not\n  // proleptic Gregorian dates) before the Julian switchover in Oct 1582. See\n  // https://bugs.chromium.org/p/chromium/issues/detail?id=1173158.\n  v8IsVulnerableToJulianBug = new Date('+001001-01-01T00:00Z')\n    .toLocaleDateString('en-US-u-ca-japanese', { timeZone: 'UTC' })\n    .startsWith('12');\n  calendarIsVulnerableToJulianBug = false;\n  override checkIcuBugs(isoDate: IsoYMD) {\n    if (this.calendarIsVulnerableToJulianBug && this.v8IsVulnerableToJulianBug) {\n      const beforeJulianSwitch = ES.CompareISODate(isoDate.year, isoDate.month, isoDate.day, 1582, 10, 15) < 0;\n      if (beforeJulianSwitch) {\n        throw new RangeError(\n          `calendar '${this.id}' is broken for ISO dates before 1582-10-15` +\n            ' (see https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)'\n        );\n      }\n    }\n  }\n}\n\nabstract class OrthodoxBaseHelper extends GregorianBaseHelper {\n  constructor(id: BuiltinCalendarId, originalEras: InputEra[]) {\n    super(id, originalEras);\n  }\n  override inLeapYear(calendarDate: CalendarYearOnly) {\n    // Leap years happen one year before the Julian leap year. Note that this\n    // calendar is based on the Julian calendar which has a leap year every 4\n    // years, unlike the Gregorian calendar which doesn't have leap years on\n    // years divisible by 100 except years divisible by 400.\n    //\n    // Note that we're assuming that leap years in before-epoch times match\n    // how leap years are defined now. This is probably not accurate but I'm\n    // not sure how better to do it.\n    const { year } = calendarDate;\n    return (year + 1) % 4 === 0;\n  }\n  override monthsInYear(/* calendarDate */) {\n    return 13;\n  }\n  override minimumMonthLength(calendarDate: CalendarYM) {\n    const { month } = calendarDate;\n    // Ethiopian/Coptic calendars have 12 30-day months and an extra 5-6 day 13th month.\n    if (month === 13) return this.inLeapYear(calendarDate) ? 6 : 5;\n    return 30;\n  }\n  override maximumMonthLength(calendarDate: CalendarYM) {\n    return this.minimumMonthLength(calendarDate);\n  }\n}\n\n// `coptic` and `ethiopic` calendars are very similar to `ethioaa` calendar,\n// with the following differences:\n// - Coptic uses BCE-like positive numbers for years before its epoch (the other\n//   two use negative year numbers before epoch)\n// - Coptic has a different epoch date\n// - Ethiopic has an additional second era that starts at the same date as the\n//   zero era of ethioaa.\nclass EthioaaHelper extends OrthodoxBaseHelper {\n  constructor() {\n    super('ethioaa', [{ name: 'era0', isoEpoch: { year: -5492, month: 7, day: 17 } }]);\n  }\n}\nclass CopticHelper extends OrthodoxBaseHelper {\n  constructor() {\n    super('coptic', [\n      { name: 'era1', isoEpoch: { year: 284, month: 8, day: 29 } },\n      { name: 'era0', reverseOf: 'era1' }\n    ]);\n  }\n}\n\n// Anchor is currently the older era to match ethioaa, but should it be the newer era?\n// See https://github.com/tc39/ecma402/issues/534 for discussion.\nclass EthiopicHelper extends OrthodoxBaseHelper {\n  constructor() {\n    super('ethiopic', [\n      { name: 'era0', isoEpoch: { year: -5492, month: 7, day: 17 } },\n      { name: 'era1', isoEpoch: { year: 8, month: 8, day: 27 }, anchorEpoch: { year: 5501 } }\n    ]);\n  }\n}\n\nclass RocHelper extends GregorianBaseHelper {\n  constructor() {\n    super('roc', [\n      { name: 'minguo', isoEpoch: { year: 1912, month: 1, day: 1 } },\n      { name: 'before-roc', reverseOf: 'minguo' }\n    ]);\n  }\n  override calendarIsVulnerableToJulianBug = true;\n}\n\nclass BuddhistHelper extends GregorianBaseHelper {\n  constructor() {\n    super('buddhist', [{ name: 'be', hasYearZero: true, isoEpoch: { year: -543, month: 1, day: 1 } }]);\n  }\n  override calendarIsVulnerableToJulianBug = true;\n}\n\nclass GregoryHelper extends GregorianBaseHelper {\n  constructor() {\n    super('gregory', [\n      { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } },\n      { name: 'bce', reverseOf: 'ce' }\n    ]);\n  }\n  override reviseIntlEra<T extends Partial<EraAndEraYear>>(calendarDate: T /*, isoDate: IsoDate*/): T {\n    let { era, eraYear } = calendarDate;\n    // Firefox 96 introduced a bug where the `'short'` format of the era\n    // option mistakenly returns the one-letter (narrow) format instead. The\n    // code below handles either the correct or Firefox-buggy format. See\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1752253\n    if (era === 'bc' || era === 'b') era = 'bce';\n    if (era === 'ad' || era === 'a') era = 'ce';\n    return { era, eraYear } as T;\n  }\n}\n\n// NOTE: Only the 5 modern eras (Meiji and later) are included. For dates\n// before Meiji 1, the `ce` and `bce` eras are used. Challenges with pre-Meiji\n// eras include:\n// - Start/end dates of older eras are not precisely defined, which is\n//   challenging given Temporal's need for precision\n// - Some era dates and/or names are disputed by historians\n// - As historical research proceeds, new eras are discovered and existing era\n//   dates are modified, leading to considerable churn which is not good for\n//   Temporal use.\n//  - The earliest era (in 645 CE) may not end up being the earliest depending\n//    on future historical scholarship\n//  - Before Meiji, Japan used a lunar (or lunisolar?) calendar but AFAIK\n//    that's not reflected in the ICU implementation.\n//\n// For more discussion: https://github.com/tc39/proposal-temporal/issues/526.\n//\n// Here's a full list of CLDR/ICU eras:\n// https://github.com/unicode-org/icu/blob/master/icu4c/source/data/locales/root.txt#L1582-L1818\n// https://github.com/unicode-org/cldr/blob/master/common/supplemental/supplementalData.xml#L4310-L4546\n//\n// NOTE: Japan started using the Gregorian calendar in 6 Meiji, replacing a\n// lunisolar calendar. So the day before January 1 of 6 Meiji (1873) was not\n// December 31, but December 2, of 5 Meiji (1872). The existing Ecma-402\n// Japanese calendar doesn't seem to take this into account, so neither do we:\n// > args = ['en-ca-u-ca-japanese', { era: 'short' }]\n// > new Date('1873-01-01T12:00').toLocaleString(...args)\n// '1 1, 6 Meiji, 12:00:00 PM'\n// > new Date('1872-12-31T12:00').toLocaleString(...args)\n// '12 31, 5 Meiji, 12:00:00 PM'\nclass JapaneseHelper extends GregorianBaseHelper {\n  constructor() {\n    super('japanese', [\n      // The Japanese calendar `year` is just the ISO year, because (unlike other\n      // ICU calendars) there's no obvious \"default era\", we use the ISO year.\n      { name: 'reiwa', isoEpoch: { year: 2019, month: 5, day: 1 }, anchorEpoch: { year: 2019, month: 5, day: 1 } },\n      { name: 'heisei', isoEpoch: { year: 1989, month: 1, day: 8 }, anchorEpoch: { year: 1989, month: 1, day: 8 } },\n      { name: 'showa', isoEpoch: { year: 1926, month: 12, day: 25 }, anchorEpoch: { year: 1926, month: 12, day: 25 } },\n      { name: 'taisho', isoEpoch: { year: 1912, month: 7, day: 30 }, anchorEpoch: { year: 1912, month: 7, day: 30 } },\n      { name: 'meiji', isoEpoch: { year: 1868, month: 9, day: 8 }, anchorEpoch: { year: 1868, month: 9, day: 8 } },\n      { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } },\n      { name: 'bce', reverseOf: 'ce' }\n    ]);\n  }\n  override calendarIsVulnerableToJulianBug = true;\n\n  // The last 3 Japanese eras confusingly return only one character in the\n  // default \"short\" era, so need to use the long format.\n  override eraLength = 'long' as const;\n\n  override erasBeginMidYear = true;\n\n  override reviseIntlEra<T extends Partial<EraAndEraYear>>(calendarDate: T, isoDate: IsoYMD): T {\n    const { era, eraYear } = calendarDate;\n    const { year: isoYear } = isoDate;\n    if (this.eras.find((e) => e.name === era)) return { era, eraYear } as T;\n    return (isoYear < 1 ? { era: 'bce', eraYear: 1 - isoYear } : { era: 'ce', eraYear: isoYear }) as T;\n  }\n}\n\ninterface ChineseMonthInfo {\n  [key: string]: { monthIndex: number; daysInMonth: number };\n}\ninterface ChineseDraftMonthInfo {\n  [key: string]: { monthIndex: number; daysInMonth?: number };\n}\n\nabstract class ChineseBaseHelper extends HelperBase {\n  abstract override id: BuiltinCalendarId;\n  calendarType = 'lunisolar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly, cache: OneObjectCache) {\n    const months = this.getMonthList(calendarDate.year, cache);\n    return ObjectEntries(months).length === 13;\n  }\n  monthsInYear(calendarDate: CalendarYearOnly, cache: OneObjectCache) {\n    return this.inLeapYear(calendarDate, cache) ? 13 : 12;\n  }\n  minimumMonthLength(/* calendarDate */) {\n    return 29;\n  }\n  maximumMonthLength(/* calendarDate */) {\n    return 30;\n  }\n  getMonthList(calendarYear: number, cache: OneObjectCache): ChineseMonthInfo {\n    if (calendarYear === undefined) {\n      throw new TypeError('Missing year');\n    }\n    const key = JSON.stringify({ func: 'getMonthList', calendarYear, id: this.id });\n    const cached = cache.get(key);\n    if (cached) return cached;\n    const dateTimeFormat = this.getFormatter();\n    const getCalendarDate = (isoYear: number, daysPastFeb1: number) => {\n      const isoStringFeb1 = toUtcIsoDateString({ isoYear, isoMonth: 2, isoDay: 1 });\n      const legacyDate = new Date(isoStringFeb1);\n      // Now add the requested number of days, which may wrap to the next month.\n      legacyDate.setUTCDate(daysPastFeb1 + 1);\n      const newYearGuess = dateTimeFormat.formatToParts(legacyDate);\n      const calendarMonthString = (newYearGuess.find((tv) => tv.type === 'month') as Intl.DateTimeFormatPart).value;\n      const calendarDay = +(newYearGuess.find((tv) => tv.type === 'day') as Intl.DateTimeFormatPart).value;\n      let calendarYearToVerify: globalThis.Intl.DateTimeFormatPart | number | undefined = newYearGuess.find(\n        (tv) => (tv.type as string) === 'relatedYear'\n      );\n      if (calendarYearToVerify !== undefined) {\n        calendarYearToVerify = +calendarYearToVerify.value;\n      } else {\n        // Node 12 has outdated ICU data that lacks the `relatedYear` field in the\n        // output of Intl.DateTimeFormat.formatToParts.\n        throw new RangeError(\n          `Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`\n        );\n      }\n      return { calendarMonthString, calendarDay, calendarYearToVerify };\n    };\n\n    // First, find a date close to Chinese New Year. Feb 17 will either be in\n    // the first month or near the end of the last month of the previous year.\n    let isoDaysDelta = 17;\n    let { calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta);\n\n    // If we didn't guess the first month correctly, add (almost in some months)\n    // a lunar month\n    if (calendarMonthString !== '1') {\n      isoDaysDelta += 29;\n      ({ calendarMonthString, calendarDay } = getCalendarDate(calendarYear, isoDaysDelta));\n    }\n\n    // Now back up to near the start of the first month, but not too near that\n    // off-by-one issues matter.\n    isoDaysDelta -= calendarDay - 5;\n    const result = {} as ChineseDraftMonthInfo;\n    let monthIndex = 1;\n    let oldCalendarDay: number | undefined;\n    let oldMonthString: string | undefined;\n    let done = false;\n    do {\n      ({ calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta));\n      if (oldCalendarDay) {\n        result[oldMonthString as string].daysInMonth = oldCalendarDay + 30 - calendarDay;\n      }\n      if (calendarYearToVerify !== calendarYear) {\n        done = true;\n      } else {\n        result[calendarMonthString] = { monthIndex: monthIndex++ };\n        // Move to the next month. Because months are sometimes 29 days, the day of the\n        // calendar month will move forward slowly but not enough to flip over to a new\n        // month before the loop ends at 12-13 months.\n        isoDaysDelta += 30;\n      }\n      oldCalendarDay = calendarDay;\n      oldMonthString = calendarMonthString;\n    } while (!done);\n    result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay;\n\n    cache.set(key, result);\n    return result as ChineseMonthInfo;\n  }\n  estimateIsoDate(calendarDate: CalendarYMD) {\n    const { year, month } = calendarDate;\n    return { year, month: month >= 12 ? 12 : month + 1, day: 1 };\n  }\n  override adjustCalendarDate(\n    calendarDate: Partial<FullCalendarDate>,\n    cache: OneObjectCache,\n    overflow: Overflow = 'constrain',\n    fromLegacyDate = false\n  ): FullCalendarDate {\n    let { year, month, monthExtra, day, monthCode, eraYear } = calendarDate;\n    if (fromLegacyDate) {\n      // Legacy Date output returns a string that's an integer with an optional\n      // \"bis\" suffix used only by the Chinese/Dangi calendar to indicate a leap\n      // month. Below we'll normalize the output.\n      year = eraYear;\n      if (monthExtra && monthExtra !== 'bis') throw new RangeError(`Unexpected leap month suffix: ${monthExtra}`);\n      const monthCode = buildMonthCode(month as number, monthExtra !== undefined);\n      const monthString = `${month}${monthExtra || ''}`;\n      const months = this.getMonthList(year as number, cache);\n      const monthInfo = months[monthString];\n      if (monthInfo === undefined) throw new RangeError(`Unmatched month ${monthString} in Chinese year ${year}`);\n      month = monthInfo.monthIndex;\n      return { year: year as number, month, day: day as number, era: undefined, eraYear, monthCode };\n    } else {\n      // When called without input coming from legacy Date output,\n      // simply ensure that all fields are present.\n      this.validateCalendarDate(calendarDate);\n      if (year === undefined) year = eraYear;\n      if (eraYear === undefined) eraYear = year;\n      if (month === undefined) {\n        ES.assertExists(monthCode);\n        const months = this.getMonthList(year as number, cache);\n        let numberPart = monthCode.replace('L', 'bis').slice(1);\n        if (numberPart[0] === '0') numberPart = numberPart.slice(1);\n        let monthInfo = months[numberPart];\n        month = monthInfo && monthInfo.monthIndex;\n\n        // If this leap month isn't present in this year, constrain to the same\n        // day of the previous month.\n        if (month === undefined && monthCode.endsWith('L') && monthCode != 'M13L' && overflow === 'constrain') {\n          let withoutML = monthCode.slice(1, -1);\n          if (withoutML[0] === '0') withoutML = withoutML.slice(1);\n          monthInfo = months[withoutML];\n          if (monthInfo) {\n            month = monthInfo.monthIndex;\n            monthCode = buildMonthCode(withoutML);\n          }\n        }\n        if (month === undefined) {\n          throw new RangeError(`Unmatched month ${monthCode} in Chinese year ${year}`);\n        }\n      } else if (monthCode === undefined) {\n        const months = this.getMonthList(year as number, cache);\n        const monthEntries = ObjectEntries(months);\n        const largestMonth = monthEntries.length;\n        if (overflow === 'reject') {\n          ES.RejectToRange(month, 1, largestMonth);\n          ES.RejectToRange(day as number, 1, this.maximumMonthLength());\n        } else {\n          month = ES.ConstrainToRange(month, 1, largestMonth);\n          day = ES.ConstrainToRange(day, 1, this.maximumMonthLength());\n        }\n        const matchingMonthEntry = monthEntries.find(([, v]) => v.monthIndex === month);\n        if (matchingMonthEntry === undefined) {\n          throw new RangeError(`Invalid month ${month} in Chinese year ${year}`);\n        }\n        monthCode = buildMonthCode(\n          matchingMonthEntry[0].replace('bis', ''),\n          matchingMonthEntry[0].indexOf('bis') !== -1\n        );\n      } else {\n        // Both month and monthCode are present. Make sure they don't conflict.\n        const months = this.getMonthList(year as number, cache);\n        let numberPart = monthCode.replace('L', 'bis').slice(1);\n        if (numberPart[0] === '0') numberPart = numberPart.slice(1);\n        const monthInfo = months[numberPart];\n        if (!monthInfo) throw new RangeError(`Unmatched monthCode ${monthCode} in Chinese year ${year}`);\n        if (month !== monthInfo.monthIndex) {\n          throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Chinese year ${year}`);\n        }\n      }\n      return {\n        ...calendarDate,\n        year: year as number,\n        eraYear,\n        month,\n        monthCode: monthCode,\n        day: day as number\n      };\n    }\n  }\n  // All built-in calendars except Chinese/Dangi and Hebrew use an era\n  override hasEra = false;\n}\n\nclass ChineseHelper extends ChineseBaseHelper {\n  id = 'chinese' as const;\n}\n\n// Dangi (Korean) calendar has same implementation as Chinese\nclass DangiHelper extends ChineseBaseHelper {\n  id = 'dangi' as const;\n}\n\n/**\n * Common implementation of all non-ISO calendars.\n * Per-calendar id and logic live in `id` and `helper` properties attached later.\n * This split allowed an easy separation between code that was similar between\n * ISO and non-ISO implementations vs. code that was very different.\n */\nclass NonIsoCalendar implements CalendarImpl {\n  constructor(private readonly helper: HelperBase) {}\n  dateFromFields(\n    fieldsParam: Params['dateFromFields'][0],\n    options: NonNullable<Params['dateFromFields'][1]>,\n    calendarSlotValue: string\n  ): Temporal.PlainDate {\n    const cache = new OneObjectCache();\n    const fieldNames = this.fields(['day', 'month', 'monthCode', 'year']) as AnyTemporalKey[];\n    const fields = ES.PrepareTemporalFields(fieldsParam, fieldNames, []);\n    const overflow = ES.ToTemporalOverflow(options);\n    const { year, month, day } = this.helper.calendarToIsoDate(fields, overflow, cache);\n    const result = ES.CreateTemporalDate(year, month, day, calendarSlotValue);\n    cache.setObject(result);\n    return result;\n  }\n  yearMonthFromFields(\n    fieldsParam: Params['yearMonthFromFields'][0],\n    options: NonNullable<Params['yearMonthFromFields'][1]>,\n    calendarSlotValue: CalendarSlot\n  ): Temporal.PlainYearMonth {\n    const cache = new OneObjectCache();\n    const fieldNames = this.fields(['month', 'monthCode', 'year']) as AnyTemporalKey[];\n    const fields = ES.PrepareTemporalFields(fieldsParam, fieldNames, []);\n    const overflow = ES.ToTemporalOverflow(options);\n    const { year, month, day } = this.helper.calendarToIsoDate({ ...fields, day: 1 }, overflow, cache);\n    const result = ES.CreateTemporalYearMonth(year, month, calendarSlotValue, /* referenceISODay = */ day);\n    cache.setObject(result);\n    return result;\n  }\n  monthDayFromFields(\n    fieldsParam: Params['monthDayFromFields'][0],\n    options: NonNullable<Params['monthDayFromFields'][1]>,\n    calendarSlotValue: CalendarSlot\n  ): Temporal.PlainMonthDay {\n    const cache = new OneObjectCache();\n    // For lunisolar calendars, either `monthCode` or `year` must be provided\n    // because `month` is ambiguous without a year or a code.\n    const fieldNames = this.fields(['day', 'month', 'monthCode', 'year']) as AnyTemporalKey[];\n    const fields = ES.PrepareTemporalFields(fieldsParam, fieldNames, []);\n    const overflow = ES.ToTemporalOverflow(options);\n    const { year, month, day } = this.helper.monthDayFromFields(fields, overflow, cache);\n    // `year` is a reference year where this month/day exists in this calendar\n    const result = ES.CreateTemporalMonthDay(month, day, calendarSlotValue, /* referenceISOYear = */ year);\n    cache.setObject(result);\n    return result;\n  }\n  fields(fieldsParam: string[]): string[] {\n    let fields = fieldsParam;\n    if (ArrayIncludes.call(fields, 'year')) fields = [...fields, 'era', 'eraYear'];\n    return fields;\n  }\n  fieldKeysToIgnore(\n    keys: Exclude<keyof Temporal.PlainDateLike, 'calendar'>[]\n  ): Exclude<keyof Temporal.PlainDateLike, 'calendar'>[] {\n    const result = new OriginalSet();\n    for (let ix = 0; ix < keys.length; ix++) {\n      const key = keys[ix];\n      ES.Call(SetPrototypeAdd, result, [key]);\n      switch (key) {\n        case 'era':\n          ES.Call(SetPrototypeAdd, result, ['eraYear']);\n          ES.Call(SetPrototypeAdd, result, ['year']);\n          break;\n        case 'eraYear':\n          ES.Call(SetPrototypeAdd, result, ['era']);\n          ES.Call(SetPrototypeAdd, result, ['year']);\n          break;\n        case 'year':\n          ES.Call(SetPrototypeAdd, result, ['era']);\n          ES.Call(SetPrototypeAdd, result, ['eraYear']);\n          break;\n        case 'month':\n          ES.Call(SetPrototypeAdd, result, ['monthCode']);\n          // See https://github.com/tc39/proposal-temporal/issues/1784\n          if (this.helper.erasBeginMidYear) {\n            ES.Call(SetPrototypeAdd, result, ['era']);\n            ES.Call(SetPrototypeAdd, result, ['eraYear']);\n          }\n          break;\n        case 'monthCode':\n          ES.Call(SetPrototypeAdd, result, ['month']);\n          if (this.helper.erasBeginMidYear) {\n            ES.Call(SetPrototypeAdd, result, ['era']);\n            ES.Call(SetPrototypeAdd, result, ['eraYear']);\n          }\n          break;\n        case 'day':\n          if (this.helper.erasBeginMidYear) {\n            ES.Call(SetPrototypeAdd, result, ['era']);\n            ES.Call(SetPrototypeAdd, result, ['eraYear']);\n          }\n          break;\n      }\n    }\n    return [...ES.Call(SetPrototypeValues, result, [])];\n  }\n  dateAdd(\n    date: Temporal.PlainDate,\n    years: number,\n    months: number,\n    weeks: number,\n    days: number,\n    overflow: Overflow,\n    calendarSlotValue: CalendarSlot\n  ): Temporal.PlainDate {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    const added = this.helper.addCalendar(calendarDate, { years, months, weeks, days }, overflow, cache);\n    const isoAdded = this.helper.calendarToIsoDate(added, 'constrain', cache);\n    const { year, month, day } = isoAdded;\n    const newTemporalObject = ES.CreateTemporalDate(year, month, day, calendarSlotValue);\n    // The new object's cache starts with the cache of the old object\n    const newCache = new OneObjectCache(cache);\n    newCache.setObject(newTemporalObject);\n    return newTemporalObject;\n  }\n  dateUntil(one: Temporal.PlainDate, two: Temporal.PlainDate, largestUnit: Temporal.DateUnit) {\n    const cacheOne = OneObjectCache.getCacheForObject(one);\n    const cacheTwo = OneObjectCache.getCacheForObject(two);\n    const calendarOne = this.helper.temporalToCalendarDate(one, cacheOne);\n    const calendarTwo = this.helper.temporalToCalendarDate(two, cacheTwo);\n    const result = this.helper.untilCalendar(calendarOne, calendarTwo, largestUnit, cacheOne);\n    return result;\n  }\n  year(date: Temporal.PlainDate | Temporal.PlainYearMonth): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.year;\n  }\n  month(date: Temporal.PlainDate | Temporal.PlainYearMonth | Temporal.PlainMonthDay): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.month;\n  }\n  day(date: Temporal.PlainDate | Temporal.PlainMonthDay): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.day;\n  }\n  era(date: Temporal.PlainDate | Temporal.PlainYearMonth): string | undefined {\n    if (!this.helper.hasEra) return undefined;\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.era;\n  }\n  eraYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): number | undefined {\n    if (!this.helper.hasEra) return undefined;\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.eraYear;\n  }\n  monthCode(date: Temporal.PlainDate | Temporal.PlainYearMonth | Temporal.PlainMonthDay): string {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.monthCode;\n  }\n  dayOfWeek(date: Temporal.PlainDate): number {\n    return impl['iso8601'].dayOfWeek(date);\n  }\n  dayOfYear(date: Temporal.PlainDate): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.isoToCalendarDate(date, cache);\n    const startOfYear = this.helper.startOfCalendarYear(calendarDate);\n    const diffDays = this.helper.calendarDaysUntil(startOfYear, calendarDate, cache);\n    return diffDays + 1;\n  }\n  weekOfYear(date: Temporal.PlainDate): number {\n    return impl['iso8601'].weekOfYear(date);\n  }\n  yearOfWeek(date: Temporal.PlainDate): number {\n    return impl['iso8601'].yearOfWeek(date);\n  }\n  daysInWeek(date: Temporal.PlainDate): number {\n    return impl['iso8601'].daysInWeek(date);\n  }\n  daysInMonth(date: Temporal.PlainDate | Temporal.PlainYearMonth): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n\n    // Easy case: if the helper knows the length without any heavy calculation.\n    const max = this.helper.maximumMonthLength(calendarDate);\n    const min = this.helper.minimumMonthLength(calendarDate);\n    if (max === min) return max;\n\n    // The harder case is where months vary every year, e.g. islamic calendars.\n    // Find the answer by calculating the difference in days between the first\n    // day of the current month and the first day of the next month.\n    const startOfMonthCalendar = this.helper.startOfCalendarMonth(calendarDate);\n    const startOfNextMonthCalendar = this.helper.addMonthsCalendar(startOfMonthCalendar, 1, 'constrain', cache);\n    const result = this.helper.calendarDaysUntil(startOfMonthCalendar, startOfNextMonthCalendar, cache);\n    return result;\n  }\n  daysInYear(dateParam: Temporal.PlainDate | Temporal.PlainYearMonth): number {\n    let date = dateParam;\n    if (!HasSlot(date, ISO_YEAR)) date = ES.ToTemporalDate(date);\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    const startOfYearCalendar = this.helper.startOfCalendarYear(calendarDate);\n    const startOfNextYearCalendar = this.helper.addCalendar(startOfYearCalendar, { years: 1 }, 'constrain', cache);\n    const result = this.helper.calendarDaysUntil(startOfYearCalendar, startOfNextYearCalendar, cache);\n    return result;\n  }\n  monthsInYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    const result = this.helper.monthsInYear(calendarDate, cache);\n    return result;\n  }\n  inLeapYear(dateParam: Temporal.PlainDate | Temporal.PlainYearMonth): boolean {\n    let date = dateParam;\n    if (!HasSlot(date, ISO_YEAR)) date = ES.ToTemporalDate(date);\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    const result = this.helper.inLeapYear(calendarDate, cache);\n    return result;\n  }\n}\n\nfor (const Helper of [\n  HebrewHelper,\n  PersianHelper,\n  EthiopicHelper,\n  EthioaaHelper,\n  CopticHelper,\n  ChineseHelper,\n  DangiHelper,\n  RocHelper,\n  IndianHelper,\n  BuddhistHelper,\n  GregoryHelper,\n  JapaneseHelper,\n  IslamicHelper,\n  IslamicUmalquraHelper,\n  IslamicTblaHelper,\n  IslamicCivilHelper,\n  IslamicRgsaHelper,\n  IslamicCcHelper\n]) {\n  const helper = new Helper();\n  // Construct a new NonIsoCalendar instance with the given Helper implementation that contains\n  // per-calendar logic.\n  impl[helper.id] = new NonIsoCalendar(helper);\n}\n", "import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport {\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  CALENDAR,\n  EPOCHNANOSECONDS,\n  GetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { PlainDateParams as Params, PlainDateReturn as Return } from './internaltypes';\n\nexport class PlainDate implements Temporal.PlainDate {\n  constructor(\n    isoYearParam: Params['constructor'][0],\n    isoMonthParam: Params['constructor'][1],\n    isoDayParam: Params['constructor'][2],\n    calendarParam: Params['constructor'][3] = 'iso8601'\n  ) {\n    const isoYear = ES.ToIntegerWithTruncation(isoYearParam);\n    const isoMonth = ES.ToIntegerWithTruncation(isoMonthParam);\n    const isoDay = ES.ToIntegerWithTruncation(isoDayParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n\n    ES.CreateTemporalDateSlots(this, isoYear, isoMonth, isoDay, calendar);\n  }\n  get calendarId(): Return['calendarId'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n  }\n  get era(): Return['era'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n  }\n  get eraYear(): Return['eraYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n  }\n  get year(): Return['year'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n  }\n  get month(): Return['month'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n  }\n  get monthCode(): Return['monthCode'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n  }\n  get day(): Return['day'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n  }\n  get dayOfWeek(): Return['dayOfWeek'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), this);\n  }\n  get dayOfYear(): Return['dayOfYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), this);\n  }\n  get weekOfYear(): Return['weekOfYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), this);\n  }\n  get yearOfWeek(): Return['weekOfYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYearOfWeek(GetSlot(this, CALENDAR), this);\n  }\n  get daysInWeek(): Return['daysInWeek'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), this);\n  }\n  get daysInMonth(): Return['daysInMonth'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n  }\n  get daysInYear(): Return['daysInYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n  }\n  get monthsInYear(): Return['monthsInYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n  }\n  get inLeapYear(): Return['inLeapYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n  }\n  with(temporalDateLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalDateLike)) {\n      throw new TypeError('invalid argument');\n    }\n    ES.RejectTemporalLikeObject(temporalDateLike);\n    const options = ES.GetOptionsObject(optionsParam);\n\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['day', 'month', 'monthCode', 'year'] as const);\n    let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    const partialDate = ES.PrepareTemporalFields(temporalDateLike, fieldNames, 'partial');\n    fields = ES.CalendarMergeFields(calendar, fields, partialDate);\n    fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n\n    return ES.CalendarDateFromFields(calendar, fields, options);\n  }\n  withCalendar(calendarParam: Params['withCalendar'][0]): Return['withCalendar'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    return new PlainDate(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), calendar);\n  }\n  add(temporalDurationLike: Params['add'][0], optionsParam: Params['add'][1] = undefined): Return['add'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n\n    const duration = ES.ToTemporalDuration(temporalDurationLike);\n    const options = ES.GetOptionsObject(optionsParam);\n\n    return ES.CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options);\n  }\n  subtract(\n    temporalDurationLike: Params['subtract'][0],\n    optionsParam: Params['subtract'][1] = undefined\n  ): Return['subtract'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n\n    const duration = ES.CreateNegatedTemporalDuration(ES.ToTemporalDuration(temporalDurationLike));\n    const options = ES.GetOptionsObject(optionsParam);\n\n    return ES.CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainDate('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainDate('since', this, other, options);\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalDate(otherParam);\n    for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) {\n      const val1 = GetSlot(this, slot);\n      const val2 = GetSlot(other, slot);\n      if (val1 !== val2) return false;\n    }\n    return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const showCalendar = ES.ToCalendarNameOption(options);\n    return ES.TemporalDateToString(this, showCalendar);\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateToString(this);\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.PlainDate');\n  }\n  toPlainDateTime(temporalTimeParam: Params['toPlainDateTime'][0] = undefined): Return['toPlainDateTime'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const year = GetSlot(this, ISO_YEAR);\n    const month = GetSlot(this, ISO_MONTH);\n    const day = GetSlot(this, ISO_DAY);\n    const calendar = GetSlot(this, CALENDAR);\n\n    if (temporalTimeParam === undefined) return ES.CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar);\n\n    const temporalTime = ES.ToTemporalTime(temporalTimeParam);\n    const hour = GetSlot(temporalTime, ISO_HOUR);\n    const minute = GetSlot(temporalTime, ISO_MINUTE);\n    const second = GetSlot(temporalTime, ISO_SECOND);\n    const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n    const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n    const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  toZonedDateTime(item: Params['toZonedDateTime'][0]): Return['toZonedDateTime'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n\n    type TimeZoneAndPlainTimeProps = Exclude<typeof item, string | Temporal.TimeZoneProtocol>;\n    let timeZone: Temporal.TimeZoneLike, temporalTime: TimeZoneAndPlainTimeProps['plainTime'];\n    if (ES.IsObject(item)) {\n      if (ES.IsTemporalTimeZone(item)) {\n        timeZone = item;\n      } else {\n        const timeZoneLike = (item as TimeZoneAndPlainTimeProps).timeZone;\n        if (timeZoneLike === undefined) {\n          ES.uncheckedAssertNarrowedType<Temporal.TimeZoneProtocol>(\n            item,\n            \"if no timeZone property, then assume it's a custom time zone object\"\n          );\n          timeZone = ES.ToTemporalTimeZoneSlotValue(item);\n        } else {\n          timeZone = ES.ToTemporalTimeZoneSlotValue(timeZoneLike);\n          ES.uncheckedAssertNarrowedType<TimeZoneAndPlainTimeProps>(\n            item,\n            \"it's a property bag with a timeZone and optional plainTime\"\n          );\n          temporalTime = item.plainTime;\n        }\n      }\n    } else {\n      timeZone = ES.ToTemporalTimeZoneSlotValue(item);\n    }\n\n    const year = GetSlot(this, ISO_YEAR);\n    const month = GetSlot(this, ISO_MONTH);\n    const day = GetSlot(this, ISO_DAY);\n    const calendar = GetSlot(this, CALENDAR);\n\n    let hour = 0,\n      minute = 0,\n      second = 0,\n      millisecond = 0,\n      microsecond = 0,\n      nanosecond = 0;\n    if (temporalTime !== undefined) {\n      temporalTime = ES.ToTemporalTime(temporalTime);\n      ES.uncheckedAssertNarrowedType<Temporal.PlainTime>(\n        temporalTime,\n        'ToTemporalTime above always returns a PlainTime'\n      );\n      hour = GetSlot(temporalTime, ISO_HOUR);\n      minute = GetSlot(temporalTime, ISO_MINUTE);\n      second = GetSlot(temporalTime, ISO_SECOND);\n      millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n      microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n      nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n    }\n\n    const dt = ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n    const instant = ES.GetInstantFor(timeZone, dt, 'compatible');\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  toPlainYearMonth(): Return['toPlainYearMonth'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarYearMonthFromFields(calendar, fields);\n  }\n  toPlainMonthDay(): Return['toPlainMonthDay'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarMonthDayFromFields(calendar, fields);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return {\n      calendar: GetSlot(this, CALENDAR),\n      isoDay: GetSlot(this, ISO_DAY),\n      isoMonth: GetSlot(this, ISO_MONTH),\n      isoYear: GetSlot(this, ISO_YEAR)\n    };\n  }\n  getCalendar(): Return['getCalendar'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarObject(GetSlot(this, CALENDAR));\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    if (ES.IsTemporalDate(item)) {\n      ES.ToTemporalOverflow(options); // validate and ignore\n      return ES.CreateTemporalDate(\n        GetSlot(item, ISO_YEAR),\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, ISO_DAY),\n        GetSlot(item, CALENDAR)\n      );\n    }\n    return ES.ToTemporalDate(item, options);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalDate(oneParam);\n    const two = ES.ToTemporalDate(twoParam);\n    return ES.CompareISODate(\n      GetSlot(one, ISO_YEAR),\n      GetSlot(one, ISO_MONTH),\n      GetSlot(one, ISO_DAY),\n      GetSlot(two, ISO_YEAR),\n      GetSlot(two, ISO_MONTH),\n      GetSlot(two, ISO_DAY)\n    );\n  }\n  [Symbol.toStringTag]!: 'Temporal.PlainDate';\n}\n\nMakeIntrinsicClass(PlainDate, 'Temporal.PlainDate');\n", "import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\n\nimport {\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  CALENDAR,\n  EPOCHNANOSECONDS,\n  GetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { PlainDateTimeParams as Params, PlainDateTimeReturn as Return } from './internaltypes';\n\nexport class PlainDateTime implements Temporal.PlainDateTime {\n  constructor(\n    isoYearParam: Params['constructor'][0],\n    isoMonthParam: Params['constructor'][1],\n    isoDayParam: Params['constructor'][2],\n    hourParam: Params['constructor'][3] = 0,\n    minuteParam: Params['constructor'][4] = 0,\n    secondParam: Params['constructor'][5] = 0,\n    millisecondParam: Params['constructor'][6] = 0,\n    microsecondParam: Params['constructor'][7] = 0,\n    nanosecondParam: Params['constructor'][8] = 0,\n    calendarParam: Params['constructor'][9] = 'iso8601'\n  ) {\n    const isoYear = ES.ToIntegerWithTruncation(isoYearParam);\n    const isoMonth = ES.ToIntegerWithTruncation(isoMonthParam);\n    const isoDay = ES.ToIntegerWithTruncation(isoDayParam);\n    const hour = hourParam === undefined ? 0 : ES.ToIntegerWithTruncation(hourParam);\n    const minute = minuteParam === undefined ? 0 : ES.ToIntegerWithTruncation(minuteParam);\n    const second = secondParam === undefined ? 0 : ES.ToIntegerWithTruncation(secondParam);\n    const millisecond = millisecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(millisecondParam);\n    const microsecond = microsecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(microsecondParam);\n    const nanosecond = nanosecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(nanosecondParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n\n    ES.CreateTemporalDateTimeSlots(\n      this,\n      isoYear,\n      isoMonth,\n      isoDay,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  get calendarId(): Return['calendarId'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n  }\n  get year(): Return['year'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n  }\n  get month(): Return['month'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n  }\n  get monthCode(): Return['monthCode'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n  }\n  get day(): Return['day'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n  }\n  get hour(): Return['hour'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_HOUR);\n  }\n  get minute(): Return['minute'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MINUTE);\n  }\n  get second(): Return['second'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_SECOND);\n  }\n  get millisecond(): Return['millisecond'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MILLISECOND);\n  }\n  get microsecond(): Return['microsecond'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MICROSECOND);\n  }\n  get nanosecond(): Return['nanosecond'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_NANOSECOND);\n  }\n  get era(): Return['era'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n  }\n  get eraYear(): Return['eraYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n  }\n  get dayOfWeek(): Return['dayOfWeek'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), this);\n  }\n  get dayOfYear(): Return['dayOfYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), this);\n  }\n  get weekOfYear(): Return['weekOfYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), this);\n  }\n  get yearOfWeek(): Return['yearOfWeek'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYearOfWeek(GetSlot(this, CALENDAR), this);\n  }\n  get daysInWeek(): Return['daysInWeek'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), this);\n  }\n  get daysInYear(): Return['daysInYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n  }\n  get daysInMonth(): Return['daysInMonth'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n  }\n  get monthsInYear(): Return['monthsInYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n  }\n  get inLeapYear(): Return['inLeapYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n  }\n  with(temporalDateTimeLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalDateTimeLike)) {\n      throw new TypeError('invalid argument');\n    }\n    ES.RejectTemporalLikeObject(temporalDateTimeLike);\n\n    const options = ES.GetOptionsObject(optionsParam);\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, [\n      'day',\n      'hour',\n      'microsecond',\n      'millisecond',\n      'minute',\n      'month',\n      'monthCode',\n      'nanosecond',\n      'second',\n      'year'\n    ] as const);\n    let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    const partialDateTime = ES.PrepareTemporalFields(temporalDateTimeLike, fieldNames, 'partial');\n    fields = ES.CalendarMergeFields(calendar, fields, partialDateTime);\n    fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n    const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } =\n      ES.InterpretTemporalDateTimeFields(calendar, fields, options);\n\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  withPlainTime(temporalTimeParam: Params['withPlainTime'][0] = undefined): Return['withPlainTime'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const year = GetSlot(this, ISO_YEAR);\n    const month = GetSlot(this, ISO_MONTH);\n    const day = GetSlot(this, ISO_DAY);\n    const calendar = GetSlot(this, CALENDAR);\n\n    if (temporalTimeParam === undefined) return ES.CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar);\n\n    const temporalTime = ES.ToTemporalTime(temporalTimeParam);\n    const hour = GetSlot(temporalTime, ISO_HOUR);\n    const minute = GetSlot(temporalTime, ISO_MINUTE);\n    const second = GetSlot(temporalTime, ISO_SECOND);\n    const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n    const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n    const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  withPlainDate(temporalDateParam: Params['withPlainDate'][0]): Return['withPlainDate'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n\n    const temporalDate = ES.ToTemporalDate(temporalDateParam);\n    const year = GetSlot(temporalDate, ISO_YEAR);\n    const month = GetSlot(temporalDate, ISO_MONTH);\n    const day = GetSlot(temporalDate, ISO_DAY);\n    let calendar = GetSlot(temporalDate, CALENDAR);\n\n    const hour = GetSlot(this, ISO_HOUR);\n    const minute = GetSlot(this, ISO_MINUTE);\n    const second = GetSlot(this, ISO_SECOND);\n    const millisecond = GetSlot(this, ISO_MILLISECOND);\n    const microsecond = GetSlot(this, ISO_MICROSECOND);\n    const nanosecond = GetSlot(this, ISO_NANOSECOND);\n\n    calendar = ES.ConsolidateCalendars(GetSlot(this, CALENDAR), calendar);\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  withCalendar(calendarParam: Params['withCalendar'][0]): Return['withCalendar'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    return new PlainDateTime(\n      GetSlot(this, ISO_YEAR),\n      GetSlot(this, ISO_MONTH),\n      GetSlot(this, ISO_DAY),\n      GetSlot(this, ISO_HOUR),\n      GetSlot(this, ISO_MINUTE),\n      GetSlot(this, ISO_SECOND),\n      GetSlot(this, ISO_MILLISECOND),\n      GetSlot(this, ISO_MICROSECOND),\n      GetSlot(this, ISO_NANOSECOND),\n      calendar\n    );\n  }\n  add(temporalDurationLike: Params['add'][0], options: Params['add'][1] = undefined): Return['add'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainDateTime('add', this, temporalDurationLike, options);\n  }\n  subtract(\n    temporalDurationLike: Params['subtract'][0],\n    options: Params['subtract'][1] = undefined\n  ): Return['subtract'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainDateTime('subtract', this, temporalDurationLike, options);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainDateTime('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainDateTime('since', this, other, options);\n  }\n  round(roundToParam: Params['round'][0]): Return['round'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    if (roundToParam === undefined) throw new TypeError('options parameter is required');\n    const roundTo =\n      typeof roundToParam === 'string'\n        ? (ES.CreateOnePropObject('smallestUnit', roundToParam) as Exclude<typeof roundToParam, string>)\n        : ES.GetOptionsObject(roundToParam);\n    const roundingIncrement = ES.ToTemporalRoundingIncrement(roundTo);\n    const roundingMode = ES.ToTemporalRoundingMode(roundTo, 'halfExpand');\n    const smallestUnit = ES.GetTemporalUnit(roundTo, 'smallestUnit', 'time', ES.REQUIRED, ['day']);\n    const maximumIncrements = {\n      day: 1,\n      hour: 24,\n      minute: 60,\n      second: 60,\n      millisecond: 1000,\n      microsecond: 1000,\n      nanosecond: 1000\n    };\n    const maximum = maximumIncrements[smallestUnit];\n    const inclusive = maximum === 1;\n    ES.ValidateTemporalRoundingIncrement(roundingIncrement, maximum, inclusive);\n\n    let year = GetSlot(this, ISO_YEAR);\n    let month = GetSlot(this, ISO_MONTH);\n    let day = GetSlot(this, ISO_DAY);\n    let hour = GetSlot(this, ISO_HOUR);\n    let minute = GetSlot(this, ISO_MINUTE);\n    let second = GetSlot(this, ISO_SECOND);\n    let millisecond = GetSlot(this, ISO_MILLISECOND);\n    let microsecond = GetSlot(this, ISO_MICROSECOND);\n    let nanosecond = GetSlot(this, ISO_NANOSECOND);\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundISODateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      roundingIncrement,\n      smallestUnit,\n      roundingMode\n    ));\n\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      GetSlot(this, CALENDAR)\n    );\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalDateTime(otherParam);\n    for (const slot of [\n      ISO_YEAR,\n      ISO_MONTH,\n      ISO_DAY,\n      ISO_HOUR,\n      ISO_MINUTE,\n      ISO_SECOND,\n      ISO_MILLISECOND,\n      ISO_MICROSECOND,\n      ISO_NANOSECOND\n    ]) {\n      const val1 = GetSlot(this, slot);\n      const val2 = GetSlot(other, slot);\n      if (val1 !== val2) return false;\n    }\n    return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const showCalendar = ES.ToCalendarNameOption(options);\n    const digits = ES.ToFractionalSecondDigits(options);\n    const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n    const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n    if (smallestUnit === 'hour') throw new RangeError('smallestUnit must be a time unit other than \"hour\"');\n    const { precision, unit, increment } = ES.ToSecondsStringPrecisionRecord(smallestUnit, digits);\n    return ES.TemporalDateTimeToString(this, precision, showCalendar, { unit, increment, roundingMode });\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateTimeToString(this, 'auto');\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.PlainDateTime');\n  }\n\n  toZonedDateTime(\n    temporalTimeZoneLike: Params['toZonedDateTime'][0],\n    optionsParam: Params['toZonedDateTime'][1] = undefined\n  ): Return['toZonedDateTime'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(temporalTimeZoneLike);\n    const options = ES.GetOptionsObject(optionsParam);\n    const disambiguation = ES.ToTemporalDisambiguation(options);\n    const instant = ES.GetInstantFor(timeZone, this, disambiguation);\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR));\n  }\n  toPlainDate(): Return['toPlainDate'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateTimeToDate(this);\n  }\n  toPlainYearMonth(): Return['toPlainYearMonth'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarYearMonthFromFields(calendar, fields);\n  }\n  toPlainMonthDay(): Return['toPlainMonthDay'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarMonthDayFromFields(calendar, fields);\n  }\n  toPlainTime(): Return['toPlainTime'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateTimeToTime(this);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return {\n      calendar: GetSlot(this, CALENDAR),\n      isoDay: GetSlot(this, ISO_DAY),\n      isoHour: GetSlot(this, ISO_HOUR),\n      isoMicrosecond: GetSlot(this, ISO_MICROSECOND),\n      isoMillisecond: GetSlot(this, ISO_MILLISECOND),\n      isoMinute: GetSlot(this, ISO_MINUTE),\n      isoMonth: GetSlot(this, ISO_MONTH),\n      isoNanosecond: GetSlot(this, ISO_NANOSECOND),\n      isoSecond: GetSlot(this, ISO_SECOND),\n      isoYear: GetSlot(this, ISO_YEAR)\n    };\n  }\n  getCalendar(): Return['getCalendar'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarObject(GetSlot(this, CALENDAR));\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    if (ES.IsTemporalDateTime(item)) {\n      ES.ToTemporalOverflow(options); // validate and ignore\n      return ES.CreateTemporalDateTime(\n        GetSlot(item, ISO_YEAR),\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, ISO_DAY),\n        GetSlot(item, ISO_HOUR),\n        GetSlot(item, ISO_MINUTE),\n        GetSlot(item, ISO_SECOND),\n        GetSlot(item, ISO_MILLISECOND),\n        GetSlot(item, ISO_MICROSECOND),\n        GetSlot(item, ISO_NANOSECOND),\n        GetSlot(item, CALENDAR)\n      );\n    }\n    return ES.ToTemporalDateTime(item, options);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalDateTime(oneParam);\n    const two = ES.ToTemporalDateTime(twoParam);\n    for (const slot of [\n      ISO_YEAR,\n      ISO_MONTH,\n      ISO_DAY,\n      ISO_HOUR,\n      ISO_MINUTE,\n      ISO_SECOND,\n      ISO_MILLISECOND,\n      ISO_MICROSECOND,\n      ISO_NANOSECOND\n    ] as const) {\n      const val1 = GetSlot(one, slot);\n      const val2 = GetSlot(two, slot);\n      if (val1 !== val2) return ES.ComparisonResult(val1 - val2);\n    }\n    return 0;\n  }\n  [Symbol.toStringTag]!: 'Temporal.PlainDateTime';\n}\n\nMakeIntrinsicClass(PlainDateTime, 'Temporal.PlainDateTime');\n", "import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport {\n  YEARS,\n  MONTHS,\n  WEEKS,\n  DAYS,\n  HOURS,\n  MINUTES,\n  SECONDS,\n  MILLISECONDS,\n  MICROSECONDS,\n  NANOSECONDS,\n  CreateSlots,\n  GetSlot,\n  SetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport type { DurationParams as Params, DurationReturn as Return } from './internaltypes';\nimport JSBI from 'jsbi';\n\nexport class Duration implements Temporal.Duration {\n  constructor(\n    yearsParam: Params['constructor'][0] = 0,\n    monthsParam: Params['constructor'][1] = 0,\n    weeksParam: Params['constructor'][2] = 0,\n    daysParam: Params['constructor'][3] = 0,\n    hoursParam: Params['constructor'][4] = 0,\n    minutesParam: Params['constructor'][5] = 0,\n    secondsParam: Params['constructor'][6] = 0,\n    millisecondsParam: Params['constructor'][7] = 0,\n    microsecondsParam: Params['constructor'][8] = 0,\n    nanosecondsParam: Params['constructor'][9] = 0\n  ) {\n    const years = yearsParam === undefined ? 0 : ES.ToIntegerIfIntegral(yearsParam);\n    const months = monthsParam === undefined ? 0 : ES.ToIntegerIfIntegral(monthsParam);\n    const weeks = weeksParam === undefined ? 0 : ES.ToIntegerIfIntegral(weeksParam);\n    const days = daysParam === undefined ? 0 : ES.ToIntegerIfIntegral(daysParam);\n    const hours = hoursParam === undefined ? 0 : ES.ToIntegerIfIntegral(hoursParam);\n    const minutes = minutesParam === undefined ? 0 : ES.ToIntegerIfIntegral(minutesParam);\n    const seconds = secondsParam === undefined ? 0 : ES.ToIntegerIfIntegral(secondsParam);\n    const milliseconds = millisecondsParam === undefined ? 0 : ES.ToIntegerIfIntegral(millisecondsParam);\n    const microseconds = microsecondsParam === undefined ? 0 : ES.ToIntegerIfIntegral(microsecondsParam);\n    const nanoseconds = nanosecondsParam === undefined ? 0 : ES.ToIntegerIfIntegral(nanosecondsParam);\n\n    ES.RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n\n    CreateSlots(this);\n    SetSlot(this, YEARS, years);\n    SetSlot(this, MONTHS, months);\n    SetSlot(this, WEEKS, weeks);\n    SetSlot(this, DAYS, days);\n    SetSlot(this, HOURS, hours);\n    SetSlot(this, MINUTES, minutes);\n    SetSlot(this, SECONDS, seconds);\n    SetSlot(this, MILLISECONDS, milliseconds);\n    SetSlot(this, MICROSECONDS, microseconds);\n    SetSlot(this, NANOSECONDS, nanoseconds);\n\n    if (DEBUG) {\n      Object.defineProperty(this, '_repr_', {\n        value: `${this[Symbol.toStringTag]} <${ES.TemporalDurationToString(this)}>`,\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n  get years(): Return['years'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, YEARS);\n  }\n  get months(): Return['months'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, MONTHS);\n  }\n  get weeks(): Return['weeks'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, WEEKS);\n  }\n  get days(): Return['days'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, DAYS);\n  }\n  get hours(): Return['hours'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, HOURS);\n  }\n  get minutes(): Return['minutes'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, MINUTES);\n  }\n  get seconds(): Return['seconds'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, SECONDS);\n  }\n  get milliseconds(): Return['milliseconds'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, MILLISECONDS);\n  }\n  get microseconds(): Return['microseconds'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, MICROSECONDS);\n  }\n  get nanoseconds(): Return['nanoseconds'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, NANOSECONDS);\n  }\n  get sign(): Return['sign'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return ES.DurationSign(\n      GetSlot(this, YEARS),\n      GetSlot(this, MONTHS),\n      GetSlot(this, WEEKS),\n      GetSlot(this, DAYS),\n      GetSlot(this, HOURS),\n      GetSlot(this, MINUTES),\n      GetSlot(this, SECONDS),\n      GetSlot(this, MILLISECONDS),\n      GetSlot(this, MICROSECONDS),\n      GetSlot(this, NANOSECONDS)\n    );\n  }\n  get blank(): Return['blank'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return (\n      ES.DurationSign(\n        GetSlot(this, YEARS),\n        GetSlot(this, MONTHS),\n        GetSlot(this, WEEKS),\n        GetSlot(this, DAYS),\n        GetSlot(this, HOURS),\n        GetSlot(this, MINUTES),\n        GetSlot(this, SECONDS),\n        GetSlot(this, MILLISECONDS),\n        GetSlot(this, MICROSECONDS),\n        GetSlot(this, NANOSECONDS)\n      ) === 0\n    );\n  }\n  with(durationLike: Params['with'][0]): Return['with'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    const partialDuration = ES.PrepareTemporalFields(\n      durationLike,\n      // NOTE: Field order here is important.\n      [\n        'days',\n        'hours',\n        'microseconds',\n        'milliseconds',\n        'minutes',\n        'months',\n        'nanoseconds',\n        'seconds',\n        'weeks',\n        'years'\n      ],\n      'partial'\n    );\n    const {\n      years = GetSlot(this, YEARS),\n      months = GetSlot(this, MONTHS),\n      weeks = GetSlot(this, WEEKS),\n      days = GetSlot(this, DAYS),\n      hours = GetSlot(this, HOURS),\n      minutes = GetSlot(this, MINUTES),\n      seconds = GetSlot(this, SECONDS),\n      milliseconds = GetSlot(this, MILLISECONDS),\n      microseconds = GetSlot(this, MICROSECONDS),\n      nanoseconds = GetSlot(this, NANOSECONDS)\n    } = partialDuration;\n    return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  }\n  negated(): Return['negated'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return ES.CreateNegatedTemporalDuration(this);\n  }\n  abs(): Return['abs'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return new Duration(\n      Math.abs(GetSlot(this, YEARS)),\n      Math.abs(GetSlot(this, MONTHS)),\n      Math.abs(GetSlot(this, WEEKS)),\n      Math.abs(GetSlot(this, DAYS)),\n      Math.abs(GetSlot(this, HOURS)),\n      Math.abs(GetSlot(this, MINUTES)),\n      Math.abs(GetSlot(this, SECONDS)),\n      Math.abs(GetSlot(this, MILLISECONDS)),\n      Math.abs(GetSlot(this, MICROSECONDS)),\n      Math.abs(GetSlot(this, NANOSECONDS))\n    );\n  }\n  add(other: Params['add'][0], options: Params['add'][1] = undefined): Return['add'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromDuration('add', this, other, options);\n  }\n  subtract(other: Params['subtract'][0], options: Params['subtract'][1] = undefined): Return['subtract'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromDuration('subtract', this, other, options);\n  }\n  round(roundToParam: Params['round'][0]): Return['round'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    if (roundToParam === undefined) throw new TypeError('options parameter is required');\n    let years = GetSlot(this, YEARS);\n    let months = GetSlot(this, MONTHS);\n    let weeks = GetSlot(this, WEEKS);\n    let days = GetSlot(this, DAYS);\n    let hours = GetSlot(this, HOURS);\n    let minutes = GetSlot(this, MINUTES);\n    let seconds = GetSlot(this, SECONDS);\n    let milliseconds = GetSlot(this, MILLISECONDS);\n    let microseconds = GetSlot(this, MICROSECONDS);\n    let nanoseconds = GetSlot(this, NANOSECONDS);\n\n    let defaultLargestUnit = ES.DefaultTemporalLargestUnit(\n      years,\n      months,\n      weeks,\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds\n    );\n    const roundTo =\n      typeof roundToParam === 'string'\n        ? (ES.CreateOnePropObject('smallestUnit', roundToParam) as Exclude<typeof roundToParam, string>)\n        : ES.GetOptionsObject(roundToParam);\n\n    let largestUnit = ES.GetTemporalUnit(roundTo, 'largestUnit', 'datetime', undefined, ['auto']);\n    let relativeTo = ES.ToRelativeTemporalObject(roundTo);\n    const roundingIncrement = ES.ToTemporalRoundingIncrement(roundTo);\n    const roundingMode = ES.ToTemporalRoundingMode(roundTo, 'halfExpand');\n    let smallestUnit = ES.GetTemporalUnit(roundTo, 'smallestUnit', 'datetime', undefined);\n\n    let smallestUnitPresent = true;\n    if (!smallestUnit) {\n      smallestUnitPresent = false;\n      smallestUnit = 'nanosecond';\n    }\n    defaultLargestUnit = ES.LargerOfTwoTemporalUnits(defaultLargestUnit, smallestUnit);\n    let largestUnitPresent = true;\n    if (!largestUnit) {\n      largestUnitPresent = false;\n      largestUnit = defaultLargestUnit;\n    }\n    if (largestUnit === 'auto') largestUnit = defaultLargestUnit;\n    if (!smallestUnitPresent && !largestUnitPresent) {\n      throw new RangeError('at least one of smallestUnit or largestUnit is required');\n    }\n    if (ES.LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n      throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n    }\n\n    const maximumIncrements = {\n      hour: 24,\n      minute: 60,\n      second: 60,\n      millisecond: 1000,\n      microsecond: 1000,\n      nanosecond: 1000\n    } as { [k in Temporal.DateTimeUnit]?: number };\n    const maximum = maximumIncrements[smallestUnit];\n    if (maximum !== undefined) ES.ValidateTemporalRoundingIncrement(roundingIncrement, maximum, false);\n\n    ({ years, months, weeks, days } = ES.UnbalanceDurationRelative(\n      years,\n      months,\n      weeks,\n      days,\n      largestUnit,\n      relativeTo\n    ));\n    ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n      ES.RoundDuration(\n        years,\n        months,\n        weeks,\n        days,\n        hours,\n        minutes,\n        seconds,\n        milliseconds,\n        microseconds,\n        nanoseconds,\n        roundingIncrement,\n        smallestUnit,\n        roundingMode,\n        relativeTo\n      ));\n    ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n      ES.AdjustRoundedDurationDays(\n        years,\n        months,\n        weeks,\n        days,\n        hours,\n        minutes,\n        seconds,\n        milliseconds,\n        microseconds,\n        nanoseconds,\n        roundingIncrement,\n        smallestUnit,\n        roundingMode,\n        relativeTo\n      ));\n    ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ES.BalanceDuration(\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      largestUnit,\n      relativeTo\n    ));\n    ({ years, months, weeks, days } = ES.BalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo));\n\n    return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  }\n  total(optionsParam: Params['total'][0]): Return['total'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    let years = GetSlot(this, YEARS);\n    let months = GetSlot(this, MONTHS);\n    let weeks = GetSlot(this, WEEKS);\n    let days = GetSlot(this, DAYS);\n    let hours = GetSlot(this, HOURS);\n    let minutes = GetSlot(this, MINUTES);\n    let seconds = GetSlot(this, SECONDS);\n    let milliseconds = GetSlot(this, MILLISECONDS);\n    let microseconds = GetSlot(this, MICROSECONDS);\n    let nanoseconds = GetSlot(this, NANOSECONDS);\n\n    if (optionsParam === undefined) throw new TypeError('options argument is required');\n    const options =\n      typeof optionsParam === 'string'\n        ? (ES.CreateOnePropObject('unit', optionsParam) as Exclude<typeof optionsParam, string>)\n        : ES.GetOptionsObject(optionsParam);\n    const relativeTo = ES.ToRelativeTemporalObject(options);\n    const unit = ES.GetTemporalUnit(options, 'unit', 'datetime', ES.REQUIRED);\n\n    // Convert larger units down to days\n    ({ years, months, weeks, days } = ES.UnbalanceDurationRelative(years, months, weeks, days, unit, relativeTo));\n    // If the unit we're totalling is smaller than `days`, convert days down to that unit.\n    let intermediate;\n    if (ES.IsTemporalZonedDateTime(relativeTo)) {\n      intermediate = ES.MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0);\n    }\n    let balanceResult = ES.BalancePossiblyInfiniteDuration(\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      unit,\n      intermediate\n    );\n    if (balanceResult === 'positive overflow') {\n      return Infinity;\n    } else if (balanceResult === 'negative overflow') {\n      return -Infinity;\n    }\n    ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = balanceResult);\n    // Finally, truncate to the correct unit and calculate remainder\n    const { total } = ES.RoundDuration(\n      years,\n      months,\n      weeks,\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      1,\n      unit,\n      'trunc',\n      relativeTo\n    );\n    return total;\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const digits = ES.ToFractionalSecondDigits(options);\n    const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n    const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n    if (smallestUnit === 'hour' || smallestUnit === 'minute') {\n      throw new RangeError('smallestUnit must be a time unit other than \"hours\" or \"minutes\"');\n    }\n    const { precision, unit, increment } = ES.ToSecondsStringPrecisionRecord(smallestUnit, digits);\n    ES.uncheckedAssertNarrowedType<Exclude<typeof precision, 'minute'>>(\n      precision,\n      'Precision cannot be \"minute\" because of RangeError above'\n    );\n    return ES.TemporalDurationToString(this, precision, { unit, increment, roundingMode });\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDurationToString(this);\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    if (typeof Intl !== 'undefined' && typeof (Intl as any).DurationFormat !== 'undefined') {\n      return new (Intl as any).DurationFormat(locales, options).format(this);\n    }\n    console.warn('Temporal.Duration.prototype.toLocaleString() requires Intl.DurationFormat.');\n    return ES.TemporalDurationToString(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() to compare Temporal.Duration');\n  }\n  static from(item: Params['from'][0]): Return['from'] {\n    if (ES.IsTemporalDuration(item)) {\n      return new Duration(\n        GetSlot(item, YEARS),\n        GetSlot(item, MONTHS),\n        GetSlot(item, WEEKS),\n        GetSlot(item, DAYS),\n        GetSlot(item, HOURS),\n        GetSlot(item, MINUTES),\n        GetSlot(item, SECONDS),\n        GetSlot(item, MILLISECONDS),\n        GetSlot(item, MICROSECONDS),\n        GetSlot(item, NANOSECONDS)\n      );\n    }\n    return ES.ToTemporalDuration(item);\n  }\n  static compare(\n    oneParam: Params['compare'][0],\n    twoParam: Params['compare'][1],\n    optionsParam: Params['compare'][2] = undefined\n  ) {\n    const one = ES.ToTemporalDuration(oneParam);\n    const two = ES.ToTemporalDuration(twoParam);\n    const options = ES.GetOptionsObject(optionsParam);\n    const relativeTo = ES.ToRelativeTemporalObject(options);\n    const y1 = GetSlot(one, YEARS);\n    const mon1 = GetSlot(one, MONTHS);\n    const w1 = GetSlot(one, WEEKS);\n    let d1 = GetSlot(one, DAYS);\n    const h1 = GetSlot(one, HOURS);\n    const min1 = GetSlot(one, MINUTES);\n    const s1 = GetSlot(one, SECONDS);\n    const ms1 = GetSlot(one, MILLISECONDS);\n    const µs1 = GetSlot(one, MICROSECONDS);\n    let ns1 = GetSlot(one, NANOSECONDS);\n    const y2 = GetSlot(two, YEARS);\n    const mon2 = GetSlot(two, MONTHS);\n    const w2 = GetSlot(two, WEEKS);\n    let d2 = GetSlot(two, DAYS);\n    const h2 = GetSlot(two, HOURS);\n    const min2 = GetSlot(two, MINUTES);\n    const s2 = GetSlot(two, SECONDS);\n    const ms2 = GetSlot(two, MILLISECONDS);\n    const µs2 = GetSlot(two, MICROSECONDS);\n    let ns2 = GetSlot(two, NANOSECONDS);\n    const shift1 = ES.CalculateOffsetShift(relativeTo, y1, mon1, w1, d1);\n    const shift2 = ES.CalculateOffsetShift(relativeTo, y2, mon2, w2, d2);\n    if (y1 !== 0 || y2 !== 0 || mon1 !== 0 || mon2 !== 0 || w1 !== 0 || w2 !== 0) {\n      ({ days: d1 } = ES.UnbalanceDurationRelative(y1, mon1, w1, d1, 'day', relativeTo));\n      ({ days: d2 } = ES.UnbalanceDurationRelative(y2, mon2, w2, d2, 'day', relativeTo));\n    }\n    const totalNs1 = ES.TotalDurationNanoseconds(d1, h1, min1, s1, ms1, µs1, ns1, shift1);\n    const totalNs2 = ES.TotalDurationNanoseconds(d2, h2, min2, s2, ms2, µs2, ns2, shift2);\n    return ES.ComparisonResult(JSBI.toNumber(JSBI.subtract(totalNs1, totalNs2)));\n  }\n  [Symbol.toStringTag]!: 'Temporal.Duration';\n}\n\nMakeIntrinsicClass(Duration, 'Temporal.Duration');\n", "import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_MONTH, ISO_DAY, ISO_YEAR, CALENDAR, GetSlot } from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { PlainMonthDayParams as Params, PlainMonthDayReturn as Return } from './internaltypes';\n\nconst ObjectCreate = Object.create;\n\nexport class PlainMonthDay implements Temporal.PlainMonthDay {\n  constructor(\n    isoMonthParam: Params['constructor'][0],\n    isoDayParam: Params['constructor'][0],\n    calendarParam: string | Temporal.CalendarProtocol = 'iso8601',\n    referenceISOYearParam = 1972\n  ) {\n    const isoMonth = ES.ToIntegerWithTruncation(isoMonthParam);\n    const isoDay = ES.ToIntegerWithTruncation(isoDayParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    const referenceISOYear = ES.ToIntegerWithTruncation(referenceISOYearParam);\n\n    ES.CreateTemporalMonthDaySlots(this, isoMonth, isoDay, calendar, referenceISOYear);\n  }\n\n  get monthCode(): Return['monthCode'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n  }\n  get day(): Return['day'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n  }\n  get calendarId(): Return['calendarId'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n  }\n\n  with(temporalMonthDayLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalMonthDayLike)) {\n      throw new TypeError('invalid argument');\n    }\n    ES.RejectTemporalLikeObject(temporalMonthDayLike);\n    const options = ES.GetOptionsObject(optionsParam);\n\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['day', 'month', 'monthCode', 'year'] as const);\n    let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    const partialMonthDay = ES.PrepareTemporalFields(temporalMonthDayLike, fieldNames, 'partial');\n    fields = ES.CalendarMergeFields(calendar, fields, partialMonthDay);\n    fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n\n    return ES.CalendarMonthDayFromFields(calendar, fields, options);\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalMonthDay(otherParam);\n    for (const slot of [ISO_MONTH, ISO_DAY, ISO_YEAR]) {\n      const val1 = GetSlot(this, slot);\n      const val2 = GetSlot(other, slot);\n      if (val1 !== val2) return false;\n    }\n    return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const showCalendar = ES.ToCalendarNameOption(options);\n    return ES.TemporalMonthDayToString(this, showCalendar);\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalMonthDayToString(this);\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use equals() to compare Temporal.PlainMonthDay');\n  }\n  toPlainDate(item: Params['toPlainDate'][0]): Return['toPlainDate'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(item)) throw new TypeError('argument should be an object');\n    const calendar = GetSlot(this, CALENDAR);\n\n    const receiverFieldNames = ES.CalendarFields(calendar, ['day', 'monthCode'] as const);\n    const fields = ES.PrepareTemporalFields(this, receiverFieldNames, []);\n\n    const inputFieldNames = ES.CalendarFields(calendar, ['year'] as const);\n    const inputFields = ES.PrepareTemporalFields(item, inputFieldNames, []);\n    let mergedFields = ES.CalendarMergeFields(calendar, fields, inputFields);\n\n    // TODO: Use MergeLists abstract operation.\n    const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])];\n    mergedFields = ES.PrepareTemporalFields(mergedFields, mergedFieldNames, []);\n    const options = ObjectCreate(null);\n    options.overflow = 'reject';\n    return ES.CalendarDateFromFields(calendar, mergedFields, options);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return {\n      calendar: GetSlot(this, CALENDAR),\n      isoDay: GetSlot(this, ISO_DAY),\n      isoMonth: GetSlot(this, ISO_MONTH),\n      isoYear: GetSlot(this, ISO_YEAR)\n    };\n  }\n  getCalendar(): Return['getCalendar'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarObject(GetSlot(this, CALENDAR));\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    if (ES.IsTemporalMonthDay(item)) {\n      ES.ToTemporalOverflow(options); // validate and ignore\n      return ES.CreateTemporalMonthDay(\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, ISO_DAY),\n        GetSlot(item, CALENDAR),\n        GetSlot(item, ISO_YEAR)\n      );\n    }\n    return ES.ToTemporalMonthDay(item, options);\n  }\n  [Symbol.toStringTag]!: 'Temporal.PlainMonthDay';\n}\n\nMakeIntrinsicClass(PlainMonthDay, 'Temporal.PlainMonthDay');\n", "import * as ES from './ecmascript';\nimport { GetIntrinsic } from './intrinsicclass';\nimport type { Temporal } from '..';\n\nconst instant: typeof Temporal.Now['instant'] = () => {\n  const Instant = GetIntrinsic('%Temporal.Instant%');\n  return new Instant(ES.SystemUTCEpochNanoSeconds());\n};\nconst plainDateTime: typeof Temporal.Now['plainDateTime'] = (\n  calendarLike,\n  temporalTimeZoneLike = ES.DefaultTimeZone()\n) => {\n  const tZ = ES.ToTemporalTimeZoneSlotValue(temporalTimeZoneLike);\n  const calendar = ES.ToTemporalCalendarSlotValue(calendarLike);\n  const inst = instant();\n  return ES.GetPlainDateTimeFor(tZ, inst, calendar);\n};\nconst plainDateTimeISO: typeof Temporal.Now['plainDateTimeISO'] = (temporalTimeZoneLike = ES.DefaultTimeZone()) => {\n  const tZ = ES.ToTemporalTimeZoneSlotValue(temporalTimeZoneLike);\n  const inst = instant();\n  return ES.GetPlainDateTimeFor(tZ, inst, 'iso8601');\n};\nconst zonedDateTime: typeof Temporal.Now['zonedDateTime'] = (\n  calendarLike,\n  temporalTimeZoneLike = ES.DefaultTimeZone()\n) => {\n  const tZ = ES.ToTemporalTimeZoneSlotValue(temporalTimeZoneLike);\n  const calendar = ES.ToTemporalCalendarSlotValue(calendarLike);\n  return ES.CreateTemporalZonedDateTime(ES.SystemUTCEpochNanoSeconds(), tZ, calendar);\n};\nconst zonedDateTimeISO: typeof Temporal.Now['zonedDateTimeISO'] = (temporalTimeZoneLike = ES.DefaultTimeZone()) => {\n  return zonedDateTime('iso8601', temporalTimeZoneLike);\n};\nconst plainDate: typeof Temporal.Now['plainDate'] = (calendarLike, temporalTimeZoneLike = ES.DefaultTimeZone()) => {\n  return ES.TemporalDateTimeToDate(plainDateTime(calendarLike, temporalTimeZoneLike));\n};\nconst plainDateISO: typeof Temporal.Now['plainDateISO'] = (temporalTimeZoneLike = ES.DefaultTimeZone()) => {\n  return ES.TemporalDateTimeToDate(plainDateTimeISO(temporalTimeZoneLike));\n};\nconst plainTimeISO: typeof Temporal.Now['plainTimeISO'] = (temporalTimeZoneLike = ES.DefaultTimeZone()) => {\n  return ES.TemporalDateTimeToTime(plainDateTimeISO(temporalTimeZoneLike));\n};\nconst timeZoneId: typeof Temporal.Now['timeZoneId'] = () => {\n  return ES.DefaultTimeZone();\n};\n\nexport const Now: typeof Temporal.Now = {\n  instant,\n  plainDateTime,\n  plainDateTimeISO,\n  plainDate,\n  plainDateISO,\n  plainTimeISO,\n  timeZoneId,\n  zonedDateTime,\n  zonedDateTimeISO,\n  [Symbol.toStringTag]: 'Temporal.Now'\n};\nObject.defineProperty(Now, Symbol.toStringTag, {\n  value: 'Temporal.Now',\n  writable: false,\n  enumerable: false,\n  configurable: true\n});\n", "import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\n\nimport {\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  CALENDAR,\n  EPOCHNANOSECONDS,\n  CreateSlots,\n  GetSlot,\n  SetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { PlainTimeParams as Params, PlainTimeReturn as Return } from './internaltypes';\n\nconst ObjectAssign = Object.assign;\n\ntype TemporalTimeToStringOptions = {\n  unit: ReturnType<typeof ES.ToSecondsStringPrecisionRecord>['unit'];\n  increment: ReturnType<typeof ES.ToSecondsStringPrecisionRecord>['increment'];\n  roundingMode: Temporal.RoundingMode;\n};\n\nfunction TemporalTimeToString(\n  time: Temporal.PlainTime,\n  precision: ReturnType<typeof ES.ToSecondsStringPrecisionRecord>['precision'],\n  options: TemporalTimeToStringOptions | undefined = undefined\n) {\n  let hour = GetSlot(time, ISO_HOUR);\n  let minute = GetSlot(time, ISO_MINUTE);\n  let second = GetSlot(time, ISO_SECOND);\n  let millisecond = GetSlot(time, ISO_MILLISECOND);\n  let microsecond = GetSlot(time, ISO_MICROSECOND);\n  let nanosecond = GetSlot(time, ISO_NANOSECOND);\n\n  if (options) {\n    const { unit, increment, roundingMode } = options;\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundTime(\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      increment,\n      unit,\n      roundingMode\n    ));\n  }\n\n  const hourString = ES.ISODateTimePartString(hour);\n  const minuteString = ES.ISODateTimePartString(minute);\n  const seconds = ES.FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision);\n  return `${hourString}:${minuteString}${seconds}`;\n}\n\nexport class PlainTime implements Temporal.PlainTime {\n  constructor(\n    isoHourParam = 0,\n    isoMinuteParam = 0,\n    isoSecondParam = 0,\n    isoMillisecondParam = 0,\n    isoMicrosecondParam = 0,\n    isoNanosecondParam = 0\n  ) {\n    const isoHour = isoHourParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoHourParam);\n    const isoMinute = isoMinuteParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoMinuteParam);\n    const isoSecond = isoSecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoSecondParam);\n    const isoMillisecond = isoMillisecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoMillisecondParam);\n    const isoMicrosecond = isoMicrosecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoMicrosecondParam);\n    const isoNanosecond = isoNanosecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoNanosecondParam);\n\n    ES.RejectTime(isoHour, isoMinute, isoSecond, isoMillisecond, isoMicrosecond, isoNanosecond);\n    CreateSlots(this);\n    SetSlot(this, ISO_HOUR, isoHour);\n    SetSlot(this, ISO_MINUTE, isoMinute);\n    SetSlot(this, ISO_SECOND, isoSecond);\n    SetSlot(this, ISO_MILLISECOND, isoMillisecond);\n    SetSlot(this, ISO_MICROSECOND, isoMicrosecond);\n    SetSlot(this, ISO_NANOSECOND, isoNanosecond);\n\n    if (DEBUG) {\n      Object.defineProperty(this, '_repr_', {\n        value: `${this[Symbol.toStringTag]} <${TemporalTimeToString(this, 'auto')}>`,\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n\n  get hour(): Return['hour'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_HOUR);\n  }\n  get minute(): Return['minute'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MINUTE);\n  }\n  get second(): Return['second'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_SECOND);\n  }\n  get millisecond(): Return['millisecond'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MILLISECOND);\n  }\n  get microsecond(): Return['microsecond'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MICROSECOND);\n  }\n  get nanosecond(): Return['nanosecond'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_NANOSECOND);\n  }\n\n  with(temporalTimeLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalTimeLike)) {\n      throw new TypeError('invalid argument');\n    }\n    ES.RejectTemporalLikeObject(temporalTimeLike);\n    const options = ES.GetOptionsObject(optionsParam);\n    const overflow = ES.ToTemporalOverflow(options);\n\n    const partialTime = ES.ToTemporalTimeRecord(temporalTimeLike, 'partial');\n\n    const fields = ES.ToTemporalTimeRecord(this);\n    let { hour, minute, second, millisecond, microsecond, nanosecond } = ObjectAssign(fields, partialTime);\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RegulateTime(\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      overflow\n    ));\n    return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n  }\n  add(temporalDurationLike: Params['add'][0]): Return['add'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainTime('add', this, temporalDurationLike);\n  }\n  subtract(temporalDurationLike: Params['subtract'][0]): Return['subtract'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainTime('subtract', this, temporalDurationLike);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainTime('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainTime('since', this, other, options);\n  }\n  round(roundToParam: Params['round'][0]): Return['round'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    if (roundToParam === undefined) throw new TypeError('options parameter is required');\n    const roundTo =\n      typeof roundToParam === 'string'\n        ? (ES.CreateOnePropObject('smallestUnit', roundToParam) as Exclude<typeof roundToParam, string>)\n        : ES.GetOptionsObject(roundToParam);\n    const roundingIncrement = ES.ToTemporalRoundingIncrement(roundTo);\n    const roundingMode = ES.ToTemporalRoundingMode(roundTo, 'halfExpand');\n    const smallestUnit = ES.GetTemporalUnit(roundTo, 'smallestUnit', 'time', ES.REQUIRED);\n    const MAX_INCREMENTS = {\n      hour: 24,\n      minute: 60,\n      second: 60,\n      millisecond: 1000,\n      microsecond: 1000,\n      nanosecond: 1000\n    };\n    ES.ValidateTemporalRoundingIncrement(roundingIncrement, MAX_INCREMENTS[smallestUnit], false);\n\n    let hour = GetSlot(this, ISO_HOUR);\n    let minute = GetSlot(this, ISO_MINUTE);\n    let second = GetSlot(this, ISO_SECOND);\n    let millisecond = GetSlot(this, ISO_MILLISECOND);\n    let microsecond = GetSlot(this, ISO_MICROSECOND);\n    let nanosecond = GetSlot(this, ISO_NANOSECOND);\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundTime(\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      roundingIncrement,\n      smallestUnit,\n      roundingMode\n    ));\n\n    return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalTime(otherParam);\n    for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]) {\n      const val1 = GetSlot(this, slot);\n      const val2 = GetSlot(other, slot);\n      if (val1 !== val2) return false;\n    }\n    return true;\n  }\n\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const digits = ES.ToFractionalSecondDigits(options);\n    const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n    const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n    if (smallestUnit === 'hour') throw new RangeError('smallestUnit must be a time unit other than \"hour\"');\n    const { precision, unit, increment } = ES.ToSecondsStringPrecisionRecord(smallestUnit, digits);\n    return TemporalTimeToString(this, precision, { unit, increment, roundingMode });\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return TemporalTimeToString(this, 'auto');\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.PlainTime');\n  }\n\n  toPlainDateTime(temporalDateParam: Params['toPlainDateTime'][0]): Return['toPlainDateTime'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n\n    const temporalDate = ES.ToTemporalDate(temporalDateParam);\n    const year = GetSlot(temporalDate, ISO_YEAR);\n    const month = GetSlot(temporalDate, ISO_MONTH);\n    const day = GetSlot(temporalDate, ISO_DAY);\n    const calendar = GetSlot(temporalDate, CALENDAR);\n\n    const hour = GetSlot(this, ISO_HOUR);\n    const minute = GetSlot(this, ISO_MINUTE);\n    const second = GetSlot(this, ISO_SECOND);\n    const millisecond = GetSlot(this, ISO_MILLISECOND);\n    const microsecond = GetSlot(this, ISO_MICROSECOND);\n    const nanosecond = GetSlot(this, ISO_NANOSECOND);\n\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  toZonedDateTime(item: Params['toZonedDateTime'][0]): Return['toZonedDateTime'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n\n    if (!ES.IsObject(item)) {\n      throw new TypeError('invalid argument');\n    }\n\n    const dateLike = item.plainDate;\n    if (dateLike === undefined) {\n      throw new TypeError('missing date property');\n    }\n    const temporalDate = ES.ToTemporalDate(dateLike);\n\n    const timeZoneLike = item.timeZone;\n    if (timeZoneLike === undefined) {\n      throw new TypeError('missing timeZone property');\n    }\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(timeZoneLike);\n\n    const year = GetSlot(temporalDate, ISO_YEAR);\n    const month = GetSlot(temporalDate, ISO_MONTH);\n    const day = GetSlot(temporalDate, ISO_DAY);\n    const calendar = GetSlot(temporalDate, CALENDAR);\n    const hour = GetSlot(this, ISO_HOUR);\n    const minute = GetSlot(this, ISO_MINUTE);\n    const second = GetSlot(this, ISO_SECOND);\n    const millisecond = GetSlot(this, ISO_MILLISECOND);\n    const microsecond = GetSlot(this, ISO_MICROSECOND);\n    const nanosecond = GetSlot(this, ISO_NANOSECOND);\n\n    const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const dt = new PlainDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n    const instant = ES.GetInstantFor(timeZone, dt, 'compatible');\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return {\n      isoHour: GetSlot(this, ISO_HOUR),\n      isoMicrosecond: GetSlot(this, ISO_MICROSECOND),\n      isoMillisecond: GetSlot(this, ISO_MILLISECOND),\n      isoMinute: GetSlot(this, ISO_MINUTE),\n      isoNanosecond: GetSlot(this, ISO_NANOSECOND),\n      isoSecond: GetSlot(this, ISO_SECOND)\n    };\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    const overflow = ES.ToTemporalOverflow(options);\n    if (ES.IsTemporalTime(item)) {\n      return new PlainTime(\n        GetSlot(item, ISO_HOUR),\n        GetSlot(item, ISO_MINUTE),\n        GetSlot(item, ISO_SECOND),\n        GetSlot(item, ISO_MILLISECOND),\n        GetSlot(item, ISO_MICROSECOND),\n        GetSlot(item, ISO_NANOSECOND)\n      );\n    }\n    return ES.ToTemporalTime(item, overflow);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalTime(oneParam);\n    const two = ES.ToTemporalTime(twoParam);\n    for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND] as const) {\n      const val1 = GetSlot(one, slot);\n      const val2 = GetSlot(two, slot);\n      if (val1 !== val2) return ES.ComparisonResult(val1 - val2);\n    }\n    return 0;\n  }\n  [Symbol.toStringTag]!: 'Temporal.PlainTime';\n}\n\nMakeIntrinsicClass(PlainTime, 'Temporal.PlainTime');\n", "import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { DefineIntrinsic, GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport {\n  TIMEZONE_ID,\n  EPOCHNANOSECONDS,\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  CreateSlots,\n  GetSlot,\n  SetSlot\n} from './slots';\nimport JSBI from 'jsbi';\nimport type { Temporal } from '..';\nimport type { TimeZoneParams as Params, TimeZoneReturn as Return } from './internaltypes';\n\nexport class TimeZone implements Temporal.TimeZone {\n  constructor(timeZoneIdentifierParam: string) {\n    // Note: if the argument is not passed, GetCanonicalTimeZoneIdentifier(undefined) will throw.\n    //       This check exists only to improve the error message.\n    if (arguments.length < 1) {\n      throw new RangeError('missing argument: identifier is required');\n    }\n\n    const timeZoneIdentifier = ES.GetCanonicalTimeZoneIdentifier(timeZoneIdentifierParam);\n    CreateSlots(this);\n    SetSlot(this, TIMEZONE_ID, timeZoneIdentifier);\n\n    if (DEBUG) {\n      Object.defineProperty(this, '_repr_', {\n        value: `${this[Symbol.toStringTag]} <${timeZoneIdentifier}>`,\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n  get id(): Return['id'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, TIMEZONE_ID);\n  }\n  getOffsetNanosecondsFor(instantParam: Params['getOffsetNanosecondsFor'][0]): Return['getOffsetNanosecondsFor'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const instant = ES.ToTemporalInstant(instantParam);\n    const id = GetSlot(this, TIMEZONE_ID);\n\n    if (ES.IsTimeZoneOffsetString(id)) {\n      return ES.ParseTimeZoneOffsetString(id);\n    }\n\n    return ES.GetNamedTimeZoneOffsetNanoseconds(id, GetSlot(instant, EPOCHNANOSECONDS));\n  }\n  getOffsetStringFor(instantParam: Params['getOffsetStringFor'][0]): Return['getOffsetStringFor'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const instant = ES.ToTemporalInstant(instantParam);\n    return ES.GetOffsetStringFor(this, instant);\n  }\n  getPlainDateTimeFor(\n    instantParam: Params['getPlainDateTimeFor'][0],\n    calendarParam: Params['getPlainDateTimeFor'][1] = 'iso8601'\n  ): Return['getPlainDateTimeFor'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const instant = ES.ToTemporalInstant(instantParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    return ES.GetPlainDateTimeFor(this, instant, calendar);\n  }\n  getInstantFor(\n    dateTimeParam: Params['getInstantFor'][0],\n    optionsParam: Params['getInstantFor'][1] = undefined\n  ): Return['getInstantFor'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const dateTime = ES.ToTemporalDateTime(dateTimeParam);\n    const options = ES.GetOptionsObject(optionsParam);\n    const disambiguation = ES.ToTemporalDisambiguation(options);\n    return ES.GetInstantFor(this, dateTime, disambiguation);\n  }\n  getPossibleInstantsFor(dateTimeParam: Params['getPossibleInstantsFor'][0]): Return['getPossibleInstantsFor'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const dateTime = ES.ToTemporalDateTime(dateTimeParam);\n    const Instant = GetIntrinsic('%Temporal.Instant%');\n    const id = GetSlot(this, TIMEZONE_ID);\n\n    if (ES.IsTimeZoneOffsetString(id)) {\n      const epochNs = ES.GetUTCEpochNanoseconds(\n        GetSlot(dateTime, ISO_YEAR),\n        GetSlot(dateTime, ISO_MONTH),\n        GetSlot(dateTime, ISO_DAY),\n        GetSlot(dateTime, ISO_HOUR),\n        GetSlot(dateTime, ISO_MINUTE),\n        GetSlot(dateTime, ISO_SECOND),\n        GetSlot(dateTime, ISO_MILLISECOND),\n        GetSlot(dateTime, ISO_MICROSECOND),\n        GetSlot(dateTime, ISO_NANOSECOND)\n      );\n      if (epochNs === null) throw new RangeError('DateTime outside of supported range');\n      const offsetNs = ES.ParseTimeZoneOffsetString(id);\n      return [new Instant(JSBI.subtract(epochNs, JSBI.BigInt(offsetNs)))];\n    }\n\n    const possibleEpochNs = ES.GetNamedTimeZoneEpochNanoseconds(\n      id,\n      GetSlot(dateTime, ISO_YEAR),\n      GetSlot(dateTime, ISO_MONTH),\n      GetSlot(dateTime, ISO_DAY),\n      GetSlot(dateTime, ISO_HOUR),\n      GetSlot(dateTime, ISO_MINUTE),\n      GetSlot(dateTime, ISO_SECOND),\n      GetSlot(dateTime, ISO_MILLISECOND),\n      GetSlot(dateTime, ISO_MICROSECOND),\n      GetSlot(dateTime, ISO_NANOSECOND)\n    );\n    return possibleEpochNs.map((ns) => new Instant(ns));\n  }\n  getNextTransition(startingPointParam: Params['getNextTransition'][0]): Return['getNextTransition'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const startingPoint = ES.ToTemporalInstant(startingPointParam);\n    const id = GetSlot(this, TIMEZONE_ID);\n\n    // Offset time zones or UTC have no transitions\n    if (ES.IsTimeZoneOffsetString(id) || id === 'UTC') {\n      return null;\n    }\n\n    let epochNanoseconds: JSBI | null = GetSlot(startingPoint, EPOCHNANOSECONDS);\n    const Instant = GetIntrinsic('%Temporal.Instant%');\n    epochNanoseconds = ES.GetNamedTimeZoneNextTransition(id, epochNanoseconds);\n    return epochNanoseconds === null ? null : new Instant(epochNanoseconds);\n  }\n  getPreviousTransition(startingPointParam: Params['getPreviousTransition'][0]): Return['getPreviousTransition'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const startingPoint = ES.ToTemporalInstant(startingPointParam);\n    const id = GetSlot(this, TIMEZONE_ID);\n\n    // Offset time zones or UTC have no transitions\n    if (ES.IsTimeZoneOffsetString(id) || id === 'UTC') {\n      return null;\n    }\n\n    let epochNanoseconds: JSBI | null = GetSlot(startingPoint, EPOCHNANOSECONDS);\n    const Instant = GetIntrinsic('%Temporal.Instant%');\n    epochNanoseconds = ES.GetNamedTimeZonePreviousTransition(id, epochNanoseconds);\n    return epochNanoseconds === null ? null : new Instant(epochNanoseconds);\n  }\n  toString(): string {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, TIMEZONE_ID);\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, TIMEZONE_ID);\n  }\n  static from(item: Params['from'][0]): Return['from'] {\n    const timeZoneSlotValue = ES.ToTemporalTimeZoneSlotValue(item);\n    return ES.ToTemporalTimeZoneObject(timeZoneSlotValue);\n  }\n  [Symbol.toStringTag]!: 'Temporal.TimeZone';\n}\n\nMakeIntrinsicClass(TimeZone, 'Temporal.TimeZone');\nDefineIntrinsic('Temporal.TimeZone.prototype.getOffsetNanosecondsFor', TimeZone.prototype.getOffsetNanosecondsFor);\nDefineIntrinsic('Temporal.TimeZone.prototype.getPossibleInstantsFor', TimeZone.prototype.getPossibleInstantsFor);\n", "import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, CALENDAR, GetSlot } from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { PlainYearMonthParams as Params, PlainYearMonthReturn as Return } from './internaltypes';\n\nconst ObjectCreate = Object.create;\n\nexport class PlainYearMonth implements Temporal.PlainYearMonth {\n  constructor(\n    isoYearParam: Params['constructor'][0],\n    isoMonthParam: Params['constructor'][1],\n    calendarParam: Params['constructor'][2] = 'iso8601',\n    referenceISODayParam: Params['constructor'][3] = 1\n  ) {\n    const isoYear = ES.ToIntegerWithTruncation(isoYearParam);\n    const isoMonth = ES.ToIntegerWithTruncation(isoMonthParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    const referenceISODay = ES.ToIntegerWithTruncation(referenceISODayParam);\n\n    ES.CreateTemporalYearMonthSlots(this, isoYear, isoMonth, calendar, referenceISODay);\n  }\n  get year(): Return['year'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n  }\n  get month(): Return['month'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n  }\n  get monthCode(): Return['monthCode'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n  }\n  get calendarId(): Return['calendarId'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n  }\n  get era(): Return['era'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n  }\n  get eraYear(): Return['eraYear'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n  }\n  get daysInMonth(): Return['daysInMonth'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n  }\n  get daysInYear(): Return['daysInYear'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n  }\n  get monthsInYear(): Return['monthsInYear'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n  }\n  get inLeapYear(): Return['inLeapYear'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n  }\n  with(temporalYearMonthLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalYearMonthLike)) {\n      throw new TypeError('invalid argument');\n    }\n    ES.RejectTemporalLikeObject(temporalYearMonthLike);\n    const options = ES.GetOptionsObject(optionsParam);\n\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['month', 'monthCode', 'year'] as const);\n    let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    const partialYearMonth = ES.PrepareTemporalFields(temporalYearMonthLike, fieldNames, 'partial');\n    fields = ES.CalendarMergeFields(calendar, fields, partialYearMonth);\n    fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n\n    return ES.CalendarYearMonthFromFields(calendar, fields, options);\n  }\n  add(temporalDurationLike: Params['add'][0], options: Params['add'][1] = undefined): Return['add'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainYearMonth('add', this, temporalDurationLike, options);\n  }\n  subtract(\n    temporalDurationLike: Params['subtract'][0],\n    options: Params['subtract'][1] = undefined\n  ): Return['subtract'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainYearMonth('subtract', this, temporalDurationLike, options);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainYearMonth('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainYearMonth('since', this, other, options);\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalYearMonth(otherParam);\n    for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) {\n      const val1 = GetSlot(this, slot);\n      const val2 = GetSlot(other, slot);\n      if (val1 !== val2) return false;\n    }\n    return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const showCalendar = ES.ToCalendarNameOption(options);\n    return ES.TemporalYearMonthToString(this, showCalendar);\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalYearMonthToString(this);\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.PlainYearMonth');\n  }\n  toPlainDate(item: Params['toPlainDate'][0]): Return['toPlainDate'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(item)) throw new TypeError('argument should be an object');\n    const calendar = GetSlot(this, CALENDAR);\n\n    const receiverFieldNames = ES.CalendarFields(calendar, ['monthCode', 'year'] as const);\n    const fields = ES.PrepareTemporalFields(this, receiverFieldNames, []);\n\n    const inputFieldNames = ES.CalendarFields(calendar, ['day'] as const);\n    const inputFields = ES.PrepareTemporalFields(item, inputFieldNames, []);\n    let mergedFields = ES.CalendarMergeFields(calendar, fields, inputFields);\n\n    // TODO: Use MergeLists abstract operation.\n    const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])];\n    mergedFields = ES.PrepareTemporalFields(mergedFields, mergedFieldNames, []);\n    const options = ObjectCreate(null);\n    options.overflow = 'reject';\n    return ES.CalendarDateFromFields(calendar, mergedFields, options);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return {\n      calendar: GetSlot(this, CALENDAR),\n      isoDay: GetSlot(this, ISO_DAY),\n      isoMonth: GetSlot(this, ISO_MONTH),\n      isoYear: GetSlot(this, ISO_YEAR)\n    };\n  }\n  getCalendar(): Return['getCalendar'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarObject(GetSlot(this, CALENDAR));\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    if (ES.IsTemporalYearMonth(item)) {\n      ES.ToTemporalOverflow(options); // validate and ignore\n      return ES.CreateTemporalYearMonth(\n        GetSlot(item, ISO_YEAR),\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, CALENDAR),\n        GetSlot(item, ISO_DAY)\n      );\n    }\n    return ES.ToTemporalYearMonth(item, options);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalYearMonth(oneParam);\n    const two = ES.ToTemporalYearMonth(twoParam);\n    return ES.CompareISODate(\n      GetSlot(one, ISO_YEAR),\n      GetSlot(one, ISO_MONTH),\n      GetSlot(one, ISO_DAY),\n      GetSlot(two, ISO_YEAR),\n      GetSlot(two, ISO_MONTH),\n      GetSlot(two, ISO_DAY)\n    );\n  }\n  [Symbol.toStringTag]!: 'Temporal.PlainYearMonth';\n}\n\nMakeIntrinsicClass(PlainYearMonth, 'Temporal.PlainYearMonth');\n", "import * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport {\n  CALENDAR,\n  EPOCHNANOSECONDS,\n  ISO_HOUR,\n  INSTANT,\n  ISO_DAY,\n  ISO_MONTH,\n  ISO_YEAR,\n  ISO_MICROSECOND,\n  ISO_MILLISECOND,\n  ISO_MINUTE,\n  ISO_NANOSECOND,\n  ISO_SECOND,\n  TIME_ZONE,\n  GetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { ZonedDateTimeParams as Params, ZonedDateTimeReturn as Return } from './internaltypes';\n\nimport JSBI from 'jsbi';\nimport { BILLION, MILLION, THOUSAND, ZERO, HOUR_NANOS } from './ecmascript';\n\nconst customResolvedOptions = DateTimeFormat.prototype.resolvedOptions as Intl.DateTimeFormat['resolvedOptions'];\nconst ObjectCreate = Object.create;\n\nexport class ZonedDateTime implements Temporal.ZonedDateTime {\n  constructor(\n    epochNanosecondsParam: bigint | JSBI,\n    timeZoneParam: string | Temporal.TimeZoneProtocol,\n    calendarParam: string | Temporal.CalendarProtocol = 'iso8601'\n  ) {\n    // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only\n    //       to improve the error message.\n    //       ToTemporalTimeZoneSlotValue(undefined) has a clear enough message.\n    if (arguments.length < 1) {\n      throw new TypeError('missing argument: epochNanoseconds is required');\n    }\n    const epochNanoseconds = ES.ToBigInt(epochNanosecondsParam);\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(timeZoneParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n\n    ES.CreateTemporalZonedDateTimeSlots(this, epochNanoseconds, timeZone, calendar);\n  }\n  get calendarId(): Return['calendarId'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n  }\n  get timeZoneId(): Return['timeZoneId'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalTimeZoneIdentifier(GetSlot(this, TIME_ZONE));\n  }\n  get year(): Return['year'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get month(): Return['month'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonth(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get monthCode(): Return['monthCode'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthCode(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get day(): Return['day'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDay(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get hour(): Return['hour'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_HOUR);\n  }\n  get minute(): Return['minute'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_MINUTE);\n  }\n  get second(): Return['second'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_SECOND);\n  }\n  get millisecond(): Return['millisecond'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_MILLISECOND);\n  }\n  get microsecond(): Return['microsecond'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_MICROSECOND);\n  }\n  get nanosecond(): Return['nanosecond'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_NANOSECOND);\n  }\n  get era(): Return['era'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEra(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get eraYear(): Return['eraYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEraYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get epochSeconds(): Return['epochSeconds'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const value = GetSlot(this, EPOCHNANOSECONDS);\n    return JSBI.toNumber(ES.BigIntFloorDiv(value, BILLION));\n  }\n  get epochMilliseconds(): Return['epochMilliseconds'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const value = GetSlot(this, EPOCHNANOSECONDS);\n    return JSBI.toNumber(ES.BigIntFloorDiv(value, MILLION));\n  }\n  get epochMicroseconds(): Return['epochMicroseconds'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const value = GetSlot(this, EPOCHNANOSECONDS);\n    return ES.ToBigIntExternal(ES.BigIntFloorDiv(value, THOUSAND));\n  }\n  get epochNanoseconds(): Return['epochNanoseconds'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToBigIntExternal(GetSlot(this, EPOCHNANOSECONDS));\n  }\n  get dayOfWeek(): Return['dayOfWeek'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get dayOfYear(): Return['dayOfYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get weekOfYear(): Return['weekOfYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get yearOfWeek(): Return['yearOfWeek'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYearOfWeek(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get hoursInDay(): Return['hoursInDay'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const dt = dateTime(this);\n    const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const year = GetSlot(dt, ISO_YEAR);\n    const month = GetSlot(dt, ISO_MONTH);\n    const day = GetSlot(dt, ISO_DAY);\n    const today = new DateTime(year, month, day, 0, 0, 0, 0, 0, 0);\n    const tomorrowFields = ES.AddISODate(year, month, day, 0, 0, 0, 1, 'reject');\n    const tomorrow = new DateTime(tomorrowFields.year, tomorrowFields.month, tomorrowFields.day, 0, 0, 0, 0, 0, 0);\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const todayNs = GetSlot(ES.GetInstantFor(timeZone, today, 'compatible'), EPOCHNANOSECONDS);\n    const tomorrowNs = GetSlot(ES.GetInstantFor(timeZone, tomorrow, 'compatible'), EPOCHNANOSECONDS);\n    const diffNs = JSBI.subtract(tomorrowNs, todayNs);\n    return ES.BigIntDivideToNumber(diffNs, HOUR_NANOS);\n  }\n  get daysInWeek(): Return['daysInWeek'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get daysInMonth(): Return['daysInMonth'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get daysInYear(): Return['daysInYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get monthsInYear(): Return['monthsInYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get inLeapYear(): Return['inLeapYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get offset(): Return['offset'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.GetOffsetStringFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT));\n  }\n  get offsetNanoseconds(): Return['offsetNanoseconds'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.GetOffsetNanosecondsFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT));\n  }\n  with(temporalZonedDateTimeLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalZonedDateTimeLike)) {\n      throw new TypeError('invalid zoned-date-time-like');\n    }\n    ES.RejectTemporalLikeObject(temporalZonedDateTimeLike);\n    const options = ES.GetOptionsObject(optionsParam);\n\n    const calendar = GetSlot(this, CALENDAR);\n    let fieldNames: (keyof Temporal.ZonedDateTimeLike)[] = ES.CalendarFields(calendar, [\n      'day',\n      'hour',\n      'microsecond',\n      'millisecond',\n      'minute',\n      'month',\n      'monthCode',\n      'nanosecond',\n      'second',\n      'year'\n    ] as const);\n    fieldNames.push('offset');\n    let fields = ES.PrepareTemporalFields(this, fieldNames, ['offset']);\n    const partialZonedDateTime = ES.PrepareTemporalFields(temporalZonedDateTimeLike, fieldNames, 'partial');\n    fields = ES.CalendarMergeFields(calendar, fields, partialZonedDateTime);\n    fields = ES.PrepareTemporalFields(fields, fieldNames, ['offset']);\n\n    const disambiguation = ES.ToTemporalDisambiguation(options);\n    const offset = ES.ToTemporalOffset(options, 'prefer');\n\n    let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } =\n      ES.InterpretTemporalDateTimeFields(calendar, fields, options);\n    const offsetNs = ES.ParseTimeZoneOffsetString(fields.offset);\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const epochNanoseconds = ES.InterpretISODateTimeOffset(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      'option',\n      offsetNs,\n      timeZone,\n      disambiguation,\n      offset,\n      /* matchMinute = */ false\n    );\n\n    return ES.CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n  }\n  withPlainDate(temporalDateParam: Params['withPlainDate'][0]): Return['withPlainDate'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n\n    const temporalDate = ES.ToTemporalDate(temporalDateParam);\n\n    const year = GetSlot(temporalDate, ISO_YEAR);\n    const month = GetSlot(temporalDate, ISO_MONTH);\n    const day = GetSlot(temporalDate, ISO_DAY);\n    let calendar = GetSlot(temporalDate, CALENDAR);\n    const thisDt = dateTime(this);\n    const hour = GetSlot(thisDt, ISO_HOUR);\n    const minute = GetSlot(thisDt, ISO_MINUTE);\n    const second = GetSlot(thisDt, ISO_SECOND);\n    const millisecond = GetSlot(thisDt, ISO_MILLISECOND);\n    const microsecond = GetSlot(thisDt, ISO_MICROSECOND);\n    const nanosecond = GetSlot(thisDt, ISO_NANOSECOND);\n\n    calendar = ES.ConsolidateCalendars(GetSlot(this, CALENDAR), calendar);\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const dt = new PlainDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n    const instant = ES.GetInstantFor(timeZone, dt, 'compatible');\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  withPlainTime(temporalTimeParam: Params['withPlainTime'][0] = undefined): Return['withPlainTime'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n\n    const PlainTime = GetIntrinsic('%Temporal.PlainTime%');\n    const temporalTime = temporalTimeParam === undefined ? new PlainTime() : ES.ToTemporalTime(temporalTimeParam);\n\n    const thisDt = dateTime(this);\n    const year = GetSlot(thisDt, ISO_YEAR);\n    const month = GetSlot(thisDt, ISO_MONTH);\n    const day = GetSlot(thisDt, ISO_DAY);\n    const calendar = GetSlot(this, CALENDAR);\n    const hour = GetSlot(temporalTime, ISO_HOUR);\n    const minute = GetSlot(temporalTime, ISO_MINUTE);\n    const second = GetSlot(temporalTime, ISO_SECOND);\n    const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n    const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n    const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const dt = new PlainDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n    const instant = ES.GetInstantFor(timeZone, dt, 'compatible');\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  withTimeZone(timeZoneParam: Params['withTimeZone'][0]): Return['withTimeZone'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(timeZoneParam);\n    return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR));\n  }\n  withCalendar(calendarParam: Params['withCalendar'][0]): Return['withCalendar'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), GetSlot(this, TIME_ZONE), calendar);\n  }\n  add(temporalDurationLike: Params['add'][0], options: Params['add'][1] = undefined): Return['add'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromZonedDateTime('add', this, temporalDurationLike, options);\n  }\n  subtract(\n    temporalDurationLike: Params['subtract'][0],\n    options: Params['subtract'][1] = undefined\n  ): Return['subtract'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromZonedDateTime('subtract', this, temporalDurationLike, options);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalZonedDateTime('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalZonedDateTime('since', this, other, options);\n  }\n  round(roundToParam: Params['round'][0]): Return['round'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    if (roundToParam === undefined) throw new TypeError('options parameter is required');\n    const roundTo =\n      typeof roundToParam === 'string'\n        ? (ES.CreateOnePropObject('smallestUnit', roundToParam) as Exclude<typeof roundToParam, string>)\n        : ES.GetOptionsObject(roundToParam);\n    const roundingIncrement = ES.ToTemporalRoundingIncrement(roundTo);\n    const roundingMode = ES.ToTemporalRoundingMode(roundTo, 'halfExpand');\n    const smallestUnit = ES.GetTemporalUnit(roundTo, 'smallestUnit', 'time', ES.REQUIRED, ['day']);\n    const maximumIncrements = {\n      day: 1,\n      hour: 24,\n      minute: 60,\n      second: 60,\n      millisecond: 1000,\n      microsecond: 1000,\n      nanosecond: 1000\n    };\n    const maximum = maximumIncrements[smallestUnit];\n    const inclusive = maximum === 1;\n    ES.ValidateTemporalRoundingIncrement(roundingIncrement, maximum, inclusive);\n\n    // first, round the underlying DateTime fields\n    const dt = dateTime(this);\n    let year = GetSlot(dt, ISO_YEAR);\n    let month = GetSlot(dt, ISO_MONTH);\n    let day = GetSlot(dt, ISO_DAY);\n    let hour = GetSlot(dt, ISO_HOUR);\n    let minute = GetSlot(dt, ISO_MINUTE);\n    let second = GetSlot(dt, ISO_SECOND);\n    let millisecond = GetSlot(dt, ISO_MILLISECOND);\n    let microsecond = GetSlot(dt, ISO_MICROSECOND);\n    let nanosecond = GetSlot(dt, ISO_NANOSECOND);\n\n    const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const calendar = GetSlot(this, CALENDAR);\n    const dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0);\n    const instantStart = ES.GetInstantFor(timeZone, dtStart, 'compatible');\n    const endNs = ES.AddZonedDateTime(instantStart, timeZone, calendar, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0);\n    const dayLengthNs = JSBI.subtract(endNs, JSBI.BigInt(GetSlot(instantStart, EPOCHNANOSECONDS)));\n    if (JSBI.lessThanOrEqual(dayLengthNs, ZERO)) {\n      throw new RangeError('cannot round a ZonedDateTime in a calendar with zero or negative length days');\n    }\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundISODateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      roundingIncrement,\n      smallestUnit,\n      roundingMode,\n      // Days are guaranteed to be shorter than Number.MAX_SAFE_INTEGER\n      // (which can hold up to 104 days in nanoseconds)\n      JSBI.toNumber(dayLengthNs)\n    ));\n\n    // Now reset all DateTime fields but leave the TimeZone. The offset will\n    // also be retained if the new date/time values are still OK with the old\n    // offset. Otherwise the offset will be changed to be compatible with the\n    // new date/time values. If DST disambiguation is required, the `compatible`\n    // disambiguation algorithm will be used.\n    const offsetNs = ES.GetOffsetNanosecondsFor(timeZone, GetSlot(this, INSTANT));\n    const epochNanoseconds = ES.InterpretISODateTimeOffset(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      'option',\n      offsetNs,\n      timeZone,\n      'compatible',\n      'prefer',\n      /* matchMinute = */ false\n    );\n\n    return ES.CreateTemporalZonedDateTime(epochNanoseconds, timeZone, GetSlot(this, CALENDAR));\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalZonedDateTime(otherParam);\n    const one = GetSlot(this, EPOCHNANOSECONDS);\n    const two = GetSlot(other, EPOCHNANOSECONDS);\n    if (!JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two))) return false;\n    if (!ES.TimeZoneEquals(GetSlot(this, TIME_ZONE), GetSlot(other, TIME_ZONE))) return false;\n    return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const showCalendar = ES.ToCalendarNameOption(options);\n    const digits = ES.ToFractionalSecondDigits(options);\n    const showOffset = ES.ToShowOffsetOption(options);\n    const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n    const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n    if (smallestUnit === 'hour') throw new RangeError('smallestUnit must be a time unit other than \"hour\"');\n    const showTimeZone = ES.ToTimeZoneNameOption(options);\n    const { precision, unit, increment } = ES.ToSecondsStringPrecisionRecord(smallestUnit, digits);\n    return ES.TemporalZonedDateTimeToString(this, precision, showCalendar, showTimeZone, showOffset, {\n      unit,\n      increment,\n      roundingMode\n    });\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    optionsParam: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n\n    const optionsCopy = ObjectCreate(null);\n    // This is not quite per specification, but this polyfill's DateTimeFormat\n    // already doesn't match the InitializeDateTimeFormat operation, and the\n    // access order might change anyway;\n    // see https://github.com/tc39/ecma402/issues/747\n    ES.CopyDataProperties(optionsCopy, options, ['timeZone']);\n\n    if (options.timeZone !== undefined) {\n      throw new TypeError('ZonedDateTime toLocaleString does not accept a timeZone option');\n    }\n\n    if (\n      optionsCopy.year === undefined &&\n      optionsCopy.month === undefined &&\n      optionsCopy.day === undefined &&\n      optionsCopy.weekday === undefined &&\n      optionsCopy.dateStyle === undefined &&\n      optionsCopy.hour === undefined &&\n      optionsCopy.minute === undefined &&\n      optionsCopy.second === undefined &&\n      optionsCopy.timeStyle === undefined &&\n      optionsCopy.dayPeriod === undefined &&\n      optionsCopy.timeZoneName === undefined\n    ) {\n      optionsCopy.timeZoneName = 'short';\n      // The rest of the defaults will be filled in by formatting the Instant\n    }\n\n    let timeZone = ES.ToTemporalTimeZoneIdentifier(GetSlot(this, TIME_ZONE));\n    if (ES.IsTimeZoneOffsetString(timeZone)) {\n      // Note: https://github.com/tc39/ecma402/issues/683 will remove this\n      throw new RangeError('toLocaleString does not support offset string time zones');\n    }\n    timeZone = ES.GetCanonicalTimeZoneIdentifier(timeZone);\n    optionsCopy.timeZone = timeZone;\n\n    const formatter = new DateTimeFormat(locales, optionsCopy);\n\n    const localeCalendarIdentifier = ES.Call(customResolvedOptions, formatter, []).calendar;\n    const calendarIdentifier = ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n    if (\n      calendarIdentifier !== 'iso8601' &&\n      localeCalendarIdentifier !== 'iso8601' &&\n      localeCalendarIdentifier !== calendarIdentifier\n    ) {\n      throw new RangeError(\n        `cannot format ZonedDateTime with calendar ${calendarIdentifier}` +\n          ` in locale with calendar ${localeCalendarIdentifier}`\n      );\n    }\n\n    return formatter.format(GetSlot(this, INSTANT));\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalZonedDateTimeToString(this, 'auto');\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.ZonedDateTime');\n  }\n  startOfDay(): Return['startOfDay'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const dt = dateTime(this);\n    const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const calendar = GetSlot(this, CALENDAR);\n    const dtStart = new DateTime(\n      GetSlot(dt, ISO_YEAR),\n      GetSlot(dt, ISO_MONTH),\n      GetSlot(dt, ISO_DAY),\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      calendar\n    );\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const instant = ES.GetInstantFor(timeZone, dtStart, 'compatible');\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  toInstant(): Return['toInstant'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n    return new TemporalInstant(GetSlot(this, EPOCHNANOSECONDS));\n  }\n  toPlainDate(): Return['toPlainDate'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateTimeToDate(dateTime(this));\n  }\n  toPlainTime(): Return['toPlainTime'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateTimeToTime(dateTime(this));\n  }\n  toPlainDateTime(): Return['toPlainDateTime'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return dateTime(this);\n  }\n  toPlainYearMonth(): Return['toPlainYearMonth'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarYearMonthFromFields(calendar, fields);\n  }\n  toPlainMonthDay(): Return['toPlainMonthDay'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarMonthDayFromFields(calendar, fields);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const dt = dateTime(this);\n    const tz = GetSlot(this, TIME_ZONE);\n    return {\n      calendar: GetSlot(this, CALENDAR),\n      isoDay: GetSlot(dt, ISO_DAY),\n      isoHour: GetSlot(dt, ISO_HOUR),\n      isoMicrosecond: GetSlot(dt, ISO_MICROSECOND),\n      isoMillisecond: GetSlot(dt, ISO_MILLISECOND),\n      isoMinute: GetSlot(dt, ISO_MINUTE),\n      isoMonth: GetSlot(dt, ISO_MONTH),\n      isoNanosecond: GetSlot(dt, ISO_NANOSECOND),\n      isoSecond: GetSlot(dt, ISO_SECOND),\n      isoYear: GetSlot(dt, ISO_YEAR),\n      offset: ES.GetOffsetStringFor(tz, GetSlot(this, INSTANT)),\n      timeZone: tz\n    };\n  }\n  getCalendar(): Return['getCalendar'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarObject(GetSlot(this, CALENDAR));\n  }\n  getTimeZone(): Return['getTimeZone'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalTimeZoneObject(GetSlot(this, TIME_ZONE));\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    if (ES.IsTemporalZonedDateTime(item)) {\n      ES.ToTemporalDisambiguation(options); // validate and ignore\n      ES.ToTemporalOffset(options, 'reject');\n      ES.ToTemporalOverflow(options);\n      return ES.CreateTemporalZonedDateTime(\n        GetSlot(item, EPOCHNANOSECONDS),\n        GetSlot(item, TIME_ZONE),\n        GetSlot(item, CALENDAR)\n      );\n    }\n    return ES.ToTemporalZonedDateTime(item, options);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalZonedDateTime(oneParam);\n    const two = ES.ToTemporalZonedDateTime(twoParam);\n    const ns1 = GetSlot(one, EPOCHNANOSECONDS);\n    const ns2 = GetSlot(two, EPOCHNANOSECONDS);\n    if (JSBI.lessThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2))) return -1;\n    if (JSBI.greaterThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2))) return 1;\n    return 0;\n  }\n  [Symbol.toStringTag]!: 'Temporal.ZonedDateTime';\n}\n\nMakeIntrinsicClass(ZonedDateTime, 'Temporal.ZonedDateTime');\n\nfunction dateTime(zdt: Temporal.ZonedDateTime) {\n  return ES.GetPlainDateTimeFor(GetSlot(zdt, TIME_ZONE), GetSlot(zdt, INSTANT), GetSlot(zdt, CALENDAR));\n}\n", "import { Instant } from './instant';\n\nimport JSBI from 'jsbi';\nimport { MILLION } from './ecmascript';\n\nexport function toTemporalInstant(this: Date) {\n  // Observable access to valueOf is not correct here, but unavoidable\n  const epochNanoseconds = JSBI.multiply(JSBI.BigInt(+this), MILLION);\n  return new Instant(epochNanoseconds);\n}\n", "// This entry point treats Temporal as a library, and does not polyfill it onto\n// the global object.\n// This is in order to avoid breaking the web in the future, if the polyfill\n// gains wide adoption before the API is finalized. We do not want checks such\n// as `if (typeof Temporal === 'undefined')` in the wild, until browsers start\n// shipping the finalized API.\n\nimport * as Temporal from './temporal';\nimport * as Intl from './intl';\nimport { toTemporalInstant } from './legacydate';\n\n// Work around https://github.com/babel/babel/issues/2025.\nconst types = [\n  Temporal.Instant,\n  Temporal.Calendar,\n  Temporal.PlainDate,\n  Temporal.PlainDateTime,\n  Temporal.Duration,\n  Temporal.PlainMonthDay,\n  // Temporal.Now, // plain object (not a constructor), so no `prototype`\n  Temporal.PlainTime,\n  Temporal.TimeZone,\n  Temporal.PlainYearMonth,\n  Temporal.ZonedDateTime\n];\nfor (const type of types) {\n  const descriptor = Object.getOwnPropertyDescriptor(type, 'prototype') as PropertyDescriptor;\n  if (descriptor.configurable || descriptor.enumerable || descriptor.writable) {\n    descriptor.configurable = false;\n    descriptor.enumerable = false;\n    descriptor.writable = false;\n    Object.defineProperty(type, 'prototype', descriptor);\n  }\n}\n\nexport { Temporal, Intl, toTemporalInstant };\n", "import type { AbstractBatchOperation, AbstractDatabaseOptions, AbstractIteratorOptions, AbstractLevel } from 'abstract-level';\n\nimport { executeUnlessAborted } from '../utils/abort.js';\nimport { sleep } from '../utils/time.js';\n\nexport type CreateLevelDatabaseOptions<V> = AbstractDatabaseOptions<string, V>;\n\nexport type LevelDatabase<V> = AbstractLevel<string | Buffer | Uint8Array, string, V>;\n\nexport async function createLevelDatabase<V>(location: string, options?: CreateLevelDatabaseOptions<V>): Promise<LevelDatabase<V>> {\n  // Only import `'level'` when it's actually necessary (i.e. only when the default `createLevelDatabase` is used).\n  // Overriding `createLevelDatabase` will prevent this from happening.\n  const { Level } = await import('level');\n  return new Level(location, { ...options, keyEncoding: 'utf8' });\n}\n\nexport interface LevelWrapperOptions {\n  signal?: AbortSignal;\n}\n\nexport type LevelWrapperBatchOperation<V> = AbstractBatchOperation<LevelDatabase<V>, string, V>;\n\nexport type LevelWrapperIteratorOptions<V> = AbstractIteratorOptions<string, V>;\n\n// `Level` works in Node.js 12+ and Electron 5+ on Linux, Mac OS, Windows and FreeBSD, including any\n// future Node.js and Electron release thanks to Node-API, including ARM platforms like Raspberry Pi\n// and Android, as well as in Chrome, Firefox, Edge, Safari, iOS Safari and Chrome for Android.\nexport class LevelWrapper<V> {\n  config: LevelWrapperConfig<V>;\n\n  db: LevelDatabase<V>;\n\n  /**\n   * @param config.location - must be a directory path (relative or absolute) where `Level`` will\n   * store its files, or in browsers, the name of the {@link https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase `IDBDatabase`}\n   * to be opened.\n   */\n  constructor(config: LevelWrapperConfig<V>, db?: LevelDatabase<V>) {\n    this.config = {\n      createLevelDatabase,\n      ...config\n    };\n\n    this.db = db!;\n  }\n\n  async open(): Promise<void> {\n    await this.createLevelDatabase();\n\n    while (this.db.status === 'opening' || this.db.status === 'closing') {\n      await sleep(200);\n    }\n\n    if (this.db.status === 'open') {\n      return;\n    }\n\n    // `db.open()` is automatically called by the database constructor.  We're calling it explicitly\n    // in order to explicitly catch an error that would otherwise not surface until another method\n    // like `db.get()` is called.  Once `db.open()` has then been called, any read & write\n    // operations will again be queued internally until opening has finished.\n    return this.db.open();\n  }\n\n  async close(): Promise<void> {\n    if (!this.db) {\n      return;\n    }\n\n    while (this.db.status === 'opening' || this.db.status === 'closing') {\n      await sleep(200);\n    }\n\n    if (this.db.status === 'closed') {\n      return;\n    }\n\n    return this.db.close();\n  }\n\n  async partition(name: string): Promise<LevelWrapper<V>> {\n    await this.createLevelDatabase();\n\n    return new LevelWrapper(this.config, this.db.sublevel(name, {\n      keyEncoding   : 'utf8',\n      valueEncoding : this.config.valueEncoding\n    }));\n  }\n\n  async get(key: string, options?: LevelWrapperOptions): Promise<V|undefined>{\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    try {\n      const value = await executeUnlessAborted(this.db.get(String(key)), options?.signal);\n      return value;\n    } catch (error) {\n      const e = error as { code: string };\n      // `Level`` throws an error if the key is not present.  Return `undefined` in this case.\n      if (e.code === 'LEVEL_NOT_FOUND') {\n        return undefined;\n      } else {\n        throw error;\n      }\n    }\n  }\n\n  async has(key: string, options?: LevelWrapperOptions): Promise<boolean> {\n    return !! await this.get(key, options);\n  }\n\n  async * keys(options?: LevelWrapperOptions): AsyncGenerator<string> {\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    for await (const key of this.db.keys()) {\n      options?.signal?.throwIfAborted();\n\n      yield key;\n    }\n  }\n\n  async * iterator(iteratorOptions?: LevelWrapperIteratorOptions<V>, options?: LevelWrapperOptions): AsyncGenerator<[string, V]> {\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    for await (const entry of this.db.iterator(iteratorOptions!)) {\n      options?.signal?.throwIfAborted();\n\n      yield entry;\n    }\n  }\n\n  async put(key: string, value: V, options?: LevelWrapperOptions): Promise<void> {\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    return executeUnlessAborted(this.db.put(String(key), value), options?.signal);\n  }\n\n  async delete(key: string, options?: LevelWrapperOptions): Promise<void> {\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    return executeUnlessAborted(this.db.del(String(key)), options?.signal);\n  }\n\n  async isEmpty(options?: LevelWrapperOptions): Promise<boolean> {\n    for await (const _key of this.keys(options)) {\n      return false;\n    }\n    return true;\n  }\n\n  async clear(): Promise<void> {\n    await this.createLevelDatabase();\n\n    await this.db.clear();\n\n    await this.compactUnderlyingStorage();\n  }\n\n  async batch(operations: Array<LevelWrapperBatchOperation<V>>, options?: LevelWrapperOptions): Promise<void> {\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    return executeUnlessAborted(this.db.batch(operations), options?.signal);\n  }\n\n  private async compactUnderlyingStorage(options?: LevelWrapperOptions): Promise<void> {\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    const range = this.sublevelRange;\n    if (!range) {\n      return;\n    }\n\n    // additional methods are only available on the root API instance\n    const root = this.root;\n\n    if (root.db.supports.additionalMethods.compactRange) {\n      return executeUnlessAborted((root.db as any).compactRange?.(...range), options?.signal);\n    }\n  }\n\n  /**\n   * Gets the min and max key value of this partition.\n   */\n  private get sublevelRange(): [ string, string ] | undefined {\n    const prefix = (this.db as any).prefix as string;\n    if (!prefix) {\n      return undefined;\n    }\n\n    // derive an exclusive `maxKey` by changing the last prefix character to the immediate succeeding character in unicode\n    // (which matches how `abstract-level` creates a `boundary`)\n    const maxKey = prefix.slice(0, -1) + String.fromCharCode(prefix.charCodeAt(prefix.length - 1) + 1);\n    const minKey = prefix;\n\n    return [minKey, maxKey];\n  }\n\n  private get root(): LevelWrapper<V> {\n    let db = this.db;\n    for (const parent = (db as any).db; parent && parent !== db; ) {\n      db = parent;\n    }\n    return new LevelWrapper(this.config, db);\n  }\n\n  private async createLevelDatabase(): Promise<void> {\n    this.db ??= await this.config.createLevelDatabase!<V>(this.config.location, {\n      keyEncoding   : 'utf8',\n      valueEncoding : this.config.valueEncoding\n    });\n  }\n\n  async dump(): Promise<void> {\n    if (!this.db) {\n      return;\n    }\n\n    for await (const [ key, value ] of this.db.iterator()) {\n      console.debug(key, value);\n    }\n  }\n}\n\ntype LevelWrapperConfig<V> = CreateLevelDatabaseOptions<V> & {\n  location: string,\n  createLevelDatabase?: typeof createLevelDatabase,\n};", "import { CID } from 'multiformats';\nimport type { AbortOptions, AwaitIterable } from 'interface-store';\nimport type { Blockstore, Pair } from 'interface-blockstore';\n\nimport { createLevelDatabase, LevelWrapper } from './level-wrapper.js';\n\n// `level` works in Node.js 12+ and Electron 5+ on Linux, Mac OS, Windows and\n// FreeBSD, including any future Node.js and Electron release thanks to Node-API, including ARM\n// platforms like Raspberry Pi and Android, as well as in Chrome, Firefox, Edge, Safari, iOS Safari\n//  and Chrome for Android.\n\n/**\n * Blockstore implementation using LevelDB for storing the actual messages (in the case of MessageStore)\n * or the data associated with messages (in the case of a DataStore).\n */\nexport class BlockstoreLevel implements Blockstore {\n  config: BlockstoreLevelConfig;\n\n  db: LevelWrapper<Uint8Array>;\n\n  constructor(config: BlockstoreLevelConfig, db?: LevelWrapper<Uint8Array>) {\n    this.config = {\n      createLevelDatabase,\n      ...config\n    };\n\n    this.db = db ?? new LevelWrapper<Uint8Array>({ ...this.config, valueEncoding: 'binary' });\n  }\n\n  async open(): Promise<void> {\n    return this.db.open();\n  }\n\n  async close(): Promise<void> {\n    return this.db.close();\n  }\n\n  async partition(name: string): Promise<BlockstoreLevel> {\n    const db = await this.db.partition(name);\n    return new BlockstoreLevel({ ...this.config, location: '' }, db);\n  }\n\n  async put(key: CID | string, val: Uint8Array, options?: AbortOptions): Promise<CID> {\n    await this.db.put(String(key), val, options);\n    return CID.parse(key.toString());\n  }\n\n  async get(key: CID | string, options?: AbortOptions): Promise<Uint8Array> {\n    const result = await this.db.get(String(key), options);\n    return result!;\n  }\n\n  async has(key: CID | string, options?: AbortOptions): Promise<boolean> {\n    return this.db.has(String(key), options);\n  }\n\n  async delete(key: CID | string, options?: AbortOptions): Promise<void> {\n    return this.db.delete(String(key), options);\n  }\n\n  async isEmpty(options?: AbortOptions): Promise<boolean> {\n    return this.db.isEmpty(options);\n  }\n\n  async * putMany(source: AwaitIterable<Pair>, options?: AbortOptions): AsyncIterable<CID> {\n    for await (const entry of source) {\n      await this.put(entry.cid, entry.block, options);\n\n      yield entry.cid;\n    }\n  }\n\n  async * getMany(source: AwaitIterable<CID>, options?: AbortOptions): AsyncIterable<Pair> {\n    for await (const key of source) {\n      yield {\n        cid   : key,\n        block : await this.get(key, options)\n      };\n    }\n  }\n\n  async * getAll(options?: AbortOptions): AsyncIterable<Pair> {\n    // @ts-expect-error keyEncoding is 'buffer' but types for db.iterator always return the key type as 'string'\n    const li: AsyncGenerator<[Uint8Array, Uint8Array]> = this.db.iterator({\n      keys        : true,\n      keyEncoding : 'buffer'\n    }, options);\n\n    for await (const [key, value] of li) {\n      yield { cid: CID.decode(key), block: value };\n    }\n  }\n\n  async * deleteMany(source: AwaitIterable<CID>, options?: AbortOptions): AsyncIterable<CID> {\n    for await (const key of source) {\n      await this.delete(key, options);\n\n      yield key;\n    }\n  }\n\n  /**\n   * deletes all entries\n   */\n  async clear(): Promise<void> {\n    return this.db.clear();\n  }\n\n  async dump(): Promise<void> {\n    console.group('db');\n    await this.db['dump']?.();\n    console.groupEnd();\n  }\n}\n\ntype BlockstoreLevelConfig = {\n  location: string,\n  createLevelDatabase?: typeof createLevelDatabase,\n};", "import errCode from 'err-code'\nimport last from 'it-last'\nimport { CID } from 'multiformats/cid'\nimport resolve from './resolvers/index.js'\nimport type { PBNode } from '@ipld/dag-pb'\nimport type { Bucket } from 'hamt-sharding'\nimport type { Blockstore } from 'interface-blockstore'\nimport type { UnixFS } from 'ipfs-unixfs'\nimport type { ProgressOptions, ProgressEvent } from 'progress-events'\n\nexport interface ExportProgress {\n  /**\n   * How many bytes of the file have been read\n   */\n  bytesRead: bigint\n\n  /**\n   * How many bytes of the file will be read - n.b. this may be\n   * smaller than `fileSize` if `offset`/`length` have been\n   * specified\n   */\n  totalBytes: bigint\n\n  /**\n   * The size of the file being read - n.b. this may be\n   * larger than `total` if `offset`/`length` has been\n   * specified\n   */\n  fileSize: bigint\n}\n\nexport interface ExportWalk {\n  cid: CID\n}\n\n/**\n * Progress events emitted by the exporter\n */\nexport type ExporterProgressEvents =\n  ProgressEvent<'unixfs:exporter:progress:unixfs:file', ExportProgress> |\n  ProgressEvent<'unixfs:exporter:progress:unixfs:raw', ExportProgress> |\n  ProgressEvent<'unixfs:exporter:progress:raw', ExportProgress> |\n  ProgressEvent<'unixfs:exporter:progress:identity', ExportProgress> |\n  ProgressEvent<'unixfs:exporter:walk:file', ExportWalk> |\n  ProgressEvent<'unixfs:exporter:walk:directory', ExportWalk> |\n  ProgressEvent<'unixfs:exporter:walk:hamt-sharded-directory', ExportWalk> |\n  ProgressEvent<'unixfs:exporter:walk:raw', ExportWalk>\n\nexport interface ExporterOptions extends ProgressOptions<ExporterProgressEvents> {\n  offset?: number\n  length?: number\n  signal?: AbortSignal\n}\n\nexport interface Exportable<T> {\n  type: 'file' | 'directory' | 'object' | 'raw' | 'identity'\n  name: string\n  path: string\n  cid: CID\n  depth: number\n  size: bigint\n  content: (options?: ExporterOptions) => AsyncGenerator<T, void, unknown>\n}\n\nexport interface UnixFSFile extends Exportable<Uint8Array> {\n  type: 'file'\n  unixfs: UnixFS\n  node: PBNode\n}\n\nexport interface UnixFSDirectory extends Exportable<UnixFSEntry> {\n  type: 'directory'\n  unixfs: UnixFS\n  node: PBNode\n}\n\nexport interface ObjectNode extends Exportable<any> {\n  type: 'object'\n  node: Uint8Array\n}\n\nexport interface RawNode extends Exportable<Uint8Array> {\n  type: 'raw'\n  node: Uint8Array\n}\n\nexport interface IdentityNode extends Exportable<Uint8Array> {\n  type: 'identity'\n  node: Uint8Array\n}\n\nexport type UnixFSEntry = UnixFSFile | UnixFSDirectory | ObjectNode | RawNode | IdentityNode\n\nexport interface NextResult {\n  cid: CID\n  name: string\n  path: string\n  toResolve: string[]\n}\n\nexport interface ResolveResult {\n  entry: UnixFSEntry\n  next?: NextResult\n}\n\nexport interface Resolve { (cid: CID, name: string, path: string, toResolve: string[], depth: number, blockstore: ReadableStorage, options: ExporterOptions): Promise<ResolveResult> }\nexport interface Resolver { (cid: CID, name: string, path: string, toResolve: string[], resolve: Resolve, depth: number, blockstore: ReadableStorage, options: ExporterOptions): Promise<ResolveResult> }\n\nexport type UnixfsV1FileContent = AsyncIterable<Uint8Array> | Iterable<Uint8Array>\nexport type UnixfsV1DirectoryContent = AsyncIterable<UnixFSEntry> | Iterable<UnixFSEntry>\nexport type UnixfsV1Content = UnixfsV1FileContent | UnixfsV1DirectoryContent\nexport interface UnixfsV1Resolver { (cid: CID, node: PBNode, unixfs: UnixFS, path: string, resolve: Resolve, depth: number, blockstore: ReadableStorage): (options: ExporterOptions) => UnixfsV1Content }\n\nexport interface ShardTraversalContext {\n  hamtDepth: number\n  rootBucket: Bucket<boolean>\n  lastBucket: Bucket<boolean>\n}\n\nexport type ReadableStorage = Pick<Blockstore, 'get'>\n\nconst toPathComponents = (path: string = ''): string[] => {\n  // split on / unless escaped with \\\n  return (path\n    .trim()\n    .match(/([^\\\\^/]|\\\\\\/)+/g) ?? [])\n    .filter(Boolean)\n}\n\nconst cidAndRest = (path: string | Uint8Array | CID): { cid: CID, toResolve: string[] } => {\n  if (path instanceof Uint8Array) {\n    return {\n      cid: CID.decode(path),\n      toResolve: []\n    }\n  }\n\n  const cid = CID.asCID(path)\n  if (cid != null) {\n    return {\n      cid,\n      toResolve: []\n    }\n  }\n\n  if (typeof path === 'string') {\n    if (path.indexOf('/ipfs/') === 0) {\n      path = path.substring(6)\n    }\n\n    const output = toPathComponents(path)\n\n    return {\n      cid: CID.parse(output[0]),\n      toResolve: output.slice(1)\n    }\n  }\n\n  throw errCode(new Error(`Unknown path type ${path}`), 'ERR_BAD_PATH')\n}\n\nexport async function * walkPath (path: string | CID, blockstore: ReadableStorage, options: ExporterOptions = {}): AsyncGenerator<UnixFSEntry, void, any> {\n  let {\n    cid,\n    toResolve\n  } = cidAndRest(path)\n  let name = cid.toString()\n  let entryPath = name\n  const startingDepth = toResolve.length\n\n  while (true) {\n    const result = await resolve(cid, name, entryPath, toResolve, startingDepth, blockstore, options)\n\n    if (result.entry == null && result.next == null) {\n      throw errCode(new Error(`Could not resolve ${path}`), 'ERR_NOT_FOUND')\n    }\n\n    if (result.entry != null) {\n      yield result.entry\n    }\n\n    if (result.next == null) {\n      return\n    }\n\n    // resolve further parts\n    toResolve = result.next.toResolve\n    cid = result.next.cid\n    name = result.next.name\n    entryPath = result.next.path\n  }\n}\n\nexport async function exporter (path: string | CID, blockstore: ReadableStorage, options: ExporterOptions = {}): Promise<UnixFSEntry> {\n  const result = await last(walkPath(path, blockstore, options))\n\n  if (result == null) {\n    throw errCode(new Error(`Could not resolve ${path}`), 'ERR_NOT_FOUND')\n  }\n\n  return result\n}\n\nexport async function * recursive (path: string | CID, blockstore: ReadableStorage, options: ExporterOptions = {}): AsyncGenerator<UnixFSEntry, void, any> {\n  const node = await exporter(path, blockstore, options)\n\n  if (node == null) {\n    return\n  }\n\n  yield node\n\n  if (node.type === 'directory') {\n    for await (const child of recurse(node, options)) {\n      yield child\n    }\n  }\n\n  async function * recurse (node: UnixFSDirectory, options: ExporterOptions): AsyncGenerator<UnixFSEntry, void, any> {\n    for await (const file of node.content(options)) {\n      yield file\n\n      if (file instanceof Uint8Array) {\n        continue\n      }\n\n      if (file.type === 'directory') {\n        yield * recurse(file, options)\n      }\n    }\n  }\n}\n", "function isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Returns the last item of an (async) iterable, unless empty, in which case\n * return `undefined`\n */\nfunction last <T> (source: Iterable<T>): T | undefined\nfunction last <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T | undefined>\nfunction last <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T | undefined> | T | undefined {\n  if (isAsyncIterable(source)) {\n    return (async () => {\n      let res\n\n      for await (const entry of source) {\n        res = entry\n      }\n\n      return res\n    })()\n  }\n\n  let res\n\n  for (const entry of source) {\n    res = entry\n  }\n\n  return res\n}\n\nexport default last\n", "\nimport * as dagCbor from '@ipld/dag-cbor'\nimport * as dagPb from '@ipld/dag-pb'\nimport errCode from 'err-code'\nimport * as raw from 'multiformats/codecs/raw'\nimport { identity } from 'multiformats/hashes/identity'\nimport dagCborResolver from './dag-cbor.js'\nimport identifyResolver from './identity.js'\nimport rawResolver from './raw.js'\nimport dagPbResolver from './unixfs-v1/index.js'\nimport type { Resolve, Resolver } from '../index.js'\n\nconst resolvers: Record<number, Resolver> = {\n  [dagPb.code]: dagPbResolver,\n  [raw.code]: rawResolver,\n  [dagCbor.code]: dagCborResolver,\n  [identity.code]: identifyResolver\n}\n\nconst resolve: Resolve = async (cid, name, path, toResolve, depth, blockstore, options) => {\n  const resolver = resolvers[cid.code]\n\n  if (resolver == null) {\n    throw errCode(new Error(`No resolver for code ${cid.code}`), 'ERR_NO_RESOLVER')\n  }\n\n  return resolver(cid, name, path, toResolve, resolve, depth, blockstore, options)\n}\n\nexport default resolve\n", "import * as dagCbor from '@ipld/dag-cbor'\nimport errCode from 'err-code'\nimport { CID } from 'multiformats/cid'\nimport type { Resolver } from '../index.js'\n\nconst resolve: Resolver = async (cid, name, path, toResolve, resolve, depth, blockstore, options) => {\n  const block = await blockstore.get(cid, options)\n  const object = dagCbor.decode<any>(block)\n  let subObject = object\n  let subPath = path\n\n  while (toResolve.length > 0) {\n    const prop = toResolve[0]\n\n    if (prop in subObject) {\n      // remove the bit of the path we have resolved\n      toResolve.shift()\n      subPath = `${subPath}/${prop}`\n\n      const subObjectCid = CID.asCID(subObject[prop])\n      if (subObjectCid != null) {\n        return {\n          entry: {\n            type: 'object',\n            name,\n            path,\n            cid,\n            node: block,\n            depth,\n            size: BigInt(block.length),\n            content: async function * () {\n              yield object\n            }\n          },\n          next: {\n            cid: subObjectCid,\n            name: prop,\n            path: subPath,\n            toResolve\n          }\n        }\n      }\n\n      subObject = subObject[prop]\n    } else {\n      // cannot resolve further\n      throw errCode(new Error(`No property named ${prop} found in cbor node ${cid}`), 'ERR_NO_PROP')\n    }\n  }\n\n  return {\n    entry: {\n      type: 'object',\n      name,\n      path,\n      cid,\n      node: block,\n      depth,\n      size: BigInt(block.length),\n      content: async function * () {\n        yield object\n      }\n    }\n  }\n}\n\nexport default resolve\n", "import errCode from 'err-code'\nimport * as mh from 'multiformats/hashes/digest'\nimport { CustomProgressEvent } from 'progress-events'\nimport extractDataFromBlock from '../utils/extract-data-from-block.js'\nimport validateOffsetAndLength from '../utils/validate-offset-and-length.js'\nimport type { ExporterOptions, Resolver, ExportProgress } from '../index.js'\n\nconst rawContent = (node: Uint8Array): ((options?: ExporterOptions) => AsyncGenerator<Uint8Array, void, undefined>) => {\n  async function * contentGenerator (options: ExporterOptions = {}): AsyncGenerator<Uint8Array, void, undefined> {\n    const {\n      start,\n      end\n    } = validateOffsetAndLength(node.length, options.offset, options.length)\n\n    const buf = extractDataFromBlock(node, 0n, start, end)\n\n    options.onProgress?.(new CustomProgressEvent<ExportProgress>('unixfs:exporter:progress:identity', {\n      bytesRead: BigInt(buf.byteLength),\n      totalBytes: end - start,\n      fileSize: BigInt(node.byteLength)\n    }))\n\n    yield buf\n  }\n\n  return contentGenerator\n}\n\nconst resolve: Resolver = async (cid, name, path, toResolve, resolve, depth, blockstore, options) => {\n  if (toResolve.length > 0) {\n    throw errCode(new Error(`No link named ${path} found in raw node ${cid}`), 'ERR_NOT_FOUND')\n  }\n  const buf = mh.decode(cid.multihash.bytes)\n\n  return {\n    entry: {\n      type: 'identity',\n      name,\n      path,\n      cid,\n      content: rawContent(buf.digest),\n      depth,\n      size: BigInt(buf.digest.length),\n      node: buf.digest\n    }\n  }\n}\n\nexport default resolve\n", "\nfunction extractDataFromBlock (block: Uint8Array, blockStart: bigint, requestedStart: bigint, requestedEnd: bigint): Uint8Array {\n  const blockLength = BigInt(block.length)\n  const blockEnd = BigInt(blockStart + blockLength)\n\n  if (requestedStart >= blockEnd || requestedEnd < blockStart) {\n    // If we are looking for a byte range that is starts after the start of the block,\n    // return an empty block.  This can happen when internal nodes contain data\n    return new Uint8Array(0)\n  }\n\n  if (requestedEnd >= blockStart && requestedEnd < blockEnd) {\n    // If the end byte is in the current block, truncate the block to the end byte\n    block = block.subarray(0, Number(requestedEnd - blockStart))\n  }\n\n  if (requestedStart >= blockStart && requestedStart < blockEnd) {\n    // If the start byte is in the current block, skip to the start byte\n    block = block.subarray(Number(requestedStart - blockStart))\n  }\n\n  return block\n}\n\nexport default extractDataFromBlock\n", "import errCode from 'err-code'\n\nconst validateOffsetAndLength = (size: number | bigint, offset: number | bigint = 0, length: number | bigint = size): { start: bigint, end: bigint } => {\n  const fileSize = BigInt(size)\n  const start = BigInt(offset ?? 0)\n  let end = BigInt(length)\n\n  if (end !== fileSize) {\n    end = start + end\n  }\n\n  if (end > fileSize) {\n    end = fileSize\n  }\n\n  if (start < 0n) {\n    throw errCode(new Error('Offset must be greater than or equal to 0'), 'ERR_INVALID_PARAMS')\n  }\n\n  if (start > fileSize) {\n    throw errCode(new Error('Offset must be less than the file size'), 'ERR_INVALID_PARAMS')\n  }\n\n  if (end < 0n) {\n    throw errCode(new Error('Length must be greater than or equal to 0'), 'ERR_INVALID_PARAMS')\n  }\n\n  if (end > fileSize) {\n    throw errCode(new Error('Length must be less than the file size'), 'ERR_INVALID_PARAMS')\n  }\n\n  return {\n    start,\n    end\n  }\n}\n\nexport default validateOffsetAndLength\n", "import errCode from 'err-code'\nimport { CustomProgressEvent } from 'progress-events'\nimport extractDataFromBlock from '../utils/extract-data-from-block.js'\nimport validateOffsetAndLength from '../utils/validate-offset-and-length.js'\nimport type { ExporterOptions, Resolver, ExportProgress } from '../index.js'\n\nconst rawContent = (node: Uint8Array): ((options?: ExporterOptions) => AsyncGenerator<Uint8Array, void, undefined>) => {\n  async function * contentGenerator (options: ExporterOptions = {}): AsyncGenerator<Uint8Array, void, undefined> {\n    const {\n      start,\n      end\n    } = validateOffsetAndLength(node.length, options.offset, options.length)\n\n    const buf = extractDataFromBlock(node, 0n, start, end)\n\n    options.onProgress?.(new CustomProgressEvent<ExportProgress>('unixfs:exporter:progress:raw', {\n      bytesRead: BigInt(buf.byteLength),\n      totalBytes: end - start,\n      fileSize: BigInt(node.byteLength)\n    }))\n\n    yield buf\n  }\n\n  return contentGenerator\n}\n\nconst resolve: Resolver = async (cid, name, path, toResolve, resolve, depth, blockstore, options) => {\n  if (toResolve.length > 0) {\n    throw errCode(new Error(`No link named ${path} found in raw node ${cid}`), 'ERR_NOT_FOUND')\n  }\n\n  const block = await blockstore.get(cid, options)\n\n  return {\n    entry: {\n      type: 'raw',\n      name,\n      path,\n      cid,\n      content: rawContent(block),\n      depth,\n      size: BigInt(block.length),\n      node: block\n    }\n  }\n}\n\nexport default resolve\n", "import { decode, type PBNode } from '@ipld/dag-pb'\nimport errCode from 'err-code'\nimport { UnixFS } from 'ipfs-unixfs'\nimport findShardCid from '../../utils/find-cid-in-shard.js'\nimport contentDirectory from './content/directory.js'\nimport contentFile from './content/file.js'\nimport contentHamtShardedDirectory from './content/hamt-sharded-directory.js'\nimport type { Resolver, UnixfsV1Resolver } from '../../index.js'\nimport type { CID } from 'multiformats/cid'\n\nconst findLinkCid = (node: PBNode, name: string): CID | undefined => {\n  const link = node.Links.find(link => link.Name === name)\n\n  return link?.Hash\n}\n\nconst contentExporters: Record<string, UnixfsV1Resolver> = {\n  raw: contentFile,\n  file: contentFile,\n  directory: contentDirectory,\n  'hamt-sharded-directory': contentHamtShardedDirectory,\n  metadata: (cid, node, unixfs, path, resolve, depth, blockstore) => {\n    return () => []\n  },\n  symlink: (cid, node, unixfs, path, resolve, depth, blockstore) => {\n    return () => []\n  }\n}\n\n// @ts-expect-error types are wrong\nconst unixFsResolver: Resolver = async (cid, name, path, toResolve, resolve, depth, blockstore, options) => {\n  const block = await blockstore.get(cid, options)\n  const node = decode(block)\n  let unixfs\n  let next\n\n  if (name == null) {\n    name = cid.toString()\n  }\n\n  if (node.Data == null) {\n    throw errCode(new Error('no data in PBNode'), 'ERR_NOT_UNIXFS')\n  }\n\n  try {\n    unixfs = UnixFS.unmarshal(node.Data)\n  } catch (err: any) {\n    // non-UnixFS dag-pb node? It could happen.\n    throw errCode(err, 'ERR_NOT_UNIXFS')\n  }\n\n  if (path == null) {\n    path = name\n  }\n\n  if (toResolve.length > 0) {\n    let linkCid\n\n    if (unixfs?.type === 'hamt-sharded-directory') {\n      // special case - unixfs v1 hamt shards\n      linkCid = await findShardCid(node, toResolve[0], blockstore)\n    } else {\n      linkCid = findLinkCid(node, toResolve[0])\n    }\n\n    if (linkCid == null) {\n      throw errCode(new Error('file does not exist'), 'ERR_NOT_FOUND')\n    }\n\n    // remove the path component we have resolved\n    const nextName = toResolve.shift()\n    const nextPath = `${path}/${nextName}`\n\n    next = {\n      cid: linkCid,\n      toResolve,\n      name: nextName ?? '',\n      path: nextPath\n    }\n  }\n\n  const content = contentExporters[unixfs.type](cid, node, unixfs, path, resolve, depth, blockstore)\n\n  if (content == null) {\n    throw errCode(new Error('could not find content exporter'), 'ERR_NOT_FOUND')\n  }\n\n  if (unixfs.isDirectory()) {\n    return {\n      entry: {\n        type: 'directory',\n        name,\n        path,\n        cid,\n        content,\n        unixfs,\n        depth,\n        node,\n        size: unixfs.fileSize()\n      },\n      next\n    }\n  }\n\n  return {\n    entry: {\n      type: 'file',\n      name,\n      path,\n      cid,\n      content,\n      unixfs,\n      depth,\n      node,\n      size: unixfs.fileSize()\n    },\n    next\n  }\n}\n\nexport default unixFsResolver\n", "\nimport { decode, type PBLink, type PBNode } from '@ipld/dag-pb'\nimport { murmur3128 } from '@multiformats/murmur3'\nimport { Bucket, type BucketPosition, createHAMT } from 'hamt-sharding'\nimport type { ExporterOptions, ShardTraversalContext, ReadableStorage } from '../index.js'\nimport type { CID } from 'multiformats/cid'\n\n// FIXME: this is copy/pasted from ipfs-unixfs-importer/src/options.js\nconst hashFn = async function (buf: Uint8Array): Promise<Uint8Array> {\n  return (await murmur3128.encode(buf))\n    // Murmur3 outputs 128 bit but, accidentally, IPFS Go's\n    // implementation only uses the first 64, so we must do the same\n    // for parity..\n    .slice(0, 8)\n    // Invert buffer because that's how Go impl does it\n    .reverse()\n}\n\nconst addLinksToHamtBucket = async (links: PBLink[], bucket: Bucket<boolean>, rootBucket: Bucket<boolean>): Promise<void> => {\n  await Promise.all(\n    links.map(async link => {\n      if (link.Name == null) {\n        // TODO(@rvagg): what do? this is technically possible\n        throw new Error('Unexpected Link without a Name')\n      }\n      if (link.Name.length === 2) {\n        const pos = parseInt(link.Name, 16)\n\n        bucket._putObjectAt(pos, new Bucket({\n          hash: rootBucket._options.hash,\n          bits: rootBucket._options.bits\n        }, bucket, pos))\n        return\n      }\n\n      await rootBucket.put(link.Name.substring(2), true)\n    })\n  )\n}\n\nconst toPrefix = (position: number): string => {\n  return position\n    .toString(16)\n    .toUpperCase()\n    .padStart(2, '0')\n    .substring(0, 2)\n}\n\nconst toBucketPath = (position: BucketPosition<boolean>): Array<Bucket<boolean>> => {\n  let bucket = position.bucket\n  const path = []\n\n  while (bucket._parent != null) {\n    path.push(bucket)\n\n    bucket = bucket._parent\n  }\n\n  path.push(bucket)\n\n  return path.reverse()\n}\n\nconst findShardCid = async (node: PBNode, name: string, blockstore: ReadableStorage, context?: ShardTraversalContext, options?: ExporterOptions): Promise<CID | undefined> => {\n  if (context == null) {\n    const rootBucket = createHAMT<boolean>({\n      hashFn\n    })\n\n    context = {\n      rootBucket,\n      hamtDepth: 1,\n      lastBucket: rootBucket\n    }\n  }\n\n  await addLinksToHamtBucket(node.Links, context.lastBucket, context.rootBucket)\n\n  const position = await context.rootBucket._findNewBucketAndPos(name)\n  let prefix = toPrefix(position.pos)\n  const bucketPath = toBucketPath(position)\n\n  if (bucketPath.length > context.hamtDepth) {\n    context.lastBucket = bucketPath[context.hamtDepth]\n\n    prefix = toPrefix(context.lastBucket._posAtParent)\n  }\n\n  const link = node.Links.find(link => {\n    if (link.Name == null) {\n      return false\n    }\n\n    const entryPrefix = link.Name.substring(0, 2)\n    const entryName = link.Name.substring(2)\n\n    if (entryPrefix !== prefix) {\n      // not the entry or subshard we're looking for\n      return false\n    }\n\n    if (entryName !== '' && entryName !== name) {\n      // not the entry we're looking for\n      return false\n    }\n\n    return true\n  })\n\n  if (link == null) {\n    return\n  }\n\n  if (link.Name != null && link.Name.substring(2) === name) {\n    return link.Hash\n  }\n\n  context.hamtDepth++\n\n  const block = await blockstore.get(link.Hash, options)\n  node = decode(block)\n\n  return findShardCid(node, name, blockstore, context, options)\n}\n\nexport default findShardCid\n", "import filter from 'it-filter'\nimport map from 'it-map'\nimport parallel from 'it-parallel'\nimport { pipe } from 'it-pipe'\nimport { CustomProgressEvent } from 'progress-events'\nimport type { ExporterOptions, ExportWalk, UnixfsV1DirectoryContent, UnixfsV1Resolver } from '../../../index.js'\n\nconst directoryContent: UnixfsV1Resolver = (cid, node, unixfs, path, resolve, depth, blockstore) => {\n  async function * yieldDirectoryContent (options: ExporterOptions = {}): UnixfsV1DirectoryContent {\n    const offset = options.offset ?? 0\n    const length = options.length ?? node.Links.length\n    const links = node.Links.slice(offset, length)\n\n    options.onProgress?.(new CustomProgressEvent<ExportWalk>('unixfs:exporter:walk:directory', {\n      cid\n    }))\n\n    yield * pipe(\n      links,\n      source => map(source, link => {\n        return async () => {\n          const linkName = link.Name ?? ''\n          const linkPath = `${path}/${linkName}`\n          const result = await resolve(link.Hash, linkName, linkPath, [], depth + 1, blockstore, options)\n          return result.entry\n        }\n      }),\n      source => parallel(source, { ordered: true }),\n      source => filter(source, entry => entry != null)\n    )\n  }\n\n  return yieldDirectoryContent\n}\n\nexport default directoryContent\n", "import peek from 'it-peekable'\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Filters the passed (async) iterable by using the filter function\n */\nfunction filter <T> (source: Iterable<T>, fn: (val: T) => Promise<boolean>): AsyncGenerator<T, void, undefined>\nfunction filter <T> (source: Iterable<T>, fn: (val: T) => boolean): Generator<T, void, undefined>\nfunction filter <T> (source: Iterable<T> | AsyncIterable<T>, fn: (val: T) => boolean | Promise<boolean>): AsyncGenerator<T, void, undefined>\nfunction filter <T> (source: Iterable<T> | AsyncIterable<T>, fn: (val: T) => boolean | Promise<boolean>): Generator<T, void, undefined> | AsyncGenerator<T, void, undefined> {\n  if (isAsyncIterable(source)) {\n    return (async function * () {\n      for await (const entry of source) {\n        if (await fn(entry)) {\n          yield entry\n        }\n      }\n    })()\n  }\n\n  // if mapping function returns a promise we have to return an async generator\n  const peekable = peek(source)\n  const { value, done } = peekable.next()\n\n  if (done === true) {\n    return (function * () {}())\n  }\n\n  const res = fn(value)\n\n  // @ts-expect-error .then is not present on O\n  if (typeof res.then === 'function') {\n    return (async function * () {\n      if (await res) {\n        yield value\n      }\n\n      for await (const entry of peekable) {\n        if (await fn(entry)) {\n          yield entry\n        }\n      }\n    })()\n  }\n\n  const func = fn as (val: T) => boolean\n\n  return (function * () {\n    if (res === true) {\n      yield value\n    }\n\n    for (const entry of peekable) {\n      if (func(entry)) {\n        yield entry\n      }\n    }\n  })()\n}\n\nexport default filter\n", "\ninterface Peek <T> {\n  peek: () => IteratorResult<T, undefined>\n}\n\ninterface AsyncPeek <T> {\n  peek: () => Promise<IteratorResult<T, undefined>>\n}\n\ninterface Push <T> {\n  push: (value: T) => void\n}\n\ntype Peekable <T> = Iterable<T> & Peek<T> & Push<T> & Iterator<T>\n\ntype AsyncPeekable <T> = AsyncIterable<T> & AsyncPeek<T> & Push<T> & AsyncIterator<T>\n\nfunction peekable <T> (iterable: Iterable<T>): Peekable<T>\nfunction peekable <T> (iterable: AsyncIterable<T>): AsyncPeekable<T>\nfunction peekable <T> (iterable: Iterable<T> | AsyncIterable<T>): Peekable<T> | AsyncPeekable<T> {\n  // @ts-expect-error can't use Symbol.asyncIterator to index iterable since it might be Iterable\n  const [iterator, symbol] = iterable[Symbol.asyncIterator] != null\n    // @ts-expect-error can't use Symbol.asyncIterator to index iterable since it might be Iterable\n    ? [iterable[Symbol.asyncIterator](), Symbol.asyncIterator]\n    // @ts-expect-error can't use Symbol.iterator to index iterable since it might be AsyncIterable\n    : [iterable[Symbol.iterator](), Symbol.iterator]\n\n  const queue: any[] = []\n\n  // @ts-expect-error can't use symbol to index peekable\n  return {\n    peek: () => {\n      return iterator.next()\n    },\n    push: (value: any) => {\n      queue.push(value)\n    },\n    next: () => {\n      if (queue.length > 0) {\n        return {\n          done: false,\n          value: queue.shift()\n        }\n      }\n\n      return iterator.next()\n    },\n    [symbol] () {\n      return this\n    }\n  }\n}\n\nexport default peekable\n", "import peek from 'it-peekable'\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Takes an (async) iterable and returns one with each item mapped by the passed\n * function\n */\nfunction map <I, O> (source: Iterable<I>, func: (val: I) => Promise<O>): AsyncGenerator<O, void, undefined>\nfunction map <I, O> (source: Iterable<I>, func: (val: I) => O): Generator<O, void, undefined>\nfunction map <I, O> (source: AsyncIterable<I> | Iterable<I>, func: (val: I) => O | Promise<O>): AsyncGenerator<O, void, undefined>\nfunction map <I, O> (source: AsyncIterable<I> | Iterable<I>, func: (val: I) => O | Promise<O>): AsyncGenerator<O, void, undefined> | Generator<O, void, undefined> {\n  if (isAsyncIterable(source)) {\n    return (async function * () {\n      for await (const val of source) {\n        yield func(val)\n      }\n    })()\n  }\n\n  // if mapping function returns a promise we have to return an async generator\n  const peekable = peek(source)\n  const { value, done } = peekable.next()\n\n  if (done === true) {\n    return (function * () {}())\n  }\n\n  const res = func(value)\n\n  // @ts-expect-error .then is not present on O\n  if (typeof res.then === 'function') {\n    return (async function * () {\n      yield await res\n\n      for await (const val of peekable) {\n        yield func(val)\n      }\n    })()\n  }\n\n  const fn = func as (val: I) => O\n\n  return (function * () {\n    yield res as O\n\n    for (const val of peekable) {\n      yield fn(val)\n    }\n  })()\n}\n\nexport default map\n", "/* global EventTarget Event */\n\nimport defer from 'p-defer'\n\ninterface Operation<T> {\n  done: boolean\n  ok: boolean\n  err: Error\n  value: T\n}\n\nconst CustomEvent = globalThis.CustomEvent ?? Event\n\nexport interface ParallelOptions {\n  /**\n   * How many jobs to execute in parallel (default: )\n   */\n  concurrency?: number\n  ordered?: boolean\n}\n\n/**\n * Takes an (async) iterator that emits promise-returning functions,\n * invokes them in parallel and emits the results as they become available but\n * in the same order as the input\n */\nexport default async function * parallel <T> (source: Iterable<() => Promise<T>> | AsyncIterable<() => Promise<T>>, options: ParallelOptions = {}): AsyncGenerator<T, void, undefined> {\n  let concurrency = options.concurrency ?? Infinity\n\n  if (concurrency < 1) {\n    concurrency = Infinity\n  }\n\n  const ordered = options.ordered == null ? false : options.ordered\n  const emitter = new EventTarget()\n\n  const ops: Array<Operation<T>> = []\n  let slotAvailable = defer()\n  let resultAvailable = defer()\n  let sourceFinished = false\n  let sourceErr: Error | undefined\n  let opErred = false\n\n  emitter.addEventListener('task-complete', () => {\n    resultAvailable.resolve()\n  })\n\n  void Promise.resolve().then(async () => {\n    try {\n      for await (const task of source) {\n        if (ops.length === concurrency) {\n          slotAvailable = defer()\n          await slotAvailable.promise\n        }\n\n        if (opErred) {\n          break\n        }\n\n        const op: any = {\n          done: false\n        }\n        ops.push(op)\n\n        task()\n          .then(result => {\n            op.done = true\n            op.ok = true\n            op.value = result\n            emitter.dispatchEvent(new CustomEvent('task-complete'))\n          }, err => {\n            op.done = true\n            op.err = err\n            emitter.dispatchEvent(new CustomEvent('task-complete'))\n          })\n      }\n\n      sourceFinished = true\n      emitter.dispatchEvent(new CustomEvent('task-complete'))\n    } catch (err: any) {\n      sourceErr = err\n      emitter.dispatchEvent(new CustomEvent('task-complete'))\n    }\n  })\n\n  function valuesAvailable (): boolean {\n    if (ordered) {\n      return ops[0]?.done\n    }\n\n    return Boolean(ops.find(op => op.done))\n  }\n\n  function * yieldOrderedValues (): Generator<T, void, unknown> {\n    while ((ops.length > 0) && ops[0].done) {\n      const op = ops[0]\n      ops.shift()\n\n      if (op.ok) {\n        yield op.value\n      } else {\n        // allow the source to exit\n        opErred = true\n        slotAvailable.resolve()\n\n        throw op.err\n      }\n\n      slotAvailable.resolve()\n    }\n  }\n\n  function * yieldUnOrderedValues (): Generator<T, void, unknown> {\n    // more values can become available while we wait for `yield`\n    // to return control to this function\n    while (valuesAvailable()) {\n      for (let i = 0; i < ops.length; i++) {\n        if (ops[i].done) {\n          const op = ops[i]\n          ops.splice(i, 1)\n          i--\n\n          if (op.ok) {\n            yield op.value\n          } else {\n            opErred = true\n            slotAvailable.resolve()\n\n            throw op.err\n          }\n\n          slotAvailable.resolve()\n        }\n      }\n    }\n  }\n\n  while (true) {\n    if (!valuesAvailable()) {\n      resultAvailable = defer()\n      await resultAvailable.promise\n    }\n\n    if (sourceErr != null) {\n      // the source threw an error, propagate it\n      throw sourceErr\n    }\n\n    if (ordered) {\n      yield * yieldOrderedValues()\n    } else {\n      yield * yieldUnOrderedValues()\n    }\n\n    if (sourceFinished && ops.length === 0) {\n      // not waiting for any results and no more tasks so we are done\n      break\n    }\n  }\n}\n", "export default function pDefer() {\n\tconst deferred = {};\n\n\tdeferred.promise = new Promise((resolve, reject) => {\n\t\tdeferred.resolve = resolve;\n\t\tdeferred.reject = reject;\n\t});\n\n\treturn deferred;\n}\n", "import { pushable } from 'it-pushable'\nimport merge from 'it-merge'\nimport type { Duplex, Transform, Sink } from 'it-stream-types'\n\ninterface SourceFn<A = any> { (): A }\n\ntype PipeSource<A = any> =\n  Iterable<A> |\n  AsyncIterable<A> |\n  SourceFn<A> |\n  Duplex<A, any, any>\n\ntype PipeTransform<A = any, B = any> =\n  Transform<A, B> |\n  Duplex<B, A>\n\ntype PipeSink<A = any, B = any> =\n  Sink<A, B> |\n  Duplex<any, A, B>\n\ntype PipeOutput<A> =\n  A extends Sink<any> ? ReturnType<A> :\n    A extends Duplex<any, any, any> ? ReturnType<A['sink']> :\n      never\n\n// single item pipe output includes pipe source types\ntype SingleItemPipeOutput<A> =\n  A extends Iterable<any> ? A :\n    A extends AsyncIterable<any> ? A :\n      A extends SourceFn ? ReturnType<A> :\n        A extends Duplex<any, any, any> ? A['source'] :\n          PipeOutput<A>\n\ntype PipeFnInput<A> =\n  A extends Iterable<any> ? A :\n    A extends AsyncIterable<any> ? A :\n      A extends SourceFn ? ReturnType<A> :\n        A extends Transform<any, any> ? ReturnType<A> :\n          A extends Duplex<any, any, any> ? A['source'] :\n            never\n\n// one item, just a pass-through\nexport function pipe<\n  A extends PipeSource\n> (\n  source: A\n): SingleItemPipeOutput<A>\n\n// two items, source to sink\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeSink<PipeFnInput<A>>\n> (\n  source: A,\n  sink: B\n): PipeOutput<B>\n\n// three items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeSink<PipeFnInput<B>>\n> (\n  source: A,\n  transform1: B,\n  sink: C\n): PipeOutput<C>\n\n// many items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeSink<PipeFnInput<C>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  sink: D\n): PipeOutput<D>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeSink<PipeFnInput<D>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  sink: E\n): PipeOutput<E>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeSink<PipeFnInput<E>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  sink: F\n): PipeOutput<F>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeTransform<PipeFnInput<E>>,\n  G extends PipeSink<PipeFnInput<F>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  transform5: F,\n  sink: G\n): PipeOutput<G>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeTransform<PipeFnInput<E>>,\n  G extends PipeTransform<PipeFnInput<F>>,\n  H extends PipeSink<PipeFnInput<G>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  transform5: F,\n  transform6: G,\n  sink: H\n): PipeOutput<H>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeTransform<PipeFnInput<E>>,\n  G extends PipeTransform<PipeFnInput<F>>,\n  H extends PipeTransform<PipeFnInput<G>>,\n  I extends PipeSink<PipeFnInput<H>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  transform5: F,\n  transform6: G,\n  transform7: H,\n  sink: I\n): PipeOutput<I>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeTransform<PipeFnInput<E>>,\n  G extends PipeTransform<PipeFnInput<F>>,\n  H extends PipeTransform<PipeFnInput<G>>,\n  I extends PipeTransform<PipeFnInput<H>>,\n  J extends PipeSink<PipeFnInput<I>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  transform5: F,\n  transform6: G,\n  transform7: H,\n  transform8: I,\n  sink: J\n): PipeOutput<J>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeTransform<PipeFnInput<E>>,\n  G extends PipeTransform<PipeFnInput<F>>,\n  H extends PipeTransform<PipeFnInput<G>>,\n  I extends PipeTransform<PipeFnInput<H>>,\n  J extends PipeTransform<PipeFnInput<I>>,\n  K extends PipeSink<PipeFnInput<J>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  transform5: F,\n  transform6: G,\n  transform7: H,\n  transform8: I,\n  transform9: J,\n  sink: K\n): PipeOutput<K>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeTransform<PipeFnInput<E>>,\n  G extends PipeTransform<PipeFnInput<F>>,\n  H extends PipeTransform<PipeFnInput<G>>,\n  I extends PipeTransform<PipeFnInput<H>>,\n  J extends PipeTransform<PipeFnInput<I>>,\n  K extends PipeTransform<PipeFnInput<J>>,\n  L extends PipeSink<PipeFnInput<K>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  transform5: F,\n  transform6: G,\n  transform7: H,\n  transform8: I,\n  transform9: J,\n  transform10: K,\n  sink: L\n): PipeOutput<L>\n\nexport function pipe (first: any, ...rest: any[]): any {\n  if (first == null) {\n    throw new Error('Empty pipeline')\n  }\n\n  // Duplex at start: wrap in function and return duplex source\n  if (isDuplex(first)) {\n    const duplex = first\n    first = () => duplex.source\n  // Iterable at start: wrap in function\n  } else if (isIterable(first) || isAsyncIterable(first)) {\n    const source = first\n    first = () => source\n  }\n\n  const fns = [first, ...rest]\n\n  if (fns.length > 1) {\n    // Duplex at end: use duplex sink\n    if (isDuplex(fns[fns.length - 1])) {\n      fns[fns.length - 1] = fns[fns.length - 1].sink\n    }\n  }\n\n  if (fns.length > 2) {\n    // Duplex in the middle, consume source with duplex sink and return duplex source\n    for (let i = 1; i < fns.length - 1; i++) {\n      if (isDuplex(fns[i])) {\n        fns[i] = duplexPipelineFn(fns[i])\n      }\n    }\n  }\n\n  return rawPipe(...fns)\n}\n\nexport const rawPipe = (...fns: any): any => {\n  let res\n  while (fns.length > 0) {\n    res = fns.shift()(res)\n  }\n  return res\n}\n\nconst isAsyncIterable = (obj: any): obj is AsyncIterable<unknown> => {\n  return obj?.[Symbol.asyncIterator] != null\n}\n\nconst isIterable = (obj: any): obj is Iterable<unknown> => {\n  return obj?.[Symbol.iterator] != null\n}\n\nconst isDuplex = (obj: any): obj is Duplex => {\n  if (obj == null) {\n    return false\n  }\n\n  return obj.sink != null && obj.source != null\n}\n\nconst duplexPipelineFn = (duplex: Duplex<any, any, any>) => {\n  return (source: any) => {\n    const p = duplex.sink(source)\n\n    if (p?.then != null) {\n      const stream = pushable<any>({\n        objectMode: true\n      })\n      p.then(() => {\n        stream.end()\n      }, (err: Error) => {\n        stream.end(err)\n      })\n\n      let sourceWrap: () => Iterable<any> | AsyncIterable<any>\n      const source = duplex.source\n\n      if (isAsyncIterable(source)) {\n        sourceWrap = async function * () {\n          yield * source\n          stream.end()\n        }\n      } else if (isIterable(source)) {\n        sourceWrap = function * () {\n          yield * source\n          stream.end()\n        }\n      } else {\n        throw new Error('Unknown duplex source type - must be Iterable or AsyncIterable')\n      }\n\n      return merge(stream, sourceWrap())\n    }\n\n    return duplex.source\n  }\n}\n", "/**\n * @packageDocumentation\n *\n * An iterable that you can push values into.\n *\n * @example\n *\n * ```js\n * import { pushable } from 'it-pushable'\n *\n * const source = pushable()\n *\n * setTimeout(() => source.push('hello'), 100)\n * setTimeout(() => source.push('world'), 200)\n * setTimeout(() => source.end(), 300)\n *\n * const start = Date.now()\n *\n * for await (const value of source) {\n *   console.log(`got \"${value}\" after ${Date.now() - start}ms`)\n * }\n * console.log(`done after ${Date.now() - start}ms`)\n *\n * // Output:\n * // got \"hello\" after 105ms\n * // got \"world\" after 207ms\n * // done after 309ms\n * ```\n *\n * @example\n *\n * ```js\n * import { pushableV } from 'it-pushable'\n * import all from 'it-all'\n *\n * const source = pushableV()\n *\n * source.push(1)\n * source.push(2)\n * source.push(3)\n * source.end()\n *\n * console.info(await all(source))\n *\n * // Output:\n * // [ [1, 2, 3] ]\n * ```\n */\n\nimport { FIFO, Next } from './fifo.js'\n\ninterface BasePushable<T> {\n  /**\n   * End the iterable after all values in the buffer (if any) have been yielded. If an\n   * error is passed the buffer is cleared immediately and the next iteration will\n   * throw the passed error\n   */\n  end: (err?: Error) => this\n\n  /**\n   * Push a value into the iterable. Values are yielded from the iterable in the order\n   * they are pushed. Values not yet consumed from the iterable are buffered.\n   */\n  push: (value: T) => this\n\n  /**\n   * This property contains the number of bytes (or objects) in the queue ready to be read.\n   *\n   * If `objectMode` is true, this is the number of objects in the queue, if false it's the\n   * total number of bytes in the queue.\n   */\n  readableLength: number\n}\n\n/**\n * An iterable that you can push values into.\n */\nexport interface Pushable<T, R = void, N = unknown> extends AsyncGenerator<T, R, N>, BasePushable<T> {}\n\n/**\n * Similar to `pushable`, except it yields multiple buffered chunks at a time. All values yielded from the iterable will be arrays.\n */\nexport interface PushableV<T, R = void, N = unknown> extends AsyncGenerator<T[], R, N>, BasePushable<T> {}\n\nexport interface Options {\n  /**\n   * A boolean value that means non-`Uint8Array`s will be passed to `.push`, default: `false`\n   */\n  objectMode?: boolean\n\n  /**\n   * A function called after *all* values have been yielded from the iterator (including\n   * buffered values). In the case when the iterator is ended with an error it will be\n   * passed the error as a parameter.\n   */\n  onEnd?: (err?: Error) => void\n}\n\ntype NextResult<T> = { done: false, value: T } | { done: true }\n\ninterface getNext<T, V = T> { (buffer: FIFO<T>): NextResult<V> }\n\nexport interface ObjectPushableOptions extends Options {\n  objectMode: true\n}\n\nexport interface BytePushableOptions extends Options {\n  objectMode?: false\n}\n\n/**\n * Create a new async iterable. The values yielded from calls to `.next()`\n * or when used in a `for await of`loop are \"pushed\" into the iterable.\n * Returns an async iterable object with additional methods.\n */\nexport function pushable<T extends { byteLength: number } = Uint8Array> (options?: BytePushableOptions): Pushable<T>\nexport function pushable<T> (options: ObjectPushableOptions): Pushable<T>\nexport function pushable<T> (options: Options = {}): Pushable<T> {\n  const getNext = (buffer: FIFO<T>): NextResult<T> => {\n    const next: Next<T> | undefined = buffer.shift()\n\n    if (next == null) {\n      return { done: true }\n    }\n\n    if (next.error != null) {\n      throw next.error\n    }\n\n    return {\n      done: next.done === true,\n      // @ts-expect-error\n      value: next.value\n    }\n  }\n\n  return _pushable<T, T, Pushable<T>>(getNext, options)\n}\n\nexport function pushableV<T extends { byteLength: number } = Uint8Array> (options?: BytePushableOptions): PushableV<T>\nexport function pushableV<T> (options: ObjectPushableOptions): PushableV<T>\nexport function pushableV<T> (options: Options = {}): PushableV<T> {\n  const getNext = (buffer: FIFO<T>): NextResult<T[]> => {\n    let next: Next<T> | undefined\n    const values: T[] = []\n\n    while (!buffer.isEmpty()) {\n      next = buffer.shift()\n\n      if (next == null) {\n        break\n      }\n\n      if (next.error != null) {\n        throw next.error\n      }\n\n      if (next.done === false) {\n        // @ts-expect-error\n        values.push(next.value)\n      }\n    }\n\n    if (next == null) {\n      return { done: true }\n    }\n\n    return {\n      done: next.done === true,\n      value: values\n    }\n  }\n\n  return _pushable<T, T[], PushableV<T>>(getNext, options)\n}\n\nfunction _pushable<PushType, ValueType, ReturnType> (getNext: getNext<PushType, ValueType>, options?: Options): ReturnType {\n  options = options ?? {}\n  let onEnd = options.onEnd\n  let buffer = new FIFO<PushType>()\n  let pushable: any\n  let onNext: ((next: Next<PushType>) => ReturnType) | null\n  let ended: boolean\n\n  const waitNext = async (): Promise<NextResult<ValueType>> => {\n    if (!buffer.isEmpty()) {\n      return getNext(buffer)\n    }\n\n    if (ended) {\n      return { done: true }\n    }\n\n    return await new Promise((resolve, reject) => {\n      onNext = (next: Next<PushType>) => {\n        onNext = null\n        buffer.push(next)\n\n        try {\n          resolve(getNext(buffer))\n        } catch (err) {\n          reject(err)\n        }\n\n        return pushable\n      }\n    })\n  }\n\n  const bufferNext = (next: Next<PushType>): ReturnType => {\n    if (onNext != null) {\n      return onNext(next)\n    }\n\n    buffer.push(next)\n    return pushable\n  }\n\n  const bufferError = (err: Error): ReturnType => {\n    buffer = new FIFO()\n\n    if (onNext != null) {\n      return onNext({ error: err })\n    }\n\n    buffer.push({ error: err })\n    return pushable\n  }\n\n  const push = (value: PushType): ReturnType => {\n    if (ended) {\n      return pushable\n    }\n\n    // @ts-expect-error `byteLength` is not declared on PushType\n    if (options?.objectMode !== true && value?.byteLength == null) {\n      throw new Error('objectMode was not true but tried to push non-Uint8Array value')\n    }\n\n    return bufferNext({ done: false, value })\n  }\n  const end = (err?: Error): ReturnType => {\n    if (ended) return pushable\n    ended = true\n\n    return (err != null) ? bufferError(err) : bufferNext({ done: true })\n  }\n  const _return = (): NextResult<ValueType> => {\n    buffer = new FIFO()\n    end()\n\n    return { done: true }\n  }\n  const _throw = (err: Error): NextResult<ValueType> => {\n    end(err)\n\n    return { done: true }\n  }\n\n  pushable = {\n    [Symbol.asyncIterator] () { return this },\n    next: waitNext,\n    return: _return,\n    throw: _throw,\n    push,\n    end,\n    get readableLength () {\n      return buffer.size\n    }\n  }\n\n  if (onEnd == null) {\n    return pushable\n  }\n\n  const _pushable = pushable\n\n  pushable = {\n    [Symbol.asyncIterator] () { return this },\n    next () {\n      return _pushable.next()\n    },\n    throw (err: Error) {\n      _pushable.throw(err)\n\n      if (onEnd != null) {\n        onEnd(err)\n        onEnd = undefined\n      }\n\n      return { done: true }\n    },\n    return () {\n      _pushable.return()\n\n      if (onEnd != null) {\n        onEnd()\n        onEnd = undefined\n      }\n\n      return { done: true }\n    },\n    push,\n    end (err: Error) {\n      _pushable.end(err)\n\n      if (onEnd != null) {\n        onEnd(err)\n        onEnd = undefined\n      }\n\n      return pushable\n    },\n    get readableLength () {\n      return _pushable.readableLength\n    }\n  }\n\n  return pushable\n}\n", "// ported from https://www.npmjs.com/package/fast-fifo\n\nexport interface Next<T> {\n  done?: boolean\n  error?: Error\n  value?: T\n}\n\nclass FixedFIFO<T> {\n  public buffer: Array<Next<T> | undefined>\n  private readonly mask: number\n  private top: number\n  private btm: number\n  public next: FixedFIFO<T> | null\n\n  constructor (hwm: number) {\n    if (!(hwm > 0) || ((hwm - 1) & hwm) !== 0) {\n      throw new Error('Max size for a FixedFIFO should be a power of two')\n    }\n\n    this.buffer = new Array(hwm)\n    this.mask = hwm - 1\n    this.top = 0\n    this.btm = 0\n    this.next = null\n  }\n\n  push (data: Next<T>): boolean {\n    if (this.buffer[this.top] !== undefined) {\n      return false\n    }\n\n    this.buffer[this.top] = data\n    this.top = (this.top + 1) & this.mask\n\n    return true\n  }\n\n  shift (): Next<T> | undefined {\n    const last = this.buffer[this.btm]\n\n    if (last === undefined) {\n      return undefined\n    }\n\n    this.buffer[this.btm] = undefined\n    this.btm = (this.btm + 1) & this.mask\n    return last\n  }\n\n  isEmpty (): boolean {\n    return this.buffer[this.btm] === undefined\n  }\n}\n\nexport interface FIFOOptions {\n  /**\n   * When the queue reaches this size, it will be split into head/tail parts\n   */\n  splitLimit?: number\n}\n\nexport class FIFO<T> {\n  public size: number\n  private readonly hwm: number\n  private head: FixedFIFO<T>\n  private tail: FixedFIFO<T>\n\n  constructor (options: FIFOOptions = {}) {\n    this.hwm = options.splitLimit ?? 16\n    this.head = new FixedFIFO<T>(this.hwm)\n    this.tail = this.head\n    this.size = 0\n  }\n\n  calculateSize (obj: any): number {\n    if (obj?.byteLength != null) {\n      return obj.byteLength\n    }\n\n    return 1\n  }\n\n  push (val: Next<T>): void {\n    if (val?.value != null) {\n      this.size += this.calculateSize(val.value)\n    }\n\n    if (!this.head.push(val)) {\n      const prev = this.head\n      this.head = prev.next = new FixedFIFO<T>(2 * this.head.buffer.length)\n      this.head.push(val)\n    }\n  }\n\n  shift (): Next<T> | undefined {\n    let val = this.tail.shift()\n\n    if (val === undefined && (this.tail.next != null)) {\n      const next = this.tail.next\n      this.tail.next = null\n      this.tail = next\n      val = this.tail.shift()\n    }\n\n    if (val?.value != null) {\n      this.size -= this.calculateSize(val.value)\n    }\n\n    return val\n  }\n\n  isEmpty (): boolean {\n    return this.head.isEmpty()\n  }\n}\n", "import { pushable } from 'it-pushable'\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Treat one or more iterables as a single iterable.\n *\n * Nb. sources are iterated over in parallel so the\n * order of emitted items is not guaranteed.\n */\nfunction merge <T> (...sources: Array<Iterable<T>>): Generator<T, void, undefined>\nfunction merge <T> (...sources: Array<AsyncIterable<T> | Iterable<T>>): AsyncGenerator<T, void, undefined>\nfunction merge <T> (...sources: Array<AsyncIterable<T> | Iterable<T>>): AsyncGenerator<T, void, undefined> | Generator<T, void, undefined> {\n  const syncSources: Array<Iterable<T>> = []\n\n  for (const source of sources) {\n    if (!isAsyncIterable(source)) {\n      syncSources.push(source)\n    }\n  }\n\n  if (syncSources.length === sources.length) {\n    // all sources are synchronous\n    return (function * () {\n      for (const source of syncSources) {\n        yield * source\n      }\n    })()\n  }\n\n  return (async function * () {\n    const output = pushable<T>({\n      objectMode: true\n    })\n\n    void Promise.resolve().then(async () => {\n      try {\n        await Promise.all(\n          sources.map(async (source) => {\n            for await (const item of source) {\n              output.push(item)\n            }\n          })\n        )\n\n        output.end()\n      } catch (err: any) {\n        output.end(err)\n      }\n    })\n\n    yield * output\n  })()\n}\n\nexport default merge\n", "import * as dagPb from '@ipld/dag-pb'\nimport errCode from 'err-code'\nimport { UnixFS } from 'ipfs-unixfs'\nimport map from 'it-map'\nimport parallel from 'it-parallel'\nimport { pipe } from 'it-pipe'\nimport { type Pushable, pushable } from 'it-pushable'\nimport * as raw from 'multiformats/codecs/raw'\nimport PQueue from 'p-queue'\nimport { CustomProgressEvent } from 'progress-events'\nimport extractDataFromBlock from '../../../utils/extract-data-from-block.js'\nimport validateOffsetAndLength from '../../../utils/validate-offset-and-length.js'\nimport type { ExporterOptions, UnixfsV1FileContent, UnixfsV1Resolver, ReadableStorage, ExportProgress, ExportWalk } from '../../../index.js'\n\nasync function walkDAG (blockstore: ReadableStorage, node: dagPb.PBNode | Uint8Array, queue: Pushable<Uint8Array>, streamPosition: bigint, start: bigint, end: bigint, options: ExporterOptions): Promise<void> {\n  // a `raw` node\n  if (node instanceof Uint8Array) {\n    const buf = extractDataFromBlock(node, streamPosition, start, end)\n\n    queue.push(buf)\n\n    return\n  }\n\n  if (node.Data == null) {\n    throw errCode(new Error('no data in PBNode'), 'ERR_NOT_UNIXFS')\n  }\n\n  let file: UnixFS\n\n  try {\n    file = UnixFS.unmarshal(node.Data)\n  } catch (err: any) {\n    throw errCode(err, 'ERR_NOT_UNIXFS')\n  }\n\n  // might be a unixfs `raw` node or have data on intermediate nodes\n  if (file.data != null) {\n    const data = file.data\n    const buf = extractDataFromBlock(data, streamPosition, start, end)\n\n    queue.push(buf)\n\n    streamPosition += BigInt(buf.byteLength)\n  }\n\n  const childOps: Array<{ link: dagPb.PBLink, blockStart: bigint }> = []\n\n  if (node.Links.length !== file.blockSizes.length) {\n    throw errCode(new Error('Inconsistent block sizes and dag links'), 'ERR_NOT_UNIXFS')\n  }\n\n  for (let i = 0; i < node.Links.length; i++) {\n    const childLink = node.Links[i]\n    const childStart = streamPosition // inclusive\n    const childEnd = childStart + file.blockSizes[i] // exclusive\n\n    if ((start >= childStart && start < childEnd) || // child has offset byte\n        (end >= childStart && end <= childEnd) || // child has end byte\n        (start < childStart && end > childEnd)) { // child is between offset and end bytes\n      childOps.push({\n        link: childLink,\n        blockStart: streamPosition\n      })\n    }\n\n    streamPosition = childEnd\n\n    if (streamPosition > end) {\n      break\n    }\n  }\n\n  await pipe(\n    childOps,\n    (source) => map(source, (op) => {\n      return async () => {\n        const block = await blockstore.get(op.link.Hash, options)\n\n        return {\n          ...op,\n          block\n        }\n      }\n    }),\n    (source) => parallel(source, {\n      ordered: true\n    }),\n    async (source) => {\n      for await (const { link, block, blockStart } of source) {\n        let child: dagPb.PBNode | Uint8Array\n        switch (link.Hash.code) {\n          case dagPb.code:\n            child = dagPb.decode(block)\n            break\n          case raw.code:\n            child = block\n            break\n          default:\n            queue.end(errCode(new Error(`Unsupported codec: ${link.Hash.code}`), 'ERR_NOT_UNIXFS'))\n            return\n        }\n\n        // create a queue for this child - we use a queue instead of recursion\n        // to avoid overflowing the stack\n        const childQueue = new PQueue({\n          concurrency: 1\n        })\n        // if any of the child jobs error, end the read queue with the error\n        childQueue.on('error', error => {\n          queue.end(error)\n        })\n\n        // if the job rejects the 'error' event will be emitted on the child queue\n        void childQueue.add(async () => {\n          options.onProgress?.(new CustomProgressEvent<ExportWalk>('unixfs:exporter:walk:file', {\n            cid: link.Hash\n          }))\n\n          await walkDAG(blockstore, child, queue, blockStart, start, end, options)\n        })\n\n        // wait for this child to complete before moving on to the next\n        await childQueue.onIdle()\n      }\n    }\n  )\n\n  if (streamPosition >= end) {\n    queue.end()\n  }\n}\n\nconst fileContent: UnixfsV1Resolver = (cid, node, unixfs, path, resolve, depth, blockstore) => {\n  async function * yieldFileContent (options: ExporterOptions = {}): UnixfsV1FileContent {\n    const fileSize = unixfs.fileSize()\n\n    if (fileSize === undefined) {\n      throw new Error('File was a directory')\n    }\n\n    const {\n      start,\n      end\n    } = validateOffsetAndLength(fileSize, options.offset, options.length)\n\n    if (end === 0n) {\n      return\n    }\n\n    let read = 0n\n    const wanted = end - start\n    const queue = pushable()\n\n    options.onProgress?.(new CustomProgressEvent<ExportWalk>('unixfs:exporter:walk:file', {\n      cid\n    }))\n\n    void walkDAG(blockstore, node, queue, 0n, start, end, options)\n      .catch(err => {\n        queue.end(err)\n      })\n\n    for await (const buf of queue) {\n      if (buf == null) {\n        continue\n      }\n\n      read += BigInt(buf.byteLength)\n\n      if (read > wanted) {\n        queue.end()\n        throw errCode(new Error('Read too many bytes - the file size reported by the UnixFS data in the root node may be incorrect'), 'ERR_OVER_READ')\n      }\n\n      if (read === wanted) {\n        queue.end()\n      }\n\n      options.onProgress?.(new CustomProgressEvent<ExportProgress>('unixfs:exporter:progress:unixfs:file', {\n        bytesRead: read,\n        totalBytes: wanted,\n        fileSize\n      }))\n\n      yield buf\n    }\n\n    if (read < wanted) {\n      throw errCode(new Error('Traversed entire DAG but did not read enough bytes'), 'ERR_UNDER_READ')\n    }\n  }\n\n  return yieldFileContent\n}\n\nexport default fileContent\n", "var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _PQueue_instances, _PQueue_carryoverConcurrencyCount, _PQueue_isIntervalIgnored, _PQueue_intervalCount, _PQueue_intervalCap, _PQueue_interval, _PQueue_intervalEnd, _PQueue_intervalId, _PQueue_timeoutId, _PQueue_queue, _PQueue_queueClass, _PQueue_pending, _PQueue_concurrency, _PQueue_isPaused, _PQueue_throwOnTimeout, _PQueue_doesIntervalAllowAnother_get, _PQueue_doesConcurrentAllowAnother_get, _PQueue_next, _PQueue_onResumeInterval, _PQueue_isIntervalPaused_get, _PQueue_tryToStartAnother, _PQueue_initializeIntervalIfNeeded, _PQueue_onInterval, _PQueue_processQueue, _PQueue_throwOnAbort, _PQueue_onEvent;\nimport EventEmitter from 'eventemitter3';\nimport pTimeout, { TimeoutError } from 'p-timeout';\nimport PriorityQueue from './priority-queue.js';\n/**\nThe error thrown by `queue.add()` when a job is aborted before it is run. See `signal`.\n*/\nexport class AbortError extends Error {\n}\n/**\nPromise queue with concurrency control.\n*/\nexport default class PQueue extends EventEmitter {\n    // TODO: The `throwOnTimeout` option should affect the return types of `add()` and `addAll()`\n    constructor(options) {\n        var _a, _b, _c, _d;\n        super();\n        _PQueue_instances.add(this);\n        _PQueue_carryoverConcurrencyCount.set(this, void 0);\n        _PQueue_isIntervalIgnored.set(this, void 0);\n        _PQueue_intervalCount.set(this, 0);\n        _PQueue_intervalCap.set(this, void 0);\n        _PQueue_interval.set(this, void 0);\n        _PQueue_intervalEnd.set(this, 0);\n        _PQueue_intervalId.set(this, void 0);\n        _PQueue_timeoutId.set(this, void 0);\n        _PQueue_queue.set(this, void 0);\n        _PQueue_queueClass.set(this, void 0);\n        _PQueue_pending.set(this, 0);\n        // The `!` is needed because of https://github.com/microsoft/TypeScript/issues/32194\n        _PQueue_concurrency.set(this, void 0);\n        _PQueue_isPaused.set(this, void 0);\n        _PQueue_throwOnTimeout.set(this, void 0);\n        /**\n        Per-operation timeout in milliseconds. Operations fulfill once `timeout` elapses if they haven't already.\n    \n        Applies to each future operation.\n        */\n        Object.defineProperty(this, \"timeout\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n        options = {\n            carryoverConcurrencyCount: false,\n            intervalCap: Number.POSITIVE_INFINITY,\n            interval: 0,\n            concurrency: Number.POSITIVE_INFINITY,\n            autoStart: true,\n            queueClass: PriorityQueue,\n            ...options,\n        };\n        if (!(typeof options.intervalCap === 'number' && options.intervalCap >= 1)) {\n            throw new TypeError(`Expected \\`intervalCap\\` to be a number from 1 and up, got \\`${(_b = (_a = options.intervalCap) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : ''}\\` (${typeof options.intervalCap})`);\n        }\n        if (options.interval === undefined || !(Number.isFinite(options.interval) && options.interval >= 0)) {\n            throw new TypeError(`Expected \\`interval\\` to be a finite number >= 0, got \\`${(_d = (_c = options.interval) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : ''}\\` (${typeof options.interval})`);\n        }\n        __classPrivateFieldSet(this, _PQueue_carryoverConcurrencyCount, options.carryoverConcurrencyCount, \"f\");\n        __classPrivateFieldSet(this, _PQueue_isIntervalIgnored, options.intervalCap === Number.POSITIVE_INFINITY || options.interval === 0, \"f\");\n        __classPrivateFieldSet(this, _PQueue_intervalCap, options.intervalCap, \"f\");\n        __classPrivateFieldSet(this, _PQueue_interval, options.interval, \"f\");\n        __classPrivateFieldSet(this, _PQueue_queue, new options.queueClass(), \"f\");\n        __classPrivateFieldSet(this, _PQueue_queueClass, options.queueClass, \"f\");\n        this.concurrency = options.concurrency;\n        this.timeout = options.timeout;\n        __classPrivateFieldSet(this, _PQueue_throwOnTimeout, options.throwOnTimeout === true, \"f\");\n        __classPrivateFieldSet(this, _PQueue_isPaused, options.autoStart === false, \"f\");\n    }\n    get concurrency() {\n        return __classPrivateFieldGet(this, _PQueue_concurrency, \"f\");\n    }\n    set concurrency(newConcurrency) {\n        if (!(typeof newConcurrency === 'number' && newConcurrency >= 1)) {\n            throw new TypeError(`Expected \\`concurrency\\` to be a number from 1 and up, got \\`${newConcurrency}\\` (${typeof newConcurrency})`);\n        }\n        __classPrivateFieldSet(this, _PQueue_concurrency, newConcurrency, \"f\");\n        __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_processQueue).call(this);\n    }\n    async add(function_, options = {}) {\n        options = {\n            timeout: this.timeout,\n            throwOnTimeout: __classPrivateFieldGet(this, _PQueue_throwOnTimeout, \"f\"),\n            ...options,\n        };\n        return new Promise((resolve, reject) => {\n            __classPrivateFieldGet(this, _PQueue_queue, \"f\").enqueue(async () => {\n                var _a;\n                var _b, _c;\n                __classPrivateFieldSet(this, _PQueue_pending, (_b = __classPrivateFieldGet(this, _PQueue_pending, \"f\"), _b++, _b), \"f\");\n                __classPrivateFieldSet(this, _PQueue_intervalCount, (_c = __classPrivateFieldGet(this, _PQueue_intervalCount, \"f\"), _c++, _c), \"f\");\n                try {\n                    // TODO: Use options.signal?.throwIfAborted() when targeting Node.js 18\n                    if ((_a = options.signal) === null || _a === void 0 ? void 0 : _a.aborted) {\n                        // TODO: Use ABORT_ERR code when targeting Node.js 16 (https://nodejs.org/docs/latest-v16.x/api/errors.html#abort_err)\n                        throw new AbortError('The task was aborted.');\n                    }\n                    let operation = function_({ signal: options.signal });\n                    if (options.timeout) {\n                        operation = pTimeout(Promise.resolve(operation), options.timeout);\n                    }\n                    if (options.signal) {\n                        operation = Promise.race([operation, __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_throwOnAbort).call(this, options.signal)]);\n                    }\n                    const result = await operation;\n                    resolve(result);\n                    this.emit('completed', result);\n                }\n                catch (error) {\n                    if (error instanceof TimeoutError && !options.throwOnTimeout) {\n                        resolve();\n                        return;\n                    }\n                    reject(error);\n                    this.emit('error', error);\n                }\n                finally {\n                    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_next).call(this);\n                }\n            }, options);\n            this.emit('add');\n            __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_tryToStartAnother).call(this);\n        });\n    }\n    async addAll(functions, options) {\n        return Promise.all(functions.map(async (function_) => this.add(function_, options)));\n    }\n    /**\n    Start (or resume) executing enqueued tasks within concurrency limit. No need to call this if queue is not paused (via `options.autoStart = false` or by `.pause()` method.)\n    */\n    start() {\n        if (!__classPrivateFieldGet(this, _PQueue_isPaused, \"f\")) {\n            return this;\n        }\n        __classPrivateFieldSet(this, _PQueue_isPaused, false, \"f\");\n        __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_processQueue).call(this);\n        return this;\n    }\n    /**\n    Put queue execution on hold.\n    */\n    pause() {\n        __classPrivateFieldSet(this, _PQueue_isPaused, true, \"f\");\n    }\n    /**\n    Clear the queue.\n    */\n    clear() {\n        __classPrivateFieldSet(this, _PQueue_queue, new (__classPrivateFieldGet(this, _PQueue_queueClass, \"f\"))(), \"f\");\n    }\n    /**\n    Can be called multiple times. Useful if you for example add additional items at a later time.\n\n    @returns A promise that settles when the queue becomes empty.\n    */\n    async onEmpty() {\n        // Instantly resolve if the queue is empty\n        if (__classPrivateFieldGet(this, _PQueue_queue, \"f\").size === 0) {\n            return;\n        }\n        await __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onEvent).call(this, 'empty');\n    }\n    /**\n    @returns A promise that settles when the queue size is less than the given limit: `queue.size < limit`.\n\n    If you want to avoid having the queue grow beyond a certain size you can `await queue.onSizeLessThan()` before adding a new item.\n\n    Note that this only limits the number of items waiting to start. There could still be up to `concurrency` jobs already running that this call does not include in its calculation.\n    */\n    async onSizeLessThan(limit) {\n        // Instantly resolve if the queue is empty.\n        if (__classPrivateFieldGet(this, _PQueue_queue, \"f\").size < limit) {\n            return;\n        }\n        await __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onEvent).call(this, 'next', () => __classPrivateFieldGet(this, _PQueue_queue, \"f\").size < limit);\n    }\n    /**\n    The difference with `.onEmpty` is that `.onIdle` guarantees that all work from the queue has finished. `.onEmpty` merely signals that the queue is empty, but it could mean that some promises haven't completed yet.\n\n    @returns A promise that settles when the queue becomes empty, and all promises have completed; `queue.size === 0 && queue.pending === 0`.\n    */\n    async onIdle() {\n        // Instantly resolve if none pending and if nothing else is queued\n        if (__classPrivateFieldGet(this, _PQueue_pending, \"f\") === 0 && __classPrivateFieldGet(this, _PQueue_queue, \"f\").size === 0) {\n            return;\n        }\n        await __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onEvent).call(this, 'idle');\n    }\n    /**\n    Size of the queue, the number of queued items waiting to run.\n    */\n    get size() {\n        return __classPrivateFieldGet(this, _PQueue_queue, \"f\").size;\n    }\n    /**\n    Size of the queue, filtered by the given options.\n\n    For example, this can be used to find the number of items remaining in the queue with a specific priority level.\n    */\n    sizeBy(options) {\n        // eslint-disable-next-line unicorn/no-array-callback-reference\n        return __classPrivateFieldGet(this, _PQueue_queue, \"f\").filter(options).length;\n    }\n    /**\n    Number of running items (no longer in the queue).\n    */\n    get pending() {\n        return __classPrivateFieldGet(this, _PQueue_pending, \"f\");\n    }\n    /**\n    Whether the queue is currently paused.\n    */\n    get isPaused() {\n        return __classPrivateFieldGet(this, _PQueue_isPaused, \"f\");\n    }\n}\n_PQueue_carryoverConcurrencyCount = new WeakMap(), _PQueue_isIntervalIgnored = new WeakMap(), _PQueue_intervalCount = new WeakMap(), _PQueue_intervalCap = new WeakMap(), _PQueue_interval = new WeakMap(), _PQueue_intervalEnd = new WeakMap(), _PQueue_intervalId = new WeakMap(), _PQueue_timeoutId = new WeakMap(), _PQueue_queue = new WeakMap(), _PQueue_queueClass = new WeakMap(), _PQueue_pending = new WeakMap(), _PQueue_concurrency = new WeakMap(), _PQueue_isPaused = new WeakMap(), _PQueue_throwOnTimeout = new WeakMap(), _PQueue_instances = new WeakSet(), _PQueue_doesIntervalAllowAnother_get = function _PQueue_doesIntervalAllowAnother_get() {\n    return __classPrivateFieldGet(this, _PQueue_isIntervalIgnored, \"f\") || __classPrivateFieldGet(this, _PQueue_intervalCount, \"f\") < __classPrivateFieldGet(this, _PQueue_intervalCap, \"f\");\n}, _PQueue_doesConcurrentAllowAnother_get = function _PQueue_doesConcurrentAllowAnother_get() {\n    return __classPrivateFieldGet(this, _PQueue_pending, \"f\") < __classPrivateFieldGet(this, _PQueue_concurrency, \"f\");\n}, _PQueue_next = function _PQueue_next() {\n    var _a;\n    __classPrivateFieldSet(this, _PQueue_pending, (_a = __classPrivateFieldGet(this, _PQueue_pending, \"f\"), _a--, _a), \"f\");\n    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_tryToStartAnother).call(this);\n    this.emit('next');\n}, _PQueue_onResumeInterval = function _PQueue_onResumeInterval() {\n    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onInterval).call(this);\n    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_initializeIntervalIfNeeded).call(this);\n    __classPrivateFieldSet(this, _PQueue_timeoutId, undefined, \"f\");\n}, _PQueue_isIntervalPaused_get = function _PQueue_isIntervalPaused_get() {\n    const now = Date.now();\n    if (__classPrivateFieldGet(this, _PQueue_intervalId, \"f\") === undefined) {\n        const delay = __classPrivateFieldGet(this, _PQueue_intervalEnd, \"f\") - now;\n        if (delay < 0) {\n            // Act as the interval was done\n            // We don't need to resume it here because it will be resumed on line 160\n            __classPrivateFieldSet(this, _PQueue_intervalCount, (__classPrivateFieldGet(this, _PQueue_carryoverConcurrencyCount, \"f\")) ? __classPrivateFieldGet(this, _PQueue_pending, \"f\") : 0, \"f\");\n        }\n        else {\n            // Act as the interval is pending\n            if (__classPrivateFieldGet(this, _PQueue_timeoutId, \"f\") === undefined) {\n                __classPrivateFieldSet(this, _PQueue_timeoutId, setTimeout(() => {\n                    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onResumeInterval).call(this);\n                }, delay), \"f\");\n            }\n            return true;\n        }\n    }\n    return false;\n}, _PQueue_tryToStartAnother = function _PQueue_tryToStartAnother() {\n    if (__classPrivateFieldGet(this, _PQueue_queue, \"f\").size === 0) {\n        // We can clear the interval (\"pause\")\n        // Because we can redo it later (\"resume\")\n        if (__classPrivateFieldGet(this, _PQueue_intervalId, \"f\")) {\n            clearInterval(__classPrivateFieldGet(this, _PQueue_intervalId, \"f\"));\n        }\n        __classPrivateFieldSet(this, _PQueue_intervalId, undefined, \"f\");\n        this.emit('empty');\n        if (__classPrivateFieldGet(this, _PQueue_pending, \"f\") === 0) {\n            this.emit('idle');\n        }\n        return false;\n    }\n    if (!__classPrivateFieldGet(this, _PQueue_isPaused, \"f\")) {\n        const canInitializeInterval = !__classPrivateFieldGet(this, _PQueue_instances, \"a\", _PQueue_isIntervalPaused_get);\n        if (__classPrivateFieldGet(this, _PQueue_instances, \"a\", _PQueue_doesIntervalAllowAnother_get) && __classPrivateFieldGet(this, _PQueue_instances, \"a\", _PQueue_doesConcurrentAllowAnother_get)) {\n            const job = __classPrivateFieldGet(this, _PQueue_queue, \"f\").dequeue();\n            if (!job) {\n                return false;\n            }\n            this.emit('active');\n            job();\n            if (canInitializeInterval) {\n                __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_initializeIntervalIfNeeded).call(this);\n            }\n            return true;\n        }\n    }\n    return false;\n}, _PQueue_initializeIntervalIfNeeded = function _PQueue_initializeIntervalIfNeeded() {\n    if (__classPrivateFieldGet(this, _PQueue_isIntervalIgnored, \"f\") || __classPrivateFieldGet(this, _PQueue_intervalId, \"f\") !== undefined) {\n        return;\n    }\n    __classPrivateFieldSet(this, _PQueue_intervalId, setInterval(() => {\n        __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onInterval).call(this);\n    }, __classPrivateFieldGet(this, _PQueue_interval, \"f\")), \"f\");\n    __classPrivateFieldSet(this, _PQueue_intervalEnd, Date.now() + __classPrivateFieldGet(this, _PQueue_interval, \"f\"), \"f\");\n}, _PQueue_onInterval = function _PQueue_onInterval() {\n    if (__classPrivateFieldGet(this, _PQueue_intervalCount, \"f\") === 0 && __classPrivateFieldGet(this, _PQueue_pending, \"f\") === 0 && __classPrivateFieldGet(this, _PQueue_intervalId, \"f\")) {\n        clearInterval(__classPrivateFieldGet(this, _PQueue_intervalId, \"f\"));\n        __classPrivateFieldSet(this, _PQueue_intervalId, undefined, \"f\");\n    }\n    __classPrivateFieldSet(this, _PQueue_intervalCount, __classPrivateFieldGet(this, _PQueue_carryoverConcurrencyCount, \"f\") ? __classPrivateFieldGet(this, _PQueue_pending, \"f\") : 0, \"f\");\n    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_processQueue).call(this);\n}, _PQueue_processQueue = function _PQueue_processQueue() {\n    // eslint-disable-next-line no-empty\n    while (__classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_tryToStartAnother).call(this)) { }\n}, _PQueue_throwOnAbort = async function _PQueue_throwOnAbort(signal) {\n    return new Promise((_resolve, reject) => {\n        signal.addEventListener('abort', () => {\n            // TODO: Reject with signal.throwIfAborted() when targeting Node.js 18\n            // TODO: Use ABORT_ERR code when targeting Node.js 16 (https://nodejs.org/docs/latest-v16.x/api/errors.html#abort_err)\n            reject(new AbortError('The task was aborted.'));\n        }, { once: true });\n    });\n}, _PQueue_onEvent = async function _PQueue_onEvent(event, filter) {\n    return new Promise(resolve => {\n        const listener = () => {\n            if (filter && !filter()) {\n                return;\n            }\n            this.off(event, listener);\n            resolve();\n        };\n        this.on(event, listener);\n    });\n};\n", "export class TimeoutError extends Error {\n\tconstructor(message) {\n\t\tsuper(message);\n\t\tthis.name = 'TimeoutError';\n\t}\n}\n\n/**\nAn error to be thrown when the request is aborted by AbortController.\nDOMException is thrown instead of this Error when DOMException is available.\n*/\nexport class AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\n/**\nTODO: Remove AbortError and just throw DOMException when targeting Node 18.\n*/\nconst getDOMException = errorMessage => globalThis.DOMException === undefined ?\n\tnew AbortError(errorMessage) :\n\tnew DOMException(errorMessage);\n\n/**\nTODO: Remove below function and just 'reject(signal.reason)' when targeting Node 18.\n*/\nconst getAbortedReason = signal => {\n\tconst reason = signal.reason === undefined ?\n\t\tgetDOMException('This operation was aborted.') :\n\t\tsignal.reason;\n\n\treturn reason instanceof Error ? reason : getDOMException(reason);\n};\n\nexport default function pTimeout(promise, milliseconds, fallback, options) {\n\tlet timer;\n\n\tconst cancelablePromise = new Promise((resolve, reject) => {\n\t\tif (typeof milliseconds !== 'number' || Math.sign(milliseconds) !== 1) {\n\t\t\tthrow new TypeError(`Expected \\`milliseconds\\` to be a positive number, got \\`${milliseconds}\\``);\n\t\t}\n\n\t\tif (milliseconds === Number.POSITIVE_INFINITY) {\n\t\t\tresolve(promise);\n\t\t\treturn;\n\t\t}\n\n\t\toptions = {\n\t\t\tcustomTimers: {setTimeout, clearTimeout},\n\t\t\t...options\n\t\t};\n\n\t\tif (options.signal) {\n\t\t\tconst {signal} = options;\n\t\t\tif (signal.aborted) {\n\t\t\t\treject(getAbortedReason(signal));\n\t\t\t}\n\n\t\t\tsignal.addEventListener('abort', () => {\n\t\t\t\treject(getAbortedReason(signal));\n\t\t\t});\n\t\t}\n\n\t\ttimer = options.customTimers.setTimeout.call(undefined, () => {\n\t\t\tif (typeof fallback === 'function') {\n\t\t\t\ttry {\n\t\t\t\t\tresolve(fallback());\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst message = typeof fallback === 'string' ? fallback : `Promise timed out after ${milliseconds} milliseconds`;\n\t\t\tconst timeoutError = fallback instanceof Error ? fallback : new TimeoutError(message);\n\n\t\t\tif (typeof promise.cancel === 'function') {\n\t\t\t\tpromise.cancel();\n\t\t\t}\n\n\t\t\treject(timeoutError);\n\t\t}, milliseconds);\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tresolve(await promise);\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t} finally {\n\t\t\t\toptions.customTimers.clearTimeout.call(undefined, timer);\n\t\t\t}\n\t\t})();\n\t});\n\n\tcancelablePromise.clear = () => {\n\t\tclearTimeout(timer);\n\t\ttimer = undefined;\n\t};\n\n\treturn cancelablePromise;\n}\n", "var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _PriorityQueue_queue;\nimport lowerBound from './lower-bound.js';\nexport default class PriorityQueue {\n    constructor() {\n        _PriorityQueue_queue.set(this, []);\n    }\n    enqueue(run, options) {\n        options = {\n            priority: 0,\n            ...options,\n        };\n        const element = {\n            priority: options.priority,\n            run,\n        };\n        if (this.size && __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\")[this.size - 1].priority >= options.priority) {\n            __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").push(element);\n            return;\n        }\n        const index = lowerBound(__classPrivateFieldGet(this, _PriorityQueue_queue, \"f\"), element, (a, b) => b.priority - a.priority);\n        __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").splice(index, 0, element);\n    }\n    dequeue() {\n        const item = __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").shift();\n        return item === null || item === void 0 ? void 0 : item.run;\n    }\n    filter(options) {\n        return __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").filter((element) => element.priority === options.priority).map((element) => element.run);\n    }\n    get size() {\n        return __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").length;\n    }\n}\n_PriorityQueue_queue = new WeakMap();\n", "// Port of lower_bound from https://en.cppreference.com/w/cpp/algorithm/lower_bound\n// Used to compute insertion index to keep queue sorted after insertion\nexport default function lowerBound(array, value, comparator) {\n    let first = 0;\n    let count = array.length;\n    while (count > 0) {\n        const step = Math.trunc(count / 2);\n        let it = first + step;\n        if (comparator(array[it], value) <= 0) {\n            first = ++it;\n            count -= step + 1;\n        }\n        else {\n            count = step;\n        }\n    }\n    return first;\n}\n", "import { decode, type PBNode } from '@ipld/dag-pb'\nimport map from 'it-map'\nimport parallel from 'it-parallel'\nimport { pipe } from 'it-pipe'\nimport { CustomProgressEvent } from 'progress-events'\nimport type { ExporterOptions, Resolve, UnixfsV1DirectoryContent, UnixfsV1Resolver, ReadableStorage, ExportWalk } from '../../../index.js'\n\nconst hamtShardedDirectoryContent: UnixfsV1Resolver = (cid, node, unixfs, path, resolve, depth, blockstore) => {\n  function yieldHamtDirectoryContent (options: ExporterOptions = {}): UnixfsV1DirectoryContent {\n    options.onProgress?.(new CustomProgressEvent<ExportWalk>('unixfs:exporter:walk:hamt-sharded-directory', {\n      cid\n    }))\n\n    return listDirectory(node, path, resolve, depth, blockstore, options)\n  }\n\n  return yieldHamtDirectoryContent\n}\n\nasync function * listDirectory (node: PBNode, path: string, resolve: Resolve, depth: number, blockstore: ReadableStorage, options: ExporterOptions): UnixfsV1DirectoryContent {\n  const links = node.Links\n\n  const results = pipe(\n    links,\n    source => map(source, link => {\n      return async () => {\n        const name = link.Name != null ? link.Name.substring(2) : null\n\n        if (name != null && name !== '') {\n          const result = await resolve(link.Hash, name, `${path}/${name}`, [], depth + 1, blockstore, options)\n\n          return { entries: result.entry == null ? [] : [result.entry] }\n        } else {\n          // descend into subshard\n          const block = await blockstore.get(link.Hash, options)\n          node = decode(block)\n\n          options.onProgress?.(new CustomProgressEvent<ExportWalk>('unixfs:exporter:walk:hamt-sharded-directory', {\n            cid: link.Hash\n          }))\n\n          return { entries: listDirectory(node, path, resolve, depth, blockstore, options) }\n        }\n      }\n    }),\n    source => parallel(source, { ordered: true })\n  )\n\n  for await (const { entries } of results) {\n    yield * entries\n  }\n}\n\nexport default hamtShardedDirectoryContent\n", "import type { ImportResult } from 'ipfs-unixfs-importer';\nimport type { AssociateResult, DataStore, GetResult, PutResult } from '../types/data-store.js';\n\nimport { BlockstoreLevel } from './blockstore-level.js';\nimport { createLevelDatabase } from './level-wrapper.js';\nimport { exporter } from 'ipfs-unixfs-exporter';\nimport { importer } from 'ipfs-unixfs-importer';\nimport { Readable } from 'readable-stream';\n\n// `BlockstoreLevel` doesn't support being a `Set` (i.e. it always requires a value), so use a placeholder instead.\nconst PLACEHOLDER_VALUE = new Uint8Array();\n\n/**\n * A simple implementation of {@link DataStore} that works in both the browser and server-side.\n * Leverages LevelDB under the hood.\n *\n * It has the following structure (`+` represents a sublevel and `->` represents a key->value pair):\n *   'data' + <tenant> + <dataCid> -> <data>\n *   'references' + <tenant> + <dataCid> + <messageCid> -> PLACEHOLDER_VALUE\n *\n * This allows for the <data> to be shared for everything that uses the same <dataCid> while also making\n * sure that the <data> can only be deleted if there are no <messageCid> for any <tenant> still using it.\n */\nexport class DataStoreLevel implements DataStore {\n  config: DataStoreLevelConfig;\n\n  blockstore: BlockstoreLevel;\n\n  constructor(config: DataStoreLevelConfig = {}) {\n    this.config = {\n      blockstoreLocation: 'DATASTORE',\n      createLevelDatabase,\n      ...config\n    };\n\n    this.blockstore = new BlockstoreLevel({\n      location            : this.config.blockstoreLocation!,\n      createLevelDatabase : this.config.createLevelDatabase,\n    });\n  }\n\n  public async open(): Promise<void> {\n    await this.blockstore.open();\n  }\n\n  async close(): Promise<void> {\n    await this.blockstore.close();\n  }\n\n  async put(tenant: string, messageCid: string, dataCid: string, dataStream: Readable): Promise<PutResult> {\n    const blockstoreForReferenceCounting = await this.getBlockstoreForReferenceCounting(tenant, dataCid);\n    await blockstoreForReferenceCounting.put(messageCid, PLACEHOLDER_VALUE);\n\n    const blockstoreForData = await this.getBlockstoreForStoringData(tenant, dataCid);\n\n    const asyncDataBlocks = importer([{ content: dataStream }], blockstoreForData, { cidVersion: 1 });\n\n    // NOTE: the last block contains the root CID as well as info to derive the data size\n    let dataDagRoot!: ImportResult;\n    for await (dataDagRoot of asyncDataBlocks) { ; }\n\n    return {\n      dataCid  : String(dataDagRoot.cid),\n      dataSize : Number(dataDagRoot.unixfs?.fileSize() ?? dataDagRoot.size)\n    };\n  }\n\n  public async get(tenant: string, messageCid: string, dataCid: string): Promise<GetResult | undefined> {\n    const blockstoreForReferenceCounting = await this.getBlockstoreForReferenceCounting(tenant, dataCid);\n\n    const allowed = await blockstoreForReferenceCounting.has(messageCid);\n    if (!allowed) {\n      return undefined;\n    }\n\n    const blockstoreForData = await this.getBlockstoreForStoringData(tenant, dataCid);\n\n    const exists = await blockstoreForData.has(dataCid);\n    if (!exists) {\n      return undefined;\n    }\n\n    // data is chunked into dag-pb unixfs blocks. re-inflate the chunks.\n    const dataDagRoot = await exporter(dataCid, blockstoreForData);\n    const contentIterator = dataDagRoot.content();\n\n    const dataStream = new Readable({\n      async read(): Promise<void> {\n        const result = await contentIterator.next();\n        if (result.done) {\n          this.push(null); // end the stream\n        } else {\n          this.push(result.value);\n        }\n      }\n    });\n\n    let dataSize = dataDagRoot.size;\n\n    if (dataDagRoot.type === 'file' || dataDagRoot.type === 'directory') {\n      dataSize = dataDagRoot.unixfs.fileSize();\n    }\n\n    return {\n      dataCid  : String(dataDagRoot.cid),\n      dataSize : Number(dataSize),\n      dataStream,\n    };\n  }\n\n  public async associate(tenant: string, messageCid: string, dataCid: string): Promise<AssociateResult | undefined> {\n    const blockstoreForReferenceCounting = await this.getBlockstoreForReferenceCounting(tenant, dataCid);\n\n    const noExistingReference = await blockstoreForReferenceCounting.isEmpty();\n    if (noExistingReference) {\n      return undefined;\n    }\n\n    const blockstoreForData = await this.getBlockstoreForStoringData(tenant, dataCid);\n\n    const dataExists = await blockstoreForData.has(dataCid);\n    if (!dataExists) {\n      return undefined;\n    }\n\n    await blockstoreForReferenceCounting.put(messageCid, PLACEHOLDER_VALUE);\n\n    const dataDagRoot = await exporter(dataCid, blockstoreForData);\n\n    let dataSize = dataDagRoot.size;\n\n    if (dataDagRoot.type === 'file' || dataDagRoot.type === 'directory') {\n      dataSize = dataDagRoot.unixfs.fileSize();\n    }\n\n    return {\n      dataCid  : String(dataDagRoot.cid),\n      dataSize : Number(dataSize)\n    };\n  }\n\n  public async delete(tenant: string, messageCid: string, dataCid: string): Promise<void> {\n    const blockstoreForReferenceCounting = await this.getBlockstoreForReferenceCounting(tenant, dataCid);\n    await blockstoreForReferenceCounting.delete(messageCid);\n\n    const wasLastReference = await blockstoreForReferenceCounting.isEmpty();\n    if (!wasLastReference) {\n      return;\n    }\n\n    const blockstoreForData = await this.getBlockstoreForStoringData(tenant, dataCid);\n    await blockstoreForData.clear();\n  }\n\n  /**\n   * Deletes everything in the store. Mainly used in tests.\n   */\n  public async clear(): Promise<void> {\n    await this.blockstore.clear();\n  }\n\n  async dump() : Promise<void> {\n    console.group('blockstore');\n    await this.blockstore['dump']?.();\n    console.groupEnd();\n  }\n\n  /**\n   * Gets the blockstore used for reference counting purposes for the given `dataCid` in the given `tenant`.\n   */\n  private async getBlockstoreForReferenceCounting(tenant: string, dataCid: string): Promise<BlockstoreLevel> {\n    const referenceCountingPartitionName = 'references';\n    const blockstoreForReferenceCounting = await this.blockstore.partition(referenceCountingPartitionName);\n    const blockstoreForReferenceCountingByTenant = await blockstoreForReferenceCounting.partition(tenant);\n    const blockstoreForReferenceCountingDataCid = await blockstoreForReferenceCountingByTenant.partition(dataCid);\n    return blockstoreForReferenceCountingDataCid;\n  }\n\n  /**\n   * Gets the blockstore used for storing data for the given `dataCid` in the given `tenant`.\n   */\n  private async getBlockstoreForStoringData(tenant: string, dataCid: string): Promise<BlockstoreLevel> {\n    const dataPartitionName = 'data';\n    const blockstoreForData = await this.blockstore.partition(dataPartitionName);\n    const blockstoreOfGivenTenant = await blockstoreForData.partition(tenant);\n    const blockstoreOfGivenDataCid = await blockstoreOfGivenTenant.partition(dataCid);\n    return blockstoreOfGivenDataCid;\n  }\n}\n\ntype DataStoreLevelConfig = {\n  blockstoreLocation?: string,\n  createLevelDatabase?: typeof createLevelDatabase,\n};", "import { base64url } from 'multiformats/bases/base64';\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\n/**\n * Utility class for encoding/converting data into various formats.\n */\nexport class Encoder {\n\n  public static base64UrlToBytes(base64urlString: string): Uint8Array {\n    const content = base64url.baseDecode(base64urlString);\n    return content;\n  }\n\n  public static base64UrlToObject(base64urlString: string): any {\n    const payloadBytes = base64url.baseDecode(base64urlString);\n    const payloadString = Encoder.bytesToString(payloadBytes);\n    const payloadObject = JSON.parse(payloadString);\n    return payloadObject;\n  }\n\n  public static bytesToBase64Url(bytes: Uint8Array): string {\n    const base64UrlString = base64url.baseEncode(bytes);\n    return base64UrlString;\n  }\n\n  public static bytesToString(content: Uint8Array): string {\n    const bytes = textDecoder.decode(content);\n    return bytes;\n  }\n\n  public static objectToBytes(obj: Record<string, any>): Uint8Array {\n    const objectString = JSON.stringify(obj);\n    const objectBytes = textEncoder.encode(objectString);\n    return objectBytes;\n  }\n\n  public static stringToBase64Url(content: string): string {\n    const bytes = textEncoder.encode(content);\n    const base64UrlString = base64url.baseEncode(bytes);\n    return base64UrlString;\n  }\n\n  public static stringToBytes(content: string): Uint8Array {\n    const bytes = textEncoder.encode(content);\n    return bytes;\n  }\n}\n", "import type { Signer } from '../../../types/jose-types.js';\n\nimport { ed25519 } from './ed25519.js';\nimport { Secp256k1 } from '../../../utils/secp256k1.js';\n\n// the key should be the appropriate `crv` value\nexport const signers: Record<string, Signer> = {\n  'Ed25519'   : ed25519,\n  'secp256k1' : {\n    sign            : Secp256k1.sign,\n    verify          : Secp256k1.verify,\n    generateKeyPair : Secp256k1.generateKeyPair,\n    publicKeyToJwk  : Secp256k1.publicKeyToJwk\n  },\n};", "/*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\nconst P = 2n ** 255n - 19n; // ed25519 is twisted edwards curve\nconst N = 2n ** 252n + 27742317777372353535851937790883648493n; // curve's (group) order\nconst Gx = 0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an; // base point x\nconst Gy = 0x6666666666666666666666666666666666666666666666666666666666666658n; // base point y\nconst CURVE = {\n    a: -1n,\n    d: 37095705934669439343138083508754565189542113879843219016388785533085940283555n,\n    p: P, n: N, h: 8, Gx, Gy // field prime, curve (group) order, cofactor\n};\nconst err = (m = '') => { throw new Error(m); }; // error helper, messes-up stack trace\nconst str = (s) => typeof s === 'string'; // is string\nconst au8 = (a, l) => // is Uint8Array (of specific length)\n !(a instanceof Uint8Array) || (typeof l === 'number' && l > 0 && a.length !== l) ?\n    err('Uint8Array expected') : a;\nconst u8n = (data) => new Uint8Array(data); // creates Uint8Array\nconst toU8 = (a, len) => au8(str(a) ? h2b(a) : u8n(a), len); // norm(hex/u8a) to u8a\nconst mod = (a, b = P) => { let r = a % b; return r >= 0n ? r : b + r; }; // mod division\nconst isPoint = (p) => (p instanceof Point ? p : err('Point expected')); // is xyzt point\nlet Gpows = undefined; // precomputes for base point G\nclass Point {\n    constructor(ex, ey, ez, et) {\n        this.ex = ex;\n        this.ey = ey;\n        this.ez = ez;\n        this.et = et;\n    }\n    static fromAffine(p) { return new Point(p.x, p.y, 1n, mod(p.x * p.y)); }\n    static fromHex(hex, strict = true) {\n        const { d } = CURVE;\n        hex = toU8(hex, 32);\n        const normed = hex.slice(); // copy the array to not mess it up\n        normed[31] = hex[31] & ~0x80; // adjust first LE byte = last BE byte\n        const y = b2n_LE(normed); // decode as little-endian, convert to num\n        if (y === 0n) { // y=0 is valid, proceed\n        }\n        else {\n            if (strict && !(0n < y && y < P))\n                err('bad y coord 1'); // strict=true [1..P-1]\n            if (!strict && !(0n < y && y < 2n ** 256n))\n                err('bad y coord 2'); // strict=false [1..2^256-1]\n        }\n        const y2 = mod(y * y); // y\u00B2\n        const u = mod(y2 - 1n); // u=y\u00B2-1\n        const v = mod(d * y2 + 1n); // v=dy\u00B2+1\n        let { isValid, value: x } = uvRatio(u, v); // (uv\u00B3)(uv\u2077)^(p-5)/8; square root\n        if (!isValid)\n            err('bad y coordinate 3'); // not square root: bad point\n        const isXOdd = (x & 1n) === 1n; // adjust sign of x coordinate\n        const isHeadOdd = (hex[31] & 0x80) !== 0;\n        if (isHeadOdd !== isXOdd)\n            x = mod(-x);\n        return new Point(x, y, 1n, mod(x * y)); // Z=1, T=xy\n    }\n    get x() { return this.toAffine().x; } // .x, .y will call expensive toAffine.\n    get y() { return this.toAffine().y; } // Should be used with care.\n    equals(other) {\n        const { ex: X1, ey: Y1, ez: Z1 } = this;\n        const { ex: X2, ey: Y2, ez: Z2 } = isPoint(other); // isPoint() checks class equality\n        const X1Z2 = mod(X1 * Z2), X2Z1 = mod(X2 * Z1);\n        const Y1Z2 = mod(Y1 * Z2), Y2Z1 = mod(Y2 * Z1);\n        return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n    }\n    is0() { return this.equals(I); }\n    negate() {\n        return new Point(mod(-this.ex), this.ey, this.ez, mod(-this.et));\n    }\n    double() {\n        const { ex: X1, ey: Y1, ez: Z1 } = this; // Cost: 4M + 4S + 1*a + 6add + 1*2\n        const { a } = CURVE; // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n        const A = mod(X1 * X1);\n        const B = mod(Y1 * Y1);\n        const C = mod(2n * mod(Z1 * Z1));\n        const D = mod(a * A);\n        const x1y1 = X1 + Y1;\n        const E = mod(mod(x1y1 * x1y1) - A - B);\n        const G = D + B;\n        const F = G - C;\n        const H = D - B;\n        const X3 = mod(E * F);\n        const Y3 = mod(G * H);\n        const T3 = mod(E * H);\n        const Z3 = mod(F * G);\n        return new Point(X3, Y3, Z3, T3);\n    }\n    add(other) {\n        const { ex: X1, ey: Y1, ez: Z1, et: T1 } = this; // Cost: 8M + 1*k + 8add + 1*2.\n        const { ex: X2, ey: Y2, ez: Z2, et: T2 } = isPoint(other); // doesn't check if other on-curve\n        const { a, d } = CURVE; // http://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-3\n        const A = mod(X1 * X2);\n        const B = mod(Y1 * Y2);\n        const C = mod(T1 * d * T2);\n        const D = mod(Z1 * Z2);\n        const E = mod((X1 + Y1) * (X2 + Y2) - A - B);\n        const F = mod(D - C);\n        const G = mod(D + C);\n        const H = mod(B - a * A);\n        const X3 = mod(E * F);\n        const Y3 = mod(G * H);\n        const T3 = mod(E * H);\n        const Z3 = mod(F * G);\n        return new Point(X3, Y3, Z3, T3);\n    }\n    mul(n, safe = true) {\n        if (n === 0n)\n            return safe === true ? err('cannot multiply by 0') : I;\n        if (!(typeof n === 'bigint' && 0n < n && n < N))\n            err('invalid scalar, must be < L');\n        if (!safe && this.is0() || n === 1n)\n            return this; // safe=true bans 0. safe=false allows 0.\n        if (this.equals(G))\n            return wNAF(n).p; // use wNAF precomputes for base points\n        let p = I, f = G; // init result point & fake point\n        for (let d = this; n > 0n; d = d.double(), n >>= 1n) { // double-and-add ladder\n            if (n & 1n)\n                p = p.add(d); // if bit is present, add to point\n            else if (safe)\n                f = f.add(d); // if not, add to fake for timing safety\n        }\n        return p;\n    }\n    multiply(scalar) { return this.mul(scalar); } // Aliases for compatibilty\n    clearCofactor() { return this.mul(BigInt(CURVE.h), false); } // multiply by cofactor\n    isSmallOrder() { return this.clearCofactor().is0(); } // check if P is small order\n    isTorsionFree() {\n        let p = this.mul(N / 2n, false).double(); // ensures the point is not \"bad\".\n        if (N % 2n)\n            p = p.add(this); // P^(N+1)             // P*N == (P*(N/2))*2+P\n        return p.is0();\n    }\n    toAffine() {\n        const { ex: x, ey: y, ez: z } = this; // (x, y, z, t) \u220B (x=x/z, y=y/z, t=xy)\n        if (this.is0())\n            return { x: 0n, y: 0n }; // fast-path for zero point\n        const iz = invert(z); // z^-1: invert z\n        if (mod(z * iz) !== 1n)\n            err('invalid inverse'); // (z * z^-1) must be 1, otherwise bad math\n        return { x: mod(x * iz), y: mod(y * iz) }; // x = x*z^-1; y = y*z^-1\n    }\n    toRawBytes() {\n        const { x, y } = this.toAffine(); // convert to affine 2d point\n        const b = n2b_32LE(y); // encode number to 32 bytes\n        b[31] |= x & 1n ? 0x80 : 0; // store sign in first LE byte\n        return b;\n    }\n    toHex() { return b2h(this.toRawBytes()); } // encode to hex string\n}\nPoint.BASE = new Point(Gx, Gy, 1n, mod(Gx * Gy)); // Generator / Base point\nPoint.ZERO = new Point(0n, 1n, 1n, 0n); // Identity / Zero point\nconst { BASE: G, ZERO: I } = Point; // Generator, identity points\nconst padh = (num, pad) => num.toString(16).padStart(pad, '0');\nconst b2h = (b) => Array.from(b).map(e => padh(e, 2)).join(''); // bytes to hex\nconst h2b = (hex) => {\n    const l = hex.length; // error if not string,\n    if (!str(hex) || l % 2)\n        err('hex invalid 1'); // or has odd length like 3, 5.\n    const arr = u8n(l / 2); // create result array\n    for (let i = 0; i < arr.length; i++) {\n        const j = i * 2;\n        const h = hex.slice(j, j + 2); // hexByte. slice is faster than substr\n        const b = Number.parseInt(h, 16); // byte, created from string part\n        if (Number.isNaN(b) || b < 0)\n            err('hex invalid 2'); // byte must be valid 0 <= byte < 256\n        arr[i] = b;\n    }\n    return arr;\n};\nconst n2b_32LE = (num) => h2b(padh(num, 32 * 2)).reverse(); // number to bytes LE\nconst b2n_LE = (b) => BigInt('0x' + b2h(u8n(au8(b)).reverse())); // bytes LE to num\nconst concatB = (...arrs) => {\n    const r = u8n(arrs.reduce((sum, a) => sum + au8(a).length, 0)); // create u8a of summed length\n    let pad = 0; // walk through each array,\n    arrs.forEach(a => { r.set(a, pad); pad += a.length; }); // ensure they have proper type\n    return r;\n};\nconst invert = (num, md = P) => {\n    if (num === 0n || md <= 0n)\n        err('no inverse n=' + num + ' mod=' + md); // no neg exponent for now\n    let a = mod(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n;\n    while (a !== 0n) { // uses euclidean gcd algorithm\n        const q = b / a, r = b % a; // not constant-time\n        const m = x - u * q, n = y - v * q;\n        b = a, a = r, x = u, y = v, u = m, v = n;\n    }\n    return b === 1n ? mod(x, md) : err('no inverse'); // b is gcd at this point\n};\nconst pow2 = (x, power) => {\n    let r = x;\n    while (power-- > 0n) {\n        r *= r;\n        r %= P;\n    }\n    return r;\n};\nconst pow_2_252_3 = (x) => {\n    const x2 = (x * x) % P; // x^2,       bits 1\n    const b2 = (x2 * x) % P; // x^3,       bits 11\n    const b4 = (pow2(b2, 2n) * b2) % P; // x^(2^4-1), bits 1111\n    const b5 = (pow2(b4, 1n) * x) % P; // x^(2^5-1), bits 11111\n    const b10 = (pow2(b5, 5n) * b5) % P; // x^(2^10)\n    const b20 = (pow2(b10, 10n) * b10) % P; // x^(2^20)\n    const b40 = (pow2(b20, 20n) * b20) % P; // x^(2^40)\n    const b80 = (pow2(b40, 40n) * b40) % P; // x^(2^80)\n    const b160 = (pow2(b80, 80n) * b80) % P; // x^(2^160)\n    const b240 = (pow2(b160, 80n) * b80) % P; // x^(2^240)\n    const b250 = (pow2(b240, 10n) * b10) % P; // x^(2^250)\n    const pow_p_5_8 = (pow2(b250, 2n) * x) % P; // < To pow to (p+3)/8, multiply it by x.\n    return { pow_p_5_8, b2 };\n};\nconst RM1 = 19681161376707505956807079304988542015446066515923890162744021073123829784752n; // \u221A-1\nconst uvRatio = (u, v) => {\n    const v3 = mod(v * v * v); // v\u00B3\n    const v7 = mod(v3 * v3 * v); // v\u2077\n    const pow = pow_2_252_3(u * v7).pow_p_5_8; // (uv\u2077)^(p-5)/8\n    let x = mod(u * v3 * pow); // (uv\u00B3)(uv\u2077)^(p-5)/8\n    const vx2 = mod(v * x * x); // vx\u00B2\n    const root1 = x; // First root candidate\n    const root2 = mod(x * RM1); // Second root candidate; RM1 is \u221A-1\n    const useRoot1 = vx2 === u; // If vx\u00B2 = u (mod p), x is a square root\n    const useRoot2 = vx2 === mod(-u); // If vx\u00B2 = -u, set x <-- x * 2^((p-1)/4)\n    const noRoot = vx2 === mod(-u * RM1); // There is no valid root, vx\u00B2 = -u\u221A-1\n    if (useRoot1)\n        x = root1;\n    if (useRoot2 || noRoot)\n        x = root2; // We return root2 anyway, for const-time\n    if ((mod(x) & 1n) === 1n)\n        x = mod(-x); // edIsNegative\n    return { isValid: useRoot1 || useRoot2, value: x };\n};\nconst modL_LE = (hash) => mod(b2n_LE(hash), N); // modulo L; but little-endian\nlet _shaS;\nconst sha512a = (...m) => etc.sha512Async(...m); // Async SHA512\nconst sha512s = (...m) => // Sync SHA512, not set by default\n typeof _shaS === 'function' ? _shaS(...m) : err('etc.sha512Sync not set');\nconst hash2extK = (hashed) => {\n    const head = hashed.slice(0, 32); // slice creates a copy, unlike subarray\n    head[0] &= 248; // Clamp bits: 0b1111_1000,\n    head[31] &= 127; // 0b0111_1111,\n    head[31] |= 64; // 0b0100_0000\n    const prefix = hashed.slice(32, 64); // private key \"prefix\"\n    const scalar = modL_LE(head); // modular division over curve order\n    const point = G.mul(scalar); // public key point\n    const pointBytes = point.toRawBytes(); // point serialized to Uint8Array\n    return { head, prefix, scalar, point, pointBytes };\n};\n// RFC8032 5.1.5; getPublicKey async, sync. Hash priv key and extract point.\nconst getExtendedPublicKeyAsync = (priv) => sha512a(toU8(priv, 32)).then(hash2extK);\nconst getExtendedPublicKey = (priv) => hash2extK(sha512s(toU8(priv, 32)));\nconst getPublicKeyAsync = (priv) => getExtendedPublicKeyAsync(priv).then(p => p.pointBytes);\nconst getPublicKey = (priv) => getExtendedPublicKey(priv).pointBytes;\nfunction hashFinish(asynchronous, res) {\n    if (asynchronous)\n        return sha512a(res.hashable).then(res.finish);\n    return res.finish(sha512s(res.hashable));\n}\nconst _sign = (e, rBytes, msg) => {\n    const { pointBytes: P, scalar: s } = e;\n    const r = modL_LE(rBytes); // r was created outside, reduce it modulo L\n    const R = G.mul(r).toRawBytes(); // R = [r]B\n    const hashable = concatB(R, P, msg); // dom2(F, C) || R || A || PH(M)\n    const finish = (hashed) => {\n        const S = mod(r + modL_LE(hashed) * s, N); // S = (r + k * s) mod L; 0 <= s < l\n        return au8(concatB(R, n2b_32LE(S)), 64); // 64-byte sig: 32b R.x + 32b LE(S)\n    };\n    return { hashable, finish };\n};\nconst signAsync = async (msg, privKey) => {\n    const m = toU8(msg); // RFC8032 5.1.6: sign msg with key async\n    const e = await getExtendedPublicKeyAsync(privKey); // pub,prfx\n    const rBytes = await sha512a(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n    return hashFinish(true, _sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\nconst sign = (msg, privKey) => {\n    const m = toU8(msg); // RFC8032 5.1.6: sign msg with key sync\n    const e = getExtendedPublicKey(privKey); // pub,prfx\n    const rBytes = sha512s(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n    return hashFinish(false, _sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\nconst _verify = (sig, msg, pub) => {\n    msg = toU8(msg); // Message hex str/Bytes\n    sig = toU8(sig, 64); // Signature hex str/Bytes, must be 64 bytes\n    const A = Point.fromHex(pub, false); // public key A decoded\n    const R = Point.fromHex(sig.slice(0, 32), false); // 0 <= R < 2^256: ZIP215 R can be >= P\n    const s = b2n_LE(sig.slice(32, 64)); // Decode second half as an integer S\n    const SB = G.mul(s, false); // in the range 0 <= s < L\n    const hashable = concatB(R.toRawBytes(), A.toRawBytes(), msg); // dom2(F, C) || R || A || PH(M)\n    const finish = (hashed) => {\n        const k = modL_LE(hashed); // decode in little-endian, modulo L\n        const RkA = R.add(A.mul(k, false)); // [8]R + [8][k]A'\n        return RkA.add(SB.negate()).clearCofactor().is0(); // [8][S]B = [8]R + [8][k]A'\n    };\n    return { hashable, finish };\n};\n// RFC8032 5.1.7: verification async, sync\nconst verifyAsync = async (s, m, p) => hashFinish(true, _verify(s, m, p));\nconst verify = (s, m, p) => hashFinish(false, _verify(s, m, p));\nconst cr = () => // We support: 1) browsers 2) node.js 19+\n typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\nconst etc = {\n    bytesToHex: b2h, hexToBytes: h2b, concatBytes: concatB,\n    mod, invert,\n    randomBytes: (len) => {\n        const crypto = cr(); // Can be shimmed in node.js <= 18 to prevent error:\n        // import { webcrypto } from 'node:crypto';\n        // if (!globalThis.crypto) globalThis.crypto = webcrypto;\n        if (!crypto)\n            err('crypto.getRandomValues must be defined');\n        return crypto.getRandomValues(u8n(len));\n    },\n    sha512Async: async (...messages) => {\n        const crypto = cr();\n        if (!crypto)\n            err('crypto.subtle or etc.sha512Async must be defined');\n        const m = concatB(...messages);\n        return u8n(await crypto.subtle.digest('SHA-512', m.buffer));\n    },\n    sha512Sync: undefined, // Actual logic below\n};\nObject.defineProperties(etc, { sha512Sync: {\n        configurable: false, get() { return _shaS; }, set(f) { if (!_shaS)\n            _shaS = f; },\n    } });\nconst utils = {\n    getExtendedPublicKeyAsync, getExtendedPublicKey,\n    randomPrivateKey: () => etc.randomBytes(32),\n    precompute(w = 8, p = G) { p.multiply(3n); return p; }, // no-op\n};\nconst W = 8; // Precomputes-related code. W = window size\nconst precompute = () => {\n    const points = []; // 10x sign(), 2x verify(). To achieve this,\n    const windows = 256 / W + 1; // app needs to spend 40ms+ to calculate\n    let p = G, b = p; // a lot of points related to base point G.\n    for (let w = 0; w < windows; w++) { // Points are stored in array and used\n        b = p; // any time Gx multiplication is done.\n        points.push(b); // They consume 16-32 MiB of RAM.\n        for (let i = 1; i < 2 ** (W - 1); i++) {\n            b = b.add(p);\n            points.push(b);\n        }\n        p = b.double(); // Precomputes don't speed-up getSharedKey,\n    } // which multiplies user point by scalar,\n    return points; // when precomputes are using base point\n};\nconst wNAF = (n) => {\n    // Compared to other point mult methods,\n    const comp = Gpows || (Gpows = precompute()); // stores 2x less points using subtraction\n    const neg = (cnd, p) => { let n = p.negate(); return cnd ? n : p; }; // negate\n    let p = I, f = G; // f must be G, or could become I in the end\n    const windows = 1 + 256 / W; // W=8 17 windows\n    const wsize = 2 ** (W - 1); // W=8 128 window size\n    const mask = BigInt(2 ** W - 1); // W=8 will create mask 0b11111111\n    const maxNum = 2 ** W; // W=8 256\n    const shiftBy = BigInt(W); // W=8 8\n    for (let w = 0; w < windows; w++) {\n        const off = w * wsize;\n        let wbits = Number(n & mask); // extract W bits.\n        n >>= shiftBy; // shift number by W bits.\n        if (wbits > wsize) {\n            wbits -= maxNum;\n            n += 1n;\n        } // split if bits > max: +224 => 256-32\n        const off1 = off, off2 = off + Math.abs(wbits) - 1; // offsets, evaluate both\n        const cnd1 = w % 2 !== 0, cnd2 = wbits < 0; // conditions, evaluate both\n        if (wbits === 0) {\n            f = f.add(neg(cnd1, comp[off1])); // bits are 0: add garbage to fake point\n        }\n        else { //          ^ can't add off2, off2 = I\n            p = p.add(neg(cnd2, comp[off2])); // bits are 1: add to result point\n        }\n    }\n    return { p, f }; // return both real and fake points for JIT\n}; // !! you can disable precomputes by commenting-out call of the wNAF() inside Point#mul()\nexport { getPublicKey, getPublicKeyAsync, sign, verify, // Remove the export to easily use in REPL\nsignAsync, verifyAsync, CURVE, etc, utils, Point as ExtendedPoint }; // envs like browser console\n", "import * as Ed25519 from '@noble/ed25519';\nimport type { PrivateJwk, PublicJwk, Signer } from '../../../types/jose-types.js';\n\nimport { Encoder } from '../../../utils/encoder.js';\n\nfunction validateKey(jwk: PrivateJwk | PublicJwk): void {\n  if (jwk.kty !== 'OKP' || jwk.crv !== 'Ed25519') {\n    throw new Error('invalid jwk. kty MUST be OKP. crv MUST be Ed25519');\n  }\n}\n\nfunction publicKeyToJwk(publicKeyBytes: Uint8Array): PublicJwk {\n  const x = Encoder.bytesToBase64Url(publicKeyBytes);\n\n  const publicJwk: PublicJwk = {\n    alg : 'EdDSA',\n    kty : 'OKP',\n    crv : 'Ed25519',\n    x\n  };\n\n  return publicJwk;\n}\n\nexport const ed25519: Signer = {\n  sign: async (content: Uint8Array, privateJwk: PrivateJwk): Promise<Uint8Array> => {\n    validateKey(privateJwk);\n\n    const contentHex = Ed25519.etc.bytesToHex(content);\n    const privateKeyBytes = Encoder.base64UrlToBytes(privateJwk.d);\n    const privateKeyHex = Ed25519.etc.bytesToHex(privateKeyBytes);\n\n    return Ed25519.signAsync(contentHex, privateKeyHex);\n  },\n\n  verify: async (content: Uint8Array, signature: Uint8Array, publicJwk: PublicJwk): Promise<boolean> => {\n    validateKey(publicJwk);\n\n    const publicKeyBytes = Encoder.base64UrlToBytes(publicJwk.x);\n\n    return Ed25519.verifyAsync(signature, content, publicKeyBytes);\n  },\n\n  generateKeyPair: async (): Promise<{publicJwk: PublicJwk, privateJwk: PrivateJwk}> => {\n    const privateKeyBytes = Ed25519.utils.randomPrivateKey();\n    const privateKeyHex = Ed25519.etc.bytesToHex(privateKeyBytes);\n    const publicKeyBytes = await Ed25519.getPublicKeyAsync(privateKeyHex);\n\n    const d = Encoder.bytesToBase64Url(privateKeyBytes);\n\n    const publicJwk = publicKeyToJwk(publicKeyBytes);\n    const privateJwk: PrivateJwk = { ...publicJwk, d };\n\n    return { publicJwk, privateJwk };\n  },\n\n  publicKeyToJwk: async (publicKeyBytes: Uint8Array): Promise<PublicJwk> => {\n    return publicKeyToJwk(publicKeyBytes);\n  }\n};", "/*! noble-secp256k1 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\nconst B256 = 2n ** 256n; // secp256k1 is short weierstrass curve\nconst P = B256 - 0x1000003d1n; // curve's field prime\nconst N = B256 - 0x14551231950b75fc4402da1732fc9bebfn; // curve (group) order\nconst Gx = 0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798n; // base point x\nconst Gy = 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8n; // base point y\nconst CURVE = { p: P, n: N, a: 0n, b: 7n, Gx, Gy }; // exported variables incl. a, b\nconst fLen = 32; // field / group byte length\nconst crv = (x) => mod(mod(x * x) * x + CURVE.b); // x\u00B3 + ax + b weierstrass formula; no a\nconst err = (m = '') => { throw new Error(m); }; // error helper, messes-up stack trace\nconst big = (n) => typeof n === 'bigint'; // is big integer\nconst str = (s) => typeof s === 'string'; // is string\nconst fe = (n) => big(n) && 0n < n && n < P; // is field element (invertible)\nconst ge = (n) => big(n) && 0n < n && n < N; // is group element\nconst au8 = (a, l) => // is Uint8Array (of specific length)\n !(a instanceof Uint8Array) || (typeof l === 'number' && l > 0 && a.length !== l) ?\n    err('Uint8Array expected') : a;\nconst u8n = (data) => new Uint8Array(data); // creates Uint8Array\nconst toU8 = (a, len) => au8(str(a) ? h2b(a) : u8n(a), len); // norm(hex/u8a) to u8a\nconst mod = (a, b = P) => { let r = a % b; return r >= 0n ? r : b + r; }; // mod division\nconst isPoint = (p) => (p instanceof Point ? p : err('Point expected')); // is 3d point\nlet Gpows = undefined; // precomputes for base point G\nclass Point {\n    constructor(px, py, pz) {\n        this.px = px;\n        this.py = py;\n        this.pz = pz;\n    } //3d=less inversions\n    static fromAffine(p) { return new Point(p.x, p.y, 1n); }\n    static fromHex(hex) {\n        hex = toU8(hex); // convert hex string to Uint8Array\n        let p = undefined;\n        const head = hex[0], tail = hex.subarray(1); // first byte is prefix, rest is data\n        const x = slcNum(tail, 0, fLen), len = hex.length; // next 32 bytes are x coordinate\n        if (len === 33 && [0x02, 0x03].includes(head)) { // compressed points: 33b, start\n            if (!fe(x))\n                err('Point hex invalid: x not FE'); // with byte 0x02 or 0x03. Check if 0<x<P\n            let y = sqrt(crv(x)); // x\u00B3 + ax + b is right side of equation\n            const isYOdd = (y & 1n) === 1n; // y\u00B2 is equivalent left-side. Calculate y\u00B2:\n            const headOdd = (head & 1) === 1; // y = \u221Ay\u00B2; there are two solutions: y, -y\n            if (headOdd !== isYOdd)\n                y = mod(-y); // determine proper solution\n            p = new Point(x, y, 1n); // create point\n        } // Uncompressed points: 65b, start with 0x04\n        if (len === 65 && head === 0x04)\n            p = new Point(x, slcNum(tail, fLen, 2 * fLen), 1n);\n        return p ? p.ok() : err('Point is not on curve'); // Verify the result\n    }\n    static fromPrivateKey(k) { return G.mul(toPriv(k)); } // Create point from a private key.\n    get x() { return this.aff().x; } // .x, .y will call expensive toAffine:\n    get y() { return this.aff().y; } // should be used with care.\n    equals(other) {\n        const { px: X1, py: Y1, pz: Z1 } = this;\n        const { px: X2, py: Y2, pz: Z2 } = isPoint(other); // isPoint() checks class equality\n        const X1Z2 = mod(X1 * Z2), X2Z1 = mod(X2 * Z1);\n        const Y1Z2 = mod(Y1 * Z2), Y2Z1 = mod(Y2 * Z1);\n        return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n    }\n    negate() { return new Point(this.px, mod(-this.py), this.pz); } // Flip point over y coord\n    double() { return this.add(this); } // Point doubling: P+P, complete formula.\n    add(other) {\n        const { px: X1, py: Y1, pz: Z1 } = this; // free formula from Renes-Costello-Batina\n        const { px: X2, py: Y2, pz: Z2 } = isPoint(other); // https://eprint.iacr.org/2015/1060, algo 1\n        const { a, b } = CURVE; // Cost: 12M + 0S + 3*a + 3*b3 + 23add\n        let X3 = 0n, Y3 = 0n, Z3 = 0n;\n        const b3 = mod(b * 3n);\n        let t0 = mod(X1 * X2), t1 = mod(Y1 * Y2), t2 = mod(Z1 * Z2), t3 = mod(X1 + Y1); // step 1\n        let t4 = mod(X2 + Y2); // step 5\n        t3 = mod(t3 * t4);\n        t4 = mod(t0 + t1);\n        t3 = mod(t3 - t4);\n        t4 = mod(X1 + Z1);\n        let t5 = mod(X2 + Z2); // step 10\n        t4 = mod(t4 * t5);\n        t5 = mod(t0 + t2);\n        t4 = mod(t4 - t5);\n        t5 = mod(Y1 + Z1);\n        X3 = mod(Y2 + Z2); // step 15\n        t5 = mod(t5 * X3);\n        X3 = mod(t1 + t2);\n        t5 = mod(t5 - X3);\n        Z3 = mod(a * t4);\n        X3 = mod(b3 * t2); // step 20\n        Z3 = mod(X3 + Z3);\n        X3 = mod(t1 - Z3);\n        Z3 = mod(t1 + Z3);\n        Y3 = mod(X3 * Z3);\n        t1 = mod(t0 + t0); // step 25\n        t1 = mod(t1 + t0);\n        t2 = mod(a * t2);\n        t4 = mod(b3 * t4);\n        t1 = mod(t1 + t2);\n        t2 = mod(t0 - t2); // step 30\n        t2 = mod(a * t2);\n        t4 = mod(t4 + t2);\n        t0 = mod(t1 * t4);\n        Y3 = mod(Y3 + t0);\n        t0 = mod(t5 * t4); // step 35\n        X3 = mod(t3 * X3);\n        X3 = mod(X3 - t0);\n        t0 = mod(t3 * t1);\n        Z3 = mod(t5 * Z3);\n        Z3 = mod(Z3 + t0); // step 40\n        return new Point(X3, Y3, Z3);\n    }\n    mul(n, safe = true) {\n        if (!safe && n === 0n)\n            return I; // in unsafe mode, allow zero\n        if (!ge(n))\n            err('invalid scalar'); // must be 0 < n < CURVE.n\n        if (this.equals(G))\n            return wNAF(n).p; // use precomputes for base point\n        let p = I, f = G; // init result point & fake point\n        for (let d = this; n > 0n; d = d.double(), n >>= 1n) { // double-and-add ladder\n            if (n & 1n)\n                p = p.add(d); // if bit is present, add to point\n            else if (safe)\n                f = f.add(d); // if not, add to fake for timing safety\n        }\n        return p;\n    }\n    mulAddQUns(R, u1, u2) {\n        return this.mul(u1, false).add(R.mul(u2, false)).ok(); // Unsafe: do NOT use for stuff related\n    } // to private keys. Doesn't use Shamir trick\n    toAffine() {\n        const { px: x, py: y, pz: z } = this; // (x, y, z) \u220B (x=x/z, y=y/z)\n        if (this.equals(I))\n            return { x: 0n, y: 0n }; // fast-path for zero point\n        if (z === 1n)\n            return { x, y }; // if z is 1, pass affine coordinates as-is\n        const iz = inv(z); // z^-1: invert z\n        if (mod(z * iz) !== 1n)\n            err('invalid inverse'); // (z * z^-1) must be 1, otherwise bad math\n        return { x: mod(x * iz), y: mod(y * iz) }; // x = x*z^-1; y = y*z^-1\n    }\n    assertValidity() {\n        const { x, y } = this.aff(); // convert to 2d xy affine point.\n        if (!fe(x) || !fe(y))\n            err('Point invalid: x or y'); // x and y must be in range 0 < n < P\n        return mod(y * y) === crv(x) ? // y\u00B2 = x\u00B3 + ax + b, must be equal\n            this : err('Point invalid: not on curve');\n    }\n    multiply(n) { return this.mul(n); } // Aliases to compress code\n    aff() { return this.toAffine(); }\n    ok() { return this.assertValidity(); }\n    toHex(isCompressed = true) {\n        const { x, y } = this.aff(); // convert to 2d xy affine point\n        const head = isCompressed ? ((y & 1n) === 0n ? '02' : '03') : '04'; // 0x02, 0x03, 0x04 prefix\n        return head + n2h(x) + (isCompressed ? '' : n2h(y)); // prefix||x and ||y\n    }\n    toRawBytes(isCompressed = true) {\n        return h2b(this.toHex(isCompressed)); // re-use toHex(), convert hex to bytes\n    }\n}\nPoint.BASE = new Point(Gx, Gy, 1n); // Generator / base point\nPoint.ZERO = new Point(0n, 1n, 0n); // Identity / zero point\nconst { BASE: G, ZERO: I } = Point; // Generator, identity points\nconst padh = (n, pad) => n.toString(16).padStart(pad, '0');\nconst b2h = (b) => Array.from(b).map(e => padh(e, 2)).join(''); // bytes to hex\nconst h2b = (hex) => {\n    const l = hex.length; // error if not string,\n    if (!str(hex) || l % 2)\n        err('hex invalid 1'); // or has odd length like 3, 5.\n    const arr = u8n(l / 2); // create result array\n    for (let i = 0; i < arr.length; i++) {\n        const j = i * 2;\n        const h = hex.slice(j, j + 2); // hexByte. slice is faster than substr\n        const b = Number.parseInt(h, 16); // byte, created from string part\n        if (Number.isNaN(b) || b < 0)\n            err('hex invalid 2'); // byte must be valid 0 <= byte < 256\n        arr[i] = b;\n    }\n    return arr;\n};\nconst b2n = (b) => BigInt('0x' + (b2h(b) || '0')); // bytes to number\nconst slcNum = (b, from, to) => b2n(b.slice(from, to)); // slice bytes num\nconst n2b = (num) => {\n    return big(num) && num >= 0n && num < B256 ? h2b(padh(num, 2 * fLen)) : err('bigint expected');\n};\nconst n2h = (num) => b2h(n2b(num)); // number to 32b hex\nconst concatB = (...arrs) => {\n    const r = u8n(arrs.reduce((sum, a) => sum + au8(a).length, 0)); // create u8a of summed length\n    let pad = 0; // walk through each array,\n    arrs.forEach(a => { r.set(a, pad); pad += a.length; }); // ensure they have proper type\n    return r;\n};\nconst inv = (num, md = P) => {\n    if (num === 0n || md <= 0n)\n        err('no inverse n=' + num + ' mod=' + md); // no neg exponent for now\n    let a = mod(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n;\n    while (a !== 0n) { // uses euclidean gcd algorithm\n        const q = b / a, r = b % a; // not constant-time\n        const m = x - u * q, n = y - v * q;\n        b = a, a = r, x = u, y = v, u = m, v = n;\n    }\n    return b === 1n ? mod(x, md) : err('no inverse'); // b is gcd at this point\n};\nconst sqrt = (n) => {\n    let r = 1n; // So, a special, fast case. Paper: \"Square Roots from 1;24,51,10 to Dan Shanks\".\n    for (let num = n, e = (P + 1n) / 4n; e > 0n; e >>= 1n) { // powMod: modular exponentiation.\n        if (e & 1n)\n            r = (r * num) % P; // Uses exponentiation by squaring.\n        num = (num * num) % P; // Not constant-time.\n    }\n    return mod(r * r) === n ? r : err('sqrt invalid'); // check if result is valid\n};\nconst toPriv = (p) => {\n    if (!big(p))\n        p = b2n(toU8(p, fLen)); // convert to bigint when bytes\n    return ge(p) ? p : err('private key out of range'); // check if bigint is in range\n};\nconst moreThanHalfN = (n) => n > (N >> 1n); // if a number is bigger than CURVE.n/2\nfunction getPublicKey(privKey, isCompressed = true) {\n    return Point.fromPrivateKey(privKey).toRawBytes(isCompressed); // 33b or 65b output\n}\nclass Signature {\n    constructor(r, s, recovery) {\n        this.r = r;\n        this.s = s;\n        this.recovery = recovery;\n        this.assertValidity(); // recovery bit is optional when\n    } // constructed outside.\n    static fromCompact(hex) {\n        hex = toU8(hex, 64); // compact repr is (32b r)||(32b s)\n        return new Signature(slcNum(hex, 0, fLen), slcNum(hex, fLen, 2 * fLen));\n    }\n    assertValidity() { return ge(this.r) && ge(this.s) ? this : err(); } // 0 < r or s < CURVE.n\n    addRecoveryBit(rec) { return new Signature(this.r, this.s, rec); }\n    hasHighS() { return moreThanHalfN(this.s); }\n    recoverPublicKey(msgh) {\n        const { r, s, recovery: rec } = this; // secg.org/sec1-v2.pdf 4.1.6\n        if (![0, 1, 2, 3].includes(rec))\n            err('recovery id invalid'); // check recovery id\n        const h = bits2int_modN(toU8(msgh, 32)); // Truncate hash\n        const radj = rec === 2 || rec === 3 ? r + N : r; // If rec was 2 or 3, q.x is bigger than n\n        if (radj >= P)\n            err('q.x invalid'); // ensure q.x is still a field element\n        const head = (rec & 1) === 0 ? '02' : '03'; // head is 0x02 or 0x03\n        const R = Point.fromHex(head + n2h(radj)); // concat head + hex repr of r\n        const ir = inv(radj, N); // r^-1\n        const u1 = mod(-h * ir, N); // -hr^-1\n        const u2 = mod(s * ir, N); // sr^-1\n        return G.mulAddQUns(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n    }\n    toCompactRawBytes() { return h2b(this.toCompactHex()); } // Uint8Array 64b compact repr\n    toCompactHex() { return n2h(this.r) + n2h(this.s); } // hex 64b compact repr\n}\nconst bits2int = (bytes) => {\n    const delta = bytes.length * 8 - 256; // RFC suggests optional truncating via bits2octets\n    const num = b2n(bytes); // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which\n    return delta > 0 ? num >> BigInt(delta) : num; // matches bits2int. bits2int can produce res>N.\n};\nconst bits2int_modN = (bytes) => {\n    return mod(bits2int(bytes), N); // with 0: BAD for trunc as per RFC vectors\n};\nconst i2o = (num) => n2b(num); // int to octets\nconst cr = () => // We support: 1) browsers 2) node.js 19+ 3) deno, other envs with crypto\n typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\nlet _hmacSync; // Can be redefined by use in utils; built-ins don't provide it\nconst optS = { lowS: true }; // opts for sign()\nconst optV = { lowS: true }; // standard opts for verify()\nfunction prepSig(msgh, priv, opts = optS) {\n    if (['der', 'recovered', 'canonical'].some(k => k in opts)) // Ban legacy options\n        err('sign() legacy options not supported');\n    let { lowS } = opts; // generates low-s sigs by default\n    if (lowS == null)\n        lowS = true; // RFC6979 3.2: we skip step A\n    const h1i = bits2int_modN(toU8(msgh)); // msg bigint\n    const h1o = i2o(h1i); // msg octets\n    const d = toPriv(priv); // validate private key, convert to bigint\n    const seed = [i2o(d), h1o]; // Step D of RFC6979 3.2\n    let ent = opts.extraEntropy; // RFC6979 3.6: additional k' (optional)\n    if (ent) { // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n        if (ent === true)\n            ent = etc.randomBytes(fLen); // if true, use CSPRNG to generate data\n        const e = toU8(ent); // convert Hex|Bytes to Bytes\n        if (e.length !== fLen)\n            err(); // Expected 32 bytes of extra data\n        seed.push(e);\n    }\n    const m = h1i; // convert msg to bigint\n    const k2sig = (kBytes) => {\n        const k = bits2int(kBytes); // RFC6979 method.\n        if (!ge(k))\n            return; // Check 0 < k < CURVE.n\n        const ik = inv(k, N); // k^-1 mod n, NOT mod P\n        const q = G.mul(k).aff(); // q = Gk\n        const r = mod(q.x, N); // r = q.x mod n\n        if (r === 0n)\n            return; // r=0 invalid\n        const s = mod(ik * mod(m + mod(d * r, N), N), N); // s = k^-1(m + rd) mod n\n        if (s === 0n)\n            return; // s=0 invalid\n        let normS = s; // normalized S\n        let rec = (q.x === r ? 0 : 2) | Number(q.y & 1n); // recovery bit\n        if (lowS && moreThanHalfN(s)) { // if lowS was passed, ensure s is always\n            normS = mod(-s, N); // in the bottom half of CURVE.n\n            rec ^= 1;\n        }\n        return new Signature(r, normS, rec); // use normS, not s\n    };\n    return { seed: concatB(...seed), k2sig };\n}\nfunction hmacDrbg(asynchronous) {\n    let v = u8n(fLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n    let k = u8n(fLen); // Steps B, 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 = () => { v.fill(1); k.fill(0); i = 0; };\n    const _e = 'drbg: tried 1000 values';\n    if (asynchronous) { // asynchronous=true\n        const h = (...b) => etc.hmacSha256Async(k, v, ...b); // hmac(k)(v, ...values)\n        const reseed = async (seed = u8n()) => {\n            k = await h(u8n([0x00]), seed); // k = hmac(K || V || 0x00 || seed)\n            v = await h(); // v = hmac(K || V)\n            if (seed.length === 0)\n                return;\n            k = await h(u8n([0x01]), seed); // k = hmac(K || V || 0x01 || seed)\n            v = await h(); // v = hmac(K || V)\n        };\n        const gen = async () => {\n            if (i++ >= 1000)\n                err(_e);\n            v = await h(); // v = hmac(K || V)\n            return v;\n        };\n        return async (seed, pred) => {\n            reset(); // the returned fn, don't, it's: 1. slower (JIT). 2. unsafe (async race conditions)\n            await reseed(seed); // Steps D-G\n            let res = undefined; // Step H: grind until k is in [1..n-1]\n            while (!(res = pred(await gen())))\n                await reseed(); // test predicate until it returns ok\n            reset();\n            return res;\n        };\n    }\n    else {\n        const h = (...b) => {\n            const f = _hmacSync;\n            if (!f)\n                err('etc.hmacSha256Sync not set');\n            return f(k, v, ...b); // hmac(k)(v, ...values)\n        };\n        const reseed = (seed = u8n()) => {\n            k = h(u8n([0x00]), seed); // k = hmac(k || v || 0x00 || seed)\n            v = h(); // v = hmac(k || v)\n            if (seed.length === 0)\n                return;\n            k = h(u8n([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n            v = h(); // v = hmac(k || v)\n        };\n        const gen = () => {\n            if (i++ >= 1000)\n                err(_e);\n            v = h(); // v = hmac(k || v)\n            return v;\n        };\n        return (seed, pred) => {\n            reset();\n            reseed(seed); // Steps D-G\n            let res = undefined; // Step H: grind until k is in [1..n-1]\n            while (!(res = pred(gen())))\n                reseed(); // test predicate until it returns ok\n            reset();\n            return res;\n        };\n    }\n}\n// ECDSA signature generation. via secg.org/sec1-v2.pdf 4.1.2 + RFC6979 deterministic k\nasync function signAsync(msgh, priv, opts = optS) {\n    const { seed, k2sig } = prepSig(msgh, priv, opts); // Extract arguments for hmac-drbg\n    return hmacDrbg(true)(seed, k2sig); // Re-run hmac-drbg until k2sig returns ok\n}\nfunction sign(msgh, priv, opts = optS) {\n    const { seed, k2sig } = prepSig(msgh, priv, opts); // Extract arguments for hmac-drbg\n    return hmacDrbg(false)(seed, k2sig); // Re-run hmac-drbg until k2sig returns ok\n}\nfunction verify(sig, msgh, pub, opts = optV) {\n    let { lowS } = opts; // ECDSA signature verification\n    if (lowS == null)\n        lowS = true; // Default lowS=true\n    if ('strict' in opts)\n        err('verify() legacy options not supported'); // legacy param\n    let sig_, h, P; // secg.org/sec1-v2.pdf 4.1.4\n    const rs = sig && typeof sig === 'object' && 'r' in sig; // Previous ver supported DER sigs. We\n    if (!rs && (toU8(sig).length !== 2 * fLen)) // throw error when DER is suspected now.\n        err('signature must be 64 bytes');\n    try {\n        sig_ = rs ? new Signature(sig.r, sig.s).assertValidity() : Signature.fromCompact(sig);\n        h = bits2int_modN(toU8(msgh, fLen)); // Truncate hash\n        P = pub instanceof Point ? pub.ok() : Point.fromHex(pub); // Validate public key\n    }\n    catch (e) {\n        return false;\n    } // Check sig for validity in both cases\n    if (!sig_)\n        return false;\n    const { r, s } = sig_;\n    if (lowS && moreThanHalfN(s))\n        return false; // lowS bans sig.s >= CURVE.n/2\n    let R;\n    try {\n        const is = inv(s, N); // s^-1\n        const u1 = mod(h * is, N); // u1 = hs^-1 mod n\n        const u2 = mod(r * is, N); // u2 = rs^-1 mod n\n        R = G.mulAddQUns(P, u1, u2).aff(); // R = u1\u22C5G + u2\u22C5P\n    }\n    catch (error) {\n        return false;\n    }\n    if (!R)\n        return false; // stop if R is identity / zero point\n    const v = mod(R.x, N); // <== The weird ECDSA part. R.x must be in N's field, not P's\n    return v === r; // mod(R.x, n) == r\n}\nfunction getSharedSecret(privA, pubB, isCompressed = true) {\n    return Point.fromHex(pubB).mul(toPriv(privA)).toRawBytes(isCompressed); // ECDH\n}\nfunction hashToPrivateKey(hash) {\n    hash = toU8(hash); // produces private keys with modulo bias\n    const minLen = fLen + 8; // being neglible.\n    if (hash.length < minLen || hash.length > 1024)\n        err('expected proper params');\n    const num = mod(b2n(hash), N - 1n) + 1n; // takes at least n+8 bytes\n    return n2b(num);\n}\nconst etc = {\n    hexToBytes: h2b, bytesToHex: b2h,\n    concatBytes: concatB, bytesToNumberBE: b2n, numberToBytesBE: n2b,\n    mod, invert: inv,\n    hmacSha256Async: async (key, ...msgs) => {\n        const crypto = cr(); // HMAC-SHA256 async. No sync built-in!\n        if (!crypto)\n            return err('etc.hmacSha256Async not set'); // Uses webcrypto: native cryptography.\n        const s = crypto.subtle;\n        const k = await s.importKey('raw', key, { name: 'HMAC', hash: { name: 'SHA-256' } }, false, ['sign']);\n        return u8n(await s.sign('HMAC', k, concatB(...msgs)));\n    },\n    hmacSha256Sync: _hmacSync,\n    hashToPrivateKey,\n    randomBytes: (len) => {\n        const crypto = cr(); // Can be shimmed in node.js <= 18 to prevent error:\n        // import { webcrypto } from 'node:crypto';\n        // if (!globalThis.crypto) globalThis.crypto = webcrypto;\n        if (!crypto)\n            err('crypto.getRandomValues must be defined');\n        return crypto.getRandomValues(u8n(len));\n    },\n};\nconst utils = {\n    normPrivateKeyToScalar: toPriv,\n    isValidPrivateKey: (key) => { try {\n        return !!toPriv(key);\n    }\n    catch (e) {\n        return false;\n    } },\n    randomPrivateKey: () => hashToPrivateKey(etc.randomBytes(fLen + 8)),\n    precompute(w = 8, p = G) { p.multiply(3n); return p; }, // no-op\n};\nObject.defineProperties(etc, { hmacSha256Sync: {\n        configurable: false, get() { return _hmacSync; }, set(f) { if (!_hmacSync)\n            _hmacSync = f; },\n    } });\nconst W = 8; // Precomputes-related code. W = window size\nconst precompute = () => {\n    const points = []; // 10x sign(), 2x verify(). To achieve this,\n    const windows = 256 / W + 1; // app needs to spend 40ms+ to calculate\n    let p = G, b = p; // a lot of points related to base point G.\n    for (let w = 0; w < windows; w++) { // Points are stored in array and used\n        b = p; // any time Gx multiplication is done.\n        points.push(b); // They consume 16-32 MiB of RAM.\n        for (let i = 1; i < 2 ** (W - 1); i++) {\n            b = b.add(p);\n            points.push(b);\n        }\n        p = b.double(); // Precomputes don't speed-up getSharedKey,\n    } // which multiplies user point by scalar,\n    return points; // when precomputes are using base point\n};\nconst wNAF = (n) => {\n    // Compared to other point mult methods,\n    const comp = Gpows || (Gpows = precompute()); // stores 2x less points using subtraction\n    const neg = (cnd, p) => { let n = p.negate(); return cnd ? n : p; }; // negate\n    let p = I, f = G; // f must be G, or could become I in the end\n    const windows = 1 + 256 / W; // W=8 17 windows\n    const wsize = 2 ** (W - 1); // W=8 128 window size\n    const mask = BigInt(2 ** W - 1); // W=8 will create mask 0b11111111\n    const maxNum = 2 ** W; // W=8 256\n    const shiftBy = BigInt(W); // W=8 8\n    for (let w = 0; w < windows; w++) {\n        const off = w * wsize;\n        let wbits = Number(n & mask); // extract W bits.\n        n >>= shiftBy; // shift number by W bits.\n        if (wbits > wsize) {\n            wbits -= maxNum;\n            n += 1n;\n        } // split if bits > max: +224 => 256-32\n        const off1 = off, off2 = off + Math.abs(wbits) - 1; // offsets, evaluate both\n        const cnd1 = w % 2 !== 0, cnd2 = wbits < 0; // conditions, evaluate both\n        if (wbits === 0) {\n            f = f.add(neg(cnd1, comp[off1])); // bits are 0: add garbage to fake point\n        }\n        else { //          ^ can't add off2, off2 = I\n            p = p.add(neg(cnd2, comp[off2])); // bits are 1: add to result point\n        }\n    }\n    return { p, f }; // return both real and fake points for JIT\n}; // !! you can disable precomputes by commenting-out call of the wNAF() inside Point#mul()\nexport { getPublicKey, sign, signAsync, verify, CURVE, // Remove the export to easily use in REPL\ngetSharedSecret, etc, utils, Point as ProjectivePoint, Signature }; // envs like browser console\n", "import type { PrivateJwk, PublicJwk } from '../types/jose-types.js';\n\nimport * as secp256k1 from '@noble/secp256k1';\nimport secp256k1Derivation from 'secp256k1';\n\nimport { Encoder } from '../utils/encoder.js';\nimport { sha256 } from 'multiformats/hashes/sha2';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\n/**\n * Class containing SECP256K1 related utility methods.\n */\nexport class Secp256k1 {\n  /**\n   * Validates the given JWK is a SECP256K1 key.\n   * @throws {Error} if fails validation.\n   */\n  public static validateKey(jwk: PrivateJwk | PublicJwk): void {\n    if (jwk.kty !== 'EC' || jwk.crv !== 'secp256k1') {\n      throw new DwnError(DwnErrorCode.Secp256k1KeyNotValid, 'Invalid SECP256K1 JWK: `kty` MUST be `EC`. `crv` MUST be `secp256k1`');\n    }\n  }\n\n  /**\n   * Converts a public key in bytes into a JWK.\n   */\n  public static async publicKeyToJwk(publicKeyBytes: Uint8Array): Promise<PublicJwk> {\n  // ensure public key is in uncompressed format so we can convert it into both x and y value\n    let uncompressedPublicKeyBytes;\n    if (publicKeyBytes.byteLength === 33) {\n    // this means given key is compressed\n      const publicKeyHex = secp256k1.etc.bytesToHex(publicKeyBytes);\n      const curvePoints = secp256k1.ProjectivePoint.fromHex(publicKeyHex);\n      uncompressedPublicKeyBytes = curvePoints.toRawBytes(false); // isCompressed = false\n    } else {\n      uncompressedPublicKeyBytes = publicKeyBytes;\n    }\n\n    // the first byte is a header that indicates whether the key is uncompressed (0x04 if uncompressed), we can safely ignore\n    // bytes 1 - 32 represent X\n    // bytes 33 - 64 represent Y\n\n    // skip the first byte because it's used as a header to indicate whether the key is uncompressed\n    const x = Encoder.bytesToBase64Url(uncompressedPublicKeyBytes.subarray(1, 33));\n    const y = Encoder.bytesToBase64Url(uncompressedPublicKeyBytes.subarray(33, 65));\n\n    const publicJwk: PublicJwk = {\n      alg : 'ES256K',\n      kty : 'EC',\n      crv : 'secp256k1',\n      x,\n      y\n    };\n\n    return publicJwk;\n  }\n\n  /**\n   * Converts a private key in bytes into a JWK.\n   */\n  public static async privateKeyToJwk(privateKeyBytes: Uint8Array): Promise<PrivateJwk> {\n    const publicKeyBytes = await Secp256k1.getPublicKey(privateKeyBytes);\n\n    const jwk = await Secp256k1.publicKeyToJwk(publicKeyBytes);\n    (jwk as PrivateJwk).d = Encoder.bytesToBase64Url(privateKeyBytes);\n\n    return jwk as PrivateJwk;\n  }\n\n  /**\n   * Creates a uncompressed key in raw bytes from the given SECP256K1 JWK.\n   */\n  public static publicJwkToBytes(publicJwk: PublicJwk): Uint8Array {\n    const x = Encoder.base64UrlToBytes(publicJwk.x);\n    const y = Encoder.base64UrlToBytes(publicJwk.y!);\n\n    // leading byte of 0x04 indicates that the public key is uncompressed\n    const publicKey = new Uint8Array([0x04, ...x, ...y]);\n    return publicKey;\n  }\n\n  /**\n   * Creates a private key in raw bytes from the given SECP256K1 JWK.\n   */\n  public static privateJwkToBytes(privateJwk: PrivateJwk): Uint8Array {\n    const privateKey = Encoder.base64UrlToBytes(privateJwk.d);\n    return privateKey;\n  }\n\n  /**\n   * Signs the provided content using the provided JWK.\n   */\n  public static async sign(content: Uint8Array, privateJwk: PrivateJwk): Promise<Uint8Array> {\n    Secp256k1.validateKey(privateJwk);\n\n    // the underlying lib expects us to hash the content ourselves:\n    // https://github.com/paulmillr/noble-secp256k1/blob/97aa518b9c12563544ea87eba471b32ecf179916/index.ts#L1160\n    const hashedContent = await sha256.encode(content);\n    const hashedContentHex = secp256k1.etc.bytesToHex(hashedContent);\n    const privateKeyBytes = Secp256k1.privateJwkToBytes(privateJwk);\n    const privateKeyHex = secp256k1.etc.bytesToHex(privateKeyBytes);\n\n    return (await secp256k1.signAsync(hashedContentHex, privateKeyHex, )).toCompactRawBytes();\n  }\n\n  /**\n   * Verifies a signature against the provided payload hash and public key.\n   * @returns a boolean indicating whether the signature is valid.\n   */\n  public static async verify(content: Uint8Array, signature: Uint8Array, publicJwk: PublicJwk): Promise<boolean> {\n    Secp256k1.validateKey(publicJwk);\n\n    const publicKeyBytes = Secp256k1.publicJwkToBytes(publicJwk);\n    const hashedContent = await sha256.encode(content);\n    return secp256k1.verify(signature, hashedContent, publicKeyBytes);\n  }\n\n  /**\n   * Generates a random key pair in JWK format.\n   */\n  public static async generateKeyPair(): Promise<{publicJwk: PublicJwk, privateJwk: PrivateJwk}> {\n    const privateKeyBytes = secp256k1.utils.randomPrivateKey();\n    const publicKeyBytes = secp256k1.getPublicKey(privateKeyBytes, false); // `false` = uncompressed\n\n    const d = Encoder.bytesToBase64Url(privateKeyBytes);\n    const publicJwk: PublicJwk = await Secp256k1.publicKeyToJwk(publicKeyBytes);\n    const privateJwk: PrivateJwk = { ...publicJwk, d };\n\n    return { publicJwk, privateJwk };\n  }\n\n  /**\n   * Generates key pair in raw bytes, where the `publicKey` is uncompressed.\n   */\n  public static async generateKeyPairRaw(): Promise<{publicKey: Uint8Array, privateKey: Uint8Array}> {\n    const privateKey = secp256k1.utils.randomPrivateKey();\n    const publicKey = secp256k1.getPublicKey(privateKey, false); // `false` = uncompressed\n\n    return { publicKey, privateKey };\n  }\n\n  /**\n   * Gets the uncompressed public key of the given private key.\n   */\n  public static async getPublicKey(privateKey: Uint8Array): Promise<Uint8Array> {\n    const publicKey = secp256k1.getPublicKey(privateKey, false); // `false` = uncompressed\n    return publicKey;\n  }\n\n  /**\n   * Derives a hierarchical deterministic public key.\n   * @param key Either a private or an uncompressed public key used to derive the descendant public key.\n   * @returns uncompressed public key\n   */\n  public static async derivePublicKey(key: Uint8Array, relativePath: string[]): Promise<Uint8Array> {\n    Secp256k1.validateKeyDerivationPath(relativePath);\n\n    let currentPublicKey: Uint8Array;\n    if (key.length === 32) {\n      // private key is always 32 bytes\n      currentPublicKey = secp256k1.getPublicKey(key, false); // `false` = uncompressed\n    } else {\n      currentPublicKey = key;\n    }\n\n    for (const segment of relativePath) {\n      const hash = await sha256.encode(Encoder.stringToBytes(segment));\n      currentPublicKey = Secp256k1.deriveChildPublicKey(currentPublicKey, hash);\n    }\n\n    return currentPublicKey;\n  }\n\n  /**\n   * Derives a hierarchical deterministic private key.\n   */\n  public static async derivePrivateKey(privateKey: Uint8Array, relativePath: string[]): Promise<Uint8Array> {\n    Secp256k1.validateKeyDerivationPath(relativePath);\n\n    let currentPrivateKey = privateKey;\n    for (const segment of relativePath) {\n      const hash = await sha256.encode(Encoder.stringToBytes(segment));\n      currentPrivateKey = Secp256k1.deriveChildPrivateKey(currentPrivateKey, hash);\n    }\n\n    return currentPrivateKey;\n  }\n\n  /**\n   * Derives a child public key using the given tweak input.\n   */\n  public static deriveChildPublicKey(uncompressedPublicKey: Uint8Array, tweakInput: Uint8Array): Uint8Array {\n    // underlying library requires Buffer as input\n    const compressedPublicKey = false;\n    const publicKeyBuffer = Buffer.from(uncompressedPublicKey);\n    const tweakBuffer = Buffer.from(tweakInput);\n    const derivedPublicKey = secp256k1Derivation.publicKeyTweakAdd(publicKeyBuffer, tweakBuffer, compressedPublicKey);\n    return derivedPublicKey;\n  }\n\n  /**\n   * Derives a child private key using the given tweak input.\n   */\n  public static deriveChildPrivateKey(privateKey: Uint8Array, tweakInput: Uint8Array): Uint8Array {\n    // NOTE: passing in private key to v5.0.0 of `secp256k1.privateKeyTweakAdd()` has the side effect of modifying the input private key bytes.\n    // `secp256k1.publicKeyTweakAdd()` does not have this side effect.\n    // before there is a fix for it (we can also investigate and submit a PR), cloning the private key to workaround is a MUST\n    // also underlying library requires Buffer as input\n    const privateKeyBuffer = Buffer.from(privateKey);\n    const tweakBuffer = Buffer.from(tweakInput);\n    const derivedPrivateKey = secp256k1Derivation.privateKeyTweakAdd(privateKeyBuffer, tweakBuffer);\n    return derivedPrivateKey;\n  }\n\n  /**\n   * Parses the given key derivation path.\n   * @returns Path segments if successfully validate the derivation path.\n   * @throws {DwnError} with `DwnErrorCode.HdKeyDerivationPathInvalid` if derivation path fails validation.\n   */\n  private static validateKeyDerivationPath(pathSegments: string[]): void {\n    if (pathSegments.includes('')) {\n      throw new DwnError(DwnErrorCode.HdKeyDerivationPathInvalid, `Invalid key derivation path: ${pathSegments}`);\n    }\n  }\n}\n", "/**\n * A class that represents a DWN error.\n */\nexport class DwnError extends Error {\n  constructor (public code: string, message: string) {\n    super(`${code}: ${message}`);\n\n    this.name = 'DwnError';\n  }\n}\n\n/**\n * DWN SDK error codes.\n */\nexport enum DwnErrorCode {\n  AuthenticateJwsMissing = 'AuthenticateJwsMissing',\n  AuthorizationMissing = 'AuthorizationMissing',\n  AuthorizationUnknownAuthor = 'AuthorizationUnknownAuthor',\n  HdKeyDerivationPathInvalid = 'HdKeyDerivationPathInvalid',\n  PermissionsGrantGrantedByMismatch = 'PermissionsGrantGrantedByMismatch',\n  PermissionsGrantUnauthorizedGrant = 'PermissionsGrantUnauthorizedGrant',\n  ProtocolAuthorizationActionNotAllowed = 'ProtocolAuthorizationActionNotAllowed',\n  ProtocolAuthorizationIncorrectDataFormat = 'ProtocolAuthorizationIncorrectDataFormat',\n  ProtocolAuthorizationIncorrectProtocolPath = 'ProtocolAuthorizationIncorrectProtocolPath',\n  ProtocolAuthorizationInvalidSchema = 'ProtocolAuthorizationInvalidSchema',\n  ProtocolAuthorizationInvalidType = 'ProtocolAuthorizationInvalidType',\n  ProtocolAuthorizationMissingRuleSet = 'ProtocolAuthorizationMissingRuleSet',\n  RecordsDecryptNoMatchingKeyEncryptedFound = 'RecordsDecryptNoMatchingKeyEncryptedFound',\n  RecordsDeriveLeafPrivateKeyUnSupportedCurve = 'RecordsDeriveLeafPrivateKeyUnSupportedCurve',\n  RecordsDeriveLeafPublicKeyUnSupportedCurve = 'RecordsDeriveLeafPublicKeyUnSupportedCurve',\n  RecordsInvalidAncestorKeyDerivationSegment = 'RecordsInvalidAncestorKeyDerivationSegment',\n  RecordsProtocolsDerivationSchemeMissingProtocol = 'RecordsProtocolsDerivationSchemeMissingProtocol',\n  RecordsSchemasDerivationSchemeMissingSchema = 'RecordsSchemasDerivationSchemeMissingSchema',\n  RecordsWriteGetEntryIdUndefinedAuthor = 'RecordsWriteGetEntryIdUndefinedAuthor',\n  RecordsWriteDataCidMismatch = 'RecordsWriteDataCidMismatch',\n  RecordsWriteDataSizeMismatch = 'RecordsWriteDataSizeMismatch',\n  RecordsWriteMissingData = 'RecordsWriterMissingData',\n  RecordsWriteMissingDataStream = 'RecordsWriteMissingDataStream',\n  RecordsWriteValidateIntegrityEncryptionCidMismatch = 'RecordsWriteValidateIntegrityEncryptionCidMismatch',\n  Secp256k1KeyNotValid = 'Secp256k1KeyNotValid',\n  UrlProtocolNotNormalized = 'UrlProtocolNotNormalized',\n  UrlProtocolNotNormalizable = 'UrlProtocolNotNormalizable',\n  UrlSchemaNotNormalized = 'UrlSchemaNotNormalized',\n  UrlSchemaNotNormalizable = 'UrlSchemaNotNormalizable'\n};\n", "import type { GeneralJws, SignatureInput } from '../../../types/jws-types.js';\n\nimport { Encoder } from '../../../utils/encoder.js';\nimport { signers } from '../../algorithms/signing/signers.js';\n\nexport class GeneralJwsSigner {\n  private jws: GeneralJws;\n\n  constructor(jws: GeneralJws) {\n    this.jws = jws;\n  }\n\n  static async create(payload: Uint8Array, signatureInputs: SignatureInput[] = []): Promise<GeneralJwsSigner> {\n    const jws: GeneralJws = {\n      payload    : Encoder.bytesToBase64Url(payload),\n      signatures : []\n    };\n\n    const signer = new GeneralJwsSigner(jws);\n\n    for (const signatureInput of signatureInputs) {\n      await signer.addSignature(signatureInput);\n    }\n\n    return signer;\n  }\n\n  async addSignature(signatureInput: SignatureInput): Promise<void> {\n    const { privateJwk, protectedHeader } = signatureInput;\n    const signer = signers[privateJwk.crv];\n\n    if (!signer) {\n      throw new Error(`unsupported crv. crv must be one of ${Object.keys(signers)}`);\n    }\n\n    const protectedHeaderString = JSON.stringify(protectedHeader);\n    const protectedHeaderBase64UrlString = Encoder.stringToBase64Url(protectedHeaderString);\n\n    const signingInputString = `${protectedHeaderBase64UrlString}.${this.jws.payload}`;\n    const signingInputBytes = Encoder.stringToBytes(signingInputString);\n\n    const signatureBytes = await signer.sign(signingInputBytes, privateJwk);\n    const signature = Encoder.bytesToBase64Url(signatureBytes);\n\n    this.jws.signatures.push({ protected: protectedHeaderBase64UrlString, signature });\n  }\n\n  getJws(): GeneralJws {\n    return this.jws;\n  }\n}", "import type { SignatureEntry } from '../types/jws-types.js';\nimport type { GeneralJws, SignatureInput } from '../types/jws-types.js';\nimport type { KeyMaterial, PublicJwk } from '../types/jose-types.js';\n\nimport isPlainObject from 'lodash/isPlainObject.js';\n\nimport { Encoder } from './encoder.js';\nimport { signers as verifiers } from '../jose/algorithms/signing/signers.js';\n\n\n/**\n * Utility class for JWS related operations.\n */\nexport class Jws {\n  /**\n   * Gets the `kid` from a general JWS signature entry.\n   */\n  public static getKid(signatureEntry: SignatureEntry): string {\n    const { kid } = Encoder.base64UrlToObject(signatureEntry.protected);\n    return kid;\n  }\n\n  /**\n   * Gets the signer DID from a general JWS signature entry.\n   */\n  public static getSignerDid(signatureEntry: SignatureEntry): string {\n    const kid = Jws.getKid(signatureEntry);\n    const did = Jws.extractDid(kid);\n    return did;\n  }\n\n  /**\n   * Verifies the signature against the given payload.\n   * @returns `true` if signature is valid; `false` otherwise\n   */\n  public static async verifySignature(base64UrlPayload: string, signatureEntry: SignatureEntry, jwkPublic: PublicJwk): Promise<boolean> {\n    const verifier = verifiers[jwkPublic.crv];\n\n    if (!verifier) {\n      throw new Error(`unsupported crv. crv must be one of ${Object.keys(verifiers)}`);\n    }\n\n    const payload = Encoder.stringToBytes(`${signatureEntry.protected}.${base64UrlPayload}`);\n    const signatureBytes = Encoder.base64UrlToBytes(signatureEntry.signature);\n\n    return await verifier.verify(payload, signatureBytes, jwkPublic);\n  }\n\n  /**\n   * Decodes the payload of the given JWS object as a plain object.\n   */\n  public static decodePlainObjectPayload(jws: GeneralJws): any {\n    let payloadJson;\n    try {\n      payloadJson = Encoder.base64UrlToObject(jws.payload);\n    } catch {\n      throw new Error('payload is not a JSON object');\n    }\n\n    if (!isPlainObject(payloadJson)) {\n      throw new Error('signed payload must be a plain object');\n    }\n\n    return payloadJson;\n  }\n\n  /**\n   * Extracts the DID from the given `kid` string.\n   */\n  public static extractDid(kid: string): string {\n    const [ did ] = kid.split('#');\n    return did;\n  }\n\n  /**\n   * Creates a SignatureInput[] from the given Personas.\n   */\n  public static createSignatureInputs(keyMaterials: KeyMaterial[]): SignatureInput[] {\n    const signatureInputs = keyMaterials.map((keyMaterial) => Jws.createSignatureInput(keyMaterial));\n    return signatureInputs;\n  }\n\n  /**\n   * Creates a SignatureInput from the given Persona.\n   */\n  public static createSignatureInput(keyMaterial: KeyMaterial): SignatureInput {\n    const signatureInput = {\n      privateJwk      : keyMaterial.keyPair.privateJwk,\n      protectedHeader : {\n        alg : keyMaterial.keyPair.privateJwk.alg as string,\n        kid : keyMaterial.keyId\n      }\n    };\n\n    return signatureInput;\n  }\n}\n", "/**\n * Compares two string given in lexicographical order.\n * @returns 1 if `a` is larger than `b`; -1 if `a` is smaller/older than `b`; 0 otherwise (same message)\n */\nexport function lexicographicalCompare(a: string, b: string): number {\n  if (a > b) {\n    return 1;\n  } else if (a < b) {\n    return -1;\n  } else {\n    return 0;\n  }\n}\n", "import * as precompiledValidators from '../generated/precompiled-validators.js';\n\n/**\n * Validates the given payload using JSON schema keyed by the given schema name. Throws if the given payload fails validation.\n * @param schemaName the schema name use to look up the JSON schema to be used for schema validation.\n *                   The list of schema names can be found in compile-validators.js\n * @param payload javascript object to be validated\n */\nexport function validateJsonSchema(schemaName: string, payload: any): void {\n  // const validateFn = validator.getSchema(schemaName);\n  const validateFn = (precompiledValidators as any)[schemaName];\n\n  if (!validateFn) {\n    throw new Error(`schema for ${schemaName} not found.`);\n  }\n\n  validateFn(payload);\n\n  if (!validateFn.errors) {\n    return;\n  }\n\n  // AJV is configured by default to stop validating after the 1st error is encountered which means\n  // there will only ever be one error;\n  const [ errorObj ] = validateFn.errors;\n  let { instancePath, message } = errorObj;\n\n  if (!instancePath) {\n    instancePath = schemaName;\n  }\n\n  throw new Error(`${instancePath}: ${message}`);\n}", null, "import type { GeneralJws } from '../types/jws-types.js';\nimport type { SignatureInput } from '../types/jws-types.js';\nimport type { BaseDecodedAuthorizationPayload, Descriptor, GenericMessage, TimestampedMessage } from '../types/message-types.js';\n\nimport { Cid } from '../utils/cid.js';\nimport { GeneralJwsSigner } from '../jose/jws/general/signer.js';\nimport { Jws } from '../utils/jws.js';\nimport { lexicographicalCompare } from '../utils/string.js';\nimport { validateJsonSchema } from '../schema-validator.js';\n\nexport enum DwnInterfaceName {\n  Events = 'Events',\n  Hooks = 'Hooks',\n  Messages = 'Messages',\n  Permissions = 'Permissions',\n  Protocols = 'Protocols',\n  Records = 'Records',\n  Snapshots = 'Snapshots'\n}\n\nexport enum DwnMethodName {\n  Configure = 'Configure',\n  Create = 'Create',\n  Get = 'Get',\n  Grant = 'Grant',\n  Query = 'Query',\n  Read = 'Read',\n  Request = 'Request',\n  Write = 'Write',\n  Delete = 'Delete'\n}\n\nexport abstract class Message<M extends GenericMessage> {\n  readonly message: M;\n  readonly authorizationPayload: any;\n\n  // commonly used properties for extra convenience;\n  readonly author: string | undefined;\n\n  constructor(message: M) {\n    this.message = message;\n\n    if (message.authorization !== undefined) {\n      this.authorizationPayload = Jws.decodePlainObjectPayload(message.authorization);\n      this.author = Message.getAuthor(message as GenericMessage);\n    }\n  }\n\n  /**\n   * Called by `JSON.stringify(...)` automatically.\n   */\n  toJSON(): GenericMessage {\n    return this.message;\n  }\n\n  /**\n   * Validates the given message against the corresponding JSON schema.\n   * @throws {Error} if fails validation.\n   */\n  public static validateJsonSchema(rawMessage: any): void {\n    const dwnInterface = rawMessage.descriptor.interface;\n    const dwnMethod = rawMessage.descriptor.method;\n    const schemaLookupKey = dwnInterface + dwnMethod;\n\n    // throws an error if message is invalid\n    validateJsonSchema(schemaLookupKey, rawMessage);\n  };\n\n  /**\n   * Gets the DID of the author of the given message, returned `undefined` if message is not signed.\n   */\n  public static getAuthor(message: GenericMessage): string | undefined {\n    if (message.authorization === undefined) {\n      return undefined;\n    }\n\n    const author = Jws.getSignerDid(message.authorization.signatures[0]);\n    return author;\n  }\n\n  /**\n   * Gets the CID of the given message.\n   */\n  public static async getCid(message: GenericMessage): Promise<string> {\n    // NOTE: we wrap the `computeCid()` here in case that\n    // the message will contain properties that should not be part of the CID computation\n    // and we need to strip them out (like `encodedData` that we historically had for a long time),\n    // but we can remove this method entirely if the code becomes stable and it is apparent that the wrapper is not needed\n    const cid = await Cid.computeCid(message);\n    return cid;\n  }\n\n  /**\n   * Compares message CID in lexicographical order according to the spec.\n   * @returns 1 if `a` is larger than `b`; -1 if `a` is smaller/older than `b`; 0 otherwise (same message)\n   */\n  public static async compareCid(a: GenericMessage, b: GenericMessage): Promise<number> {\n    // the < and > operators compare strings in lexicographical order\n    const cidA = await Message.getCid(a);\n    const cidB = await Message.getCid(b);\n    return lexicographicalCompare(cidA, cidB);\n  }\n\n  /**\n   * Compares the CID of two messages.\n   * @returns `true` if `a` is newer than `b`; `false` otherwise\n   */\n  public static async isCidLarger(a: GenericMessage, b: GenericMessage): Promise<boolean> {\n    const aIsLarger = (await Message.compareCid(a, b) > 0);\n    return aIsLarger;\n  }\n\n  /**\n   * @returns message with the largest CID in the array using lexicographical compare. `undefined` if given array is empty.\n   */\n  public static async getMessageWithLargestCid(messages: GenericMessage[]): Promise<GenericMessage | undefined> {\n    let currentNewestMessage: GenericMessage | undefined = undefined;\n    for (const message of messages) {\n      if (currentNewestMessage === undefined || await Message.isCidLarger(message, currentNewestMessage)) {\n        currentNewestMessage = message;\n      }\n    }\n\n    return currentNewestMessage;\n  }\n\n  /**\n   * Signs over the CID of provided `descriptor`. The output is used as an `authorization` property.\n   * @param signatureInput - the signature material to use (e.g. key and header data)\n   * @returns General JWS signature used as an `authorization` property.\n   */\n  public static async signAsAuthorization(\n    descriptor: Descriptor,\n    signatureInput: SignatureInput\n  ): Promise<GeneralJws> {\n    const descriptorCid = await Cid.computeCid(descriptor);\n\n    const authPayload: BaseDecodedAuthorizationPayload = { descriptorCid };\n    const authPayloadStr = JSON.stringify(authPayload);\n    const authPayloadBytes = new TextEncoder().encode(authPayloadStr);\n\n    const signer = await GeneralJwsSigner.create(authPayloadBytes, [signatureInput]);\n\n    return signer.getJws();\n  }\n\n\n  /**\n   * @returns newest message in the array. `undefined` if given array is empty.\n   */\n  public static async getNewestMessage(messages: TimestampedMessage[]): Promise<TimestampedMessage | undefined> {\n    let currentNewestMessage: TimestampedMessage | undefined = undefined;\n    for (const message of messages) {\n      if (currentNewestMessage === undefined || await Message.isNewer(message, currentNewestMessage)) {\n        currentNewestMessage = message;\n      }\n    }\n\n    return currentNewestMessage;\n  }\n\n  /**\n   * Checks if first message is newer than second message.\n   * @returns `true` if `a` is newer than `b`; `false` otherwise\n   */\n  public static async isNewer(a: TimestampedMessage, b: TimestampedMessage): Promise<boolean> {\n    const aIsNewer = (await Message.compareModifiedTime(a, b) > 0);\n    return aIsNewer;\n  }\n\n  /**\n   * Checks if first message is older than second message.\n   * @returns `true` if `a` is older than `b`; `false` otherwise\n   */\n  public static async isOlder(a: TimestampedMessage, b: TimestampedMessage): Promise<boolean> {\n    const aIsNewer = (await Message.compareModifiedTime(a, b) < 0);\n    return aIsNewer;\n  }\n\n  /**\n   * Compares the `dateModified` of the given messages with a fallback to message CID according to the spec.\n   * @returns 1 if `a` is larger/newer than `b`; -1 if `a` is smaller/older than `b`; 0 otherwise (same age)\n   */\n  public static async compareModifiedTime(a: TimestampedMessage, b: TimestampedMessage): Promise<number> {\n    if (a.descriptor.dateModified > b.descriptor.dateModified) {\n      return 1;\n    } else if (a.descriptor.dateModified < b.descriptor.dateModified) {\n      return -1;\n    }\n\n    // else `dateModified` is the same between a and b\n    // compare the `dataCid` instead, the < and > operators compare strings in lexicographical order\n    return Message.compareCid(a, b);\n  }\n}", "import flat from 'flat';\n\n/**\n * Flattens the given object.\n * e.g. `{ a: { b: { c: 42 } } }` becomes `{ 'a.b.c': 42 }`\n */\nexport function flatten(obj: unknown): Record<string, unknown> {\n  const flattened = flat.flatten<unknown, Record<string, unknown>>(obj);\n  removeEmptyObjects(flattened);\n  return flattened;\n}\n\n/**\n * Checks whether the given object has any properties.\n */\nexport function isEmptyObject(obj: unknown): boolean {\n  if (typeof(obj) !== 'object') {\n    return false;\n  }\n\n  for (const _ in obj) {\n    return false;\n  }\n\n  return true;\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}\n", "/**\n * @module LRUCache\n */\n\n// module-private names and types\ntype Perf = { now: () => number }\nconst perf: Perf =\n  typeof performance === 'object' &&\n  performance &&\n  typeof performance.now === 'function'\n    ? performance\n    : Date\n\nconst warned = new Set<string>()\n\n// either a function or a class\ntype ForC = ((...a: any[]) => any) | { new (...a: any[]): any }\n\n/* c8 ignore start */\nconst PROCESS = (\n  typeof process === 'object' && !!process ? process : {}\n) as { [k: string]: any }\n/* c8 ignore start */\n\nconst emitWarning = (\n  msg: string,\n  type: string,\n  code: string,\n  fn: ForC\n) => {\n  typeof PROCESS.emitWarning === 'function'\n    ? PROCESS.emitWarning(msg, type, code, fn)\n    : console.error(`[${code}] ${type}: ${msg}`)\n}\n\nlet AC = globalThis.AbortController\nlet AS = globalThis.AbortSignal\n\n/* c8 ignore start */\nif (typeof AC === 'undefined') {\n  //@ts-ignore\n  AS = class AbortSignal {\n    onabort?: (...a: any[]) => any\n    _onabort: ((...a: any[]) => any)[] = []\n    reason?: any\n    aborted: boolean = false\n    addEventListener(_: string, fn: (...a: any[]) => any) {\n      this._onabort.push(fn)\n    }\n  }\n  //@ts-ignore\n  AC = class AbortController {\n    constructor() {\n      warnACPolyfill()\n    }\n    signal = new AS()\n    abort(reason: any) {\n      if (this.signal.aborted) return\n      //@ts-ignore\n      this.signal.reason = reason\n      //@ts-ignore\n      this.signal.aborted = true\n      //@ts-ignore\n      for (const fn of this.signal._onabort) {\n        fn(reason)\n      }\n      this.signal.onabort?.(reason)\n    }\n  }\n  let printACPolyfillWarning =\n    PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1'\n  const warnACPolyfill = () => {\n    if (!printACPolyfillWarning) return\n    printACPolyfillWarning = false\n    emitWarning(\n      'AbortController is not defined. If using lru-cache in ' +\n        'node 14, load an AbortController polyfill from the ' +\n        '`node-abort-controller` package. A minimal polyfill is ' +\n        'provided for use by LRUCache.fetch(), but it should not be ' +\n        'relied upon in other contexts (eg, passing it to other APIs that ' +\n        'use AbortController/AbortSignal might have undesirable effects). ' +\n        'You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.',\n      'NO_ABORT_CONTROLLER',\n      'ENOTSUP',\n      warnACPolyfill\n    )\n  }\n}\n/* c8 ignore stop */\n\nconst shouldWarn = (code: string) => !warned.has(code)\n\nconst TYPE = Symbol('type')\ntype PosInt = number & { [TYPE]: 'Positive Integer' }\ntype Index = number & { [TYPE]: 'LRUCache Index' }\n\nconst isPosInt = (n: any): n is PosInt =>\n  n && n === Math.floor(n) && n > 0 && isFinite(n)\n\ntype UintArray = Uint8Array | Uint16Array | Uint32Array\ntype NumberArray = UintArray | number[]\n\n/* c8 ignore start */\n// This is a little bit ridiculous, tbh.\n// The maximum array length is 2^32-1 or thereabouts on most JS impls.\n// And well before that point, you're caching the entire world, I mean,\n// that's ~32GB of just integers for the next/prev links, plus whatever\n// else to hold that many keys and values.  Just filling the memory with\n// zeroes at init time is brutal when you get that big.\n// But why not be complete?\n// Maybe in the future, these limits will have expanded.\nconst getUintArray = (max: number) =>\n  !isPosInt(max)\n    ? null\n    : max <= Math.pow(2, 8)\n    ? Uint8Array\n    : max <= Math.pow(2, 16)\n    ? Uint16Array\n    : max <= Math.pow(2, 32)\n    ? Uint32Array\n    : max <= Number.MAX_SAFE_INTEGER\n    ? ZeroArray\n    : null\n/* c8 ignore stop */\n\nclass ZeroArray extends Array<number> {\n  constructor(size: number) {\n    super(size)\n    this.fill(0)\n  }\n}\n\ntype StackLike = Stack | Index[]\nclass Stack {\n  heap: NumberArray\n  length: number\n  // private constructor\n  static #constructing: boolean = false\n  static create(max: number): StackLike {\n    const HeapCls = getUintArray(max)\n    if (!HeapCls) return []\n    Stack.#constructing = true\n    const s = new Stack(max, HeapCls)\n    Stack.#constructing = false\n    return s\n  }\n  constructor(\n    max: number,\n    HeapCls: { new (n: number): NumberArray }\n  ) {\n    /* c8 ignore start */\n    if (!Stack.#constructing) {\n      throw new TypeError('instantiate Stack using Stack.create(n)')\n    }\n    /* c8 ignore stop */\n    this.heap = new HeapCls(max)\n    this.length = 0\n  }\n  push(n: Index) {\n    this.heap[this.length++] = n\n  }\n  pop(): Index {\n    return this.heap[--this.length] as Index\n  }\n}\n\n/**\n * Promise representing an in-progress {@link LRUCache#fetch} call\n */\nexport type BackgroundFetch<V> = Promise<V | undefined | void> & {\n  __returned: BackgroundFetch<V> | undefined\n  __abortController: AbortController\n  __staleWhileFetching: V | undefined\n}\n\ntype DisposeTask<K, V> = [\n  value: V,\n  key: K,\n  reason: LRUCache.DisposeReason\n]\n\nexport namespace LRUCache {\n  /**\n   * An integer greater than 0, reflecting the calculated size of items\n   */\n  export type Size = number\n\n  /**\n   * Integer greater than 0, representing some number of milliseconds, or the\n   * time at which a TTL started counting from.\n   */\n  export type Milliseconds = number\n\n  /**\n   * An integer greater than 0, reflecting a number of items\n   */\n  export type Count = number\n\n  /**\n   * The reason why an item was removed from the cache, passed\n   * to the {@link Disposer} methods.\n   */\n  export type DisposeReason = 'evict' | 'set' | 'delete'\n  /**\n   * A method called upon item removal, passed as the\n   * {@link OptionsBase.dispose} and/or\n   * {@link OptionsBase.disposeAfter} options.\n   */\n  export type Disposer<K, V> = (\n    value: V,\n    key: K,\n    reason: DisposeReason\n  ) => void\n\n  /**\n   * A function that returns the effective calculated size\n   * of an entry in the cache.\n   */\n  export type SizeCalculator<K, V> = (value: V, key: K) => Size\n\n  /**\n   * Options provided to the\n   * {@link OptionsBase.fetchMethod} function.\n   */\n  export interface FetcherOptions<K, V, FC = unknown> {\n    signal: AbortSignal\n    options: FetcherFetchOptions<K, V, FC>\n    /**\n     * Object provided in the {@link FetchOptions.context} option to\n     * {@link LRUCache#fetch}\n     */\n    context: FC\n  }\n\n  /**\n   * Status object that may be passed to {@link LRUCache#fetch},\n   * {@link LRUCache#get}, {@link LRUCache#set}, and {@link LRUCache#has}.\n   */\n  export interface Status<V> {\n    /**\n     * The status of a set() operation.\n     *\n     * - add: the item was not found in the cache, and was added\n     * - update: the item was in the cache, with the same value provided\n     * - replace: the item was in the cache, and replaced\n     * - miss: the item was not added to the cache for some reason\n     */\n    set?: 'add' | 'update' | 'replace' | 'miss'\n\n    /**\n     * the ttl stored for the item, or undefined if ttls are not used.\n     */\n    ttl?: Milliseconds\n\n    /**\n     * the start time for the item, or undefined if ttls are not used.\n     */\n    start?: Milliseconds\n\n    /**\n     * The timestamp used for TTL calculation\n     */\n    now?: Milliseconds\n\n    /**\n     * the remaining ttl for the item, or undefined if ttls are not used.\n     */\n    remainingTTL?: Milliseconds\n\n    /**\n     * The calculated size for the item, if sizes are used.\n     */\n    entrySize?: Size\n\n    /**\n     * The total calculated size of the cache, if sizes are used.\n     */\n    totalCalculatedSize?: Size\n\n    /**\n     * A flag indicating that the item was not stored, due to exceeding the\n     * {@link OptionsBase.maxEntrySize}\n     */\n    maxEntrySizeExceeded?: true\n\n    /**\n     * The old value, specified in the case of `set:'update'` or\n     * `set:'replace'`\n     */\n    oldValue?: V\n\n    /**\n     * The results of a {@link LRUCache#has} operation\n     *\n     * - hit: the item was found in the cache\n     * - stale: the item was found in the cache, but is stale\n     * - miss: the item was not found in the cache\n     */\n    has?: 'hit' | 'stale' | 'miss'\n\n    /**\n     * The status of a {@link LRUCache#fetch} operation.\n     * Note that this can change as the underlying fetch() moves through\n     * various states.\n     *\n     * - inflight: there is another fetch() for this key which is in process\n     * - get: there is no fetchMethod, so {@link LRUCache#get} was called.\n     * - miss: the item is not in cache, and will be fetched.\n     * - hit: the item is in the cache, and was resolved immediately.\n     * - stale: the item is in the cache, but stale.\n     * - refresh: the item is in the cache, and not stale, but\n     *   {@link FetchOptions.forceRefresh} was specified.\n     */\n    fetch?: 'get' | 'inflight' | 'miss' | 'hit' | 'stale' | 'refresh'\n\n    /**\n     * The {@link OptionsBase.fetchMethod} was called\n     */\n    fetchDispatched?: true\n\n    /**\n     * The cached value was updated after a successful call to\n     * {@link OptionsBase.fetchMethod}\n     */\n    fetchUpdated?: true\n\n    /**\n     * The reason for a fetch() rejection.  Either the error raised by the\n     * {@link OptionsBase.fetchMethod}, or the reason for an\n     * AbortSignal.\n     */\n    fetchError?: Error\n\n    /**\n     * The fetch received an abort signal\n     */\n    fetchAborted?: true\n\n    /**\n     * The abort signal received was ignored, and the fetch was allowed to\n     * continue.\n     */\n    fetchAbortIgnored?: true\n\n    /**\n     * The fetchMethod promise resolved successfully\n     */\n    fetchResolved?: true\n\n    /**\n     * The fetchMethod promise was rejected\n     */\n    fetchRejected?: true\n\n    /**\n     * The status of a {@link LRUCache#get} operation.\n     *\n     * - fetching: The item is currently being fetched.  If a previous value\n     *   is present and allowed, that will be returned.\n     * - stale: The item is in the cache, and is stale.\n     * - hit: the item is in the cache\n     * - miss: the item is not in the cache\n     */\n    get?: 'stale' | 'hit' | 'miss'\n\n    /**\n     * A fetch or get operation returned a stale value.\n     */\n    returnedStale?: true\n  }\n\n  /**\n   * options which override the options set in the LRUCache constructor\n   * when calling {@link LRUCache#fetch}.\n   *\n   * This is the union of {@link GetOptions} and {@link SetOptions}, plus\n   * {@link OptionsBase.noDeleteOnFetchRejection},\n   * {@link OptionsBase.allowStaleOnFetchRejection},\n   * {@link FetchOptions.forceRefresh}, and\n   * {@link OptionsBase.context}\n   *\n   * Any of these may be modified in the {@link OptionsBase.fetchMethod}\n   * function, but the {@link GetOptions} fields will of course have no\n   * effect, as the {@link LRUCache#get} call already happened by the time\n   * the fetchMethod is called.\n   */\n  export interface FetcherFetchOptions<K, V, FC = unknown>\n    extends Pick<\n      OptionsBase<K, V, FC>,\n      | 'allowStale'\n      | 'updateAgeOnGet'\n      | 'noDeleteOnStaleGet'\n      | 'sizeCalculation'\n      | 'ttl'\n      | 'noDisposeOnSet'\n      | 'noUpdateTTL'\n      | 'noDeleteOnFetchRejection'\n      | 'allowStaleOnFetchRejection'\n      | 'ignoreFetchAbort'\n      | 'allowStaleOnFetchAbort'\n    > {\n    status?: Status<V>\n    size?: Size\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#fetch} method.\n   */\n  export interface FetchOptions<K, V, FC>\n    extends FetcherFetchOptions<K, V, FC> {\n    /**\n     * Set to true to force a re-load of the existing data, even if it\n     * is not yet stale.\n     */\n    forceRefresh?: boolean\n    /**\n     * Context provided to the {@link OptionsBase.fetchMethod} as\n     * the {@link FetcherOptions.context} param.\n     *\n     * If the FC type is specified as unknown (the default),\n     * undefined or void, then this is optional.  Otherwise, it will\n     * be required.\n     */\n    context?: FC\n    signal?: AbortSignal\n    status?: Status<V>\n  }\n  /**\n   * Options provided to {@link LRUCache#fetch} when the FC type is something\n   * other than `unknown`, `undefined`, or `void`\n   */\n  export interface FetchOptionsWithContext<K, V, FC>\n    extends FetchOptions<K, V, FC> {\n    context: FC\n  }\n  /**\n   * Options provided to {@link LRUCache#fetch} when the FC type is\n   * `undefined` or `void`\n   */\n  export interface FetchOptionsNoContext<K, V>\n    extends FetchOptions<K, V, undefined> {\n    context?: undefined\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#has} method.\n   */\n  export interface HasOptions<K, V, FC>\n    extends Pick<OptionsBase<K, V, FC>, 'updateAgeOnHas'> {\n    status?: Status<V>\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#get} method.\n   */\n  export interface GetOptions<K, V, FC>\n    extends Pick<\n      OptionsBase<K, V, FC>,\n      'allowStale' | 'updateAgeOnGet' | 'noDeleteOnStaleGet'\n    > {\n    status?: Status<V>\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#peek} method.\n   */\n  export interface PeekOptions<K, V, FC>\n    extends Pick<OptionsBase<K, V, FC>, 'allowStale'> {}\n\n  /**\n   * Options that may be passed to the {@link LRUCache#set} method.\n   */\n  export interface SetOptions<K, V, FC>\n    extends Pick<\n      OptionsBase<K, V, FC>,\n      'sizeCalculation' | 'ttl' | 'noDisposeOnSet' | 'noUpdateTTL'\n    > {\n    /**\n     * If size tracking is enabled, then setting an explicit size\n     * in the {@link LRUCache#set} call will prevent calling the\n     * {@link OptionsBase.sizeCalculation} function.\n     */\n    size?: Size\n    /**\n     * If TTL tracking is enabled, then setting an explicit start\n     * time in the {@link LRUCache#set} call will override the\n     * default time from `performance.now()` or `Date.now()`.\n     *\n     * Note that it must be a valid value for whichever time-tracking\n     * method is in use.\n     */\n    start?: Milliseconds\n    status?: Status<V>\n  }\n\n  /**\n   * The type signature for the {@link OptionsBase.fetchMethod} option.\n   */\n  export type Fetcher<K, V, FC = unknown> = (\n    key: K,\n    staleValue: V | undefined,\n    options: FetcherOptions<K, V, FC>\n  ) => Promise<V | void | undefined> | V | void | undefined\n\n  /**\n   * Options which may be passed to the {@link LRUCache} constructor.\n   *\n   * Most of these may be overridden in the various options that use\n   * them.\n   *\n   * Despite all being technically optional, the constructor requires that\n   * a cache is at minimum limited by one or more of {@link OptionsBase.max},\n   * {@link OptionsBase.ttl}, or {@link OptionsBase.maxSize}.\n   *\n   * If {@link OptionsBase.ttl} is used alone, then it is strongly advised\n   * (and in fact required by the type definitions here) that the cache\n   * also set {@link OptionsBase.ttlAutopurge}, to prevent potentially\n   * unbounded storage.\n   */\n  export interface OptionsBase<K, V, FC> {\n    /**\n     * The maximum number of items to store in the cache before evicting\n     * old entries. This is read-only on the {@link LRUCache} instance,\n     * and may not be overridden.\n     *\n     * If set, then storage space will be pre-allocated at construction\n     * time, and the cache will perform significantly faster.\n     *\n     * Note that significantly fewer items may be stored, if\n     * {@link OptionsBase.maxSize} and/or {@link OptionsBase.ttl} are also\n     * set.\n     */\n    max?: Count\n\n    /**\n     * Max time in milliseconds for items to live in cache before they are\n     * considered stale.  Note that stale items are NOT preemptively removed\n     * by default, and MAY live in the cache long after they have expired.\n     *\n     * Also, as this cache is optimized for LRU/MRU operations, some of\n     * the staleness/TTL checks will reduce performance, as they will incur\n     * overhead by deleting items.\n     *\n     * Must be an integer number of ms. If set to 0, this indicates \"no TTL\"\n     *\n     * @default 0\n     */\n    ttl?: Milliseconds\n\n    /**\n     * Minimum amount of time in ms in which to check for staleness.\n     * Defaults to 1, which means that the current time is checked\n     * at most once per millisecond.\n     *\n     * Set to 0 to check the current time every time staleness is tested.\n     * (This reduces performance, and is theoretically unnecessary.)\n     *\n     * Setting this to a higher value will improve performance somewhat\n     * while using ttl tracking, albeit at the expense of keeping stale\n     * items around a bit longer than their TTLs would indicate.\n     *\n     * @default 1\n     */\n    ttlResolution?: Milliseconds\n\n    /**\n     * Preemptively remove stale items from the cache.\n     * Note that this may significantly degrade performance,\n     * especially if the cache is storing a large number of items.\n     * It is almost always best to just leave the stale items in\n     * the cache, and let them fall out as new items are added.\n     *\n     * Note that this means that {@link OptionsBase.allowStale} is a bit\n     * pointless, as stale items will be deleted almost as soon as they\n     * expire.\n     *\n     * @default false\n     */\n    ttlAutopurge?: boolean\n\n    /**\n     * Update the age of items on {@link LRUCache#get}, renewing their TTL\n     *\n     * Has no effect if {@link OptionsBase.ttl} is not set.\n     *\n     * @default false\n     */\n    updateAgeOnGet?: boolean\n\n    /**\n     * Update the age of items on {@link LRUCache#has}, renewing their TTL\n     *\n     * Has no effect if {@link OptionsBase.ttl} is not set.\n     *\n     * @default false\n     */\n    updateAgeOnHas?: boolean\n\n    /**\n     * Allow {@link LRUCache#get} and {@link LRUCache#fetch} calls to return\n     * stale data, if available.\n     */\n    allowStale?: boolean\n\n    /**\n     * Function that is called on items when they are dropped from the cache.\n     * This can be handy if you want to close file descriptors or do other\n     * cleanup tasks when items are no longer accessible. Called with `key,\n     * value`.  It's called before actually removing the item from the\n     * internal cache, so it is *NOT* safe to re-add them.\n     *\n     * Use {@link OptionsBase.disposeAfter} if you wish to dispose items after\n     * they have been full removed, when it is safe to add them back to the\n     * cache.\n     */\n    dispose?: Disposer<K, V>\n\n    /**\n     * The same as {@link OptionsBase.dispose}, but called *after* the entry\n     * is completely removed and the cache is once again in a clean state.\n     * It is safe to add an item right back into the cache at this point.\n     * However, note that it is *very* easy to inadvertently create infinite\n     * recursion this way.\n     */\n    disposeAfter?: Disposer<K, V>\n\n    /**\n     * Set to true to suppress calling the\n     * {@link OptionsBase.dispose} function if the entry key is\n     * still accessible within the cache.\n     * This may be overridden by passing an options object to\n     * {@link LRUCache#set}.\n     */\n    noDisposeOnSet?: boolean\n\n    /**\n     * Boolean flag to tell the cache to not update the TTL when\n     * setting a new value for an existing key (ie, when updating a value\n     * rather than inserting a new value).  Note that the TTL value is\n     * _always_ set (if provided) when adding a new entry into the cache.\n     *\n     * Has no effect if a {@link OptionsBase.ttl} is not set.\n     */\n    noUpdateTTL?: boolean\n\n    /**\n     * If you wish to track item size, you must provide a maxSize\n     * note that we still will only keep up to max *actual items*,\n     * if max is set, so size tracking may cause fewer than max items\n     * to be stored.  At the extreme, a single item of maxSize size\n     * will cause everything else in the cache to be dropped when it\n     * is added.  Use with caution!\n     *\n     * Note also that size tracking can negatively impact performance,\n     * though for most cases, only minimally.\n     */\n    maxSize?: Size\n\n    /**\n     * The maximum allowed size for any single item in the cache.\n     *\n     * If a larger item is passed to {@link LRUCache#set} or returned by a\n     * {@link OptionsBase.fetchMethod}, then it will not be stored in the\n     * cache.\n     */\n    maxEntrySize?: Size\n\n    /**\n     * A function that returns a number indicating the item's size.\n     *\n     * If not provided, and {@link OptionsBase.maxSize} or\n     * {@link OptionsBase.maxEntrySize} are set, then all\n     * {@link LRUCache#set} calls **must** provide an explicit\n     * {@link SetOptions.size} or sizeCalculation param.\n     */\n    sizeCalculation?: SizeCalculator<K, V>\n\n    /**\n     * Method that provides the implementation for {@link LRUCache#fetch}\n     */\n    fetchMethod?: Fetcher<K, V, FC>\n\n    /**\n     * Set to true to suppress the deletion of stale data when a\n     * {@link OptionsBase.fetchMethod} returns a rejected promise.\n     */\n    noDeleteOnFetchRejection?: boolean\n\n    /**\n     * Do not delete stale items when they are retrieved with\n     * {@link LRUCache#get}.\n     *\n     * Note that the `get` return value will still be `undefined`\n     * unless {@link OptionsBase.allowStale} is true.\n     */\n    noDeleteOnStaleGet?: boolean\n\n    /**\n     * Set to true to allow returning stale data when a\n     * {@link OptionsBase.fetchMethod} throws an error or returns a rejected\n     * promise.\n     *\n     * This differs from using {@link OptionsBase.allowStale} in that stale\n     * data will ONLY be returned in the case that the\n     * {@link LRUCache#fetch} fails, not any other times.\n     */\n    allowStaleOnFetchRejection?: boolean\n\n    /**\n     * Set to true to return a stale value from the cache when the\n     * `AbortSignal` passed to the {@link OptionsBase.fetchMethod} dispatches an `'abort'`\n     * event, whether user-triggered, or due to internal cache behavior.\n     *\n     * Unless {@link OptionsBase.ignoreFetchAbort} is also set, the underlying\n     * {@link OptionsBase.fetchMethod} will still be considered canceled, and\n     * any value it returns will be ignored and not cached.\n     *\n     * Caveat: since fetches are aborted when a new value is explicitly\n     * set in the cache, this can lead to fetch returning a stale value,\n     * since that was the fallback value _at the moment the `fetch()` was\n     * initiated_, even though the new updated value is now present in\n     * the cache.\n     *\n     * For example:\n     *\n     * ```ts\n     * const cache = new LRUCache<string, any>({\n     *   ttl: 100,\n     *   fetchMethod: async (url, oldValue, { signal }) =>  {\n     *     const res = await fetch(url, { signal })\n     *     return await res.json()\n     *   }\n     * })\n     * cache.set('https://example.com/', { some: 'data' })\n     * // 100ms go by...\n     * const result = cache.fetch('https://example.com/')\n     * cache.set('https://example.com/', { other: 'thing' })\n     * console.log(await result) // { some: 'data' }\n     * console.log(cache.get('https://example.com/')) // { other: 'thing' }\n     * ```\n     */\n    allowStaleOnFetchAbort?: boolean\n\n    /**\n     * Set to true to ignore the `abort` event emitted by the `AbortSignal`\n     * object passed to {@link OptionsBase.fetchMethod}, and still cache the\n     * resulting resolution value, as long as it is not `undefined`.\n     *\n     * When used on its own, this means aborted {@link LRUCache#fetch} calls are not\n     * immediately resolved or rejected when they are aborted, and instead\n     * take the full time to await.\n     *\n     * When used with {@link OptionsBase.allowStaleOnFetchAbort}, aborted\n     * {@link LRUCache#fetch} calls will resolve immediately to their stale\n     * cached value or `undefined`, and will continue to process and eventually\n     * update the cache when they resolve, as long as the resulting value is\n     * not `undefined`, thus supporting a \"return stale on timeout while\n     * refreshing\" mechanism by passing `AbortSignal.timeout(n)` as the signal.\n     *\n     * **Note**: regardless of this setting, an `abort` event _is still\n     * emitted on the `AbortSignal` object_, so may result in invalid results\n     * when passed to other underlying APIs that use AbortSignals.\n     *\n     * This may be overridden in the {@link OptionsBase.fetchMethod} or the\n     * call to {@link LRUCache#fetch}.\n     */\n    ignoreFetchAbort?: boolean\n  }\n\n  export interface OptionsMaxLimit<K, V, FC>\n    extends OptionsBase<K, V, FC> {\n    max: Count\n  }\n  export interface OptionsTTLLimit<K, V, FC>\n    extends OptionsBase<K, V, FC> {\n    ttl: Milliseconds\n    ttlAutopurge: boolean\n  }\n  export interface OptionsSizeLimit<K, V, FC>\n    extends OptionsBase<K, V, FC> {\n    maxSize: Size\n  }\n\n  /**\n   * The valid safe options for the {@link LRUCache} constructor\n   */\n  export type Options<K, V, FC> =\n    | OptionsMaxLimit<K, V, FC>\n    | OptionsSizeLimit<K, V, FC>\n    | OptionsTTLLimit<K, V, FC>\n\n  /**\n   * Entry objects used by {@link LRUCache#load} and {@link LRUCache#dump}\n   */\n  export interface Entry<V> {\n    value: V\n    ttl?: Milliseconds\n    size?: Size\n    start?: Milliseconds\n  }\n}\n\n/**\n * Default export, the thing you're using this module to get.\n *\n * All properties from the options object (with the exception of\n * {@link OptionsBase.max} and {@link OptionsBase.maxSize}) are added as\n * normal public members. (`max` and `maxBase` are read-only getters.)\n * Changing any of these will alter the defaults for subsequent method calls,\n * but is otherwise safe.\n */\nexport class LRUCache<K extends {}, V extends {}, FC = unknown> {\n  // properties coming in from the options of these, only max and maxSize\n  // really *need* to be protected. The rest can be modified, as they just\n  // set defaults for various methods.\n  readonly #max: LRUCache.Count\n  readonly #maxSize: LRUCache.Size\n  readonly #dispose?: LRUCache.Disposer<K, V>\n  readonly #disposeAfter?: LRUCache.Disposer<K, V>\n  readonly #fetchMethod?: LRUCache.Fetcher<K, V, FC>\n\n  /**\n   * {@link LRUCache.OptionsBase.ttl}\n   */\n  ttl: LRUCache.Milliseconds\n\n  /**\n   * {@link LRUCache.OptionsBase.ttlResolution}\n   */\n  ttlResolution: LRUCache.Milliseconds\n  /**\n   * {@link LRUCache.OptionsBase.ttlAutopurge}\n   */\n  ttlAutopurge: boolean\n  /**\n   * {@link LRUCache.OptionsBase.updateAgeOnGet}\n   */\n  updateAgeOnGet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.updateAgeOnHas}\n   */\n  updateAgeOnHas: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStale}\n   */\n  allowStale: boolean\n\n  /**\n   * {@link LRUCache.OptionsBase.noDisposeOnSet}\n   */\n  noDisposeOnSet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.noUpdateTTL}\n   */\n  noUpdateTTL: boolean\n  /**\n   * {@link LRUCache.OptionsBase.maxEntrySize}\n   */\n  maxEntrySize: LRUCache.Size\n  /**\n   * {@link LRUCache.OptionsBase.sizeCalculation}\n   */\n  sizeCalculation?: LRUCache.SizeCalculator<K, V>\n  /**\n   * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}\n   */\n  noDeleteOnFetchRejection: boolean\n  /**\n   * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}\n   */\n  noDeleteOnStaleGet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}\n   */\n  allowStaleOnFetchAbort: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}\n   */\n  allowStaleOnFetchRejection: boolean\n  /**\n   * {@link LRUCache.OptionsBase.ignoreFetchAbort}\n   */\n  ignoreFetchAbort: boolean\n\n  // computed properties\n  #size: LRUCache.Count\n  #calculatedSize: LRUCache.Size\n  #keyMap: Map<K, Index>\n  #keyList: (K | undefined)[]\n  #valList: (V | BackgroundFetch<V> | undefined)[]\n  #next: NumberArray\n  #prev: NumberArray\n  #head: Index\n  #tail: Index\n  #free: StackLike\n  #disposed?: DisposeTask<K, V>[]\n  #sizes?: ZeroArray\n  #starts?: ZeroArray\n  #ttls?: ZeroArray\n\n  #hasDispose: boolean\n  #hasFetchMethod: boolean\n  #hasDisposeAfter: boolean\n\n  /**\n   * Do not call this method unless you need to inspect the\n   * inner workings of the cache.  If anything returned by this\n   * object is modified in any way, strange breakage may occur.\n   *\n   * These fields are private for a reason!\n   *\n   * @internal\n   */\n  static unsafeExposeInternals<\n    K extends {},\n    V extends {},\n    FC extends unknown = unknown\n  >(c: LRUCache<K, V, FC>) {\n    return {\n      // properties\n      starts: c.#starts,\n      ttls: c.#ttls,\n      sizes: c.#sizes,\n      keyMap: c.#keyMap as Map<K, number>,\n      keyList: c.#keyList,\n      valList: c.#valList,\n      next: c.#next,\n      prev: c.#prev,\n      get head() {\n        return c.#head\n      },\n      get tail() {\n        return c.#tail\n      },\n      free: c.#free,\n      // methods\n      isBackgroundFetch: (p: any) => c.#isBackgroundFetch(p),\n      backgroundFetch: (\n        k: K,\n        index: number | undefined,\n        options: LRUCache.FetchOptions<K, V, FC>,\n        context: any\n      ): BackgroundFetch<V> =>\n        c.#backgroundFetch(\n          k,\n          index as Index | undefined,\n          options,\n          context\n        ),\n      moveToTail: (index: number): void =>\n        c.#moveToTail(index as Index),\n      indexes: (options?: { allowStale: boolean }) =>\n        c.#indexes(options),\n      rindexes: (options?: { allowStale: boolean }) =>\n        c.#rindexes(options),\n      isStale: (index: number | undefined) =>\n        c.#isStale(index as Index),\n    }\n  }\n\n  // Protected read-only members\n\n  /**\n   * {@link LRUCache.OptionsBase.max} (read-only)\n   */\n  get max(): LRUCache.Count {\n    return this.#max\n  }\n  /**\n   * {@link LRUCache.OptionsBase.maxSize} (read-only)\n   */\n  get maxSize(): LRUCache.Count {\n    return this.#maxSize\n  }\n  /**\n   * The total computed size of items in the cache (read-only)\n   */\n  get calculatedSize(): LRUCache.Size {\n    return this.#calculatedSize\n  }\n  /**\n   * The number of items stored in the cache (read-only)\n   */\n  get size(): LRUCache.Count {\n    return this.#size\n  }\n  /**\n   * {@link LRUCache.OptionsBase.fetchMethod} (read-only)\n   */\n  get fetchMethod(): LRUCache.Fetcher<K, V, FC> | undefined {\n    return this.#fetchMethod\n  }\n  /**\n   * {@link LRUCache.OptionsBase.dispose} (read-only)\n   */\n  get dispose() {\n    return this.#dispose\n  }\n  /**\n   * {@link LRUCache.OptionsBase.disposeAfter} (read-only)\n   */\n  get disposeAfter() {\n    return this.#disposeAfter\n  }\n\n  constructor(\n    options: LRUCache.Options<K, V, FC> | LRUCache<K, V, FC>\n  ) {\n    const {\n      max = 0,\n      ttl,\n      ttlResolution = 1,\n      ttlAutopurge,\n      updateAgeOnGet,\n      updateAgeOnHas,\n      allowStale,\n      dispose,\n      disposeAfter,\n      noDisposeOnSet,\n      noUpdateTTL,\n      maxSize = 0,\n      maxEntrySize = 0,\n      sizeCalculation,\n      fetchMethod,\n      noDeleteOnFetchRejection,\n      noDeleteOnStaleGet,\n      allowStaleOnFetchRejection,\n      allowStaleOnFetchAbort,\n      ignoreFetchAbort,\n    } = options\n\n    if (max !== 0 && !isPosInt(max)) {\n      throw new TypeError('max option must be a nonnegative integer')\n    }\n\n    const UintArray = max ? getUintArray(max) : Array\n    if (!UintArray) {\n      throw new Error('invalid max value: ' + max)\n    }\n\n    this.#max = max\n    this.#maxSize = maxSize\n    this.maxEntrySize = maxEntrySize || this.#maxSize\n    this.sizeCalculation = sizeCalculation\n    if (this.sizeCalculation) {\n      if (!this.#maxSize && !this.maxEntrySize) {\n        throw new TypeError(\n          'cannot set sizeCalculation without setting maxSize or maxEntrySize'\n        )\n      }\n      if (typeof this.sizeCalculation !== 'function') {\n        throw new TypeError('sizeCalculation set to non-function')\n      }\n    }\n\n    if (\n      fetchMethod !== undefined &&\n      typeof fetchMethod !== 'function'\n    ) {\n      throw new TypeError(\n        'fetchMethod must be a function if specified'\n      )\n    }\n    this.#fetchMethod = fetchMethod\n    this.#hasFetchMethod = !!fetchMethod\n\n    this.#keyMap = new Map()\n    this.#keyList = new Array(max).fill(undefined)\n    this.#valList = new Array(max).fill(undefined)\n    this.#next = new UintArray(max)\n    this.#prev = new UintArray(max)\n    this.#head = 0 as Index\n    this.#tail = 0 as Index\n    this.#free = Stack.create(max)\n    this.#size = 0\n    this.#calculatedSize = 0\n\n    if (typeof dispose === 'function') {\n      this.#dispose = dispose\n    }\n    if (typeof disposeAfter === 'function') {\n      this.#disposeAfter = disposeAfter\n      this.#disposed = []\n    } else {\n      this.#disposeAfter = undefined\n      this.#disposed = undefined\n    }\n    this.#hasDispose = !!this.#dispose\n    this.#hasDisposeAfter = !!this.#disposeAfter\n\n    this.noDisposeOnSet = !!noDisposeOnSet\n    this.noUpdateTTL = !!noUpdateTTL\n    this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection\n    this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection\n    this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort\n    this.ignoreFetchAbort = !!ignoreFetchAbort\n\n    // NB: maxEntrySize is set to maxSize if it's set\n    if (this.maxEntrySize !== 0) {\n      if (this.#maxSize !== 0) {\n        if (!isPosInt(this.#maxSize)) {\n          throw new TypeError(\n            'maxSize must be a positive integer if specified'\n          )\n        }\n      }\n      if (!isPosInt(this.maxEntrySize)) {\n        throw new TypeError(\n          'maxEntrySize must be a positive integer if specified'\n        )\n      }\n      this.#initializeSizeTracking()\n    }\n\n    this.allowStale = !!allowStale\n    this.noDeleteOnStaleGet = !!noDeleteOnStaleGet\n    this.updateAgeOnGet = !!updateAgeOnGet\n    this.updateAgeOnHas = !!updateAgeOnHas\n    this.ttlResolution =\n      isPosInt(ttlResolution) || ttlResolution === 0\n        ? ttlResolution\n        : 1\n    this.ttlAutopurge = !!ttlAutopurge\n    this.ttl = ttl || 0\n    if (this.ttl) {\n      if (!isPosInt(this.ttl)) {\n        throw new TypeError(\n          'ttl must be a positive integer if specified'\n        )\n      }\n      this.#initializeTTLTracking()\n    }\n\n    // do not allow completely unbounded caches\n    if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {\n      throw new TypeError(\n        'At least one of max, maxSize, or ttl is required'\n      )\n    }\n    if (!this.ttlAutopurge && !this.#max && !this.#maxSize) {\n      const code = 'LRU_CACHE_UNBOUNDED'\n      if (shouldWarn(code)) {\n        warned.add(code)\n        const msg =\n          'TTL caching without ttlAutopurge, max, or maxSize can ' +\n          'result in unbounded memory consumption.'\n        emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache)\n      }\n    }\n  }\n\n  /**\n   * Return the remaining TTL time for a given entry key\n   */\n  getRemainingTTL(key: K) {\n    return this.#keyMap.has(key) ? Infinity : 0\n  }\n\n  #initializeTTLTracking() {\n    const ttls = new ZeroArray(this.#max)\n    const starts = new ZeroArray(this.#max)\n    this.#ttls = ttls\n    this.#starts = starts\n\n    this.#setItemTTL = (index, ttl, start = perf.now()) => {\n      starts[index] = ttl !== 0 ? start : 0\n      ttls[index] = ttl\n      if (ttl !== 0 && this.ttlAutopurge) {\n        const t = setTimeout(() => {\n          if (this.#isStale(index)) {\n            this.delete(this.#keyList[index] as K)\n          }\n        }, ttl + 1)\n        // unref() not supported on all platforms\n        /* c8 ignore start */\n        if (t.unref) {\n          t.unref()\n        }\n        /* c8 ignore stop */\n      }\n    }\n\n    this.#updateItemAge = index => {\n      starts[index] = ttls[index] !== 0 ? perf.now() : 0\n    }\n\n    this.#statusTTL = (status, index) => {\n      if (ttls[index]) {\n        const ttl = ttls[index]\n        const start = starts[index]\n        status.ttl = ttl\n        status.start = start\n        status.now = cachedNow || getNow()\n        const age = status.now - start\n        status.remainingTTL = ttl - age\n      }\n    }\n\n    // debounce calls to perf.now() to 1s so we're not hitting\n    // that costly call repeatedly.\n    let cachedNow = 0\n    const getNow = () => {\n      const n = perf.now()\n      if (this.ttlResolution > 0) {\n        cachedNow = n\n        const t = setTimeout(\n          () => (cachedNow = 0),\n          this.ttlResolution\n        )\n        // not available on all platforms\n        /* c8 ignore start */\n        if (t.unref) {\n          t.unref()\n        }\n        /* c8 ignore stop */\n      }\n      return n\n    }\n\n    this.getRemainingTTL = key => {\n      const index = this.#keyMap.get(key)\n      if (index === undefined) {\n        return 0\n      }\n      const ttl = ttls[index]\n      const start = starts[index]\n      if (ttl === 0 || start === 0) {\n        return Infinity\n      }\n      const age = (cachedNow || getNow()) - start\n      return ttl - age\n    }\n\n    this.#isStale = index => {\n      return (\n        ttls[index] !== 0 &&\n        starts[index] !== 0 &&\n        (cachedNow || getNow()) - starts[index] > ttls[index]\n      )\n    }\n  }\n\n  // conditionally set private methods related to TTL\n  #updateItemAge: (index: Index) => void = () => {}\n  #statusTTL: (status: LRUCache.Status<V>, index: Index) => void =\n    () => {}\n  #setItemTTL: (\n    index: Index,\n    ttl: LRUCache.Milliseconds,\n    start?: LRUCache.Milliseconds\n    // ignore because we never call this if we're not already in TTL mode\n    /* c8 ignore start */\n  ) => void = () => {}\n  /* c8 ignore stop */\n\n  #isStale: (index: Index) => boolean = () => false\n\n  #initializeSizeTracking() {\n    const sizes = new ZeroArray(this.#max)\n    this.#calculatedSize = 0\n    this.#sizes = sizes\n    this.#removeItemSize = index => {\n      this.#calculatedSize -= sizes[index]\n      sizes[index] = 0\n    }\n    this.#requireSize = (k, v, size, sizeCalculation) => {\n      // provisionally accept background fetches.\n      // actual value size will be checked when they return.\n      if (this.#isBackgroundFetch(v)) {\n        return 0\n      }\n      if (!isPosInt(size)) {\n        if (sizeCalculation) {\n          if (typeof sizeCalculation !== 'function') {\n            throw new TypeError('sizeCalculation must be a function')\n          }\n          size = sizeCalculation(v, k)\n          if (!isPosInt(size)) {\n            throw new TypeError(\n              'sizeCalculation return invalid (expect positive integer)'\n            )\n          }\n        } else {\n          throw new TypeError(\n            'invalid size value (must be positive integer). ' +\n              'When maxSize or maxEntrySize is used, sizeCalculation ' +\n              'or size must be set.'\n          )\n        }\n      }\n      return size\n    }\n    this.#addItemSize = (\n      index: Index,\n      size: LRUCache.Size,\n      status?: LRUCache.Status<V>\n    ) => {\n      sizes[index] = size\n      if (this.#maxSize) {\n        const maxSize = this.#maxSize - sizes[index]\n        while (this.#calculatedSize > maxSize) {\n          this.#evict(true)\n        }\n      }\n      this.#calculatedSize += sizes[index]\n      if (status) {\n        status.entrySize = size\n        status.totalCalculatedSize = this.#calculatedSize\n      }\n    }\n  }\n\n  #removeItemSize: (index: Index) => void = _i => {}\n  #addItemSize: (\n    index: Index,\n    size: LRUCache.Size,\n    status?: LRUCache.Status<V>\n  ) => void = (_i, _s, _st) => {}\n  #requireSize: (\n    k: K,\n    v: V | BackgroundFetch<V>,\n    size?: LRUCache.Size,\n    sizeCalculation?: LRUCache.SizeCalculator<K, V>\n  ) => LRUCache.Size = (\n    _k: K,\n    _v: V | BackgroundFetch<V>,\n    size?: LRUCache.Size,\n    sizeCalculation?: LRUCache.SizeCalculator<K, V>\n  ) => {\n    if (size || sizeCalculation) {\n      throw new TypeError(\n        'cannot set size without setting maxSize or maxEntrySize on cache'\n      )\n    }\n    return 0\n  };\n\n  *#indexes({ allowStale = this.allowStale } = {}) {\n    if (this.#size) {\n      for (let i = this.#tail; true; ) {\n        if (!this.#isValidIndex(i)) {\n          break\n        }\n        if (allowStale || !this.#isStale(i)) {\n          yield i\n        }\n        if (i === this.#head) {\n          break\n        } else {\n          i = this.#prev[i] as Index\n        }\n      }\n    }\n  }\n\n  *#rindexes({ allowStale = this.allowStale } = {}) {\n    if (this.#size) {\n      for (let i = this.#head; true; ) {\n        if (!this.#isValidIndex(i)) {\n          break\n        }\n        if (allowStale || !this.#isStale(i)) {\n          yield i\n        }\n        if (i === this.#tail) {\n          break\n        } else {\n          i = this.#next[i] as Index\n        }\n      }\n    }\n  }\n\n  #isValidIndex(index: Index) {\n    return (\n      index !== undefined &&\n      this.#keyMap.get(this.#keyList[index] as K) === index\n    )\n  }\n\n  /**\n   * Return a generator yielding `[key, value]` pairs,\n   * in order from most recently used to least recently used.\n   */\n  *entries() {\n    for (const i of this.#indexes()) {\n      if (\n        this.#valList[i] !== undefined &&\n        this.#keyList[i] !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield [this.#keyList[i], this.#valList[i]]\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.entries}\n   *\n   * Return a generator yielding `[key, value]` pairs,\n   * in order from least recently used to most recently used.\n   */\n  *rentries() {\n    for (const i of this.#rindexes()) {\n      if (\n        this.#valList[i] !== undefined &&\n        this.#keyList[i] !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield [this.#keyList[i], this.#valList[i]]\n      }\n    }\n  }\n\n  /**\n   * Return a generator yielding the keys in the cache,\n   * in order from most recently used to least recently used.\n   */\n  *keys() {\n    for (const i of this.#indexes()) {\n      const k = this.#keyList[i]\n      if (\n        k !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield k\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.keys}\n   *\n   * Return a generator yielding the keys in the cache,\n   * in order from least recently used to most recently used.\n   */\n  *rkeys() {\n    for (const i of this.#rindexes()) {\n      const k = this.#keyList[i]\n      if (\n        k !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield k\n      }\n    }\n  }\n\n  /**\n   * Return a generator yielding the values in the cache,\n   * in order from most recently used to least recently used.\n   */\n  *values() {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      if (\n        v !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield this.#valList[i]\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.values}\n   *\n   * Return a generator yielding the values in the cache,\n   * in order from least recently used to most recently used.\n   */\n  *rvalues() {\n    for (const i of this.#rindexes()) {\n      const v = this.#valList[i]\n      if (\n        v !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield this.#valList[i]\n      }\n    }\n  }\n\n  /**\n   * Iterating over the cache itself yields the same results as\n   * {@link LRUCache.entries}\n   */\n  [Symbol.iterator]() {\n    return this.entries()\n  }\n\n  /**\n   * Find a value for which the supplied fn method returns a truthy value,\n   * similar to Array.find().  fn is called as fn(value, key, cache).\n   */\n  find(\n    fn: (v: V, k: K, self: LRUCache<K, V, FC>) => boolean,\n    getOptions: LRUCache.GetOptions<K, V, FC> = {}\n  ) {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      if (fn(value, this.#keyList[i] as K, this)) {\n        return this.get(this.#keyList[i] as K, getOptions)\n      }\n    }\n  }\n\n  /**\n   * Call the supplied function on each item in the cache, in order from\n   * most recently used to least recently used.  fn is called as\n   * fn(value, key, cache).  Does not update age or recenty of use.\n   * Does not iterate over stale values.\n   */\n  forEach(\n    fn: (v: V, k: K, self: LRUCache<K, V, FC>) => any,\n    thisp: any = this\n  ) {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      fn.call(thisp, value, this.#keyList[i] as K, this)\n    }\n  }\n\n  /**\n   * The same as {@link LRUCache.forEach} but items are iterated over in\n   * reverse order.  (ie, less recently used items are iterated over first.)\n   */\n  rforEach(\n    fn: (v: V, k: K, self: LRUCache<K, V, FC>) => any,\n    thisp: any = this\n  ) {\n    for (const i of this.#rindexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      fn.call(thisp, value, this.#keyList[i] as K, this)\n    }\n  }\n\n  /**\n   * Delete any stale entries. Returns true if anything was removed,\n   * false otherwise.\n   */\n  purgeStale() {\n    let deleted = false\n    for (const i of this.#rindexes({ allowStale: true })) {\n      if (this.#isStale(i)) {\n        this.delete(this.#keyList[i] as K)\n        deleted = true\n      }\n    }\n    return deleted\n  }\n\n  /**\n   * Return an array of [key, {@link LRUCache.Entry}] tuples which can be\n   * passed to cache.load()\n   */\n  dump() {\n    const arr: [K, LRUCache.Entry<V>][] = []\n    for (const i of this.#indexes({ allowStale: true })) {\n      const key = this.#keyList[i]\n      const v = this.#valList[i]\n      const value: V | undefined = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined || key === undefined) continue\n      const entry: LRUCache.Entry<V> = { value }\n      if (this.#ttls && this.#starts) {\n        entry.ttl = this.#ttls[i]\n        // always dump the start relative to a portable timestamp\n        // it's ok for this to be a bit slow, it's a rare operation.\n        const age = perf.now() - this.#starts[i]\n        entry.start = Math.floor(Date.now() - age)\n      }\n      if (this.#sizes) {\n        entry.size = this.#sizes[i]\n      }\n      arr.unshift([key, entry])\n    }\n    return arr\n  }\n\n  /**\n   * Reset the cache and load in the items in entries in the order listed.\n   * Note that the shape of the resulting cache may be different if the\n   * same options are not used in both caches.\n   */\n  load(arr: [K, LRUCache.Entry<V>][]) {\n    this.clear()\n    for (const [key, entry] of arr) {\n      if (entry.start) {\n        // entry.start is a portable timestamp, but we may be using\n        // node's performance.now(), so calculate the offset, so that\n        // we get the intended remaining TTL, no matter how long it's\n        // been on ice.\n        //\n        // it's ok for this to be a bit slow, it's a rare operation.\n        const age = Date.now() - entry.start\n        entry.start = perf.now() - age\n      }\n      this.set(key, entry.value, entry)\n    }\n  }\n\n  /**\n   * Add a value to the cache.\n   *\n   * Note: if `undefined` is specified as a value, this is an alias for\n   * {@link LRUCache#delete}\n   */\n  set(\n    k: K,\n    v: V | BackgroundFetch<V> | undefined,\n    setOptions: LRUCache.SetOptions<K, V, FC> = {}\n  ) {\n    if (v === undefined) {\n      this.delete(k)\n      return this\n    }\n    const {\n      ttl = this.ttl,\n      start,\n      noDisposeOnSet = this.noDisposeOnSet,\n      sizeCalculation = this.sizeCalculation,\n      status,\n    } = setOptions\n    let { noUpdateTTL = this.noUpdateTTL } = setOptions\n\n    const size = this.#requireSize(\n      k,\n      v,\n      setOptions.size || 0,\n      sizeCalculation\n    )\n    // if the item doesn't fit, don't do anything\n    // NB: maxEntrySize set to maxSize by default\n    if (this.maxEntrySize && size > this.maxEntrySize) {\n      if (status) {\n        status.set = 'miss'\n        status.maxEntrySizeExceeded = true\n      }\n      // have to delete, in case something is there already.\n      this.delete(k)\n      return this\n    }\n    let index = this.#size === 0 ? undefined : this.#keyMap.get(k)\n    if (index === undefined) {\n      // addition\n      index = (\n        this.#size === 0\n          ? this.#tail\n          : this.#free.length !== 0\n          ? this.#free.pop()\n          : this.#size === this.#max\n          ? this.#evict(false)\n          : this.#size\n      ) as Index\n      this.#keyList[index] = k\n      this.#valList[index] = v\n      this.#keyMap.set(k, index)\n      this.#next[this.#tail] = index\n      this.#prev[index] = this.#tail\n      this.#tail = index\n      this.#size++\n      this.#addItemSize(index, size, status)\n      if (status) status.set = 'add'\n      noUpdateTTL = false\n    } else {\n      // update\n      this.#moveToTail(index)\n      const oldVal = this.#valList[index] as V | BackgroundFetch<V>\n      if (v !== oldVal) {\n        if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {\n          oldVal.__abortController.abort(new Error('replaced'))\n        } else if (!noDisposeOnSet) {\n          if (this.#hasDispose) {\n            this.#dispose?.(oldVal as V, k, 'set')\n          }\n          if (this.#hasDisposeAfter) {\n            this.#disposed?.push([oldVal as V, k, 'set'])\n          }\n        }\n        this.#removeItemSize(index)\n        this.#addItemSize(index, size, status)\n        this.#valList[index] = v\n        if (status) {\n          status.set = 'replace'\n          const oldValue =\n            oldVal && this.#isBackgroundFetch(oldVal)\n              ? oldVal.__staleWhileFetching\n              : oldVal\n          if (oldValue !== undefined) status.oldValue = oldValue\n        }\n      } else if (status) {\n        status.set = 'update'\n      }\n    }\n    if (ttl !== 0 && !this.#ttls) {\n      this.#initializeTTLTracking()\n    }\n    if (this.#ttls) {\n      if (!noUpdateTTL) {\n        this.#setItemTTL(index, ttl, start)\n      }\n      if (status) this.#statusTTL(status, index)\n    }\n    if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {\n      const dt = this.#disposed\n      let task: DisposeTask<K, V> | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n    return this\n  }\n\n  /**\n   * Evict the least recently used item, returning its value or\n   * `undefined` if cache is empty.\n   */\n  pop(): V | undefined {\n    try {\n      while (this.#size) {\n        const val = this.#valList[this.#head]\n        this.#evict(true)\n        if (this.#isBackgroundFetch(val)) {\n          if (val.__staleWhileFetching) {\n            return val.__staleWhileFetching\n          }\n        } else if (val !== undefined) {\n          return val\n        }\n      }\n    } finally {\n      if (this.#hasDisposeAfter && this.#disposed) {\n        const dt = this.#disposed\n        let task: DisposeTask<K, V> | undefined\n        while ((task = dt?.shift())) {\n          this.#disposeAfter?.(...task)\n        }\n      }\n    }\n  }\n\n  #evict(free: boolean) {\n    const head = this.#head\n    const k = this.#keyList[head] as K\n    const v = this.#valList[head] as V\n    if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {\n      v.__abortController.abort(new Error('evicted'))\n    } else if (this.#hasDispose || this.#hasDisposeAfter) {\n      if (this.#hasDispose) {\n        this.#dispose?.(v, k, 'evict')\n      }\n      if (this.#hasDisposeAfter) {\n        this.#disposed?.push([v, k, 'evict'])\n      }\n    }\n    this.#removeItemSize(head)\n    // if we aren't about to use the index, then null these out\n    if (free) {\n      this.#keyList[head] = undefined\n      this.#valList[head] = undefined\n      this.#free.push(head)\n    }\n    if (this.#size === 1) {\n      this.#head = this.#tail = 0 as Index\n      this.#free.length = 0\n    } else {\n      this.#head = this.#next[head] as Index\n    }\n    this.#keyMap.delete(k)\n    this.#size--\n    return head\n  }\n\n  /**\n   * Check if a key is in the cache, without updating the recency of use.\n   * Will return false if the item is stale, even though it is technically\n   * in the cache.\n   *\n   * Will not update item age unless\n   * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.\n   */\n  has(k: K, hasOptions: LRUCache.HasOptions<K, V, FC> = {}) {\n    const { updateAgeOnHas = this.updateAgeOnHas, status } =\n      hasOptions\n    const index = this.#keyMap.get(k)\n    if (index !== undefined) {\n      const v = this.#valList[index]\n      if (\n        this.#isBackgroundFetch(v) &&\n        v.__staleWhileFetching === undefined\n      ) {\n        return false\n      }\n      if (!this.#isStale(index)) {\n        if (updateAgeOnHas) {\n          this.#updateItemAge(index)\n        }\n        if (status) {\n          status.has = 'hit'\n          this.#statusTTL(status, index)\n        }\n        return true\n      } else if (status) {\n        status.has = 'stale'\n        this.#statusTTL(status, index)\n      }\n    } else if (status) {\n      status.has = 'miss'\n    }\n    return false\n  }\n\n  /**\n   * Like {@link LRUCache#get} but doesn't update recency or delete stale\n   * items.\n   *\n   * Returns `undefined` if the item is stale, unless\n   * {@link LRUCache.OptionsBase.allowStale} is set.\n   */\n  peek(k: K, peekOptions: LRUCache.PeekOptions<K, V, FC> = {}) {\n    const { allowStale = this.allowStale } = peekOptions\n    const index = this.#keyMap.get(k)\n    if (\n      index !== undefined &&\n      (allowStale || !this.#isStale(index))\n    ) {\n      const v = this.#valList[index]\n      // either stale and allowed, or forcing a refresh of non-stale value\n      return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v\n    }\n  }\n\n  #backgroundFetch(\n    k: K,\n    index: Index | undefined,\n    options: LRUCache.FetchOptions<K, V, FC>,\n    context: any\n  ): BackgroundFetch<V> {\n    const v = index === undefined ? undefined : this.#valList[index]\n    if (this.#isBackgroundFetch(v)) {\n      return v\n    }\n\n    const ac = new AC()\n    const { signal } = options\n    // when/if our AC signals, then stop listening to theirs.\n    signal?.addEventListener('abort', () => ac.abort(signal.reason), {\n      signal: ac.signal,\n    })\n\n    const fetchOpts = {\n      signal: ac.signal,\n      options,\n      context,\n    }\n\n    const cb = (\n      v: V | void | undefined,\n      updateCache = false\n    ): V | undefined | void => {\n      const { aborted } = ac.signal\n      const ignoreAbort = options.ignoreFetchAbort && v !== undefined\n      if (options.status) {\n        if (aborted && !updateCache) {\n          options.status.fetchAborted = true\n          options.status.fetchError = ac.signal.reason\n          if (ignoreAbort) options.status.fetchAbortIgnored = true\n        } else {\n          options.status.fetchResolved = true\n        }\n      }\n      if (aborted && !ignoreAbort && !updateCache) {\n        return fetchFail(ac.signal.reason)\n      }\n      // either we didn't abort, and are still here, or we did, and ignored\n      const bf = p as BackgroundFetch<V>\n      if (this.#valList[index as Index] === p) {\n        if (v === undefined) {\n          if (bf.__staleWhileFetching) {\n            this.#valList[index as Index] = bf.__staleWhileFetching\n          } else {\n            this.delete(k)\n          }\n        } else {\n          if (options.status) options.status.fetchUpdated = true\n          this.set(k, v, fetchOpts.options)\n        }\n      }\n      return v\n    }\n\n    const eb = (er: any) => {\n      if (options.status) {\n        options.status.fetchRejected = true\n        options.status.fetchError = er\n      }\n      return fetchFail(er)\n    }\n\n    const fetchFail = (er: any): V | undefined => {\n      const { aborted } = ac.signal\n      const allowStaleAborted =\n        aborted && options.allowStaleOnFetchAbort\n      const allowStale =\n        allowStaleAborted || options.allowStaleOnFetchRejection\n      const noDelete = allowStale || options.noDeleteOnFetchRejection\n      const bf = p as BackgroundFetch<V>\n      if (this.#valList[index as Index] === p) {\n        // if we allow stale on fetch rejections, then we need to ensure that\n        // the stale value is not removed from the cache when the fetch fails.\n        const del = !noDelete || bf.__staleWhileFetching === undefined\n        if (del) {\n          this.delete(k)\n        } else if (!allowStaleAborted) {\n          // still replace the *promise* with the stale value,\n          // since we are done with the promise at this point.\n          // leave it untouched if we're still waiting for an\n          // aborted background fetch that hasn't yet returned.\n          this.#valList[index as Index] = bf.__staleWhileFetching\n        }\n      }\n      if (allowStale) {\n        if (options.status && bf.__staleWhileFetching !== undefined) {\n          options.status.returnedStale = true\n        }\n        return bf.__staleWhileFetching\n      } else if (bf.__returned === bf) {\n        throw er\n      }\n    }\n\n    const pcall = (\n      res: (v: V | void | undefined) => void,\n      rej: (e: any) => void\n    ) => {\n      const fmp = this.#fetchMethod?.(k, v, fetchOpts)\n      if (fmp && fmp instanceof Promise) {\n        fmp.then(v => res(v), rej)\n      }\n      // ignored, we go until we finish, regardless.\n      // defer check until we are actually aborting,\n      // so fetchMethod can override.\n      ac.signal.addEventListener('abort', () => {\n        if (\n          !options.ignoreFetchAbort ||\n          options.allowStaleOnFetchAbort\n        ) {\n          res()\n          // when it eventually resolves, update the cache.\n          if (options.allowStaleOnFetchAbort) {\n            res = v => cb(v, true)\n          }\n        }\n      })\n    }\n\n    if (options.status) options.status.fetchDispatched = true\n    const p = new Promise(pcall).then(cb, eb)\n    const bf = Object.assign(p, {\n      __abortController: ac,\n      __staleWhileFetching: v,\n      __returned: undefined,\n    })\n\n    if (index === undefined) {\n      // internal, don't expose status.\n      this.set(k, bf, { ...fetchOpts.options, status: undefined })\n      index = this.#keyMap.get(k)\n    } else {\n      this.#valList[index] = bf\n    }\n    return bf\n  }\n\n  #isBackgroundFetch(p: any): p is BackgroundFetch<V> {\n    if (!this.#hasFetchMethod) return false\n    const b = p as BackgroundFetch<V>\n    return (\n      !!b &&\n      b instanceof Promise &&\n      b.hasOwnProperty('__staleWhileFetching') &&\n      b.__abortController instanceof AC\n    )\n  }\n\n  /**\n   * Make an asynchronous cached fetch using the\n   * {@link LRUCache.OptionsBase.fetchMethod} function.\n   *\n   * If multiple fetches for the same key are issued, then they will all be\n   * coalesced into a single call to fetchMethod.\n   *\n   * Note that this means that handling options such as\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort},\n   * {@link LRUCache.FetchOptions.signal},\n   * and {@link LRUCache.OptionsBase.allowStaleOnFetchRejection} will be\n   * determined by the FIRST fetch() call for a given key.\n   *\n   * This is a known (fixable) shortcoming which will be addresed on when\n   * someone complains about it, as the fix would involve added complexity and\n   * may not be worth the costs for this edge case.\n   */\n  fetch(\n    k: K,\n    fetchOptions: unknown extends FC\n      ? LRUCache.FetchOptions<K, V, FC>\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext<K, V>\n      : LRUCache.FetchOptionsWithContext<K, V, FC>\n  ): Promise<void | V>\n  // this overload not allowed if context is required\n  fetch(\n    k: unknown extends FC\n      ? K\n      : FC extends undefined | void\n      ? K\n      : never,\n    fetchOptions?: unknown extends FC\n      ? LRUCache.FetchOptions<K, V, FC>\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext<K, V>\n      : never\n  ): Promise<void | V>\n  async fetch(\n    k: K,\n    fetchOptions: LRUCache.FetchOptions<K, V, FC> = {}\n  ): Promise<void | V> {\n    const {\n      // get options\n      allowStale = this.allowStale,\n      updateAgeOnGet = this.updateAgeOnGet,\n      noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n      // set options\n      ttl = this.ttl,\n      noDisposeOnSet = this.noDisposeOnSet,\n      size = 0,\n      sizeCalculation = this.sizeCalculation,\n      noUpdateTTL = this.noUpdateTTL,\n      // fetch exclusive options\n      noDeleteOnFetchRejection = this.noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection = this.allowStaleOnFetchRejection,\n      ignoreFetchAbort = this.ignoreFetchAbort,\n      allowStaleOnFetchAbort = this.allowStaleOnFetchAbort,\n      context,\n      forceRefresh = false,\n      status,\n      signal,\n    } = fetchOptions\n\n    if (!this.#hasFetchMethod) {\n      if (status) status.fetch = 'get'\n      return this.get(k, {\n        allowStale,\n        updateAgeOnGet,\n        noDeleteOnStaleGet,\n        status,\n      })\n    }\n\n    const options = {\n      allowStale,\n      updateAgeOnGet,\n      noDeleteOnStaleGet,\n      ttl,\n      noDisposeOnSet,\n      size,\n      sizeCalculation,\n      noUpdateTTL,\n      noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection,\n      allowStaleOnFetchAbort,\n      ignoreFetchAbort,\n      status,\n      signal,\n    }\n\n    let index = this.#keyMap.get(k)\n    if (index === undefined) {\n      if (status) status.fetch = 'miss'\n      const p = this.#backgroundFetch(k, index, options, context)\n      return (p.__returned = p)\n    } else {\n      // in cache, maybe already fetching\n      const v = this.#valList[index]\n      if (this.#isBackgroundFetch(v)) {\n        const stale =\n          allowStale && v.__staleWhileFetching !== undefined\n        if (status) {\n          status.fetch = 'inflight'\n          if (stale) status.returnedStale = true\n        }\n        return stale ? v.__staleWhileFetching : (v.__returned = v)\n      }\n\n      // if we force a refresh, that means do NOT serve the cached value,\n      // unless we are already in the process of refreshing the cache.\n      const isStale = this.#isStale(index)\n      if (!forceRefresh && !isStale) {\n        if (status) status.fetch = 'hit'\n        this.#moveToTail(index)\n        if (updateAgeOnGet) {\n          this.#updateItemAge(index)\n        }\n        if (status) this.#statusTTL(status, index)\n        return v\n      }\n\n      // ok, it is stale or a forced refresh, and not already fetching.\n      // refresh the cache.\n      const p = this.#backgroundFetch(k, index, options, context)\n      const hasStale = p.__staleWhileFetching !== undefined\n      const staleVal = hasStale && allowStale\n      if (status) {\n        status.fetch = isStale ? 'stale' : 'refresh'\n        if (staleVal && isStale) status.returnedStale = true\n      }\n      return staleVal ? p.__staleWhileFetching : (p.__returned = p)\n    }\n  }\n\n  /**\n   * Return a value from the cache. Will update the recency of the cache\n   * entry found.\n   *\n   * If the key is not found, get() will return `undefined`.\n   */\n  get(k: K, getOptions: LRUCache.GetOptions<K, V, FC> = {}) {\n    const {\n      allowStale = this.allowStale,\n      updateAgeOnGet = this.updateAgeOnGet,\n      noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n      status,\n    } = getOptions\n    const index = this.#keyMap.get(k)\n    if (index !== undefined) {\n      const value = this.#valList[index]\n      const fetching = this.#isBackgroundFetch(value)\n      if (status) this.#statusTTL(status, index)\n      if (this.#isStale(index)) {\n        if (status) status.get = 'stale'\n        // delete only if not an in-flight background fetch\n        if (!fetching) {\n          if (!noDeleteOnStaleGet) {\n            this.delete(k)\n          }\n          if (status && allowStale) status.returnedStale = true\n          return allowStale ? value : undefined\n        } else {\n          if (\n            status &&\n            allowStale &&\n            value.__staleWhileFetching !== undefined\n          ) {\n            status.returnedStale = true\n          }\n          return allowStale ? value.__staleWhileFetching : undefined\n        }\n      } else {\n        if (status) status.get = 'hit'\n        // if we're currently fetching it, we don't actually have it yet\n        // it's not stale, which means this isn't a staleWhileRefetching.\n        // If it's not stale, and fetching, AND has a __staleWhileFetching\n        // value, then that means the user fetched with {forceRefresh:true},\n        // so it's safe to return that value.\n        if (fetching) {\n          return value.__staleWhileFetching\n        }\n        this.#moveToTail(index)\n        if (updateAgeOnGet) {\n          this.#updateItemAge(index)\n        }\n        return value\n      }\n    } else if (status) {\n      status.get = 'miss'\n    }\n  }\n\n  #connect(p: Index, n: Index) {\n    this.#prev[n] = p\n    this.#next[p] = n\n  }\n\n  #moveToTail(index: Index): void {\n    // if tail already, nothing to do\n    // if head, move head to next[index]\n    // else\n    //   move next[prev[index]] to next[index] (head has no prev)\n    //   move prev[next[index]] to prev[index]\n    // prev[index] = tail\n    // next[tail] = index\n    // tail = index\n    if (index !== this.#tail) {\n      if (index === this.#head) {\n        this.#head = this.#next[index] as Index\n      } else {\n        this.#connect(\n          this.#prev[index] as Index,\n          this.#next[index] as Index\n        )\n      }\n      this.#connect(this.#tail, index)\n      this.#tail = index\n    }\n  }\n\n  /**\n   * Deletes a key out of the cache.\n   * Returns true if the key was deleted, false otherwise.\n   */\n  delete(k: K) {\n    let deleted = false\n    if (this.#size !== 0) {\n      const index = this.#keyMap.get(k)\n      if (index !== undefined) {\n        deleted = true\n        if (this.#size === 1) {\n          this.clear()\n        } else {\n          this.#removeItemSize(index)\n          const v = this.#valList[index]\n          if (this.#isBackgroundFetch(v)) {\n            v.__abortController.abort(new Error('deleted'))\n          } else if (this.#hasDispose || this.#hasDisposeAfter) {\n            if (this.#hasDispose) {\n              this.#dispose?.(v as V, k, 'delete')\n            }\n            if (this.#hasDisposeAfter) {\n              this.#disposed?.push([v as V, k, 'delete'])\n            }\n          }\n          this.#keyMap.delete(k)\n          this.#keyList[index] = undefined\n          this.#valList[index] = undefined\n          if (index === this.#tail) {\n            this.#tail = this.#prev[index] as Index\n          } else if (index === this.#head) {\n            this.#head = this.#next[index] as Index\n          } else {\n            this.#next[this.#prev[index]] = this.#next[index]\n            this.#prev[this.#next[index]] = this.#prev[index]\n          }\n          this.#size--\n          this.#free.push(index)\n        }\n      }\n    }\n    if (this.#hasDisposeAfter && this.#disposed?.length) {\n      const dt = this.#disposed\n      let task: DisposeTask<K, V> | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n    return deleted\n  }\n\n  /**\n   * Clear the cache entirely, throwing away all values.\n   */\n  clear() {\n    for (const index of this.#rindexes({ allowStale: true })) {\n      const v = this.#valList[index]\n      if (this.#isBackgroundFetch(v)) {\n        v.__abortController.abort(new Error('deleted'))\n      } else {\n        const k = this.#keyList[index]\n        if (this.#hasDispose) {\n          this.#dispose?.(v as V, k as K, 'delete')\n        }\n        if (this.#hasDisposeAfter) {\n          this.#disposed?.push([v as V, k as K, 'delete'])\n        }\n      }\n    }\n\n    this.#keyMap.clear()\n    this.#valList.fill(undefined)\n    this.#keyList.fill(undefined)\n    if (this.#ttls && this.#starts) {\n      this.#ttls.fill(0)\n      this.#starts.fill(0)\n    }\n    if (this.#sizes) {\n      this.#sizes.fill(0)\n    }\n    this.#head = 0 as Index\n    this.#tail = 0 as Index\n    this.#free.length = 0\n    this.#calculatedSize = 0\n    this.#size = 0\n    if (this.#hasDisposeAfter && this.#disposed) {\n      const dt = this.#disposed\n      let task: DisposeTask<K, V> | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n  }\n}\n", "import type { Cache } from '../types/cache.js';\nimport { LRUCache } from 'lru-cache';\n\n/**\n * A cache using local memory.\n */\nexport class MemoryCache implements Cache {\n  private cache: LRUCache<string, any>;\n\n  /**\n   * @param timeToLiveInSeconds time-to-live for every key-value pair set in the cache\n   */\n  public constructor (private timeToLiveInSeconds: number) {\n    this.cache = new LRUCache({\n      max : 100_000,\n      ttl : timeToLiveInSeconds * 1000\n    });\n  }\n\n  async set(key: string, value: any): Promise<void> {\n    try {\n      this.cache.set(key, value);\n    } catch {\n      // let the code continue as this is a non-fatal error\n    }\n  }\n\n  async get(key: string): Promise<any | undefined> {\n    return this.cache.get(key);\n  }\n\n  async dump(): Promise<void> {\n    for (const [ key, value ] of this.cache) {\n      console.debug(key, value);\n    }\n  }\n}\n", "import type { Cache } from '../../../types/cache.js';\nimport type { GeneralJws } from '../../../types/jws-types.js';\nimport type { PublicJwk } from '../../../types/jose-types.js';\nimport type { DidResolver, VerificationMethod } from '../../../did/did-resolver.js';\n\nimport { Jws } from '../../../utils/jws.js';\nimport { MemoryCache } from '../../../utils/memory-cache.js';\nimport { validateJsonSchema } from '../../../schema-validator.js';\n\ntype VerificationResult = {\n  /** DIDs of all signers */\n  signers: string[];\n};\n\nexport class GeneralJwsVerifier {\n  jws: GeneralJws;\n  cache: Cache;\n\n  constructor(jws: GeneralJws, cache?: Cache) {\n    this.jws = jws;\n    this.cache = cache || new MemoryCache(600);\n  }\n\n  async verify(didResolver: DidResolver): Promise<VerificationResult> {\n    const signers: string[] = [];\n\n    for (const signatureEntry of this.jws.signatures) {\n      let isVerified: boolean;\n      const cacheKey = `${signatureEntry.protected}.${this.jws.payload}.${signatureEntry.signature}`;\n      const kid = Jws.getKid(signatureEntry);\n      const publicJwk = await GeneralJwsVerifier.getPublicKey(kid, didResolver);\n\n      const cachedValue = await this.cache.get(cacheKey);\n\n      // explicit strict equality check to avoid potential buggy cache implementation causing incorrect truthy compare e.g. \"false\"\n      if (cachedValue === undefined) {\n        isVerified = await Jws.verifySignature(this.jws.payload, signatureEntry, publicJwk);\n        await this.cache.set(cacheKey, isVerified);\n      } else {\n        isVerified = cachedValue;\n      }\n\n      const did = Jws.extractDid(kid);\n\n      if (isVerified) {\n        signers.push(did);\n      } else {\n        throw new Error(`signature verification failed for ${did}`);\n      }\n    }\n\n    return { signers };\n  }\n\n  /**\n   * Gets the public key given a fully qualified key ID (`kid`).\n   */\n  public static async getPublicKey(kid: string, didResolver: DidResolver): Promise<PublicJwk> {\n    // `resolve` throws exception if DID is invalid, DID method is not supported,\n    // or resolving DID fails\n    const did = Jws.extractDid(kid);\n    const { didDocument } = await didResolver.resolve(did);\n    const { verificationMethod: verificationMethods = [] } = didDocument || {};\n\n    let verificationMethod: VerificationMethod | undefined;\n\n    for (const vm of verificationMethods) {\n      // consider optimizing using a set for O(1) lookups if needed\n      // key ID in DID Document may or may not be fully qualified. e.g.\n      // `did:ion:alice#key1` or `#key1`\n      if (kid.endsWith(vm.id)) {\n        verificationMethod = vm;\n        break;\n      }\n    }\n\n    if (!verificationMethod) {\n      throw new Error('public key needed to verify signature not found in DID Document');\n    }\n\n    validateJsonSchema('JwkVerificationMethod', verificationMethod);\n\n    const { publicKeyJwk: publicJwk } = verificationMethod;\n\n    return publicJwk as PublicJwk;\n  }\n}", "import type { CID } from 'multiformats';\nimport type { DidResolver } from '../did/did-resolver.js';\nimport type { GeneralJws } from '../types/jws-types.js';\nimport type { GenericMessage } from '../types/message-types.js';\nimport type { Message } from './message.js';\n\nimport { Cid } from '../utils/cid.js';\nimport { GeneralJwsVerifier } from '../jose/jws/general/verifier.js';\nimport { Jws } from '../utils/jws.js';\nimport { DwnError, DwnErrorCode } from './dwn-error.js';\n\ntype AuthorizationPayloadConstraints = {\n  /** permissible properties within payload. Note that `descriptorCid` is implied and does not need to be added */\n  allowedProperties: Set<string>;\n};\n\n/**\n * Authenticates then authorizes the given message using the \"canonical\" auth flow.\n * Some message auth require special handling such as `RecordsWrite` and `RecordsQuery`,\n * which would be incompatible with this auth flow.\n * @throws {Error} if auth fails\n */\nexport async function canonicalAuth(\n  tenant: string,\n  incomingMessage: Message<GenericMessage>,\n  didResolver: DidResolver\n): Promise<void> {\n  await authenticate(incomingMessage.message.authorization, didResolver);\n  await authorize(tenant, incomingMessage);\n}\n\n/**\n * Validates the structural integrity of the `authorization` property.\n * By default, only `descriptorCid` is expected and allowed in the `authorization` JWS payload.\n * NOTE: signature is not verified.\n * @returns the parsed JSON payload object if validation succeeds.\n */\nexport async function validateAuthorizationIntegrity(\n  message: GenericMessage,\n  authorizationPayloadConstraints?: AuthorizationPayloadConstraints\n): Promise<{ descriptorCid: CID, [key: string]: any }> {\n  if (message.authorization === undefined) {\n    throw new DwnError(DwnErrorCode.AuthorizationMissing, 'Property `authorization` is missing.');\n  }\n\n  if (message.authorization.signatures.length !== 1) {\n    throw new Error('expected no more than 1 signature for authorization');\n  }\n\n  const payloadJson = Jws.decodePlainObjectPayload(message.authorization);\n  const { descriptorCid } = payloadJson;\n\n  // `descriptorCid` validation - ensure that the provided descriptorCid matches the CID of the actual message\n  const expectedDescriptorCid = await Cid.computeCid(message.descriptor);\n  if (descriptorCid !== expectedDescriptorCid) {\n    throw new Error(`provided descriptorCid ${descriptorCid} does not match expected CID ${expectedDescriptorCid}`);\n  }\n\n  // check to ensure that no other unexpected properties exist in payload.\n  const allowedProperties = authorizationPayloadConstraints?.allowedProperties ?? new Set();\n  const customProperties = { ...payloadJson };\n  delete customProperties.descriptorCid;\n  for (const propertyName in customProperties) {\n    {\n      if (!allowedProperties.has(propertyName)) {\n        throw new Error(`${propertyName} not allowed in auth payload.`);\n      }\n    }\n\n    try {\n      Cid.parseCid(payloadJson[propertyName]);\n    } catch (e) {\n      throw new Error(`${propertyName} must be a valid CID`);\n    }\n  }\n\n  return payloadJson;\n}\n\n/**\n * Validates the signature(s) of the given JWS.\n * @throws {Error} if fails authentication\n */\nexport async function authenticate(jws: GeneralJws | undefined, didResolver: DidResolver): Promise<void> {\n  if (jws === undefined) {\n    throw new DwnError(DwnErrorCode.AuthenticateJwsMissing, 'Missing JWS.');\n  }\n\n  const verifier = new GeneralJwsVerifier(jws);\n  await verifier.verify(didResolver);\n}\n\n/**\n * Authorizes the incoming message.\n * @throws {Error} if fails authentication\n */\nexport async function authorize(tenant: string, incomingMessage: Message<GenericMessage>): Promise<void> {\n  // if author is the same as the target tenant, we can directly grant access\n  if (incomingMessage.author === tenant) {\n    return;\n  } else {\n    throw new Error('message failed authorization, permission grant check not yet implemented');\n  }\n}\n", "import { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\nexport function validateProtocolUrlNormalized(url: string): void {\n  let normalized: string | undefined;\n  try {\n    normalized = normalizeProtocolUrl(url);\n  } catch {\n    normalized = undefined;\n  }\n\n  if (url !== normalized) {\n    throw new DwnError(DwnErrorCode.UrlProtocolNotNormalized, `Protocol URI ${url} must be normalized.`);\n  }\n}\n\nexport function normalizeProtocolUrl(url: string): string {\n  // Keeping protocol normalization as a separate function in case\n  // protocol and schema normalization diverge in the future\n  return normalizeUrl(url);\n}\n\nexport function validateSchemaUrlNormalized(url: string): void {\n  let normalized: string | undefined;\n  try {\n    normalized = normalizeSchemaUrl(url);\n  } catch {\n    normalized = undefined;\n  }\n\n  if (url !== normalized) {\n    throw new DwnError(DwnErrorCode.UrlSchemaNotNormalized, `Schema URI ${url} must be normalized.`);\n  }\n}\n\nexport function normalizeSchemaUrl(url: string): string {\n  // Keeping schema normalization as a separate function in case\n  // protocol and schema normalization diverge in the future\n  return normalizeUrl(url);\n}\n\nfunction normalizeUrl(url: string): string {\n  let fullUrl: string;\n  if (/^[^:]+:(\\/{2})?[^\\/].*/.test(url)) {\n    fullUrl = url;\n  } else {\n    fullUrl = `http://${url}`;\n  }\n\n  try {\n    const result = new URL(fullUrl);\n    result.search = '';\n    result.hash = '';\n    return removeTrailingSlash(result.href);\n  } catch (e) {\n    throw new DwnError(DwnErrorCode.UrlProtocolNotNormalizable, 'Could not normalize protocol URI');\n  }\n}\n\nfunction removeTrailingSlash(str: string): string {\n  if (str.endsWith('/')) {\n    return str.slice(0, -1);\n  } else {\n    return str;\n  }\n}\n", "import type { SignatureInput } from '../types/jws-types.js';\nimport type { Filter, RangeFilter } from '../types/message-types.js';\nimport type { RecordsQueryDescriptor, RecordsQueryFilter, RecordsQueryMessage } from '../types/records-types.js';\n\nimport { getCurrentTimeInHighPrecision } from '../utils/time.js';\nimport { Message } from '../core/message.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { validateAuthorizationIntegrity } from '../core/auth.js';\nimport { DwnInterfaceName, DwnMethodName } from '../core/message.js';\nimport { normalizeProtocolUrl, normalizeSchemaUrl, validateProtocolUrlNormalized, validateSchemaUrlNormalized } from '../utils/url.js';\n\nexport enum DateSort {\n  CreatedAscending = 'createdAscending',\n  CreatedDescending = 'createdDescending',\n  PublishedAscending = 'publishedAscending',\n  PublishedDescending = 'publishedDescending'\n}\n\nexport type RecordsQueryOptions = {\n  dateCreated?: string;\n  filter: RecordsQueryFilter;\n  dateSort?: DateSort;\n  authorizationSignatureInput?: SignatureInput;\n};\n\nexport class RecordsQuery extends Message<RecordsQueryMessage> {\n\n  public static async parse(message: RecordsQueryMessage): Promise<RecordsQuery> {\n    if (message.authorization !== undefined) {\n      await validateAuthorizationIntegrity(message);\n    }\n\n    if (message.descriptor.filter.protocol !== undefined) {\n      validateProtocolUrlNormalized(message.descriptor.filter.protocol);\n    }\n    if (message.descriptor.filter.schema !== undefined) {\n      validateSchemaUrlNormalized(message.descriptor.filter.schema);\n    }\n\n    return new RecordsQuery(message);\n  }\n\n  public static async create(options: RecordsQueryOptions): Promise<RecordsQuery> {\n    const descriptor: RecordsQueryDescriptor = {\n      interface   : DwnInterfaceName.Records,\n      method      : DwnMethodName.Query,\n      dateCreated : options.dateCreated ?? getCurrentTimeInHighPrecision(),\n      filter      : RecordsQuery.normalizeFilter(options.filter),\n      dateSort    : options.dateSort\n    };\n\n    // delete all descriptor properties that are `undefined` else the code will encounter the following IPLD issue when attempting to generate CID:\n    // Error: `undefined` is not supported by the IPLD Data Model and cannot be encoded\n    removeUndefinedProperties(descriptor);\n\n    // only generate the `authorization` property if signature input is given\n    const authorizationSignatureInput = options.authorizationSignatureInput;\n    const authorization = authorizationSignatureInput ? await Message.signAsAuthorization(descriptor, authorizationSignatureInput) : undefined;\n    const message = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n\n    return new RecordsQuery(message);\n  }\n\n  public static convertFilter(filter: RecordsQueryFilter): Filter {\n    const filterCopy = { ...filter };\n    const { dateCreated } = filterCopy;\n\n    let rangeFilter: RangeFilter | undefined = undefined;\n    if (dateCreated !== undefined) {\n      if (dateCreated.to !== undefined && dateCreated.from !== undefined) {\n        rangeFilter = {\n          gte : dateCreated.from,\n          lt  : dateCreated.to,\n        };\n      } else if (dateCreated.to !== undefined) {\n        rangeFilter = {\n          lt: dateCreated.to,\n        };\n      } else if (dateCreated.from !== undefined) {\n        rangeFilter = {\n          gte: dateCreated.from,\n        };\n      }\n    }\n\n    if (rangeFilter) {\n      (filterCopy as Filter).dateCreated = rangeFilter;\n    }\n\n    return filterCopy as Filter;\n  }\n\n  public static normalizeFilter(filter: RecordsQueryFilter): RecordsQueryFilter {\n    let protocol;\n    if (filter.protocol === undefined) {\n      protocol = undefined;\n    } else {\n      protocol = normalizeProtocolUrl(filter.protocol);\n    }\n\n    let schema;\n    if (filter.schema === undefined) {\n      schema = undefined;\n    } else {\n      schema = normalizeSchemaUrl(filter.schema);\n    }\n\n    return {\n      ...filter,\n      protocol,\n      schema,\n    };\n  }\n}\n", "import { Encoder } from './encoder.js';\nimport { Readable } from 'readable-stream';\n\n/**\n * Utility class for readable data stream, intentionally named to disambiguate from ReadableStream, readable-stream, Readable etc.\n */\nexport class DataStream {\n  /**\n   * Reads the entire readable stream given into array of bytes.\n   */\n  public static async toBytes(readableStream: Readable): Promise<Uint8Array> {\n    return new Promise((resolve, reject) => {\n      const chunks: any[] = [];\n      readableStream.on('data', chunk => {\n        chunks.push(chunk);\n      });\n\n      readableStream.on('end', () => {\n        const uint8Array = DataStream.concatenateArrayOfBytes(chunks);\n        resolve(uint8Array);\n      });\n\n      readableStream.on('error', reject);\n    });\n  }\n\n  /**\n   * Concatenates the array of bytes given into one Uint8Array.\n   */\n  private static concatenateArrayOfBytes(arrayOfBytes: Uint8Array[]): Uint8Array {\n    // sum of individual array lengths\n    const totalLength = arrayOfBytes.reduce((accumulatedValue, currentValue) => accumulatedValue + currentValue.length, 0);\n\n    const result = new Uint8Array(totalLength);\n\n    let length = 0;\n    for (const bytes of arrayOfBytes) {\n      result.set(bytes, length);\n      length += bytes.length;\n    }\n\n    return result;\n  }\n\n  /**\n   * Creates a readable stream from the bytes given.\n   */\n  public static fromBytes(bytes: Uint8Array): Readable {\n    // chunk up the bytes to simulate a more real-world like behavior\n    const chunkLength = 100_000;\n    let currentIndex = 0;\n    const readableStream = new Readable({\n      read(_size): void {\n        // if this is the last chunk\n        if (currentIndex + chunkLength > bytes.length) {\n          this.push(bytes.subarray(currentIndex));\n          this.push(null);\n        } else {\n          this.push(bytes.subarray(currentIndex, currentIndex + chunkLength));\n\n          currentIndex = currentIndex + chunkLength;\n        }\n      }\n    });\n\n    return readableStream;\n  }\n\n  /**\n   * Creates a readable stream from the object given.\n   */\n  public static fromObject(object: Record<string, any>): Readable {\n    const bytes = Encoder.objectToBytes(object);\n    return DataStream.fromBytes(bytes);\n  }\n}", "import type { PrivateJwk } from '../types/jose-types.js';\n\nimport { Secp256k1 } from './secp256k1.js';\n\nexport enum KeyDerivationScheme {\n  DataFormats = 'dataFormats',\n  Protocols = 'protocols',\n  Schemas = 'schemas'\n}\n\nexport type DerivedPrivateJwk = {\n  rootKeyId: string,\n  derivationScheme: KeyDerivationScheme;\n  derivationPath?: string[];\n  derivedPrivateKey: PrivateJwk,\n};\n\n/**\n * Class containing hierarchical deterministic key related utility methods used by the DWN.\n */\nexport class HdKey {\n  /**\n   * Derives a descendant private key.\n   * NOTE: currently only supports SECP256K1 keys.\n   */\n  public static async derivePrivateKey(ancestorKey: DerivedPrivateJwk, subDerivationPath: string[]): Promise<DerivedPrivateJwk> {\n    const ancestorPrivateKey = Secp256k1.privateJwkToBytes(ancestorKey.derivedPrivateKey);\n    const ancestorPrivateKeyDerivationPath = ancestorKey.derivationPath ?? [];\n    const derivedPrivateKeyBytes = await Secp256k1.derivePrivateKey(ancestorPrivateKey, subDerivationPath);\n    const derivedPrivateJwk = await Secp256k1.privateKeyToJwk(derivedPrivateKeyBytes);\n    const derivedDescendantPrivateKey: DerivedPrivateJwk = {\n      rootKeyId         : ancestorKey.rootKeyId,\n      derivationScheme  : ancestorKey.derivationScheme,\n      derivationPath    : [...ancestorPrivateKeyDerivationPath, ...subDerivationPath],\n      derivedPrivateKey : derivedPrivateJwk\n    };\n\n    return derivedDescendantPrivateKey;\n  }\n}", "import varint from 'varint';\nimport type { DidDocument, DidMethodResolver, DidResolutionResult } from './did-resolver.js';\n\nimport { base58btc } from 'multiformats/bases/base58';\nimport { Did } from './did.js';\nimport { ed25519 } from '../../src/jose/algorithms/signing/ed25519.js';\nimport { Encoder } from '../utils/encoder.js';\nimport { Secp256k1 } from '../utils/secp256k1.js';\nimport type { KeyMaterial, PublicJwk } from '../types/jose-types.js';\n\n/**\n * did:key Resolver.\n * * **NOTE**: Key support is limited to Ed25519 and SECP256k1.\n * * **NOTE**: `verificationMethod` support is limited to `JsonWebKey2020`\n *\n * Helpful Resources:\n * * [DID-Key Draft Spec](https://w3c-ccg.github.io/did-method-key/)\n */\nexport class DidKeyResolver implements DidMethodResolver {\n  method(): string {\n    return 'key';\n  }\n\n  /**\n   * Gets the number of bytes of the multicodec header in the `did:key` DID.\n   * @param did - A `did:key` DID\n   * @returns size of the multicodec head in number of bytes\n   */\n  public static getMulticodecSize(did: Uint8Array): number {\n    let multicodecHeaderSize = 0;\n\n    while (true) {\n      const currentByte = did[multicodecHeaderSize];\n      multicodecHeaderSize++;\n\n      // bitwise and with binary 1000 0000\n      // as soon as the result byte does not lead with a leading 1, we've reached the end of the multicodec header\n      if ((currentByte & 0x80) !== 0x80) {\n        break;\n      }\n    }\n\n    return multicodecHeaderSize;\n  }\n\n  async resolve(did: string): Promise<DidResolutionResult> {\n    const [_scheme, _method, id] = did.split(':', 3);\n\n    try {\n      const idBytes = base58btc.decode(id);\n      const multicodec = varint.decode(idBytes);\n      const multicodecSize = DidKeyResolver.getMulticodecSize(idBytes);\n      const publicKeyBytes = idBytes.slice(multicodecSize);\n\n      // key specific values\n      const keySpecificContext: string[] = [];\n      let publicJwk: PublicJwk;\n      if (multicodec === 0xed) {\n        // ed25519-pub multicodec\n        keySpecificContext.push('https://w3id.org/security/suites/ed25519-2020/v1');\n        publicJwk = await ed25519.publicKeyToJwk(publicKeyBytes);\n      } else if (multicodec === 0xe7) {\n        // secp256k1-pub multicodec\n        publicJwk = await Secp256k1.publicKeyToJwk(publicKeyBytes);\n      } else {\n        throw Error(`key type of multicodec ${multicodec} is not supported`);\n      }\n\n      const keyId = `${did}#${id}`;\n\n      const didDocument: DidDocument = {\n        '@context': [\n          'https://www.w3.org/ns/did/v1',\n          'https://w3id.org/security/suites/jws-2020/v1',\n          ...keySpecificContext\n        ],\n        'id'                 : did,\n        'verificationMethod' : [{\n          id           : keyId,\n          type         : 'JsonWebKey2020',\n          controller   : did,\n          publicKeyJwk : publicJwk\n        }],\n        'authentication'       : [keyId],\n        'assertionMethod'      : [keyId],\n        'capabilityDelegation' : [keyId],\n        'capabilityInvocation' : [keyId]\n      };\n\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {}\n      };\n    } catch {\n      return {\n        didDocument           : undefined,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error: 'invalidDid'\n        },\n      };\n    }\n  }\n\n  /**\n   * Generates a new ed25519 public/private key pair. Creates a DID using the private key.\n   * @returns DID and its key material.\n   */\n  public static async generate(): Promise<{ did: string } & KeyMaterial> {\n    const { publicJwk, privateJwk } = await ed25519.generateKeyPair();\n\n    // multicodec code for Ed25519 public keys\n    const ed25519Multicodec = varint.encode(0xed);\n    const publicKeyBytes = Encoder.base64UrlToBytes(publicJwk.x);\n    const idBytes = new Uint8Array(ed25519Multicodec.length + publicKeyBytes.byteLength);\n    idBytes.set(ed25519Multicodec, 0);\n    idBytes.set(publicKeyBytes, ed25519Multicodec.length);\n\n    const id = base58btc.encode(idBytes);\n    const did = `did:key:${id}`;\n    const keyId = DidKeyResolver.getKeyId(did);\n\n    return { did, keyId, keyPair: { publicJwk, privateJwk } };\n  }\n\n  /**\n   * Gets the fully qualified key ID of a `did:key` DID. ie. '<did>#<method-specific-id>'\n   */\n  public static getKeyId(did: string): string {\n    const methodSpecificId = Did.getMethodSpecificId(did);\n    const keyId = `${did}#${methodSpecificId}`;\n    return keyId;\n  };\n\n  async dump(): Promise<void> {\n  }\n}", "/**\n * DID related operations.\n */\nexport class Did {\n  /**\n   * Gets the method specific ID segment of a DID. ie. did:<method-name>:<method-specific-id>\n   */\n  public static getMethodSpecificId(did: string): string {\n    const secondColonIndex = did.indexOf(':', 4); // start search for : from the method portion\n    const methodSpecificId = did.substring(secondColonIndex + 1);\n    return methodSpecificId;\n  }\n\n  /**\n   * @param did - the DID to validate\n   */\n  public static validate(did: unknown): void {\n    if (typeof did !== 'string') {\n      throw new Error(`DID is not string: ${did}`);\n    }\n\n    // eslint-disable-next-line\n    const didRegex= /^did:([a-z0-9]+):((?:(?:[a-zA-Z0-9._-]|(?:%[0-9a-fA-F]{2}))*:)*((?:[a-zA-Z0-9._-]|(?:%[0-9a-fA-F]{2}))+))((;[a-zA-Z0-9_.:%-]+=[a-zA-Z0-9_.:%-]*)*)(\\/[^#?]*)?([?][^#]*)?(#.*)?$/;\n    if (!didRegex.test(did)) {\n      throw new TypeError(`DID is not a valid DID: ${did}`);\n    }\n  }\n\n  /**\n   * Gets the method name from a DID. ie. did:<method-name>:<method-specific-id>\n   */\n  public static getMethodName(did: string): string {\n    const secondColonIndex = did.indexOf(':', 4); // start search for : from the method portion\n    const methodName = did.substring(4, secondColonIndex);\n    return methodName;\n  }\n}\n", "import type { DidMethodResolver, DidResolutionResult } from './did-resolver.js';\n\nimport crossFetch from 'cross-fetch';\n// supports fetch in: node, browsers, and browser extensions.\n// uses native fetch if available in environment or falls back to a ponyfill.\n// 'cross-fetch' is a ponyfill that uses `XMLHTTPRequest` under the hood.\n// `XMLHTTPRequest` cannot be used in browser extension background service workers.\n// browser extensions get even more strict with `fetch` in that it cannot be referenced\n// indirectly.\nconst fetch = globalThis.fetch ?? crossFetch;\n\n/**\n * Resolver for ION DIDs.\n */\nexport class DidIonResolver implements DidMethodResolver {\n  /**\n   * @param resolutionEndpoint optional custom URL to send DID resolution request to\n   */\n  constructor (private resolutionEndpoint: string = 'https://discover.did.msidentity.com/1.0/identifiers/') { }\n\n  method(): string {\n    return 'ion';\n  }\n\n  async resolve(did: string): Promise<DidResolutionResult> {\n    // using `URL` constructor to handle both existence and absence of trailing slash '/' in resolution endpoint\n    // appending './' to DID so 'did' in 'did:ion:abc' doesn't get interpreted as a URL scheme (e.g. like 'http') due to the colon\n    const resolutionUrl = new URL('./' + did, this.resolutionEndpoint).toString();\n    const response = await fetch(resolutionUrl);\n\n    if (response.status !== 200) {\n      throw new Error(`unable to resolve ${did}, got http status ${response.status}`);\n    }\n\n    const didResolutionResult = await response.json();\n    return didResolutionResult;\n  }\n\n  async dump(): Promise<void> {\n  }\n}\n", "import type { Cache } from '../types/cache.js';\nimport type { PublicJwk } from '../types/jose-types.js';\n\nimport { Did } from './did.js';\nimport { DidIonResolver } from './did-ion-resolver.js';\nimport { DidKeyResolver } from './did-key-resolver.js';\nimport { MemoryCache } from '../utils/memory-cache.js';\n\n/**\n * A DID resolver that by default supports `did:key` and `did:ion` DIDs.\n */\nexport class DidResolver {\n  private didResolvers: Map<string, DidMethodResolver>;\n  private cache: Cache;\n\n  constructor(resolvers?: DidMethodResolver[], cache?:Cache) {\n\n    this.cache = cache || new MemoryCache(600);\n\n    // construct default DID method resolvers if none given\n    if (resolvers === undefined || resolvers.length === 0) {\n      resolvers = [\n        new DidIonResolver(),\n        new DidKeyResolver()\n      ];\n    }\n\n    this.didResolvers = new Map();\n\n    for (const resolver of resolvers) {\n      this.didResolvers.set(resolver.method(), resolver);\n    }\n  }\n\n  /**\n   * attempt to resolve the DID provided\n   * @throws {Error} if DID is invalid\n   * @throws {Error} if DID method is not supported\n   * @throws {Error} if resolving DID fails\n   * @param did - the DID to resolve\n   * @returns {DidResolutionResult}\n   */\n  public async resolve(did: string): Promise<DidResolutionResult> {\n    // naively validate the given DID\n    Did.validate(did);\n    const splitDID = did.split(':', 3);\n\n    const didMethod = splitDID[1];\n    const didResolver = this.didResolvers.get(didMethod);\n\n    if (!didResolver) {\n      throw new Error(`${didMethod} DID method not supported`);\n    }\n\n    // use cached result if exists\n    const cachedResolutionResult = await this.cache.get(did);\n    const resolutionResult = cachedResolutionResult ?? await didResolver.resolve(did);\n    if (cachedResolutionResult === undefined){\n      await this.cache.set(did, resolutionResult);\n    }\n\n    const { didDocument, didResolutionMetadata } = resolutionResult;\n\n    if (!didDocument || didResolutionMetadata?.error) {\n      const { error } = didResolutionMetadata;\n      let errMsg = `Failed to resolve DID ${did}.`;\n      errMsg += error ? ` Error: ${error}` : '';\n\n      throw new Error(errMsg);\n    }\n\n    return resolutionResult;\n  }\n\n  async dump(): Promise<void> {\n    console.group('didResolvers');\n    for (const [ key, value ] of this.didResolvers) {\n      console.group(key);\n      // @ts-ignore\n      await value['dump']?.();\n      console.groupEnd();\n    }\n    console.groupEnd();\n\n    console.group('didCache');\n    // @ts-ignore\n    await this.cache['dump']?.();\n    console.groupEnd();\n  }\n}\n\n/**\n * A generalized interface that can be implemented for individual\n * DID methods\n */\nexport interface DidMethodResolver {\n  /**\n   * @returns the DID method supported by {@link DidMethodResolver.resolve}\n   */\n  method(): string;\n\n  /**\n   * attempts to resolve the DID provided into its respective DID Document.\n   * More info on resolving DIDs can be found\n   * {@link https://www.w3.org/TR/did-core/#resolution here}\n   * @param did - the DID to resolve\n   * @throws {Error} if unable to resolve the DID\n   */\n  resolve(did: string): Promise<DidResolutionResult>;\n}\n\nexport type DidDocument = {\n  '@context'?: 'https://www.w3.org/ns/did/v1' | string | string[]\n  id: string\n  alsoKnownAs?: string[]\n  controller?: string | string[]\n  verificationMethod?: VerificationMethod[]\n  service?: ServiceEndpoint[]\n  authentication?: VerificationMethod[] | string[]\n  assertionMethod?: VerificationMethod[] | string[]\n  keyAgreement?: VerificationMethod[] | string[]\n  capabilityInvocation?: VerificationMethod[] | string[]\n  capabilityDelegation?: VerificationMethod[] | string[]\n};\n\nexport type DwnServiceEndpoint = {\n  nodes: string[]\n};\n\nexport type ServiceEndpoint = {\n  id: string\n  type: string\n  serviceEndpoint: string | DwnServiceEndpoint\n  description?: string\n};\n\nexport type VerificationMethod = {\n  id: string\n  // one of the valid verification method types as per\n  // https://www.w3.org/TR/did-spec-registries/#verification-method-types\n  type: string\n  // DID of the key's controller\n  controller: string\n  // a JSON Web Key that conforms to https://datatracker.ietf.org/doc/html/rfc7517\n  publicKeyJwk?: PublicJwk\n};\n\nexport type DidResolutionResult = {\n  '@context'?: 'https://w3id.org/did-resolution/v1' | string | string[]\n  didResolutionMetadata: DidResolutionMetadata\n  didDocument?: DidDocument\n  didDocumentMetadata: DidDocumentMetadata\n};\n\nexport type DidResolutionMetadata = {\n  contentType?: string\n  error?: 'invalidDid' | 'notFound' | 'representationNotSupported' |\n  'unsupportedDidMethod' | string\n};\n\nexport type DidDocumentMetadata = {\n  // indicates the timestamp of the Create operation. ISO8601 timestamp\n  created?: string\n  // indicates the timestamp of the last Update operation for the document version which was\n  // resolved. ISO8601 timestamp\n  updated?: string\n  // indicates whether the DID has been deactivated\n  deactivated?: boolean\n  // indicates the version of the last Update operation for the document version which\n  // was resolved\n  versionId?: string\n  // indicates the timestamp of the next Update operation if the resolved document version\n  // is not the latest version of the document.\n  nextUpdate?: string\n  // indicates the version of the next Update operation if the resolved document version\n  // is not the latest version of the document.\n  nextVersionId?: string\n  // @see https://www.w3.org/TR/did-core/#dfn-equivalentid\n  equivalentId?: string\n  // @see https://www.w3.org/TR/did-core/#dfn-canonicalid\n  canonicalId?: string\n};", "function createError(message) {\n    var err = new Error(message);\n    err.source = \"ulid\";\n    return err;\n}\n// These values should NEVER change. If\n// they do, we're no longer making ulids!\nvar ENCODING = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\"; // Crockford's Base32\nvar ENCODING_LEN = ENCODING.length;\nvar TIME_MAX = Math.pow(2, 48) - 1;\nvar TIME_LEN = 10;\nvar RANDOM_LEN = 16;\nfunction replaceCharAt(str, index, char) {\n    if (index > str.length - 1) {\n        return str;\n    }\n    return str.substr(0, index) + char + str.substr(index + 1);\n}\nfunction incrementBase32(str) {\n    var done = undefined;\n    var index = str.length;\n    var char = void 0;\n    var charIndex = void 0;\n    var maxCharIndex = ENCODING_LEN - 1;\n    while (!done && index-- >= 0) {\n        char = str[index];\n        charIndex = ENCODING.indexOf(char);\n        if (charIndex === -1) {\n            throw createError(\"incorrectly encoded string\");\n        }\n        if (charIndex === maxCharIndex) {\n            str = replaceCharAt(str, index, ENCODING[0]);\n            continue;\n        }\n        done = replaceCharAt(str, index, ENCODING[charIndex + 1]);\n    }\n    if (typeof done === \"string\") {\n        return done;\n    }\n    throw createError(\"cannot increment this string\");\n}\nfunction randomChar(prng) {\n    var rand = Math.floor(prng() * ENCODING_LEN);\n    if (rand === ENCODING_LEN) {\n        rand = ENCODING_LEN - 1;\n    }\n    return ENCODING.charAt(rand);\n}\nfunction encodeTime(now, len) {\n    if (isNaN(now)) {\n        throw new Error(now + \" must be a number\");\n    }\n    if (now > TIME_MAX) {\n        throw createError(\"cannot encode time greater than \" + TIME_MAX);\n    }\n    if (now < 0) {\n        throw createError(\"time must be positive\");\n    }\n    if (Number.isInteger(now) === false) {\n        throw createError(\"time must be an integer\");\n    }\n    var mod = void 0;\n    var str = \"\";\n    for (; len > 0; len--) {\n        mod = now % ENCODING_LEN;\n        str = ENCODING.charAt(mod) + str;\n        now = (now - mod) / ENCODING_LEN;\n    }\n    return str;\n}\nfunction encodeRandom(len, prng) {\n    var str = \"\";\n    for (; len > 0; len--) {\n        str = randomChar(prng) + str;\n    }\n    return str;\n}\nfunction decodeTime(id) {\n    if (id.length !== TIME_LEN + RANDOM_LEN) {\n        throw createError(\"malformed ulid\");\n    }\n    var time = id.substr(0, TIME_LEN).split(\"\").reverse().reduce(function (carry, char, index) {\n        var encodingIndex = ENCODING.indexOf(char);\n        if (encodingIndex === -1) {\n            throw createError(\"invalid character found: \" + char);\n        }\n        return carry += encodingIndex * Math.pow(ENCODING_LEN, index);\n    }, 0);\n    if (time > TIME_MAX) {\n        throw createError(\"malformed ulid, timestamp too large\");\n    }\n    return time;\n}\nfunction detectPrng() {\n    var allowInsecure = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    var root = arguments[1];\n\n    if (!root) {\n        root = typeof window !== \"undefined\" ? window : null;\n    }\n    var browserCrypto = root && (root.crypto || root.msCrypto);\n    if (browserCrypto) {\n        return function () {\n            var buffer = new Uint8Array(1);\n            browserCrypto.getRandomValues(buffer);\n            return buffer[0] / 0xff;\n        };\n    } else {\n        try {\n            var nodeCrypto = require(\"crypto\");\n            return function () {\n                return nodeCrypto.randomBytes(1).readUInt8() / 0xff;\n            };\n        } catch (e) {}\n    }\n    if (allowInsecure) {\n        try {\n            console.error(\"secure crypto unusable, falling back to insecure Math.random()!\");\n        } catch (e) {}\n        return function () {\n            return Math.random();\n        };\n    }\n    throw createError(\"secure crypto unusable, insecure Math.random not allowed\");\n}\nfunction factory(currPrng) {\n    if (!currPrng) {\n        currPrng = detectPrng();\n    }\n    return function ulid(seedTime) {\n        if (isNaN(seedTime)) {\n            seedTime = Date.now();\n        }\n        return encodeTime(seedTime, TIME_LEN) + encodeRandom(RANDOM_LEN, currPrng);\n    };\n}\nfunction monotonicFactory(currPrng) {\n    if (!currPrng) {\n        currPrng = detectPrng();\n    }\n    var lastTime = 0;\n    var lastRandom = void 0;\n    return function ulid(seedTime) {\n        if (isNaN(seedTime)) {\n            seedTime = Date.now();\n        }\n        if (seedTime <= lastTime) {\n            var incrementedRandom = lastRandom = incrementBase32(lastRandom);\n            return encodeTime(lastTime, TIME_LEN) + incrementedRandom;\n        }\n        lastTime = seedTime;\n        var newRandom = lastRandom = encodeRandom(RANDOM_LEN, currPrng);\n        return encodeTime(seedTime, TIME_LEN) + newRandom;\n    };\n}\nvar ulid = factory();\n\nexport { replaceCharAt, incrementBase32, randomChar, encodeTime, encodeRandom, decodeTime, detectPrng, factory, monotonicFactory, ulid };\n", "import type { LevelWrapperBatchOperation } from '../store/level-wrapper.js';\nimport type { ULID } from 'ulid';\nimport type { Event, EventLog, GetEventsOptions } from '../types/event-log.js';\n\nimport { monotonicFactory } from 'ulid';\nimport { createLevelDatabase, LevelWrapper } from '../store/level-wrapper.js';\n\ntype EventLogLevelConfig = {\n /**\n   * must be a directory path (relative or absolute) where\n   *  LevelDB will store its files, or in browsers, the name of the\n   * {@link https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase IDBDatabase} to be opened.\n  */\n  location: string,\n  createLevelDatabase?: typeof createLevelDatabase,\n};\n\nconst WATERMARKS_SUBLEVEL_NAME = 'watermarks';\nconst CIDS_SUBLEVEL_NAME = 'cids';\n\nexport class EventLogLevel implements EventLog {\n  config: EventLogLevelConfig;\n  db: LevelWrapper<string>;\n  ulid: ULID;\n\n  constructor(config?: EventLogLevelConfig) {\n    this.config = {\n      location: 'EVENTLOG',\n      createLevelDatabase,\n      ...config,\n    };\n\n    this.db = new LevelWrapper<string>({ ...this.config, valueEncoding: 'utf8' });\n    this.ulid = monotonicFactory();\n  }\n\n  async open(): Promise<void> {\n    return this.db.open();\n  }\n\n  async close(): Promise<void> {\n    return this.db.close();\n  }\n\n  async clear(): Promise<void> {\n    return this.db.clear();\n  }\n\n  async append(tenant: string, messageCid: string): Promise<string> {\n    const tenantEventLog = await this.db.partition(tenant);\n    const watermarkLog = await tenantEventLog.partition(WATERMARKS_SUBLEVEL_NAME);\n    const cidLog = await tenantEventLog.partition(CIDS_SUBLEVEL_NAME);\n\n    const watermark = this.ulid();\n\n    await watermarkLog.put(watermark, messageCid);\n    await cidLog.put(messageCid, watermark);\n\n    return watermark;\n  }\n\n  async getEvents(tenant: string, options?: GetEventsOptions): Promise<Event[]> {\n    const tenantEventLog = await this.db.partition(tenant);\n    const watermarkLog = await tenantEventLog.partition(WATERMARKS_SUBLEVEL_NAME);\n    const events: Array<Event> = [];\n\n    for await (const [key, value] of watermarkLog.iterator(options)) {\n      const event = { watermark: key, messageCid: value };\n      events.push(event);\n    }\n\n    return events;\n  }\n\n  async deleteEventsByCid(tenant: string, cids: Array<string>): Promise<number> {\n    if (cids.length === 0) {\n      return 0;\n    }\n\n    const tenantEventLog = await this.db.partition(tenant);\n    const cidLog = await tenantEventLog.partition(CIDS_SUBLEVEL_NAME);\n\n    let ops: LevelWrapperBatchOperation<string>[] = [];\n    const promises: Array<Promise<string | undefined>> = [];\n\n    for (const cid of cids) {\n      ops.push({ type: 'del', key: cid });\n\n      const promise = cidLog.get(cid).catch(e => e);\n      promises.push(promise);\n    }\n\n    await cidLog.batch(ops);\n\n    ops = [];\n    let numEventsDeleted = 0;\n\n    const watermarks: Array<string | undefined> = await Promise.all(promises);\n    for (const watermark of watermarks) {\n      if (watermark) {\n        ops.push({ type: 'del', key: watermark });\n        numEventsDeleted += 1;\n      }\n    }\n\n    const watermarkLog = await tenantEventLog.partition('watermarks');\n    await watermarkLog.batch(ops);\n\n    return numEventsDeleted;\n  }\n\n  async dump(): Promise<void> {\n    console.group('db');\n    await this.db['dump']?.();\n    console.groupEnd();\n  }\n}", "import type { SignatureInput } from '../types/jws-types.js';\nimport type { EventsGetDescriptor, EventsGetMessage } from '../types/event-types.js';\n\nimport { validateAuthorizationIntegrity } from '../core/auth.js';\nimport { DwnInterfaceName, DwnMethodName, Message } from '../core/message.js';\n\nexport type EventsGetOptions = {\n  watermark?: string;\n  authorizationSignatureInput: SignatureInput;\n};\n\nexport class EventsGet extends Message<EventsGetMessage> {\n\n  public static async parse(message: EventsGetMessage): Promise<EventsGet> {\n    Message.validateJsonSchema(message);\n    await validateAuthorizationIntegrity(message);\n\n    return new EventsGet(message);\n  }\n\n  public static async create(options: EventsGetOptions): Promise<EventsGet> {\n    const descriptor: EventsGetDescriptor = {\n      interface : DwnInterfaceName.Events,\n      method    : DwnMethodName.Get,\n    };\n\n    if (options.watermark) {\n      descriptor.watermark = options.watermark;\n    }\n\n    const authorization = await Message.signAsAuthorization(descriptor, options.authorizationSignatureInput);\n    const message = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n\n    return new EventsGet(message);\n  }\n}", "import type { QueryResultEntry } from '../types/message-types.js';\nimport type { Readable } from 'readable-stream';\n\ntype Status = {\n  code: number\n  detail: string\n};\n\nexport type GenericMessageReply = {\n  status: Status;\n};\n\nexport function messageReplyFromError(e: unknown, code: number): GenericMessageReply {\n\n  const detail = e instanceof Error ? e.message : 'Error';\n\n  return { status: { code, detail } };\n}\n\n/**\n * Catch-all message reply type. It is recommended to use GenericMessageReply or a message-specific reply type whereever possible.\n */\nexport type UnionMessageReply = GenericMessageReply & {\n  /**\n   * Resulting message entries or events returned from the invocation of the corresponding message.\n   * e.g. the resulting messages from a RecordsQuery\n   * Mutually exclusive with `data`.\n   */\n  entries?: QueryResultEntry[];\n\n  /**\n   * Data corresponding to the message received if applicable (e.g. RecordsRead).\n   * Mutually exclusive with `entries`.\n   */\n  data?: Readable;\n};", "import type { DidResolver } from '../index.js';\nimport type { EventLog } from '../types/event-log.js';\nimport type { GetEventsOptions } from '../types/event-log.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { EventsGetMessage, EventsGetReply } from '../types/event-types.js';\n\nimport { EventsGet } from '../interfaces/events-get.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { authenticate, authorize } from '../core/auth.js';\n\ntype HandleArgs = {tenant: string, message: EventsGetMessage};\n\nexport class EventsGetHandler implements MethodHandler {\n  constructor(private didResolver: DidResolver, private eventLog: EventLog) {}\n\n  public async handle({ tenant, message }: HandleArgs): Promise<EventsGetReply> {\n    let eventsGet: EventsGet;\n\n    try {\n      eventsGet = await EventsGet.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    try {\n      await authenticate(message.authorization, this.didResolver);\n      await authorize(tenant, eventsGet);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    // if watermark was provided in message, get all events _after_ the watermark.\n    // Otherwise, get all events.\n    let options: GetEventsOptions | undefined;\n    if (message.descriptor.watermark) {\n      options = { gt: message.descriptor.watermark };\n    }\n\n    const events = await this.eventLog.getEvents(tenant, options);\n\n    return {\n      status: { code: 200, detail: 'OK' },\n      events\n    };\n  }\n}", "export class DwnConstant {\n  /**\n   * The maximum size in bytes of raw data that will be returned as `encodedData`.\n   */\n  public static readonly maxDataSizeAllowedToBeEncoded = 10_000;\n}", "import type { SignatureInput } from '../types/jws-types.js';\nimport type { MessagesGetDescriptor, MessagesGetMessage } from '../types/messages-types.js';\n\nimport { Cid } from '../utils/cid.js';\nimport { validateAuthorizationIntegrity } from '../core/auth.js';\nimport { DwnInterfaceName, DwnMethodName, Message } from '../core/message.js';\n\nexport type MessagesGetOptions = {\n  messageCids: string[];\n  authorizationSignatureInput: SignatureInput;\n};\n\nexport class MessagesGet extends Message<MessagesGetMessage> {\n  public static async parse(message: MessagesGetMessage): Promise<MessagesGet> {\n    Message.validateJsonSchema(message);\n    this.validateMessageCids(message.descriptor.messageCids);\n\n    await validateAuthorizationIntegrity(message);\n\n    return new MessagesGet(message);\n  }\n\n  public static async create(options: MessagesGetOptions): Promise<MessagesGet> {\n    const descriptor: MessagesGetDescriptor = {\n      interface   : DwnInterfaceName.Messages,\n      method      : DwnMethodName.Get,\n      messageCids : options.messageCids\n    };\n\n    const authorization = await Message.signAsAuthorization(descriptor, options.authorizationSignatureInput);\n    const message = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n    MessagesGet.validateMessageCids(options.messageCids);\n\n    return new MessagesGet(message);\n  }\n\n  /**\n   * validates the provided cids\n   * @param messageCids - the cids in question\n   * @throws {Error} if an invalid cid is found.\n   */\n  private static validateMessageCids(messageCids: string[]): void {\n    for (const cid of messageCids) {\n      try {\n        Cid.parseCid(cid);\n      } catch (_) {\n        throw new Error(`${cid} is not a valid CID`);\n      }\n    }\n  }\n}", "import type { DataStore } from '../types/data-store.js';\nimport type { DidResolver } from '../did/did-resolver.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { RecordsWriteMessage } from '../types/records-types.js';\nimport type { MessagesGetMessage, MessagesGetReply, MessagesGetReplyEntry } from '../types/messages-types.js';\n\nimport { DataStream } from '../utils/data-stream.js';\nimport { DwnConstant } from '../core/dwn-constant.js';\nimport { Encoder } from '../utils/encoder.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { MessagesGet } from '../interfaces/messages-get.js';\nimport { authenticate, authorize } from '../core/auth.js';\nimport { DwnInterfaceName, DwnMethodName, Message } from '../core/message.js';\n\ntype HandleArgs = { tenant: string, message: MessagesGetMessage };\n\nexport class MessagesGetHandler implements MethodHandler {\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private dataStore: DataStore) {}\n\n  public async handle({ tenant, message }: HandleArgs): Promise<MessagesGetReply> {\n    let messagesGet: MessagesGet;\n\n    try {\n      messagesGet = await MessagesGet.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    try {\n      await authenticate(message.authorization, this.didResolver);\n      await authorize(tenant, messagesGet);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    const promises: Promise<MessagesGetReplyEntry>[] = [];\n    const messageCids = new Set(message.descriptor.messageCids);\n\n    for (const messageCid of messageCids) {\n      const promise = this.messageStore.get(tenant, messageCid)\n        .then(message => {\n          return { messageCid, message };\n        })\n        .catch(_ => {\n          return { messageCid, message: undefined, error: `Failed to get message ${messageCid}` };\n        });\n\n      promises.push(promise);\n    }\n\n    const messages = await Promise.all(promises);\n\n    // for every message, include associated data as `encodedData` IF:\n    //  * its a RecordsWrite\n    //  * the data size is equal or smaller than the size threshold\n    //! NOTE: this is somewhat duplicate code that also exists in `StorageController.query`.\n    for (const entry of messages) {\n      const { message } = entry;\n\n      if (!message) {\n        continue;\n      }\n\n      const { interface: messageInterface, method } = message.descriptor;\n      if (messageInterface !== DwnInterfaceName.Records || method !== DwnMethodName.Write) {\n        continue;\n      }\n\n      // RecordsWrite specific handling\n      const recordsWrite = message as RecordsWriteMessage;\n      const dataCid = recordsWrite.descriptor.dataCid;\n      const dataSize = recordsWrite.descriptor.dataSize;\n\n      if (dataCid !== undefined && dataSize! <= DwnConstant.maxDataSizeAllowedToBeEncoded) {\n        const messageCid = await Message.getCid(message);\n        const result = await this.dataStore.get(tenant, messageCid, dataCid);\n\n        if (result) {\n          const dataBytes = await DataStream.toBytes(result.dataStream);\n          entry.encodedData = Encoder.bytesToBase64Url(dataBytes);\n        }\n      }\n    }\n\n    return {\n      status: { code: 200, detail: 'OK' },\n      messages\n    };\n  }\n}", "import { bytes as binary, CID } from './index.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\n\nfunction readonly ({ enumerable = true, configurable = false } = {}) {\n  return { enumerable, configurable, writable: false }\n}\n\n/**\n * @param {[string|number, string]} path\n * @param {any} value\n * @returns {Iterable<[string, CID]>}\n */\nfunction * linksWithin (path, value) {\n  if (value != null && typeof value === 'object') {\n    if (Array.isArray(value)) {\n      for (const [index, element] of value.entries()) {\n        const elementPath = [...path, index]\n        const cid = CID.asCID(element)\n        if (cid) {\n          yield [elementPath.join('/'), cid]\n        } else if (typeof element === 'object') {\n          yield * links(element, elementPath)\n        }\n      }\n    } else {\n      const cid = CID.asCID(value)\n      if (cid) {\n        yield [path.join('/'), cid]\n      } else {\n        yield * links(value, path)\n      }\n    }\n  }\n}\n\n/**\n * @template T\n * @param {T} source\n * @param {Array<string|number>} base\n * @returns {Iterable<[string, CID]>}\n */\nfunction * links (source, base) {\n  if (source == null || source instanceof Uint8Array) {\n    return\n  }\n  const cid = CID.asCID(source)\n  if (cid) {\n    yield [base.join('/'), cid]\n  }\n  for (const [key, value] of Object.entries(source)) {\n    const path = /** @type {[string|number, string]} */ ([...base, key])\n    yield * linksWithin(path, value)\n  }\n}\n\n/**\n * @param {[string|number, string]} path\n * @param {any} value\n * @returns {Iterable<string>}\n */\nfunction * treeWithin (path, value) {\n  if (Array.isArray(value)) {\n    for (const [index, element] of value.entries()) {\n      const elementPath = [...path, index]\n      yield elementPath.join('/')\n      if (typeof element === 'object' && !CID.asCID(element)) {\n        yield * tree(element, elementPath)\n      }\n    }\n  } else {\n    yield * tree(value, path)\n  }\n}\n\n/**\n * @template T\n * @param {T} source\n * @param {Array<string|number>} base\n * @returns {Iterable<string>}\n */\nfunction * tree (source, base) {\n  if (source == null || typeof source !== 'object') {\n    return\n  }\n  for (const [key, value] of Object.entries(source)) {\n    const path = /** @type {[string|number, string]} */ ([...base, key])\n    yield path.join('/')\n    if (value != null && !(value instanceof Uint8Array) && typeof value === 'object' && !CID.asCID(value)) {\n      yield * treeWithin(path, value)\n    }\n  }\n}\n\n/**\n *\n * @template T\n * @param {T} source\n * @param {string[]} path\n * @returns {API.BlockCursorView<unknown>}\n */\nfunction get (source, path) {\n  let node = /** @type {Record<string, any>} */(source)\n  for (const [index, key] of path.entries()) {\n    node = node[key]\n    if (node == null) {\n      throw new Error(`Object has no property at ${path.slice(0, index + 1).map(part => `[${JSON.stringify(part)}]`).join('')}`)\n    }\n    const cid = CID.asCID(node)\n    if (cid) {\n      return { value: cid, remaining: path.slice(index + 1).join('/') }\n    }\n  }\n  return { value: node }\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} C - multicodec code corresponding to codec used to encode the block\n * @template {number} A - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @implements {API.BlockView<T, C, A, V>}\n */\nclass Block {\n  /**\n   * @param {object} options\n   * @param {CID<T, C, A, V>} options.cid\n   * @param {API.ByteView<T>} options.bytes\n   * @param {T} options.value\n   */\n  constructor ({ cid, bytes, value }) {\n    if (!cid || !bytes || typeof value === 'undefined') { throw new Error('Missing required argument') }\n\n    this.cid = cid\n    this.bytes = bytes\n    this.value = value\n    this.asBlock = this\n\n    // Mark all the properties immutable\n    Object.defineProperties(this, {\n      cid: readonly(),\n      bytes: readonly(),\n      value: readonly(),\n      asBlock: readonly()\n    })\n  }\n\n  links () {\n    return links(this.value, [])\n  }\n\n  tree () {\n    return tree(this.value, [])\n  }\n\n  /**\n   *\n   * @param {string} [path]\n   * @returns {API.BlockCursorView<unknown>}\n   */\n  get (path = '/') {\n    return get(this.value, path.split('/').filter(Boolean))\n  }\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @param {object} options\n * @param {T} options.value\n * @param {API.BlockEncoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg>>}\n */\nasync function encode ({ value, codec, hasher }) {\n  if (typeof value === 'undefined') throw new Error('Missing required argument \"value\"')\n  if (!codec || !hasher) throw new Error('Missing required argument: codec or hasher')\n\n  const bytes = codec.encode(value)\n  const hash = await hasher.digest(bytes)\n  /** @type {CID<T, Code, Alg, 1>} */\n  const cid = CID.create(\n    1,\n    codec.code,\n    hash\n  )\n\n  return new Block({ value, bytes, cid })\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @param {object} options\n * @param {API.ByteView<T>} options.bytes\n * @param {API.BlockDecoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg>>}\n */\nasync function decode ({ bytes, codec, hasher }) {\n  if (!bytes) throw new Error('Missing required argument \"bytes\"')\n  if (!codec || !hasher) throw new Error('Missing required argument: codec or hasher')\n\n  const value = codec.decode(bytes)\n  const hash = await hasher.digest(bytes)\n  /** @type {CID<T, Code, Alg, 1>} */\n  const cid = CID.create(1, codec.code, hash)\n\n  return new Block({ value, bytes, cid })\n}\n\n/**\n * @typedef {object} RequiredCreateOptions\n * @property {CID} options.cid\n */\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @param {{ cid: API.Link<T, Code, Alg, V>, value:T, codec?: API.BlockDecoder<Code, T>, bytes: API.ByteView<T> }|{cid:API.Link<T, Code, Alg, V>, bytes:API.ByteView<T>, value?:void, codec:API.BlockDecoder<Code, T>}} options\n * @returns {API.BlockView<T, Code, Alg, V>}\n */\nfunction createUnsafe ({ bytes, cid, value: maybeValue, codec }) {\n  const value = maybeValue !== undefined\n    ? maybeValue\n    : (codec && codec.decode(bytes))\n\n  if (value === undefined) throw new Error('Missing required argument, must either provide \"value\" or \"codec\"')\n\n  return new Block({\n    // eslint-disable-next-line object-shorthand\n    cid: /** @type {CID<T, Code, Alg, V>} */ (cid),\n    bytes,\n    value\n  })\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @param {object} options\n * @param {API.Link<T, Code, Alg, V>} options.cid\n * @param {API.ByteView<T>} options.bytes\n * @param {API.BlockDecoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg, V>>}\n */\nasync function create ({ bytes, cid, hasher, codec }) {\n  if (!bytes) throw new Error('Missing required argument \"bytes\"')\n  if (!hasher) throw new Error('Missing required argument \"hasher\"')\n  const value = codec.decode(bytes)\n  const hash = await hasher.digest(bytes)\n  if (!binary.equals(cid.multihash.bytes, hash.bytes)) {\n    throw new Error('CID hash does not match bytes')\n  }\n\n  return createUnsafe({\n    bytes,\n    cid,\n    value,\n    codec\n  })\n}\n\nexport { encode, decode, create, createUnsafe, Block }\n", "import type { Filter, RangeFilter } from '../types/message-types.js';\nimport type { LevelWrapperBatchOperation, LevelWrapperIteratorOptions } from './level-wrapper.js';\n\nimport { flatten } from '../utils/object.js';\nimport { createLevelDatabase, LevelWrapper } from './level-wrapper.js';\n\nexport interface IndexLevelOptions {\n  signal?: AbortSignal;\n}\n\n/**\n * A LevelDB implementation for indexing the messages stored in the DWN.\n */\nexport class IndexLevel {\n  config: IndexLevelConfig;\n\n  db: LevelWrapper<string>;\n\n  constructor(config: IndexLevelConfig) {\n    this.config = {\n      createLevelDatabase,\n      ...config\n    };\n\n    this.db = new LevelWrapper<string>({ ...this.config, valueEncoding: 'utf8' });\n  }\n\n  async open(): Promise<void> {\n    return this.db.open();\n  }\n\n  async close(): Promise<void> {\n    return this.db.close();\n  }\n\n  /**\n   * Adds indexes for a specific data/object/content.\n   * @param dataId ID of the data/object/content being indexed.\n   */\n  async put(\n    dataId: string,\n    indexes: { [property: string]: unknown },\n    options?: IndexLevelOptions\n  ): Promise<void> {\n\n    indexes = flatten(indexes);\n\n    const operations: LevelWrapperBatchOperation<string>[] = [ ];\n\n    // create an index entry for each property in the `indexes`\n    for (const propertyName in indexes) {\n      const propertyValue = indexes[propertyName];\n\n      // NOTE: appending data ID after (property + value) serves two purposes:\n      // 1. creates a unique entry of the property-value pair per data/object\n      // 2. when we need to delete all indexes of a given data ID (`delete()`), we can reconstruct the index keys and remove the indexes efficiently\n      //\n      // example keys (\\u0000 is just shown for illustration purpose because it is the delimiter used to join the string segments below):\n      // 'interface\\u0000\"Records\"\\u0000bafyreigs3em7lrclhntzhgvkrf75j2muk6e7ypq3lrw3ffgcpyazyw6pry'\n      // 'method\\u0000\"Write\"\\u0000bafyreigs3em7lrclhntzhgvkrf75j2muk6e7ypq3lrw3ffgcpyazyw6pry'\n      // 'schema\\u0000\"http://ud4kyzon6ugxn64boz7v\"\\u0000bafyreigs3em7lrclhntzhgvkrf75j2muk6e7ypq3lrw3ffgcpyazyw6pry'\n      // 'dataCid\\u0000\"bafkreic3ie3cxsblp46vn3ofumdnwiqqk4d5ah7uqgpcn6xps4skfvagze\"\\u0000bafyreigs3em7lrclhntzhgvkrf75j2muk6e7ypq3lrw3ffgcpyazyw6pry'\n      // 'dateCreated\\u0000\"2023-05-25T18:23:29.425008Z\"\\u0000bafyreigs3em7lrclhntzhgvkrf75j2muk6e7ypq3lrw3ffgcpyazyw6pry'\n      const key = this.join(propertyName, this.encodeValue(propertyValue), dataId);\n      operations.push({ type: 'put', key, value: dataId });\n    }\n\n    // create a reverse lookup entry for data ID -> its indexes\n    // this is for indexes deletion (`delete()`): so that given the data ID, we are able to delete all its indexes\n    // we can consider putting this info in a different data partition if this ever becomes more complex/confusing\n    operations.push({ type: 'put', key: `__${dataId}__indexes`, value: JSON.stringify(indexes) });\n\n    await this.db.batch(operations, options);\n  }\n\n  async query(filter: Filter, options?: IndexLevelOptions): Promise<Array<string>> {\n    // Note: We have an array of Promises in order to support OR (anyOf) matches when given a list of accepted values for a property\n    const propertyNameToPromises: { [key: string]: Promise<string[]>[] } = {};\n\n    // Do a separate DB query for each property in `filter`\n    // We will find the union of these many individual queries later.\n    for (const propertyName in filter) {\n      const propertyFilter = filter[propertyName];\n\n      if (typeof propertyFilter === 'object') {\n        if (Array.isArray(propertyFilter)) {\n          // `propertyFilter` is a AnyOfFilter\n\n          // Support OR matches by querying for each values separately,\n          // then adding them to the promises associated with `propertyName`\n          propertyNameToPromises[propertyName] = [];\n          for (const propertyValue of new Set(propertyFilter)) {\n            const exactMatchesPromise = this.findExactMatches(propertyName, propertyValue, options);\n            propertyNameToPromises[propertyName].push(exactMatchesPromise);\n          }\n        } else {\n          // `propertyFilter` is a `RangeFilter`\n          const rangeMatchesPromise = this.findRangeMatches(propertyName, propertyFilter, options);\n          propertyNameToPromises[propertyName] = [rangeMatchesPromise];\n        }\n      } else {\n        // propertyFilter is an EqualFilter, meaning it is a non-object primitive type\n        const exactMatchesPromise = this.findExactMatches(propertyName, propertyFilter, options);\n        propertyNameToPromises[propertyName] = [exactMatchesPromise];\n      }\n    }\n\n    // map of ID of all data/object -> list of missing property matches\n    // if count of missing property matches is 0, it means the data/object fully matches the filter\n    const missingPropertyMatchesForId: { [dataId: string]: Set<string> } = { };\n\n    // Resolve promises and find the union of results for each individual propertyName DB query\n    const matchedIDs: string[] = [ ];\n    for (const [propertyName, promises] of Object.entries(propertyNameToPromises)) {\n      // acting as an OR match for the property, any of the promises returning a match will be treated as a property match\n      for (const promise of promises) {\n        for (const dataId of await promise) {\n          // if first time seeing a property matching for the data/object, record all properties needing a match to track progress\n          missingPropertyMatchesForId[dataId] ??= new Set<string>([ ...Object.keys(filter) ]);\n\n          missingPropertyMatchesForId[dataId].delete(propertyName);\n          if (missingPropertyMatchesForId[dataId].size === 0) {\n            // full filter match, add it to return list\n            matchedIDs.push(dataId);\n          }\n        }\n      }\n    }\n\n    return matchedIDs;\n  }\n\n  async delete(dataId: string, options?: IndexLevelOptions): Promise<void> {\n    const serializedIndexes = await this.db.get(`__${dataId}__indexes`, options);\n    if (!serializedIndexes) {\n      return;\n    }\n\n    const indexes = JSON.parse(serializedIndexes);\n\n    // delete all indexes associated with the data of the given ID\n    const ops: LevelWrapperBatchOperation<string>[] = [ ];\n    for (const propertyName in indexes) {\n      const propertyValue = indexes[propertyName];\n      const key = this.join(propertyName, this.encodeValue(propertyValue), dataId);\n      ops.push({ type: 'del', key });\n    }\n\n    ops.push({ type: 'del', key: `__${dataId}__indexes` });\n\n    await this.db.batch(ops, options);\n  }\n\n  async clear(): Promise<void> {\n    return this.db.clear();\n  }\n\n  /**\n   * @returns IDs of data that matches the exact property and value.\n   */\n  private async findExactMatches(propertyName: string, propertyValue: unknown, options?: IndexLevelOptions): Promise<string[]> {\n    const propertyValuePrefix = this.join(propertyName, this.encodeValue(propertyValue));\n\n    const iteratorOptions: LevelWrapperIteratorOptions<string> = {\n      gt: propertyValuePrefix\n    };\n\n    const matches: string[] = [];\n    for await (const [ key, dataId ] of this.db.iterator(iteratorOptions, options)) {\n      if (!key.startsWith(propertyValuePrefix)) {\n        break;\n      }\n\n      matches.push(dataId);\n    }\n    return matches;\n  }\n\n  /**\n   * @returns IDs of data that matches the range filter.\n   */\n  private async findRangeMatches(propertyName: string, rangeFilter: RangeFilter, options?: IndexLevelOptions): Promise<string[]> {\n    const iteratorOptions: LevelWrapperIteratorOptions<string> = { };\n    for (const comparator in rangeFilter) {\n      const comparatorName = comparator as keyof RangeFilter;\n      iteratorOptions[comparatorName] = this.join(propertyName, this.encodeValue(rangeFilter[comparatorName]));\n    }\n\n    // if there is no lower bound specified (`gt` or `gte`), we need to iterate from the upper bound,\n    // so that we will iterate over all the matches before hitting mismatches.\n    if (iteratorOptions.gt === undefined && iteratorOptions.gte === undefined) {\n      iteratorOptions.reverse = true;\n    }\n\n    const matches: string[] = [];\n    for await (const [ key, dataId ] of this.db.iterator(iteratorOptions, options)) {\n      // immediately stop if we arrive at an index entry for a different property\n      if (!key.startsWith(propertyName)) {\n        break;\n      }\n\n      matches.push(dataId);\n    }\n\n    if ('lte' in rangeFilter) {\n      // When `lte` is used, we must also query the exact match explicitly because the exact match will not be included in the iterator above.\n      // This is due to the extra data (CID) appended to the (property + value) key prefix, e.g.\n      // key = 'dateCreated\\u0000\"2023-05-25T11:22:33.000000Z\"\\u0000bafyreigs3em7lrclhntzhgvkrf75j2muk6e7ypq3lrw3ffgcpyazyw6pry'\n      // the value would be considered greater than { lte: `dateCreated\\u0000\"2023-05-25T11:22:33.000000Z\"` } used in the iterator options,\n      // thus would not be included in the iterator even though we'd like it to be.\n      for (const dataId of await this.findExactMatches(propertyName, rangeFilter.lte, options)) {\n        matches.push(dataId);\n      }\n    }\n\n    return matches;\n  }\n\n  private encodeValue(value: unknown): string {\n    if (typeof value === 'string') {\n      // We can't just `JSON.stringify` as that'll affect the sort order of strings.\n      // For example, `'\\x00'` becomes `'\\\\u0000'`.\n      return `\"${value}\"`;\n    }\n\n    return String(value);\n  }\n\n  /**\n   * Joins the given values using the `\\x00` (\\u0000) character.\n   */\n  private join(...values: unknown[]): string {\n    return values.join(`\\x00`);\n  }\n\n  async dump(): Promise<void> {\n    console.group('db');\n    await this.db['dump']?.();\n    console.groupEnd();\n  }\n}\n\ntype IndexLevelConfig = {\n  location: string,\n  createLevelDatabase?: typeof createLevelDatabase,\n};", "import type { Filter, GenericMessage } from '../types/message-types.js';\nimport type { MessageStore, MessageStoreOptions } from '../types/message-store.js';\n\nimport * as block from 'multiformats/block';\nimport * as cbor from '@ipld/dag-cbor';\n\nimport { BlockstoreLevel } from './blockstore-level.js';\nimport { CID } from 'multiformats/cid';\nimport { createLevelDatabase } from './level-wrapper.js';\nimport { executeUnlessAborted } from '../utils/abort.js';\nimport { IndexLevel } from './index-level.js';\nimport { sha256 } from 'multiformats/hashes/sha2';\n\n/**\n * A simple implementation of {@link MessageStore} that works in both the browser and server-side.\n * Leverages LevelDB under the hood.\n */\nexport class MessageStoreLevel implements MessageStore {\n  config: MessageStoreLevelConfig;\n\n  blockstore: BlockstoreLevel;\n\n  index: IndexLevel;\n\n  /**\n   * @param {MessageStoreLevelConfig} config\n   * @param {string} config.blockstoreLocation - must be a directory path (relative or absolute) where\n   *  LevelDB will store its files, or in browsers, the name of the\n   * {@link https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase IDBDatabase} to be opened.\n   * @param {string} config.indexLocation - same as config.blockstoreLocation\n   */\n  constructor(config: MessageStoreLevelConfig = {}) {\n    this.config = {\n      blockstoreLocation : 'MESSAGESTORE',\n      indexLocation      : 'INDEX',\n      createLevelDatabase,\n      ...config\n    };\n\n    this.blockstore = new BlockstoreLevel({\n      location            : this.config.blockstoreLocation!,\n      createLevelDatabase : this.config.createLevelDatabase,\n    });\n\n    this.index = new IndexLevel({\n      location            : this.config.indexLocation!,\n      createLevelDatabase : this.config.createLevelDatabase,\n    });\n  }\n\n  async open(): Promise<void> {\n    await this.blockstore.open();\n    await this.index.open();\n  }\n\n  async close(): Promise<void> {\n    await this.blockstore.close();\n    await this.index.close();\n  }\n\n  async get(tenant: string, cidString: string, options?: MessageStoreOptions): Promise<GenericMessage | undefined> {\n    options?.signal?.throwIfAborted();\n\n    const partition = await executeUnlessAborted(this.blockstore.partition(tenant), options?.signal);\n\n    const cid = CID.parse(cidString);\n    const bytes = await partition.get(cid, options);\n\n    if (!bytes) {\n      return undefined;\n    }\n\n    const decodedBlock = await executeUnlessAborted(block.decode({ bytes, codec: cbor, hasher: sha256 }), options?.signal);\n\n    const message = decodedBlock.value as GenericMessage;\n    return message;\n  }\n\n  async query(tenant: string, filter: Filter, options?: MessageStoreOptions): Promise<GenericMessage[]> {\n    options?.signal?.throwIfAborted();\n\n    const messages: GenericMessage[] = [];\n\n    const resultIds = await this.index.query({ ...filter, tenant }, options);\n\n    for (const id of resultIds) {\n      const message = await this.get(tenant, id, options);\n      if (message) { messages.push(message); }\n    }\n\n    return messages;\n  }\n\n  async delete(tenant: string, cidString: string, options?: MessageStoreOptions): Promise<void> {\n    options?.signal?.throwIfAborted();\n\n    const partition = await executeUnlessAborted(this.blockstore.partition(tenant), options?.signal);\n\n    const cid = CID.parse(cidString);\n    await partition.delete(cid, options);\n    await this.index.delete(cidString, options);\n  }\n\n  async put(\n    tenant: string,\n    message: GenericMessage,\n    indexes: Record<string, string>,\n    options?: MessageStoreOptions\n  ): Promise<void> {\n    options?.signal?.throwIfAborted();\n\n    const partition = await executeUnlessAborted(this.blockstore.partition(tenant), options?.signal);\n\n    const encodedMessageBlock = await executeUnlessAborted(block.encode({ value: message, codec: cbor, hasher: sha256 }), options?.signal);\n\n    await partition.put(encodedMessageBlock.cid, encodedMessageBlock.bytes, options);\n\n    const encodedMessageBlockCid = encodedMessageBlock.cid.toString();\n    const indexDocument = {\n      ...indexes,\n      tenant,\n    };\n    await this.index.put(encodedMessageBlockCid, indexDocument, options);\n  }\n\n  /**\n   * deletes everything in the underlying blockstore and indices.\n   */\n  async clear(): Promise<void> {\n    await this.blockstore.clear();\n    await this.index.clear();\n  }\n\n  async dump(): Promise<void> {\n    console.group('blockstore');\n    await this.blockstore['dump']?.();\n    console.groupEnd();\n\n    console.group('index');\n    await this.index['dump']?.();\n    console.groupEnd();\n  }\n}\n\ntype MessageStoreLevelConfig = {\n  blockstoreLocation?: string,\n  indexLocation?: string,\n  createLevelDatabase?: typeof createLevelDatabase,\n};", "import type { PermissionsRequest } from './permissions-request.js';\nimport type { SignatureInput } from '../types/jws-types.js';\nimport type { PermissionConditions, PermissionScope } from '../types/permissions-types.js';\nimport type { PermissionsGrantDescriptor, PermissionsGrantMessage } from '../types/permissions-types.js';\n\nimport { getCurrentTimeInHighPrecision } from '../utils/time.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { validateAuthorizationIntegrity } from '../core/auth.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName, Message } from '../core/message.js';\n\nexport type PermissionsGrantOptions = {\n  dateCreated?: string;\n  description?: string;\n  grantedTo: string;\n  grantedBy: string;\n  grantedFor: string;\n  permissionsRequestId?: string;\n  scope: PermissionScope;\n  conditions?: PermissionConditions;\n  authorizationSignatureInput: SignatureInput;\n};\n\nexport type CreateFromPermissionsRequestOverrides = {\n  description?: string;\n  grantedTo?: string;\n  grantedBy?: string;\n  grantedFor?: string;\n  scope?: PermissionScope;\n  conditions: PermissionConditions;\n};\n\nexport class PermissionsGrant extends Message<PermissionsGrantMessage> {\n\n  public static async parse(message: PermissionsGrantMessage): Promise<PermissionsGrant> {\n    await validateAuthorizationIntegrity(message);\n\n    return new PermissionsGrant(message);\n  }\n\n  static async create(options: PermissionsGrantOptions): Promise<PermissionsGrant> {\n    const descriptor: PermissionsGrantDescriptor = {\n      interface            : DwnInterfaceName.Permissions,\n      method               : DwnMethodName.Grant,\n      dateCreated          : options.dateCreated ?? getCurrentTimeInHighPrecision(),\n      description          : options.description,\n      grantedTo            : options.grantedTo,\n      grantedBy            : options.grantedBy,\n      grantedFor           : options.grantedFor,\n      permissionsRequestId : options?.permissionsRequestId,\n      scope                : options.scope,\n      conditions           : options.conditions,\n    };\n\n    // delete all descriptor properties that are `undefined` else the code will encounter the following IPLD issue when attempting to generate CID:\n    // Error: `undefined` is not supported by the IPLD Data Model and cannot be encoded\n    removeUndefinedProperties(descriptor);\n\n    const authorization = await Message.signAsAuthorization(descriptor, options.authorizationSignatureInput);\n    const message: PermissionsGrantMessage = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n\n    return new PermissionsGrant(message);\n  }\n\n  /**\n   * generates a PermissionsGrant using the provided PermissionsRequest\n   * @param permissionsRequest\n   * @param authorizationSignatureInput - the private key and additional signature material of the grantor\n   * @param overrides - optional overrides that will be used instead of the properties in `permissionsRequest`\n   */\n  public static async createFromPermissionsRequest(\n    permissionsRequest: PermissionsRequest,\n    authorizationSignatureInput: SignatureInput,\n    overrides?: CreateFromPermissionsRequestOverrides,\n  ): Promise<PermissionsGrant> {\n    const descriptor = permissionsRequest.message.descriptor;\n    return PermissionsGrant.create({\n      description          : overrides?.description ?? descriptor.description,\n      grantedBy            : overrides?.grantedBy ?? descriptor.grantedBy,\n      grantedTo            : overrides?.grantedTo ?? descriptor.grantedTo,\n      grantedFor           : overrides?.grantedFor ?? descriptor.grantedFor,\n      permissionsRequestId : await Message.getCid(permissionsRequest.message),\n      scope                : overrides?.scope ?? descriptor.scope,\n      conditions           : overrides?.conditions ?? descriptor.conditions,\n      authorizationSignatureInput,\n    });\n  }\n\n  public authorize(): void {\n    const { grantedBy, grantedFor } = this.message.descriptor;\n    if (this.author !== grantedBy) {\n      throw new DwnError(DwnErrorCode.PermissionsGrantGrantedByMismatch, 'Message author must match grantedBy property');\n    } else if (grantedBy !== grantedFor) {\n      // Without delegation, only the DWN owner may grant access to their own DWN.\n      throw new DwnError(\n        DwnErrorCode.PermissionsGrantUnauthorizedGrant,\n        `${grantedBy} is not authorized to give access to the DWN belonging to ${grantedFor}`\n      );\n    }\n  }\n}\n", "import type { GenericMessageReply } from '../core/message-reply.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { PermissionsGrantMessage } from '../types/permissions-types.js';\nimport type { DidResolver, EventLog, MessageStore } from '../index.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { Message } from '../core/message.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { PermissionsGrant } from '../interfaces/permissions-grant.js';\n\nexport class PermissionsGrantHandler implements MethodHandler {\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private eventLog: EventLog) { }\n\n  public async handle({\n    tenant,\n    message\n  }: { tenant: string, message: PermissionsGrantMessage }): Promise<GenericMessageReply> {\n    let permissionsGrant: PermissionsGrant;\n    try {\n      permissionsGrant = await PermissionsGrant.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    try {\n      await authenticate(message.authorization, this.didResolver);\n      await permissionsGrant.authorize();\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    const { scope, conditions, ...propertiesToIndex } = message.descriptor;\n    const indexes: { [key: string]: string } = {\n      author: permissionsGrant.author!,\n      ...propertiesToIndex,\n    };\n\n    // If we have not seen this message before, store it\n    const messageCid = await Message.getCid(message);\n    const existingMessage = await this.messageStore.get(tenant, messageCid);\n    if (existingMessage === undefined) {\n      await this.messageStore.put(tenant, message, indexes);\n      await this.eventLog.append(tenant, messageCid);\n    }\n\n    return {\n      status: { code: 202, detail: 'Accepted' }\n    };\n  }\n}", "import type { SignatureInput } from '../types/jws-types.js';\nimport type { PermissionConditions, PermissionScope } from '../types/permissions-types.js';\nimport type { PermissionsRequestDescriptor, PermissionsRequestMessage } from '../types/permissions-types.js';\n\nimport { getCurrentTimeInHighPrecision } from '../utils/time.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { validateAuthorizationIntegrity } from '../core/auth.js';\nimport { DwnInterfaceName, DwnMethodName, Message } from '../core/message.js';\n\ntype PermissionsRequestOptions = {\n  dateCreated?: string;\n  description?: string;\n  grantedTo: string;\n  grantedBy: string;\n  grantedFor: string;\n  scope: PermissionScope;\n  conditions?: PermissionConditions;\n  authorizationSignatureInput: SignatureInput;\n};\n\nexport class PermissionsRequest extends Message<PermissionsRequestMessage> {\n\n  public static async parse(message: PermissionsRequestMessage): Promise<PermissionsRequest> {\n    await validateAuthorizationIntegrity(message);\n\n    return new PermissionsRequest(message);\n  }\n\n  public static async create(options: PermissionsRequestOptions): Promise<PermissionsRequest> {\n    const descriptor: PermissionsRequestDescriptor = {\n      interface   : DwnInterfaceName.Permissions,\n      method      : DwnMethodName.Request,\n      dateCreated : options.dateCreated ?? getCurrentTimeInHighPrecision(),\n      description : options.description,\n      grantedTo   : options.grantedTo,\n      grantedBy   : options.grantedBy,\n      grantedFor  : options.grantedFor,\n      scope       : options.scope,\n      conditions  : options.conditions,\n    };\n\n    // delete all descriptor properties that are `undefined` else the code will encounter the following IPLD issue when attempting to generate CID:\n    // Error: `undefined` is not supported by the IPLD Data Model and cannot be encoded\n    removeUndefinedProperties(descriptor);\n\n    const auth = await Message.signAsAuthorization(descriptor, options.authorizationSignatureInput);\n    const message: PermissionsRequestMessage = { descriptor, authorization: auth };\n\n    Message.validateJsonSchema(message);\n\n    return new PermissionsRequest(message);\n  }\n}\n", "import type { GenericMessageReply } from '../core/message-reply.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { PermissionsRequestMessage } from '../types/permissions-types.js';\nimport type { DidResolver, EventLog, MessageStore } from '../index.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { Message } from '../core/message.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { PermissionsRequest } from '../interfaces/permissions-request.js';\n\nexport class PermissionsRequestHandler implements MethodHandler {\n\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private eventLog: EventLog) { }\n\n  public async handle({\n    tenant,\n    message\n  }: { tenant: string, message: PermissionsRequestMessage }): Promise<GenericMessageReply> {\n    let permissionsRequest: PermissionsRequest;\n    try {\n      permissionsRequest = await PermissionsRequest.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    // authentication\n    try {\n      await authenticate(message.authorization, this.didResolver);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    // store message\n    const { scope, conditions, ...propertiesToIndex } = message.descriptor;\n    const indexes: { [key: string]: string } = {\n      ...propertiesToIndex,\n      author: permissionsRequest.author!,\n    };\n\n    // If we have not seen this message before, store it\n    const messageCid = await Message.getCid(message);\n    const existingMessage = await this.messageStore.get(tenant, messageCid);\n    if (existingMessage === undefined) {\n      await this.messageStore.put(tenant, message, indexes);\n      await this.eventLog.append(tenant, messageCid);\n    }\n\n    return {\n      status: { code: 202, detail: 'Accepted' }\n    };\n  }\n}", "import type { SignatureInput } from '../types/jws-types.js';\nimport type { ProtocolDefinition, ProtocolsConfigureDescriptor, ProtocolsConfigureMessage } from '../types/protocols-types.js';\n\nimport { getCurrentTimeInHighPrecision } from '../utils/time.js';\nimport { validateAuthorizationIntegrity } from '../core/auth.js';\n\nimport { DwnInterfaceName, DwnMethodName, Message } from '../core/message.js';\nimport { normalizeProtocolUrl, normalizeSchemaUrl, validateProtocolUrlNormalized, validateSchemaUrlNormalized } from '../utils/url.js';\n\nexport type ProtocolsConfigureOptions = {\n  dateCreated? : string;\n  definition : ProtocolDefinition;\n  authorizationSignatureInput: SignatureInput;\n};\n\nexport class ProtocolsConfigure extends Message<ProtocolsConfigureMessage> {\n\n  public static async parse(message: ProtocolsConfigureMessage): Promise<ProtocolsConfigure> {\n    await validateAuthorizationIntegrity(message);\n    ProtocolsConfigure.validateDefinitionNormalized(message.descriptor.definition);\n\n    return new ProtocolsConfigure(message);\n  }\n\n  public static async create(options: ProtocolsConfigureOptions): Promise<ProtocolsConfigure> {\n    const descriptor: ProtocolsConfigureDescriptor = {\n      interface    : DwnInterfaceName.Protocols,\n      method       : DwnMethodName.Configure,\n      dateModified : options.dateCreated ?? getCurrentTimeInHighPrecision(),\n      definition   : ProtocolsConfigure.normalizeDefinition(options.definition)\n    };\n\n    const authorization = await Message.signAsAuthorization(descriptor, options.authorizationSignatureInput);\n    const message = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n\n    const protocolsConfigure = new ProtocolsConfigure(message);\n    return protocolsConfigure;\n  }\n\n  private static validateDefinitionNormalized(definition: ProtocolDefinition): void {\n    const { protocol, types } = definition;\n\n    // validate protocol url\n    validateProtocolUrlNormalized(protocol);\n\n    // validate schema url normalized\n    for (const typeName in types) {\n      const schema = types[typeName].schema;\n      if (schema !== undefined) {\n        validateSchemaUrlNormalized(schema);\n      }\n    }\n  }\n\n  private static normalizeDefinition(definition: ProtocolDefinition): ProtocolDefinition {\n    const typesCopy = { ...definition.types };\n\n    // Normalize schema url\n    for (const typeName in typesCopy) {\n      const schema = typesCopy[typeName].schema;\n      if (schema !== undefined) {\n        typesCopy[typeName].schema = normalizeSchemaUrl(schema);\n      }\n    }\n\n    return {\n      ...definition,\n      protocol : normalizeProtocolUrl(definition.protocol),\n      types    : typesCopy,\n    };\n  }\n}\n", "import type { EventLog } from '../types/event-log.js';\nimport type { GenericMessageReply } from '../core/message-reply.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { ProtocolsConfigureMessage } from '../types/protocols-types.js';\nimport type { DataStore, DidResolver, MessageStore } from '../index.js';\n\nimport { canonicalAuth } from '../core/auth.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { ProtocolsConfigure } from '../interfaces/protocols-configure.js';\n\nimport { DwnInterfaceName, DwnMethodName, Message } from '../core/message.js';\n\nexport class ProtocolsConfigureHandler implements MethodHandler {\n\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private dataStore: DataStore, private eventLog: EventLog) { }\n\n  public async handle({\n    tenant,\n    message,\n    dataStream: _dataStream\n  }: {tenant: string, message: ProtocolsConfigureMessage, dataStream: _Readable.Readable}): Promise<GenericMessageReply> {\n\n    let protocolsConfigure: ProtocolsConfigure;\n    try {\n      protocolsConfigure = await ProtocolsConfigure.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    // authentication & authorization\n    try {\n      await canonicalAuth(tenant, protocolsConfigure, this.didResolver);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    // attempt to get existing protocol\n    const query = {\n      interface : DwnInterfaceName.Protocols,\n      method    : DwnMethodName.Configure,\n      protocol  : message.descriptor.definition.protocol\n    };\n    const existingMessages = await this.messageStore.query(tenant, query) as ProtocolsConfigureMessage[];\n\n    // find newest message, and if the incoming message is the newest\n    let newestMessage = await Message.getNewestMessage(existingMessages);\n    let incomingMessageIsNewest = false;\n    if (newestMessage === undefined || await Message.isNewer(message, newestMessage)) {\n      incomingMessageIsNewest = true;\n      newestMessage = message;\n    }\n\n    // write the incoming message to DB if incoming message is newest\n    let messageReply: GenericMessageReply;\n    if (incomingMessageIsNewest) {\n      const indexes = ProtocolsConfigureHandler.constructProtocolsConfigureIndexes(protocolsConfigure);\n\n      const messageCid = await Message.getCid(message);\n      await this.messageStore.put(tenant, message, indexes);\n      await this.eventLog.append(tenant, messageCid);\n\n      messageReply = {\n        status: { code: 202, detail: 'Accepted' }\n      };\n    } else {\n      messageReply = {\n        status: { code: 409, detail: 'Conflict' }\n      };\n    }\n\n    // delete all existing records that are smaller\n    const deletedMessageCids: string[] = [];\n    for (const message of existingMessages) {\n      if (await Message.isNewer(newestMessage, message)) {\n        const messageCid = await Message.getCid(message);\n        deletedMessageCids.push(messageCid);\n\n        await this.messageStore.delete(tenant, messageCid);\n      }\n    }\n\n    await this.eventLog.deleteEventsByCid(tenant, deletedMessageCids);\n\n    return messageReply;\n  };\n\n  private static constructProtocolsConfigureIndexes(protocolsConfigure: ProtocolsConfigure): Record<string, string> {\n    // strip out `definition` as it is not indexable\n    const { definition, ...propertiesToIndex } = protocolsConfigure.message.descriptor;\n    const { author } = protocolsConfigure;\n\n    const indexes = {\n      ...propertiesToIndex,\n      protocol : definition.protocol, // retain protocol url from `definition`\n      author   : author!\n    };\n\n    return indexes;\n  }\n}", "import type { SignatureInput } from '../types/jws-types.js';\nimport type { ProtocolsQueryDescriptor, ProtocolsQueryFilter, ProtocolsQueryMessage } from '../types/protocols-types.js';\n\nimport { getCurrentTimeInHighPrecision } from '../utils/time.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { validateAuthorizationIntegrity } from '../core/auth.js';\nimport { DwnInterfaceName, DwnMethodName, Message } from '../core/message.js';\nimport { normalizeProtocolUrl, validateProtocolUrlNormalized } from '../utils/url.js';\n\nexport type ProtocolsQueryOptions = {\n  dateCreated?: string;\n  filter?: ProtocolsQueryFilter,\n  authorizationSignatureInput: SignatureInput;\n};\n\nexport class ProtocolsQuery extends Message<ProtocolsQueryMessage> {\n\n  public static async parse(message: ProtocolsQueryMessage): Promise<ProtocolsQuery> {\n    await validateAuthorizationIntegrity(message);\n\n    if (message.descriptor.filter !== undefined) {\n      validateProtocolUrlNormalized(message.descriptor.filter.protocol);\n    }\n\n    return new ProtocolsQuery(message);\n  }\n\n  public static async create(options: ProtocolsQueryOptions): Promise<ProtocolsQuery> {\n    const descriptor: ProtocolsQueryDescriptor = {\n      interface   : DwnInterfaceName.Protocols,\n      method      : DwnMethodName.Query,\n      dateCreated : options.dateCreated ?? getCurrentTimeInHighPrecision(),\n      filter      : ProtocolsQuery.normalizeFilter(options.filter),\n    };\n\n    // delete all descriptor properties that are `undefined` else the code will encounter the following IPLD issue when attempting to generate CID:\n    // Error: `undefined` is not supported by the IPLD Data Model and cannot be encoded\n    removeUndefinedProperties(descriptor);\n\n    const authorization = await Message.signAsAuthorization(descriptor, options.authorizationSignatureInput);\n    const message = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n\n    const protocolsQuery = new ProtocolsQuery(message);\n    return protocolsQuery;\n  }\n\n  private static normalizeFilter(filter: ProtocolsQueryFilter | undefined): ProtocolsQueryFilter | undefined {\n    if (filter === undefined) {\n      return undefined;\n    }\n\n    return {\n      ...filter,\n      protocol: normalizeProtocolUrl(filter.protocol),\n    };\n  }\n}\n", "import type { MethodHandler } from '../types/method-handler.js';\nimport type { QueryResultEntry } from '../types/message-types.js';\nimport type { DataStore, DidResolver, MessageStore } from '../index.js';\nimport type { ProtocolsQueryMessage, ProtocolsQueryReply } from '../types/protocols-types.js';\n\nimport { canonicalAuth } from '../core/auth.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { ProtocolsQuery } from '../interfaces/protocols-query.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\n\nimport { DwnInterfaceName, DwnMethodName } from '../core/message.js';\n\nexport class ProtocolsQueryHandler implements MethodHandler {\n\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore,private dataStore: DataStore) { }\n\n  public async handle({\n    tenant,\n    message\n  }: { tenant: string, message: ProtocolsQueryMessage}): Promise<ProtocolsQueryReply> {\n\n    let protocolsQuery: ProtocolsQuery;\n    try {\n      protocolsQuery = await ProtocolsQuery.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    try {\n      await canonicalAuth(tenant, protocolsQuery, this.didResolver);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    const query = {\n      interface : DwnInterfaceName.Protocols,\n      method    : DwnMethodName.Configure,\n      ...message.descriptor.filter\n    };\n    removeUndefinedProperties(query);\n\n    const messages = await this.messageStore.query(tenant, query);\n\n    // strip away `authorization` property for each record before responding\n    const entries: QueryResultEntry[] = [];\n    for (const message of messages) {\n      const { authorization: _, ...objectWithRemainingProperties } = message; // a trick to strip away `authorization`\n      entries.push(objectWithRemainingProperties as QueryResultEntry);\n    }\n\n    return {\n      status: { code: 200, detail: 'OK' },\n      entries\n    };\n  };\n}\n", "import type { RecordsDeleteDescriptor, RecordsDeleteMessage } from '../types/records-types.js';\n\nimport { getCurrentTimeInHighPrecision } from '../utils/time.js';\nimport { Message } from '../core/message.js';\nimport type { SignatureInput } from '../types/jws-types.js';\n\nimport { authorize, validateAuthorizationIntegrity } from '../core/auth.js';\nimport { DwnInterfaceName, DwnMethodName } from '../core/message.js';\n\nexport type RecordsDeleteOptions = {\n  recordId: string;\n  dateModified?: string;\n  authorizationSignatureInput: SignatureInput;\n};\n\nexport class RecordsDelete extends Message<RecordsDeleteMessage> {\n\n  public static async parse(message: RecordsDeleteMessage): Promise<RecordsDelete> {\n    await validateAuthorizationIntegrity(message);\n\n    const recordsDelete = new RecordsDelete(message);\n    return recordsDelete;\n  }\n\n  /**\n   * Creates a RecordsDelete message.\n   * @param options.recordId If `undefined`, will be auto-filled as a originating message as convenience for developer.\n   * @param options.dateModified If `undefined`, it will be auto-filled with current time.\n   */\n  public static async create(options: RecordsDeleteOptions): Promise<RecordsDelete> {\n    const recordId = options.recordId;\n    const currentTime = getCurrentTimeInHighPrecision();\n\n    const descriptor: RecordsDeleteDescriptor = {\n      interface    : DwnInterfaceName.Records,\n      method       : DwnMethodName.Delete,\n      recordId,\n      dateModified : options.dateModified ?? currentTime\n    };\n\n    const authorization = await Message.signAsAuthorization(descriptor, options.authorizationSignatureInput);\n    const message: RecordsDeleteMessage = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n\n    return new RecordsDelete(message);\n  }\n\n  public async authorize(tenant: string): Promise<void> {\n    // TODO: #203 - implement protocol-based authorization for RecordsDelete (https://github.com/TBD54566975/dwn-sdk-js/issues/203)\n    await authorize(tenant, this);\n  }\n}\n", "import * as crypto from 'crypto';\nimport * as eciesjs from 'eciesjs';\nimport { Readable } from 'readable-stream';\n\n/**\n * Utility class for performing common, non-DWN specific encryption operations.\n */\nexport class Encryption {\n  /**\n   * Encrypts the given plaintext stream using AES-256-CTR algorithm.\n   */\n  public static async aes256CtrEncrypt(key: Uint8Array, initializationVector: Uint8Array, plaintextStream: Readable): Promise<Readable> {\n    const cipher = crypto.createCipheriv('aes-256-ctr', key, initializationVector);\n\n    const cipherStream = new Readable({\n      read(): void { }\n    });\n\n    plaintextStream.on('data', (chunk) => {\n      const encryptedChunk = cipher.update(chunk);\n      cipherStream.push(encryptedChunk);\n    });\n\n    plaintextStream.on('end', () => {\n      const finalChunk = cipher.final();\n      cipherStream.push(finalChunk);\n      cipherStream.push(null);\n    });\n\n    plaintextStream.on('error', (err) => {\n      cipherStream.emit('error', err);\n    });\n\n    return cipherStream;\n  }\n\n  /**\n   * Decrypts the given cipher stream using AES-256-CTR algorithm.\n   */\n  public static async aes256CtrDecrypt(key: Uint8Array, initializationVector: Uint8Array, cipherStream: Readable): Promise<Readable> {\n    const decipher = crypto.createDecipheriv('aes-256-ctr', key, initializationVector);\n\n    const plaintextStream = new Readable({\n      read(): void { }\n    });\n\n    cipherStream.on('data', (chunk) => {\n      const decryptedChunk = decipher.update(chunk);\n      plaintextStream.push(decryptedChunk);\n    });\n\n    cipherStream.on('end', () => {\n      const finalChunk = decipher.final();\n      plaintextStream.push(finalChunk);\n      plaintextStream.push(null);\n    });\n\n    cipherStream.on('error', (err) => {\n      plaintextStream.emit('error', err);\n    });\n\n    return plaintextStream;\n  }\n\n  /**\n   * Encrypts the given plaintext using ECIES (Elliptic Curve Integrated Encryption Scheme)\n   * with SECP256K1 for the asymmetric calculations, HKDF as the key-derivation function,\n   * and AES-GCM for the symmetric encryption and MAC algorithms.\n   */\n  public static async eciesSecp256k1Encrypt(uncompressedPublicKey: Uint8Array, plaintext: Uint8Array): Promise<EciesEncryptionOutput> {\n    // underlying library requires Buffer as input\n    const publicKey = Buffer.from(uncompressedPublicKey);\n    const plaintextBuffer = Buffer.from(plaintext);\n\n    const cryptogram = eciesjs.encrypt(publicKey, plaintextBuffer);\n\n    // split cryptogram returned into constituent parts\n    const ephemeralPublicKey = cryptogram.subarray(0, 65);\n    const initializationVector = cryptogram.subarray(65, 81);\n    const messageAuthenticationCode = cryptogram.subarray(81, 97);\n    const ciphertext = cryptogram.subarray(97);\n\n    return {\n      ciphertext,\n      ephemeralPublicKey,\n      initializationVector,\n      messageAuthenticationCode\n    };\n  }\n\n  /**\n   * Decrypt the given plaintext using ECIES (Elliptic Curve Integrated Encryption Scheme)\n   * with SECP256K1 for the asymmetric calculations, HKDF as the key-derivation function,\n   * and AES-GCM for the symmetric encryption and MAC algorithms.\n   */\n  public static async eciesSecp256k1Decrypt(input: EciesEncryptionInput): Promise<Uint8Array> {\n    // underlying library requires Buffer as input\n    const privateKeyBuffer = Buffer.from(input.privateKey);\n    const eciesEncryptionOutput = Buffer.concat([\n      input.ephemeralPublicKey,\n      input.initializationVector,\n      input.messageAuthenticationCode,\n      input.ciphertext\n    ]);\n\n    const plaintext = eciesjs.decrypt(privateKeyBuffer, eciesEncryptionOutput);\n\n    return plaintext;\n  }\n}\n\nexport type EciesEncryptionOutput = {\n  initializationVector: Uint8Array;\n  ephemeralPublicKey: Uint8Array;\n  ciphertext: Uint8Array;\n  messageAuthenticationCode: Uint8Array;\n};\n\nexport type EciesEncryptionInput = EciesEncryptionOutput & {\n  privateKey: Uint8Array;\n};\n\nexport enum EncryptionAlgorithm {\n  Aes256Ctr = 'A256CTR',\n  EciesSecp256k1 = 'ECIES-ES256K'\n}", "import type { GenericMessageReply } from '../core/message-reply.js';\nimport type { DwnInterfaceName, DwnMethodName } from '../core/message.js';\nimport type { GenericMessage, QueryResultEntry } from './message-types.js';\n\nexport type ProtocolsConfigureDescriptor = {\n  interface : DwnInterfaceName.Protocols;\n  method: DwnMethodName.Configure;\n  dateModified: string;\n  definition: ProtocolDefinition;\n};\n\nexport type ProtocolDefinition = {\n  protocol: string;\n  types: ProtocolTypes;\n  structure: {\n    [key: string]: ProtocolRuleSet;\n  }\n};\n\nexport type ProtocolType = {\n  schema?: string,\n  dataFormats?: string[],\n};\n\nexport type ProtocolTypes = {\n  [key: string]: ProtocolType;\n};\n\nexport enum ProtocolActor {\n  Anyone = 'anyone',\n  Author = 'author',\n  Recipient = 'recipient'\n}\n\nexport enum ProtocolAction {\n  Read = 'read',\n  Write = 'write'\n}\n\nexport type ProtocolActionRule = {\n  who: string,\n  of?: string,\n  can: string\n};\n\nexport type ProtocolRuleSet = {\n  $actions?: ProtocolActionRule[];\n  // JSON Schema verifies that properties other than `$actions` will actually have type ProtocolRuleSet\n  [key: string]: any;\n};\n\nexport type ProtocolsConfigureMessage = GenericMessage & {\n  descriptor: ProtocolsConfigureDescriptor;\n};\n\nexport type ProtocolsQueryFilter = {\n  protocol: string,\n};\n\nexport type ProtocolsQueryDescriptor = {\n  interface : DwnInterfaceName.Protocols,\n  method: DwnMethodName.Query;\n  dateCreated: string;\n  filter?: ProtocolsQueryFilter\n};\n\nexport type ProtocolsQueryMessage = GenericMessage & {\n  descriptor: ProtocolsQueryDescriptor;\n};\n\nexport type ProtocolsQueryReply = GenericMessageReply & {\n  entries?: QueryResultEntry[];\n};\n", "import type { MessageStore } from '../types/message-store.js';\nimport type { RecordsRead } from '../interfaces/records-read.js';\nimport type { Filter, TimestampedMessage } from '../types/message-types.js';\nimport type { ProtocolDefinition, ProtocolRuleSet, ProtocolsConfigureMessage, ProtocolType, ProtocolTypes } from '../types/protocols-types.js';\nimport type { RecordsReadMessage, RecordsWriteMessage } from '../types/records-types.js';\n\nimport { RecordsWrite } from '../interfaces/records-write.js';\nimport { DwnError, DwnErrorCode } from './dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName, Message } from './message.js';\nimport { ProtocolAction, ProtocolActor } from '../types/protocols-types.js';\n\nconst methodToAllowedActionMap: Record<string, ProtocolAction> = {\n  [DwnMethodName.Write] : ProtocolAction.Write,\n  [DwnMethodName.Read]  : ProtocolAction.Read,\n};\n\nexport class ProtocolAuthorization {\n\n  /**\n   * Performs protocol-based authorization against the given message.\n   * @throws {Error} if authorization fails.\n   */\n  public static async authorize(\n    tenant: string,\n    incomingMessage: RecordsRead | RecordsWrite,\n    author: string | undefined,\n    messageStore: MessageStore\n  ): Promise<void> {\n    // fetch ancestor message chain\n    const ancestorMessageChain: RecordsWriteMessage[] =\n      await ProtocolAuthorization.constructAncestorMessageChain(tenant, incomingMessage, messageStore);\n\n    // fetch the protocol definition\n    const protocolDefinition = await ProtocolAuthorization.fetchProtocolDefinition(\n      tenant,\n      incomingMessage,\n      ancestorMessageChain,\n      messageStore\n    );\n\n    // verify declared protocol type exists in protocol and that it conforms to type specification\n    ProtocolAuthorization.verifyType(\n      incomingMessage.message,\n      protocolDefinition.types\n    );\n\n    // validate `protocolPath`\n    ProtocolAuthorization.verifyProtocolPath(\n      incomingMessage,\n      ancestorMessageChain,\n    );\n\n    // get the rule set for the inbound message\n    const inboundMessageRuleSet = ProtocolAuthorization.getRuleSet(\n      incomingMessage.message,\n      protocolDefinition,\n      ancestorMessageChain\n    );\n\n    // verify method invoked against the allowed actions\n    ProtocolAuthorization.verifyAllowedActions(\n      tenant,\n      author,\n      incomingMessage.message.descriptor.method,\n      inboundMessageRuleSet,\n      ancestorMessageChain,\n    );\n\n    // verify allowed condition of incoming message\n    await ProtocolAuthorization.verifyActionCondition(tenant, incomingMessage, messageStore);\n  }\n\n  /**\n   * Fetches the protocol definition based on the protocol specified in the given message.\n   */\n  private static async fetchProtocolDefinition(\n    tenant: string,\n    incomingMessage: RecordsRead | RecordsWrite,\n    ancestorMessageChain: RecordsWriteMessage[],\n    messageStore: MessageStore\n  ): Promise<ProtocolDefinition> {\n    // get the protocol URI\n    let protocolUri: string;\n    if (incomingMessage.message.descriptor.method === DwnMethodName.Write) {\n      protocolUri = (incomingMessage as RecordsWrite).message.descriptor.protocol!;\n    } else {\n      protocolUri = ancestorMessageChain[ancestorMessageChain.length-1].descriptor.protocol!;\n    }\n\n    // fetch the corresponding protocol definition\n    const query: Filter = {\n      interface : DwnInterfaceName.Protocols,\n      method    : DwnMethodName.Configure,\n      protocol  : protocolUri\n    };\n    const protocols = await messageStore.query(tenant, query) as ProtocolsConfigureMessage[];\n\n    if (protocols.length === 0) {\n      throw new Error(`unable to find protocol definition for ${protocolUri}`);\n    }\n\n    const protocolMessage = protocols[0];\n    return protocolMessage.descriptor.definition;\n  }\n\n  /**\n   * Constructs a chain of ancestor messages\n   * @returns the ancestor chain of messages where the first element is the root of the chain; returns empty array if no parent is specified.\n   */\n  private static async constructAncestorMessageChain(\n    tenant: string,\n    incomingMessage: RecordsRead | RecordsWrite,\n    messageStore: MessageStore\n  )\n    : Promise<RecordsWriteMessage[]> {\n    const ancestorMessageChain: RecordsWriteMessage[] = [];\n\n    // Get first RecordsWrite in ancestor chain, or use incoming write message\n    let recordsWrite: RecordsWrite;\n    if (incomingMessage.message.descriptor.method === DwnMethodName.Write) {\n      recordsWrite = incomingMessage as RecordsWrite;\n    } else {\n      const recordsRead = incomingMessage as RecordsRead;\n      const query = {\n        interface : DwnInterfaceName.Records,\n        method    : DwnMethodName.Write,\n        recordId  : recordsRead.message.descriptor.recordId,\n      };\n      const existingMessages = await messageStore.query(tenant, query) as TimestampedMessage[];\n      const recordsWriteMessage = await RecordsWrite.getNewestMessage(existingMessages) as RecordsWriteMessage;\n      recordsWrite = await RecordsWrite.parse(recordsWriteMessage);\n      ancestorMessageChain.push(recordsWrite.message);\n    }\n\n    const protocol = recordsWrite.message.descriptor.protocol!;\n    const contextId = recordsWrite.message.contextId!;\n\n    // keep walking up the chain from the inbound message's parent, until there is no more parent\n    let currentParentId = recordsWrite.message.descriptor.parentId;\n    while (currentParentId !== undefined) {\n      // fetch parent\n      const query: Filter = {\n        interface : DwnInterfaceName.Records,\n        method    : DwnMethodName.Write,\n        protocol,\n        contextId,\n        recordId  : currentParentId\n      };\n      const parentMessages = await messageStore.query(tenant, query) as RecordsWriteMessage[];\n\n      if (parentMessages.length === 0) {\n        throw new Error(`no parent found with ID ${currentParentId}`);\n      }\n\n      const parent = parentMessages[0];\n      ancestorMessageChain.push(parent);\n\n      currentParentId = parent.descriptor.parentId;\n    }\n\n    return ancestorMessageChain.reverse(); // root ancestor first\n  }\n\n  /**\n   * Gets the rule set corresponding to the given message chain.\n   */\n  private static getRuleSet(\n    inboundMessage: RecordsReadMessage | RecordsWriteMessage,\n    protocolDefinition: ProtocolDefinition,\n    ancestorMessageChain: RecordsWriteMessage[],\n  ): ProtocolRuleSet {\n    let protocolPath: string;\n    if (inboundMessage.descriptor.method === DwnMethodName.Write) {\n      protocolPath = (inboundMessage as RecordsWriteMessage).descriptor.protocolPath!;\n    } else {\n      protocolPath = ancestorMessageChain[ancestorMessageChain.length-1].descriptor.protocolPath!;\n    }\n    const protocolPathArray = protocolPath.split('/');\n\n    // traverse rule sets using protocolPath\n    let currentRuleSet: ProtocolRuleSet = protocolDefinition.structure;\n    let i = 0;\n    while (i < protocolPathArray.length) {\n      const currentTypeName = protocolPathArray[i];\n      const nextRuleSet: ProtocolRuleSet | undefined = currentRuleSet[currentTypeName];\n\n      if (nextRuleSet === undefined) {\n        const partialProtocolPath = protocolPathArray.slice(0, i + 1).join('/');\n        throw new DwnError(DwnErrorCode.ProtocolAuthorizationMissingRuleSet,\n          `No rule set defined for protocolPath ${partialProtocolPath}`);\n      }\n\n      currentRuleSet = nextRuleSet;\n      i++;\n    }\n\n    return currentRuleSet;\n  }\n\n  /**\n   * Verifies the `protocolPath` declared in the given message (if it is a RecordsWrite) matches the path of actual ancestor chain.\n   * @throws {DwnError} if fails verification.\n   */\n  private static verifyProtocolPath(\n    inboundMessage: RecordsRead | RecordsWrite,\n    ancestorMessageChain: RecordsWriteMessage[],\n  ): void {\n    // skip verification if this is not a RecordsWrite\n    if (inboundMessage.message.descriptor.method !== DwnMethodName.Write) {\n      return;\n    }\n\n    const declaredProtocolPath = (inboundMessage as RecordsWrite).message.descriptor.protocolPath!;\n    const declaredTypeName = ProtocolAuthorization.getTypeName(declaredProtocolPath);\n\n    let ancestorProtocolPath: string = '';\n    for (const ancestor of ancestorMessageChain) {\n      const protocolPath = ancestor.descriptor.protocolPath!;\n      const ancestorTypeName = ProtocolAuthorization.getTypeName(protocolPath);\n      ancestorProtocolPath += `${ancestorTypeName}/`; // e.g. `foo/bar/`, notice the trailing slash\n    }\n\n    const actualProtocolPath = ancestorProtocolPath + declaredTypeName; // e.g. `foo/bar/baz`\n\n    if (declaredProtocolPath !== actualProtocolPath) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolAuthorizationIncorrectProtocolPath,\n        `Declared protocol path '${declaredProtocolPath}' is not the same as actual protocol path '${actualProtocolPath}'.`\n      );\n    }\n  }\n\n  /**\n   * Verifies the `dataFormat` and `schema` declared in the given message (if it is a RecordsWrite) matches dataFormat\n   * and schema of the type in the given protocol.\n   * @throws {DwnError} if fails verification.\n   */\n  private static verifyType(\n    inboundMessage: RecordsReadMessage | RecordsWriteMessage,\n    protocolTypes: ProtocolTypes,\n  ): void {\n    // skip verification if this is not a RecordsWrite\n    if (inboundMessage.descriptor.method !== DwnMethodName.Write) {\n      return;\n    }\n    const recordsWriteMessage = inboundMessage as RecordsWriteMessage;\n\n    const typeNames = Object.keys(protocolTypes);\n    const declaredProtocolPath = recordsWriteMessage.descriptor.protocolPath!;\n    const declaredTypeName = ProtocolAuthorization.getTypeName(declaredProtocolPath);\n    if (!typeNames.includes(declaredTypeName)) {\n      throw new DwnError(DwnErrorCode.ProtocolAuthorizationInvalidType,\n        `record with type ${declaredTypeName} not allowed in protocol`);\n    }\n\n    const protocolPath = recordsWriteMessage.descriptor.protocolPath!;\n    // existence of `protocolType` has already been verified\n    const typeName = ProtocolAuthorization.getTypeName(protocolPath);\n    const protocolType: ProtocolType = protocolTypes[typeName];\n\n    // no `schema` specified in protocol definition means that any schema is allowed\n    const { schema } = recordsWriteMessage.descriptor;\n    if (protocolType.schema !== undefined && protocolType.schema !== schema) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolAuthorizationInvalidSchema,\n        `type '${typeName}' must have schema '${protocolType.schema}', \\\n        instead has '${schema}'`\n      );\n    }\n\n    // no `dataFormats` specified in protocol definition means that all dataFormats are allowed\n    const { dataFormat } = recordsWriteMessage.descriptor;\n    if (protocolType.dataFormats !== undefined && !protocolType.dataFormats.includes(dataFormat)) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolAuthorizationIncorrectDataFormat,\n        `type '${typeName}' must have data format in (${protocolType.dataFormats}), \\\n        instead has '${dataFormat}'`\n      );\n    }\n  }\n\n  /**\n   * Verifies the actions specified in the given message matches the allowed actions in the rule set.\n   * @throws {Error} if action not allowed.\n   */\n  private static verifyAllowedActions(\n    tenant: string,\n    author: string | undefined,\n    incomingMessageMethod: DwnMethodName,\n    inboundMessageRuleSet: ProtocolRuleSet,\n    ancestorMessageChain: RecordsWriteMessage[],\n  ): void {\n    const inboundMessageAction = methodToAllowedActionMap[incomingMessageMethod];\n\n    const actionRules = inboundMessageRuleSet.$actions;\n    if (actionRules === undefined) {\n      // if no action rule is defined, owner of DWN can do everything\n      if (author === tenant) {\n        return;\n      } else {\n        throw new Error(`no action rule defined for ${incomingMessageMethod}, ${author} is unauthorized`);\n      }\n    }\n\n    for (const actionRule of actionRules) {\n      if (actionRule.can !== inboundMessageAction) {\n        continue;\n      }\n\n      switch (actionRule.who) {\n      case ProtocolActor.Anyone:\n        return;\n      case ProtocolActor.Author:\n        const messageForAuthorCheck = ProtocolAuthorization.getMessage(\n          ancestorMessageChain,\n          actionRule.of!,\n        );\n\n        if (messageForAuthorCheck !== undefined) {\n          const expectedAuthor = Message.getAuthor(messageForAuthorCheck);\n\n          if (author === expectedAuthor) {\n            return;\n          }\n        }\n        break;\n      case ProtocolActor.Recipient:\n        const messageForRecipientCheck = ProtocolAuthorization.getMessage(\n          ancestorMessageChain,\n            actionRule.of!,\n        );\n        if (messageForRecipientCheck !== undefined) {\n          const expectedAuthor = messageForRecipientCheck.descriptor.recipient;\n\n          if (author === expectedAuthor) {\n            return;\n          }\n        }\n        break;\n        // default:\n        //    JSON schema validations ensure that there are no other cases\n      }\n    }\n\n    // No action rules were satisfied, author is not authorized\n    throw new DwnError(DwnErrorCode.ProtocolAuthorizationActionNotAllowed, `inbound message action ${inboundMessageAction} not allowed for author`);\n  }\n\n  /**\n   * Verifies if the desired action can be taken.\n   * Currently the only check is: if the write is not the initial write, the author must be the same as the initial write\n   * @throws {Error} if fails verification\n   */\n  private static async verifyActionCondition(tenant: string, incomingMessage: RecordsRead | RecordsWrite, messageStore: MessageStore): Promise<void> {\n    if (incomingMessage.message.descriptor.method === DwnMethodName.Read) {\n      // Currently no conditions for reads\n    } else if (incomingMessage.message.descriptor.method === DwnMethodName.Write) {\n      const recordsWrite = incomingMessage as RecordsWrite;\n      const isInitialWrite = await recordsWrite.isInitialWrite();\n      if (!isInitialWrite) {\n        // fetch the initialWrite\n        const query = {\n          entryId: recordsWrite.message.recordId\n        };\n        const result = await messageStore.query(tenant, query) as RecordsWriteMessage[];\n\n        // check the author of the initial write matches the author of the incoming message\n        const initialWrite = result[0];\n        const authorOfInitialWrite = Message.getAuthor(initialWrite);\n        if (recordsWrite.author !== authorOfInitialWrite) {\n          throw new Error(`author of incoming message '${recordsWrite.author}' must match to author of initial write '${authorOfInitialWrite}'`);\n        }\n      }\n    }\n  }\n\n  /**\n   * Gets the message from the message chain based on the path specified.\n   * Returns undefined if matching message does not existing in ancestor chain\n   * @param protocolPath `/` delimited path starting from the root ancestor.\n   *                    Each path segment denotes the expected record type declared in protocol definition.\n   *                    e.g. `A/B/C` means that the root ancestor must be of type A, its child must be of type B, followed by a child of type C.\n   *                    NOTE: the path scheme use here may be temporary dependent on final protocol spec.\n   */\n  private static getMessage(\n    ancestorMessageChain: RecordsWriteMessage[],\n    protocolPath: string,\n  ): RecordsWriteMessage | undefined {\n    const expectedAncestors = protocolPath.split('/');\n\n    // consider moving this check to ProtocolsConfigure message ingestion\n    if (expectedAncestors.length > ancestorMessageChain.length) {\n      return undefined;\n    }\n\n    let i = 0;\n    while (true) {\n      const expectedDefinitionId = expectedAncestors[i];\n      const ancestorMessage = ancestorMessageChain[i];\n\n      const actualDefinitionId = ProtocolAuthorization.getTypeName(ancestorMessage.descriptor.protocolPath!);\n      if (actualDefinitionId !== expectedDefinitionId) {\n        throw new Error(`mismatching record schema: expecting ${expectedDefinitionId} but actual ${actualDefinitionId}`);\n      }\n\n      // we have found the message if we are looking at the last message specified by the path\n      if (i + 1 === expectedAncestors.length) {\n        return ancestorMessage;\n      }\n\n      i++;\n    }\n  }\n\n  private static getTypeName(protocolPath: string): string {\n    return protocolPath.split('/').slice(-1)[0];\n  }\n}", "import type { DerivedPrivateJwk } from './hd-key.js';\nimport type { PublicJwk } from '../types/jose-types.js';\nimport type { Readable } from 'readable-stream';\nimport type { RecordsWriteDescriptor, UnsignedRecordsWriteMessage } from '../types/records-types.js';\n\nimport { Encoder } from './encoder.js';\nimport { Encryption } from './encryption.js';\nimport { KeyDerivationScheme } from './hd-key.js';\nimport { Secp256k1 } from './secp256k1.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\n/**\n * Class containing useful utilities related to the Records interface.\n */\nexport class Records {\n  /**\n   * Decrypts the encrypted data in a message reply using the given ancestor private key.\n   * @param ancestorPrivateKey Any ancestor private key in the key derivation path.\n   */\n  public static async decrypt(\n    recordsWrite: UnsignedRecordsWriteMessage,\n    ancestorPrivateKey: DerivedPrivateJwk,\n    cipherStream: Readable\n  ): Promise<Readable> {\n    const { recordId, contextId, descriptor, encryption } = recordsWrite;\n\n    // look for an encrypted symmetric key that is encrypted by the public key corresponding to the given private key\n    const matchingEncryptedKey = encryption!.keyEncryption.find(key =>\n      key.rootKeyId === ancestorPrivateKey.rootKeyId &&\n      key.derivationScheme === ancestorPrivateKey.derivationScheme\n    );\n    if (matchingEncryptedKey === undefined) {\n      throw new DwnError(\n        DwnErrorCode.RecordsDecryptNoMatchingKeyEncryptedFound,\n        `Unable to find a symmetric key encrypted using key \\\n        with ID '${ancestorPrivateKey.rootKeyId}' and '${ancestorPrivateKey.derivationScheme}' derivation scheme.`\n      );\n    }\n\n    const fullDerivationPath = Records.constructKeyDerivationPath(matchingEncryptedKey.derivationScheme, recordId, contextId, descriptor);\n\n    // NOTE: right now only `ECIES-ES256K` algorithm is supported for asymmetric encryption,\n    // so we will assume that's the algorithm without additional switch/if statements\n    const leafPrivateKey = await Records.deriveLeafPrivateKey(ancestorPrivateKey, fullDerivationPath);\n    const encryptedKeyBytes = Encoder.base64UrlToBytes(matchingEncryptedKey.encryptedKey);\n    const ephemeralPublicKey = Secp256k1.publicJwkToBytes(matchingEncryptedKey.ephemeralPublicKey);\n    const keyEncryptionInitializationVector = Encoder.base64UrlToBytes(matchingEncryptedKey.initializationVector);\n    const messageAuthenticationCode = Encoder.base64UrlToBytes(matchingEncryptedKey.messageAuthenticationCode);\n    const dataEncryptionKey = await Encryption.eciesSecp256k1Decrypt({\n      ciphertext           : encryptedKeyBytes,\n      ephemeralPublicKey,\n      initializationVector : keyEncryptionInitializationVector,\n      messageAuthenticationCode,\n      privateKey           : leafPrivateKey\n    });\n\n    // NOTE: right now only `A256CTR` algorithm is supported for symmetric encryption,\n    // so we will assume that's the algorithm without additional switch/if statements\n    const dataEncryptionInitializationVector = Encoder.base64UrlToBytes(encryption!.initializationVector);\n    const plaintextStream = await Encryption.aes256CtrDecrypt(dataEncryptionKey, dataEncryptionInitializationVector, cipherStream);\n\n    return plaintextStream;\n  }\n\n  /**\n   * Constructs full key derivation path using the specified scheme.\n   */\n  public static constructKeyDerivationPath(\n    keyDerivationScheme: KeyDerivationScheme,\n    recordId: string,\n    contextId: string | undefined,\n    descriptor: RecordsWriteDescriptor\n  ): string[] {\n\n    let fullDerivationPath;\n    if (keyDerivationScheme === KeyDerivationScheme.DataFormats) {\n      fullDerivationPath = Records.constructKeyDerivationPathUsingDataFormatsScheme(recordId, descriptor);\n    } else if (keyDerivationScheme === KeyDerivationScheme.Protocols) {\n      fullDerivationPath = Records.constructKeyDerivationPathUsingProtocolsScheme(recordId, contextId, descriptor);\n    } else {\n      // `schemas` scheme\n      fullDerivationPath = Records.constructKeyDerivationPathUsingSchemasScheme(recordId, descriptor);\n    }\n\n    return fullDerivationPath;\n  }\n\n  /**\n   * Constructs the full key derivation path using `dataFormats` scheme.\n   */\n  private static constructKeyDerivationPathUsingDataFormatsScheme(\n    recordId: string,\n    descriptor: RecordsWriteDescriptor\n  ): string[] {\n    const fullDerivationPath = [\n      KeyDerivationScheme.DataFormats,\n      descriptor.dataFormat,\n      recordId\n    ];\n\n    return fullDerivationPath;\n  }\n\n  /**\n   * Constructs the full key derivation path using `protocols` scheme.\n   */\n  private static constructKeyDerivationPathUsingProtocolsScheme(\n    recordId: string,\n    contextId: string | undefined,\n    descriptor: RecordsWriteDescriptor\n  ): string[] {\n    // ensure `protocol` is defined\n    // NOTE: no need to check `protocolPath` and `contextId` because earlier code ensures that if `protocol` is defined, those are defined also\n    if (descriptor.protocol === undefined) {\n      throw new DwnError(\n        DwnErrorCode.RecordsProtocolsDerivationSchemeMissingProtocol,\n        'Unable to construct key derivation path using `protocols` scheme because `protocol` is missing.'\n      );\n    }\n\n    const protocolPathSegments = descriptor.protocolPath!.split('/');\n    const fullDerivationPath = [\n      KeyDerivationScheme.Protocols,\n      descriptor.protocol,\n      contextId!,\n      ...protocolPathSegments,\n      descriptor.dataFormat,\n      recordId\n    ];\n\n    return fullDerivationPath;\n  }\n\n  /**\n   * Constructs the full key derivation path using `schemas` scheme.\n   */\n  private static constructKeyDerivationPathUsingSchemasScheme(\n    recordId: string,\n    descriptor: RecordsWriteDescriptor\n  ): string[] {\n    if (descriptor.schema === undefined) {\n      throw new DwnError(\n        DwnErrorCode.RecordsSchemasDerivationSchemeMissingSchema,\n        'Unable to construct key derivation path using `schemas` scheme because `schema` is missing.'\n      );\n    }\n\n    const fullDerivationPath = [\n      KeyDerivationScheme.Schemas,\n      descriptor.schema,\n      descriptor.dataFormat,\n      recordId\n    ];\n\n    return fullDerivationPath;\n  }\n\n  /**\n   * Derives a descendant public key given an ancestor public key.\n   * NOTE: right now only `ECIES-ES256K` algorithm is supported for asymmetric encryption,\n   *       so we will assume that's the algorithm without additional switch/if statements\n   */\n  public static async deriveLeafPublicKey(rootPublicKey: PublicJwk, fullDescendantDerivationPath: string[]): Promise<Uint8Array> {\n    if (rootPublicKey.crv !== 'secp256k1') {\n      throw new DwnError(\n        DwnErrorCode.RecordsDeriveLeafPublicKeyUnSupportedCurve,\n        `Curve ${rootPublicKey.crv} is not supported.`\n      );\n    }\n\n    const ancestorPublicKeyBytes = Secp256k1.publicJwkToBytes(rootPublicKey);\n    const leafPublicKey = await Secp256k1.derivePublicKey(ancestorPublicKeyBytes, fullDescendantDerivationPath);\n\n    return leafPublicKey;\n  }\n\n  /**\n   * Derives a descendant private key given an ancestor private key.\n   * NOTE: right now only `ECIES-ES256K` algorithm is supported for asymmetric encryption,\n   *       so we will assume that's the algorithm without additional switch/if statements\n   */\n  public static async deriveLeafPrivateKey(ancestorPrivateKey: DerivedPrivateJwk, fullDescendantDerivationPath: string[]): Promise<Uint8Array> {\n    if (ancestorPrivateKey.derivedPrivateKey.crv !== 'secp256k1') {\n      throw new DwnError(\n        DwnErrorCode.RecordsDeriveLeafPrivateKeyUnSupportedCurve,\n        `Curve ${ancestorPrivateKey.derivedPrivateKey.crv} is not supported.`\n      );\n    }\n\n    const ancestorPrivateKeyDerivationPath = ancestorPrivateKey.derivationPath ?? [];\n\n    Records.validateAncestorKeyAndDescentKeyDerivationPathsMatch(ancestorPrivateKeyDerivationPath, fullDescendantDerivationPath);\n\n    const subDerivationPath = fullDescendantDerivationPath.slice(ancestorPrivateKeyDerivationPath.length);\n    const ancestorPrivateKeyBytes = Secp256k1.privateJwkToBytes(ancestorPrivateKey.derivedPrivateKey);\n    const leafPrivateKey = await Secp256k1.derivePrivateKey(ancestorPrivateKeyBytes, subDerivationPath);\n\n    return leafPrivateKey;\n  }\n\n  /**\n   * Validates that ancestor derivation path matches the descendant derivation path completely.\n   * @throws {DwnError} with `DwnErrorCode.RecordsInvalidAncestorKeyDerivationSegment` if fails validation.\n   */\n  public static validateAncestorKeyAndDescentKeyDerivationPathsMatch(\n    ancestorKeyDerivationPath: string[],\n    descendantKeyDerivationPath: string[]\n  ): void {\n    for (let i = 0; i < ancestorKeyDerivationPath.length; i++) {\n      const ancestorSegment = ancestorKeyDerivationPath[i];\n      const descendantSegment = descendantKeyDerivationPath[i];\n      if (ancestorSegment !== descendantSegment) {\n        throw new DwnError(\n          DwnErrorCode.RecordsInvalidAncestorKeyDerivationSegment,\n          `Ancestor key derivation segment '${ancestorSegment}' mismatches against the descendant key derivation segment '${descendantSegment}'.`);\n      }\n    }\n  }\n}\n", "import type { GenericMessage } from '../types/message-types.js';\nimport type { KeyDerivationScheme } from '../index.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { PublicJwk } from '../types/jose-types.js';\nimport type {\n  EncryptedKey,\n  EncryptionProperty,\n  RecordsWriteAttestationPayload,\n  RecordsWriteAuthorizationPayload,\n  RecordsWriteDescriptor,\n  RecordsWriteMessage,\n  UnsignedRecordsWriteMessage\n} from '../types/records-types.js';\nimport type { GeneralJws, SignatureInput } from '../types/jws-types.js';\n\nimport { Cid } from '../utils/cid.js';\nimport { Encoder } from '../utils/encoder.js';\nimport { Encryption } from '../utils/encryption.js';\nimport { EncryptionAlgorithm } from '../utils/encryption.js';\nimport { GeneralJwsSigner } from '../jose/jws/general/signer.js';\nimport { getCurrentTimeInHighPrecision } from '../utils/time.js';\nimport { Jws } from '../utils/jws.js';\nimport { Message } from '../core/message.js';\nimport { ProtocolAuthorization } from '../core/protocol-authorization.js';\nimport { Records } from '../utils/records.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { Secp256k1 } from '../utils/secp256k1.js';\nimport { authorize, validateAuthorizationIntegrity } from '../core/auth.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../core/message.js';\nimport { normalizeProtocolUrl, normalizeSchemaUrl, validateProtocolUrlNormalized, validateSchemaUrlNormalized } from '../utils/url.js';\n\nexport type RecordsWriteOptions = {\n  recipient?: string;\n  protocol?: string;\n  protocolPath?: string;\n  contextId?: string;\n  schema?: string;\n  recordId?: string;\n  parentId?: string;\n  data?: Uint8Array;\n  dataCid?: string;\n  dataSize?: number;\n  dateCreated?: string;\n  dateModified?: string;\n  published?: boolean;\n  datePublished?: string;\n  dataFormat: string;\n  authorizationSignatureInput: SignatureInput;\n  attestationSignatureInputs?: SignatureInput[];\n  encryptionInput?: EncryptionInput;\n};\n\n/**\n * Input that describes how data is encrypted as spec-ed in TP18 (https://github.com/TBD54566975/technical-proposals/pull/6).\n */\nexport type EncryptionInput = {\n  /**\n   * Algorithm used for encrypting the Data. Uses {EncryptionAlgorithm.Aes256Ctr} if not given.\n   */\n  algorithm?: EncryptionAlgorithm;\n\n  /**\n   * Initialization vector used for encrypting the data.\n   */\n  initializationVector: Uint8Array;\n\n  /**\n   * Symmetric key used to encrypt the data.\n   */\n  key: Uint8Array;\n\n  /**\n   * Array of input that specifies how the symmetric key is encrypted.\n   * Each entry in the array will result in a unique ciphertext of the symmetric key.\n   */\n  keyEncryptionInputs: KeyEncryptionInput[];\n};\n\n/**\n * Input that specifies how a symmetric key is encrypted.\n */\nexport type KeyEncryptionInput = {\n  /**\n   * Key derivation scheme to derive the descendant public key to encrypt the symmetric key.\n   */\n  derivationScheme: KeyDerivationScheme;\n\n  /**\n   * Fully qualified ID of root public key used derive the descendant public key to encrypt the symmetric key.\n   * (e.g. did:example:abc#encryption-key-id)\n   */\n  publicKeyId: string;\n\n  /**\n   * Root public key used derive the descendant public key to encrypt the symmetric key.\n   */\n  publicKey: PublicJwk;\n\n  /**\n   * Algorithm used for encrypting the symmetric key. Uses {EncryptionAlgorithm.EciesSecp256k1} if not given.\n   */\n  algorithm?: EncryptionAlgorithm;\n};\n\nexport type CreateFromOptions = {\n  unsignedRecordsWriteMessage: UnsignedRecordsWriteMessage,\n  data?: Uint8Array;\n  published?: boolean;\n  dateModified?: string;\n  datePublished?: string;\n  authorizationSignatureInput: SignatureInput;\n  attestationSignatureInputs?: SignatureInput[];\n  encryptionInput?: EncryptionInput;\n};\n\nexport class RecordsWrite extends Message<RecordsWriteMessage> {\n\n  readonly attesters: string[];\n\n  private constructor(message: RecordsWriteMessage) {\n    super(message);\n\n    this.attesters = RecordsWrite.getAttesters(message);\n\n    // consider converting isInitialWrite() & getEntryId() into properties for performance and convenience\n  }\n\n  public static async parse(message: RecordsWriteMessage): Promise<RecordsWrite> {\n    // asynchronous checks that are required by the constructor to initialize members properly\n    await validateAuthorizationIntegrity(message, { allowedProperties: new Set(['recordId', 'contextId', 'attestationCid', 'encryptionCid']) });\n    await RecordsWrite.validateAttestationIntegrity(message);\n\n    const recordsWrite = new RecordsWrite(message);\n\n    await recordsWrite.validateIntegrity(); // RecordsWrite specific data integrity check\n\n    return recordsWrite;\n  }\n\n  /**\n   * Creates a RecordsWrite message.\n   * @param options.recordId If `undefined`, will be auto-filled as a originating message as convenience for developer.\n   * @param options.data Data used to compute the `dataCid`, must be the encrypted data bytes if `options.encryptionInput` is given.\n   *                     Must specify `options.dataCid` if `undefined`.\n   * @param options.dataCid CID of the data that is already stored in the DWN. Must specify `options.data` if `undefined`.\n   * @param options.dataSize Size of data in number of bytes. Must be defined if `options.dataCid` is defined; must be `undefined` otherwise.\n   * @param options.dateCreated If `undefined`, it will be auto-filled with current time.\n   * @param options.dateModified If `undefined`, it will be auto-filled with current time.\n   */\n  public static async create(options: RecordsWriteOptions): Promise<RecordsWrite> {\n    if ((options.protocol === undefined && options.protocolPath !== undefined) ||\n        (options.protocol !== undefined && options.protocolPath === undefined)) {\n      throw new Error('`protocol` and `protocolPath` must both be defined or undefined at the same time');\n    }\n\n    if ((options.data === undefined && options.dataCid === undefined) ||\n        (options.data !== undefined && options.dataCid !== undefined)) {\n      throw new Error('one and only one parameter between `data` and `dataCid` is allowed');\n    }\n\n    if ((options.dataCid === undefined && options.dataSize !== undefined) ||\n        (options.dataCid !== undefined && options.dataSize === undefined)) {\n      throw new Error('`dataCid` and `dataSize` must both be defined or undefined at the same time');\n    }\n\n    const dataCid = options.dataCid ?? await Cid.computeDagPbCidFromBytes(options.data!);\n    const dataSize = options.dataSize ?? options.data!.length;\n\n    const currentTime = getCurrentTimeInHighPrecision();\n\n    const descriptor: RecordsWriteDescriptor = {\n      interface     : DwnInterfaceName.Records,\n      method        : DwnMethodName.Write,\n      protocol      : options.protocol !== undefined ? normalizeProtocolUrl(options.protocol) : undefined,\n      protocolPath  : options.protocolPath,\n      recipient     : options.recipient,\n      schema        : options.schema !== undefined ? normalizeSchemaUrl(options.schema) : undefined,\n      parentId      : options.parentId,\n      dataCid,\n      dataSize,\n      dateCreated   : options.dateCreated ?? currentTime,\n      dateModified  : options.dateModified ?? currentTime,\n      published     : options.published,\n      datePublished : options.datePublished,\n      dataFormat    : options.dataFormat\n    };\n\n    // generate `datePublished` if the message is to be published but `datePublished` is not given\n    if (options.published === true &&\n      options.datePublished === undefined) {\n      descriptor.datePublished = currentTime;\n    }\n\n    // delete all descriptor properties that are `undefined` else the code will encounter the following IPLD issue when attempting to generate CID:\n    // Error: `undefined` is not supported by the IPLD Data Model and cannot be encoded\n    removeUndefinedProperties(descriptor);\n\n    const author = Jws.extractDid(options.authorizationSignatureInput.protectedHeader.kid);\n\n    // `recordId` computation\n    const recordId = options.recordId ?? await RecordsWrite.getEntryId(author, descriptor);\n\n    // `contextId` computation\n    let contextId: string | undefined;\n    if (options.contextId !== undefined) {\n      contextId = options.contextId;\n    } else { // `contextId` is undefined\n      // we compute the contextId for the caller if `protocol` is specified (this is the case of the root message of a protocol context)\n      if (descriptor.protocol !== undefined) {\n        contextId = await RecordsWrite.getEntryId(author, descriptor);\n      }\n    }\n\n    // `attestation` generation\n    const descriptorCid = await Cid.computeCid(descriptor);\n    const attestation = await RecordsWrite.createAttestation(descriptorCid, options.attestationSignatureInputs);\n    const encryption = await RecordsWrite.createEncryptionProperty(recordId, contextId, descriptor, options.encryptionInput);\n\n    // `authorization` generation\n    const authorization = await RecordsWrite.createAuthorization(\n      recordId,\n      contextId,\n      descriptorCid,\n      attestation,\n      encryption,\n      options.authorizationSignatureInput\n    );\n\n    const message: RecordsWriteMessage = {\n      recordId,\n      descriptor,\n      authorization\n    };\n\n    if (contextId !== undefined) { message.contextId = contextId; } // assign `contextId` only if it is defined\n    if (attestation !== undefined) { message.attestation = attestation; } // assign `attestation` only if it is defined\n    if (encryption !== undefined) { message.encryption = encryption; } // assign `encryption` only if it is defined\n\n    Message.validateJsonSchema(message);\n\n    return new RecordsWrite(message);\n  }\n\n  /**\n   * Convenience method that creates a message by:\n   * 1. Copying over immutable properties from the given unsigned message\n   * 2. Copying over mutable properties that are not overwritten from the given unsigned message\n   * 3. Replace the mutable properties that are given new value\n   * @param options.unsignedRecordsWriteMessage Unsigned message that the new RecordsWrite will be based from.\n   * @param options.dateModified The new date the record is modified. If not given, current time will be used .\n   * @param options.data The new data or the record. If not given, data from given message will be used.\n   * @param options.published The new published state. If not given, then will be set to `true` if {options.dateModified} is given;\n   * else the state from given message will be used.\n   * @param options.publishedDate The new date the record is modified. If not given, then:\n   * - will not be set if the record will be unpublished as the result of this RecordsWrite; else\n   * - will be set to the same published date as the given message if it wss already published; else\n   * - will be set to current time (because this is a toggle from unpublished to published)\n   */\n  public static async createFrom(options: CreateFromOptions): Promise<RecordsWrite> {\n    const unsignedMessage = options.unsignedRecordsWriteMessage;\n    const currentTime = getCurrentTimeInHighPrecision();\n\n    // inherit published value from parent if neither published nor datePublished is specified\n    const published = options.published ?? (options.datePublished ? true : unsignedMessage.descriptor.published);\n    // use current time if published but no explicit time given\n    let datePublished: string | undefined = undefined;\n    // if given explicitly published dated\n    if (options.datePublished) {\n      datePublished = options.datePublished;\n    } else {\n      // if this RecordsWrite will publish the record\n      if (published) {\n        // the parent was already published, inherit the same published date\n        if (unsignedMessage.descriptor.published) {\n          datePublished = unsignedMessage.descriptor.datePublished;\n        } else {\n          // this is a toggle from unpublished to published, use current time\n          datePublished = currentTime;\n        }\n      }\n    }\n\n    const createOptions: RecordsWriteOptions = {\n      // immutable properties below, just inherit from the message given\n      recipient                   : unsignedMessage.descriptor.recipient,\n      recordId                    : unsignedMessage.recordId,\n      dateCreated                 : unsignedMessage.descriptor.dateCreated,\n      contextId                   : unsignedMessage.contextId,\n      protocol                    : unsignedMessage.descriptor.protocol,\n      protocolPath                : unsignedMessage.descriptor.protocolPath,\n      parentId                    : unsignedMessage.descriptor.parentId,\n      schema                      : unsignedMessage.descriptor.schema,\n      dataFormat                  : unsignedMessage.descriptor.dataFormat,\n      // mutable properties below\n      dateModified                : options.dateModified ?? currentTime,\n      published,\n      datePublished,\n      data                        : options.data,\n      dataCid                     : options.data ? undefined : unsignedMessage.descriptor.dataCid, // if data not given, use base message dataCid\n      dataSize                    : options.data ? undefined : unsignedMessage.descriptor.dataSize, // if data not given, use base message dataSize\n      // finally still need input for signing\n      authorizationSignatureInput : options.authorizationSignatureInput,\n      attestationSignatureInputs  : options.attestationSignatureInputs\n    };\n\n    const recordsWrite = await RecordsWrite.create(createOptions);\n    return recordsWrite;\n  }\n\n  public async authorize(tenant: string, messageStore: MessageStore): Promise<void> {\n    if (this.message.descriptor.protocol !== undefined) {\n      // NOTE: `author` definitely exists because of the earlier `authenticate()` call\n      await ProtocolAuthorization.authorize(tenant, this, this.author!, messageStore);\n    } else {\n      await authorize(tenant, this);\n    }\n  }\n\n  /**\n   * Validates the integrity of the RecordsWrite message assuming the message passed basic schema validation.\n   * There is opportunity to integrate better with `validateSchema(...)`\n   */\n  private async validateIntegrity(): Promise<void> {\n    // make sure the same `recordId` in message is the same as the `recordId` in `authorization`\n    if (this.message.recordId !== this.authorizationPayload.recordId) {\n      throw new Error(\n        `recordId in message ${this.message.recordId} does not match recordId in authorization: ${this.authorizationPayload.recordId}`\n      );\n    }\n\n    // if the new message is the initial write\n    const isInitialWrite = await this.isInitialWrite();\n    if (isInitialWrite) {\n      // `dateModified` and `dateCreated` equality check\n      const dateCreated = this.message.descriptor.dateCreated;\n      const dateModified = this.message.descriptor.dateModified;\n      if (dateModified !== dateCreated) {\n        throw new Error(`dateModified ${dateModified} must match dateCreated ${dateCreated} for the initial write`);\n      }\n\n      // if the message is also a protocol context root, the `contextId` must match the expected deterministic value\n      if (this.message.descriptor.protocol !== undefined &&\n        this.message.descriptor.parentId === undefined) {\n        const expectedContextId = await this.getEntryId();\n\n        if (this.message.contextId !== expectedContextId) {\n          throw new Error(`contextId in message: ${this.message.contextId} does not match deterministic contextId: ${expectedContextId}`);\n        }\n      }\n    }\n\n    // if `contextId` is given in message, make sure the same `contextId` is in the `authorization`\n    if (this.message.contextId !== this.authorizationPayload.contextId) {\n      throw new Error(\n        `contextId in message ${this.message.contextId} does not match contextId in authorization: ${this.authorizationPayload.contextId}`\n      );\n    }\n\n    // if `attestation` is given in message, make sure the correct `attestationCid` is in the `authorization`\n    if (this.authorizationPayload.attestationCid !== undefined) {\n      const expectedAttestationCid = await Cid.computeCid(this.message.attestation);\n      const actualAttestationCid = this.authorizationPayload.attestationCid;\n      if (actualAttestationCid !== expectedAttestationCid) {\n        throw new Error(\n          `CID ${expectedAttestationCid} of attestation property in message does not match attestationCid in authorization: ${actualAttestationCid}`\n        );\n      }\n    }\n\n    // if `encryption` is given in message, make sure the correct `encryptionCid` is in the `authorization`\n    if (this.authorizationPayload.encryptionCid !== undefined) {\n      const expectedEncryptionCid = await Cid.computeCid(this.message.encryption);\n      const actualEncryptionCid = this.authorizationPayload.encryptionCid;\n      if (actualEncryptionCid !== expectedEncryptionCid) {\n        throw new DwnError(\n          DwnErrorCode.RecordsWriteValidateIntegrityEncryptionCidMismatch,\n          `CID ${expectedEncryptionCid} of encryption property in message does not match encryptionCid in authorization: ${actualEncryptionCid}`\n        );\n      }\n    }\n\n    if (this.message.descriptor.protocol !== undefined) {\n      validateProtocolUrlNormalized(this.message.descriptor.protocol);\n    }\n    if (this.message.descriptor.schema !== undefined) {\n      validateSchemaUrlNormalized(this.message.descriptor.schema);\n    }\n  }\n\n  /**\n   * Validates the structural integrity of the `attestation` property.\n   * NOTE: signature is not verified.\n   */\n  private static async validateAttestationIntegrity(message: RecordsWriteMessage): Promise<void> {\n    if (message.attestation === undefined) {\n      return;\n    }\n\n    // TODO: multi-attesters to be unblocked by #205 - Revisit database interfaces (https://github.com/TBD54566975/dwn-sdk-js/issues/205)\n    if (message.attestation.signatures.length !== 1) {\n      throw new Error(`Currently implementation only supports 1 attester, but got ${message.attestation.signatures.length}`);\n    }\n\n    const payloadJson = Jws.decodePlainObjectPayload(message.attestation);\n    const { descriptorCid } = payloadJson;\n\n    // `descriptorCid` validation - ensure that the provided descriptorCid matches the CID of the actual message\n    const expectedDescriptorCid = await Cid.computeCid(message.descriptor);\n    if (descriptorCid !== expectedDescriptorCid) {\n      throw new Error(`descriptorCid ${descriptorCid} does not match expected descriptorCid ${expectedDescriptorCid}`);\n    }\n\n    // check to ensure that no other unexpected properties exist in payload.\n    const propertyCount = Object.keys(payloadJson).length;\n    if (propertyCount > 1) {\n      throw new Error(`Only 'descriptorCid' is allowed in attestation payload, but got ${propertyCount} properties.`);\n    }\n  };\n\n  /**\n   * Computes the deterministic Entry ID of this message.\n   */\n  public async getEntryId(): Promise<string> {\n    const entryId = await RecordsWrite.getEntryId(this.author, this.message.descriptor);\n    return entryId;\n  };\n\n  /**\n   * Computes the deterministic Entry ID of this message.\n   */\n  public static async getEntryId(author: string | undefined, descriptor: RecordsWriteDescriptor): Promise<string> {\n    // TODO: this paves the way to allow unsigned RecordsWrite as suggested in #206 (https://github.com/TBD54566975/dwn-sdk-js/issues/206)\n    if (author === undefined) {\n      throw new DwnError(DwnErrorCode.RecordsWriteGetEntryIdUndefinedAuthor, 'Property `author` is needed to compute entry ID.');\n    }\n\n    const entryIdInput = { ...descriptor };\n    (entryIdInput as any).author = author;\n\n    const cid = await Cid.computeCid(entryIdInput);\n    return cid;\n  };\n\n  /**\n   * Checks if the given message is the initial entry of a record.\n   */\n  public async isInitialWrite(): Promise<boolean> {\n    const entryId = await this.getEntryId();\n    return (entryId === this.message.recordId);\n  }\n\n  /**\n   * Checks if the given message is the initial entry of a record.\n   */\n  public static async isInitialWrite(message: GenericMessage): Promise<boolean> {\n    // can't be the initial write if the message is not a Records Write\n    if (message.descriptor.interface !== DwnInterfaceName.Records ||\n        message.descriptor.method !== DwnMethodName.Write) {\n      return false;\n    }\n\n    const recordsWriteMessage = message as RecordsWriteMessage;\n    const author = Message.getAuthor(message);\n    const entryId = await RecordsWrite.getEntryId(author, recordsWriteMessage.descriptor);\n    return (entryId === recordsWriteMessage.recordId);\n  }\n\n  /**\n   * Creates the `encryption` property if encryption input is given. Else `undefined` is returned.\n   */\n  private static async createEncryptionProperty(\n    recordId: string,\n    contextId: string | undefined,\n    descriptor: RecordsWriteDescriptor,\n    encryptionInput: EncryptionInput | undefined\n  ): Promise<EncryptionProperty | undefined> {\n    if (encryptionInput === undefined) {\n      return undefined;\n    }\n\n    // encrypt the data encryption key once per key derivation scheme\n    const keyEncryption: EncryptedKey[] = [];\n    for (const keyEncryptionInput of encryptionInput.keyEncryptionInputs) {\n\n      const fullDerivationPath = Records.constructKeyDerivationPath(keyEncryptionInput.derivationScheme, recordId, contextId, descriptor);\n\n      // NOTE: right now only `ECIES-ES256K` algorithm is supported for asymmetric encryption,\n      // so we will assume that's the algorithm without additional switch/if statements\n      const leafPublicKey = await Records.deriveLeafPublicKey(keyEncryptionInput.publicKey, fullDerivationPath);\n      const keyEncryptionOutput = await Encryption.eciesSecp256k1Encrypt(leafPublicKey, encryptionInput.key);\n\n      const encryptedKey = Encoder.bytesToBase64Url(keyEncryptionOutput.ciphertext);\n      const ephemeralPublicKey = await Secp256k1.publicKeyToJwk(keyEncryptionOutput.ephemeralPublicKey);\n      const keyEncryptionInitializationVector = Encoder.bytesToBase64Url(keyEncryptionOutput.initializationVector);\n      const messageAuthenticationCode = Encoder.bytesToBase64Url(keyEncryptionOutput.messageAuthenticationCode);\n      const encryptedKeyData: EncryptedKey = {\n        rootKeyId            : keyEncryptionInput.publicKeyId,\n        algorithm            : keyEncryptionInput.algorithm ?? EncryptionAlgorithm.EciesSecp256k1,\n        derivationScheme     : keyEncryptionInput.derivationScheme,\n        ephemeralPublicKey,\n        initializationVector : keyEncryptionInitializationVector,\n        messageAuthenticationCode,\n        encryptedKey\n      };\n\n      keyEncryption.push(encryptedKeyData);\n    }\n\n    const encryption: EncryptionProperty = {\n      algorithm            : encryptionInput.algorithm ?? EncryptionAlgorithm.Aes256Ctr,\n      initializationVector : Encoder.bytesToBase64Url(encryptionInput.initializationVector),\n      keyEncryption\n    };\n\n    return encryption;\n  }\n\n  /**\n   * Creates the `attestation` property of a RecordsWrite message if given signature inputs; returns `undefined` otherwise.\n   */\n  public static async createAttestation(descriptorCid: string, signatureInputs?: SignatureInput[]): Promise<GeneralJws | undefined> {\n    if (signatureInputs === undefined || signatureInputs.length === 0) {\n      return undefined;\n    }\n\n    const attestationPayload: RecordsWriteAttestationPayload = { descriptorCid };\n    const attestationPayloadBytes = Encoder.objectToBytes(attestationPayload);\n\n    const signer = await GeneralJwsSigner.create(attestationPayloadBytes, signatureInputs);\n    return signer.getJws();\n  }\n\n  /**\n   * Creates the `authorization` property of a RecordsWrite message.\n   */\n  public static async createAuthorization(\n    recordId: string,\n    contextId: string | undefined,\n    descriptorCid: string,\n    attestation: GeneralJws | undefined,\n    encryption: EncryptionProperty | undefined,\n    signatureInput: SignatureInput\n  ): Promise<GeneralJws> {\n    const authorizationPayload: RecordsWriteAuthorizationPayload = {\n      recordId,\n      descriptorCid\n    };\n\n    const attestationCid = attestation ? await Cid.computeCid(attestation) : undefined;\n    const encryptionCid = encryption ? await Cid.computeCid(encryption) : undefined;\n\n    if (contextId !== undefined) { authorizationPayload.contextId = contextId; } // assign `contextId` only if it is defined\n    if (attestationCid !== undefined) { authorizationPayload.attestationCid = attestationCid; } // assign `attestationCid` only if it is defined\n    if (encryptionCid !== undefined) { authorizationPayload.encryptionCid = encryptionCid; } // assign `encryptionCid` only if it is defined\n\n    const authorizationPayloadBytes = Encoder.objectToBytes(authorizationPayload);\n\n    const signer = await GeneralJwsSigner.create(authorizationPayloadBytes, [signatureInput]);\n    return signer.getJws();\n  }\n\n  /**\n   * Gets the initial write from the given list or record write.\n   */\n  public static async getInitialWrite(messages: GenericMessage[]): Promise<RecordsWriteMessage>{\n    for (const message of messages) {\n      if (await RecordsWrite.isInitialWrite(message)) {\n        return message as RecordsWriteMessage;\n      }\n    }\n\n    throw new Error(`initial write is not found`);\n  }\n\n  /**\n   * Verifies that immutable properties of the two given messages are identical.\n   * @throws {Error} if immutable properties between two RecordsWrite message\n   */\n  public static verifyEqualityOfImmutableProperties(existingWriteMessage: RecordsWriteMessage, newMessage: RecordsWriteMessage): boolean {\n    const mutableDescriptorProperties = ['dataCid', 'dataSize', 'datePublished', 'published', 'dateModified'];\n\n    // get distinct property names that exist in either the existing message given or new message\n    let descriptorPropertyNames: string[] = [];\n    descriptorPropertyNames.push(...Object.keys(existingWriteMessage.descriptor));\n    descriptorPropertyNames.push(...Object.keys(newMessage.descriptor));\n    descriptorPropertyNames = [...new Set(descriptorPropertyNames)]; // step to remove duplicates\n\n    // ensure all immutable properties are not modified\n    for (const descriptorPropertyName of descriptorPropertyNames) {\n      // if property is supposed to be immutable\n      if (mutableDescriptorProperties.indexOf(descriptorPropertyName) === -1) {\n        const valueInExistingWrite = (existingWriteMessage.descriptor as any)[descriptorPropertyName];\n        const valueInNewMessage = (newMessage.descriptor as any)[descriptorPropertyName];\n        if (valueInNewMessage !== valueInExistingWrite) {\n          throw new Error(`${descriptorPropertyName} is an immutable property: cannot change '${valueInExistingWrite}' to '${valueInNewMessage}'`);\n        }\n      }\n    }\n\n    return true;\n  }\n\n  /**\n   * Gets the DID of the author of the given message.\n   */\n  public static getAttesters(message: RecordsWriteMessage): string[] {\n    const attestationSignatures = message.attestation?.signatures ?? [];\n    const attesters = attestationSignatures.map((signature) => Jws.getSignerDid(signature));\n    return attesters;\n  }\n}\n", "import type { EventLog } from '../types/event-log.js';\nimport type { GenericMessageReply } from '../core/message-reply.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { DataStore, DidResolver, MessageStore } from '../index.js';\nimport type { RecordsDeleteMessage, RecordsWriteMessage } from '../types/records-types.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { RecordsWrite } from '../interfaces/records-write.js';\nimport { StorageController } from '../store/storage-controller.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName, Message } from '../core/message.js';\n\nexport type RecordsWriteHandlerOptions = {\n  skipDataStorage?: boolean; // used for DWN sync\n};\n\ntype HandlerArgs = { tenant: string, message: RecordsWriteMessage, options?: RecordsWriteHandlerOptions, dataStream?: _Readable.Readable};\n\nexport class RecordsWriteHandler implements MethodHandler {\n\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private dataStore: DataStore, private eventLog: EventLog) { }\n\n  public async handle({\n    tenant,\n    message,\n    options,\n    dataStream\n  }: HandlerArgs): Promise<GenericMessageReply> {\n    let recordsWrite: RecordsWrite;\n    try {\n      recordsWrite = await RecordsWrite.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    // authentication & authorization\n    try {\n      await authenticate(message.authorization, this.didResolver);\n      await recordsWrite.authorize(tenant, this.messageStore);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    // get existing messages matching the `recordId`\n    const query = {\n      interface : DwnInterfaceName.Records,\n      recordId  : message.recordId\n    };\n    const existingMessages = await this.messageStore.query(tenant, query) as (RecordsWriteMessage|RecordsDeleteMessage)[];\n\n    // if the incoming write is not the initial write, then it must not modify any immutable properties defined by the initial write\n    const newMessageIsInitialWrite = await recordsWrite.isInitialWrite();\n    if (!newMessageIsInitialWrite) {\n      try {\n        const initialWrite = await RecordsWrite.getInitialWrite(existingMessages);\n        RecordsWrite.verifyEqualityOfImmutableProperties(initialWrite, message);\n      } catch (e) {\n        return messageReplyFromError(e, 400);\n      }\n    }\n\n    const newestExistingMessage = await Message.getNewestMessage(existingMessages);\n\n    let incomingMessageIsNewest = false;\n    let newestMessage; // keep reference of newest message for pruning later\n    if (newestExistingMessage === undefined || await Message.isNewer(message, newestExistingMessage)) {\n      incomingMessageIsNewest = true;\n      newestMessage = message;\n    } else { // existing message is the same age or newer than the incoming message\n      newestMessage = newestExistingMessage;\n    }\n\n    if (!incomingMessageIsNewest) {\n      return {\n        status: { code: 409, detail: 'Conflict' }\n      };\n    }\n\n    const isLatestBaseState = true;\n    const indexes = await constructRecordsWriteIndexes(recordsWrite, isLatestBaseState);\n\n    try {\n      // try to store data, unless options explicitly say to skip storage\n      if (options === undefined || !options.skipDataStorage) {\n        await this.putData(tenant, message, dataStream, newestExistingMessage as (RecordsWriteMessage|RecordsDeleteMessage) | undefined);\n      }\n    } catch (error) {\n      const e = error as any;\n      if (e.code === DwnErrorCode.RecordsWriteMissingDataStream ||\n          e.code === DwnErrorCode.RecordsWriteMissingData ||\n          e.code === DwnErrorCode.RecordsWriteDataCidMismatch ||\n          e.code === DwnErrorCode.RecordsWriteDataSizeMismatch) {\n        return messageReplyFromError(error, 400);\n      }\n\n      // else throw\n      throw error;\n    }\n\n    await this.messageStore.put(tenant, message, indexes);\n    await this.eventLog.append(tenant, await Message.getCid(message));\n\n    const messageReply = {\n      status: { code: 202, detail: 'Accepted' }\n    };\n\n    // delete all existing messages that are not newest, except for the initial write\n    await StorageController.deleteAllOlderMessagesButKeepInitialWrite(\n      tenant, existingMessages, newestMessage, this.messageStore, this.dataStore, this.eventLog\n    );\n\n    return messageReply;\n  };\n\n  /**\n   * Puts the given data in storage unless tenant already has that data for the given recordId\n   *\n   * @throws {DwnError} with `DwnErrorCode.RecordsWriteMissingDataStream`\n   *                    if `dataStream` is absent AND the `dataCid` does not match the current data for the given recordId\n   * @throws {DwnError} with `DwnErrorCode.RecordsWriteMissingData`\n   *                    if `dataStream` is absent AND dataStore does not contain the given `dataCid`\n   * @throws {DwnError} with `DwnErrorCode.RecordsWriteDataCidMismatch`\n   *                    if the data stream resulted in a data CID that mismatches with `dataCid` in the given message\n   * @throws {DwnError} with `DwnErrorCode.RecordsWriteDataSizeMismatch`\n   *                    if `dataSize` in `descriptor` given mismatches the actual data size\n   */\n  public async putData(\n    tenant: string,\n    message: RecordsWriteMessage,\n    dataStream?: _Readable.Readable,\n    newestExistingMessage?: RecordsWriteMessage | RecordsDeleteMessage\n  ): Promise<void> {\n    let result: { dataCid: string, dataSize: number };\n    const messageCid = await Message.getCid(message);\n\n    if (dataStream === undefined) {\n      // dataStream must be included if message contains a new dataCid\n      if (newestExistingMessage?.descriptor.method === DwnMethodName.Delete ||\n          newestExistingMessage?.descriptor.dataCid !== message.descriptor.dataCid) {\n        throw new DwnError(\n          DwnErrorCode.RecordsWriteMissingDataStream,\n          'Data stream is not provided.'\n        );\n      }\n\n      const associateResult = await this.dataStore.associate(tenant, messageCid, message.descriptor.dataCid);\n      if (associateResult === undefined) {\n        throw new DwnError(DwnErrorCode.RecordsWriteMissingData, `Unable to associate dataCid ${message.descriptor.dataCid} ` +\n          `to messageCid ${messageCid} because dataStream was not provided and data was not found in dataStore`);\n      }\n\n      result = associateResult;\n    } else {\n      result = await this.dataStore.put(tenant, messageCid, message.descriptor.dataCid, dataStream);\n    }\n\n    // verify that given dataSize matches size of actual data\n    if (message.descriptor.dataSize !== result.dataSize) {\n      // there is an opportunity to improve here: handle the edge case of if the delete fails...\n      await this.dataStore.delete(tenant, messageCid, message.descriptor.dataCid);\n\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteDataSizeMismatch,\n        `actual data size ${result.dataSize} bytes does not match dataSize in descriptor: ${message.descriptor.dataSize}`\n      );\n    }\n\n    // verify that given dataCid matches CID of actual data\n    if (message.descriptor.dataCid !== result.dataCid) {\n      // there is an opportunity to improve here: handle the edge cae of if the delete fails...\n      await this.dataStore.delete(tenant, messageCid, message.descriptor.dataCid);\n\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteDataCidMismatch,\n        `actual data CID ${result.dataCid} does not match dataCid in descriptor: ${message.descriptor.dataCid}`\n      );\n    }\n  }\n}\n\nexport async function constructRecordsWriteIndexes(\n  recordsWrite: RecordsWrite,\n  isLatestBaseState: boolean\n): Promise<Record<string, string>> {\n  const message = recordsWrite.message;\n  const descriptor = { ...message.descriptor };\n  delete descriptor.published; // handle `published` specifically further down\n\n  const indexes: Record<string, any> = {\n    ...descriptor,\n    isLatestBaseState,\n    published : !!message.descriptor.published,\n    author    : recordsWrite.author,\n    recordId  : message.recordId,\n    entryId   : await RecordsWrite.getEntryId(recordsWrite.author, recordsWrite.message.descriptor)\n  };\n\n  // add additional indexes to optional values if given\n  // TODO: index multi-attesters to be unblocked by #205 - Revisit database interfaces (https://github.com/TBD54566975/dwn-sdk-js/issues/205)\n  if (recordsWrite.attesters.length > 0) { indexes.attester = recordsWrite.attesters[0]; }\n  if (message.contextId !== undefined) { indexes.contextId = message.contextId; }\n\n  return indexes;\n}\n", "import type { DataStore } from '../types/data-store.js';\nimport type { EventLog } from '../types/event-log.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { RecordsWriteMessage } from '../types/records-types.js';\nimport type { Filter, GenericMessage, TimestampedMessage } from '../types/message-types.js';\n\nimport { constructRecordsWriteIndexes } from '../handlers/records-write.js';\nimport { DataStream } from '../utils/data-stream.js';\nimport { DwnConstant } from '../core/dwn-constant.js';\nimport { Encoder } from '../utils/encoder.js';\nimport { RecordsWrite } from '../interfaces/records-write.js';\nimport { DwnMethodName, Message } from '../core/message.js';\n\n/**\n * A class that provides an abstraction for the usage of MessageStore, DataStore, and EventLog.\n */\nexport class StorageController {\n  public static async query(\n    messageStore: MessageStore,\n    dataStore: DataStore,\n    tenant: string,\n    filter: Filter\n  ): Promise<RecordsWriteMessageWithOptionalEncodedData[]> {\n\n    const messages: RecordsWriteMessageWithOptionalEncodedData[] = (await messageStore.query(tenant, filter)) as RecordsWriteMessage[];\n\n    // for every message, only include the data as `encodedData` if the data size is equal or smaller than the size threshold\n    for (const message of messages) {\n      const dataCid = message.descriptor.dataCid;\n      const dataSize = message.descriptor.dataSize;\n      if (dataCid !== undefined && dataSize! <= DwnConstant.maxDataSizeAllowedToBeEncoded) {\n        const messageCid = await Message.getCid(message);\n        const result = await dataStore.get(tenant, messageCid, dataCid);\n\n        if (result) {\n          const dataBytes = await DataStream.toBytes(result.dataStream);\n          message.encodedData = Encoder.bytesToBase64Url(dataBytes);\n        }\n      }\n    }\n\n    return messages;\n  }\n\n  /**\n   * Deletes a message.\n   */\n  private static async delete(\n    messageStore: MessageStore,\n    dataStore: DataStore,\n    tenant: string,\n    message: GenericMessage\n  ): Promise<void> {\n    const messageCid = await Message.getCid(message);\n\n    if (message.descriptor.method === DwnMethodName.Write) {\n      const recordsWriteMessage = message as RecordsWriteMessage;\n      await dataStore.delete(tenant, messageCid, recordsWriteMessage.descriptor.dataCid);\n    }\n\n    await messageStore.delete(tenant, messageCid);\n  }\n\n\n  /**\n   * Deletes all messages in `existingMessages` that are older than the `comparedToMessage` in the given tenant,\n   * but keep the initial write write for future processing by ensuring its `isLatestBaseState` index is \"false\".\n   */\n  public static async deleteAllOlderMessagesButKeepInitialWrite(\n    tenant: string,\n    existingMessages: TimestampedMessage[],\n    comparedToMessage: TimestampedMessage,\n    messageStore: MessageStore,\n    dataStore: DataStore,\n    eventLog: EventLog\n  ): Promise<void> {\n    const deletedMessageCids: string[] = [];\n\n    // NOTE: under normal operation, there should only be at most two existing records per `recordId` (initial + a potential subsequent write/delete),\n    // but the DWN may crash before `delete()` is called below, so we use a loop as a tactic to clean up lingering data as needed\n    for (const message of existingMessages) {\n      const messageIsOld = await Message.isOlder(message, comparedToMessage);\n      if (messageIsOld) {\n      // the easiest implementation here is delete each old messages\n      // and re-create it with the right index (isLatestBaseState = 'false') if the message is the initial write,\n      // but there is room for better/more efficient implementation here\n        await StorageController.delete(messageStore, dataStore, tenant, message);\n\n        // if the existing message is the initial write\n        // we actually need to keep it BUT, need to ensure the message is no longer marked as the latest state\n        const existingMessageIsInitialWrite = await RecordsWrite.isInitialWrite(message);\n        if (existingMessageIsInitialWrite) {\n          const existingRecordsWrite = await RecordsWrite.parse(message as RecordsWriteMessage);\n          const isLatestBaseState = false;\n          const indexes = await constructRecordsWriteIndexes(existingRecordsWrite, isLatestBaseState);\n          await messageStore.put(tenant, message, indexes);\n        } else {\n          const messageCid = await Message.getCid(message);\n          deletedMessageCids.push(messageCid);\n        }\n      }\n\n      await eventLog.deleteEventsByCid(tenant, deletedMessageCids);\n    }\n  }\n}\n\nexport type RecordsWriteMessageWithOptionalEncodedData = RecordsWriteMessage & { encodedData?: string };\n", "import type { EventLog } from '../types/event-log.js';\nimport type { GenericMessageReply } from '../core/message-reply.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { RecordsDeleteMessage } from '../types/records-types.js';\nimport type { TimestampedMessage } from '../types/message-types.js';\nimport type { DataStore, DidResolver, MessageStore } from '../index.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { RecordsDelete } from '../interfaces/records-delete.js';\nimport { RecordsWrite } from '../interfaces/records-write.js';\nimport { StorageController } from '../store/storage-controller.js';\nimport { DwnInterfaceName, DwnMethodName, Message } from '../core/message.js';\n\nexport class RecordsDeleteHandler implements MethodHandler {\n\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private dataStore: DataStore, private eventLog: EventLog) { }\n\n  public async handle({\n    tenant,\n    message\n  }: { tenant: string, message: RecordsDeleteMessage}): Promise<GenericMessageReply> {\n\n    let recordsDelete: RecordsDelete;\n    try {\n      recordsDelete = await RecordsDelete.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    // authentication & authorization\n    try {\n      await authenticate(message.authorization, this.didResolver);\n      await recordsDelete.authorize(tenant);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    // get existing records matching the `recordId`\n    const query = {\n      interface : DwnInterfaceName.Records,\n      recordId  : message.descriptor.recordId\n    };\n    const existingMessages = await this.messageStore.query(tenant, query) as TimestampedMessage[];\n\n    // find which message is the newest, and if the incoming message is the newest\n    const newestExistingMessage = await RecordsWrite.getNewestMessage(existingMessages);\n    let incomingMessageIsNewest = false;\n    let newestMessage;\n    // if incoming message is newest\n    if (newestExistingMessage === undefined || await RecordsWrite.isNewer(message, newestExistingMessage)) {\n      incomingMessageIsNewest = true;\n      newestMessage = message;\n    } else { // existing message is the same age or newer than the incoming message\n      newestMessage = newestExistingMessage;\n    }\n\n    if (!incomingMessageIsNewest) {\n      return {\n        status: { code: 409, detail: 'Conflict' }\n      };\n    }\n\n    // return Not Found if record does not exist or is already deleted\n    if (newestExistingMessage === undefined || newestExistingMessage.descriptor.method === DwnMethodName.Delete) {\n      return {\n        status: { code: 404, detail: 'Not Found' }\n      };\n    }\n\n    const indexes = await constructIndexes(tenant, recordsDelete);\n    await this.messageStore.put(tenant, message, indexes);\n\n    const messageCid = await Message.getCid(message);\n    await this.eventLog.append(tenant, messageCid);\n\n    // delete all existing messages that are not newest, except for the initial write\n    await StorageController.deleteAllOlderMessagesButKeepInitialWrite(\n      tenant, existingMessages, newestMessage, this.messageStore, this.dataStore, this.eventLog\n    );\n\n    const messageReply = {\n      status: { code: 202, detail: 'Accepted' }\n    };\n    return messageReply;\n  };\n}\n\nexport async function constructIndexes(tenant: string, recordsDelete: RecordsDelete): Promise<Record<string, string>> {\n  const message = recordsDelete.message;\n  const descriptor = { ...message.descriptor };\n\n  // NOTE: the \"trick\" not may not be apparent on how a query is able to omit deleted records:\n  // we intentionally not add index for `isLatestBaseState` at all, this means that upon a successful delete,\n  // no messages with the record ID will match any query because queries by design filter by `isLatestBaseState = true`,\n  // `isLatestBaseState` for the initial delete would have been toggled to `false`\n  const indexes: Record<string, any> = {\n    // isLatestBaseState : \"true\", // intentionally showing that this index is omitted\n    author: recordsDelete.author,\n    ...descriptor\n  };\n\n  return indexes;\n}\n", "import type { MethodHandler } from '..//types/method-handler.js';\nimport type { RecordsWriteMessageWithOptionalEncodedData } from '../store/storage-controller.js';\nimport type { DataStore, DidResolver, MessageStore } from '../index.js';\nimport type { RecordsQueryMessage, RecordsQueryReply, RecordsQueryReplyEntry, RecordsWriteMessage } from '../types/records-types.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { lexicographicalCompare } from '../utils/string.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { StorageController } from '../store/storage-controller.js';\n\nimport { DateSort, RecordsQuery } from '../interfaces/records-query.js';\nimport { DwnInterfaceName, DwnMethodName } from '../core/message.js';\n\nexport class RecordsQueryHandler implements MethodHandler {\n\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private dataStore: DataStore) { }\n\n  public async handle({\n    tenant,\n    message\n  }: {tenant: string, message: RecordsQueryMessage}): Promise<RecordsQueryReply> {\n    let recordsQuery: RecordsQuery;\n    try {\n      recordsQuery = await RecordsQuery.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    // authentication\n    try {\n      if (recordsQuery.author !== undefined) {\n        await authenticate(message.authorization!, this.didResolver);\n      }\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    let records: RecordsWriteMessageWithOptionalEncodedData[];\n    if (recordsQuery.author === tenant) {\n      records = await this.fetchRecordsAsOwner(tenant, recordsQuery);\n    } else if (recordsQuery.author === undefined) {\n      // this is an anonymous query, query only published records\n      records = await this.fetchPublishedRecords(tenant, recordsQuery);\n    } else {\n      records = await this.fetchRecordsAsNonOwner(tenant, recordsQuery);\n    }\n\n    // sort if `dataSort` is specified\n    if (recordsQuery.message.descriptor.dateSort) {\n      records = await sortRecords(records, recordsQuery.message.descriptor.dateSort);\n    }\n\n    // strip away `authorization` property for each record before responding\n    const entries: RecordsQueryReplyEntry[] = [];\n    for (const record of records) {\n      const { authorization: _, ...objectWithRemainingProperties } = record; // a trick to stripping away `authorization`\n      entries.push(objectWithRemainingProperties);\n    }\n\n    return {\n      status: { code: 200, detail: 'OK' },\n      entries\n    };\n  }\n\n  /**\n   * Fetches the records as the owner of the DWN with no additional filtering.\n   */\n  private async fetchRecordsAsOwner(tenant: string, recordsQuery: RecordsQuery): Promise<RecordsWriteMessageWithOptionalEncodedData[]> {\n    // fetch all published records matching the query\n    const filter = {\n      ...RecordsQuery.convertFilter(recordsQuery.message.descriptor.filter),\n      interface         : DwnInterfaceName.Records,\n      method            : DwnMethodName.Write,\n      isLatestBaseState : true\n    };\n    const records = await StorageController.query(this.messageStore, this.dataStore, tenant, filter);\n    return records;\n  }\n\n  /**\n   * Fetches the records as a non-owner, return only:\n   * 1. published records; and\n   * 2. unpublished records intended for the query author (where `recipient` is the query author)\n   */\n  private async fetchRecordsAsNonOwner(tenant: string, recordsQuery: RecordsQuery)\n    : Promise<RecordsWriteMessageWithOptionalEncodedData[]> {\n    const publishedRecords = await this.fetchPublishedRecords(tenant, recordsQuery);\n    const unpublishedRecordsByAuthor = await this.fetchUnpublishedRecordsByAuthor(tenant, recordsQuery);\n\n    // the `RecordsQuery` author in addition is allowed to get private records that were meant for them\n    let unpublishedRecordsForQueryAuthor: RecordsWriteMessageWithOptionalEncodedData[] = [];\n    const recipientFilter = recordsQuery.message.descriptor.filter.recipient;\n    if (recipientFilter === undefined || recipientFilter === recordsQuery.author) {\n      unpublishedRecordsForQueryAuthor = await this.fetchUnpublishedRecordsForQueryAuthor(tenant, recordsQuery);\n    }\n\n    const records = [...publishedRecords, ...unpublishedRecordsByAuthor, ...unpublishedRecordsForQueryAuthor];\n\n    // go through the records and remove duplicates\n    // this can happen between `unpublishedRecordsByAuthor` and `unpublishedRecordsForQueryAuthor` when `author` = `recipient`\n    const deduplicatedRecords = new Map<string, RecordsWriteMessageWithOptionalEncodedData>();\n    for (const record of records) {\n      if (!deduplicatedRecords.has(record.recordId)) {\n        deduplicatedRecords.set(record.recordId, record);\n      }\n    }\n\n    return Array.from(deduplicatedRecords.values());\n  }\n\n  /**\n   * Fetches only published records.\n   */\n  private async fetchPublishedRecords(tenant: string, recordsQuery: RecordsQuery): Promise<RecordsWriteMessageWithOptionalEncodedData[]> {\n    // fetch all published records matching the query\n    const filter = {\n      ...RecordsQuery.convertFilter(recordsQuery.message.descriptor.filter),\n      interface         : DwnInterfaceName.Records,\n      method            : DwnMethodName.Write,\n      published         : true,\n      isLatestBaseState : true\n    };\n    const publishedRecords = await StorageController.query(this.messageStore, this.dataStore, tenant, filter);\n    return publishedRecords;\n  }\n\n  /**\n   * Fetches unpublished records that are intended for the query author (where `recipient` is the author).\n   */\n  private async fetchUnpublishedRecordsForQueryAuthor(tenant: string, recordsQuery: RecordsQuery)\n    : Promise<RecordsWriteMessageWithOptionalEncodedData[]> {\n\n    // include records where recipient is query author\n    const filter = {\n      ...RecordsQuery.convertFilter(recordsQuery.message.descriptor.filter),\n      interface         : DwnInterfaceName.Records,\n      method            : DwnMethodName.Write,\n      recipient         : recordsQuery.author!,\n      isLatestBaseState : true,\n      published         : false\n    };\n    const unpublishedRecordsForQueryAuthor = await StorageController.query(this.messageStore, this.dataStore, tenant, filter);\n\n    return unpublishedRecordsForQueryAuthor;\n  }\n\n  /**\n   * Fetches only unpublished records where the author is the same as the query author.\n   */\n  private async fetchUnpublishedRecordsByAuthor(tenant: string, recordsQuery: RecordsQuery)\n    : Promise<RecordsWriteMessageWithOptionalEncodedData[]> {\n\n    // include records where author is the same as the query author\n    const filter = {\n      ...RecordsQuery.convertFilter(recordsQuery.message.descriptor.filter),\n      author            : recordsQuery.author!,\n      interface         : DwnInterfaceName.Records,\n      method            : DwnMethodName.Write,\n      isLatestBaseState : true,\n      published         : false\n    };\n    const unpublishedRecordsForQueryAuthor = await StorageController.query(this.messageStore, this.dataStore, tenant, filter);\n    return unpublishedRecordsForQueryAuthor;\n  }\n}\n\n/**\n * Sorts the given records. There are 4 options for dateSort:\n * 1. createdAscending - Sort in ascending order based on when the message was created\n * 2. createdDescending - Sort in descending order based on when the message was created\n * 3. publishedAscending - If the message is published, sort in asc based on publish date\n * 4. publishedDescending - If the message is published, sort in desc based on publish date\n *\n * If sorting is based on date published, records that are not published are filtered out.\n * @param messages - Messages to be sorted if dateSort is present\n * @param dateSort - Sorting scheme\n * @returns Sorted Messages\n */\nasync function sortRecords(\n  messages: RecordsWriteMessage[],\n  dateSort: DateSort\n): Promise<RecordsWriteMessage[]> {\n  switch (dateSort) {\n  case DateSort.CreatedAscending:\n    return messages.sort((a, b) => lexicographicalCompare(a.descriptor.dateCreated, b.descriptor.dateCreated));\n  case DateSort.CreatedDescending:\n    return messages.sort((a, b) => lexicographicalCompare(b.descriptor.dateCreated, a.descriptor.dateCreated));\n  case DateSort.PublishedAscending:\n    return messages\n      .filter(m => m.descriptor.published)\n      .sort((a, b) => lexicographicalCompare(a.descriptor.datePublished!, b.descriptor.datePublished!));\n  case DateSort.PublishedDescending:\n    return messages\n      .filter(m => m.descriptor.published)\n      .sort((a, b) => lexicographicalCompare(b.descriptor.datePublished!, a.descriptor.datePublished!));\n  }\n}\n", "import type { GenericMessage } from '../types/message-types.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { RecordsWrite } from './records-write.js';\nimport type { SignatureInput } from '../types/jws-types.js';\nimport type { RecordsReadDescriptor, RecordsReadMessage } from '../types/records-types.js';\n\nimport { getCurrentTimeInHighPrecision } from '../utils/time.js';\nimport { Message } from '../core/message.js';\nimport { ProtocolAuthorization } from '../core/protocol-authorization.js';\nimport { validateAuthorizationIntegrity } from '../core/auth.js';\nimport { DwnInterfaceName, DwnMethodName } from '../core/message.js';\n\nexport type RecordsReadOptions = {\n  recordId: string;\n  date?: string;\n  authorizationSignatureInput?: SignatureInput;\n};\n\nexport class RecordsRead extends Message<RecordsReadMessage> {\n\n  public static async parse(message: RecordsReadMessage): Promise<RecordsRead> {\n    if (message.authorization !== undefined) {\n      await validateAuthorizationIntegrity(message as GenericMessage);\n    }\n\n    const recordsRead = new RecordsRead(message);\n    return recordsRead;\n  }\n\n  /**\n   * Creates a RecordsRead message.\n   * @param options.recordId If `undefined`, will be auto-filled as a originating message as convenience for developer.\n   * @param options.date If `undefined`, it will be auto-filled with current time.\n   */\n  public static async create(options: RecordsReadOptions): Promise<RecordsRead> {\n    const { recordId, authorizationSignatureInput } = options;\n    const currentTime = getCurrentTimeInHighPrecision();\n\n    const descriptor: RecordsReadDescriptor = {\n      interface : DwnInterfaceName.Records,\n      method    : DwnMethodName.Read,\n      recordId,\n      date      : options.date ?? currentTime\n    };\n\n    // only generate the `authorization` property if signature input is given\n    const authorization = authorizationSignatureInput ? await Message.signAsAuthorization(descriptor, authorizationSignatureInput) : undefined;\n    const message: RecordsReadMessage = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n\n    return new RecordsRead(message);\n  }\n\n  public async authorize(tenant: string, newestRecordsWrite: RecordsWrite, messageStore: MessageStore): Promise<void> {\n    const { descriptor } = newestRecordsWrite.message;\n    // if author is the same as the target tenant, we can directly grant access\n    if (this.author === tenant) {\n      return;\n    } else if (descriptor.published === true) {\n      // authentication is not required for published data\n      return;\n    } else if (this.author !== undefined && this.author === descriptor.recipient) {\n      // The recipient of a message may always read it\n      return;\n    } else if (descriptor.protocol !== undefined) {\n      await ProtocolAuthorization.authorize(tenant, this, this.author, messageStore);\n    } else {\n      throw new Error('message failed authorization');\n    }\n  }\n}\n", "import type { MethodHandler } from '../types/method-handler.js';\nimport type { TimestampedMessage } from '../types/message-types.js';\nimport type { DataStore, DidResolver, MessageStore } from '../index.js';\nimport type { RecordsReadMessage, RecordsReadReply, RecordsWriteMessage } from '../types/records-types.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { Message } from '../core/message.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { RecordsRead } from '../interfaces/records-read.js';\nimport { RecordsWrite } from '../interfaces/records-write.js';\nimport { DwnInterfaceName, DwnMethodName } from '../core/message.js';\n\nexport class RecordsReadHandler implements MethodHandler {\n\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private dataStore: DataStore) { }\n\n  public async handle({\n    tenant,\n    message\n  }: { tenant: string, message: RecordsReadMessage }): Promise<RecordsReadReply> {\n\n    let recordsRead: RecordsRead;\n    try {\n      recordsRead = await RecordsRead.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    // authentication\n    try {\n      if (recordsRead.author !== undefined) {\n        await authenticate(message.authorization!, this.didResolver);\n      }\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    // get existing messages matching `recordId` so we can perform authorization\n    const query = {\n      interface : DwnInterfaceName.Records,\n      recordId  : message.descriptor.recordId\n    };\n    const existingMessages = await this.messageStore.query(tenant, query) as TimestampedMessage[];\n\n    const newestExistingMessage = await RecordsWrite.getNewestMessage(existingMessages);\n\n    // if no record found or it has been deleted\n    if (newestExistingMessage === undefined || newestExistingMessage.descriptor.method === DwnMethodName.Delete) {\n      return {\n        status: { code: 404, detail: 'Not Found' }\n      };\n    }\n\n    const newestRecordsWrite = newestExistingMessage as RecordsWriteMessage;\n    try {\n      await recordsRead.authorize(tenant, await RecordsWrite.parse(newestRecordsWrite), this.messageStore);\n    } catch (error) {\n      return messageReplyFromError(error, 401);\n    }\n\n    const messageCid = await Message.getCid(newestRecordsWrite);\n    const result = await this.dataStore.get(tenant, messageCid, newestRecordsWrite.descriptor.dataCid);\n\n    if (result?.dataStream === undefined) {\n      return {\n        status: { code: 404, detail: 'Not Found' }\n      };\n    }\n\n    const { authorization: _, ...recordsWriteWithoutAuthorization } = newestRecordsWrite; // a trick to stripping away `authorization`\n    const messageReply: RecordsReadReply ={\n      status : { code: 200, detail: 'OK' },\n      record : {\n        ...recordsWriteWithoutAuthorization,\n        data: result.dataStream\n      }\n    };\n    return messageReply;\n  };\n}\n", "import type { DataStore } from './types/data-store.js';\nimport type { EventLog } from './types/event-log.js';\nimport type { GenericMessage } from './types/message-types.js';\nimport type { MessageStore } from './types/message-store.js';\nimport type { MethodHandler } from './types/method-handler.js';\nimport type { Readable } from 'readable-stream';\nimport type { RecordsWriteHandlerOptions } from './handlers/records-write.js';\nimport type { TenantGate } from './core/tenant-gate.js';\nimport type { GenericMessageReply, UnionMessageReply } from './core/message-reply.js';\nimport type { MessagesGetMessage, MessagesGetReply } from './types/messages-types.js';\nimport type { RecordsQueryMessage, RecordsQueryReply, RecordsReadMessage, RecordsReadReply, RecordsWriteMessage } from './types/records-types.js';\n\nimport { AllowAllTenantGate } from './core/tenant-gate.js';\nimport { DataStoreLevel } from './store/data-store-level.js';\nimport { DidResolver } from './did/did-resolver.js';\nimport { EventLogLevel } from './event-log/event-log-level.js';\nimport { EventsGetHandler } from './handlers/events-get.js';\nimport { messageReplyFromError } from './core/message-reply.js';\nimport { MessagesGetHandler } from './handlers/messages-get.js';\nimport { MessageStoreLevel } from './store/message-store-level.js';\nimport { PermissionsGrantHandler } from './handlers/permissions-grant.js';\nimport { PermissionsRequestHandler } from './handlers/permissions-request.js';\nimport { ProtocolsConfigureHandler } from './handlers/protocols-configure.js';\nimport { ProtocolsQueryHandler } from './handlers/protocols-query.js';\nimport { RecordsDeleteHandler } from './handlers/records-delete.js';\nimport { RecordsQueryHandler } from './handlers/records-query.js';\nimport { RecordsReadHandler } from './handlers/records-read.js';\nimport { RecordsWriteHandler } from './handlers/records-write.js';\nimport { DwnInterfaceName, DwnMethodName, Message } from './core/message.js';\n\nexport class Dwn {\n  private methodHandlers: { [key:string]: MethodHandler };\n  private didResolver: DidResolver;\n  private messageStore: MessageStore;\n  private dataStore: DataStore;\n  private eventLog: EventLog;\n  private tenantGate: TenantGate;\n\n  private constructor(config: DwnConfig) {\n    this.didResolver = config.didResolver!;\n    this.messageStore = config.messageStore!;\n    this.dataStore = config.dataStore!;\n    this.eventLog = config.eventLog!;\n    this.tenantGate = config.tenantGate!;\n\n    this.methodHandlers = {\n      [DwnInterfaceName.Events + DwnMethodName.Get]        : new EventsGetHandler(this.didResolver, this.eventLog),\n      [DwnInterfaceName.Messages + DwnMethodName.Get]      : new MessagesGetHandler(this.didResolver, this.messageStore, this.dataStore),\n      [DwnInterfaceName.Permissions + DwnMethodName.Grant] : new PermissionsGrantHandler(\n        this.didResolver, this.messageStore, this.eventLog),\n      [DwnInterfaceName.Permissions + DwnMethodName.Request]: new PermissionsRequestHandler(\n        this.didResolver, this.messageStore, this.eventLog),\n      [DwnInterfaceName.Protocols + DwnMethodName.Configure]: new ProtocolsConfigureHandler(\n        this.didResolver, this.messageStore, this.dataStore, this.eventLog),\n      [DwnInterfaceName.Protocols + DwnMethodName.Query] : new ProtocolsQueryHandler(this.didResolver, this.messageStore, this.dataStore),\n      [DwnInterfaceName.Records + DwnMethodName.Delete]  : new RecordsDeleteHandler(\n        this.didResolver, this.messageStore, this.dataStore, this.eventLog),\n      [DwnInterfaceName.Records + DwnMethodName.Query] : new RecordsQueryHandler(this.didResolver, this.messageStore, this.dataStore),\n      [DwnInterfaceName.Records + DwnMethodName.Read]  : new RecordsReadHandler(this.didResolver, this.messageStore, this.dataStore),\n      [DwnInterfaceName.Records + DwnMethodName.Write] : new RecordsWriteHandler(this.didResolver, this.messageStore, this.dataStore, this.eventLog),\n    };\n  }\n\n  /**\n   * Creates an instance of the DWN.\n   */\n  public static async create(config?: DwnConfig): Promise<Dwn> {\n    config ??= { };\n    config.didResolver ??= new DidResolver();\n    config.tenantGate ??= new AllowAllTenantGate();\n    config.messageStore ??= new MessageStoreLevel();\n    config.dataStore ??= new DataStoreLevel();\n    config.eventLog ??= new EventLogLevel();\n\n    const dwn = new Dwn(config);\n    await dwn.open();\n\n    return dwn;\n  }\n\n  private async open(): Promise<void> {\n    await this.messageStore.open();\n    await this.dataStore.open();\n    await this.eventLog.open();\n  }\n\n  public async close(): Promise<void> {\n    this.messageStore.close();\n    this.dataStore.close();\n    this.eventLog.close();\n  }\n\n  /**\n   * Processes the given DWN message and returns with a reply.\n   * @param tenant The tenant DID to route the given message to.\n   */\n  public async processMessage(tenant: string, rawMessage: any, dataStream?: Readable): Promise<UnionMessageReply> {\n    const errorMessageReply = await this.validateTenant(tenant) ?? await this.validateMessageIntegrity(rawMessage);\n    if (errorMessageReply !== undefined) {\n      return errorMessageReply;\n    }\n\n    const handlerKey = rawMessage.descriptor.interface + rawMessage.descriptor.method;\n    const methodHandlerReply = await this.methodHandlers[handlerKey].handle({\n      tenant,\n      message: rawMessage as GenericMessage,\n      dataStream\n    });\n\n    return methodHandlerReply;\n  }\n\n  /**\n   * Handles a `RecordsQuery` message.\n   */\n  public async handleRecordsQuery(tenant: string, message: RecordsQueryMessage): Promise<RecordsQueryReply> {\n    const errorMessageReply =\n      await this.validateTenant(tenant) ??\n      await this.validateMessageIntegrity(message, DwnInterfaceName.Records, DwnMethodName.Query);\n    if (errorMessageReply !== undefined) {\n      return errorMessageReply;\n    }\n\n    const handler = new RecordsQueryHandler(this.didResolver, this.messageStore, this.dataStore);\n    return handler.handle({ tenant, message });\n  }\n\n  /**\n   * Handles a `RecordsRead` message.\n   */\n  public async handleRecordsRead(tenant: string, message: RecordsReadMessage): Promise<RecordsReadReply> {\n    const errorMessageReply =\n      await this.validateTenant(tenant) ??\n      await this.validateMessageIntegrity(message, DwnInterfaceName.Records, DwnMethodName.Read);\n    if (errorMessageReply !== undefined) {\n      return errorMessageReply;\n    }\n\n    const handler = new RecordsReadHandler(this.didResolver, this.messageStore, this.dataStore);\n    return handler.handle({ tenant, message });\n  }\n\n  /**\n   * Handles a `MessagesGet` message.\n   */\n  public async handleMessagesGet(tenant: string, message: MessagesGetMessage): Promise<MessagesGetReply> {\n    const errorMessageReply =\n      await this.validateTenant(tenant) ??\n      await this.validateMessageIntegrity(message, DwnInterfaceName.Messages, DwnMethodName.Get);\n    if (errorMessageReply !== undefined) {\n      return errorMessageReply;\n    }\n\n    const handler = new MessagesGetHandler(this.didResolver, this.messageStore, this.dataStore);\n    return handler.handle({ tenant, message });\n  }\n\n  /**\n   * Privileged method for writing a pruned initial `RecordsWrite` to a DWN without needing to supply associated data.\n   */\n  public async synchronizePrunedInitialRecordsWrite(tenant: string, message: RecordsWriteMessage): Promise<GenericMessageReply> {\n    const errorMessageReply =\n      await this.validateTenant(tenant) ??\n      await this.validateMessageIntegrity(message, DwnInterfaceName.Records, DwnMethodName.Write);\n    if (errorMessageReply !== undefined) {\n      return errorMessageReply;\n    }\n\n    const options: RecordsWriteHandlerOptions = {\n      skipDataStorage: true,\n    };\n\n    const handler = new RecordsWriteHandler(this.didResolver, this.messageStore, this.dataStore, this.eventLog);\n    const methodHandlerReply = await handler.handle({ tenant, message, options });\n    return methodHandlerReply;\n  }\n\n  /**\n   * Checks tenant gate to see if tenant is allowed.\n   * @param tenant The tenant DID to route the given message to.\n   * @returns GenericMessageReply if the message has an integrity error, otherwise undefined.\n   */\n  public async validateTenant(tenant: string): Promise<GenericMessageReply | undefined> {\n    const isTenant = await this.tenantGate.isTenant(tenant);\n    if (!isTenant) {\n      return {\n        status: { code: 401, detail: `${tenant} is not a tenant` }\n      };\n    }\n  }\n\n  /**\n   * Validates structure of DWN message\n   * @param tenant The tenant DID to route the given message to.\n   * @param dwnMessageInterface The interface of DWN message.\n   * @param dwnMessageMethod The interface of DWN message.\n\n   * @returns GenericMessageReply if the message has an integrity error, otherwise undefined.\n   */\n  public async validateMessageIntegrity(\n    rawMessage: any,\n    expectedInterface?: DwnInterfaceName,\n    expectedMethod?: DwnMethodName,\n  ): Promise<GenericMessageReply | undefined> {\n    // Verify interface and method\n    const dwnInterface = rawMessage?.descriptor?.interface;\n    const dwnMethod = rawMessage?.descriptor?.method;\n    if (dwnInterface === undefined || dwnMethod === undefined) {\n      return {\n        status: { code: 400, detail: `Both interface and method must be present, interface: ${dwnInterface}, method: ${dwnMethod}` }\n      };\n    }\n\n    if (expectedInterface !== undefined && expectedInterface !== dwnInterface) {\n      return {\n        status: { code: 400, detail: `Expected interface ${expectedInterface}, received ${dwnInterface}` }\n      };\n    }\n    if (expectedMethod !== undefined && expectedMethod !== dwnMethod) {\n      return {\n        status: { code: 400, detail: `Expected method ${expectedInterface}${expectedMethod}, received ${dwnInterface}${dwnMethod}` }\n      };\n    }\n\n    // validate message structure\n    try {\n      // consider to push this down to individual handlers\n      Message.validateJsonSchema(rawMessage);\n    } catch (error) {\n      return messageReplyFromError(error, 400);\n    }\n  }\n};\n\nexport type DwnConfig = {\n  didResolver?: DidResolver,\n  messageStore?: MessageStore;\n  dataStore?: DataStore;\n  tenantGate?: TenantGate;\n  eventLog?: EventLog\n};\n", "export { DID } from './did.js';\nexport { anchor, generateKeyPair, resolve, sign, verify } from './utils.js';", "import { IonDid, IonRequest, LocalSigner } from '@decentralized-identity/ion-sdk';\nimport { generateKeyPair } from './utils.js';\n\nexport class DID {\n  #ops;\n  #opQueue = Promise.resolve();\n  #longForm;\n  #longFormPromise;\n  #generateKeyPair;\n\n  constructor(options = { }) {\n    this.#ops = options.ops || [ ];\n    this.#generateKeyPair = options.generateKeyPair || generateKeyPair;\n    if (!this.#ops.length) {\n      this.#ops.push(this.generateOperation('create', options.content || { }, false));\n    }\n  }\n\n  async generateOperation(type, content, commit = true) {\n    return this.#addToOpQueue(() => this.#generateOperation(type, content, commit));\n  }\n\n  async #addToOpQueue(callback = () => Promise.resolve()) {\n    const opQueue = this.#opQueue;\n    this.#opQueue = new Promise((resolve, reject) => {\n      opQueue.finally(() => callback().then(resolve, reject));\n    });\n    return this.#opQueue;\n  }\n\n  async #generateOperation(type, content, commit) {\n    let lastOp = this.#ops[this.#ops.length - 1];\n    if (lastOp && lastOp.operation === 'deactivate') {\n      throw 'Cannot perform further operations on a deactivated DID';\n    }\n    let op = {\n      operation: type,\n      content\n    };\n    if (type !== 'create') {\n      op.previous = this.#ops.reduce((last, op) => {\n        return op.operation === type || (op.operation === 'recover' && (type === 'deactivate' || type === 'update')) ? op : last;\n      }, this.#ops[0]);\n    }\n    if (type === 'create' || type === 'recover') {\n      op.recovery = await this.#generateKeyPair();\n    }\n    if (type !== 'deactivate') {\n      op.update = await this.#generateKeyPair();\n    }\n    if (commit) {\n      this.#ops.push(op);\n    }\n\n    return op;\n  }\n\n  async generateRequest(payload = 0, options = { }) {\n    let op;\n    if (typeof payload === 'number') {\n      await this.#addToOpQueue();\n      op = await this.getOperation(payload);\n    } else {\n      op = payload;\n    }\n\n    switch (op.operation) {\n      case 'update':\n        return IonRequest.createUpdateRequest({\n          didSuffix: await this.getSuffix(),\n          signer: options.signer || LocalSigner.create(op.previous.update.privateJwk),\n          updatePublicKey: op.previous.update.publicJwk,\n          nextUpdatePublicKey: op.update.publicJwk,\n          servicesToAdd: op.content?.addServices,\n          idsOfServicesToRemove: op.content?.removeServices,\n          publicKeysToAdd: op.content?.addPublicKeys,\n          idsOfPublicKeysToRemove: op.content?.removePublicKeys\n        });\n\n      case 'recover':\n        return IonRequest.createRecoverRequest({\n          didSuffix: await this.getSuffix(),\n          signer: options.signer || LocalSigner.create(op.previous.recovery.privateJwk),\n          recoveryPublicKey: op.previous.recovery.publicJwk,\n          nextRecoveryPublicKey: op.recovery.publicJwk,\n          nextUpdatePublicKey: op.update.publicJwk,\n          document: op.content\n        });\n\n      case 'deactivate':\n        return IonRequest.createDeactivateRequest({\n          didSuffix: await this.getSuffix(),\n          recoveryPublicKey: op.previous.recovery.publicJwk,\n          signer: options.signer || LocalSigner.create(op.previous.recovery.privateJwk)\n        });\n\n      case 'create':\n      default:\n        return IonRequest.createCreateRequest({\n          recoveryKey: op.recovery.publicJwk,\n          updateKey: op.update.publicJwk,\n          document: op.content\n        });\n    }\n  }\n\n  async getAllOperations() {\n    return Promise.all(this.#ops);\n  }\n\n  async getOperation(index) {\n    return this.#ops[index];\n  }\n\n  async getState() {\n    const [ shortForm, longForm, ops ] = await Promise.all([\n      this.getURI('short'),\n      this.getURI(),\n      this.getAllOperations()\n    ]);\n    return { shortForm, longForm, ops };\n  }\n\n  /**\n   * returns the suffix portion of the DID string for the DID URI the class instance represents\n   * @example\n   * <caption>example DID URI: `did:ion:EiCZws6U61LV3YmvxmOIlt4Ap5RSJdIkb_lJXhuUPqQYBg`</caption>\n   *\n   * // returns: EiCZws6U61LV3YmvxmOIlt4Ap5RSJdIkb_lJXhuUPqQYBg\n   * did.getSuffix()\n   * @returns {string} suffix\n   */\n  async getSuffix() {\n    const uri = await this.getURI('short');\n    return uri.split(':').pop();\n  }\n\n  /**\n   * returns either the long or short form URI for the DID based on the form provided\n   * @param {'long' | 'short'} form - There are two forms of ION DID URI, the Long-Form URI, which can\n   * be used instantly without anchoring an ION DID, and the Short-Form URI, which is only\n   * resolvable after a DID has been published to the ION network.\n   * @returns {Promise<string>}\n   */\n  async getURI(form = 'long') {\n    if (this.#longFormPromise) {\n      await this.#longFormPromise;\n    }\n\n    if (!this.#longForm) {\n      this.#longFormPromise = this.#addToOpQueue(async () => {\n        const create = await this.getOperation(0);\n        return IonDid.createLongFormDid({\n          recoveryKey: create.recovery.publicJwk,\n          updateKey: create.update.publicJwk,\n          document: create.content\n        });\n      });\n      this.#longForm = await this.#longFormPromise;\n      this.#longFormPromise = undefined;\n    }\n\n    return !form || form === 'long' ? this.#longForm : this.#longForm.split(':').slice(0, -1).join(':');\n  }\n}", "// NOTE: Aliases to classes and interfaces are used for external consumption.\n\n// SDK exports.\nimport ISigner from './interfaces/ISigner.js';\nimport IonDid from './IonDid.js';\nimport IonDocumentModel from './models/IonDocumentModel.js';\nimport IonKey from './IonKey.js';\nimport IonNetwork from './enums/IonNetwork.js';\nimport IonPublicKeyModel from './models/IonPublicKeyModel.js';\nimport IonPublicKeyPurpose from './enums/IonPublicKeyPurpose.js';\nimport IonRequest from './IonRequest.js';\nimport IonSdkConfig from './IonSdkConfig.js';\nimport IonServiceModel from './models/IonServiceModel.js';\nimport JwkEd25519 from './models/JwkEd25519.js';\nimport JwkEs256k from './models/JwkEs256k.js';\nimport LocalSigner from './LocalSigner.js';\n\nexport {\n  ISigner,\n  IonDid,\n  IonDocumentModel,\n  IonKey,\n  IonNetwork,\n  IonPublicKeyModel,\n  IonPublicKeyPurpose,\n  IonRequest,\n  IonSdkConfig,\n  IonServiceModel,\n  JwkEd25519,\n  JwkEs256k,\n  LocalSigner\n};\n", "import ErrorCode from './ErrorCode.js';\nimport IonError from './IonError.js';\nimport { base64url } from 'multiformats/bases/base64';\n\n/**\n * Class that encodes binary blobs into strings.\n * Note that the encode/decode methods may change underlying encoding scheme.\n */\nexport default class Encoder {\n  /**\n   * Encodes given bytes into a Base64URL string.\n   */\n  public static encode (content: Uint8Array): string {\n    const encodedContent = base64url.baseEncode(content);\n    return encodedContent;\n  }\n\n  /**\n   * Decodes the given Base64URL string into bytes.\n   */\n  public static decodeAsBytes (encodedContent: string, inputContextForErrorLogging: string): Uint8Array {\n    if (!Encoder.isBase64UrlString(encodedContent)) {\n      throw new IonError(ErrorCode.EncodedStringIncorrectEncoding, `Given ${inputContextForErrorLogging} must be base64url string.`);\n    }\n\n    return base64url.baseDecode(encodedContent);\n  }\n\n  /**\n   * Decodes the given Base64URL string into the original string.\n   */\n  public static decodeAsString (encodedContent: string, inputContextForErrorLogging: string): string {\n    const rawBytes = Encoder.decodeAsBytes(encodedContent, inputContextForErrorLogging);\n\n    return Encoder.bytesToString(rawBytes);\n  }\n\n  /**\n   * Tests if the given string is a Base64URL string.\n   */\n  public static isBase64UrlString (input: string): boolean {\n    // NOTE:\n    // /<expression>/ denotes regex.\n    // ^ denotes beginning of string.\n    // $ denotes end of string.\n    // + denotes one or more characters.\n    const isBase64UrlString = /^[A-Za-z0-9_-]+$/.test(input);\n    return isBase64UrlString;\n  }\n\n  /**\n   * Converts input string to bytes.\n   */\n  public static stringToBytes (input: string): Uint8Array {\n    const bytes = new TextEncoder().encode(input);\n    return bytes;\n  }\n\n  /**\n   * Converts bytes to string.\n   */\n  public static bytesToString (input: Uint8Array): string {\n    const output = new TextDecoder().decode(input);\n    return output;\n  }\n}\n", "/**\n * ION SDK error codes.\n */\nexport default {\n  DeltaExceedsMaximumSize: 'DeltaExceedsMaximumSize',\n  DidDocumentPublicKeyIdDuplicated: 'DidDocumentPublicKeyIdDuplicated',\n  DidDocumentPublicKeyMissingOrIncorrectType: 'DidDocumentPublicKeyMissingOrIncorrectType',\n  DidDocumentServiceIdDuplicated: 'DidDocumentServiceIdDuplicated',\n  DidSuffixIncorrectLength: 'DidSuffixIncorrectLength',\n  EncodedStringIncorrectEncoding: 'EncodedStringIncorrectEncoding',\n  IdNotUsingBase64UrlCharacterSet: 'IdNotUsingBase64UrlCharacterSet',\n  IdTooLong: 'IdTooLong',\n  JwkEs256kMissingOrInvalidCrv: 'JwkEs256kMissingOrInvalidCrv',\n  JwkEs256kMissingOrInvalidKty: 'JwkEs256kMissingOrInvalidKty',\n  JwkEs256kHasIncorrectLengthOfX: 'JwkEs256kHasIncorrectLengthOfX',\n  JwkEs256kHasIncorrectLengthOfY: 'JwkEs256kHasIncorrectLengthOfY',\n  JwkEs256kHasIncorrectLengthOfD: 'JwkEs256kHasIncorrectLengthOfD',\n  MultihashStringNotAMultihash: 'MultihashStringNotAMultihash',\n  MultihashUnsupportedHashAlgorithm: 'MultihashUnsupportedHashAlgorithm',\n  PublicKeyJwkEs256kHasUnexpectedProperty: 'PublicKeyJwkEs256kHasUnexpectedProperty',\n  PublicKeyPurposeDuplicated: 'PublicKeyPurposeDuplicated',\n  ServiceEndpointCannotBeAnArray: 'ServiceEndpointCannotBeAnArray',\n  ServiceEndpointStringNotValidUri: 'ServiceEndpointStringNotValidUri',\n  ServiceTypeTooLong: 'ServiceTypeTooLong'\n};\n", "/**\n * A class that represents an ION error.\n */\nexport default class IonError extends Error {\n  constructor (public code: string, message: string) {\n    super(`${code}: ${message}`);\n\n    // NOTE: Extending 'Error' breaks prototype chain since TypeScript 2.1.\n    // The following line restores prototype chain.\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n", "// @ts-check\n\nimport { 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", "import basex from '../../vendor/base-x.js'\nimport { coerce } from '../bytes.js'\n// Linter can't see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\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 *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.BaseEncoder}\n */\nclass Encoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   */\n  constructor (name, prefix, baseEncode) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n  }\n\n  /**\n   * @param {Uint8Array} bytes\n   * @returns {API.Multibase<Prefix>}\n   */\n  encode (bytes) {\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 * @template {string} Prefix\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 *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.UnibaseDecoder<Prefix>}\n * @implements {API.BaseDecoder}\n */\nclass Decoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseDecode) {\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    /** @private */\n    this.prefixCodePoint = /** @type {number} */ (prefix.codePointAt(0))\n    this.baseDecode = baseDecode\n  }\n\n  /**\n   * @param {string} text\n   */\n  decode (text) {\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  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n}\n\n/**\n * @template {string} Prefix\n * @typedef {Record<Prefix, API.UnibaseDecoder<Prefix>>} Decoders\n */\n\n/**\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.CombobaseDecoder<Prefix>}\n */\nclass ComposedDecoder {\n  /**\n   * @param {Decoders<Prefix>} decoders\n   */\n  constructor (decoders) {\n    this.decoders = decoders\n  }\n\n  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n\n  /**\n   * @param {string} input\n   * @returns {Uint8Array}\n   */\n  decode (input) {\n    const prefix = /** @type {Prefix} */ (input[0])\n    const decoder = this.decoders[prefix]\n    if (decoder) {\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\n/**\n * @template {string} L\n * @template {string} R\n * @param {API.UnibaseDecoder<L>|API.CombobaseDecoder<L>} left\n * @param {API.UnibaseDecoder<R>|API.CombobaseDecoder<R>} right\n * @returns {ComposedDecoder<L|R>}\n */\nexport const or = (left, right) => new ComposedDecoder(/** @type {Decoders<L|R>} */({\n  ...(left.decoders || { [/** @type API.UnibaseDecoder<L> */(left).prefix]: left }),\n  ...(right.decoders || { [/** @type API.UnibaseDecoder<R> */(right).prefix]: right })\n}))\n\n/**\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseCodec<Prefix>}\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.BaseCodec}\n * @implements {API.BaseEncoder}\n * @implements {API.BaseDecoder}\n */\nexport class Codec {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseEncode, baseDecode) {\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  /**\n   * @param {Uint8Array} input\n   */\n  encode (input) {\n    return this.encoder.encode(input)\n  }\n\n  /**\n   * @param {string} input\n   */\n  decode (input) {\n    return this.decoder.decode(input)\n  }\n}\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {(bytes:Uint8Array) => string} options.encode\n * @param {(input:string) => Uint8Array} options.decode\n * @returns {Codec<Base, Prefix>}\n */\nexport const from = ({ name, prefix, encode, decode }) =>\n  new Codec(name, prefix, encode, decode)\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @returns {Codec<Base, Prefix>}\n */\nexport const baseX = ({ prefix, name, alphabet }) => {\n  const { encode, decode } = basex(alphabet, name)\n  return from({\n    prefix,\n    name,\n    encode,\n    /**\n     * @param {string} text\n     */\n    decode: text => coerce(decode(text))\n  })\n}\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @param {string} name\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar, name) => {\n  // Build the character lookup table:\n  /** @type {Record<string, number>} */\n  const codes = {}\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))) {\n    throw new SyntaxError('Unexpected end of data')\n  }\n\n  return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\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) {\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) {\n      out += '='\n    }\n  }\n\n  return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @param {number} options.bitsPerChar\n */\nexport const rfc4648 = ({ name, prefix, bitsPerChar, alphabet }) => {\n  return from({\n    prefix,\n    name,\n    encode (input) {\n      return encode(input, alphabet, bitsPerChar)\n    },\n    decode (input) {\n      return decode(input, alphabet, bitsPerChar, name)\n    }\n  })\n}\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.\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  function encode (source) {\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  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  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", "const empty = new Uint8Array(0)\n\n/**\n * @param {Uint8Array} d\n */\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n\n/**\n * @param {string} hex\n */\nconst fromHex = hex => {\n  const hexes = hex.match(/../g)\n  return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\n/**\n * @param {Uint8Array} aa\n * @param {Uint8Array} bb\n */\nconst equals = (aa, bb) => {\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\n/**\n * @param {ArrayBufferView|ArrayBuffer|Uint8Array} o\n * @returns {Uint8Array}\n */\nconst coerce = o => {\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\n/**\n * @param {any} o\n * @returns {o is ArrayBuffer|ArrayBufferView}\n */\nconst isBinary = o =>\n  o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nconst fromString = str => (new TextEncoder()).encode(str)\n\n/**\n * @param {Uint8Array} b\n * @returns {string}\n */\nconst toString = b => (new TextDecoder()).decode(b)\n\nexport { equals, coerce, isBinary, fromHex, toHex, fromString, toString, empty }\n", "// this is dummy module overlayed by interface.ts\n", "import * as URI from 'uri-js';\nimport ErrorCode from './ErrorCode.js';\nimport ISigner from './interfaces/ISigner.js';\nimport InputValidator from './InputValidator.js';\nimport IonCreateRequestModel from './models/IonCreateRequestModel.js';\nimport IonDeactivateRequestModel from './models/IonDeactivateRequestModel.js';\nimport IonDocumentModel from './models/IonDocumentModel.js';\nimport IonError from './IonError.js';\nimport IonPublicKeyModel from './models/IonPublicKeyModel.js';\nimport IonRecoverRequestModel from './models/IonRecoverRequestModel.js';\nimport IonSdkConfig from './IonSdkConfig.js';\nimport IonServiceModel from './models/IonServiceModel.js';\nimport IonUpdateRequestModel from './models/IonUpdateRequestModel.js';\nimport JsonCanonicalizer from './JsonCanonicalizer.js';\nimport JwkEs256k from './models/JwkEs256k.js';\nimport Multihash from './Multihash.js';\nimport OperationKeyType from './enums/OperationKeyType.js';\nimport OperationType from './enums/OperationType.js';\nimport PatchAction from './enums/PatchAction.js';\n\n/**\n * Class containing operations related to ION requests.\n */\nexport default class IonRequest {\n  /**\n   * Creates an ION DID create request.\n   * @param input.document The initial state to be associate with the ION DID to be created using a `replace` document patch action.\n   */\n  public static async createCreateRequest (input: {\n    recoveryKey: JwkEs256k;\n    updateKey: JwkEs256k;\n    document: IonDocumentModel;\n  }): Promise<IonCreateRequestModel> {\n    const recoveryKey = input.recoveryKey;\n    const updateKey = input.updateKey;\n    const didDocumentKeys = input.document.publicKeys;\n    const services = input.document.services;\n\n    // Validate recovery and update public keys.\n    InputValidator.validateEs256kOperationKey(recoveryKey, OperationKeyType.Public);\n    InputValidator.validateEs256kOperationKey(updateKey, OperationKeyType.Public);\n\n    // Validate all given DID Document keys.\n    IonRequest.validateDidDocumentKeys(didDocumentKeys);\n\n    // Validate all given service.\n    IonRequest.validateServices(services);\n\n    const hashAlgorithmInMultihashCode = IonSdkConfig.hashAlgorithmInMultihashCode;\n\n    const patches = [{\n      action: PatchAction.Replace,\n      document: input.document\n    }];\n\n    const delta = {\n      updateCommitment: await Multihash.canonicalizeThenDoubleHashThenEncode(updateKey, hashAlgorithmInMultihashCode),\n      patches\n    };\n\n    IonRequest.validateDeltaSize(delta);\n\n    const deltaHash = await Multihash.canonicalizeThenHashThenEncode(delta, hashAlgorithmInMultihashCode);\n\n    const suffixData = {\n      deltaHash,\n      recoveryCommitment: await Multihash.canonicalizeThenDoubleHashThenEncode(recoveryKey, hashAlgorithmInMultihashCode)\n    };\n\n    const operationRequest = {\n      type: OperationType.Create,\n      suffixData: suffixData,\n      delta: delta\n    };\n\n    return operationRequest;\n  }\n\n  public static async createDeactivateRequest (input: {\n    didSuffix: string,\n    recoveryPublicKey: JwkEs256k,\n    signer: ISigner\n  }): Promise<IonDeactivateRequestModel> {\n    // Validate DID suffix\n    IonRequest.validateDidSuffix(input.didSuffix);\n\n    // Validates recovery public key\n    InputValidator.validateEs256kOperationKey(input.recoveryPublicKey, OperationKeyType.Public);\n\n    const hashAlgorithmInMultihashCode = IonSdkConfig.hashAlgorithmInMultihashCode;\n    const revealValue = await Multihash.canonicalizeThenHashThenEncode(input.recoveryPublicKey, hashAlgorithmInMultihashCode);\n\n    const dataToBeSigned = {\n      didSuffix: input.didSuffix,\n      recoveryKey: input.recoveryPublicKey\n    };\n\n    const compactJws = await input.signer.sign({ alg: 'ES256K' }, dataToBeSigned);\n\n    return {\n      type: OperationType.Deactivate,\n      didSuffix: input.didSuffix,\n      revealValue: revealValue,\n      signedData: compactJws\n    };\n  }\n\n  public static async createRecoverRequest (input: {\n    didSuffix: string,\n    recoveryPublicKey: JwkEs256k,\n    nextRecoveryPublicKey: JwkEs256k,\n    nextUpdatePublicKey: JwkEs256k,\n    document: IonDocumentModel,\n    signer: ISigner\n  }): Promise<IonRecoverRequestModel> {\n    // Validate DID suffix\n    IonRequest.validateDidSuffix(input.didSuffix);\n\n    // Validate recovery public key\n    InputValidator.validateEs256kOperationKey(input.recoveryPublicKey, OperationKeyType.Public);\n\n    // Validate next recovery public key\n    InputValidator.validateEs256kOperationKey(input.nextRecoveryPublicKey, OperationKeyType.Public);\n\n    // Validate next update public key\n    InputValidator.validateEs256kOperationKey(input.nextUpdatePublicKey, OperationKeyType.Public);\n\n    // Validate all given DID Document keys.\n    IonRequest.validateDidDocumentKeys(input.document.publicKeys);\n\n    // Validate all given service.\n    IonRequest.validateServices(input.document.services);\n\n    const hashAlgorithmInMultihashCode = IonSdkConfig.hashAlgorithmInMultihashCode;\n    const revealValue = await Multihash.canonicalizeThenHashThenEncode(input.recoveryPublicKey, hashAlgorithmInMultihashCode);\n\n    const patches = [{\n      action: PatchAction.Replace,\n      document: input.document\n    }];\n\n    const nextUpdateCommitmentHash = await Multihash.canonicalizeThenDoubleHashThenEncode(input.nextUpdatePublicKey, hashAlgorithmInMultihashCode);\n    const delta = {\n      patches,\n      updateCommitment: nextUpdateCommitmentHash\n    };\n\n    const deltaHash = await Multihash.canonicalizeThenHashThenEncode(delta, hashAlgorithmInMultihashCode);\n    const nextRecoveryCommitmentHash = await Multihash.canonicalizeThenDoubleHashThenEncode(input.nextRecoveryPublicKey, hashAlgorithmInMultihashCode);\n\n    const dataToBeSigned = {\n      recoveryCommitment: nextRecoveryCommitmentHash,\n      recoveryKey: input.recoveryPublicKey,\n      deltaHash: deltaHash\n    };\n\n    const compactJws = await input.signer.sign({ alg: 'ES256K' }, dataToBeSigned);\n\n    return {\n      type: OperationType.Recover,\n      didSuffix: input.didSuffix,\n      revealValue: revealValue,\n      delta: delta,\n      signedData: compactJws\n    };\n  }\n\n  public static async createUpdateRequest (input: {\n    didSuffix: string;\n    updatePublicKey: JwkEs256k;\n    nextUpdatePublicKey: JwkEs256k;\n    signer: ISigner;\n    servicesToAdd?: IonServiceModel[];\n    idsOfServicesToRemove?: string[];\n    publicKeysToAdd?: IonPublicKeyModel[];\n    idsOfPublicKeysToRemove?: string[];\n  }): Promise<IonUpdateRequestModel> {\n    // Validate DID suffix\n    IonRequest.validateDidSuffix(input.didSuffix);\n\n    // Validate update public key\n    InputValidator.validateEs256kOperationKey(input.updatePublicKey, OperationKeyType.Public);\n\n    // Validate next update public key\n    InputValidator.validateEs256kOperationKey(input.nextUpdatePublicKey, OperationKeyType.Public);\n\n    // Validate all given service.\n    IonRequest.validateServices(input.servicesToAdd);\n\n    // Validate all given DID Document keys.\n    IonRequest.validateDidDocumentKeys(input.publicKeysToAdd);\n\n    // Validate all given service id to remove.\n    if (input.idsOfServicesToRemove !== undefined) {\n      for (const id of input.idsOfServicesToRemove) {\n        InputValidator.validateId(id);\n      }\n    }\n\n    // Validate all given public key id to remove.\n    if (input.idsOfPublicKeysToRemove !== undefined) {\n      for (const id of input.idsOfPublicKeysToRemove) {\n        InputValidator.validateId(id);\n      }\n    }\n\n    const patches = [];\n    // Create patches for add services\n    const servicesToAdd = input.servicesToAdd;\n    if (servicesToAdd !== undefined && servicesToAdd.length > 0) {\n      const patch = {\n        action: PatchAction.AddServices,\n        services: servicesToAdd\n      };\n\n      patches.push(patch);\n    }\n\n    // Create patches for remove services\n    const idsOfServicesToRemove = input.idsOfServicesToRemove;\n    if (idsOfServicesToRemove !== undefined && idsOfServicesToRemove.length > 0) {\n      const patch = {\n        action: PatchAction.RemoveServices,\n        ids: idsOfServicesToRemove\n      };\n\n      patches.push(patch);\n    }\n\n    // Create patches for adding public keys\n    const publicKeysToAdd = input.publicKeysToAdd;\n    if (publicKeysToAdd !== undefined && publicKeysToAdd.length > 0) {\n      const patch = {\n        action: PatchAction.AddPublicKeys,\n        publicKeys: publicKeysToAdd\n      };\n\n      patches.push(patch);\n    }\n\n    // Create patch for removing public keys\n    const idsOfPublicKeysToRemove = input.idsOfPublicKeysToRemove;\n    if (idsOfPublicKeysToRemove !== undefined && idsOfPublicKeysToRemove.length > 0) {\n      const patch = {\n        action: PatchAction.RemovePublicKeys,\n        ids: idsOfPublicKeysToRemove\n      };\n\n      patches.push(patch);\n    }\n\n    const hashAlgorithmInMultihashCode = IonSdkConfig.hashAlgorithmInMultihashCode;\n    const revealValue = await Multihash.canonicalizeThenHashThenEncode(input.updatePublicKey, hashAlgorithmInMultihashCode);\n\n    const nextUpdateCommitmentHash = await Multihash.canonicalizeThenDoubleHashThenEncode(input.nextUpdatePublicKey, hashAlgorithmInMultihashCode);\n    const delta = {\n      patches,\n      updateCommitment: nextUpdateCommitmentHash\n    };\n    const deltaHash = await Multihash.canonicalizeThenHashThenEncode(delta, hashAlgorithmInMultihashCode);\n\n    const dataToBeSigned = {\n      updateKey: input.updatePublicKey,\n      deltaHash\n    };\n\n    const compactJws = await input.signer.sign({ alg: 'ES256K' }, dataToBeSigned);\n\n    return {\n      type: OperationType.Update,\n      didSuffix: input.didSuffix,\n      revealValue,\n      delta,\n      signedData: compactJws\n    };\n  }\n\n  private static validateDidSuffix (didSuffix: string) {\n    Multihash.validateEncodedHashComputedUsingSupportedHashAlgorithm(didSuffix, 'didSuffix');\n  }\n\n  private static validateDidDocumentKeys (publicKeys?: IonPublicKeyModel[]) {\n    if (publicKeys === undefined) {\n      return;\n    }\n\n    // Validate each public key.\n    const publicKeyIdSet: Set<string> = new Set();\n    for (const publicKey of publicKeys) {\n      if (Array.isArray(publicKey.publicKeyJwk)) {\n        throw new IonError(ErrorCode.DidDocumentPublicKeyMissingOrIncorrectType, `DID Document key 'publicKeyJwk' property is not a non-array object.`);\n      }\n\n      InputValidator.validateId(publicKey.id);\n\n      // 'id' must be unique across all given keys.\n      if (publicKeyIdSet.has(publicKey.id)) {\n        throw new IonError(ErrorCode.DidDocumentPublicKeyIdDuplicated, `DID Document key with ID '${publicKey.id}' already exists.`);\n      }\n      publicKeyIdSet.add(publicKey.id);\n\n      InputValidator.validatePublicKeyPurposes(publicKey.purposes);\n    }\n  }\n\n  private static validateServices (services?: IonServiceModel[]) {\n    if (services !== undefined && services.length !== 0) {\n      const serviceIdSet: Set<string> = new Set();\n      for (const service of services) {\n        IonRequest.validateService(service);\n        if (serviceIdSet.has(service.id)) {\n          throw new IonError(ErrorCode.DidDocumentServiceIdDuplicated, 'Service id has to be unique');\n        }\n        serviceIdSet.add(service.id);\n      }\n    }\n  }\n\n  private static validateService (service: IonServiceModel) {\n    InputValidator.validateId(service.id);\n\n    const maxTypeLength = 30;\n    if (service.type.length > maxTypeLength) {\n      const errorMessage = `Service endpoint type length ${service.type.length} exceeds max allowed length of ${maxTypeLength}.`;\n      throw new IonError(ErrorCode.ServiceTypeTooLong, errorMessage);\n    }\n\n    // Throw error if `serviceEndpoint` is an array.\n    if (Array.isArray(service.serviceEndpoint)) {\n      const errorMessage = 'Service endpoint value cannot be an array.';\n      throw new IonError(ErrorCode.ServiceEndpointCannotBeAnArray, errorMessage);\n    }\n\n    if (typeof service.serviceEndpoint === 'string') {\n      const uri = URI.parse(service.serviceEndpoint);\n      if (uri.error !== undefined) {\n        throw new IonError(ErrorCode.ServiceEndpointStringNotValidUri, `Service endpoint string '${service.serviceEndpoint}' is not a URI.`);\n      }\n    }\n  }\n\n  private static validateDeltaSize (delta: object) {\n    const deltaBytes = JsonCanonicalizer.canonicalizeAsBytes(delta);\n    if (deltaBytes.length > IonSdkConfig.maxCanonicalizedDeltaSizeInBytes) {\n      const errorMessage = `Delta of ${deltaBytes.length} bytes exceeded limit of ${IonSdkConfig.maxCanonicalizedDeltaSizeInBytes} bytes.`;\n      throw new IonError(ErrorCode.DeltaExceedsMaximumSize, errorMessage);\n    }\n  }\n}\n", "import Encoder from './Encoder.js';\nimport ErrorCode from './ErrorCode.js';\nimport IonError from './IonError.js';\nimport IonPublicKeyPurpose from './enums/IonPublicKeyPurpose.js';\nimport JwkEs256k from './models/JwkEs256k.js';\nimport OperationKeyType from './enums/OperationKeyType.js';\n\n/**\n * Class containing input validation methods.\n */\nexport default class InputValidator {\n  /**\n   * Validates the schema of a ES256K JWK key.\n   */\n  public static validateEs256kOperationKey (operationKeyJwk: JwkEs256k, operationKeyType: OperationKeyType) {\n    const allowedProperties = new Set(['kty', 'crv', 'x', 'y']);\n    if (operationKeyType === OperationKeyType.Private) {\n      allowedProperties.add('d');\n    }\n    for (const property in operationKeyJwk) {\n      if (!allowedProperties.has(property)) {\n        throw new IonError(ErrorCode.PublicKeyJwkEs256kHasUnexpectedProperty, `SECP256K1 JWK key has unexpected property '${property}'.`);\n      }\n    }\n\n    if (operationKeyJwk.crv !== 'secp256k1') {\n      throw new IonError(ErrorCode.JwkEs256kMissingOrInvalidCrv, `SECP256K1 JWK 'crv' property must be 'secp256k1' but got '${operationKeyJwk.crv}.'`);\n    }\n\n    if (operationKeyJwk.kty !== 'EC') {\n      throw new IonError(ErrorCode.JwkEs256kMissingOrInvalidKty, `SECP256K1 JWK 'kty' property must be 'EC' but got '${operationKeyJwk.kty}.'`);\n    }\n\n    // `x` and `y` need 43 Base64URL encoded bytes to contain 256 bits.\n    if (operationKeyJwk.x.length !== 43) {\n      throw new IonError(ErrorCode.JwkEs256kHasIncorrectLengthOfX, `SECP256K1 JWK 'x' property must be 43 bytes.`);\n    }\n\n    if (operationKeyJwk.y.length !== 43) {\n      throw new IonError(ErrorCode.JwkEs256kHasIncorrectLengthOfY, `SECP256K1 JWK 'y' property must be 43 bytes.`);\n    }\n\n    if (operationKeyType === OperationKeyType.Private && (operationKeyJwk.d === undefined || operationKeyJwk.d.length !== 43)) {\n      throw new IonError(ErrorCode.JwkEs256kHasIncorrectLengthOfD, `SECP256K1 JWK 'd' property must be 43 bytes.`);\n    }\n  }\n\n  /**\n   * Validates an `id` property (in `IonPublicKeyModel` and `IonServiceModel`).\n   */\n  public static validateId (id: string) {\n    const maxIdLength = 50;\n    if (id.length > maxIdLength) {\n      throw new IonError(ErrorCode.IdTooLong, `Key ID length ${id.length} exceed max allowed length of ${maxIdLength}.`);\n    }\n\n    if (!Encoder.isBase64UrlString(id)) {\n      throw new IonError(ErrorCode.IdNotUsingBase64UrlCharacterSet, `Key ID '${id}' is not a Base64URL string.`);\n    }\n  }\n\n  /**\n   * Validates the given public key purposes.\n   */\n  public static validatePublicKeyPurposes (purposes?: IonPublicKeyPurpose[]) {\n    // Nothing to validate if `purposes` is undefined.\n    if (purposes === undefined) {\n      return;\n    }\n\n    // Validate that all purposes are be unique.\n    const processedPurposes: Set<IonPublicKeyPurpose> = new Set();\n    for (const purpose of purposes) {\n      if (processedPurposes.has(purpose)) {\n        throw new IonError(ErrorCode.PublicKeyPurposeDuplicated, `Public key purpose '${purpose}' already specified.`);\n      }\n      processedPurposes.add(purpose);\n    }\n  }\n}\n", "/**\n * Operation key type, indicates if a key is a public or private key.\n */\nenum OperationKeyType {\n    Public = 'public',\n    Private = 'private'\n  }\n\nexport default OperationKeyType;\n", "import IonNetwork from './enums/IonNetwork.js';\n\n/**\n * Global configuration of the SDK.\n */\nexport default class IonSdkConfig {\n  /**\n   * Default hash algorithm used when hashing is performed.\n   */\n  public static hashAlgorithmInMultihashCode = 18; // SHA256\n\n  /**\n   * Maximum bytes for canonicalized delta.\n   */\n  public static maxCanonicalizedDeltaSizeInBytes: number = 1000;\n\n  /**\n   * Network name in ION DID, okay to leave as `undefined` if mainnet.\n   */\n  public static network: IonNetwork | undefined;\n}\n", "import * as canonicalize from 'canonicalize';\nimport Encoder from './Encoder.js';\n\n/**\n * Class containing reusable JSON canonicalization operations using JSON Canonicalization Scheme (JCS).\n */\nexport default class JsonCanonicalizer {\n  /**\n   * Canonicalizes the given content as bytes.\n   */\n  public static canonicalizeAsBytes (content: object): Uint8Array {\n    // We need to remove all properties with `undefined` as value so that JCS canonicalization will not produce invalid JSON.\n    const contentWithoutUndefinedProperties = JsonCanonicalizer.removeAllUndefinedProperties(content);\n    const canonicalizedString: string = canonicalize.default(contentWithoutUndefinedProperties)!;\n    const contentBytes = Encoder.stringToBytes(canonicalizedString);\n    return contentBytes;\n  }\n\n  /**\n   * Removes all properties within the given object with `undefined` as value.\n   */\n  private static removeAllUndefinedProperties (content: any): any {\n    for (const key in content) {\n      if (typeof content[key] === 'object') {\n        JsonCanonicalizer.removeAllUndefinedProperties(content[key]);\n      } else if (content[key] === undefined) {\n        delete content[key];\n      }\n    }\n\n    return content;\n  }\n}\n", "import * as multihashes from 'multihashes';\nimport Encoder from './Encoder.js';\nimport ErrorCode from './ErrorCode.js';\nimport { HashCode } from 'multihashes';\nimport IonError from './IonError.js';\nimport IonSdkConfig from './IonSdkConfig.js';\nimport JsonCanonicalizer from './JsonCanonicalizer.js';\nimport { sha256 } from 'multiformats/hashes/sha2';\n\n/**\n * Class that performs hashing operations using the multihash format.\n */\nexport default class Multihash {\n  /**\n   * Hashes the content using the hashing algorithm specified.\n   * @param hashAlgorithmInMultihashCode The hashing algorithm to use.\n   */\n  public static async hash (content: Uint8Array, hashAlgorithmInMultihashCode: number): Promise<Uint8Array> {\n    const conventionalHash = await this.hashAsNonMultihashBytes(content, hashAlgorithmInMultihashCode);\n    const multihash = multihashes.encode(conventionalHash, hashAlgorithmInMultihashCode as HashCode);\n\n    return multihash;\n  }\n\n  /**\n   * Hashes the content using the hashing algorithm specified as a generic (non-multihash) hash.\n   * @param hashAlgorithmInMultihashCode The hashing algorithm to use.\n   * @returns A multihash bytes.\n   */\n  public static async hashAsNonMultihashBytes (content: Uint8Array, hashAlgorithmInMultihashCode: number): Promise<Uint8Array> {\n    let hash;\n    switch (hashAlgorithmInMultihashCode) {\n      case 18: // SHA256\n        hash = await sha256.encode(content);\n        break;\n      default:\n        throw new IonError(\n          ErrorCode.MultihashUnsupportedHashAlgorithm,\n          `Hash algorithm defined in multihash code ${hashAlgorithmInMultihashCode} is not supported.`\n        );\n    }\n\n    return hash;\n  }\n\n  /**\n   * Canonicalize the given content, then double hashes the result using the latest supported hash algorithm, then encodes the multihash.\n   * Mainly used for testing purposes.\n   */\n  public static async canonicalizeThenHashThenEncode (content: object, hashAlgorithmInMultihashCode: number): Promise<string> {\n    const canonicalizedStringBytes = JsonCanonicalizer.canonicalizeAsBytes(content);\n\n    const multihashEncodedString = await Multihash.hashThenEncode(canonicalizedStringBytes, hashAlgorithmInMultihashCode);\n    return multihashEncodedString;\n  }\n\n  /**\n   * Canonicalize the given content, then double hashes the result using the latest supported hash algorithm, then encodes the multihash.\n   * Mainly used for testing purposes.\n   */\n  public static async canonicalizeThenDoubleHashThenEncode (content: object, hashAlgorithmInMultihashCode: number): Promise<string> {\n    const contentBytes = JsonCanonicalizer.canonicalizeAsBytes(content);\n\n    // Double hash.\n    const intermediateHashBytes = await Multihash.hashAsNonMultihashBytes(contentBytes, hashAlgorithmInMultihashCode);\n    const multihashEncodedString = await Multihash.hashThenEncode(intermediateHashBytes, hashAlgorithmInMultihashCode);\n    return multihashEncodedString;\n  }\n\n  /**\n   * Hashes the content using the hashing algorithm specified then encodes the multihash bytes as string.\n   * @param hashAlgorithmInMultihashCode The hashing algorithm to use.\n   */\n  public static async hashThenEncode (content: Uint8Array, hashAlgorithmInMultihashCode: number): Promise<string> {\n    const multihashBytes = await Multihash.hash(content, hashAlgorithmInMultihashCode);\n    const multihashEncodedString = Encoder.encode(multihashBytes);\n    return multihashEncodedString;\n  }\n\n  /**\n   * Checks if the given encoded hash is a multihash computed using the configured hashing algorithm.\n   */\n  public static validateEncodedHashComputedUsingSupportedHashAlgorithm (\n    encodedMultihash: string,\n    inputContextForErrorLogging: string\n  ) {\n    let multihash;\n    const multihashBytes = Encoder.decodeAsBytes(encodedMultihash, inputContextForErrorLogging);\n    try {\n      multihash = multihashes.decode(multihashBytes);\n    } catch {\n      throw new IonError(\n        ErrorCode.MultihashStringNotAMultihash,\n        `Given ${inputContextForErrorLogging} string '${encodedMultihash}' is not a multihash after decoding.`);\n    }\n\n    const hashAlgorithmInMultihashCode = IonSdkConfig.hashAlgorithmInMultihashCode;\n\n    if (hashAlgorithmInMultihashCode !== multihash.code) {\n      throw new IonError(\n        ErrorCode.MultihashUnsupportedHashAlgorithm,\n        `Given ${inputContextForErrorLogging} uses unsupported multihash algorithm with code ${multihash.code}, ` +\n        `should use ${hashAlgorithmInMultihashCode} or change IonSdkConfig to desired hashing algorithm.`\n      );\n    }\n  }\n}\n", "/* global crypto */\n\nimport { from } from './hasher.js'\n\n/**\n * @param {AlgorithmIdentifier} name\n */\nconst sha = name =>\n  /**\n   * @param {Uint8Array} data\n   */\n  async data => new Uint8Array(await crypto.subtle.digest(name, data))\n\nexport const sha256 = from({\n  name: 'sha2-256',\n  code: 0x12,\n  encode: sha('SHA-256')\n})\n\nexport const sha512 = from({\n  name: 'sha2-512',\n  code: 0x13,\n  encode: sha('SHA-512')\n})\n", "import * as Digest from './digest.js'\n\n/**\n * @template {string} Name\n * @template {number} Code\n * @param {object} options\n * @param {Name} options.name\n * @param {Code} options.code\n * @param {(input: Uint8Array) => Await<Uint8Array>} options.encode\n */\nexport const from = ({ name, code, encode }) => new Hasher(name, code, encode)\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n *\n * @template {string} Name\n * @template {number} Code\n * @class\n * @implements {MultihashHasher<Code>}\n */\nexport class Hasher {\n  /**\n   *\n   * @param {Name} name\n   * @param {Code} code\n   * @param {(input: Uint8Array) => Await<Uint8Array>} encode\n   */\n  constructor (name, code, encode) {\n    this.name = name\n    this.code = code\n    this.encode = encode\n  }\n\n  /**\n   * @param {Uint8Array} input\n   * @returns {Await<Digest.Digest<Code, number>>}\n   */\n  digest (input) {\n    if (input instanceof Uint8Array) {\n      const result = this.encode(input)\n      return result instanceof Uint8Array\n        ? Digest.create(this.code, result)\n        /* c8 ignore next 1 */\n        : result.then(digest => Digest.create(this.code, digest))\n    } else {\n      throw Error('Unknown type, must be binary type')\n      /* c8 ignore next 1 */\n    }\n  }\n}\n\n/**\n * @template {number} Alg\n * @typedef {import('./interface.js').MultihashHasher} MultihashHasher\n */\n\n/**\n * @template T\n * @typedef {Promise<T>|T} Await\n */\n", "import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\n\n/**\n * Creates a multihash digest.\n *\n * @template {number} Code\n * @param {Code} code\n * @param {Uint8Array} digest\n */\nexport const create = (code, digest) => {\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 *\n * @param {Uint8Array} multihash\n * @returns {MultihashDigest}\n */\nexport const decode = (multihash) => {\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\n/**\n * @param {MultihashDigest} a\n * @param {unknown} b\n * @returns {b is MultihashDigest}\n */\nexport const equals = (a, b) => {\n  if (a === b) {\n    return true\n  } else {\n    const data = /** @type {{code?:unknown, size?:unknown, bytes?:unknown}} */(b)\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 * @typedef {import('./interface.js').MultihashDigest} MultihashDigest\n */\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n *\n * @template {number} Code\n * @template {number} Size\n * @class\n * @implements {MultihashDigest}\n */\nexport class Digest {\n  /**\n   * Creates a multihash digest.\n   *\n   * @param {Code} code\n   * @param {Size} size\n   * @param {Uint8Array} digest\n   * @param {Uint8Array} bytes\n   */\n  constructor (code, size, digest, bytes) {\n    this.code = code\n    this.size = size\n    this.digest = digest\n    this.bytes = bytes\n  }\n}\n", "import varint from '../vendor/varint.js'\n\n/**\n * @param {Uint8Array} data\n * @param {number} [offset=0]\n * @returns {[number, number]}\n */\nexport const decode = (data, offset = 0) => {\n  const code = varint.decode(data, offset)\n  return [code, varint.decode.bytes]\n}\n\n/**\n * @param {number} int\n * @param {Uint8Array} target\n * @param {number} [offset=0]\n */\nexport const encodeTo = (int, target, offset = 0) => {\n  varint.encode(int, target, offset)\n  return target\n}\n\n/**\n * @param {number} int\n * @returns {number}\n */\nexport const encodingLength = (int) => {\n  return varint.encodingLength(int)\n}\n", "var encode_1 = encode;\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31);\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  encode.bytes = offset - oldOffset + 1;\n  \n  return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n  , REST$1 = 0x7F;\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      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  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 (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", "/**\n * ION operation types.\n */\nenum OperationType {\n  Create = 'create',\n  Update = 'update',\n  Deactivate = 'deactivate',\n  Recover = 'recover'\n}\n\nexport default OperationType;\n", "/**\n * Sidetree patch actions. These are the valid values in the action property of a patch.\n */\nenum PatchAction {\n    Replace = 'replace',\n    AddPublicKeys = 'add-public-keys',\n    RemovePublicKeys = 'remove-public-keys',\n    AddServices = 'add-services',\n    RemoveServices = 'remove-services'\n}\n\nexport default PatchAction;\n", "import Encoder from './Encoder.js';\nimport IonDocumentModel from './models/IonDocumentModel.js';\nimport IonRequest from './IonRequest.js';\nimport IonSdkConfig from './IonSdkConfig.js';\nimport JsonCanonicalizer from './JsonCanonicalizer.js';\nimport JwkEs256k from './models/JwkEs256k.js';\nimport Multihash from './Multihash.js';\n\n/**\n * Class containing DID related operations.\n */\nexport default class IonDid {\n  /**\n   * Creates a long-form DID.\n   * @param input.document The initial state to be associate with the ION DID to be created using a `replace` document patch action.\n   */\n  public static async createLongFormDid (input: {\n    recoveryKey: JwkEs256k;\n    updateKey: JwkEs256k;\n    document: IonDocumentModel;\n  }): Promise<string> {\n    const createRequest = await IonRequest.createCreateRequest(input);\n\n    const didUniqueSuffix = await IonDid.computeDidUniqueSuffix(createRequest.suffixData);\n\n    // Add the network portion if not configured for mainnet.\n    let shortFormDid;\n    if (IonSdkConfig.network === undefined || IonSdkConfig.network === 'mainnet') {\n      shortFormDid = `did:ion:${didUniqueSuffix}`;\n    } else {\n      shortFormDid = `did:ion:${IonSdkConfig.network}:${didUniqueSuffix}`;\n    }\n\n    const initialState = {\n      suffixData: createRequest.suffixData,\n      delta: createRequest.delta\n    };\n\n    // Initial state must be canonicalized as per spec.\n    const canonicalizedInitialStateBytes = JsonCanonicalizer.canonicalizeAsBytes(initialState);\n    const encodedCanonicalizedInitialStateString = Encoder.encode(canonicalizedInitialStateBytes);\n\n    const longFormDid = `${shortFormDid}:${encodedCanonicalizedInitialStateString}`;\n    return longFormDid;\n  }\n\n  /**\n   * Computes the DID unique suffix given the encoded suffix data string.\n   */\n  private static async computeDidUniqueSuffix (suffixData: object): Promise<string> {\n    const canonicalizedStringBytes = JsonCanonicalizer.canonicalizeAsBytes(suffixData);\n    const multihash = await Multihash.hash(canonicalizedStringBytes, IonSdkConfig.hashAlgorithmInMultihashCode);\n    const encodedMultihash = Encoder.encode(multihash);\n    return encodedMultihash;\n  }\n}\n", "import * as Ed25519 from '@noble/ed25519';\nimport * as Secp256k1 from '@noble/secp256k1';\nimport InputValidator from './InputValidator.js';\nimport IonPublicKeyModel from './models/IonPublicKeyModel.js';\nimport IonPublicKeyPurpose from './enums/IonPublicKeyPurpose.js';\nimport JwkEd25519 from './models/JwkEd25519.js';\nimport JwkEs256k from './models/JwkEs256k.js';\nimport { base64url } from 'multiformats/bases/base64';\n\n/**\n * Class containing operations related to keys used in ION.\n */\nexport default class IonKey {\n  /**\n   * Generates SECP256K1 key pair to be used in an operation.\n   * Mainly used for testing.\n   * @returns [publicKey, privateKey]\n   */\n  public static async generateEs256kDidDocumentKeyPair (input: { id: string, purposes?: IonPublicKeyPurpose[] }): Promise<[IonPublicKeyModel, JwkEs256k]> {\n    const id = input.id;\n    const purposes = input.purposes;\n\n    InputValidator.validateId(id);\n    InputValidator.validatePublicKeyPurposes(purposes);\n\n    const [publicKey, privateKey] = await IonKey.generateEs256kKeyPair();\n    const publicKeyModel: IonPublicKeyModel = {\n      id,\n      type: 'EcdsaSecp256k1VerificationKey2019',\n      publicKeyJwk: publicKey\n    };\n\n    // Only add the `purposes` property If given `purposes` array has at least an entry.\n    if (purposes !== undefined && purposes.length > 0) {\n      publicKeyModel.purposes = purposes;\n    }\n\n    return [publicKeyModel, privateKey];\n  }\n\n  /**\n   * Generates SECP256K1 key pair for ION operation use.\n   * @returns [publicKey, privateKey]\n   */\n  public static async generateEs256kOperationKeyPair (): Promise<[JwkEs256k, JwkEs256k]> {\n    const keyPair = await IonKey.generateEs256kKeyPair();\n    return keyPair;\n  }\n\n  private static async generateEs256kKeyPair (): Promise<[JwkEs256k, JwkEs256k]> {\n    const privateKeyBytes = Secp256k1.utils.randomPrivateKey();\n    const compressedPublicKeyBytes = Secp256k1.getPublicKey(privateKeyBytes);\n    const compressedPublicKeyHex = Secp256k1.etc.bytesToHex(compressedPublicKeyBytes);\n    const curvePoints = Secp256k1.ProjectivePoint.fromHex(compressedPublicKeyHex);\n    const uncompressedPublicKeyBytes = curvePoints.toRawBytes(false); // false = uncompressed\n\n    // we need uncompressed public key so that it contains both the x and y values for the JWK format:\n    // the first byte is a header that indicates whether the key is uncompressed (0x04 if uncompressed).\n    // bytes 1 - 32 represent X\n    // bytes 33 - 64 represent Y\n\n    const d = base64url.baseEncode(privateKeyBytes);\n    // skip the first byte because it's used as a header to indicate whether the key is uncompressed\n    const x = base64url.baseEncode(uncompressedPublicKeyBytes.subarray(1, 33));\n    const y = base64url.baseEncode(uncompressedPublicKeyBytes.subarray(33, 65));\n\n    const publicJwk = {\n      // alg: 'ES256K',\n      kty: 'EC',\n      crv: 'secp256k1',\n      x,\n      y\n    };\n    const privateJwk = { ...publicJwk, d };\n\n    return [publicJwk, privateJwk];\n  }\n\n  /**\n   * Generates Ed25519 key pair to be used in an operation.\n   * Mainly used for testing.\n   * @returns [publicKey, privateKey]\n   */\n  public static async generateEd25519DidDocumentKeyPair (input: { id: string, purposes?: IonPublicKeyPurpose[] }): Promise<[IonPublicKeyModel, JwkEd25519]> {\n    const id = input.id;\n    const purposes = input.purposes;\n\n    InputValidator.validateId(id);\n    InputValidator.validatePublicKeyPurposes(purposes);\n\n    const [publicKey, privateKey] = await IonKey.generateEd25519KeyPair();\n    const publicKeyModel: IonPublicKeyModel = {\n      id,\n      type: 'JsonWebKey2020',\n      publicKeyJwk: publicKey\n    };\n\n    // Only add the `purposes` property If given `purposes` array has at least an entry.\n    if (purposes !== undefined && purposes.length > 0) {\n      publicKeyModel.purposes = purposes;\n    }\n\n    return [publicKeyModel, privateKey];\n  }\n\n  /**\n   * Generates Ed25519 key pair for ION operation use.\n   * @returns [publicKey, privateKey]\n   */\n  public static async generateEd25519OperationKeyPair (): Promise<[JwkEd25519, JwkEd25519]> {\n    const keyPair = await IonKey.generateEd25519KeyPair();\n    return keyPair;\n  }\n\n  private static async generateEd25519KeyPair (): Promise<[JwkEd25519, JwkEd25519]> {\n    const privateKeyBytes = Ed25519.utils.randomPrivateKey();\n    const privateKeyHex = Ed25519.etc.bytesToHex(privateKeyBytes);\n    const publicKeyBytes = await Ed25519.getPublicKeyAsync(privateKeyHex);\n\n    const d = base64url.baseEncode(privateKeyBytes);\n    const x = base64url.baseEncode(publicKeyBytes);\n\n    const publicJwk = {\n      // alg: 'EdDSA',\n      kty: 'OKP',\n      crv: 'Ed25519',\n      x\n    };\n    const privateJwk = { ...publicJwk, d };\n\n    return [publicJwk, privateJwk];\n  }\n\n  public static isJwkEs256k (key: JwkEs256k | JwkEd25519): key is JwkEs256k {\n    return key.crv === 'secp256k1' && key.kty === 'EC';\n  };\n\n  public static isJwkEd25519 (key: JwkEs256k | JwkEd25519): key is JwkEd25519 {\n    return key.crv === 'Ed25519' && key.kty === 'OKP';\n  };\n}\n", "/**\n * Supported ION networks.\n */\nenum IonNetwork {\n  Mainnet = 'mainnet',\n  Testnet = 'test'\n}\n\nexport default IonNetwork;\n", "/**\n * DID Document key purpose.\n */\nenum IonPublicKeyPurpose {\n  Authentication = 'authentication',\n  AssertionMethod = 'assertionMethod',\n  CapabilityInvocation = 'capabilityInvocation',\n  CapabilityDelegation = 'capabilityDelegation',\n  KeyAgreement = 'keyAgreement'\n}\n\nexport default IonPublicKeyPurpose;\n", "import * as Secp256k1 from '@noble/secp256k1';\nimport Encoder from './Encoder.js';\nimport ISigner from './interfaces/ISigner.js';\nimport InputValidator from './InputValidator.js';\nimport JwkEs256k from './models/JwkEs256k.js';\nimport OperationKeyType from './enums/OperationKeyType.js';\nimport { base64url } from 'multiformats/bases/base64';\nimport { sha256 } from 'multiformats/hashes/sha2';\n\n/**\n * An ISigner implementation that uses a given local private key.\n */\nexport default class LocalSigner implements ISigner {\n  /**\n   * Creates a new local signer using the given private key.\n   */\n  public static create (privateKey: JwkEs256k): ISigner {\n    return new LocalSigner(privateKey);\n  }\n\n  private constructor (private privateKey: JwkEs256k) {\n    InputValidator.validateEs256kOperationKey(privateKey, OperationKeyType.Private);\n  }\n\n  public async sign (header: object, content: object): Promise<string> {\n    const headerString = JSON.stringify(header);\n    const headerBytes = Encoder.stringToBytes(headerString);\n    const encodedHeader = base64url.baseEncode(headerBytes);\n\n    const payloadString = JSON.stringify(content);\n    const payloadBytes = Encoder.stringToBytes(payloadString);\n    const encodedPayload = base64url.baseEncode(payloadBytes);\n\n    const signingContentString = `${encodedHeader}.${encodedPayload}`;\n    const signingContentBytes = Encoder.stringToBytes(signingContentString);\n    const contentHash = await sha256.encode(signingContentBytes);\n\n    const privateKeyBytes = base64url.baseDecode(this.privateKey.d!);\n    const signature = await Secp256k1.signAsync(contentHash, privateKeyBytes);\n    const signatureBytes = signature.toCompactRawBytes();\n\n    const encodedSignature = base64url.baseEncode(signatureBytes);\n\n    const compactJws = `${encodedHeader}.${encodedPayload}.${encodedSignature}`;\n    return compactJws;\n  }\n}\n", "import crossFetch from 'cross-fetch';\nimport ProofOfWorkSDK from '@decentralized-identity/ion-pow-sdk';\n\nimport * as ed25519 from '@noble/ed25519';\nimport * as secp256k1 from '@noble/secp256k1';\n\nimport { base64url } from 'multiformats/bases/base64';\nimport { IonKey } from '@decentralized-identity/ion-sdk';\nimport { sha256 } from 'multiformats/hashes/sha2';\n\n// supports fetch in: node, browsers, and browser extensions.\n// uses native fetch if available in environment or falls back to a ponyfill.\n// 'cross-fetch' is a ponyfill that uses `XMLHTTPRequest` under the hood.\n// `XMLHTTPRequest` cannot be used in browser extension background service workers.\n// browser extensions get even more strict with `fetch` in that it cannot be referenced\n// indirectly.\nconst fetch = globalThis.fetch ?? crossFetch;\n\n/**\n * @typedef {object} PrivateJWK\n * @property {'Ed25519'|'secp256k1'} privateJWK.crv\n * @property {string} privateJWK.d\n */\n\n/**\n * @typedef {object} PublicJWK\n * @property {'Ed25519'|'secp256k1'} publicJWK.crv\n * @property {string} publicJWK.x\n * @property {string} [publicJWK.y]\n */\n\n/**\n * @typedef {object} KeyPair\n * @property {PrivateJWK} privateJwk\n * @property {PublicJWK} publicJwk\n */\n\nconst keyGenerators = {\n  'Ed25519': IonKey.generateEd25519OperationKeyPair,\n  'EdDSA': IonKey.generateEd25519OperationKeyPair,\n  'secp256k1': IonKey.generateEs256kOperationKeyPair,\n  'ES256K': IonKey.generateEs256kOperationKeyPair\n};\n\n/**\n * generates a keypair of the type provided\n * @param {'Ed25519'| 'EdDSA' | 'secp256k1' | 'ES256K'} type\n * @returns {KeyPair}\n */\nexport async function generateKeyPair(type = 'secp256k1') {\n  const keyGeneratorFn = keyGenerators[type];\n\n  if (!keyGeneratorFn) {\n    throw new Error('Unsupported key type');\n  }\n\n  const [ publicJwk, privateJwk ] = await keyGeneratorFn();\n  return { publicJwk, privateJwk };\n}\n\n/**\n * signs the payload provided using the key provided\n * @param {object} params\n * @param {any} params.payload - anything JSON stringifiable.\n * @param {object} [params.header] - any properties you want included in the header. `alg` will be included for you\n * @param {PrivateJWK} params.privateJwk - the key to sign with\n * @returns {string} compact JWS\n */\nexport async function sign(params = { }) {\n  const { header = { }, payload, privateJwk } = params;\n\n  switch (privateJwk.crv) {\n    case 'Ed25519':\n      header.alg = 'EdDSA';\n      break;\n\n    case 'secp256k1':\n      header.alg = 'ES256K';\n      break;\n\n    default:\n      throw new Error('Unsupported cryptographic type');\n  }\n\n  const textEncoder = new TextEncoder();\n\n  const headerStr = JSON.stringify(header);\n  const headerBytes = textEncoder.encode(headerStr);\n  const headerBase64Url = base64url.baseEncode(headerBytes);\n\n  const payloadStr = JSON.stringify(payload);\n  const payloadBytes = textEncoder.encode(payloadStr);\n  const payloadBase64Url = base64url.baseEncode(payloadBytes);\n\n  // this is what's going to get signed\n  const message = `${headerBase64Url}.${payloadBase64Url}`;\n  let messageBytes = textEncoder.encode(message);\n\n  if (privateJwk.crv === 'secp256k1') {\n    messageBytes = await sha256.encode(messageBytes);\n  }\n\n  const privateKeyBytes = base64url.baseDecode(privateJwk.d);\n\n  // sign the actual payload\n  let signatureBytes;\n  if (privateJwk.crv === 'Ed25519') {\n    signatureBytes = await ed25519.signAsync(messageBytes, privateKeyBytes);\n  }\n  else if (privateJwk.crv === 'secp256k1') {\n    const signature = await secp256k1.signAsync(messageBytes, privateKeyBytes);\n    signatureBytes = signature.toCompactRawBytes();\n  }\n  const signature = base64url.baseEncode(signatureBytes);\n\n  return `${message}.${signature}`;\n}\n\n/**\n *  verifies the provided JWS with the provided public key\n * @param {object} params\n * @param {string} params.jws - the compact jws to verify\n * @param {PublicJWK} params.publicJwk - the public key used to verify the signature\n * @returns {boolean}\n */\nexport async function verify(params = { }) {\n  const { jws, publicJwk } = params;\n  const [ headerBase64Url, payloadBase64Url, signatureBase64Url ] = jws.split('.');\n\n  const message = `${headerBase64Url}.${payloadBase64Url}`;\n  const messageBytes = new TextEncoder().encode(message);\n\n  const signatureBytes = base64url.baseDecode(signatureBase64Url);\n\n  switch (publicJwk.crv) {\n    case 'secp256k1': {\n      const xBytes = base64url.baseDecode(publicJwk.x);\n      const yBytes = base64url.baseDecode(publicJwk.y);\n\n      const publicKeyBytes = new Uint8Array(xBytes.length + yBytes.length + 1);\n\n      // create an uncompressed public key using the x and y values from the provided JWK.\n      // a leading byte of 0x04 indicates that the public key is uncompressed\n      // (e.g. x and y values are both present)\n      publicKeyBytes.set([ 0x04 ], 0);\n      publicKeyBytes.set(xBytes, 1);\n      publicKeyBytes.set(yBytes, xBytes.length + 1);\n\n      const hashedMessage = await sha256.encode(messageBytes);\n\n      return secp256k1.verify(signatureBytes, hashedMessage, publicKeyBytes);\n    }\n\n    case 'Ed25519': {\n      const publicKeyBytes = base64url.baseDecode(publicJwk.x);\n\n      return ed25519.verifyAsync(signatureBytes, messageBytes, publicKeyBytes);\n    }\n\n    default:\n      throw new Error('Unsupported cryptographic type');\n  }\n}\n\n/**\n * resolves the ION DID provided\n * @param {string} didUri\n * @param {object} options\n * @param {string} [nodeEndpoint] - the resolver node\n * @returns\n */\nexport async function resolve(didUri, options = { }) {\n  const { nodeEndpoint = 'https://beta.discover.did.microsoft.com/1.0/identifiers' } = options;\n\n  const response = await fetch(`${nodeEndpoint}/${didUri}`);\n\n  if (response.status >= 400) {\n    throw new Error(response.statusText);\n  }\n\n  return response.json();\n}\n\nexport async function anchor(anchorRequest, options = { }) {\n  const {\n    challengeEndpoint = 'https://beta.ion.msidentity.com/api/v1.0/proof-of-work-challenge',\n    solutionEndpoint = 'https://beta.ion.msidentity.com/api/v1.0/operations'\n  } = options;\n\n  return ProofOfWorkSDK.submitIonRequest(challengeEndpoint, solutionEndpoint, JSON.stringify(anchorRequest));\n};", "// @ts-check\n\nimport { 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", "import basex from '../../vendor/base-x.js'\nimport { coerce } from '../bytes.js'\n// Linter can't see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\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 *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.BaseEncoder}\n */\nclass Encoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   */\n  constructor (name, prefix, baseEncode) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n  }\n\n  /**\n   * @param {Uint8Array} bytes\n   * @returns {API.Multibase<Prefix>}\n   */\n  encode (bytes) {\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 * @template {string} Prefix\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 *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.UnibaseDecoder<Prefix>}\n * @implements {API.BaseDecoder}\n */\nclass Decoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseDecode) {\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    /** @private */\n    this.prefixCodePoint = /** @type {number} */ (prefix.codePointAt(0))\n    this.baseDecode = baseDecode\n  }\n\n  /**\n   * @param {string} text\n   */\n  decode (text) {\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  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n}\n\n/**\n * @template {string} Prefix\n * @typedef {Record<Prefix, API.UnibaseDecoder<Prefix>>} Decoders\n */\n\n/**\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.CombobaseDecoder<Prefix>}\n */\nclass ComposedDecoder {\n  /**\n   * @param {Decoders<Prefix>} decoders\n   */\n  constructor (decoders) {\n    this.decoders = decoders\n  }\n\n  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n\n  /**\n   * @param {string} input\n   * @returns {Uint8Array}\n   */\n  decode (input) {\n    const prefix = /** @type {Prefix} */ (input[0])\n    const decoder = this.decoders[prefix]\n    if (decoder) {\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\n/**\n * @template {string} L\n * @template {string} R\n * @param {API.UnibaseDecoder<L>|API.CombobaseDecoder<L>} left\n * @param {API.UnibaseDecoder<R>|API.CombobaseDecoder<R>} right\n * @returns {ComposedDecoder<L|R>}\n */\nexport const or = (left, right) => new ComposedDecoder(/** @type {Decoders<L|R>} */({\n  ...(left.decoders || { [/** @type API.UnibaseDecoder<L> */(left).prefix]: left }),\n  ...(right.decoders || { [/** @type API.UnibaseDecoder<R> */(right).prefix]: right })\n}))\n\n/**\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseCodec<Prefix>}\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.BaseCodec}\n * @implements {API.BaseEncoder}\n * @implements {API.BaseDecoder}\n */\nexport class Codec {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseEncode, baseDecode) {\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  /**\n   * @param {Uint8Array} input\n   */\n  encode (input) {\n    return this.encoder.encode(input)\n  }\n\n  /**\n   * @param {string} input\n   */\n  decode (input) {\n    return this.decoder.decode(input)\n  }\n}\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {(bytes:Uint8Array) => string} options.encode\n * @param {(input:string) => Uint8Array} options.decode\n * @returns {Codec<Base, Prefix>}\n */\nexport const from = ({ name, prefix, encode, decode }) =>\n  new Codec(name, prefix, encode, decode)\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @returns {Codec<Base, Prefix>}\n */\nexport const baseX = ({ prefix, name, alphabet }) => {\n  const { encode, decode } = basex(alphabet, name)\n  return from({\n    prefix,\n    name,\n    encode,\n    /**\n     * @param {string} text\n     */\n    decode: text => coerce(decode(text))\n  })\n}\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @param {string} name\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar, name) => {\n  // Build the character lookup table:\n  /** @type {Record<string, number>} */\n  const codes = {}\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))) {\n    throw new SyntaxError('Unexpected end of data')\n  }\n\n  return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\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) {\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) {\n      out += '='\n    }\n  }\n\n  return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @param {number} options.bitsPerChar\n */\nexport const rfc4648 = ({ name, prefix, bitsPerChar, alphabet }) => {\n  return from({\n    prefix,\n    name,\n    encode (input) {\n      return encode(input, alphabet, bitsPerChar)\n    },\n    decode (input) {\n      return decode(input, alphabet, bitsPerChar, name)\n    }\n  })\n}\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.\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  function encode (source) {\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  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  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", "const empty = new Uint8Array(0)\n\n/**\n * @param {Uint8Array} d\n */\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n\n/**\n * @param {string} hex\n */\nconst fromHex = hex => {\n  const hexes = hex.match(/../g)\n  return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\n/**\n * @param {Uint8Array} aa\n * @param {Uint8Array} bb\n */\nconst equals = (aa, bb) => {\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\n/**\n * @param {ArrayBufferView|ArrayBuffer|Uint8Array} o\n * @returns {Uint8Array}\n */\nconst coerce = o => {\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\n/**\n * @param {any} o\n * @returns {o is ArrayBuffer|ArrayBufferView}\n */\nconst isBinary = o =>\n  o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nconst fromString = str => (new TextEncoder()).encode(str)\n\n/**\n * @param {Uint8Array} b\n * @returns {string}\n */\nconst toString = b => (new TextDecoder()).decode(b)\n\nexport { equals, coerce, isBinary, fromHex, toHex, fromString, toString, empty }\n", "// this is dummy module overlayed by interface.ts\n", "/* global crypto */\n\nimport { from } from './hasher.js'\n\n/**\n * @param {AlgorithmIdentifier} name\n */\nconst sha = name =>\n  /**\n   * @param {Uint8Array} data\n   */\n  async data => new Uint8Array(await crypto.subtle.digest(name, data))\n\nexport const sha256 = from({\n  name: 'sha2-256',\n  code: 0x12,\n  encode: sha('SHA-256')\n})\n\nexport const sha512 = from({\n  name: 'sha2-512',\n  code: 0x13,\n  encode: sha('SHA-512')\n})\n", "import * as Digest from './digest.js'\n\n/**\n * @template {string} Name\n * @template {number} Code\n * @param {object} options\n * @param {Name} options.name\n * @param {Code} options.code\n * @param {(input: Uint8Array) => Await<Uint8Array>} options.encode\n */\nexport const from = ({ name, code, encode }) => new Hasher(name, code, encode)\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n *\n * @template {string} Name\n * @template {number} Code\n * @class\n * @implements {MultihashHasher<Code>}\n */\nexport class Hasher {\n  /**\n   *\n   * @param {Name} name\n   * @param {Code} code\n   * @param {(input: Uint8Array) => Await<Uint8Array>} encode\n   */\n  constructor (name, code, encode) {\n    this.name = name\n    this.code = code\n    this.encode = encode\n  }\n\n  /**\n   * @param {Uint8Array} input\n   * @returns {Await<Digest.Digest<Code, number>>}\n   */\n  digest (input) {\n    if (input instanceof Uint8Array) {\n      const result = this.encode(input)\n      return result instanceof Uint8Array\n        ? Digest.create(this.code, result)\n        /* c8 ignore next 1 */\n        : result.then(digest => Digest.create(this.code, digest))\n    } else {\n      throw Error('Unknown type, must be binary type')\n      /* c8 ignore next 1 */\n    }\n  }\n}\n\n/**\n * @template {number} Alg\n * @typedef {import('./interface.js').MultihashHasher} MultihashHasher\n */\n\n/**\n * @template T\n * @typedef {Promise<T>|T} Await\n */\n", "import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\n\n/**\n * Creates a multihash digest.\n *\n * @template {number} Code\n * @param {Code} code\n * @param {Uint8Array} digest\n */\nexport const create = (code, digest) => {\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 *\n * @param {Uint8Array} multihash\n * @returns {MultihashDigest}\n */\nexport const decode = (multihash) => {\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\n/**\n * @param {MultihashDigest} a\n * @param {unknown} b\n * @returns {b is MultihashDigest}\n */\nexport const equals = (a, b) => {\n  if (a === b) {\n    return true\n  } else {\n    const data = /** @type {{code?:unknown, size?:unknown, bytes?:unknown}} */(b)\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 * @typedef {import('./interface.js').MultihashDigest} MultihashDigest\n */\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n *\n * @template {number} Code\n * @template {number} Size\n * @class\n * @implements {MultihashDigest}\n */\nexport class Digest {\n  /**\n   * Creates a multihash digest.\n   *\n   * @param {Code} code\n   * @param {Size} size\n   * @param {Uint8Array} digest\n   * @param {Uint8Array} bytes\n   */\n  constructor (code, size, digest, bytes) {\n    this.code = code\n    this.size = size\n    this.digest = digest\n    this.bytes = bytes\n  }\n}\n", "import varint from '../vendor/varint.js'\n\n/**\n * @param {Uint8Array} data\n * @param {number} [offset=0]\n * @returns {[number, number]}\n */\nexport const decode = (data, offset = 0) => {\n  const code = varint.decode(data, offset)\n  return [code, varint.decode.bytes]\n}\n\n/**\n * @param {number} int\n * @param {Uint8Array} target\n * @param {number} [offset=0]\n */\nexport const encodeTo = (int, target, offset = 0) => {\n  varint.encode(int, target, offset)\n  return target\n}\n\n/**\n * @param {number} int\n * @returns {number}\n */\nexport const encodingLength = (int) => {\n  return varint.encodingLength(int)\n}\n", "var encode_1 = encode;\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31);\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  encode.bytes = offset - oldOffset + 1;\n  \n  return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n  , REST$1 = 0x7F;\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      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  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 (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 type { KeyPair, Jwk, PublicKeyJwk, PrivateKeyJwk, KeyPairJwk } from './types.js';\n\nimport nacl from 'tweetnacl';\nimport ed2curve from 'ed2curve';\nimport { base64UrlToBytes, bytesToBase64Url } from './utils.js';\n\n// TODO: (not important) decide if we want to use tweetnacl or @noble/ed25519. is there a functional difference?\n//       dwn-sdk-js also has ed25519 cryptosuite stuff\n\nexport function generateKeyPair(): KeyPair {\n  const ed25519KeyPair = nacl.sign.keyPair();\n\n  return { publicKey: ed25519KeyPair.publicKey, privateKey: ed25519KeyPair.secretKey };\n}\n\nexport function deriveX25519KeyPair(ed25519KeyPair: KeyPair): KeyPair {\n  // for some reason tweetnacl chose the term `secretKey` instead of `privateKey` even though ed25519 is asymmetric\n  const x25519KeyPair = ed2curve.convertKeyPair({ publicKey: ed25519KeyPair.publicKey, secretKey: ed25519KeyPair.privateKey });\n\n  // apparently the return value of `convertKeyPair` can return null\n  if (!x25519KeyPair) {\n    throw new Error('failed to derive x25519 key pair.');\n  }\n\n  return { publicKey: x25519KeyPair.publicKey, privateKey: x25519KeyPair.secretKey };\n}\n\nexport type JwkOverrides = { crv: 'Ed25519' | 'X25519' };\n\nexport function keyPairToJwk(keyPair: KeyPair, kid: string, overrides: JwkOverrides = { crv: 'Ed25519' }): KeyPairJwk {\n  const jwk: Jwk = { kty: 'OKP', crv: overrides.crv, kid };\n\n  const encodedPublicKey = bytesToBase64Url(keyPair.publicKey);\n  const publicKeyJwk: PublicKeyJwk = { ...jwk, x: encodedPublicKey };\n\n  const encodedSecretKey = bytesToBase64Url(keyPair.privateKey);\n  const privateKeyJwk: PrivateKeyJwk = { ...publicKeyJwk, d: encodedSecretKey };\n\n  return { publicKeyJwk, privateKeyJwk };\n}\n\nexport type SignOptions = {\n  /** the data being signed */\n  payload: Uint8Array;\n  /** the key being used to sign */\n  privateKeyJwk: PrivateKeyJwk;\n};\n\nexport function sign(options: SignOptions) {\n  const { payload, privateKeyJwk } = options;\n  const privateKeyBytes = base64UrlToBytes(privateKeyJwk.d);\n\n  if (privateKeyJwk.crv !== 'Ed25519') {\n    throw new Error('crv must be Ed25519');\n  }\n\n  const signedData = nacl.sign(payload, privateKeyBytes);\n\n  return signedData.slice(0, nacl.sign.signatureLength);\n}\n\nexport type VerifyOptions = {\n  /** the signature to verify */\n  signature: Uint8Array;\n  /** the payload that was signed */\n  payload: Uint8Array;\n  /** the key to verify the signature with */\n  publicKeyJwk: PublicKeyJwk;\n}\n\nexport async function verify(options: VerifyOptions) {\n  const { signature, payload, publicKeyJwk } = options;\n  const publicKeyBytes = base64UrlToBytes(publicKeyJwk.x);\n\n  if (publicKeyJwk.crv !== 'Ed25519') {\n    throw new Error('crv must be Ed25519');\n  }\n\n  const signedData = new Uint8Array(signature.length + payload.length);\n  signedData.set(signature);\n  signedData.set(payload, signature.length);\n\n  const result = nacl.sign.open(signedData, publicKeyBytes);\n\n\n  return !!result;\n}", "import { base64url } from 'multiformats/bases/base64';\nimport { base58btc } from 'multiformats/bases/base58';\n\n\n// See https://github.com/multiformats/multicodec/blob/master/table.csv\nexport const MULTICODEC_HEADERS = {\n  ED25519: {\n    PUB  : new Uint8Array([0xed, 0x01]),\n    PRIV : new Uint8Array([0x80, 0x26])\n  },\n  X25519: {\n    PUB  : new Uint8Array([0xec, 0x01]),\n    PRIV : new Uint8Array([0x82, 0x26])\n  },\n  NOOP: new Uint8Array([])\n};\n\n\nexport function bytesToBase64Url(bytes: Uint8Array): string {\n  return base64url.baseEncode(bytes);\n}\n\nexport function base64UrlToBytes(base64urlString: string): Uint8Array {\n  return base64url.baseDecode(base64urlString);\n}\n\nexport function bytesToBase58btcMultibase(header: Uint8Array, bytes: Uint8Array): string {\n  const multibaseBytes = new Uint8Array(header.length + bytes.length);\n  multibaseBytes.set(header);\n  multibaseBytes.set(bytes, header.length);\n\n  return base58btc.encode(multibaseBytes);\n}", "import type { PublicKeyJwk, PrivateKeyJwk } from '@tbd54566975/crypto';\nimport type { DidResolutionResult, DidMethodResolver, DidMethodCreator, DidState, DwnServiceEndpoint, DidDocument } from './types.js';\n\nimport { DID, generateKeyPair } from '@decentralized-identity/ion-tools';\n\nexport type DidIonCreateOptions = {\n  keys?: KeyOption[];\n  services?: ServiceOption[];\n};\n\nexport type ServiceOption = {\n  id: string;\n  type: string;\n  serviceEndpoint: string | DwnServiceEndpoint;\n}\n\nexport type KeyOption = {\n  id: string;\n  type: string;\n  keyPair: {\n    publicJwk: PublicKeyJwk;\n    privateJwk: PrivateKeyJwk;\n  },\n  purposes: string[];\n}\n\nexport class DidIonApi implements DidMethodResolver, DidMethodCreator {\n  /**\n   * @param resolutionEndpoint optional custom URL to send DID resolution request to\n   */\n  constructor (private resolutionEndpoint: string = 'https://discover.did.msidentity.com/1.0/identifiers/') {}\n\n  get methodName() {\n    return 'ion';\n  }\n\n  // TODO: discuss. need to normalize what's returned from `create`. DidIon.create and DidKey.create return different things.\n  async create(options: DidIonCreateOptions = {}): Promise<DidState> {\n    options.keys ||= [\n      {\n        id       : 'dwn',\n        type     : 'JsonWebKey2020',\n        keyPair  : await generateKeyPair(),\n        purposes : ['authentication'],\n      },\n    ];\n\n    const didOptions: any = { publicKeys: [] };\n    if (options.services) {\n      didOptions.services = options.services;\n    }\n\n    for (let key of options.keys) {\n      const publicKey: any = { ...key };\n\n      publicKey.publicKeyJwk = key.keyPair.publicJwk;\n      delete publicKey.keyPair;\n\n      didOptions.publicKeys.push(publicKey);\n    }\n\n    const did = new DID({ content: didOptions });\n    const didState = {\n      id         : await did.getURI(),\n      internalId : await did.getURI('short'),\n      methodData : await did.getAllOperations(),\n    };\n\n    // TODO: Migrate this to a utility function that generates a DID document given DidState.\n    // TODO: Add tests to DID Document generation function to ensure that it produces results identical to DidResolver.\n    // TODO: Ensure both DID ION and KEY do this consistently.\n    const didDocument: DidDocument = {\n      '@context'         : 'https://www.w3.org/ns/did/v1',\n      id                 : didState.id,\n      verificationMethod : [],\n    };\n\n    for (let key of didState.methodData[0].content.publicKeys) {\n      const verificationMethod = {\n        id           : `#${key.id}`,\n        controller   : didState.id,\n        type         : key.type,\n        publicKeyJwk : key.publicKeyJwk\n      };\n      didDocument.verificationMethod.push(verificationMethod);\n\n      for (let purpose of key.purposes) {\n        if (didDocument[purpose]) {\n          didDocument[purpose].push(key.id);\n        } else {\n          didDocument[purpose] = [`#${key.id}`];\n        }\n      }\n    }\n\n    for (let service of didState.methodData[0]?.content?.services || []) {\n      const serviceEntry = {\n        id              : `#${service.id}`,\n        type            : service.type,\n        serviceEndpoint : { ...service.serviceEndpoint }\n      };\n      if (didDocument.service) {\n        didDocument.service.push(serviceEntry);\n      } else {\n        didDocument.service = [serviceEntry];\n      }\n    }\n\n    const keys = [];\n    for (let keyOption of options.keys) {\n      const key = {\n        id            : `${didState.id}#${keyOption.id}`,\n        type          : keyOption.type,\n        controller    : didState.id,\n        publicKeyJwk  : keyOption.keyPair.publicJwk,\n        privateKeyJwk : keyOption.keyPair.privateJwk\n      };\n\n      keys.push(key);\n    }\n\n    return {\n      id          : didState.id,\n      internalId  : didState.internalId,\n      didDocument : didDocument,\n      methodData  : didState.methodData,\n      keys        : keys  // TODO: Remove keys once KeyManager/KeyStore implemented since everything BUT privateKeyJwk is already in the returned didDocument.\n    };\n  }\n\n  async resolve(did: string): Promise<DidResolutionResult> {\n    // TODO: Support resolutionOptions as defined in https://www.w3.org/TR/did-core/#did-resolution\n    // using `URL` constructor to handle both existence and absence of trailing slash '/' in resolution endpoint\n    // appending './' to DID so 'did' in 'did:ion:abc' doesn't get interpreted as a URL scheme (e.g. like 'http') due to the colon\n    // TODO: Add tests to ensure that the scenarios this contemplated are checked.\n    const resolutionUrl = new URL('./' + did, this.resolutionEndpoint).toString();\n    const response = await fetch(resolutionUrl);\n\n    // TODO: Replace with check of resonse.ok to catch other 2XX codes.\n    if (response.status !== 200) {\n      throw new Error(`unable to resolve ${did}, got http status ${response.status}`);\n    }\n\n    const didResolutionResult = await response.json();\n    return didResolutionResult;\n  }\n\n  /**\n   * Generates two key pairs used for authorization and encryption purposes\n   * when interfacing with DWNs. The IDs of these keys are referenced in the\n   * service object that includes the dwnUrls provided.\n   */\n  async generateDwnConfiguration(dwnUrls: string[]): Promise<DidIonCreateOptions> {\n    return DidIonApi.generateDwnConfiguration(dwnUrls);\n  }\n\n  /**\n   * Generates two key pairs used for authorization and encryption purposes\n   * when interfacing with DWNs. The IDs of these keys are referenced in the\n   * service object that includes the dwnUrls provided.\n   */\n  static async generateDwnConfiguration(dwnUrls: string[]): Promise<DidIonCreateOptions> {\n    const keys = [{\n      id       : 'authz',\n      type     : 'JsonWebKey2020',\n      keyPair  : await generateKeyPair('secp256k1'),\n      purposes : ['authentication'],\n    }, {\n      id       : 'enc',\n      type     : 'JsonWebKey2020',\n      keyPair  : await generateKeyPair('secp256k1'),\n      purposes : ['keyAgreement'],\n    }];\n\n    const services = [{\n      'id'              : 'dwn',\n      'type'            : 'DecentralizedWebNode',\n      'serviceEndpoint' : {\n        'nodes'                    : dwnUrls,\n        'messageAuthorizationKeys' : ['#authz'],\n        'recordEncryptionKeys'     : ['#enc']\n      }\n    }];\n\n    return { keys, services };\n  }\n}", "import { ed25519, utils } from '@tbd54566975/crypto';\nimport { DidKeyResolver } from '@tbd54566975/dwn-sdk-js';\nimport { createVerificationMethodWithPrivateKeyJwk } from './utils.js';\nimport { DidMethodCreator, DidMethodResolver, DidState } from './types.js';\n\nconst didKeyResolver = new DidKeyResolver();\n\nexport type DidKeyOptions = never;\n\n//! i know dwn-sdk-js has a resolver that includes both creation and resolving. but they're slightly different and we really\n//! need to settle on what the normalized result of did creation is.\n\nexport class DidKeyApi implements DidMethodResolver, DidMethodCreator {\n  get methodName() {\n    return 'key';\n  }\n\n  async create(_options: any = {}): Promise<DidState> {\n    // Generate new sign key pair.\n    const verificationKeyPair = ed25519.generateKeyPair();\n    const keyAgreementKeyPair = ed25519.deriveX25519KeyPair(verificationKeyPair);\n\n    const verificationKeyId = utils.bytesToBase58btcMultibase(utils.MULTICODEC_HEADERS.ED25519.PUB, verificationKeyPair.publicKey);\n    const keyAgreementKeyId = utils.bytesToBase58btcMultibase(utils.MULTICODEC_HEADERS.X25519.PUB, keyAgreementKeyPair.publicKey);\n\n    const id = `did:key:${verificationKeyId}`;\n\n    const verificationJwkPair = ed25519.keyPairToJwk(verificationKeyPair, verificationKeyId);\n    const verificationKey = createVerificationMethodWithPrivateKeyJwk(id, verificationJwkPair);\n\n    const keyAgreementJwkPair = ed25519.keyPairToJwk(keyAgreementKeyPair, keyAgreementKeyId, { crv: 'X25519' });\n    const keyAgreementKey = createVerificationMethodWithPrivateKeyJwk(id, keyAgreementJwkPair);\n\n    return {\n      id,\n      internalId : id,\n      // didDocument : {},  //! TODO: Add DidDocument to object returned.\n      keys       : [verificationKey, keyAgreementKey],\n      methodData : {}\n    };\n  }\n\n  resolve(did: string) {\n    // TODO: Support resolutionOptions as defined in https://www.w3.org/TR/did-core/#did-resolution\n    // TODO: move did:key resolving logic to this package. resolved Did Doc does **not** include keyAgreement\n    return didKeyResolver.resolve(did);\n  }\n}\n\n", "import type { KeyPairJwk } from '@tbd54566975/crypto';\nimport type { DidDocument, VerificationMethodWithPrivateKeyJwk, ServiceEndpoint } from './types.js';\n\nexport type ParsedDid = {\n  method: string;\n  id: string;\n}\n\nexport function parseDid(did: string): ParsedDid {\n  if (!DID_REGEX.test(did)) {\n    throw new Error('Invalid DID');\n  }\n\n  const [didString,] = did.split('#');\n  const [, method, id] = didString.split(':', 3);\n\n  return { method, id };\n}\n\nexport function createVerificationMethodWithPrivateKeyJwk(id: string, keyPairJwk: KeyPairJwk): VerificationMethodWithPrivateKeyJwk {\n  const { publicKeyJwk, privateKeyJwk } = keyPairJwk;\n\n  return {\n    id         : `${id}#${keyPairJwk.publicKeyJwk.kid}`,\n    type       : 'JsonWebKey2020',\n    controller : id,\n    publicKeyJwk,\n    privateKeyJwk\n  };\n}\n\nexport type GetServicesOptions = {\n  id?: string;\n  type?: string;\n};\n\n/**\n * returns services from the provided DID Document based on the filter. will return all services if no filter is provided\n * @param didDocument the did document to search\n * @param options search filter\n * @returns matched services\n */\nexport function getServices(didDocument: DidDocument, options: GetServicesOptions = {}): ServiceEndpoint[] {\n  return didDocument?.service?.filter(service => {\n    if (options?.id && service.id !== options.id) return false;\n    if (options?.type && service.type !== options.type) return false;\n    return true;\n  }) ?? [ ];\n}\n\nexport const DID_REGEX = /^did:([a-z0-9]+):((?:(?:[a-zA-Z0-9._-]|(?:%[0-9a-fA-F]{2}))*:)*((?:[a-zA-Z0-9._-]|(?:%[0-9a-fA-F]{2}))+))((;[a-zA-Z0-9_.:%-]+=[a-zA-Z0-9_.:%-]*)*)(\\/[^#?]*)?([?][^#]*)?(#.*)?$/;\n", "import type { DidResolutionResult, DidResolverCache } from './types.js';\n\n/**\n * no-op cache that is used as the default cache for did-resolver.\n * The motivation behind using a no-op cache as the default stems from\n * the desire to maximize the potential for this library to be used\n * in as many JS runtimes as possible\n */\nexport const nopCache: DidResolverCache = {\n  get: function (_key: string): Promise<DidResolutionResult> {\n    return;\n  },\n  set: function (_key: string, _value: DidResolutionResult): Promise<void> {\n    return;\n  },\n  delete: function (_key: string): Promise<void> {\n    return;\n  },\n  clear: function (): Promise<void> {\n    return;\n  },\n  close: function (): Promise<void> {\n    return;\n  }\n};", "import type { DidResolutionResult, DidMethodResolver, DidResolverCache } from './types.js';\n\nimport { parseDid } from './utils.js';\nimport { nopCache } from './nop-cache.js';\n\nexport type DidResolverOptions = {\n  methodResolvers: DidMethodResolver[];\n  cache?: DidResolverCache;\n}\n\nexport class DidResolver {\n  cache: DidResolverCache;\n  methodResolverMap: Map<string, DidMethodResolver> = new Map();\n\n  constructor(options: DidResolverOptions) {\n    this.cache = options.cache || nopCache;\n\n    for (let methodResolver of options.methodResolvers) {\n      this.methodResolverMap.set(methodResolver.methodName, methodResolver);\n    }\n  }\n\n  async resolve(did: string): Promise<DidResolutionResult> {\n    // TODO: Support resolutionOptions as defined in https://www.w3.org/TR/did-core/#did-resolution\n    const { method } = parseDid(did);\n    const resolver = this.methodResolverMap.get(method);\n\n    if (!resolver) {\n      throw new Error(`no resolver for ${method}`);\n    }\n\n    const cachedResolution = await this.cache.get(did);\n\n    if (cachedResolution) {\n      return cachedResolution;\n    } else {\n      const didResolutionResult = await resolver.resolve(did);\n      await this.cache.set(did, didResolutionResult);\n\n      return didResolutionResult;\n    }\n  }\n}", "import type { DwnServiceEndpoint } from '@tbd54566975/dids';\nimport {\n  DataStream,\n  SignatureInput,\n  MessagesGetReply,\n  RecordsReadReply,\n  UnionMessageReply,\n  RecordsWriteMessage,\n  RecordsWriteOptions,\n  PrivateJwk as DwnPrivateKeyJwk,\n} from '@tbd54566975/dwn-sdk-js';\n\nimport { Readable } from 'readable-stream';\nimport {\n  DwnRpc,\n  Web5Agent,\n  DwnResponse,\n  DwnRpcRequest,\n  SendDwnRequest,\n  ProcessDwnRequest,\n} from '@tbd54566975/web5-agent';\n\nimport {\n  Cid,\n  Encoder,\n  Message,\n} from '@tbd54566975/dwn-sdk-js';\n\nimport type { SyncManager } from './sync-manager.js';\nimport type { ProfileManager } from './profile-manager.js';\n\nimport { DidResolver, DidIonApi, DidKeyApi, utils as didUtils } from '@tbd54566975/dids';\nimport {\n  Dwn,\n  EventsGet,\n  RecordsRead,\n  MessagesGet,\n  RecordsWrite,\n  RecordsQuery,\n  RecordsDelete,\n  DwnMethodName,\n  ProtocolsQuery,\n  DwnInterfaceName,\n  ProtocolsConfigure,\n} from '@tbd54566975/dwn-sdk-js';\n\nimport { ProfileApi } from './profile-api.js';\nimport { DwnRpcClient } from './dwn-rpc-client.js';\nimport { blobToIsomorphicNodeReadable, webReadableToIsomorphicNodeReadable } from './utils.js';\n\n// TODO: allow user to provide optional array of DwnRpc implementations once DwnRpc has been moved out of this package\nexport type Web5UserAgentOptions = {\n  dwn: Dwn;\n  profileManager: ProfileManager;\n  didResolver: DidResolver;\n  syncManager?: SyncManager;\n};\n\ntype DwnMessage = {\n  message: any;\n  data?: Blob;\n}\n\nconst dwnMessageCreators = {\n  [DwnInterfaceName.Events + DwnMethodName.Get]          : EventsGet,\n  [DwnInterfaceName.Messages + DwnMethodName.Get]        : MessagesGet,\n  [DwnInterfaceName.Records + DwnMethodName.Read]        : RecordsRead,\n  [DwnInterfaceName.Records + DwnMethodName.Query]       : RecordsQuery,\n  [DwnInterfaceName.Records + DwnMethodName.Write]       : RecordsWrite,\n  [DwnInterfaceName.Records + DwnMethodName.Delete]      : RecordsDelete,\n  [DwnInterfaceName.Protocols + DwnMethodName.Query]     : ProtocolsQuery,\n  [DwnInterfaceName.Protocols + DwnMethodName.Configure] : ProtocolsConfigure,\n};\n\nexport class Web5UserAgent implements Web5Agent {\n  private dwn: Dwn;\n  private profileManager: ProfileManager;\n  private didResolver: DidResolver;\n  private dwnRpcClient: DwnRpc;\n  private syncManager: SyncManager;\n\n  constructor(options: Web5UserAgentOptions) {\n    this.dwn = options.dwn;\n    this.didResolver = options.didResolver;\n    this.profileManager = options.profileManager;\n    this.dwnRpcClient = new DwnRpcClient();\n\n    if (options.syncManager) {\n      this.syncManager = options.syncManager;\n    }\n  }\n\n  /**\n   * TODO: add jsdoc\n   * @param options\n   * @returns\n   */\n  static async create(options: Partial<Web5UserAgentOptions>) {\n    options.dwn ||= await Dwn.create();\n    options.profileManager ||= new ProfileApi();\n    options.didResolver ||= new DidResolver({ methodResolvers: [new DidIonApi(), new DidKeyApi()] });\n\n    return new Web5UserAgent(options as Web5UserAgentOptions);\n  }\n\n  /**\n   * TODO: add jsdoc\n   * @param message\n   * @returns\n   */\n  async processDwnRequest(request: ProcessDwnRequest): Promise<DwnResponse> {\n    const { message, dataStream }= await this.#constructDwnMessage(request);\n\n    let reply: UnionMessageReply;\n    if (request.store !== false) {\n      reply = await this.dwn.processMessage(request.target, message, dataStream as any);\n    } else {\n      reply = { status: { code: 202, detail: 'Accepted' }};\n    }\n\n    return {\n      reply,\n      message    : message,\n      messageCid : await Message.getCid(message)\n    };\n  }\n\n  async sendDwnRequest(request: SendDwnRequest): Promise<DwnResponse> {\n    const dwnRpcRequest: Partial<DwnRpcRequest> = { targetDid: request.target };\n    let messageData;\n\n    if ('messageCid' in request) {\n      const { message, data } =  await this.#getDwnMessage(request.author, request.messageType, request.messageCid);\n\n      dwnRpcRequest.message = message;\n      messageData = data;\n    } else {\n      const { message } = await this.#constructDwnMessage(request);\n      dwnRpcRequest.message = message;\n      messageData = request.dataStream;\n    }\n\n    if (messageData) {\n      dwnRpcRequest.data = messageData;\n    }\n\n    const didResolution = await this.didResolver.resolve(request.target);\n    if (!didResolution.didDocument) {\n      if (didResolution.didResolutionMetadata?.error) {\n        throw new Error(`DID resolution error: ${didResolution.didResolutionMetadata.error}`);\n      } else {\n        throw new Error('DID resolution error: figure out error message');\n      }\n    }\n\n    const [ service ] = didUtils.getServices(didResolution.didDocument, { id: '#dwn' });\n    if (!service) {\n      throw new Error(`${request.target} has no '#dwn' service endpoints`);\n    }\n\n    const { serviceEndpoint } = service;\n    if (!serviceEndpoint['nodes']) {\n      throw new Error(`malformed '#dwn' service endpoint. expected nodes array`);\n    }\n\n    const { nodes } = serviceEndpoint as DwnServiceEndpoint;\n    let dwnReply;\n    let errorMessages = [];\n\n    // try sending to author's publicly addressable dwn's until first request succeeds.\n    for (let node of nodes) {\n      dwnRpcRequest.dwnUrl = node;\n\n      try {\n        dwnReply = await this.dwnRpcClient.sendDwnRequest(dwnRpcRequest as DwnRpcRequest);\n        break;\n      } catch(e) {\n        errorMessages.push({ url: node, message: e.message });\n      }\n    }\n\n    if (!dwnReply) {\n      throw new Error(JSON.stringify(errorMessages));\n    }\n\n    return {\n      message    : dwnRpcRequest.message,\n      messageCid : await Message.getCid(dwnRpcRequest.message),\n      reply      : dwnReply,\n    };\n  }\n\n  async #getDwnMessage(author: string, messageType: string, messageCid: string): Promise<DwnMessage> {\n    const dwnSignatureInput = await this.#getAuthorSignatureInput(author);\n    const messagesGet = await MessagesGet.create({\n      authorizationSignatureInput : dwnSignatureInput,\n      messageCids                 : [messageCid]\n    });\n\n    const result: MessagesGetReply = await this.dwn.processMessage(author, messagesGet.toJSON());\n    const [ messageEntry ] = result.messages;\n\n    if (!messageEntry) {\n      throw new Error('TODO: figure out error message');\n    }\n\n    let { message } = messageEntry;\n    if (!message) {\n      throw new Error('TODO: message not found');\n    }\n\n    let dwnMessage: DwnMessage = { message };\n\n    // if the message is a RecordsWrite, either data will be present, OR we have to fetch it using a RecordsRead\n    if (messageType === 'RecordsWrite') {\n      const { encodedData } = messageEntry;\n      message = message as RecordsWriteMessage;\n\n      if (encodedData) {\n        const dataBytes = Encoder.base64UrlToBytes(encodedData);\n        dwnMessage.data = new Blob([dataBytes]);\n      } else {\n        const recordsRead = await RecordsRead.create({\n          authorizationSignatureInput : dwnSignatureInput,\n          recordId                    : message['recordId']\n        });\n\n        const reply = await this.dwn.processMessage(author, recordsRead.toJSON()) as RecordsReadReply;\n\n        if (reply.status.code >= 400) {\n          const { status: { code, detail } } = reply;\n          throw new Error(`(${code}) Failed to read data associated with record ${message['recordId']}. ${detail}}`);\n        } else {\n          const dataBytes = await DataStream.toBytes(reply.record.data);\n          dwnMessage.data = new Blob([dataBytes]);\n        }\n      }\n    }\n\n    return dwnMessage;\n  }\n\n  async #constructDwnMessage(request: ProcessDwnRequest) {\n    const dwnSignatureInput = await this.#getAuthorSignatureInput(request.author);\n    let readableStream: Readable;\n\n    // TODO: Consider refactoring to move data transformations imposed by fetch() limitations to the HTTP transport-related methods.\n    if (request.messageType === 'RecordsWrite') {\n      const messageOptions = request.messageOptions as RecordsWriteOptions;\n\n      if (request.dataStream && !messageOptions.data) {\n        const { dataStream } = request;\n        let isomorphicNodeReadable: Readable;\n\n        if (dataStream instanceof Blob) {\n          isomorphicNodeReadable = blobToIsomorphicNodeReadable(dataStream);\n\n          readableStream = blobToIsomorphicNodeReadable(dataStream);\n        } else if (dataStream instanceof ReadableStream) {\n          const [ forCid, forProcessMessage ] = dataStream.tee();\n\n          isomorphicNodeReadable = webReadableToIsomorphicNodeReadable(forCid);\n          readableStream = webReadableToIsomorphicNodeReadable(forProcessMessage);\n        }\n\n        messageOptions.dataCid = await Cid.computeDagPbCidFromStream(isomorphicNodeReadable);\n        messageOptions.dataSize ??= isomorphicNodeReadable['bytesRead'];\n      }\n    }\n\n    // TODO: Figure out how to narrow this type. may have figured something out in `web5.DidInterface`\n    const messageCreateInput = {\n      ...<any>request.messageOptions,\n      authorizationSignatureInput: dwnSignatureInput\n    };\n\n    const messageCreator = dwnMessageCreators[request.messageType];\n    const dwnMessage = await messageCreator.create(messageCreateInput as any);\n\n    return { message: dwnMessage.toJSON(), dataStream: readableStream };\n  }\n\n  /**\n   * constructs signature input required to sign DWeb Messages\n   * @param authorDid\n   * @returns {SignatureInput}\n   */\n  async #getAuthorSignatureInput(authorDid: string): Promise<SignatureInput> {\n    const profile = await this.profileManager.getProfile(authorDid);\n\n    if (!profile) {\n      throw new Error('profile not found for author.');\n    }\n\n    const { keys } = profile.did;\n    const [ key ] = keys;\n    const { privateKeyJwk } = key;\n\n    // TODO: make far less naive\n    const kidFragment = privateKeyJwk.kid || key.id;\n    const kid = `${profile.did.id}#${kidFragment}`;\n\n    const dwnSignatureInput: SignatureInput = {\n      privateJwk      : <DwnPrivateKeyJwk>privateKeyJwk,\n      protectedHeader : { alg: privateKeyJwk.crv, kid }\n    };\n\n    return dwnSignatureInput;\n  }\n}", "import type { Filter, QueryStore } from '@tbd54566975/web5-agent';\nimport type { Profile } from './profile-manager.js';\n\nimport { Level } from 'level';\n\nimport { ProfileIndex } from './profile-index.js';\n// TODO: refactor to use another underlying datastore\n\nexport type ProfileStoreOptions = {\n  location?: string;\n  indexLocation?: string;\n};\nexport class ProfileStore implements QueryStore<Profile> {\n  private db: Level;\n  private index: ProfileIndex;\n\n  private static _defaultOptions = {\n    location      : 'data/agent/profiles',\n    indexLocation : 'data/agent/profiles-index'\n  };\n\n  constructor(options: ProfileStoreOptions = {}) {\n    options = { ...ProfileStore._defaultOptions, ...options };\n\n    this.db = new Level(options.location);\n    this.index = new ProfileIndex(options.indexLocation);\n  }\n\n  async put(entry: Profile): Promise<void> {\n    const key = this.generateKey(entry.id);\n    const value = JSON.stringify(entry);\n\n    await this.db.put(key, value);\n    await this.index.put(entry);\n  }\n\n  async get(id: string): Promise<Profile | undefined> {\n    const key = this.generateKey(id);\n\n    try {\n      const value = await this.db.get(key);\n\n      return JSON.parse(value);\n    } catch(e: any) {\n      if (e.code === 'LEVEL_NOT_FOUND') {\n        return undefined;\n      }\n    }\n  }\n\n  async query(filter: Filter): Promise<Profile[]> {\n    const results = await this.index.query(filter);\n    const profiles = [];\n\n    const serializedProfiles = await this.db.getMany(results);\n    for (let serializedProfile of serializedProfiles) {\n      profiles.push(JSON.parse(serializedProfile));\n    }\n\n    return profiles;\n  }\n\n  async all(): Promise<Profile[]> {\n    const serializedProfiles = await this.db.values().all();\n    const profiles = [];\n\n    for (let serializedProfile of serializedProfiles) {\n      profiles.push(JSON.parse(serializedProfile));\n    }\n\n    return profiles;\n  }\n\n  async delete(): Promise<void> {\n    throw new Error('Method not implemented.');\n  }\n\n  async clear(): Promise<void> {\n    await this.index.clear();\n    await this.db.clear();\n\n    return;\n  }\n\n  async close(): Promise<void> {\n    await this.index.close();\n    await this.db.close();\n\n    return;\n  }\n\n  private generateKey(id: string) {\n    return `PROFILE_${id}`;\n  }\n\n}", "import type { AbstractBatchOperation, AbstractBatchDelOperation } from 'abstract-level';\n\nimport { Level } from 'level';\nimport flat from 'flat';\n\nconst { flatten } = flat;\n\nexport type Record = {\n  id: string,\n  [prop: string]: unknown\n};\n\nexport type RangeFilter = {\n  gt?: any,\n  gte?: any,\n  lt?: any,\n  lte?: any\n};\n\nexport type TermFilter = string | number | boolean\n\nexport type Filter = {\n  [prop: string]: TermFilter | TermFilter[] | RangeFilter\n}\n\nexport class ProfileIndex {\n  level: Level<string, string>;\n\n  constructor(private location = 'data/agent/profiles-index') {\n    this.level = new Level(location);\n  }\n\n  async delete(id: string): Promise<void> {\n    const ops: AbstractBatchDelOperation<typeof this.level, string>[] = [];\n\n    let keyPrefixes: string | string[] = await this.level.get(`__${id}__meta`);\n    if (!keyPrefixes) {\n      return;\n    }\n\n    keyPrefixes = keyPrefixes.split('@');\n\n    for (let keyPrefix of keyPrefixes) {\n      const op = { type: 'del' as const, key: `${keyPrefix}~${id}` };\n      ops.push(op);\n    }\n\n    ops.push({ type: 'del' as const, key: `__${id}__meta` });\n\n    await this.level.batch(ops);\n  }\n\n  async put(record: Record): Promise<void> {\n    const flattenedRecord: Record = flatten(record);\n    let { id } = flattenedRecord;\n\n    let keyPrefixes: string[] = [];\n    const ops: AbstractBatchOperation<typeof this.level, string, string>[] = [];\n    for (let property in flattenedRecord) {\n      if (property === 'id') {\n        continue;\n      }\n\n      const propVal = flattenedRecord[property];\n      const keyPrefix = `${property}~${propVal}`;\n      const key = `${keyPrefix}~${id}`;\n\n      ops.push({ type: 'put', key, value: id });\n      keyPrefixes.push(keyPrefix);\n    }\n\n    ops.push({ type: 'put', key: `__${id}__meta`, value: keyPrefixes.join('@')  });\n\n    await this.level.batch(ops);\n  }\n\n  async query(filter: Filter): Promise<Array<string>> {\n    const matches: { [docId: string]: number } = {};\n    const promises: Promise<void>[] = [];\n\n    for (let propertyName in filter) {\n      const propertyValue = filter[propertyName];\n\n      if (typeof propertyValue === 'object' && propertyValue !== null) {\n        if (Array.isArray(propertyValue)) {\n          // OR query\n          for (let value of propertyValue) {\n            const promise = this.buildTermQuery(propertyName, value, matches);\n            promises.push(promise);\n          }\n        } else {\n          const promise = this.buildRangeQuery(propertyName, propertyValue, matches);\n          promises.push(promise);\n        }\n      } else {\n        const promise = this.buildTermQuery(propertyName, propertyValue, matches);\n        promises.push(promise);\n      }\n    }\n\n    const numFilters = Object.keys(filter).length;\n    const docIds: string[] = [];\n    await Promise.all(promises);\n\n    for (let docId in matches) {\n      if (matches[docId] === numFilters) {\n        docIds.push(docId);\n      }\n    }\n\n    return docIds;\n  }\n\n  async buildTermQuery(propertyName: string, propertyValue: unknown, matches: { [docId: string]: number }): Promise<void> {\n    const key = `${propertyName}~${propertyValue}`;\n    const iteratorOptions = {\n      gt: `${key}~`\n    };\n\n    for await (let doc of this.level.iterator(iteratorOptions)) {\n      const [k, val] = doc;\n      if (!k.includes(key)) {\n        break;\n      }\n\n      if (val in matches) {\n        matches[val] += 1;\n      } else {\n        matches[val] = 1;\n      }\n    }\n  }\n\n  async buildRangeQuery(propertyName: string, range: RangeFilter, matches: { [docId: string]: number }): Promise<void> {\n    const key = `${propertyName}`;\n    const iteratorOptions: { [key: string]: any } = {};\n\n    for (let inequality in range) {\n      iteratorOptions[inequality] = `${propertyName}~${range[inequality as keyof RangeFilter]}`;\n    }\n\n    for await (let doc of this.level.iterator(iteratorOptions)) {\n      const [k, val] = doc;\n      if (!k.includes(key)) {\n        break;\n      }\n\n      if (val in matches) {\n        matches[val] += 1;\n      } else {\n        matches[val] = 1;\n      }\n    }\n  }\n\n  async clear(): Promise<void> {\n    this.level.clear();\n  }\n\n  async close(): Promise<void> {\n    return this.level.close();\n  }\n}", "import type { QueryStore } from '@tbd54566975/web5-agent';\nimport type { CreateProfileOptions, Profile, ProfileManager } from './profile-manager.js';\n\nimport { ProfileStore } from './profile-store.js';\n\nexport class ProfileApi implements ProfileManager {\n  private store: QueryStore<Profile>;\n\n  constructor(store?: QueryStore<Profile>) {\n    this.store = store ||= new ProfileStore();\n  }\n\n  async createProfile(options: CreateProfileOptions): Promise<Profile> {\n    if (!options.did && !options.didMethod) {\n      throw new Error('must provide did or didMethod');\n    }\n\n    const profile: Partial<Profile> = {\n      name        : options.name,\n      icon        : options.icon,\n      dateCreated : new Date(),\n    };\n\n    if (options.did) {\n      profile.did = options.did;\n    } else {\n      // TODO: create DID based on didMethod\n    }\n\n    profile.id = options.did?.id;\n    await this.store.put(profile as Profile);\n\n    return profile as Profile;\n  }\n\n  getProfile(id: string): Promise<Profile | undefined> {\n    return this.store.get(id);\n  }\n\n  // TODO: discuss whether we want to rename this to getProfiles instead\n  listProfiles(): Promise<Profile[]> {\n    return this.store.all();\n  }\n}", "import type { DwnRpc, DwnRpcRequest, DwnRpcResponse, JsonRpcResponse } from '@tbd54566975/web5-agent';\n\nimport { v4 as uuidv4 } from 'uuid';\nimport { createJsonRpcRequest, parseJson } from '@tbd54566975/web5-agent';\n\n// TODO: move what's below to dwn-server repo. i wrote this here for expediency\n\n/**\n * Client used to communicate with Dwn Servers\n */\nexport class DwnRpcClient implements DwnRpc {\n  #transportClients: Map<string, DwnRpc>;\n\n  constructor(clients: DwnRpc[] = []) {\n    this.#transportClients = new Map();\n\n    // include http client as default. can be overwritten for 'http:' or 'https:' if instantiator provides\n    // their own.\n    clients = [new HttpDwnRpcClient(), ...clients];\n\n    for (let client of clients) {\n      for (let transportScheme of client.transportProtocols) {\n        this.#transportClients.set(transportScheme, client);\n      }\n    }\n  }\n\n  get transportProtocols(): string[] {\n    return Array.from(this.#transportClients.keys());\n  }\n\n  sendDwnRequest(request: DwnRpcRequest): Promise<DwnRpcResponse> {\n    // will throw if url is invalid\n    const url = new URL(request.dwnUrl);\n\n    const transportClient = this.#transportClients.get(url.protocol);\n    if (!transportClient) {\n      const error = new Error(`no ${url.protocol} transport client available`);\n      error.name = 'NO_TRANSPORT_CLIENT';\n\n      throw error;\n    }\n\n    return transportClient.sendDwnRequest(request);\n  }\n}\n\n// TODO: move to dwn-server repo. i wrote this here for expediency\n\n/**\n * Http client that can be used to communicate with Dwn Servers\n */\nclass HttpDwnRpcClient implements DwnRpc {\n  get transportProtocols() { return ['http:', 'https:']; }\n\n  async sendDwnRequest(request: DwnRpcRequest): Promise<DwnRpcResponse> {\n    const requestId = uuidv4();\n    const jsonRpcRequest = createJsonRpcRequest(requestId, 'dwn.processMessage', {\n      target  : request.targetDid,\n      message : request.message\n    });\n\n    const fetchOpts = {\n      method  : 'POST',\n      headers : {\n        'dwn-request': JSON.stringify(jsonRpcRequest)\n      }\n    };\n\n    if (request.data) {\n      fetchOpts.headers['content-type'] = 'application/octet-stream';\n      fetchOpts['body'] = request.data;\n    }\n\n    const resp = await fetch(request.dwnUrl, fetchOpts);\n    let dwnRpcResponse: JsonRpcResponse;\n\n    // check to see if response is in header first. if it is, that means the response is a ReadableStream\n    let dataStream;\n    const { headers } = resp;\n    if (headers.has('dwn-response')) {\n      const jsonRpcResponse = parseJson(headers.get('dwn-response')) as JsonRpcResponse;\n\n      if (jsonRpcResponse == null) {\n        throw new Error(`failed to parse json rpc response. dwn url: ${request.dwnUrl}`);\n      }\n\n      dataStream = resp.body;\n      dwnRpcResponse = jsonRpcResponse;\n    } else {\n      // TODO: wonder if i need to try/catch this?\n      const responseBody = await resp.text();\n      dwnRpcResponse = JSON.parse(responseBody);\n    }\n\n    if (dwnRpcResponse.error) {\n      const { code, message } = dwnRpcResponse.error;\n      throw new Error(`(${code}) - ${message}`);\n    }\n\n    const { reply } = dwnRpcResponse.result;\n    if (dataStream) {\n      reply['record']['data'] = dataStream;\n    }\n\n    return reply as DwnRpcResponse;\n  }\n}", "import type { Readable } from 'readable-stream';\nimport { ReadableWebToNodeStream } from 'readable-web-to-node-stream';\n\nexport function blobToIsomorphicNodeReadable(blob: Blob): Readable {\n  return webReadableToIsomorphicNodeReadable(blob.stream());\n}\n\nexport function webReadableToIsomorphicNodeReadable(webReadable: ReadableStream) {\n  return new ReadableWebToNodeStream(webReadable);\n}", "import type { DwnRpc } from '@tbd54566975/web5-agent';\nimport type { BatchOperation } from 'level';\nimport type { DwnServiceEndpoint, DidResolver } from '@tbd54566975/dids';\nimport type {\n  Dwn,\n  EventsGetReply,\n  MessagesGetReply,\n  SignatureInput,\n  RecordsWriteMessage,\n  RecordsReadReply,\n  PrivateJwk as DwnPrivateKeyJwk,\n  Event,\n} from '@tbd54566975/dwn-sdk-js';\n\nimport type { ProfileManager } from './profile-manager.js';\n\nimport { Level } from 'level';\nimport { utils as didUtils } from '@tbd54566975/dids';\nimport { DataStream, EventsGet, MessagesGet, Encoder, RecordsRead } from '@tbd54566975/dwn-sdk-js';\n\n\nimport { SyncManager } from './sync-manager.js';\nimport { DwnRpcClient } from './dwn-rpc-client.js';\nimport { webReadableToIsomorphicNodeReadable } from './utils.js';\n\nexport type SyncApiOptions = {\n  dwn: Dwn;\n  didResolver: DidResolver;\n  profileManager: ProfileManager;\n  storeLocation?: string;\n};\n\ntype Direction = 'push' | 'pull';\n\ntype SyncState = {\n  did: string;\n  dwnUrl: string;\n  watermark: string | undefined;\n}\n\ntype DwnMessage = {\n  message: any;\n  data?: Blob;\n}\n\ntype DbBatchOperation = BatchOperation<Level, string, string>;\n\nexport class SyncApi implements SyncManager {\n  #db: Level;\n  #dwn: Dwn;\n  #didResolver: DidResolver;\n  #profileManager: ProfileManager;\n  #dwnRpcClient: DwnRpc;\n\n  static #defaultOptions = {\n    storeLocation: 'data/agent/sync-store',\n  };\n\n  constructor(options: SyncApiOptions) {\n    options = { ...SyncApi.#defaultOptions, ...options };\n    this.#dwn = options.dwn;\n    this.#didResolver = options.didResolver;\n    this.#profileManager = options.profileManager;\n\n    this.#db = new Level(options.storeLocation);\n    this.#dwnRpcClient = new DwnRpcClient();\n  }\n\n  async clear() {\n    return this.#db.clear();\n  }\n\n  async registerProfile(did: string): Promise<void> {\n    const registeredProfiles = this.#db.sublevel('registeredProfiles');\n\n    await registeredProfiles.put(did, '');\n  }\n\n  async enqueuePush() {\n    const profileDids = await this.#db.sublevel('registeredProfiles').keys().all();\n    const syncStates: SyncState[] = [];\n\n    for (let did of profileDids) {\n      // TODO: try/catch\n      const { didDocument } = await this.#didResolver.resolve(did);\n      const [ service ] = didUtils.getServices(didDocument, { id: '#dwn', type: 'DecentralizedWebNode' });\n\n      // did has no dwn service endpoints listed in DID Doc. ignore\n      if (!service) {\n        continue;\n      }\n\n      const { nodes } = <DwnServiceEndpoint>service.serviceEndpoint;\n\n      for (let node of nodes) {\n        const watermark = await this.getWatermark(did, node, 'push');\n        syncStates.push({ did, dwnUrl: node, watermark });\n      }\n    }\n\n    for (let syncState of syncStates) {\n      const signatureInput = await this.#getAuthorSignatureInput(syncState.did);\n      const eventsGet = await EventsGet.create({\n        watermark                   : syncState.watermark,\n        authorizationSignatureInput : signatureInput\n      });\n\n      const eventsReply = await this.#dwn.processMessage(syncState.did, eventsGet.toJSON()) as EventsGetReply;\n      const putOps: DbBatchOperation[] = [];\n\n      for (let event of eventsReply.events) {\n        const pushKey = `${syncState.did}~${syncState.dwnUrl}~${event.messageCid}`;\n        const putOp: DbBatchOperation = { type: 'put', key: pushKey, value: event.watermark };\n\n        putOps.push(putOp);\n      }\n\n      const pushQueue = this.#getPushQueue();\n      await pushQueue.batch(putOps as any);\n    }\n  }\n\n  async getEvents(did: string, watermark: string | undefined, dwnUrl: string) {\n    const signatureInput = await this.#getAuthorSignatureInput(did);\n    const eventsGet = await EventsGet.create({\n      watermark                   : watermark,\n      authorizationSignatureInput : signatureInput\n    });\n\n    let events: Event[];\n    if (dwnUrl === 'local') {\n      const reply = await this.#dwn.processMessage(did, eventsGet.toJSON()) as EventsGetReply;\n      ({ events } = reply);\n    } else {\n      const reply = await this.#dwnRpcClient.sendDwnRequest({\n        dwnUrl,\n        targetDid : did,\n        message   : eventsGet\n      }) as EventsGetReply;\n\n      ({ events } = reply);\n    }\n\n    return events;\n  }\n\n  async push() {\n    await this.enqueuePush();\n\n    const pushQueue = this.#getPushQueue();\n    const pushJobs = await pushQueue.iterator().all();\n    const errored: Set<string> = new Set();\n\n    const delOps: DbBatchOperation[] = [];\n\n    for (let job of pushJobs) {\n      const [key, watermark] = job;\n      const [did, dwnUrl, messageCid] = key.split('~');\n\n      if (errored.has(dwnUrl)) {\n        continue;\n      }\n\n      const dwnMessage = await this.#getDwnMessage(did, messageCid);\n      if (!dwnMessage) {\n        delOps.push({ type: 'del', key: key });\n        await this.setWatermark(did, dwnUrl, 'push', watermark);\n        await this.#addMessage(did, messageCid);\n\n        continue;\n      }\n\n      try {\n        const reply = await this.#dwnRpcClient.sendDwnRequest({\n          dwnUrl,\n          targetDid : did,\n          data      : dwnMessage.data,\n          message   : dwnMessage.message\n        });\n\n        if (reply.status.code === 202 || reply.status.code === 409) {\n          delOps.push({ type: 'del', key: key });\n          await this.setWatermark(did, dwnUrl, 'push', watermark);\n          await this.#addMessage(did, messageCid);\n        }\n      } catch(e) {\n        errored.add(dwnUrl);\n      }\n    }\n\n    await pushQueue.batch(delOps as any);\n  }\n\n  async enqueuePull() {\n    const profileDids = await this.#db.sublevel('registeredProfiles').keys().all();\n    const syncStates: SyncState[] = [];\n\n    for (let did of profileDids) {\n      // TODO: try/catch\n      const { didDocument } = await this.#didResolver.resolve(did);\n      const [ service ] = didUtils.getServices(didDocument, { id: '#dwn', type: 'DecentralizedWebNode' });\n\n      // did has no dwn service endpoints listed in DID Doc. ignore\n      if (!service) {\n        continue;\n      }\n\n      const { nodes } = <DwnServiceEndpoint>service.serviceEndpoint;\n      for (let node of nodes) {\n        const watermark = await this.getWatermark(did, node, 'pull');\n        syncStates.push({ did, dwnUrl: node, watermark });\n      }\n    }\n\n    const pullOps: DbBatchOperation[] = [];\n\n    for (let syncState of syncStates) {\n      const signatureInput = await this.#getAuthorSignatureInput(syncState.did);\n      const eventsGet = await EventsGet.create({\n        watermark                   : syncState.watermark,\n        authorizationSignatureInput : signatureInput\n      });\n\n      let reply: EventsGetReply;\n\n      try {\n        reply = await this.#dwnRpcClient.sendDwnRequest({\n          dwnUrl    : syncState.dwnUrl,\n          targetDid : syncState.did,\n          message   : eventsGet\n        }) as EventsGetReply;\n      } catch(e) {\n        continue;\n      }\n\n      for (let event of reply.events) {\n        const pullKey = `${syncState.did}~${syncState.dwnUrl}~${event.messageCid}`;\n        const pullOp: DbBatchOperation = { type: 'put', key: pullKey, value: event.watermark };\n\n        pullOps.push(pullOp);\n      }\n\n      if (pullOps.length > 0) {\n        const pullQueue = this.#getPullQueue();\n        pullQueue.batch(pullOps as any);\n      }\n    }\n  }\n\n  async pull() {\n    await this.enqueuePull();\n\n    const pullQueue = this.#getPullQueue();\n    const pullJobs = await pullQueue.iterator().all();\n    const delOps: DbBatchOperation[] = [];\n    const errored: Set<string> = new Set();\n\n    for (let job of pullJobs) {\n      const [key, watermark] = job;\n      const [did, dwnUrl, messageCid] = key.split('~');\n\n      if (errored.has(dwnUrl)) {\n        continue;\n      }\n\n      const messageExists = await this.#messageExists(did, messageCid);\n      if (messageExists) {\n        await this.setWatermark(did, dwnUrl, 'pull', watermark);\n        delOps.push({ type: 'del', key });\n\n        continue;\n      }\n\n      const signatureInput = await this.#getAuthorSignatureInput(did);\n      const messagesGet = await MessagesGet.create({\n        messageCids                 : [messageCid],\n        authorizationSignatureInput : signatureInput\n      });\n\n      let reply: MessagesGetReply;\n\n      try {\n        reply = await this.#dwnRpcClient.sendDwnRequest({\n          dwnUrl,\n          targetDid : did,\n          message   : messagesGet\n        }) as MessagesGetReply;\n      } catch(e) {\n        errored.add(dwnUrl);\n        continue;\n      }\n\n      for (let entry of reply.messages) {\n        if (entry.error || !entry.message) {\n          console.warn(`message ${messageCid} not found. entry: ${JSON.stringify(entry, null, 2)} ignoring..`);\n\n          await this.setWatermark(did, dwnUrl, 'pull', watermark);\n          await this.#addMessage(did, messageCid);\n          delOps.push({ type: 'del', key });\n\n          continue;\n        }\n\n        const messageType = this.#getDwnMessageType(entry.message);\n        let dataStream;\n\n        if (messageType === 'RecordsWrite') {\n          const { encodedData } = entry;\n          const message = entry.message as RecordsWriteMessage;\n\n          if (encodedData) {\n            const dataBytes = Encoder.base64UrlToBytes(encodedData);\n            dataStream = DataStream.fromBytes(dataBytes);\n          } else {\n            const recordsRead = await RecordsRead.create({\n              authorizationSignatureInput : signatureInput,\n              recordId                    : message['recordId']\n            });\n\n            const recordsReadReply = await this.#dwnRpcClient.sendDwnRequest({\n              targetDid : did,\n              dwnUrl,\n              message   : recordsRead\n            }) as RecordsReadReply;\n\n            if (recordsReadReply.status.code >= 400) {\n              const pruneReply = await this.#dwn.synchronizePrunedInitialRecordsWrite(did, message);\n\n              if (pruneReply.status.code === 202 || pruneReply.status.code === 409) {\n                await this.setWatermark(did, dwnUrl, 'pull', watermark);\n                await this.#addMessage(did, messageCid);\n                delOps.push({ type: 'del', key });\n\n                continue;\n              } else {\n                throw new Error(`Failed to sync tombstone. message cid: ${messageCid}`);\n              }\n            } else {\n              dataStream = webReadableToIsomorphicNodeReadable(recordsReadReply.record.data as any);\n            }\n          }\n        }\n\n        const pullReply = await this.#dwn.processMessage(did, entry.message, dataStream);\n\n        if (pullReply.status.code === 202 || pullReply.status.code === 409) {\n          await this.setWatermark(did, dwnUrl, 'pull', watermark);\n          await this.#addMessage(did, messageCid);\n          delOps.push({ type: 'del', key });\n        }\n      }\n    }\n\n    await pullQueue.batch(delOps as any);\n  }\n\n  async #getDwnMessage(author: string, messageCid: string): Promise<DwnMessage> {\n    const dwnSignatureInput = await this.#getAuthorSignatureInput(author);\n    const messagesGet = await MessagesGet.create({\n      authorizationSignatureInput : dwnSignatureInput,\n      messageCids                 : [messageCid]\n    });\n\n    const result: MessagesGetReply = await this.#dwn.processMessage(author, messagesGet.toJSON());\n    const [ messageEntry ] = result.messages;\n\n    // absence of a messageEntry or message within messageEntry can happen because updating a Record actually creates another\n    // RecordsWrite with the same recordId. only the first and most recent RecordsWrite messages are kept for a given\n    // recordId. any in between are outright nuked from everywhere.\n    if (!messageEntry) {\n      return undefined;\n    }\n\n    let { message } = messageEntry;\n    if (!message) {\n      return undefined;\n    }\n\n    let dwnMessage: DwnMessage = { message };\n    const messageType = `${message.descriptor.interface}${message.descriptor.method}`;\n\n    // if the message is a RecordsWrite, either data will be present, OR we have to get it using a RecordsRead\n    if (messageType === 'RecordsWrite') {\n      const { encodedData } = messageEntry;\n      message = message as RecordsWriteMessage;\n\n      if (encodedData) {\n        const dataBytes = Encoder.base64UrlToBytes(encodedData);\n        dwnMessage.data = new Blob([dataBytes]);\n      } else {\n        const recordsRead = await RecordsRead.create({\n          authorizationSignatureInput : dwnSignatureInput,\n          recordId                    : message['recordId']\n        });\n\n        const reply = await this.#dwn.processMessage(author, recordsRead.toJSON()) as RecordsReadReply;\n\n        // if the data no longer exists (aka 404), it's likely that a `RecordsDelete` took place.\n        // `RecordsDelete` keeps a `RecordsWrite` and just deletes the associated data, effectively acting as a \"tombstone\".\n        // We still need to _push_ this tombstone so that the `RecordsDelete` can be processed successfully.\n        // if 200, return the data. if 4xx ignore for the reason explained, if >= 5xx throw error\n        if (reply.status.code === 200) {\n          const dataBytes = await DataStream.toBytes(reply.record.data);\n          dwnMessage.data = new Blob([dataBytes]);\n        } else if (reply.status.code >= 500) {\n          const { status: { code, detail } } = reply;\n          throw new Error(`(${code}) Failed to read data associated with record ${message['recordId']}. ${detail}}`);\n        }\n      }\n    }\n\n    return dwnMessage;\n  }\n\n  /**\n   * constructs signature input required to sign DWeb Messages\n   * @param authorDid\n   * @returns {SignatureInput}\n   */\n  async #getAuthorSignatureInput(authorDid: string): Promise<SignatureInput> {\n    const profile = await this.#profileManager.getProfile(authorDid);\n\n    if (!profile) {\n      throw new Error('profile not found for author.');\n    }\n\n    const { keys } = profile.did;\n    const [ key ] = keys;\n    const { privateKeyJwk } = key;\n\n    // TODO: make far less naive\n    const kidFragment = privateKeyJwk.kid || key.id;\n    const kid = `${profile.did.id}#${kidFragment}`;\n\n    const dwnSignatureInput: SignatureInput = {\n      privateJwk      : <DwnPrivateKeyJwk>privateKeyJwk,\n      protectedHeader : { alg: privateKeyJwk.crv, kid }\n    };\n\n    return dwnSignatureInput;\n  }\n\n  async getWatermark(did: string, dwnUrl: string, direction: Direction) {\n    const wmKey = `${did}~${dwnUrl}~${direction}`;\n    const watermarkStore = this.#getWatermarkStore();\n\n    try {\n      return await watermarkStore.get(wmKey);\n    } catch (e) {\n      if (e.code === 'LEVEL_NOT_FOUND') {\n        return undefined;\n      }\n    }\n  }\n\n  async setWatermark(did: string, dwnUrl: string, direction: Direction, watermark: string) {\n    const wmKey = `${did}~${dwnUrl}~${direction}`;\n    const watermarkStore = this.#getWatermarkStore();\n\n    return watermarkStore.put(wmKey, watermark);\n  }\n\n  async #messageExists(did: string, messageCid: string) {\n    const messageStore = this.#getMessageStore(did);\n    const hashedKey = new Set([messageCid]);\n\n    const itr = messageStore.keys({ lte: messageCid, limit: 1 });\n    for await (let key of itr) {\n      if (hashedKey.has(key)) {\n        return true;\n      } else {\n        return false;\n      }\n    }\n  }\n\n  async #addMessage(did: string, messageCid: string) {\n    const messageStore = this.#getMessageStore(did);\n\n    return messageStore.put(messageCid, '');\n  }\n\n  #getMessageStore(did: string) {\n    return this.#db.sublevel('history').sublevel(did).sublevel('messages');\n  }\n\n  #getWatermarkStore() {\n    return this.#db.sublevel('watermarks');\n  }\n\n  #getPushQueue() {\n    return this.#db.sublevel('pushQueue');\n  }\n\n  #getPullQueue() {\n    return this.#db.sublevel('pullQueue');\n  }\n\n  // TODO: export BaseMessage from dwn-sdk.\n  #getDwnMessageType(message: any) {\n    return `${message.descriptor.interface}${message.descriptor.method}`;\n  }\n}", "export { default as v1 } from './v1.js';\nexport { default as v3 } from './v3.js';\nexport { default as v4 } from './v4.js';\nexport { default as v5 } from './v5.js';\nexport { default as NIL } from './nil.js';\nexport { default as version } from './version.js';\nexport { default as validate } from './validate.js';\nexport { default as stringify } from './stringify.js';\nexport { default as parse } from './parse.js';", "// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n  // lazy load so that environments that need to polyfill have a chance to do so\n  if (!getRandomValues) {\n    // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n    getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n    if (!getRandomValues) {\n      throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n    }\n  }\n\n  return getRandomValues(rnds8);\n}", "import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\n\nfunction stringify(arr, offset = 0) {\n  const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n\n  return uuid;\n}\n\nexport default stringify;", "import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n  if (native.randomUUID && !buf && !options) {\n    return native.randomUUID();\n  }\n\n  options = options || {};\n  const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n  rnds[6] = rnds[6] & 0x0f | 0x40;\n  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n  if (buf) {\n    offset = offset || 0;\n\n    for (let i = 0; i < 16; ++i) {\n      buf[offset + i] = rnds[i];\n    }\n\n    return buf;\n  }\n\n  return unsafeStringify(rnds);\n}\n\nexport default v4;", "const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n  randomUUID\n};", "export type JsonRpcId = string | number | null;\nexport type JsonRpcParams = any;\nexport type JsonRpcVersion = '2.0';\n\nexport interface JsonRpcRequest {\n  jsonrpc: JsonRpcVersion;\n  id?: JsonRpcId;\n  method: string;\n  params?: any;\n}\n\nexport interface JsonRpcError {\n  code: JsonRpcErrorCodes;\n  message: string;\n  data?: any;\n}\n\nexport enum JsonRpcErrorCodes {\n  // JSON-RPC 2.0 pre-defined errors\n  InvalidRequest = -32600,\n  MethodNotFound = -32601,\n  InvalidParams = -32602,\n  InternalError = -32603,\n  ParseError = -32700,\n  TransportError = -32300,\n\n  // App defined errors\n  BadRequest = -50400, // equivalent to HTTP Status 400\n  Unauthorized = -50401, // equivalent to HTTP Status 401\n  Forbidden = -50403, // equivalent to HTTP Status 403\n}\n\nexport type JsonRpcResponse = JsonRpcSuccessResponse | JsonRpcErrorResponse;\n\nexport interface JsonRpcSuccessResponse {\n  jsonrpc: JsonRpcVersion;\n  id: JsonRpcId;\n  result: any;\n  error?: never;\n}\n\nexport interface JsonRpcErrorResponse {\n  jsonrpc: JsonRpcVersion;\n  id: JsonRpcId;\n  result?: never;\n  error: JsonRpcError;\n}\n\nexport const createJsonRpcErrorResponse = (\n  id: JsonRpcId,\n  code: JsonRpcErrorCodes,\n  message: string,\n  data?: any,\n): JsonRpcErrorResponse => {\n  const error: JsonRpcError = { code, message };\n  if (data != undefined) {\n    error.data = data;\n  }\n  return {\n    jsonrpc: '2.0',\n    id,\n    error,\n  };\n};\n\nexport const createJsonRpcNotification = (\n  method: string,\n  params?: JsonRpcParams,\n): JsonRpcRequest => {\n  return {\n    jsonrpc: '2.0',\n    method,\n    params,\n  };\n};\n\nexport const createJsonRpcRequest = (\n  id: JsonRpcId,\n  method: string,\n  params?: JsonRpcParams,\n): JsonRpcRequest => {\n  return {\n    jsonrpc: '2.0',\n    id,\n    method,\n    params,\n  };\n};\n\nexport const createJsonRpcSuccessResponse = (\n  id: JsonRpcId,\n  result?: any,\n): JsonRpcSuccessResponse => {\n  return {\n    jsonrpc : '2.0',\n    id,\n    result  : result ?? null,\n  };\n};\n\nexport function parseJson(text: string): object | null {\n  try {\n    return JSON.parse(text);\n  } catch {\n    return null;\n  }\n}", "import type { Web5Agent } from '@tbd54566975/web5-agent';\n\nexport class VcApi {\n  #agent: Web5Agent;\n  #connectedDid: string;\n\n  constructor(agent: Web5Agent, connectedDid: string) {\n    this.#agent = agent;\n    this.#connectedDid = connectedDid;\n  }\n\n  async create() {\n    // TODO: implement\n    throw new Error('Not implemented.');\n  }\n}", "import type { Web5Agent } from '@tbd54566975/web5-agent';\nimport type {\n  UnionMessageReply,\n  RecordsReadOptions,\n  RecordsQueryOptions,\n  RecordsWriteMessage,\n  RecordsWriteOptions,\n  RecordsDeleteOptions,\n  ProtocolsQueryOptions,\n  RecordsQueryReplyEntry,\n  ProtocolsConfigureMessage,\n  ProtocolsConfigureOptions,\n  ProtocolsConfigureDescriptor,\n} from '@tbd54566975/dwn-sdk-js';\n\nimport { DwnInterfaceName, DwnMethodName } from '@tbd54566975/dwn-sdk-js';\n\nimport { Record } from './record.js';\nimport { Protocol } from './protocol.js';\nimport { dataToBlob, isEmptyObject } from './utils.js';\n\nexport type ProtocolsConfigureRequest = {\n  message: Omit<ProtocolsConfigureOptions, 'authorizationSignatureInput'>;\n}\n\nexport type ProtocolsConfigureResponse = {\n  status: UnionMessageReply['status'];\n  protocol?: Protocol;\n}\n\nexport type ProtocolsQueryReplyEntry = {\n  descriptor: ProtocolsConfigureDescriptor;\n};\n\nexport type ProtocolsQueryRequest = {\n  from?: string;\n  message: Omit<ProtocolsQueryOptions, 'authorizationSignatureInput'>\n}\n\nexport type ProtocolsQueryResponse = {\n  protocols: Protocol[];\n  status: UnionMessageReply['status'];\n}\n\nexport type RecordsCreateRequest = RecordsWriteRequest;\n\nexport type RecordsCreateResponse = RecordsWriteResponse;\n\nexport type RecordsCreateFromRequest = {\n  author: string;\n  data: unknown;\n  message?: Omit<RecordsWriteOptions, 'authorizationSignatureInput'>;\n  record: Record;\n}\n\nexport type RecordsDeleteRequest = {\n  from?: string;\n  message: Omit<RecordsDeleteOptions, 'authorizationSignatureInput'>;\n}\n\nexport type RecordsDeleteResponse = {\n  status: UnionMessageReply['status'];\n};\n\nexport type RecordsQueryRequest = {\n  /** The from property indicates the DID to query from and return results. */\n  from?: string;\n  message: Omit<RecordsQueryOptions, 'authorizationSignatureInput'>;\n}\n\nexport type RecordsQueryResponse = {\n  status: UnionMessageReply['status'];\n  records?: Record[]\n};\n\nexport type RecordsReadRequest = {\n  /** The from property indicates the DID to read from and return results fro. */\n  from?: string;\n  message: Omit<RecordsReadOptions, 'authorizationSignatureInput'>;\n}\n\nexport type RecordsReadResponse = {\n  status: UnionMessageReply['status'];\n  record: Record;\n};\n\nexport type RecordsWriteRequest = {\n  data: unknown;\n  message?: Omit<Partial<RecordsWriteOptions>, 'authorizationSignatureInput'>;\n  store?: boolean;\n}\n\nexport type RecordsWriteResponse = {\n  status: UnionMessageReply['status'];\n  record?: Record\n};\n\n/**\n * TODO: Document class.\n */\nexport class DwnApi {\n  constructor(private web5Agent: Web5Agent, private connectedDid: string) {}\n\n  /**\n * TODO: Document namespace.\n */\n  get protocols() {\n    return {\n      /**\n       * TODO: Document method.\n       */\n      configure: async (request: ProtocolsConfigureRequest): Promise<ProtocolsConfigureResponse> => {\n        const agentResponse = await this.web5Agent.processDwnRequest({\n          target         : this.connectedDid,\n          author         : this.connectedDid,\n          messageOptions : request.message,\n          messageType    : DwnInterfaceName.Protocols + DwnMethodName.Configure\n        });\n\n        const { message, messageCid, reply: { status }} = agentResponse;\n        const response: ProtocolsConfigureResponse = { status };\n\n        if (status.code < 300) {\n          const metadata = { author: this.connectedDid, messageCid };\n          response.protocol = new Protocol(this.web5Agent, message as ProtocolsConfigureMessage, metadata);\n        }\n\n        return response;\n      },\n\n      /**\n       * TODO: Document method.\n       */\n      query: async (request: ProtocolsQueryRequest): Promise<ProtocolsQueryResponse> => {\n        const agentResponse = await this.web5Agent.processDwnRequest({\n          author         : this.connectedDid,\n          messageOptions : request.message,\n          messageType    : DwnInterfaceName.Protocols + DwnMethodName.Query,\n          target         : this.connectedDid\n        });\n\n        const { reply: { entries, status } } = agentResponse;\n        // const protocols = entries as ProtocolsQueryReplyEntry[];\n\n        const protocols = entries.map((entry: ProtocolsQueryReplyEntry) => {\n          const metadata = { author: this.connectedDid, };\n\n          return new Protocol(this.web5Agent, entry, metadata);\n        });\n\n        return { protocols, status };\n      }\n    };\n  }\n\n  /**\n   * TODO: Document namespace.\n   */\n  get records() {\n    return {\n      /**\n       * TODO: Document method.\n       */\n      create: async (request: RecordsCreateRequest): Promise<RecordsCreateResponse> => {\n        return this.records.write(request);\n      },\n\n      /**\n       * TODO: Document method.\n       */\n      createFrom: async (request: RecordsCreateFromRequest): Promise<RecordsWriteResponse> => {\n        const { author: inheritedAuthor, ...inheritedProperties } = request.record.toJSON();\n\n        // Remove target from inherited properties since target is being explicitly defined in method parameters.\n        delete inheritedProperties.target;\n\n\n        // If `data` is being updated then `dataCid` and `dataSize` must not be present.\n        if (request.data !== undefined) {\n          delete inheritedProperties.dataCid;\n          delete inheritedProperties.dataSize;\n        }\n\n        // If `published` is set to false, ensure that `datePublished` is undefined. Otherwise, DWN SDK's schema validation\n        // will throw an error if `published` is false but `datePublished` is set.\n        if (request.message?.published === false && inheritedProperties.datePublished !== undefined) {\n          delete inheritedProperties.datePublished;\n          delete inheritedProperties.published;\n        }\n\n        // If the request changes the `author` or message `descriptor` then the deterministic `recordId` will change.\n        // As a result, we will discard the `recordId` if either of these changes occur.\n        if (!isEmptyObject(request.message) || (request.author && request.author !== inheritedAuthor)) {\n          delete inheritedProperties.recordId;\n        }\n\n        return this.records.write({\n          data    : request.data,\n          message : {\n            ...inheritedProperties,\n            ...request.message,\n          },\n        });\n      },\n\n      /**\n       * TODO: Document method.\n       */\n      delete: async (request: RecordsDeleteRequest): Promise<RecordsDeleteResponse> => {\n        const agentRequest = {\n          author         : this.connectedDid,\n          messageOptions : request.message,\n          messageType    : DwnInterfaceName.Records + DwnMethodName.Delete,\n          target         : request.from || this.connectedDid\n        };\n\n        let agentResponse;\n\n        if (request.from) {\n          agentResponse = await this.web5Agent.sendDwnRequest(agentRequest);\n        } else {\n          agentResponse = await this.web5Agent.processDwnRequest(agentRequest);\n        }\n\n        //! TODO: (Frank -> Moe): This quirk is the result of how 4XX errors are being returned by `dwn-server`\n        //!                       When DWN SDK returns 404, agentResponse is { status: { code: 404 }} and that's it.\n        //!                       Need to decide how to resolve.\n        let status;\n        if (agentResponse.reply) {\n          ({ reply: { status } } = agentResponse);\n        } else {\n          ({ status } = agentResponse);\n        }\n\n        return { status };\n      },\n\n      /**\n       * TODO: Document method.\n       */\n      query: async (request: RecordsQueryRequest): Promise<RecordsQueryResponse> => {\n        const agentRequest = {\n          author         : this.connectedDid,\n          messageOptions : request.message,\n          messageType    : DwnInterfaceName.Records + DwnMethodName.Query,\n          target         : request.from || this.connectedDid\n        };\n\n        let agentResponse;\n\n        if (request.from) {\n          agentResponse = await this.web5Agent.sendDwnRequest(agentRequest);\n        } else {\n          agentResponse = await this.web5Agent.processDwnRequest(agentRequest);\n        }\n\n        const { reply: { entries, status } } = agentResponse;\n\n        const records = entries.map((entry: RecordsQueryReplyEntry) => {\n          const recordOptions = {\n            author : this.connectedDid,\n            target : this.connectedDid,\n            ...entry as RecordsWriteMessage\n          };\n          const record = new Record(this.web5Agent, recordOptions);\n          return record;\n        });\n\n        return { records, status };\n      },\n\n      /**\n       * TODO: Document method.\n       */\n      read: async (request: RecordsReadRequest): Promise<RecordsReadResponse> => {\n        const agentRequest = {\n          author         : this.connectedDid,\n          messageOptions : request.message,\n          messageType    : DwnInterfaceName.Records + DwnMethodName.Read,\n          target         : request.from || this.connectedDid\n        };\n\n        let agentResponse;\n\n        if (request.from) {\n          agentResponse = await this.web5Agent.sendDwnRequest(agentRequest);\n        } else {\n          agentResponse = await this.web5Agent.processDwnRequest(agentRequest);\n        }\n\n        //! TODO: (Frank -> Moe): This quirk is the result of how 4XX errors are being returned by `dwn-server`\n        //!                       When DWN SDK returns 404, agentResponse is { status: { code: 404 }} and that's it.\n        //!                       Need to decide how to resolve.\n        let responseRecord;\n        let status;\n        if (agentResponse.reply) {\n          ({ reply: { record: responseRecord, status } } = agentResponse);\n        } else {\n          ({ status } = agentResponse);\n        }\n\n        let record: Record;\n        if (200 <= status.code && status.code <= 299) {\n          const recordOptions = {\n            author : this.connectedDid,\n            target : this.connectedDid,\n            ...responseRecord,\n          };\n\n          record = new Record(this.web5Agent, recordOptions);\n        }\n\n        return { record, status };\n      },\n\n      /**\n       * TODO: Document method.\n       *\n       * As a convenience, the Record instance returned will cache a copy of the data if the\n       * data size, in bytes, is less than the DWN 'max data size allowed to be encoded'\n       * parameter of 10KB. This is done to maintain consistency with other DWN methods,\n       * like RecordsQuery, that include relatively small data payloads when returning\n       * RecordsWrite message properties. Regardless of data size, methods such as\n       * `record.data.stream()` will return the data when called even if it requires fetching\n       * from the DWN datastore.\n       */\n      write: async (request: RecordsWriteRequest): Promise<RecordsWriteResponse> => {\n        const messageOptions: Partial<RecordsWriteOptions> = {\n          ...request.message\n        };\n\n        const { dataBlob, dataFormat } = dataToBlob(request.data, messageOptions.dataFormat);\n        messageOptions.dataFormat = dataFormat;\n\n        const agentResponse = await this.web5Agent.processDwnRequest({\n          author      : this.connectedDid,\n          dataStream  : dataBlob,\n          messageOptions,\n          messageType : DwnInterfaceName.Records + DwnMethodName.Write,\n          store       : request.store,\n          target      : this.connectedDid\n        });\n\n        const { message, reply: { status } } = agentResponse;\n        const responseMessage = message as RecordsWriteMessage;\n\n        let record: Record;\n        if (200 <= status.code && status.code <= 299) {\n          const recordOptions = {\n            author      : this.connectedDid,\n            encodedData : dataBlob,\n            target      : this.connectedDid,\n            ...responseMessage,\n          };\n\n          record = new Record(this.web5Agent, recordOptions);\n        }\n\n        return { record, status };\n      },\n    };\n  }\n}", "import type { Readable } from 'readable-stream';\nimport type { Web5Agent } from '@tbd54566975/web5-agent';\nimport type { RecordsReadReply, RecordsWriteDescriptor, RecordsWriteMessage, RecordsWriteOptions } from '@tbd54566975/dwn-sdk-js';\n\nimport { ReadableWebToNodeStream } from 'readable-web-to-node-stream';\nimport { DataStream, DwnInterfaceName, DwnMethodName, Encoder } from '@tbd54566975/dwn-sdk-js';\n\nimport { dataToBlob } from './utils.js';\nimport type { RecordsDeleteResponse } from './dwn-api.js';\n\nexport type RecordOptions = RecordsWriteMessage & {\n  author: string;\n  target: string;\n  encodedData?: string | Blob;\n  data?: Readable | ReadableStream;\n};\n\nexport type RecordModel = RecordsWriteDescriptor & Omit<RecordsWriteMessage, 'descriptor' | 'recordId'> & {\n  author: string;\n  recordId?: string;\n  target: string;\n}\n\nexport type RecordUpdateOptions = {\n  data?: unknown;\n  dataCid?: RecordsWriteDescriptor['dataCid'];\n  dataSize?: RecordsWriteDescriptor['dataSize'];\n  dateModified?: RecordsWriteDescriptor['dateModified'];\n  datePublished?: RecordsWriteDescriptor['datePublished'];\n  published?: RecordsWriteDescriptor['published'];\n}\n\n/**\n   * TODO: Document class.\n   */\nexport class Record implements RecordModel {\n  // mutable properties\n  author: string;\n  target: string;\n  isDeleted = false;\n\n  #attestation?: RecordsWriteMessage['attestation'];\n  #contextId?: string;\n  #descriptor: RecordsWriteDescriptor;\n  #encodedData?: string | Blob | null;\n  #encryption?: RecordsWriteMessage['encryption'];\n  #readableStream?: Readable | Promise<Readable>;\n  #recordId: string;\n  #web5Agent: Web5Agent;\n\n  // Immutable DWN Record properties.\n  get attestation(): RecordsWriteMessage['attestation'] { return this.#attestation; }\n  get contextId() { return this.#contextId; }\n  get dataFormat() { return this.#descriptor.dataFormat; }\n  get dateCreated() { return this.#descriptor.dateCreated; }\n  get encryption(): RecordsWriteMessage['encryption'] { return this.#encryption; }\n  get id() { return this.#recordId; }\n  get interface() { return this.#descriptor.interface; }\n  get method() { return this.#descriptor.method; }\n  get parentId() { return this.#descriptor.parentId; }\n  get protocol() { return this.#descriptor.protocol; }\n  get protocolPath() { return this.#descriptor.protocolPath; }\n  get recipient() { return this.#descriptor.recipient; }\n  get schema() { return this.#descriptor.schema; }\n\n  // Mutable DWN Record properties.\n  get dataCid() { return this.#descriptor.dataCid; }\n  get dataSize() { return this.#descriptor.dataSize; }\n  get dateModified() { return this.#descriptor.dateModified; }\n  get datePublished() { return this.#descriptor.datePublished; }\n  get published() { return this.#descriptor.published; }\n\n  constructor(web5Agent: Web5Agent, options: RecordOptions) {\n    this.#web5Agent = web5Agent;\n\n    // Store the target and author DIDs that were used to create the message to use for subsequent reads, etc.\n    this.author = options.author;\n    this.target = options.target;\n\n    // RecordsWriteMessage properties.\n    this.#attestation = options.attestation;\n    this.#contextId = options.contextId;\n    this.#descriptor = options.descriptor;\n    this.#encryption = options.encryption;\n    this.#recordId = options.recordId;\n\n\n    // options.encodedData will either be a base64url encoded string (in the case of RecordsQuery)\n    // OR a Blob in the case of a RecordsWrite.\n    this.#encodedData = options.encodedData ?? null;\n\n    // If the record was created from a RecordsRead reply then it will have a `data` property.\n    if (options.data) {\n      this.#readableStream = Record.isReadableWebStream(options.data) ?\n        new ReadableWebToNodeStream(<ReadableStream>options.data) as Readable : options.data as Readable;\n    }\n  }\n\n  /**\n   * TODO: Document method.\n   */\n  get data() {\n    if (this.isDeleted) throw new Error('Operation failed: Attempted to access `data` of a record that has already been deleted.');\n\n    if (!this.#encodedData && !this.#readableStream) {\n      // `encodedData` will be set if the Record was instantiated by dwn.records.create()/write().\n      // `readableStream` will be set if Record was instantiated by dwn.records.read().\n      // If neither of the above are true, then the record must be fetched from the DWN.\n      this.#readableStream = this.#web5Agent.processDwnRequest({\n        author         : this.author,\n        messageOptions : { recordId: this.id },\n        messageType    : DwnInterfaceName.Records + DwnMethodName.Read,\n        target         : this.target,\n      })\n        .then(response => response.reply as RecordsReadReply)\n        .then(reply => reply.record.data as Readable)\n        .catch(error => { throw new Error(`Error encountered while attempting to read data: ${error.message}`); });\n    }\n\n    if (typeof this.#encodedData === 'string') {\n      // If `encodedData` is set, then it is expected that:\n      // type is Blob if the Record object was instantiated by dwn.records.create()/write().\n      // type is Base64 URL encoded string if the Record object was instantiated by dwn.records.query().\n      // If it is a string, we need to Base64 URL decode to bytes and instantiate a Blob.\n      const dataBytes = Encoder.base64UrlToBytes(this.#encodedData);\n      this.#encodedData = new Blob([dataBytes], { type: this.dataFormat });\n    }\n\n    // Explicitly cast #encodedData as a Blob since if non-null, it has been converted from string to Blob.\n    const dataBlob = this.#encodedData as Blob;\n\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const self = this; // Capture the context of the `Record` instance.\n    const dataObj = {\n      async blob(): Promise<Blob> {\n        if (dataBlob) return dataBlob;\n        if (self.#readableStream) return new Blob([await this.stream().then(DataStream.toBytes)], { type: self.dataFormat });\n      },\n      async json() {\n        if (dataBlob) return this.text().then(JSON.parse);\n        if (self.#readableStream) return this.text().then(JSON.parse);\n        return null;\n      },\n      async text() {\n        if (dataBlob) return dataBlob.text();\n        if (self.#readableStream) return this.stream().then(DataStream.toBytes).then(Encoder.bytesToString);\n        return null;\n      },\n      async stream() {\n        if (dataBlob) return new ReadableWebToNodeStream(dataBlob.stream());\n        if (self.#readableStream) return self.#readableStream;\n        return null;\n      },\n      then(...callbacks) {\n        return this.stream().then(...callbacks);\n      },\n      catch(callback) {\n        return dataObj.then().catch(callback);\n      },\n    };\n    return dataObj;\n  }\n\n  /**\n   * TODO: Document method.\n   */\n  async delete(): Promise<RecordsDeleteResponse> {\n    if (this.isDeleted) throw new Error('Operation failed: Attempted to call `delete()` on a record that has already been deleted.');\n\n    // Attempt to delete the record from the DWN.\n    const agentResponse = await this.#web5Agent.processDwnRequest({\n      author         : this.author,\n      messageOptions : { recordId: this.id },\n      messageType    : DwnInterfaceName.Records + DwnMethodName.Delete,\n      target         : this.target,\n    });\n\n    const { reply: { status } } = agentResponse;\n\n    if (status.code === 202) {\n      // If the record was successfully deleted, mark the instance as deleted to prevent further modifications.\n      this.#setDeletedStatus(true);\n    }\n\n    return { status };\n  }\n\n  /**\n   * TODO: Document method.\n   */\n  async send(target: string): Promise<any> {\n    if (this.isDeleted) throw new Error('Operation failed: Attempted to call `send()` on a record that has already been deleted.');\n\n    const { reply: { status } } = await this.#web5Agent.sendDwnRequest({\n      messageType    : DwnInterfaceName.Records + DwnMethodName.Write,\n      author         : this.author,\n      dataStream     : await this.data.blob(),\n      target         : target,\n      messageOptions : this.toJSON(),\n    });\n\n    return { status };\n  }\n\n  /**\n   * TODO: Document method.\n   *\n   * Called by `JSON.stringify(...)` automatically.\n   */\n  toJSON(): RecordModel {\n    return {\n      attestation   : this.attestation,\n      author        : this.author,\n      contextId     : this.contextId,\n      dataCid       : this.dataCid,\n      dataFormat    : this.dataFormat,\n      dataSize      : this.dataSize,\n      dateCreated   : this.dateCreated,\n      dateModified  : this.dateModified,\n      datePublished : this.datePublished,\n      encryption    : this.encryption,\n      interface     : this.interface,\n      method        : this.method,\n      parentId      : this.parentId,\n      protocol      : this.protocol,\n      protocolPath  : this.protocolPath,\n      published     : this.published,\n      recipient     : this.recipient,\n      recordId      : this.id,\n      schema        : this.schema,\n      target        : this.target,\n    };\n  }\n\n  /**\n   * TODO: Document method.\n   *\n   * Called automatically in string concatenation, String() type conversion, and template literals.\n   */\n  toString() {\n    let str = `Record: {\\n`;\n    str += `  ID: ${this.id}\\n`;\n    str += this.contextId ? `  Context ID: ${this.contextId}\\n` : '';\n    str += this.protocol ? `  Protocol: ${this.protocol}\\n` : '';\n    str += this.schema ? `  Schema: ${this.schema}\\n` : '';\n    str += `  Data CID: ${this.dataCid}\\n`;\n    str += `  Data Format: ${this.dataFormat}\\n`;\n    str += `  Data Size: ${this.dataSize}\\n`;\n    str += `  Created: ${this.dateCreated}\\n`;\n    str += `  Modified: ${this.dateModified}\\n`;\n    str += `}`;\n    return str;\n  }\n\n  /**\n   * TODO: Document method.\n   */\n  async update(options: RecordUpdateOptions = {}) {\n    if (this.isDeleted) throw new Error('Operation failed: Attempted to call `update()` on a record that has already been deleted.');\n\n    // Begin assembling update message.\n    let updateMessage = { ...this.#descriptor, ...options } as Partial<RecordsWriteOptions>;\n\n    let dataBlob: Blob;\n    if (options.data !== undefined) {\n      // If `data` is being updated then `dataCid` and `dataSize` must be undefined and the `data` property is passed as\n      // a top-level property to `web5Agent.processDwnRequest()`.\n      delete updateMessage.dataCid;\n      delete updateMessage.dataSize;\n      delete updateMessage.data;\n\n      ({ dataBlob } = dataToBlob(options.data, updateMessage.dataFormat));\n    }\n\n    // Throw an error if an attempt is made to modify immutable properties. `data` has already been handled.\n    const mutableDescriptorProperties = new Set(['data', 'dataCid', 'dataSize', 'dateModified', 'datePublished', 'published']);\n    Record.#verifyPermittedMutation(Object.keys(options), mutableDescriptorProperties);\n\n    // If a new `dateModified` was not provided, remove it from the updateMessage to let the DWN SDK auto-fill.\n    // This is necessary because otherwise DWN SDK throws an Error 409 Conflict due to attempting to overwrite a record\n    // when the `dateModified` timestamps are identical.\n    if (options.dateModified === undefined) {\n      delete updateMessage.dateModified;\n    }\n\n    // If `published` is set to false, ensure that `datePublished` is undefined. Otherwise, DWN SDK's schema validation\n    // will throw an error if `published` is false but `datePublished` is set.\n    if (options.published === false && updateMessage.datePublished !== undefined) {\n      delete updateMessage.datePublished;\n    }\n\n    // Set the record ID and context ID, if any.\n    updateMessage.recordId = this.#recordId;\n    updateMessage.contextId = this.#contextId;\n\n    const messageOptions: Partial<RecordsWriteOptions> = {\n      ...updateMessage\n    };\n\n    const agentResponse = await this.#web5Agent.processDwnRequest({\n      author      : this.author,\n      dataStream  : dataBlob,\n      messageOptions,\n      messageType : DwnInterfaceName.Records + DwnMethodName.Write,\n      target      : this.target,\n    });\n\n    const { message, reply: { status } } = agentResponse;\n    const responseMessage = message as RecordsWriteMessage;\n\n    if (200 <= status.code && status.code <= 299) {\n      // Only update the local Record instance mutable properties if the record was successfully (over)written.\n      mutableDescriptorProperties.forEach(property => {\n        this.#descriptor[property] = responseMessage.descriptor[property];\n      });\n      // Only cache data if `dataSize` is less than DWN 'max data size allowed to be encoded'.\n      if (options.data !== undefined) {\n        this.#encodedData = dataBlob; // Clear `encodedData` in case it was previously set.\n      }\n    }\n\n    return { status };\n  }\n\n  /**\n   * TODO: Document method.\n   */\n  #setDeletedStatus(status: boolean): void {\n    this.isDeleted = status;\n  }\n\n  /**\n   * TODO: Document method.\n   */\n  static isReadableWebStream(stream) {\n    // TODO: Improve robustness of the check modeled after node:stream.\n    return typeof stream._read !== 'function';\n  }\n\n  /**\n   * TODO: Document method.\n   */\n  static #verifyPermittedMutation(propertiesToMutate: Iterable<string>, mutableDescriptorProperties: Set<string>) {\n    for (const property of propertiesToMutate) {\n      if (!mutableDescriptorProperties.has(property)) {\n        throw new Error(`${property} is an immutable property. Its value cannot be changed.`);\n      }\n    }\n  }\n}", "import { DwnConstant, Encoder } from '@tbd54566975/dwn-sdk-js';\n\nconst textDecoder = new TextDecoder();\n\n// TODO: Remove if this method is ever added to the DWN SDK Encoder class\nexport function base64UrlToString(base64urlString) {\n  const bytes = Encoder.base64UrlToBytes(base64urlString);\n  return Encoder.bytesToString(bytes);\n}\n\n// TODO: Remove if this method is ever added to the DWN SDK Encoder class\nexport function bytesToObject(bytes) {\n  const objectString = textDecoder.decode(bytes);\n  return JSON.parse(objectString);\n}\n\n/**\n * Checks if the provided data size is under the cache limit.\n * The cache limit is based on the maxDataSizeAllowedToBeEncoded defined in the DWN SDK.\n *\n * @export\n * @param {number} dataSize - The size of the data to be checked, in bytes.\n * @returns {boolean} True if the data size is less than or equal to the maximum allowed data size, false otherwise.\n *\n * @example\n * // Returns: true\n * isDataSizeUnderCacheLimit(5000);\n *\n * @example\n * // Returns: false\n * isDataSizeUnderCacheLimit(15000);\n */\nexport function isDataSizeUnderCacheLimit(dataSize: number): boolean {\n  return dataSize <= DwnConstant.maxDataSizeAllowedToBeEncoded;\n}\n\n/**\n * Set/detect the media type and return the data as bytes.\n */\nexport const dataToBlob = (data: any, dataFormat?: string) => {\n  let dataBlob: Blob;\n\n  // Check for Object or String, and if neither, assume bytes.\n  const detectedType = toType(data);\n  if (dataFormat === 'text/plain' || detectedType === 'string') {\n    dataBlob = new Blob([data], { type: 'text/plain' });\n  } else if (dataFormat === 'application/json' || detectedType === 'object') {\n    const dataBytes = Encoder.objectToBytes(data);\n    dataBlob = new Blob([dataBytes], { type: 'application/json' });\n  } else if (data instanceof Uint8Array || data instanceof ArrayBuffer) {\n    dataBlob = new Blob([data], { type: 'application/octet-stream' });\n  } else if (data instanceof Blob) {\n    dataBlob = data;\n  } else {\n    throw new Error('data type not supported.');\n  }\n\n  dataFormat = dataFormat || dataBlob.type || 'application/octet-stream';\n\n  return { dataBlob, dataFormat };\n};\n\nexport function isEmptyObject(obj) {\n  if (typeof obj === 'object' && obj !== null) {\n    return Object.keys(obj).length === 0;\n  }\n  return false;\n}\n\n/**\n * Simplistic initial implementation to check whether messages that are being routed\n * to process locally or be transported to a remote DWN are already signed.\n *\n * TODO: Consider whether cryptographic signature verification is warranted or if\n *       the naive check is sufficient given that DWNs already verify authenticity\n *       and integrity of every message.\n * @param {{}} message\n * @returns boolean\n */\nexport function isUnsignedMessage(message) {\n  return message?.message?.authorization ? false : true;\n}\n\nexport function objectValuesBase64UrlToBytes(obj) {\n  return Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, Encoder.base64UrlToBytes(value as string)]));\n}\n\nexport function objectValuesBytesToBase64Url(obj) {\n  return Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, Encoder.bytesToBase64Url(value as Uint8Array)]));\n}\n\nexport function parseJson(str) {\n  try {\n    return JSON.parse(str);\n  } catch {\n    return null;\n  }\n}\n\nexport function parseUrl(str) {\n  try {\n    return new URL(str);\n  } catch {\n    return null;\n  }\n}\n\nexport function pascalToKebabCase(str) {\n  return str\n    .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n    .replace(/([A-Z]+)([A-Z][a-z])/g, '$1-$2')\n    .toLowerCase();\n}\n\nexport function getRandomInt(min, max) {\n  min = Math.ceil(min);\n  max = Math.floor(max);\n  return Math.floor(Math.random() * (max - min)) + min;\n}\n\n/**\n * Credit for toType() function:\n *   Angus Croll\n *   https://github.com/angus-c\n *   https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/\n */\nconst toType = (obj) => {\n  return ({}).toString.call(obj).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n};", "import type { Web5Agent } from '@tbd54566975/web5-agent';\nimport type { ProtocolsConfigure } from '@tbd54566975/dwn-sdk-js';\n\n// TODO: export ProtocolsConfigureMessage from dwn-sdk-js\nexport type ProtocolsConfigureMessage = ProtocolsConfigure['message'];\ntype ProtocolMetadata = {\n  author: string;\n  messageCid?: string;\n};\n\nexport class Protocol {\n  #metadata: ProtocolMetadata;\n  #web5Agent: Web5Agent;\n  #protocolsConfigureMessage: ProtocolsConfigureMessage;\n\n  get definition() {\n    return this.#protocolsConfigureMessage.descriptor.definition;\n  }\n\n  constructor(web5Agent: Web5Agent, protocolsConfigureMessage: ProtocolsConfigureMessage, metadata: ProtocolMetadata) {\n    this.#metadata = metadata;\n    this.#web5Agent = web5Agent;\n    this.#protocolsConfigureMessage = protocolsConfigureMessage;\n  }\n\n  toJSON() {\n    return this.#protocolsConfigureMessage;\n  }\n\n  async send(target: string) {\n    const { reply } = await this.#web5Agent.sendDwnRequest({\n      messageType : 'ProtocolsConfigure',\n      author      : this.#metadata.author,\n      target      : target,\n      messageCid  : this.#metadata.messageCid\n    });\n\n    return { status: reply.status };\n  }\n}", "import type {\n  DidKeyOptions,\n  DidIonCreateOptions,\n  DidMethodApi,\n  DidMethodCreator,\n  DidMethodResolver,\n  DidResolverCache,\n  DidResolutionResult,\n  DidState\n} from '@tbd54566975/dids';\n\n\nimport { DidResolver } from '@tbd54566975/dids';\n\n// Map method names to option types\ntype CreateMethodOptions = {\n  ion: DidIonCreateOptions;\n  key: DidKeyOptions;\n};\n\n// A conditional type for inferring options based on the method name\ntype CreateOptions<M extends keyof CreateMethodOptions> = CreateMethodOptions[M];\n\nexport type DidApiOptions = {\n  didMethodApis: DidMethodApi[];\n  cache?: DidResolverCache;\n}\nexport class DidApi {\n  private didResolver: DidResolver;\n  private methodCreatorMap: Map<string, DidMethodCreator> = new Map();\n\n  /**\n   * returns the DID resolver created by this api. useful in scenarios where you want to pass around\n   * the same resolver so that you can leverage the resolver's cache\n   */\n  get resolver() {\n    return this.didResolver;\n  }\n\n  constructor(options: DidApiOptions) {\n    const { didMethodApis, cache } = options;\n\n    this.didResolver = new DidResolver({ methodResolvers: options.didMethodApis, cache });\n\n    for (let methodApi of didMethodApis) {\n      this.methodCreatorMap.set(methodApi.methodName, methodApi);\n    }\n  }\n\n  /**\n   * Creates a DID of the method provided\n   * @param method - the method of DID to create\n   * @param options - method-specific options\n   * @returns the created DID\n   */\n  create<M extends keyof CreateMethodOptions>(method: M, options?: CreateOptions<M>): Promise<DidState> {\n    const didMethodCreator = this.methodCreatorMap.get(method);\n    if (!didMethodCreator) {\n      throw new Error(`no creator available for ${method}`);\n    }\n\n    return didMethodCreator.create(options);\n  }\n\n  /**\n   * Resolves the provided DID\n   * @param did - the did to resolve\n   * @see {@link https://www.w3.org/TR/did-core/#did-resolution | DID Resolution}\n   * @returns DID Resolution Result\n   */\n  resolve(did: string): Promise<DidResolutionResult> {\n    return this.didResolver.resolve(did);\n  }\n\n  /**\n   * can be used to add different did method resolvers\n   * @param _resolver\n   */\n  addMethodResolver(_resolver: DidMethodResolver) {\n    throw new Error('not yet implemented');\n  }\n\n  /**\n   * can be used to add differed did method creators\n   * @param _creator\n   */\n  addMethodCreator(_creator: DidMethodCreator) {\n    throw new Error('not yet implemented');\n  }\n}", "import { Level } from 'level';\n\n// simple isomorphic key/value store\n// TODO: create KeyValueStore interface that this class implements\nexport class AppStorage {\n  private store: Level<string, string>;\n\n  constructor(location = 'data/app/storage') {\n    this.store = new Level(location);\n  }\n\n  async get(key: string): Promise<string | undefined> {\n    try {\n      return await this.store.get(key);\n    } catch(e: any) {\n      if (e.code === 'LEVEL_NOT_FOUND') {\n        return;\n      } else {\n        throw e;\n      }\n    }\n  }\n\n  set(key: string, value: string): Promise<void> {\n    return this.store.put(key, value);\n  }\n\n  async delete(key: string): Promise<void> {\n    return this.store.del(key);\n  }\n\n  async clear(): Promise<void> {\n    return this.store.clear();\n  }\n\n  async close(): Promise<void> {\n    return this.store.close();\n  }\n}", "import type { DidResolutionResult, DidResolverCache } from '@tbd54566975/dids';\n\nimport ms from 'ms';\nimport { Level } from 'level';\n\nexport type DidResolutionCacheOptions = {\n  location?: string;\n  ttl?: string;\n}\n\ntype CacheWrapper = {\n  ttlMillis: number;\n  value: DidResolutionResult;\n}\n\n/**\n * naive level-based cache for did resolution results. It just so happens that level aggressively keeps as much as it\n * can in memory when possible while also writing to the filesystem (in node runtime) and indexedDB (in browser runtime).\n * the persistent aspect is especially useful across page refreshes.\n */\nexport class DidResolutionCache implements DidResolverCache {\n  private cache: Level<string, string>;\n  private ttl: number;\n\n  static #defaultOptions = {\n    location : 'data/did-res-cache',\n    ttl      : '15m'\n  };\n\n  constructor(options: DidResolutionCacheOptions = {}) {\n    options = { ...DidResolutionCache.#defaultOptions, ...options };\n\n    this.cache = new Level(options.location!);\n    this.ttl = ms(options.ttl!);\n  }\n\n  async get(did: string): Promise<DidResolutionResult | void> {\n    try {\n      const str = await this.cache.get(did);\n      const cacheWrapper: CacheWrapper = JSON.parse(str);\n\n      if (Date.now() >= cacheWrapper.ttlMillis) {\n        // defer deletion to be called in the next tick of the js event loop\n        this.cache.nextTick(() => this.cache.del(did));\n\n        return;\n      } else {\n        return cacheWrapper.value;\n      }\n\n\n    } catch(e: any) {\n      // thrown when a key wasn't found\n      if (e.code === 'LEVEL_NOT_FOUND') {\n        return;\n      }\n\n      throw e;\n    }\n  }\n  set(did: string, value: DidResolutionResult): Promise<void> {\n    const cacheWrapper: CacheWrapper = { ttlMillis: Date.now() + this.ttl, value };\n    const str = JSON.stringify(cacheWrapper);\n\n    return this.cache.put(did, str);\n  }\n  delete(did: string): Promise<void> {\n    return this.cache.del(did);\n  }\n  clear(): Promise<void> {\n    return this.cache.clear();\n  }\n  close(): Promise<void> {\n    return this.cache.close();\n  }\n\n}\n"],
  "mappings": "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AAOF,CAAG,CACzC,EAEAF,GAAK,UAAU,OAAS,SAAgBK,EAAKF,EAAK,CAChD,YAAK,MAAM,OAAOE,EAAKF,CAAG,EACnB,IACT,EAEAH,GAAK,UAAU,OAAS,SAAgBG,EAAK,CAC3C,YAAK,MAAM,OAAO,KAAK,MAAM,OAAO,CAAC,EAC9B,KAAK,MAAM,OAAOA,CAAG,CAC9B,IC9CA,IAAAG,GAAAC,EAAAC,KAAA,CAAAC,IAAA,IAAIC,GAAOF,IAEXE,GAAK,MAAQ,KACbA,GAAK,OAAS,KACdA,GAAK,IAAM,MACXA,GAAK,OAAS,MACdA,GAAK,KAAO,MAGZA,GAAK,KAAOA,GAAK,IAAI,KACrBA,GAAK,OAASA,GAAK,IAAI,OACvBA,GAAK,OAASA,GAAK,IAAI,OACvBA,GAAK,OAASA,GAAK,IAAI,OACvBA,GAAK,OAASA,GAAK,IAAI,OACvBA,GAAK,UAAYA,GAAK,OAAO,YCd7B,IAAAC,IAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAC,IAAAD,IAAO,QAAU,CACf,QAAS,CACP,KAAM,EACN,OAAQ,CACN,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,gEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,CACF,CACF,EACA,IAAK,CACH,IAAK,EACL,OAAQ,CACN,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,iEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,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f,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,YAAa,MACb,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,aAAc,MACd,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,aAAc,MACd,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,cAAe,MACf,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB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",
  "names": ["require_base64_js", "__commonJSMin", "exports", "init_shim", "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", "init_shim", "buffer", "offset", "isLE", "mLen", "nBytes", "e", "m", "eLen", "eMax", "eBias", "nBits", "i", "d", "s", "value", "c", "rt", "require_buffer", "__commonJSMin", "exports", "init_shim", "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", "arrayView", "copy", "byteOffset", "obj", "len", "numberIsNaN", "a", "x", "y", "i", "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", "checkInt", "min", "maxBytes", "limit", "sub", "checkIEEE754", "writeFloat", "littleEndian", "writeDouble", "targetStart", "code", "INVALID_BASE64_RE", "base64clean", "units", "leadSurrogate", "byteArray", "c", "hi", "lo", "src", "dst", "type", "alphabet", "table", "i16", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "process", "cachedSetTimeout", "cachedClearTimeout", "defaultSetTimout", "defaultClearTimeout", "runTimeout", "fun", "runClearTimeout", "marker", "queue", "draining", "currentQueue", "queueIndex", "cleanUpNextTick", "drainQueue", "timeout", "len", "args", "i", "Item", "array", "noop", "name", "dir", "import_buffer", "import_process", "_globalThis", "init_shim", "__esmMin", "Object", "get", "_global", "require_ms", "__commonJSMin", "exports", "module", "init_shim", "s", "m", "h", "d", "w", "y", "val", "options", "type", "parse", "fmtLong", "fmtShort", "str", "match", "n", "ms", "msAbs", "plural", "name", "isPlural", "require_err_code", "__commonJSMin", "exports", "module", "init_shim", "assign", "obj", "props", "key", "createError", "err", "code", "ErrClass", "require_aspromise", "__commonJSMin", "exports", "module", "init_shim", "asPromise", "fn", "ctx", "params", "offset", "index", "pending", "resolve", "reject", "err", "require_base64", "__commonJSMin", "exports", "init_shim", "base64", "string", "p", "n", "b64", "s64", "i", "buffer", "start", "end", "parts", "chunk", "j", "t", "b", "invalidEncoding", "offset", "c", "require_eventemitter", "__commonJSMin", "exports", "module", "init_shim", "EventEmitter", "evt", "fn", "ctx", "listeners", "i", "args", "require_float", "__commonJSMin", "exports", "module", "init_shim", "factory", "f32", "f8b", "le", "writeFloat_f32_cpy", "val", "buf", "pos", "writeFloat_f32_rev", "readFloat_f32_cpy", "readFloat_f32_rev", "writeFloat_ieee754", "writeUint", "sign", "exponent", "mantissa", "writeUintLE", "writeUintBE", "readFloat_ieee754", "readUint", "uint", "readUintLE", "readUintBE", "f64", "writeDouble_f64_cpy", "writeDouble_f64_rev", "readDouble_f64_cpy", "readDouble_f64_rev", "writeDouble_ieee754", "off0", "off1", "readDouble_ieee754", "lo", "hi", "require_inquire", "__commonJSMin", "init_shim", "e", "require_utf8", "__commonJSMin", "exports", "init_shim", "utf8", "string", "len", "c", "i", "buffer", "start", "end", "parts", "chunk", "t", "offset", "c1", "c2", "require_pool", "__commonJSMin", "exports", "module", "init_shim", "pool", "alloc", "slice", "size", "SIZE", "MAX", "slab", "offset", "buf", "require_longbits", "__commonJSMin", "exports", "module", "init_shim", "LongBits", "util", "lo", "hi", "zero", "zeroHash", "value", "sign", "unsigned", "charCodeAt", "hash", "mask", "part0", "part1", "part2", "require_minimal", "__commonJSMin", "exports", "init_shim", "util", "value", "obj", "prop", "Buffer", "sizeOrArray", "hash", "unsigned", "bits", "merge", "dst", "src", "ifNotSet", "keys", "i", "str", "newError", "name", "CustomError", "message", "properties", "fieldNames", "fieldMap", "encoding", "size", "require_reader", "__commonJSMin", "exports", "module", "init_shim", "Reader", "util", "BufferReader", "LongBits", "utf8", "indexOutOfRange", "reader", "writeLength", "buffer", "create_array", "create", "value", "readLongVarint", "bits", "i", "readFixed32_end", "buf", "end", "readFixed64", "length", "start", "bytes", "wireType", "BufferReader_", "fn", "require_reader_buffer", "__commonJSMin", "exports", "module", "init_shim", "BufferReader", "Reader", "util", "buffer", "len", "require_writer", "__commonJSMin", "exports", "module", "init_shim", "Writer", "util", "BufferWriter", "LongBits", "base64", "utf8", "Op", "fn", "len", "val", "noop", "State", "writer", "create", "size", "writeByte", "buf", "pos", "writeVarint32", "VarintOp", "value", "writeVarint64", "bits", "writeFixed32", "writeBytes", "i", "head", "tail", "BufferWriter_", "require_writer_buffer", "__commonJSMin", "exports", "module", "init_shim", "BufferWriter", "Writer", "util", "val", "buf", "pos", "i", "value", "len", "writeStringBuffer", "require_murmurHash3js", "__commonJSMin", "exports", "module", "init_shim", "root", "undefined", "library", "_validBytes", "bytes", "i", "_x86Multiply", "m", "n", "_x86Rotl", "_x86Fmix", "h", "_x64Add", "o", "_x64Multiply", "_x64Rotl", "_x64LeftShift", "_x64Xor", "_x64Fmix", "seed", "remainder", "blocks", "h1", "k1", "c1", "c2", "h2", "h3", "h4", "k2", "k3", "k4", "c3", "c4", "require_murmurhash3js_revisited", "__commonJSMin", "exports", "module", "init_shim", "require_sparse_array", "__commonJSMin", "exports", "module", "init_shim", "index", "value", "pos", "needsSort", "last", "iterator", "i", "mapped", "reducer", "initialValue", "acc", "finder", "found", "noCreate", "bytePos", "byte", "bitPos", "previousPopCount", "popCountReduce", "mask", "bytePopCount", "popCount", "targetLength", "data", "elem", "randomIndex", "sortInternal", "bytes", "pendingBitsForResultingByte", "pendingBitsForNewByte", "resultingByte", "newByte", "pending", "usingBits", "masked", "valueOnly", "count", "_v", "v", "a", "b", "Math", "imul", "clz32", "JSBI", "abs", "max", "floor", "length", "sign", "i", "_", "a", "u", "setPrototypeOf", "prototype", "__kMaxLength", "RangeError", "g", "e", "c", "l", "result", "B", "digit", "t", "push", "toString", "join", "radix", "__toStringGeneric", "__toStringBasePowerOfTwo", "Error", "newLength", "last", "pop", "__clz30", "__digit", "multiplier", "summand", "mLow", "mHigh", "carry", "high", "d", "dLow", "dHigh", "pLow", "__imul", "pMid1", "pMid2", "pHigh", "v", "o", "__setDigit", "startIndex", "halfDigits", "sum", "__halfDigit", "__setHalfDigit", "subtrahend", "borrow", "current", "r0", "sub", "r15", "n", "D", "shift", "len", "__unsignedDigit", "value", "digitIndex", "previous", "updated", "arg", "Number", "isFinite", "__zero", "__isOneDigitInt", "__oneDigit", "__fromDouble", "__fromString", "SyntaxError", "_typeof", "constructor", "primitive", "__toPrimitive", "BigInt", "TypeError", "x", "xLength", "xMsd", "msdLeadingZeros", "xBitLength", "exponent", "currentDigit", "mantissaHigh", "r", "mantissaHighBitsUnset", "mantissaLow", "mantissaLowBitsUnset", "h", "b", "rounding", "__decideRounding", "signBit", "__kBitConversionInts", "__kBitConversionDouble", "__copy", "__absoluteSubOne", "__trim", "__absoluteAddOne", "y", "unaryMinus", "expValue", "__kMaxLengthBits", "neededDigits", "__initializeDigits", "msd", "runningSquare", "multiply", "resultLength", "__clzmsd", "__multiplyAccumulate", "__absoluteCompare", "quotient", "resultSign", "divisor", "__absoluteDivSmall", "__absoluteDivLarge", "remainderDigit", "__absoluteModSmall", "remainder", "__absoluteAdd", "__absoluteSub", "__rightShiftByAbsolute", "__leftShiftByAbsolute", "__compareToBigInt", "equal", "__absoluteAnd", "y1", "__absoluteOr", "__absoluteAndNot", "__absoluteXor", "neededLength", "topDigit", "compareDigit", "__truncateToNBits", "__truncateAndSubFromPowerOfTwo", "bitsInTopDigit", "__toNumeric", "__isBigInt", "add", "__compare", "EQ", "__equalToNumber", "dataview", "byteOffset", "littleEndian", "asIntN", "DataViewGetBigUint64", "getUint32", "low", "s", "DataViewSetBigUint64", "asUintN", "d1", "setUint32", "mantissaBitsUnset", "topUnconsumedBit", "mask", "rawExponent", "digits", "kMantissaHighTopBit", "msdTopBit", "remainingMantissaBits", "string", "cursor", "charCodeAt", "__isWhitespace", "chars", "bitsPerChar", "__kMaxBitsPerChar", "roundup", "__kBitsPerCharTableMultiplier", "bitsMin", "__kBitsPerCharTableShift", "limDigit", "limAlpha", "done", "charsSoFar", "part", "S", "k", "m", "I", "digitsSoFar", "__inplaceMultiplyAdd", "parts", "partsBits", "bits", "f", "p", "__fillFromParts", "bitsInDigit", "partBits", "charMask", "charsRequired", "Array", "pos", "availableBits", "newDigit", "__kConversionChars", "consumedBits", "isRecursiveCall", "bitLength", "maxBitsPerChar", "minBitsPerChar", "secondHalf", "secondHalfChars", "conqueror", "exponentiate", "input", "divisionResult", "firstHalf", "leftNegative", "bothNegative", "xSign", "__unequalSign", "__absoluteGreater", "__absoluteLess", "ySign", "yAbs", "xDigit", "__compareToDouble", "yBitLength", "compareMantissa", "op", "__comparisonResultToBool", "__compareToNumber", "inputLength", "__setDigitGrow", "yLength", "numPairs", "tmp", "tmpLength", "diff", "multiplicand", "accumulator", "accumulatorIndex", "m2Low", "m2High", "acc", "m1", "m1Low", "m1High", "rLow", "rMid1", "rMid2", "rHigh", "source", "factor", "rx", "ry", "upperHalf", "lowerHalf", "dividend", "wantQuotient", "wantRemainder", "__halfDigitLength", "n2", "q", "qhatv", "__clz15", "__specialLeftShift", "vn1", "halfDigitBuffer", "j", "qhat", "ujn", "rhat", "vn2", "ujn2", "__internalMultiplyAdd", "__inplaceSub", "__inplaceAdd", "__inplaceRightShift", "addDigit", "__toShiftAmount", "digitShift", "bitsShift", "grow", "__rightShiftByMaximum", "mustRoundDown", "obj", "hint", "Symbol", "toPrimitive", "exoticToPrim", "valueOf", "call", "drop", "min", "limit", "resultMsd", "msdBitsConsumed", "minuendMsd", "base", "ArrayBuffer", "Float64Array", "__kBitConversionBuffer", "Int32Array", "LN2", "log", "require_level_supports", "__commonJSMin", "exports", "init_shim", "manifests", "manifest", "acc", "m", "require_module_error", "__commonJSMin", "exports", "module", "init_shim", "message", "options", "require_text_endec", "__commonJSMin", "exports", "module", "init_shim", "lazy", "require_encoding", "__commonJSMin", "exports", "init_shim", "ModuleError", "formats", "Encoding", "options", "require_formats", "__commonJSMin", "exports", "init_shim", "Buffer", "Encoding", "textEndec", "BufferFormat", "options", "ViewFormat", "data", "view", "UTF8Format", "textEncoder", "textDecoder", "require_encodings", "__commonJSMin", "exports", "init_shim", "Buffer", "textEncoder", "textDecoder", "BufferFormat", "ViewFormat", "UTF8Format", "identity", "v", "data", "buffer", "require_level_transcoder", "__commonJSMin", "exports", "init_shim", "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", "init_shim", "R", "ReflectApply", "target", "receiver", "args", "ReflectOwnKeys", "ProcessEmitWarning", "warning", "NumberIsNaN", "value", "EventEmitter", "once", "defaultMaxListeners", "checkListener", "listener", "arg", "n", "_getMaxListeners", "that", "type", "doError", "events", "er", "err", "handler", "len", "listeners", "arrayClone", "_addListener", "prepend", "m", "existing", "w", "onceWrapper", "_onceWrap", "state", "wrapped", "list", "position", "i", "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", "init_shim", "fn", "require_catering", "__commonJSMin", "exports", "init_shim", "nextTick", "callback", "symbol", "promise", "resolve", "reject", "err", "res", "require_common", "__commonJSMin", "exports", "init_shim", "options", "callback", "def", "require_abstract_iterator", "__commonJSMin", "exports", "init_shim", "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", "i", "AbstractValueIterator", "values", "subject", "cause", "k", "require_default_kv_iterator", "__commonJSMin", "exports", "init_shim", "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", "init_shim", "AbstractIterator", "AbstractKeyIterator", "AbstractValueIterator", "ModuleError", "kNut", "kUndefer", "kFactory", "DeferredIterator", "db", "options", "DeferredKeyIterator", "DeferredValueIterator", "Iterator", "callback", "size", "target", "require_abstract_chained_batch", "__commonJSMin", "exports", "init_shim", "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", "init_shim", "AbstractChainedBatch", "ModuleError", "kEncoded", "DefaultChainedBatch", "db", "key", "value", "options", "callback", "require_range_options", "__commonJSMin", "exports", "module", "init_shim", "ModuleError", "hasOwnProperty", "rangeOptions", "options", "keyEncoding", "result", "k", "require_queue_microtask", "__commonJSMin", "exports", "module", "init_shim", "promise", "cb", "err", "require_next_tick_browser", "__commonJSMin", "exports", "module", "init_shim", "queueMicrotask", "fn", "args", "require_abstract_sublevel_iterator", "__commonJSMin", "exports", "init_shim", "AbstractIterator", "AbstractKeyIterator", "AbstractValueIterator", "kUnfix", "kIterator", "kHandleOne", "kHandleMany", "kCallback", "AbstractSublevelIterator", "db", "options", "iterator", "unfix", "err", "key", "value", "callback", "entries", "entry", "AbstractSublevelKeyIterator", "keys", "i", "AbstractSublevelValueIterator", "Iterator", "size", "target", "require_abstract_sublevel", "__commonJSMin", "exports", "module", "init_shim", "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", "init_shim", "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", "init_shim", "require_run_parallel_limit", "__commonJSMin", "exports", "module", "init_shim", "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", "init_shim", "options", "lower", "upper", "lowerExclusive", "upperExclusive", "require_deserialize", "__commonJSMin", "exports", "module", "init_shim", "textEncoder", "data", "require_iterator", "__commonJSMin", "exports", "init_shim", "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", "init_shim", "db", "location", "keyRange", "options", "callback", "transaction", "store", "count", "method", "direction", "ev", "cursor", "require_browser_level", "__commonJSMin", "exports", "init_shim", "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", "init_shim", "require_eventemitter3", "__commonJSMin", "exports", "module", "init_shim", "has", "prefix", "Events", "EE", "fn", "context", "once", "addListener", "emitter", "event", "listener", "evt", "clearEvent", "EventEmitter", "names", "events", "name", "handlers", "i", "l", "ee", "listeners", "a1", "a2", "a3", "a4", "a5", "len", "args", "length", "j", "require_primordials", "__commonJSMin", "exports", "module", "init_shim", "self", "el", "sep", "fn", "start", "end", "thisArgs", "args", "instance", "props", "name", "prop", "obj", "target", "proto", "thenFn", "catchFn", "err", "value", "buf", "len", "require_util", "__commonJSMin", "exports", "module", "init_shim", "bufferModule", "AsyncFunction", "Blob", "isBlob", "b", "AggregateError", "errors", "message", "callback", "called", "args", "resolve", "reject", "res", "rej", "fn", "err", "format", "_unused", "type", "replacement", "value", "arr", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "AbortController", "AbortSignal", "require_errors", "__commonJSMin", "exports", "module", "init_shim", "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", "init_shim", "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", "validateSignalName", "signal", "validateBuffer", "buffer", "validateEncoding", "data", "encoding", "normalizedEncoding", "length", "validatePort", "port", "allowZero", "validateAbortSignal", "validateFunction", "validatePlainFunction", "validateUndefined", "validateUnion", "union", "linkValueRegExp", "validateLinkHeaderFormat", "validateLinkHeaderValue", "hints", "hintsLength", "result", "link", "require_utils", "__commonJSMin", "exports", "module", "init_shim", "Symbol", "SymbolAsyncIterator", "SymbolIterator", "SymbolFor", "kDestroyed", "kIsErrored", "kIsReadable", "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", "init_shim", "process", "AbortError", "codes", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_PREMATURE_CLOSE", "kEmptyObject", "once", "validateAbortSignal", "validateFunction", "validateObject", "validateBoolean", "Promise", "PromisePrototypeThen", "isClosed", "isReadable", "isReadableNodeStream", "isReadableStream", "isReadableFinished", "isReadableErrored", "isWritable", "isWritableNodeStream", "isWritableStream", "isWritableFinished", "isWritableErrored", "isNodeStream", "_willEmitClose", "kIsClosedPromise", "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", "originalCallback", "args", "isAborted", "resolverFn", "finished", "opts", "_opts", "autoCleanup", "resolve", "reject", "require_destroy", "__commonJSMin", "exports", "module", "init_shim", "process", "aggregateTwoErrors", "ERR_MULTIPLE_CALLBACK", "AbortError", "Symbol", "kDestroyed", "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", "init_shim", "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", "init_shim", "AbortError", "codes", "isNodeStream", "isWebStream", "kControllerErrorFunction", "eos", "ERR_INVALID_ARG_TYPE", "validateAbortSignal", "signal", "name", "stream", "onAbort", "require_buffer_list", "__commonJSMin", "exports", "module", "init_shim", "StringPrototypeSlice", "SymbolIterator", "TypedArrayPrototypeSet", "Uint8Array", "Buffer", "inspect", "v", "entry", "ret", "s", "p", "n", "i", "hasStrings", "data", "slice", "c", "str", "retLen", "buf", "_", "options", "require_state", "__commonJSMin", "exports", "module", "init_shim", "MathFloor", "NumberIsInteger", "ERR_INVALID_ARG_VALUE", "highWaterMarkFrom", "options", "isDuplex", "duplexKey", "getDefaultHighWaterMark", "objectMode", "getHighWaterMark", "state", "hwm", "name", "require_safe_buffer", "__commonJSMin", "exports", "module", "init_shim", "buffer", "Buffer", "copyProps", "src", "dst", "key", "SafeBuffer", "arg", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_string_decoder", "__commonJSMin", "exports", "init_shim", "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", "init_shim", "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", "init_shim", "process", "ArrayPrototypeIndexOf", "NumberIsInteger", "NumberIsNaN", "NumberParseInt", "ObjectDefineProperties", "ObjectKeys", "ObjectSetPrototypeOf", "Promise", "SafeSet", "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", "validateObject", "kPaused", "StringDecoder", "from", "nop", "errorOrDestroy", "options", "stream", "isDuplex", "maybeReadMore", "err", "cb", "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", "resolve", "error", "r", "val", "value", "endReadableNT", "endWritableNT", "wState", "iterable", "opts", "webStreamsAdapters", "lazyWebStreams", "readableStream", "streamReadable", "_ref", "_src$readableObjectMo", "require_writable", "__commonJSMin", "exports", "module", "init_shim", "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", "_state$errored", "onfinishCallbacks", "i", "_state$errored2", "buffered", "bufferedIndex", "objectMode", "bufferedLength", "n", "chunks", "needFinish", "callFinal", "called", "onFinish", "finish", "prefinish", "rState", "value", "w", "val", "wState", "destroy", "webStreamsAdapters", "lazyWebStreams", "writableStream", "streamWritable", "require_duplexify", "__commonJSMin", "exports", "module", "init_shim", "process", "bufferModule", "isReadable", "isWritable", "isIterable", "isNodeStream", "isReadableNodeStream", "isWritableNodeStream", "isDuplexNodeStream", "eos", "AbortError", "ERR_INVALID_ARG_TYPE", "ERR_INVALID_RETURN_VALUE", "destroyer", "Duplex", "Readable", "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", "init_shim", "ObjectDefineProperties", "ObjectGetOwnPropertyDescriptor", "ObjectKeys", "ObjectSetPrototypeOf", "Duplex", "Readable", "Writable", "keys", "i", "method", "options", "value", "webStreamsAdapters", "lazyWebStreams", "pair", "duplex", "duplexify", "body", "require_transform", "__commonJSMin", "exports", "module", "init_shim", "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", "init_shim", "ObjectSetPrototypeOf", "PassThrough", "Transform", "options", "chunk", "encoding", "cb", "require_pipeline", "__commonJSMin", "exports", "module", "init_shim", "process", "ArrayIsArray", "Promise", "SymbolAsyncIterator", "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", "isReadableEnded", "AbortController", "PassThrough", "Readable", "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", "value", "destroys", "finishCount", "final", "fn", "ret", "i", "isLastStream", "onError", "destroy", "_ret", "_ret2", "pt", "then", "toRead", "pipe", "src", "dst", "ended", "endFn", "rState", "require_compose", "__commonJSMin", "exports", "module", "init_shim", "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", "init_shim", "AbortController", "ERR_INVALID_ARG_VALUE", "ERR_INVALID_ARG_TYPE", "ERR_MISSING_ARGS", "ERR_OUT_OF_RANGE", "AbortError", "validateAbortSignal", "validateInteger", "validateObject", "kWeakHandler", "finished", "staticCompose", "addAbortSignalNoValidate", "isWritable", "isNodeStream", "ArrayPrototypePush", "MathFloor", "Number", "NumberIsNaN", "Promise", "PromiseReject", "PromisePrototypeThen", "Symbol", "kEmpty", "kEof", "compose", "stream", "options", "composedStream", "map", "fn", "concurrency", "_options$signal", "_options$signal2", "ac", "queue", "signal", "signalOpt", "abort", "next", "resume", "done", "onDone", "pump", "val", "_val", "err", "resolve", "_options$signal3", "asIndexedPairs", "index", "_options$signal4", "some", "unused", "filter", "every", "args", "find", "result", "forEach", "forEachFn", "value", "filterFn", "ReduceAwareErrMissingArgs", "reduce", "reducer", "initialValue", "_options$signal5", "hasInitialValue", "opts", "gotAnyItemFromStream", "_options$signal6", "toArray", "_options$signal7", "flatMap", "values", "toIntegerOrInfinity", "number", "drop", "_options$signal8", "_options$signal9", "take", "_options$signal10", "_options$signal11", "require_inherits_browser", "__commonJSMin", "exports", "module", "init_shim", "ctor", "superCtor", "TempCtor", "require_stream_browser", "__commonJSMin", "exports", "module", "init_shim", "require_shams", "__commonJSMin", "exports", "module", "init_shim", "obj", "sym", "symObj", "symVal", "syms", "descriptor", "require_shams", "__commonJSMin", "exports", "module", "init_shim", "hasSymbols", "require_has_symbols", "__commonJSMin", "exports", "module", "init_shim", "origSymbol", "hasSymbolSham", "require_has_proto", "__commonJSMin", "exports", "module", "init_shim", "test", "$Object", "require_implementation", "__commonJSMin", "exports", "module", "init_shim", "ERROR_MESSAGE", "slice", "toStr", "funcType", "that", "target", "args", "bound", "binder", "result", "boundLength", "boundArgs", "i", "Empty", "require_function_bind", "__commonJSMin", "exports", "module", "init_shim", "implementation", "require_src", "__commonJSMin", "exports", "module", "init_shim", "bind", "require_get_intrinsic", "__commonJSMin", "exports", "module", "init_shim", "undefined", "$SyntaxError", "$Function", "$TypeError", "getEvalledConstructor", "expressionSyntax", "$gOPD", "throwTypeError", "ThrowTypeError", "hasSymbols", "hasProto", "getProto", "x", "needsEval", "TypedArray", "INTRINSICS", "e", "errorProto", "doEval", "name", "value", "fn", "gen", "LEGACY_ALIASES", "bind", "hasOwn", "$concat", "$spliceApply", "$replace", "$strSlice", "$exec", "rePropName", "reEscapeChar", "stringToPath", "string", "first", "last", "result", "match", "number", "quote", "subString", "getBaseIntrinsic", "allowMissing", "intrinsicName", "alias", "parts", "intrinsicBaseName", "intrinsic", "intrinsicRealName", "skipFurtherCaching", "i", "isOwn", "part", "desc", "require_call_bind", "__commonJSMin", "exports", "module", "init_shim", "bind", "GetIntrinsic", "$apply", "$call", "$reflectApply", "$gOPD", "$defineProperty", "$max", "originalFunction", "func", "desc", "applyBind", "require_callBound", "__commonJSMin", "exports", "module", "init_shim", "GetIntrinsic", "callBind", "$indexOf", "name", "allowMissing", "intrinsic", "require_is_arguments", "__commonJSMin", "exports", "module", "init_shim", "hasToStringTag", "callBound", "$toString", "isStandardArguments", "value", "isLegacyArguments", "supportsStandardArguments", "require_is_generator_function", "__commonJSMin", "exports", "module", "init_shim", "toStr", "fnToStr", "isFnRegex", "hasToStringTag", "getProto", "getGeneratorFunc", "GeneratorFunction", "fn", "str", "generatorFunc", "require_is_callable", "__commonJSMin", "exports", "module", "init_shim", "fnToStr", "reflectApply", "badArrayLike", "isCallableMarker", "_", "constructorRegex", "isES6ClassFn", "value", "fnStr", "tryFunctionObject", "toStr", "objectClass", "fnClass", "genClass", "ddaClass", "ddaClass2", "ddaClass3", "hasToStringTag", "isIE68", "isDDA", "all", "str", "e", "strClass", "require_for_each", "__commonJSMin", "exports", "module", "init_shim", "isCallable", "toStr", "hasOwnProperty", "forEachArray", "array", "iterator", "receiver", "i", "len", "forEachString", "string", "forEachObject", "object", "k", "forEach", "list", "thisArg", "require_available_typed_arrays", "__commonJSMin", "exports", "module", "init_shim", "possibleNames", "g", "out", "i", "require_gopd", "__commonJSMin", "exports", "module", "init_shim", "GetIntrinsic", "$gOPD", "require_is_typed_array", "__commonJSMin", "exports", "module", "init_shim", "forEach", "availableTypedArrays", "callBound", "$toString", "hasToStringTag", "gOPD", "g", "typedArrays", "$indexOf", "array", "value", "$slice", "toStrTags", "getPrototypeOf", "typedArray", "arr", "proto", "descriptor", "superProto", "tryTypedArrays", "anyTrue", "getter", "tag", "require_which_typed_array", "__commonJSMin", "exports", "module", "init_shim", "forEach", "availableTypedArrays", "callBound", "gOPD", "$toString", "hasToStringTag", "g", "typedArrays", "$slice", "toStrTags", "getPrototypeOf", "typedArray", "arr", "proto", "descriptor", "superProto", "tryTypedArrays", "value", "foundName", "getter", "name", "isTypedArray", "require_types", "__commonJSMin", "exports", "init_shim", "isArgumentsObject", "isGeneratorFunction", "whichTypedArray", "isTypedArray", "uncurryThis", "f", "BigIntSupported", "SymbolSupported", "ObjectToString", "numberValue", "stringValue", "booleanValue", "bigIntValue", "symbolValue", "checkBoxedPrimitive", "value", "prototypeValueOf", "isPromise", "input", "isArrayBufferView", "isDataView", "isUint8Array", "isUint8ClampedArray", "isUint16Array", "isUint32Array", "isInt8Array", "isInt16Array", "isInt32Array", "isFloat32Array", "isFloat64Array", "isBigInt64Array", "isBigUint64Array", "isMapToString", "isMap", "isSetToString", "isSet", "isWeakMapToString", "isWeakMap", "isWeakSetToString", "isWeakSet", "isArrayBufferToString", "isArrayBuffer", "isDataViewToString", "SharedArrayBufferCopy", "isSharedArrayBufferToString", "isSharedArrayBuffer", "isAsyncFunction", "isMapIterator", "isSetIterator", "isGeneratorObject", "isWebAssemblyCompiledModule", "isNumberObject", "isStringObject", "isBooleanObject", "isBigIntObject", "isSymbolObject", "isBoxedPrimitive", "isAnyArrayBuffer", "method", "require_isBufferBrowser", "__commonJSMin", "exports", "module", "init_shim", "arg", "require_util", "__commonJSMin", "exports", "init_shim", "getOwnPropertyDescriptors", "obj", "keys", "descriptors", "i", "formatRegExp", "f", "isString", "objects", "inspect", "args", "len", "str", "x", "isNull", "isObject", "fn", "msg", "process", "warned", "deprecated", "debugs", "debugEnvRegex", "debugEnv", "set", "pid", "opts", "ctx", "stylizeNoColor", "isBoolean", "isUndefined", "stylizeWithColor", "formatValue", "styleType", "style", "arrayToHash", "array", "hash", "val", "idx", "value", "recurseTimes", "isFunction", "ret", "primitive", "formatPrimitive", "visibleKeys", "isError", "formatError", "name", "isRegExp", "isDate", "base", "braces", "isArray", "n", "output", "formatArray", "key", "formatProperty", "reduceToSingleString", "simple", "isNumber", "l", "hasOwnProperty", "desc", "line", "numLinesEst", "length", "prev", "cur", "ar", "arg", "isNullOrUndefined", "isSymbol", "re", "objectToString", "d", "e", "isPrimitive", "o", "pad", "months", "timestamp", "time", "origin", "add", "prop", "kCustomPromisifiedSymbol", "original", "promiseResolve", "promiseReject", "promise", "resolve", "reject", "err", "callbackifyOnRejected", "reason", "cb", "newReason", "callbackify", "callbackified", "maybeCb", "self", "rej", "require_buffer_list", "__commonJSMin", "exports", "module", "init_shim", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "obj", "value", "_toPropertyKey", "_classCallCheck", "instance", "Constructor", "_defineProperties", "props", "descriptor", "_createClass", "protoProps", "staticProps", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_require", "Buffer", "_require2", "inspect", "custom", "copyBuffer", "src", "offset", "BufferList", "v", "entry", "ret", "s", "p", "n", "hasStrings", "c", "str", "nb", "buf", "_", "options", "require_destroy", "__commonJSMin", "exports", "module", "init_shim", "destroy", "err", "cb", "_this", "readableDestroyed", "writableDestroyed", "process", "emitErrorNT", "emitCloseNT", "emitErrorAndCloseNT", "self", "undestroy", "errorOrDestroy", "stream", "rState", "wState", "require_errors_browser", "__commonJSMin", "exports", "module", "init_shim", "_inheritsLoose", "subClass", "superClass", "codes", "createErrorType", "code", "message", "Base", "getMessage", "arg1", "arg2", "arg3", "NodeError", "_Base", "oneOf", "expected", "thing", "len", "startsWith", "str", "search", "pos", "endsWith", "this_len", "includes", "start", "name", "value", "actual", "determiner", "msg", "type", "arg", "require_state", "__commonJSMin", "exports", "module", "init_shim", "ERR_INVALID_OPT_VALUE", "highWaterMarkFrom", "options", "isDuplex", "duplexKey", "getHighWaterMark", "state", "hwm", "name", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "deprecate", "fn", "msg", "config", "warned", "deprecated", "name", "val", "require_stream_writable", "__commonJSMin", "exports", "module", "init_shim", "Writable", "CorkedRequest", "state", "_this", "onCorkedFinish", "Duplex", "WritableState", "internalUtil", "Stream", "Buffer", "OurUint8Array", "_uint8ArrayToBuffer", "chunk", "_isUint8Array", "obj", "destroyImpl", "_require", "getHighWaterMark", "_require$codes", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_STREAM_CANNOT_PIPE", "ERR_STREAM_DESTROYED", "ERR_STREAM_NULL_VALUES", "ERR_STREAM_WRITE_AFTER_END", "ERR_UNKNOWN_ENCODING", "errorOrDestroy", "nop", "options", "stream", "isDuplex", "noDecode", "er", "onwrite", "current", "out", "realHasInstance", "object", "writeAfterEnd", "cb", "process", "validChunk", "encoding", "ret", "isBuf", "writeOrBuffer", "clearBuffer", "decodeChunk", "newChunk", "len", "last", "doWrite", "writev", "onwriteError", "sync", "finishMaybe", "onwriteStateUpdate", "finished", "needFinish", "afterWrite", "onwriteDrain", "entry", "l", "buffer", "holder", "count", "allBuffers", "endWritable", "callFinal", "err", "prefinish", "need", "rState", "corkReq", "value", "require_stream_duplex", "__commonJSMin", "exports", "module", "init_shim", "objectKeys", "obj", "keys", "key", "Duplex", "Readable", "Writable", "v", "method", "options", "onend", "process", "onEndNT", "self", "value", "require_end_of_stream", "__commonJSMin", "exports", "module", "init_shim", "ERR_STREAM_PREMATURE_CLOSE", "once", "callback", "called", "_len", "args", "_key", "noop", "isRequest", "stream", "eos", "opts", "readable", "writable", "onlegacyfinish", "onfinish", "writableEnded", "readableEnded", "onend", "onerror", "err", "onclose", "onrequest", "require_async_iterator", "__commonJSMin", "exports", "module", "init_shim", "_Object$setPrototypeO", "_defineProperty", "obj", "key", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "finished", "kLastResolve", "kLastReject", "kError", "kEnded", "kLastPromise", "kHandlePromise", "kStream", "createIterResult", "done", "readAndResolve", "iter", "resolve", "data", "onReadable", "process", "wrapForNext", "lastPromise", "reject", "AsyncIteratorPrototype", "ReadableStreamAsyncIteratorPrototype", "_this", "error", "promise", "_this2", "err", "createReadableStreamAsyncIterator", "stream", "_Object$create", "iterator", "require_from_browser", "__commonJSMin", "exports", "module", "init_shim", "require_stream_readable", "__commonJSMin", "exports", "module", "init_shim", "Readable", "Duplex", "ReadableState", "EE", "EElistenerCount", "emitter", "type", "Stream", "Buffer", "OurUint8Array", "_uint8ArrayToBuffer", "chunk", "_isUint8Array", "obj", "debugUtil", "debug", "BufferList", "destroyImpl", "_require", "getHighWaterMark", "_require$codes", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_PUSH_AFTER_EOF", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_STREAM_UNSHIFT_AFTER_END_EVENT", "StringDecoder", "createReadableStreamAsyncIterator", "from", "errorOrDestroy", "kProxyEvents", "prependListener", "event", "fn", "options", "stream", "isDuplex", "value", "err", "cb", "encoding", "state", "skipChunkCheck", "readableAddChunk", "addToFront", "onEofChunk", "er", "chunkInvalid", "addChunk", "maybeReadMore", "emitReadable", "enc", "decoder", "p", "content", "MAX_HWM", "computeNewHighWaterMark", "n", "howMuchToRead", "nOrig", "endReadable", "doRead", "ret", "fromList", "emitReadable_", "process", "flow", "maybeReadMore_", "len", "dest", "pipeOpts", "src", "doEnd", "endFn", "onend", "unpipe", "onunpipe", "readable", "unpipeInfo", "cleanup", "ondrain", "pipeOnDrain", "cleanedUp", "onclose", "onfinish", "onerror", "ondata", "indexOf", "dests", "i", "index", "ev", "res", "nReadingNextTick", "updateReadableListening", "self", "resume", "resume_", "_this", "paused", "method", "endReadableNT", "wState", "iterable", "opts", "xs", "x", "l", "require_stream_transform", "__commonJSMin", "exports", "module", "init_shim", "Transform", "_require$codes", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_TRANSFORM_ALREADY_TRANSFORMING", "ERR_TRANSFORM_WITH_LENGTH_0", "Duplex", "afterTransform", "er", "data", "ts", "cb", "rs", "options", "prefinish", "_this", "done", "chunk", "encoding", "n", "err", "err2", "stream", "require_stream_passthrough", "__commonJSMin", "exports", "module", "init_shim", "PassThrough", "Transform", "options", "chunk", "encoding", "cb", "require_pipeline", "__commonJSMin", "exports", "module", "init_shim", "eos", "once", "callback", "called", "_require$codes", "ERR_MISSING_ARGS", "ERR_STREAM_DESTROYED", "noop", "err", "isRequest", "stream", "destroyer", "reading", "writing", "closed", "destroyed", "call", "fn", "pipe", "from", "to", "popCallback", "streams", "pipeline", "_len", "_key", "error", "destroys", "i", "require_stream_browserify", "__commonJSMin", "exports", "module", "init_shim", "Stream", "EE", "inherits", "dest", "options", "source", "ondata", "chunk", "ondrain", "onend", "onclose", "didOnEnd", "onerror", "er", "cleanup", "require_promises", "__commonJSMin", "exports", "module", "init_shim", "ArrayPrototypePop", "Promise", "isIterable", "isNodeStream", "isWebStream", "pl", "finished", "pipeline", "streams", "resolve", "reject", "signal", "end", "lastArg", "options", "err", "value", "require_stream", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "ObjectDefineProperty", "ObjectKeys", "ReflectApply", "customPromisify", "streamReturningOperators", "promiseReturningOperators", "ERR_ILLEGAL_CONSTRUCTOR", "compose", "pipeline", "destroyer", "eos", "promises", "utils", "Stream", "key", "fn", "args", "op", "addAbortSignal", "value", "chunk", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "CustomStream", "promises", "originalDestroy", "require_lib", "__commonJSMin", "exports", "module", "init_shim", "errors", "assert", "cond", "msg", "isUint8Array", "name", "value", "length", "numbers", "isCompressed", "toTypeString", "getAssertedOutput", "output", "len", "secp256k1", "seed", "seckey", "tweak", "pubkey", "compressed", "pubkeys", "sig", "obj", "msg32", "options", "recid", "require_package", "__commonJSMin", "exports", "module", "require_bn", "__commonJSMin", "exports", "module", "init_shim", "assert", "val", "msg", "inherits", "ctor", "superCtor", "TempCtor", "BN", "number", "base", "endian", "Buffer", "num", "left", "right", "start", "i", "j", "w", "off", "parseHex4Bits", "string", "index", "c", "parseHexByte", "lowerBound", "r", "parseLength", "parseBase", "str", "end", "mul", "len", "limbLen", "limbPow", "total", "mod", "word", "pow", "dest", "size", "zeros", "groupSizes", "groupBases", "padding", "out", "carry", "groupSize", "groupBase", "ret", "length", "ArrayType", "byteLength", "reqLength", "littleEndian", "res", "q", "t", "hi", "toBitArray", "bit", "wbit", "b", "width", "a", "bytesNeeded", "bitsLeft", "cmp", "smallMulTo", "self", "lo", "k", "ncarry", "rword", "maxJ", "comb10MulTo", "o", "mid", "a0", "al0", "ah0", "a1", "al1", "ah1", "a2", "al2", "ah2", "a3", "al3", "ah3", "a4", "al4", "ah4", "a5", "al5", "ah5", "a6", "al6", "ah6", "a7", "al7", "ah7", "a8", "al8", "ah8", "a9", "al9", "ah9", "b0", "bl0", "bh0", "b1", "bl1", "bh1", "b2", "bl2", "bh2", "b3", "bl3", "bh3", "b4", "bl4", "bh4", "b5", "bl5", "bh5", "b6", "bl6", "bh6", "b7", "bl7", "bh7", "b8", "bl8", "bh8", "b9", "bl9", "bh9", "w0", "w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8", "w9", "w10", "w11", "w12", "w13", "w14", "w15", "w16", "w17", "w18", "bigMulTo", "hncarry", "jumboMulTo", "fftm", "FFTM", "x", "y", "N", "l", "rb", "rbt", "rws", "iws", "rtws", "itws", "s", "rtwdf", "itwdf", "p", "rtwdf_", "itwdf_", "re", "ie", "ro", "io", "rx", "n", "m", "odd", "ws", "ph", "_", "rwst", "iwst", "nrws", "nrwst", "niwst", "rmws", "bits", "carryMask", "newCarry", "hint", "extended", "h", "mask", "maskedWords", "shift", "mode", "bhi", "bhiBits", "diff", "qj", "positive", "div", "dm", "half", "r2", "acc", "A", "B", "C", "D", "g", "yp", "xp", "im", "jm", "x1", "x2", "delta", "negative", "Red", "ctx", "primes", "MPrime", "name", "tmp", "rlen", "input", "K256", "output", "outLen", "prev", "next", "P224", "P192", "P25519", "prime", "mod3", "one", "nOne", "lpow", "z", "inv", "windowSize", "wnd", "current", "currentLen", "Mont", "u", "require_minimalistic_assert", "__commonJSMin", "exports", "module", "init_shim", "assert", "val", "msg", "l", "require_utils", "__commonJSMin", "exports", "init_shim", "utils", "toArray", "msg", "enc", "res", "c", "hi", "lo", "zero2", "word", "toHex", "i", "arr", "require_utils", "__commonJSMin", "exports", "init_shim", "utils", "BN", "minAssert", "minUtils", "getNAF", "num", "w", "bits", "naf", "ws", "k", "i", "z", "mod", "getJSF", "k1", "k2", "jsf", "d1", "d2", "m8", "m14", "m24", "u1", "u2", "cachedProperty", "obj", "name", "computer", "key", "parseBytes", "bytes", "intFromLE", "require_safe_buffer", "__commonJSMin", "exports", "module", "init_shim", "buffer", "Buffer", "copyProps", "src", "dst", "key", "SafeBuffer", "arg", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "MAX_BYTES", "MAX_UINT32", "oldBrowser", "Buffer", "crypto", "randomBytes", "size", "cb", "bytes", "generated", "process", "require_safe_buffer", "__commonJSMin", "exports", "module", "init_shim", "buffer", "Buffer", "copyProps", "src", "dst", "key", "SafeBuffer", "arg", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_stream_browser", "__commonJSMin", "exports", "module", "init_shim", "require_buffer_list", "__commonJSMin", "exports", "module", "init_shim", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "obj", "value", "_toPropertyKey", "_classCallCheck", "instance", "Constructor", "_defineProperties", "props", "descriptor", "_createClass", "protoProps", "staticProps", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_require", "Buffer", "_require2", "inspect", "custom", "copyBuffer", "src", "offset", "BufferList", "v", "entry", "ret", "s", "p", "n", "hasStrings", "c", "str", "nb", "buf", "_", "options", "require_destroy", "__commonJSMin", "exports", "module", "init_shim", "destroy", "err", "cb", "_this", "readableDestroyed", "writableDestroyed", "process", "emitErrorNT", "emitCloseNT", "emitErrorAndCloseNT", "self", "undestroy", "errorOrDestroy", "stream", "rState", "wState", "require_errors_browser", "__commonJSMin", "exports", "module", "init_shim", "_inheritsLoose", "subClass", "superClass", "codes", "createErrorType", "code", "message", "Base", "getMessage", "arg1", "arg2", "arg3", "NodeError", "_Base", "oneOf", "expected", "thing", "len", "startsWith", "str", "search", "pos", "endsWith", "this_len", "includes", "start", "name", "value", "actual", "determiner", "msg", "type", "arg", "require_state", "__commonJSMin", "exports", "module", "init_shim", "ERR_INVALID_OPT_VALUE", "highWaterMarkFrom", "options", "isDuplex", "duplexKey", "getHighWaterMark", "state", "hwm", "name", "require_stream_writable", "__commonJSMin", "exports", "module", "init_shim", "Writable", "CorkedRequest", "state", "_this", "onCorkedFinish", "Duplex", "WritableState", "internalUtil", "Stream", "Buffer", "OurUint8Array", "_uint8ArrayToBuffer", "chunk", "_isUint8Array", "obj", "destroyImpl", "_require", "getHighWaterMark", "_require$codes", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_STREAM_CANNOT_PIPE", "ERR_STREAM_DESTROYED", "ERR_STREAM_NULL_VALUES", "ERR_STREAM_WRITE_AFTER_END", "ERR_UNKNOWN_ENCODING", "errorOrDestroy", "nop", "options", "stream", "isDuplex", "noDecode", "er", "onwrite", "current", "out", "realHasInstance", "object", "writeAfterEnd", "cb", "process", "validChunk", "encoding", "ret", "isBuf", "writeOrBuffer", "clearBuffer", "decodeChunk", "newChunk", "len", "last", "doWrite", "writev", "onwriteError", "sync", "finishMaybe", "onwriteStateUpdate", "finished", "needFinish", "afterWrite", "onwriteDrain", "entry", "l", "buffer", "holder", "count", "allBuffers", "endWritable", "callFinal", "err", "prefinish", "need", "rState", "corkReq", "value", "require_stream_duplex", "__commonJSMin", "exports", "module", "init_shim", "objectKeys", "obj", "keys", "key", "Duplex", "Readable", "Writable", "v", "method", "options", "onend", "process", "onEndNT", "self", "value", "require_end_of_stream", "__commonJSMin", "exports", "module", "init_shim", "ERR_STREAM_PREMATURE_CLOSE", "once", "callback", "called", "_len", "args", "_key", "noop", "isRequest", "stream", "eos", "opts", "readable", "writable", "onlegacyfinish", "onfinish", "writableEnded", "readableEnded", "onend", "onerror", "err", "onclose", "onrequest", "require_async_iterator", "__commonJSMin", "exports", "module", "init_shim", "_Object$setPrototypeO", "_defineProperty", "obj", "key", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "finished", "kLastResolve", "kLastReject", "kError", "kEnded", "kLastPromise", "kHandlePromise", "kStream", "createIterResult", "done", "readAndResolve", "iter", "resolve", "data", "onReadable", "process", "wrapForNext", "lastPromise", "reject", "AsyncIteratorPrototype", "ReadableStreamAsyncIteratorPrototype", "_this", "error", "promise", "_this2", "err", "createReadableStreamAsyncIterator", "stream", "_Object$create", "iterator", "require_from_browser", "__commonJSMin", "exports", "module", "init_shim", "require_stream_readable", "__commonJSMin", "exports", "module", "init_shim", "Readable", "Duplex", "ReadableState", "EE", "EElistenerCount", "emitter", "type", "Stream", "Buffer", "OurUint8Array", "_uint8ArrayToBuffer", "chunk", "_isUint8Array", "obj", "debugUtil", "debug", "BufferList", "destroyImpl", "_require", "getHighWaterMark", "_require$codes", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_PUSH_AFTER_EOF", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_STREAM_UNSHIFT_AFTER_END_EVENT", "StringDecoder", "createReadableStreamAsyncIterator", "from", "errorOrDestroy", "kProxyEvents", "prependListener", "event", "fn", "options", "stream", "isDuplex", "value", "err", "cb", "encoding", "state", "skipChunkCheck", "readableAddChunk", "addToFront", "onEofChunk", "er", "chunkInvalid", "addChunk", "maybeReadMore", "emitReadable", "enc", "decoder", "p", "content", "MAX_HWM", "computeNewHighWaterMark", "n", "howMuchToRead", "nOrig", "endReadable", "doRead", "ret", "fromList", "emitReadable_", "process", "flow", "maybeReadMore_", "len", "dest", "pipeOpts", "src", "doEnd", "endFn", "onend", "unpipe", "onunpipe", "readable", "unpipeInfo", "cleanup", "ondrain", "pipeOnDrain", "cleanedUp", "onclose", "onfinish", "onerror", "ondata", "indexOf", "dests", "i", "index", "ev", "res", "nReadingNextTick", "updateReadableListening", "self", "resume", "resume_", "_this", "paused", "method", "endReadableNT", "wState", "iterable", "opts", "xs", "x", "l", "require_stream_transform", "__commonJSMin", "exports", "module", "init_shim", "Transform", "_require$codes", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_TRANSFORM_ALREADY_TRANSFORMING", "ERR_TRANSFORM_WITH_LENGTH_0", "Duplex", "afterTransform", "er", "data", "ts", "cb", "rs", "options", "prefinish", "_this", "done", "chunk", "encoding", "n", "err", "err2", "stream", "require_stream_passthrough", "__commonJSMin", "exports", "module", "init_shim", "PassThrough", "Transform", "options", "chunk", "encoding", "cb", "require_pipeline", "__commonJSMin", "exports", "module", "init_shim", "eos", "once", "callback", "called", "_require$codes", "ERR_MISSING_ARGS", "ERR_STREAM_DESTROYED", "noop", "err", "isRequest", "stream", "destroyer", "reading", "writing", "closed", "destroyed", "call", "fn", "pipe", "from", "to", "popCallback", "streams", "pipeline", "_len", "_key", "error", "destroys", "i", "require_readable_browser", "__commonJSMin", "exports", "module", "init_shim", "require_hash_base", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "Transform", "inherits", "throwIfNotStringOrBuffer", "val", "prefix", "HashBase", "blockSize", "chunk", "encoding", "callback", "error", "err", "data", "block", "offset", "i", "j", "carry", "digest", "require_md5", "__commonJSMin", "exports", "module", "init_shim", "inherits", "HashBase", "Buffer", "ARRAY16", "MD5", "M", "i", "a", "b", "c", "d", "fnF", "fnG", "fnH", "fnI", "buffer", "rotl", "x", "n", "m", "k", "s", "require_ripemd160", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "inherits", "HashBase", "ARRAY16", "zl", "zr", "sl", "sr", "hl", "hr", "RIPEMD160", "words", "j", "al", "bl", "cl", "dl", "el", "ar", "br", "cr", "dr", "er", "i", "tl", "tr", "fn1", "fn5", "fn2", "fn4", "fn3", "rotl", "t", "buffer", "x", "n", "a", "b", "c", "d", "e", "m", "k", "require_hash", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "Hash", "blockSize", "finalSize", "data", "enc", "block", "length", "accum", "offset", "assigned", "remainder", "i", "rem", "bits", "lowBits", "highBits", "hash", "require_sha", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Hash", "Buffer", "K", "W", "Sha", "rotl5", "num", "rotl30", "ft", "s", "b", "c", "d", "M", "a", "e", "i", "j", "t", "H", "require_sha1", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Hash", "Buffer", "K", "W", "Sha1", "rotl1", "num", "rotl5", "rotl30", "ft", "s", "b", "c", "d", "M", "a", "e", "i", "j", "t", "H", "require_sha256", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Hash", "Buffer", "K", "W", "Sha256", "ch", "x", "y", "z", "maj", "sigma0", "sigma1", "gamma0", "gamma1", "M", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "T1", "T2", "H", "require_sha224", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Sha256", "Hash", "Buffer", "W", "Sha224", "H", "require_sha512", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Hash", "Buffer", "K", "W", "Sha512", "Ch", "x", "y", "z", "maj", "sigma0", "xl", "sigma1", "Gamma0", "Gamma0l", "Gamma1", "Gamma1l", "getCarry", "a", "b", "M", "ah", "bh", "ch", "dh", "eh", "fh", "gh", "hh", "al", "bl", "cl", "dl", "el", "fl", "gl", "hl", "i", "xh", "gamma0", "gamma0l", "gamma1", "gamma1l", "Wi7h", "Wi7l", "Wi16h", "Wi16l", "Wil", "Wih", "j", "majh", "majl", "sigma0h", "sigma0l", "sigma1h", "sigma1l", "Kih", "Kil", "chh", "chl", "t1l", "t1h", "t2l", "t2h", "H", "writeInt64BE", "h", "l", "offset", "require_sha384", "__commonJSMin", "exports", "module", "init_shim", "inherits", "SHA512", "Hash", "Buffer", "W", "Sha384", "H", "writeInt64BE", "h", "l", "offset", "require_sha", "__commonJSMin", "exports", "module", "init_shim", "algorithm", "Algorithm", "require_cipher_base", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "Transform", "StringDecoder", "inherits", "CipherBase", "hashMode", "data", "inputEnc", "outputEnc", "outData", "_", "next", "err", "e", "done", "value", "enc", "fin", "out", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "inherits", "MD5", "RIPEMD160", "sha", "Base", "Hash", "hash", "data", "alg", "require_legacy", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Buffer", "Base", "ZEROS", "blocksize", "Hmac", "alg", "key", "ipad", "opad", "i", "data", "h", "require_md5", "__commonJSMin", "exports", "module", "init_shim", "MD5", "buffer", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Legacy", "Base", "Buffer", "md5", "RIPEMD160", "sha", "ZEROS", "Hmac", "alg", "key", "blocksize", "hash", "ipad", "opad", "i", "data", "h", "require_algorithms", "__commonJSMin", "exports", "module", "require_algos", "__commonJSMin", "exports", "module", "init_shim", "require_precondition", "__commonJSMin", "exports", "module", "init_shim", "MAX_ALLOC", "iterations", "keylen", "require_default_encoding", "__commonJSMin", "exports", "module", "init_shim", "defaultEncoding", "pVersionMajor", "process", "require_to_buffer", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "thing", "encoding", "name", "require_sync_browser", "__commonJSMin", "exports", "module", "init_shim", "md5", "RIPEMD160", "sha", "Buffer", "checkParameters", "defaultEncoding", "toBuffer", "ZEROS", "sizes", "Hmac", "alg", "key", "saltLen", "hash", "getDigest", "blocksize", "ipad", "opad", "i", "ipad1", "data", "h", "shaFunc", "rmd160Func", "pbkdf2", "password", "salt", "iterations", "keylen", "digest", "hmac", "DK", "block1", "destPos", "hLen", "l", "T", "U", "j", "k", "require_async", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "checkParameters", "defaultEncoding", "sync", "toBuffer", "ZERO_BUF", "subtle", "toBrowser", "checks", "checkNative", "algo", "prom", "browserPbkdf2", "nextTick", "getNextTick", "password", "salt", "iterations", "length", "key", "res", "resolvePromise", "promise", "callback", "out", "e", "keylen", "digest", "resp", "require_browser", "__commonJSMin", "exports", "init_shim", "require_utils", "__commonJSMin", "exports", "init_shim", "bytes", "off", "res", "value", "inL", "inR", "out", "outL", "outR", "i", "j", "num", "shift", "pc2table", "len", "r", "sTable", "b", "sb", "permuteTable", "size", "group", "str", "require_cipher", "__commonJSMin", "exports", "module", "init_shim", "assert", "Cipher", "options", "data", "off", "min", "i", "out", "inputOff", "outputOff", "count", "max", "buffer", "first", "last", "require_des", "__commonJSMin", "exports", "module", "init_shim", "assert", "inherits", "utils", "Cipher", "DESState", "DES", "options", "state", "shiftTable", "key", "kL", "kR", "i", "shift", "inp", "inOff", "out", "outOff", "l", "r", "buffer", "off", "value", "pad", "lStart", "rStart", "keyL", "keyR", "s", "f", "t", "require_cbc", "__commonJSMin", "exports", "init_shim", "assert", "inherits", "proto", "CBCState", "iv", "i", "instantiate", "Base", "CBC", "options", "keys", "key", "state", "inp", "inOff", "out", "outOff", "superProto", "require_ede", "__commonJSMin", "exports", "module", "init_shim", "assert", "inherits", "Cipher", "DES", "EDEState", "type", "key", "k1", "k2", "k3", "EDE", "options", "state", "inp", "inOff", "out", "outOff", "require_des", "__commonJSMin", "exports", "init_shim", "require_browserify_des", "__commonJSMin", "exports", "module", "init_shim", "CipherBase", "des", "inherits", "Buffer", "modes", "DES", "opts", "modeName", "mode", "type", "key", "iv", "data", "require_ecb", "__commonJSMin", "exports", "init_shim", "self", "block", "require_buffer_xor", "__commonJSMin", "exports", "module", "init_shim", "a", "b", "length", "buffer", "i", "require_cbc", "__commonJSMin", "exports", "init_shim", "xor", "self", "block", "data", "pad", "out", "require_cfb", "__commonJSMin", "exports", "init_shim", "Buffer", "xor", "encryptStart", "self", "data", "decrypt", "len", "out", "require_cfb8", "__commonJSMin", "exports", "init_shim", "Buffer", "encryptByte", "self", "byteParam", "decrypt", "pad", "out", "chunk", "len", "i", "require_cfb1", "__commonJSMin", "exports", "init_shim", "Buffer", "encryptByte", "self", "byteParam", "decrypt", "pad", "i", "len", "out", "bit", "value", "shiftIn", "buffer", "chunk", "require_ofb", "__commonJSMin", "exports", "init_shim", "xor", "getBlock", "self", "chunk", "pad", "require_incr32", "__commonJSMin", "exports", "module", "init_shim", "incr32", "iv", "len", "item", "require_ctr", "__commonJSMin", "exports", "init_shim", "xor", "Buffer", "incr32", "getBlock", "self", "out", "blockSize", "chunk", "chunkNum", "start", "i", "offset", "pad", "require_list", "__commonJSMin", "exports", "module", "require_modes", "__commonJSMin", "exports", "module", "init_shim", "modeModules", "modes", "key", "require_aes", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "asUInt32Array", "buf", "len", "out", "scrubVec", "v", "i", "cryptBlock", "M", "keySchedule", "SUB_MIX", "SBOX", "nRounds", "SUB_MIX0", "SUB_MIX1", "SUB_MIX2", "SUB_MIX3", "s0", "s1", "s2", "s3", "t0", "t1", "t2", "t3", "ksRow", "round", "RCON", "G", "d", "j", "INV_SBOX", "INV_SUB_MIX", "x", "xi", "sx", "x2", "x4", "x8", "t", "AES", "key", "keyWords", "keySize", "ksRows", "k", "invKeySchedule", "ik", "ksR", "tt", "m1", "require_ghash", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "ZEROES", "toArray", "buf", "fromArray", "out", "GHASH", "key", "block", "i", "Vi", "Zi", "j", "xi", "lsbVi", "chunk", "abl", "bl", "require_authCipher", "__commonJSMin", "exports", "module", "init_shim", "aes", "Buffer", "Transform", "inherits", "GHASH", "xor", "incr32", "xorTest", "a", "b", "out", "len", "i", "calcIv", "self", "iv", "ck", "ghash", "toPad", "ivBits", "tail", "StreamCipher", "mode", "key", "decrypt", "h", "chunk", "rump", "tag", "buf", "require_streamCipher", "__commonJSMin", "exports", "module", "init_shim", "aes", "Buffer", "Transform", "inherits", "StreamCipher", "mode", "key", "iv", "decrypt", "chunk", "require_evp_bytestokey", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "MD5", "EVP_BytesToKey", "password", "salt", "keyBits", "ivLen", "keyLen", "key", "iv", "tmp", "hash", "used", "keyStart", "ivStart", "length", "require_encrypter", "__commonJSMin", "exports", "init_shim", "MODES", "AuthCipher", "Buffer", "StreamCipher", "Transform", "aes", "ebtk", "inherits", "Cipher", "mode", "key", "iv", "Splitter", "data", "chunk", "thing", "out", "PADDING", "setTo", "len", "padBuff", "i", "createCipheriv", "suite", "password", "config", "createCipher", "keys", "require_decrypter", "__commonJSMin", "exports", "init_shim", "AuthCipher", "Buffer", "MODES", "StreamCipher", "Transform", "aes", "ebtk", "inherits", "Decipher", "mode", "key", "iv", "Splitter", "data", "chunk", "thing", "out", "unpad", "setTo", "autoPadding", "last", "padded", "i", "createDecipheriv", "suite", "password", "config", "createDecipher", "keys", "require_browser", "__commonJSMin", "exports", "init_shim", "ciphers", "deciphers", "modes", "getCiphers", "require_modes", "__commonJSMin", "exports", "init_shim", "require_browser", "__commonJSMin", "exports", "init_shim", "DES", "aes", "aesModes", "desModes", "ebtk", "createCipher", "suite", "password", "keyLen", "ivLen", "keys", "createCipheriv", "createDecipher", "createDecipheriv", "key", "iv", "getCiphers", "require_mr", "__commonJSMin", "exports", "module", "init_shim", "bn", "brorand", "MillerRabin", "rand", "n", "len", "min_bytes", "a", "start", "stop", "size", "k", "cb", "red", "rone", "n1", "s", "d", "rn1", "prime", "x", "i", "g", "require_generatePrime", "__commonJSMin", "exports", "module", "init_shim", "randomBytes", "findPrime", "simpleSieve", "fermatTest", "BN", "TWENTYFOUR", "MillerRabin", "millerRabin", "ONE", "TWO", "FIVE", "SIXTEEN", "EIGHT", "TEN", "THREE", "SEVEN", "ELEVEN", "FOUR", "TWELVE", "primes", "_getPrimes", "limit", "res", "i", "k", "sqrt", "j", "p", "red", "bits", "gen", "num", "n2", "require_primes", "__commonJSMin", "exports", "module", "require_dh", "__commonJSMin", "exports", "module", "init_shim", "BN", "MillerRabin", "millerRabin", "TWENTYFOUR", "ELEVEN", "TEN", "THREE", "SEVEN", "primes", "randomBytes", "DH", "setPublicKey", "pub", "enc", "setPrivateKey", "priv", "primeCache", "checkPrime", "prime", "generator", "gen", "hex", "error", "rem", "malleable", "other", "secret", "out", "front", "formatReturnValue", "bn", "buf", "require_browser", "__commonJSMin", "exports", "init_shim", "generatePrime", "primes", "DH", "getDiffieHellman", "mod", "prime", "gen", "ENCODINGS", "createDiffieHellman", "enc", "generator", "genc", "require_safe_buffer", "__commonJSMin", "exports", "module", "init_shim", "buffer", "Buffer", "copyProps", "src", "dst", "key", "SafeBuffer", "arg", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_stream_browser", "__commonJSMin", "exports", "module", "init_shim", "require_buffer_list", "__commonJSMin", "exports", "module", "init_shim", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "obj", "value", "_toPropertyKey", "_classCallCheck", "instance", "Constructor", "_defineProperties", "props", "descriptor", "_createClass", "protoProps", "staticProps", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_require", "Buffer", "_require2", "inspect", "custom", "copyBuffer", "src", "offset", "BufferList", "v", "entry", "ret", "s", "p", "n", "hasStrings", "c", "str", "nb", "buf", "_", "options", "require_destroy", "__commonJSMin", "exports", "module", "init_shim", "destroy", "err", "cb", "_this", "readableDestroyed", "writableDestroyed", "process", "emitErrorNT", "emitCloseNT", "emitErrorAndCloseNT", "self", "undestroy", "errorOrDestroy", "stream", "rState", "wState", "require_errors_browser", "__commonJSMin", "exports", "module", "init_shim", "_inheritsLoose", "subClass", "superClass", "codes", "createErrorType", "code", "message", "Base", "getMessage", "arg1", "arg2", "arg3", "NodeError", "_Base", "oneOf", "expected", "thing", "len", "startsWith", "str", "search", "pos", "endsWith", "this_len", "includes", "start", "name", "value", "actual", "determiner", "msg", "type", "arg", "require_state", "__commonJSMin", "exports", "module", "init_shim", "ERR_INVALID_OPT_VALUE", "highWaterMarkFrom", "options", "isDuplex", "duplexKey", "getHighWaterMark", "state", "hwm", "name", "require_stream_writable", "__commonJSMin", "exports", "module", "init_shim", "Writable", "CorkedRequest", "state", "_this", "onCorkedFinish", "Duplex", "WritableState", "internalUtil", "Stream", "Buffer", "OurUint8Array", "_uint8ArrayToBuffer", "chunk", "_isUint8Array", "obj", "destroyImpl", "_require", "getHighWaterMark", "_require$codes", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_STREAM_CANNOT_PIPE", "ERR_STREAM_DESTROYED", "ERR_STREAM_NULL_VALUES", "ERR_STREAM_WRITE_AFTER_END", "ERR_UNKNOWN_ENCODING", "errorOrDestroy", "nop", "options", "stream", "isDuplex", "noDecode", "er", "onwrite", "current", "out", "realHasInstance", "object", "writeAfterEnd", "cb", "process", "validChunk", "encoding", "ret", "isBuf", "writeOrBuffer", "clearBuffer", "decodeChunk", "newChunk", "len", "last", "doWrite", "writev", "onwriteError", "sync", "finishMaybe", "onwriteStateUpdate", "finished", "needFinish", "afterWrite", "onwriteDrain", "entry", "l", "buffer", "holder", "count", "allBuffers", "endWritable", "callFinal", "err", "prefinish", "need", "rState", "corkReq", "value", "require_stream_duplex", "__commonJSMin", "exports", "module", "init_shim", "objectKeys", "obj", "keys", "key", "Duplex", "Readable", "Writable", "v", "method", "options", "onend", "process", "onEndNT", "self", "value", "require_end_of_stream", "__commonJSMin", "exports", "module", "init_shim", "ERR_STREAM_PREMATURE_CLOSE", "once", "callback", "called", "_len", "args", "_key", "noop", "isRequest", "stream", "eos", "opts", "readable", "writable", "onlegacyfinish", "onfinish", "writableEnded", "readableEnded", "onend", "onerror", "err", "onclose", "onrequest", "require_async_iterator", "__commonJSMin", "exports", "module", "init_shim", "_Object$setPrototypeO", "_defineProperty", "obj", "key", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "finished", "kLastResolve", "kLastReject", "kError", "kEnded", "kLastPromise", "kHandlePromise", "kStream", "createIterResult", "done", "readAndResolve", "iter", "resolve", "data", "onReadable", "process", "wrapForNext", "lastPromise", "reject", "AsyncIteratorPrototype", "ReadableStreamAsyncIteratorPrototype", "_this", "error", "promise", "_this2", "err", "createReadableStreamAsyncIterator", "stream", "_Object$create", "iterator", "require_from_browser", "__commonJSMin", "exports", "module", "init_shim", "require_stream_readable", "__commonJSMin", "exports", "module", "init_shim", "Readable", "Duplex", "ReadableState", "EE", "EElistenerCount", "emitter", "type", "Stream", "Buffer", "OurUint8Array", "_uint8ArrayToBuffer", "chunk", "_isUint8Array", "obj", "debugUtil", "debug", "BufferList", "destroyImpl", "_require", "getHighWaterMark", "_require$codes", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_PUSH_AFTER_EOF", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_STREAM_UNSHIFT_AFTER_END_EVENT", "StringDecoder", "createReadableStreamAsyncIterator", "from", "errorOrDestroy", "kProxyEvents", "prependListener", "event", "fn", "options", "stream", "isDuplex", "value", "err", "cb", "encoding", "state", "skipChunkCheck", "readableAddChunk", "addToFront", "onEofChunk", "er", "chunkInvalid", "addChunk", "maybeReadMore", "emitReadable", "enc", "decoder", "p", "content", "MAX_HWM", "computeNewHighWaterMark", "n", "howMuchToRead", "nOrig", "endReadable", "doRead", "ret", "fromList", "emitReadable_", "process", "flow", "maybeReadMore_", "len", "dest", "pipeOpts", "src", "doEnd", "endFn", "onend", "unpipe", "onunpipe", "readable", "unpipeInfo", "cleanup", "ondrain", "pipeOnDrain", "cleanedUp", "onclose", "onfinish", "onerror", "ondata", "indexOf", "dests", "i", "index", "ev", "res", "nReadingNextTick", "updateReadableListening", "self", "resume", "resume_", "_this", "paused", "method", "endReadableNT", "wState", "iterable", "opts", "xs", "x", "l", "require_stream_transform", "__commonJSMin", "exports", "module", "init_shim", "Transform", "_require$codes", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_TRANSFORM_ALREADY_TRANSFORMING", "ERR_TRANSFORM_WITH_LENGTH_0", "Duplex", "afterTransform", "er", "data", "ts", "cb", "rs", "options", "prefinish", "_this", "done", "chunk", "encoding", "n", "err", "err2", "stream", "require_stream_passthrough", "__commonJSMin", "exports", "module", "init_shim", "PassThrough", "Transform", "options", "chunk", "encoding", "cb", "require_pipeline", "__commonJSMin", "exports", "module", "init_shim", "eos", "once", "callback", "called", "_require$codes", "ERR_MISSING_ARGS", "ERR_STREAM_DESTROYED", "noop", "err", "isRequest", "stream", "destroyer", "reading", "writing", "closed", "destroyed", "call", "fn", "pipe", "from", "to", "popCallback", "streams", "pipeline", "_len", "_key", "error", "destroys", "i", "require_readable_browser", "__commonJSMin", "exports", "module", "init_shim", "require_bn", "__commonJSMin", "exports", "module", "init_shim", "assert", "val", "msg", "inherits", "ctor", "superCtor", "TempCtor", "BN", "number", "base", "endian", "Buffer", "num", "left", "right", "start", "i", "j", "w", "off", "parseHex4Bits", "string", "index", "c", "parseHexByte", "lowerBound", "r", "parseLength", "parseBase", "str", "end", "mul", "len", "limbLen", "limbPow", "total", "mod", "word", "pow", "dest", "move", "src", "size", "inspect", "zeros", "groupSizes", "groupBases", "padding", "out", "carry", "groupSize", "groupBase", "ret", "length", "allocate", "ArrayType", "byteLength", "reqLength", "res", "postfix", "position", "shift", "t", "hi", "toBitArray", "bit", "wbit", "b", "width", "a", "bytesNeeded", "bitsLeft", "cmp", "smallMulTo", "self", "lo", "k", "ncarry", "rword", "maxJ", "comb10MulTo", "o", "mid", "a0", "al0", "ah0", "a1", "al1", "ah1", "a2", "al2", "ah2", "a3", "al3", "ah3", "a4", "al4", "ah4", "a5", "al5", "ah5", "a6", "al6", "ah6", "a7", "al7", "ah7", "a8", "al8", "ah8", "a9", "al9", "ah9", "b0", "bl0", "bh0", "b1", "bl1", "bh1", "b2", "bl2", "bh2", "b3", "bl3", "bh3", "b4", "bl4", "bh4", "b5", "bl5", "bh5", "b6", "bl6", "bh6", "b7", "bl7", "bh7", "b8", "bl8", "bh8", "b9", "bl9", "bh9", "w0", "w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8", "w9", "w10", "w11", "w12", "w13", "w14", "w15", "w16", "w17", "w18", "bigMulTo", "hncarry", "jumboMulTo", "FFTM", "x", "y", "N", "l", "rb", "rbt", "rws", "iws", "rtws", "itws", "s", "rtwdf", "itwdf", "p", "rtwdf_", "itwdf_", "re", "ie", "ro", "io", "rx", "n", "m", "odd", "ws", "ph", "_", "rwst", "iwst", "nrws", "nrwst", "niwst", "rmws", "isNegNum", "q", "bits", "carryMask", "newCarry", "hint", "extended", "h", "mask", "maskedWords", "mode", "bhi", "bhiBits", "diff", "qj", "positive", "div", "dm", "half", "r2", "acc", "A", "B", "C", "D", "g", "yp", "xp", "im", "jm", "x1", "x2", "delta", "negative", "Red", "ctx", "primes", "MPrime", "name", "tmp", "rlen", "input", "K256", "output", "outLen", "prev", "next", "P224", "P192", "P25519", "prime", "mod3", "one", "nOne", "lpow", "z", "inv", "windowSize", "wnd", "current", "currentLen", "Mont", "u", "require_browserify_rsa", "__commonJSMin", "exports", "module", "init_shim", "BN", "randomBytes", "blind", "priv", "r", "getr", "blinder", "len", "crt", "msg", "blinds", "blinded", "c1", "c2", "qinv", "p", "q", "m1", "m2", "h", "require_bn", "__commonJSMin", "exports", "module", "init_shim", "assert", "val", "msg", "inherits", "ctor", "superCtor", "TempCtor", "BN", "number", "base", "endian", "Buffer", "num", "left", "right", "start", "i", "j", "w", "off", "parseHex4Bits", "string", "index", "c", "parseHexByte", "lowerBound", "r", "parseLength", "parseBase", "str", "end", "mul", "len", "limbLen", "limbPow", "total", "mod", "word", "pow", "dest", "move", "src", "size", "inspect", "zeros", "groupSizes", "groupBases", "padding", "out", "carry", "groupSize", "groupBase", "ret", "length", "allocate", "ArrayType", "byteLength", "reqLength", "res", "postfix", "position", "shift", "t", "hi", "toBitArray", "bit", "wbit", "b", "width", "a", "bytesNeeded", "bitsLeft", "cmp", "smallMulTo", "self", "lo", "k", "ncarry", "rword", "maxJ", "comb10MulTo", "o", "mid", "a0", "al0", "ah0", "a1", "al1", "ah1", "a2", "al2", "ah2", "a3", "al3", "ah3", "a4", "al4", "ah4", "a5", "al5", "ah5", "a6", "al6", "ah6", "a7", "al7", "ah7", "a8", "al8", "ah8", "a9", "al9", "ah9", "b0", "bl0", "bh0", "b1", "bl1", "bh1", "b2", "bl2", "bh2", "b3", "bl3", "bh3", "b4", "bl4", "bh4", "b5", "bl5", "bh5", "b6", "bl6", "bh6", "b7", "bl7", "bh7", "b8", "bl8", "bh8", "b9", "bl9", "bh9", "w0", "w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8", "w9", "w10", "w11", "w12", "w13", "w14", "w15", "w16", "w17", "w18", "bigMulTo", "hncarry", "jumboMulTo", "FFTM", "x", "y", "N", "l", "rb", "rbt", "rws", "iws", "rtws", "itws", "s", "rtwdf", "itwdf", "p", "rtwdf_", "itwdf_", "re", "ie", "ro", "io", "rx", "n", "m", "odd", "ws", "ph", "_", "rwst", "iwst", "nrws", "nrwst", "niwst", "rmws", "isNegNum", "q", "bits", "carryMask", "newCarry", "hint", "extended", "h", "mask", "maskedWords", "mode", "bhi", "bhiBits", "diff", "qj", "positive", "div", "dm", "half", "r2", "acc", "A", "B", "C", "D", "g", "yp", "xp", "im", "jm", "x1", "x2", "delta", "negative", "Red", "ctx", "primes", "MPrime", "name", "tmp", "rlen", "input", "K256", "output", "outLen", "prev", "next", "P224", "P192", "P25519", "prime", "mod3", "one", "nOne", "lpow", "z", "inv", "windowSize", "wnd", "current", "currentLen", "Mont", "u", "require_safer", "__commonJSMin", "exports", "module", "init_shim", "buffer", "Buffer", "safer", "key", "Safer", "value", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "process", "require_reporter", "__commonJSMin", "exports", "init_shim", "inherits", "Reporter", "options", "obj", "ReporterError", "state", "data", "key", "index", "value", "prev", "now", "msg", "err", "inherited", "elem", "result", "path", "e", "require_buffer", "__commonJSMin", "exports", "init_shim", "inherits", "Reporter", "Buffer", "DecoderBuffer", "base", "options", "data", "save", "res", "fail", "bytes", "EncoderBuffer", "value", "reporter", "item", "out", "offset", "require_node", "__commonJSMin", "exports", "module", "init_shim", "Reporter", "EncoderBuffer", "DecoderBuffer", "assert", "tags", "methods", "overrided", "Node", "enc", "parent", "name", "state", "stateProps", "cstate", "prop", "res", "method", "clone", "body", "child", "args", "children", "arg", "key", "value", "tag", "item", "val", "num", "newKey", "obj", "input", "options", "result", "present", "prevKey", "save", "prevObj", "explicit", "start", "data", "entity", "match", "node", "reporter", "content", "primitive", "cls", "str", "require_der", "__commonJSMin", "exports", "init_shim", "reverse", "map", "res", "key", "value", "require_der", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Buffer", "Node", "der", "DEREncoder", "entity", "DERNode", "data", "reporter", "parent", "tag", "primitive", "cls", "content", "encodedTag", "encodeTag", "header", "lenOctets", "i", "j", "str", "buf", "id", "values", "relative", "size", "ident", "objid", "offset", "two", "num", "time", "date", "numArray", "out", "value", "obj", "dataBuffer", "state", "res", "require_pem", "__commonJSMin", "exports", "module", "init_shim", "inherits", "DEREncoder", "PEMEncoder", "entity", "data", "options", "p", "out", "i", "require_encoders", "__commonJSMin", "exports", "init_shim", "encoders", "require_der", "__commonJSMin", "exports", "module", "init_shim", "inherits", "bignum", "DecoderBuffer", "Node", "der", "DERDecoder", "entity", "DERNode", "data", "options", "parent", "buffer", "tag", "any", "state", "decodedTag", "derDecodeTag", "len", "derDecodeLen", "res", "fail", "decoder", "result", "possibleEnd", "unused", "raw", "str", "i", "numstr", "printstr", "values", "relative", "identifiers", "ident", "subident", "first", "second", "tmp", "year", "mon", "day", "hour", "min", "sec", "obj", "buf", "cls", "primitive", "oct", "tagStr", "num", "j", "require_pem", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Buffer", "DERDecoder", "PEMDecoder", "entity", "data", "options", "lines", "label", "re", "start", "end", "i", "match", "base64", "input", "require_decoders", "__commonJSMin", "exports", "init_shim", "decoders", "require_api", "__commonJSMin", "exports", "init_shim", "encoders", "decoders", "inherits", "api", "name", "body", "Entity", "Base", "Generated", "entity", "enc", "data", "options", "reporter", "require_base", "__commonJSMin", "exports", "init_shim", "base", "require_constants", "__commonJSMin", "exports", "init_shim", "constants", "map", "res", "key", "value", "require_asn1", "__commonJSMin", "exports", "init_shim", "asn1", "require_certificate", "__commonJSMin", "exports", "module", "init_shim", "asn", "Time", "AttributeTypeValue", "AlgorithmIdentifier", "SubjectPublicKeyInfo", "RelativeDistinguishedName", "RDNSequence", "Name", "Validity", "Extension", "TBSCertificate", "X509Certificate", "require_asn1", "__commonJSMin", "exports", "init_shim", "asn1", "RSAPrivateKey", "RSAPublicKey", "PublicKey", "AlgorithmIdentifier", "PrivateKeyInfo", "EncryptedPrivateKeyInfo", "DSAPrivateKey", "ECPrivateKey", "ECParameters", "require_aesid", "__commonJSMin", "exports", "module", "require_fixProc", "__commonJSMin", "exports", "module", "init_shim", "findProc", "startRegex", "fullRegex", "evp", "ciphers", "Buffer", "okey", "password", "key", "match", "decrypted", "suite", "iv", "cipherText", "cipherKey", "out", "cipher", "match2", "tag", "require_parse_asn1", "__commonJSMin", "exports", "module", "init_shim", "asn1", "aesid", "fixProc", "ciphers", "compat", "Buffer", "parseKeys", "buffer", "password", "stripped", "type", "data", "subtype", "ndata", "decrypt", "salt", "iters", "algo", "iv", "cipherText", "keylen", "key", "cipher", "out", "require_curves", "__commonJSMin", "exports", "module", "require_sign", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "createHmac", "crt", "EC", "BN", "parseKeys", "curves", "sign", "hash", "key", "hashType", "signType", "tag", "priv", "ecSign", "dsaSign", "len", "pad", "i", "out", "curveId", "curve", "algo", "x", "p", "q", "g", "r", "k", "H", "bits2int", "s", "kv", "getKey", "makeKey", "makeR", "toDER", "total", "res", "zeros", "hlen", "hbits", "bits2octets", "v", "obits", "bits", "shift", "t", "require_verify", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "BN", "EC", "parseKeys", "curves", "verify", "sig", "hash", "key", "signType", "tag", "pub", "ecVerify", "dsaVerify", "len", "pad", "padNum", "i", "red", "out", "curveId", "curve", "pubkey", "p", "q", "g", "y", "unpacked", "s", "r", "checkValue", "montp", "w", "v", "b", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "createHash", "stream", "inherits", "sign", "verify", "algorithms", "key", "Sign", "algorithm", "data", "_", "done", "enc", "hash", "sig", "Verify", "createSign", "createVerify", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "elliptic", "BN", "curve", "ECDH", "aliases", "enc", "format", "other", "inenc", "otherPub", "out", "formatReturnValue", "key", "pub", "priv", "_priv", "bn", "len", "buf", "zeros", "require_mgf", "__commonJSMin", "exports", "module", "init_shim", "createHash", "Buffer", "seed", "len", "t", "c", "i2ops", "out", "require_xor", "__commonJSMin", "exports", "module", "init_shim", "a", "b", "len", "i", "require_withPublic", "__commonJSMin", "exports", "module", "init_shim", "BN", "Buffer", "withPublic", "paddedMsg", "key", "require_publicEncrypt", "__commonJSMin", "exports", "module", "init_shim", "parseKeys", "randomBytes", "createHash", "mgf", "xor", "BN", "withPublic", "crt", "Buffer", "publicKey", "msg", "reverse", "padding", "key", "paddedMsg", "oaep", "pkcs1", "k", "mLen", "iHash", "hLen", "hLen2", "ps", "dblen", "seed", "maskedDb", "maskedSeed", "nonZero", "len", "out", "i", "cache", "cur", "num", "require_privateDecrypt", "__commonJSMin", "exports", "module", "init_shim", "parseKeys", "mgf", "xor", "BN", "crt", "createHash", "withPublic", "Buffer", "privateKey", "enc", "reverse", "padding", "key", "k", "msg", "zBuffer", "oaep", "pkcs1", "iHash", "hLen", "maskedSeed", "maskedDb", "seed", "db", "compare", "i", "p1", "status", "ps", "a", "b", "dif", "len", "require_browser", "__commonJSMin", "exports", "init_shim", "key", "buf", "require_browser", "__commonJSMin", "exports", "init_shim", "oldBrowser", "safeBuffer", "randombytes", "Buffer", "kBufferMaxLength", "crypto", "kMaxUint32", "assertOffset", "offset", "length", "assertSize", "size", "process", "randomFill", "randomFillSync", "buf", "cb", "actualFill", "ourBuf", "uint", "err", "bytes", "require_crypto_browserify", "__commonJSMin", "exports", "init_shim", "algos", "algoKeys", "hashes", "p", "aes", "dh", "sign", "publicEncrypt", "rf", "require_brorand", "__commonJSMin", "exports", "module", "init_shim", "r", "len", "Rand", "rand", "n", "res", "arr", "crypto", "require_base", "__commonJSMin", "exports", "module", "init_shim", "BN", "utils", "getNAF", "getJSF", "assert", "BaseCurve", "type", "conf", "adjustCount", "p", "k", "doubles", "naf", "I", "repr", "j", "nafW", "l", "a", "b", "i", "w", "nafPoints", "wnd", "acc", "z", "defW", "points", "coeffs", "len", "jacobianResult", "wndWidth", "max", "comb", "index", "jsf", "ja", "jb", "tmp", "zero", "BasePoint", "curve", "bytes", "enc", "res", "compact", "x", "power", "precomputed", "step", "dbl", "require_short", "__commonJSMin", "exports", "module", "init_shim", "utils", "BN", "inherits", "Base", "assert", "ShortCurve", "conf", "beta", "lambda", "betas", "lambdas", "basis", "vec", "num", "red", "tinv", "ntinv", "s", "l1", "l2", "aprxSqrt", "u", "v", "x1", "y1", "x2", "y2", "a0", "b0", "a1", "b1", "a2", "b2", "prevR", "i", "r", "x", "q", "y", "len1", "len2", "k", "v1", "v2", "c1", "c2", "p1", "p2", "q1", "q2", "k1", "k2", "odd", "isOdd", "point", "ax", "rhs", "points", "coeffs", "jacobianResult", "npoints", "ncoeffs", "split", "p", "res", "j", "Point", "curve", "isRed", "obj", "pre", "endoMul", "obj2point", "c", "nx", "ny", "ys1", "a", "dyinv", "_precompute", "negate", "JPoint", "z", "zinv", "zinv2", "ay", "pz2", "z2", "u1", "u2", "s1", "s2", "h", "h2", "h3", "nz", "pow", "jx", "jy", "jz", "jz4", "jyd", "jx2", "jyd2", "jyd4", "t1", "t2", "dny", "xx", "yy", "yyyy", "m", "t", "yyyy8", "b", "d", "e", "f", "c8", "delta", "gamma", "alpha", "beta4", "beta8", "ggamma8", "jy2", "jxd4", "jyd8", "zz", "mm", "ee", "yyu4", "kbase", "z3", "pz3", "zs", "rx", "xc", "require_mont", "__commonJSMin", "exports", "module", "init_shim", "BN", "inherits", "Base", "utils", "MontCurve", "conf", "point", "x", "x2", "rhs", "y", "Point", "curve", "z", "bytes", "enc", "obj", "a", "aa", "b", "bb", "c", "nx", "nz", "p", "diff", "d", "da", "cb", "k", "t", "bits", "i", "other", "require_edwards", "__commonJSMin", "exports", "module", "init_shim", "utils", "BN", "inherits", "Base", "assert", "EdwardsCurve", "conf", "num", "x", "y", "z", "t", "odd", "x2", "rhs", "lhs", "y2", "isOdd", "point", "Point", "curve", "obj", "a", "b", "c", "d", "e", "g", "f", "h", "nx", "ny", "nt", "nz", "j", "p", "tmp", "k", "k1", "k2", "zi", "other", "rx", "xc", "require_curve", "__commonJSMin", "exports", "init_shim", "curve", "require_utils", "__commonJSMin", "exports", "init_shim", "assert", "inherits", "isSurrogatePair", "msg", "i", "toArray", "enc", "res", "p", "c", "toHex", "zero2", "htonl", "w", "toHex32", "endian", "zero8", "word", "join32", "start", "end", "len", "k", "split32", "m", "rotr32", "b", "rotl32", "sum32", "a", "sum32_3", "sum32_4", "d", "sum32_5", "e", "sum64", "buf", "pos", "ah", "al", "bh", "bl", "lo", "hi", "sum64_hi", "sum64_lo", "sum64_4_hi", "ch", "cl", "dh", "dl", "carry", "sum64_4_lo", "sum64_5_hi", "eh", "el", "sum64_5_lo", "rotr64_hi", "num", "r", "rotr64_lo", "shr64_hi", "shr64_lo", "require_common", "__commonJSMin", "exports", "init_shim", "utils", "assert", "BlockHash", "msg", "enc", "r", "i", "len", "bytes", "k", "res", "t", "require_common", "__commonJSMin", "exports", "init_shim", "utils", "rotr32", "ft_1", "s", "x", "y", "z", "ch32", "p32", "maj32", "s0_256", "s1_256", "g0_256", "g1_256", "require__", "__commonJSMin", "exports", "module", "init_shim", "utils", "common", "shaCommon", "rotl32", "sum32", "sum32_5", "ft_1", "BlockHash", "sha1_K", "SHA1", "msg", "start", "W", "i", "a", "b", "c", "d", "e", "s", "t", "enc", "require__", "__commonJSMin", "exports", "module", "init_shim", "utils", "common", "shaCommon", "assert", "sum32", "sum32_4", "sum32_5", "ch32", "maj32", "s0_256", "s1_256", "g0_256", "g1_256", "BlockHash", "sha256_K", "SHA256", "msg", "start", "W", "i", "a", "b", "c", "d", "e", "f", "g", "h", "T1", "T2", "enc", "require__", "__commonJSMin", "exports", "module", "init_shim", "utils", "SHA256", "SHA224", "enc", "require__", "__commonJSMin", "exports", "module", "init_shim", "utils", "common", "assert", "rotr64_hi", "rotr64_lo", "shr64_hi", "shr64_lo", "sum64", "sum64_hi", "sum64_lo", "sum64_4_hi", "sum64_4_lo", "sum64_5_hi", "sum64_5_lo", "BlockHash", "sha512_K", "SHA512", "msg", "start", "W", "i", "c0_hi", "g1_512_hi", "c0_lo", "g1_512_lo", "c1_hi", "c1_lo", "c2_hi", "g0_512_hi", "c2_lo", "g0_512_lo", "c3_hi", "c3_lo", "ah", "al", "bh", "bl", "ch", "cl", "dh", "dl", "eh", "el", "fh", "fl", "gh", "gl", "hh", "hl", "s1_512_hi", "s1_512_lo", "ch64_hi", "ch64_lo", "c4_hi", "c4_lo", "T1_hi", "T1_lo", "s0_512_hi", "s0_512_lo", "maj64_hi", "maj64_lo", "T2_hi", "T2_lo", "enc", "xh", "xl", "yh", "yl", "zh", "r", "zl", "require__", "__commonJSMin", "exports", "module", "init_shim", "utils", "SHA512", "SHA384", "enc", "require_sha", "__commonJSMin", "exports", "init_shim", "require_ripemd", "__commonJSMin", "exports", "init_shim", "utils", "common", "rotl32", "sum32", "sum32_3", "sum32_4", "BlockHash", "RIPEMD160", "msg", "start", "A", "B", "C", "D", "E", "Ah", "Bh", "Ch", "Dh", "Eh", "j", "T", "f", "r", "K", "s", "rh", "Kh", "sh", "enc", "x", "y", "z", "require_hmac", "__commonJSMin", "exports", "module", "init_shim", "utils", "assert", "Hmac", "hash", "key", "enc", "i", "msg", "require_hash", "__commonJSMin", "exports", "init_shim", "hash", "require_secp256k1", "__commonJSMin", "exports", "module", "init_shim", "require_curves", "__commonJSMin", "exports", "init_shim", "curves", "hash", "curve", "utils", "assert", "PresetCurve", "options", "defineCurve", "name", "pre", "require_hmac_drbg", "__commonJSMin", "exports", "module", "init_shim", "hash", "utils", "assert", "HmacDRBG", "options", "entropy", "nonce", "pers", "seed", "i", "kmac", "entropyEnc", "add", "addEnc", "len", "enc", "temp", "res", "require_key", "__commonJSMin", "exports", "module", "init_shim", "BN", "utils", "assert", "KeyPair", "ec", "options", "pub", "enc", "priv", "compact", "key", "msg", "signature", "require_signature", "__commonJSMin", "exports", "module", "init_shim", "BN", "utils", "assert", "Signature", "options", "enc", "Position", "getLength", "buf", "p", "initial", "octetLen", "val", "i", "off", "rmPadding", "len", "data", "rlen", "r", "slen", "s", "constructLength", "arr", "octets", "backHalf", "res", "require_ec", "__commonJSMin", "exports", "module", "init_shim", "BN", "HmacDRBG", "utils", "curves", "rand", "assert", "KeyPair", "Signature", "EC", "options", "priv", "enc", "pub", "drbg", "bytes", "ns2", "msg", "truncOnly", "delta", "key", "bkey", "nonce", "ns1", "iter", "k", "kp", "kpX", "r", "s", "recoveryParam", "signature", "sinv", "u1", "u2", "p", "j", "e", "isYOdd", "isSecondKey", "rInv", "s1", "s2", "Q", "i", "Qprime", "require_key", "__commonJSMin", "exports", "module", "init_shim", "utils", "assert", "parseBytes", "cachedProperty", "KeyPair", "eddsa", "params", "pub", "secret", "hash", "lastIx", "a", "message", "sig", "enc", "require_signature", "__commonJSMin", "exports", "module", "init_shim", "BN", "utils", "assert", "cachedProperty", "parseBytes", "Signature", "eddsa", "sig", "require_eddsa", "__commonJSMin", "exports", "module", "init_shim", "hash", "curves", "utils", "assert", "parseBytes", "KeyPair", "Signature", "EDDSA", "curve", "message", "secret", "key", "r", "R", "Rencoded", "s_", "S", "sig", "pub", "h", "SG", "RplusAh", "i", "point", "enc", "bytes", "lastIx", "normed", "xIsOdd", "y", "num", "val", "require_elliptic", "__commonJSMin", "exports", "init_shim", "elliptic", "require_elliptic", "__commonJSMin", "exports", "module", "init_shim", "EC", "ec", "ecparams", "BN", "loadCompressedPublicKey", "first", "xbuf", "x", "y", "loadUncompressedPublicKey", "ybuf", "x3", "loadPublicKey", "pubkey", "savePublicKey", "output", "point", "seckey", "bn", "negate", "tweak", "tweaked", "pair", "pubkeys", "pairs", "i", "sig", "r", "s", "obj", "sigR", "sigS", "lenR", "posR", "lenS", "posS", "message", "data", "noncefn", "_noncefn", "counter", "nonce", "d", "msg32", "sigObj", "sigr", "sigs", "recid", "hashfn", "scalar", "sha256", "hash", "require_elliptic", "__commonJSMin", "exports", "module", "init_shim", "require_freeGlobal", "__commonJSMin", "exports", "module", "init_shim", "freeGlobal", "require_root", "__commonJSMin", "exports", "module", "init_shim", "freeGlobal", "freeSelf", "root", "require_Symbol", "__commonJSMin", "exports", "module", "init_shim", "root", "Symbol", "require_getRawTag", "__commonJSMin", "exports", "module", "init_shim", "Symbol", "objectProto", "hasOwnProperty", "nativeObjectToString", "symToStringTag", "getRawTag", "value", "isOwn", "tag", "unmasked", "result", "require_objectToString", "__commonJSMin", "exports", "module", "init_shim", "objectProto", "nativeObjectToString", "objectToString", "value", "require_baseGetTag", "__commonJSMin", "exports", "module", "init_shim", "Symbol", "getRawTag", "objectToString", "nullTag", "undefinedTag", "symToStringTag", "baseGetTag", "value", "require_overArg", "__commonJSMin", "exports", "module", "init_shim", "overArg", "func", "transform", "arg", "require_getPrototype", "__commonJSMin", "exports", "module", "init_shim", "overArg", "getPrototype", "require_isObjectLike", "__commonJSMin", "exports", "module", "init_shim", "isObjectLike", "value", "require_isPlainObject", "__commonJSMin", "exports", "module", "init_shim", "baseGetTag", "getPrototype", "isObjectLike", "objectTag", "funcProto", "objectProto", "funcToString", "hasOwnProperty", "objectCtorString", "isPlainObject", "value", "proto", "Ctor", "require_flat", "__commonJSMin", "exports", "module", "init_shim", "flatten", "unflatten", "isBuffer", "obj", "keyIdentity", "key", "target", "opts", "delimiter", "maxDepth", "transformKey", "output", "step", "object", "prev", "currentDepth", "value", "isarray", "type", "isbuffer", "isobject", "newKey", "overwrite", "result", "getkey", "parsedKey", "addKeys", "keyPrefix", "recipient", "isEmpty", "val", "isArray", "isObject", "split", "key1", "key2", "require_encode", "__commonJSMin", "exports", "module", "init_shim", "encode", "MSB", "REST", "MSBALL", "INT", "num", "out", "offset", "oldOffset", "require_decode", "__commonJSMin", "exports", "module", "init_shim", "read", "MSB", "REST", "buf", "offset", "res", "shift", "counter", "b", "l", "require_length", "__commonJSMin", "exports", "module", "init_shim", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "value", "require_varint", "__commonJSMin", "exports", "module", "init_shim", "require_browser_ponyfill", "__commonJSMin", "exports", "module", "init_shim", "global", "__self__", "F", "self", "irrelevant", "support", "isDataView", "obj", "viewClasses", "isArrayBufferView", "normalizeName", "name", "normalizeValue", "value", "iteratorFor", "items", "iterator", "Headers", "headers", "header", "oldValue", "callback", "thisArg", "consumed", "body", "fileReaderReady", "reader", "resolve", "reject", "readBlobAsArrayBuffer", "blob", "promise", "readBlobAsText", "readArrayBufferAsText", "buf", "view", "chars", "i", "bufferClone", "Body", "rejected", "decode", "methods", "normalizeMethod", "method", "upcased", "Request", "input", "options", "form", "bytes", "split", "parseHeaders", "rawHeaders", "preProcessedHeaders", "line", "parts", "key", "Response", "bodyInit", "response", "redirectStatuses", "url", "status", "message", "error", "fetch", "init", "request", "xhr", "abortXhr", "ctx", "require_consts", "__commonJSMin", "exports", "init_shim", "number", "n", "exports", "bool", "b", "bytes", "lengths", "hash", "exists", "instance", "checkFinished", "output", "out", "min", "assert", "exports", "crypto_1", "u8a", "a", "u8", "arr", "exports", "u32", "createView", "rotr", "word", "shift", "hexes", "v", "i", "bytesToHex", "bytes", "hex", "hexToBytes", "len", "array", "j", "hexByte", "byte", "nextTick", "asyncLoop", "iters", "tick", "cb", "ts", "diff", "utf8ToBytes", "str", "toBytes", "data", "concatBytes", "arrays", "r", "sum", "pad", "Hash", "isPlainObject", "obj", "checkOpts", "defaults", "opts", "wrapConstructor", "hashCons", "hashC", "msg", "tmp", "wrapConstructorWithOpts", "wrapXOFConstructorWithOpts", "randomBytes", "bytesLength", "_assert_js_1", "utils_js_1", "setBigUint64", "view", "byteOffset", "value", "isLE", "_32n", "_u32_max", "wh", "wl", "h", "l", "SHA2", "blockLen", "outputLen", "padOffset", "data", "buffer", "len", "pos", "take", "dataView", "out", "i", "oview", "outLen", "state", "res", "to", "length", "finished", "destroyed", "exports", "_sha2_js_1", "utils_js_1", "Chi", "a", "b", "c", "Maj", "SHA256_K", "IV", "SHA256_W", "SHA256", "A", "B", "C", "D", "E", "F", "G", "H", "view", "offset", "i", "W15", "W2", "s0", "s1", "sigma1", "T1", "T2", "SHA224", "exports", "_0n", "_1n", "_2n", "u8a", "a", "hexes", "v", "i", "bytesToHex", "bytes", "hex", "exports", "numberToHexUnpadded", "num", "hexToNumber", "hexToBytes", "len", "array", "j", "hexByte", "byte", "bytesToNumberBE", "bytesToNumberLE", "numberToBytesBE", "n", "numberToBytesLE", "numberToVarBytesBE", "ensureBytes", "title", "expectedLength", "res", "e", "concatBytes", "arrays", "r", "sum", "pad", "equalBytes", "b1", "b2", "utf8ToBytes", "str", "bitLen", "bitGet", "pos", "bitSet", "value", "bitMask", "u8n", "data", "u8fr", "arr", "createHmacDrbg", "hashLen", "qByteLen", "hmacFn", "k", "reset", "h", "b", "reseed", "seed", "gen", "out", "sl", "pred", "validatorFns", "val", "object", "validateObject", "validators", "optValidators", "checkField", "fieldName", "type", "isOptional", "checkVal", "utils_js_1", "_0n", "_1n", "_2n", "_3n", "_4n", "_5n", "_8n", "_9n", "_16n", "mod", "a", "b", "result", "exports", "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", "FpPow", "f", "p", "d", "FpInvertBatch", "nums", "tmp", "lastMultiplied", "acc", "inverted", "FpDiv", "lhs", "rhs", "FpIsSquare", "legendreConst", "nLength", "nBitLength", "_nBitLength", "nByteLength", "Field", "ORDER", "bitLen", "isLE", "redef", "BITS", "BYTES", "sqrtP", "lst", "c", "bytes", "FpSqrtOdd", "elm", "FpSqrtEven", "hashToPrivateScalar", "hash", "groupOrder", "hashLen", "minLen", "modular_js_1", "utils_js_1", "_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", "exports", "validateBasic", "curve", "mod", "ut", "utils_js_1", "curve_js_1", "validatePointOpts", "curve", "opts", "endo", "Fp", "a", "b2n", "h2b", "exports", "m", "data", "E", "len", "res", "hex", "l", "r", "sBytes", "s", "rBytesLeft", "sig", "slice", "h", "num", "shl", "rhl", "sl", "rl", "_0n", "_1n", "_2n", "_3n", "_4n", "weierstrassPoints", "CURVE", "toBytes", "c", "point", "isCompressed", "fromBytes", "bytes", "tail", "x", "y", "weierstrassEquation", "b", "x2", "x3", "isWithinCurveOrder", "assertGE", "normPrivateKeyToScalar", "key", "lengths", "nByteLength", "wrapPrivateKey", "n", "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", "_bits", "validateOpts", "weierstrass", "curveDef", "CURVE_ORDER", "compressedLen", "uncompressedLen", "isValidFieldElement", "modN", "invN", "cat", "head", "y2", "isYOdd", "numToNByteStr", "isBiggerThanHalfOrder", "number", "HALF", "normalizeS", "slcNum", "from", "to", "Signature", "recovery", "msgHash", "rec", "bits2int_modN", "radj", "prefix", "R", "ir", "u1", "u2", "utils", "rand", "getPublicKey", "isProbPub", "item", "arr", "str", "getSharedSecret", "privateA", "publicB", "bits2int", "delta", "ORDER_MASK", "int2octets", "prepSig", "defaultSigOpts", "k", "hash", "randomBytes", "lowS", "prehash", "ent", "h1int", "seedArgs", "e", "seed", "k2sig", "kBytes", "ik", "q", "normS", "defaultVerOpts", "sign", "privKey", "C", "verify", "signature", "publicKey", "sg", "_sig", "derError", "error", "is", "SWUFpSqrtRatio", "Z", "o", "c1", "_2n_pow_c1_1", "_2n_pow_c1", "c2", "c3", "c4", "c5", "c6", "c7", "sqrtRatio", "u", "v", "tv1", "tv2", "tv3", "tv5", "tv4", "isQR", "tvv5", "e1", "y1", "mapToCurveSimpleSWU", "tv6", "isValid", "value", "modular_js_1", "utils_js_1", "validateDST", "dst", "os2ip", "i2osp", "value", "length", "res", "strxor", "a", "b", "arr", "isBytes", "item", "isNum", "expand_message_xmd", "msg", "DST", "lenInBytes", "H", "b_in_bytes", "r_in_bytes", "ell", "DST_prime", "Z_pad", "l_i_b_str", "b_0", "i", "args", "exports", "expand_message_xof", "k", "dkLen", "hash_to_field", "count", "options", "p", "m", "hash", "expand", "_DST", "log2p", "L", "len_in_bytes", "prb", "u", "e", "j", "elm_offset", "tv", "isogenyMap", "field", "map", "COEFF", "x", "y", "xNum", "xDen", "yNum", "yDen", "val", "acc", "createHasher", "Point", "mapToCurve", "def", "u0", "u1", "P", "_assert_js_1", "utils_js_1", "HMAC", "hash", "_key", "key", "blockLen", "pad", "i", "buf", "out", "to", "oHash", "iHash", "finished", "destroyed", "outputLen", "exports", "hmac", "message", "hmac_1", "utils_1", "weierstrass_js_1", "getHash", "hash", "key", "msgs", "exports", "createCurve", "curveDef", "defHash", "create", "sha256_1", "utils_1", "modular_js_1", "weierstrass_js_1", "utils_js_1", "hash_to_curve_js_1", "_shortw_utils_js_1", "secp256k1P", "secp256k1N", "_1n", "_2n", "divNearest", "a", "b", "sqrtMod", "y", "P", "_3n", "_6n", "_11n", "_22n", "_23n", "_44n", "_88n", "b2", "b3", "b6", "b9", "b11", "b22", "b44", "b88", "b176", "b220", "b223", "t1", "t2", "root", "Fp", "exports", "k", "n", "a1", "b1", "a2", "POW_2_128", "c1", "c2", "k1", "k2", "k1neg", "k2neg", "_0n", "fe", "x", "ge", "TAGGED_HASH_PREFIXES", "taggedHash", "tag", "messages", "tagP", "tagH", "c", "pointToBytes", "point", "numTo32b", "modP", "modN", "Point", "GmulAdd", "Q", "schnorrGetExtPubKey", "priv", "d_", "p", "lift_x", "xx", "challenge", "args", "schnorrGetPublicKey", "privateKey", "schnorrSign", "message", "auxRand", "m", "px", "d", "t", "rand", "k_", "rx", "e", "sig", "schnorrVerify", "signature", "publicKey", "pub", "r", "s", "R", "isoMap", "i", "j", "mapSWU", "htf", "scalars", "_assert_js_1", "utils_js_1", "hmac_js_1", "extract", "hash", "ikm", "salt", "exports", "HKDF_COUNTER", "EMPTY_BUFFER", "expand", "prk", "info", "length", "blocks", "okm", "HMAC", "HMACTmp", "T", "counter", "hkdf", "require_utils", "__commonJSMin", "exports", "init_shim", "secp256k1_1", "crypto_1", "consts_1", "remove0x", "hex", "decodeHex", "getValidSecret", "key", "aesEncrypt", "plainText", "nonce", "cipher", "encrypted", "tag", "aesDecrypt", "cipherText", "ciphered", "decipher", "require_PublicKey", "__commonJSMin", "exports", "init_shim", "secp256k1_1", "hkdf_1", "sha256_1", "consts_1", "utils_1", "PublicKey", "buffer", "hex", "decoded", "prefix", "fixed", "compressed", "priv", "master", "other", "require_PrivateKey", "__commonJSMin", "exports", "init_shim", "__importDefault", "mod", "secp256k1_1", "hkdf_1", "sha256_1", "utils_1", "PublicKey_1", "PrivateKey", "secret", "hex", "pub", "master", "other", "require_keys", "__commonJSMin", "exports", "init_shim", "__importDefault", "mod", "PrivateKey_1", "PublicKey_1", "require_dist", "__commonJSMin", "exports", "init_shim", "consts_1", "keys_1", "utils_1", "encrypt", "receiverRawPK", "msg", "ephemeralKey", "receiverPK", "aesKey", "encrypted", "decrypt", "receiverRawSK", "receiverSK", "senderPubkey", "keys_2", "merge", "sets", "_len", "_key", "length", "slice", "xl", "x", "join", "subexp", "str", "typeOf", "o", "undefined", "Object", "prototype", "toString", "call", "split", "pop", "shift", "toLowerCase", "toUpperCase", "toArray", "obj", "Array", "setInterval", "assign", "target", "source", "key", "buildExps", "isIRI", "ALPHA$$", "CR$", "DIGIT$$", "DQUOTE$$", "HEXDIG$$", "SP$$", "PCT_ENCODED$", "SUB_DELIMS$$", "RESERVED$$", "GEN_DELIMS$$", "UCSCHAR$$", "SCHEME$", "USERINFO$", "UNRESERVED$$", "DEC_OCTET$", "DEC_OCTET_RELAXED$", "H16$", "LS32$", "IPV4ADDRESS$", "IPV6ADDRESS1$", "IPV6ADDRESS2$", "IPV6ADDRESS3$", "IPV6ADDRESS4$", "IPV6ADDRESS5$", "IPV6ADDRESS6$", "IPV6ADDRESS7$", "IPV6ADDRESS8$", "IPV6ADDRESS9$", "ZONEID$", "IPV6ADDRESS$", "IP_LITERAL$", "IPV6ADDRZ_RELAXED$", "IPVFUTURE$", "HOST$", "REG_NAME$", "PORT$", "AUTHORITY$", "PCHAR$", "SEGMENT$", "SEGMENT_NZ$", "SEGMENT_NZ_NC$", "PATH_ABEMPTY$", "PATH_ABSOLUTE$", "PATH$", "PATH_NOSCHEME$", "PATH_ROOTLESS$", "PATH_EMPTY$", "QUERY$", "IPRIVATE$$", "FRAGMENT$", "HIER_PART$", "URI$", "RELATIVE_PART$", "RELATIVE$", "URI_REFERENCE$", "ABSOLUTE_URI$", "GENERIC_REF$", "RELATIVE_REF$", "ABSOLUTE_REF$", "SAMEDOC_REF$", "AUTHORITY_REF$", "RegExp", "URI_PROTOCOL", "IRI_PROTOCOL", "maxInt", "base", "tMin", "tMax", "skew", "damp", "initialBias", "initialN", "delimiter", "regexPunycode", "regexNonASCII", "regexSeparators", "errors", "baseMinusTMin", "floor", "Math", "stringFromCharCode", "String", "fromCharCode", "error", "type", "RangeError", "map", "array", "fn", "result", "mapDomain", "string", "parts", "replace", "labels", "encoded", "ucs2decode", "output", "counter", "value", "charCodeAt", "extra", "push", "ucs2encode", "fromCodePoint", "toConsumableArray", "basicToDigit", "codePoint", "digitToBasic", "digit", "flag", "adapt", "delta", "numPoints", "firstTime", "k", "decode", "input", "inputLength", "i", "n", "bias", "basic", "lastIndexOf", "j", "index", "oldi", "w", "t", "baseMinusT", "out", "splice", "encode", "_step", "_iteratorNormalCompletion", "_iterator", "currentValue", "basicLength", "handledCPCount", "m", "_step2", "_iteratorNormalCompletion2", "_iterator2", "handledCPCountPlusOne", "_step3", "_iteratorNormalCompletion3", "_iterator3", "q", "qMinusT", "toUnicode", "test", "toASCII", "punycode", "SCHEMES", "pctEncChar", "chr", "c", "e", "pctDecChars", "newStr", "il", "parseInt", "substr", "c2", "c3", "_normalizeComponentEncoding", "components", "protocol", "decodeUnreserved", "decStr", "match", "UNRESERVED", "scheme", "PCT_ENCODED", "NOT_SCHEME", "userinfo", "NOT_USERINFO", "host", "NOT_HOST", "path", "NOT_PATH", "NOT_PATH_NOSCHEME", "query", "NOT_QUERY", "fragment", "NOT_FRAGMENT", "_stripLeadingZeros", "_normalizeIPv4", "matches", "IPV4ADDRESS", "address", "_matches", "_normalizeIPv6", "IPV6ADDRESS", "_matches2", "zone", "reverse", "last", "_address$toLowerCase$2", "first", "firstFields", "lastFields", "isLastFieldIPv4Address", "fieldCount", "lastFieldsStart", "fields", "allZeroFields", "reduce", "acc", "field", "lastLongest", "longestZeroFields", "sort", "a", "b", "newHost", "newFirst", "newLast", "URI_PARSE", "NO_MATCH_IS_UNDEFINED", "parse", "uriString", "options", "iri", "reference", "port", "isNaN", "indexOf", "schemeHandler", "unicodeSupport", "domainHost", "_recomposeAuthority", "uriTokens", "_", "$1", "$2", "RDS1", "RDS2", "RDS3", "RDS5", "removeDotSegments", "im", "s", "Error", "serialize", "authority", "charAt", "absolutePath", "resolveComponents", "relative", "skipNormalization", "tolerant", "resolve", "baseURI", "relativeURI", "schemelessOptions", "normalize", "uri", "equal", "uriA", "uriB", "escapeComponent", "ESCAPE", "unescapeComponent", "handler", "secure", "http", "isSecure", "wsComponents", "resourceName", "_wsComponents$resourc2", "ws", "O", "ATEXT$$", "QTEXT$$", "VCHAR$$", "SOME_DELIMS$$", "NOT_LOCAL_PART", "NOT_HFNAME", "NOT_HFVALUE", "mailtoComponents", "to", "unknownHeaders", "headers", "hfields", "hfield", "toAddrs", "subject", "body", "addr", "toAddr", "atIdx", "localPart", "domain", "name", "URN_PARSE", "urnComponents", "nid", "nss", "urnScheme", "uriComponents", "UUID", "uuidComponents", "uuid", "https", "wss", "mailto", "urn", "require_canonicalize", "__commonJSMin", "exports", "module", "init_shim", "serialize", "object", "t", "cv", "ci", "comma", "require_src", "__commonJSMin", "exports", "module", "init_shim", "base", "ALPHABET", "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", "require_util", "__commonJSMin", "exports", "module", "init_shim", "textDecoder", "decodeText", "bytes", "textEncoder", "encodeText", "text", "concat", "arrs", "length", "output", "offset", "arr", "require_base", "__commonJSMin", "exports", "module", "init_shim", "encodeText", "Base", "name", "code", "factory", "alphabet", "buf", "string", "char", "require_rfc4648", "__commonJSMin", "exports", "module", "init_shim", "decode", "string", "alphabet", "bitsPerChar", "codes", "i", "end", "out", "bits", "buffer", "written", "value", "encode", "data", "pad", "mask", "rfc4648", "input", "require_constants", "__commonJSMin", "exports", "module", "init_shim", "baseX", "Base", "rfc4648", "decodeText", "encodeText", "identity", "constants", "names", "prev", "tupple", "codes", "require_src", "__commonJSMin", "exports", "module", "init_shim", "constants", "encodeText", "decodeText", "concat", "multibase", "nameOrCode", "buf", "name", "codeBuf", "encoding", "validEncode", "encode", "enc", "data", "decode", "prefix", "isEncoded", "encodingFromData", "names", "codes", "require_encode", "__commonJSMin", "exports", "module", "init_shim", "encode", "MSB", "REST", "MSBALL", "INT", "num", "out", "offset", "oldOffset", "require_decode", "__commonJSMin", "exports", "module", "init_shim", "read", "MSB", "REST", "buf", "offset", "res", "shift", "counter", "b", "l", "require_length", "__commonJSMin", "exports", "module", "init_shim", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "value", "require_varint", "__commonJSMin", "exports", "module", "init_shim", "require_constants", "__commonJSMin", "exports", "module", "init_shim", "names", "base", "ALPHABET", "name", "BASE_MAP", "j", "i", "x", "xc", "BASE", "LEADER", "FACTOR", "iFACTOR", "encode", "source", "zeroes", "length", "pbegin", "pend", "size", "b58", "carry", "it1", "it2", "str", "decodeUnsafe", "psz", "b256", "it3", "it4", "vch", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "init_base_x", "__esmMin", "init_shim", "empty", "equals", "coerce", "fromString", "toString", "init_bytes", "__esmMin", "init_shim", "aa", "bb", "ii", "o", "str", "b", "Encoder", "Decoder", "ComposedDecoder", "or", "Codec", "from", "baseX", "decode", "encode", "rfc4648", "init_base", "__esmMin", "init_shim", "init_base_x", "init_bytes", "name", "prefix", "baseEncode", "bytes", "baseDecode", "text", "decoder", "decoders", "input", "left", "right", "alphabet", "base_x_default", "coerce", "string", "bitsPerChar", "codes", "i", "end", "out", "bits", "buffer", "written", "value", "data", "pad", "mask", "identity_exports", "__export", "identity", "init_identity", "__esmMin", "init_shim", "init_base", "init_bytes", "from", "buf", "toString", "str", "fromString", "base2_exports", "__export", "base2", "init_base2", "__esmMin", "init_shim", "init_base", "rfc4648", "base8_exports", "__export", "base8", "init_base8", "__esmMin", "init_shim", "init_base", "rfc4648", "base10_exports", "__export", "base10", "init_base10", "__esmMin", "init_shim", "init_base", "baseX", "base16_exports", "__export", "base16", "base16upper", "init_base16", "__esmMin", "init_shim", "init_base", "rfc4648", "base32_exports", "__export", "base32", "base32hex", "base32hexpad", "base32hexpadupper", "base32hexupper", "base32pad", "base32padupper", "base32upper", "base32z", "init_base32", "__esmMin", "init_shim", "init_base", "rfc4648", "base36_exports", "__export", "base36", "base36upper", "init_base36", "__esmMin", "init_shim", "init_base", "baseX", "base58_exports", "__export", "base58btc", "base58flickr", "init_base58", "__esmMin", "init_shim", "init_base", "baseX", "base64_exports", "__export", "base64", "base64pad", "base64url", "base64urlpad", "init_base64", "__esmMin", "init_shim", "init_base", "rfc4648", "base256emoji_exports", "__export", "base256emoji", "encode", "data", "p", "c", "alphabetBytesToChars", "decode", "str", "byts", "char", "byt", "alphabetCharsToBytes", "alphabet", "init_base256emoji", "__esmMin", "init_shim", "init_base", "i", "from", "encode", "num", "out", "offset", "oldOffset", "INT", "MSB", "MSBALL", "read", "buf", "res", "shift", "counter", "b", "l", "REST$1", "MSB$1", "encode_1", "REST", "decode", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "length", "varint", "_brrp_varint", "varint_default", "init_varint", "__esmMin", "init_shim", "value", "decode", "encodeTo", "encodingLength", "init_varint", "__esmMin", "init_shim", "data", "offset", "varint_default", "int", "target", "create", "decode", "equals", "Digest", "init_digest", "__esmMin", "init_shim", "init_bytes", "init_varint", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "multihash", "coerce", "a", "b", "from", "Hasher", "init_hasher", "__esmMin", "init_shim", "init_digest", "name", "code", "encode", "input", "result", "create", "digest", "sha2_browser_exports", "__export", "sha256", "sha512", "sha", "init_sha2_browser", "__esmMin", "init_shim", "init_hasher", "name", "data", "from", "identity_exports", "__export", "identity", "code", "name", "encode", "digest", "init_identity", "__esmMin", "init_shim", "init_bytes", "init_digest", "coerce", "input", "create", "init_raw", "__esmMin", "init_shim", "init_bytes", "textEncoder", "textDecoder", "init_json", "__esmMin", "init_shim", "CID", "parseCIDtoBytes", "toStringV0", "toStringV1", "DAG_PB_CODE", "SHA_256_CODE", "encodeCID", "cidSymbol", "readonly", "hidden", "version", "deprecate", "IS_CID_DEPRECATION", "init_cid", "__esmMin", "init_shim", "init_varint", "init_digest", "init_base58", "init_base32", "init_bytes", "code", "multihash", "bytes", "digest", "create", "other", "equals", "base", "_baseCache", "base58btc", "base32", "value", "decode", "cid", "remainder", "specs", "prefixSize", "multihashBytes", "coerce", "digestBytes", "Digest", "initialBytes", "offset", "next", "i", "length", "codec", "multihashCode", "digestSize", "size", "multihashSize", "source", "prefix", "decoder", "cache", "codeOffset", "encodingLength", "hashOffset", "encodeTo", "range", "message", "init_src", "__esmMin", "init_shim", "init_cid", "init_varint", "init_bytes", "init_hasher", "init_digest", "bases", "hashes", "init_basics", "__esmMin", "init_shim", "init_identity", "init_base2", "init_base8", "init_base10", "init_base16", "init_base32", "init_base36", "init_base58", "init_base64", "init_base256emoji", "init_sha2_browser", "init_raw", "init_json", "init_src", "identity_exports", "base2_exports", "base8_exports", "base10_exports", "base16_exports", "base32_exports", "base36_exports", "base58_exports", "base64_exports", "base256emoji_exports", "sha2_browser_exports", "asUint8Array", "buf", "init_as_uint8array", "__esmMin", "init_shim", "allocUnsafe", "size", "asUint8Array", "init_alloc", "__esmMin", "init_shim", "init_as_uint8array", "createCodec", "name", "prefix", "encode", "decode", "string", "ascii", "BASES", "bases_default", "init_bases", "__esmMin", "init_shim", "init_basics", "init_alloc", "buf", "str", "i", "allocUnsafe", "bases", "to_string_exports", "__export", "toString", "array", "encoding", "base", "bases_default", "init_to_string", "__esmMin", "init_shim", "init_bases", "from_string_exports", "__export", "fromString", "string", "encoding", "base", "bases_default", "asUint8Array", "init_from_string", "__esmMin", "init_shim", "init_bases", "init_as_uint8array", "concat_exports", "__export", "concat", "arrays", "length", "acc", "curr", "output", "allocUnsafe", "offset", "arr", "asUint8Array", "init_concat", "__esmMin", "init_shim", "init_alloc", "init_as_uint8array", "require_src", "__commonJSMin", "exports", "module", "init_shim", "multibase", "varint", "names", "uint8ArrayToString", "uint8ArrayFromString", "uint8ArrayConcat", "codes", "key", "name", "toHexString", "hash", "fromHexString", "toB58String", "fromB58String", "encoded", "decode", "bytes", "code", "isValidCode", "len", "encode", "digest", "length", "hashfn", "coerceCode", "isAppCode", "validate", "multihash", "prefix", "require_browser_ponyfill", "__commonJSMin", "exports", "module", "init_shim", "global", "__self__", "F", "self", "irrelevant", "support", "isDataView", "obj", "viewClasses", "isArrayBufferView", "normalizeName", "name", "normalizeValue", "value", "iteratorFor", "items", "iterator", "Headers", "headers", "header", "oldValue", "callback", "thisArg", "consumed", "body", "fileReaderReady", "reader", "resolve", "reject", "readBlobAsArrayBuffer", "blob", "promise", "readBlobAsText", "readArrayBufferAsText", "buf", "view", "chars", "i", "bufferClone", "Body", "rejected", "decode", "methods", "normalizeMethod", "method", "upcased", "Request", "input", "options", "form", "bytes", "split", "parseHeaders", "rawHeaders", "preProcessedHeaders", "line", "parts", "key", "Response", "bodyInit", "response", "redirectStatuses", "url", "status", "message", "error", "fetch", "init", "request", "xhr", "abortXhr", "ctx", "require_browser_ponyfill", "__commonJSMin", "exports", "module", "init_shim", "global", "__self__", "F", "self", "irrelevant", "support", "isDataView", "obj", "viewClasses", "isArrayBufferView", "normalizeName", "name", "normalizeValue", "value", "iteratorFor", "items", "iterator", "Headers", "headers", "header", "oldValue", "callback", "thisArg", "consumed", "body", "fileReaderReady", "reader", "resolve", "reject", "readBlobAsArrayBuffer", "blob", "promise", "readBlobAsText", "readArrayBufferAsText", "buf", "view", "chars", "i", "bufferClone", "Body", "rejected", "decode", "methods", "normalizeMethod", "method", "upcased", "Request", "input", "options", "form", "bytes", "split", "parseHeaders", "rawHeaders", "preProcessedHeaders", "line", "parts", "key", "Response", "bodyInit", "response", "redirectStatuses", "url", "status", "message", "error", "fetch", "init", "request", "xhr", "abortXhr", "ctx", "require_index_umd", "__commonJSMin", "exports", "module", "init_shim", "global", "factory", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Mutex", "begin", "res", "fn", "unlock", "_a", "getGlobal", "globalObject", "nodeBuffer", "textEncoder", "intArrayToString", "arr", "len", "hexCharCodesToInt", "a", "b", "writeHexToUInt8", "buf", "str", "size", "i", "index", "hexStringEqualsUInt8", "strIndex", "alpha", "digit", "getDigestHex", "tmpBuffer", "input", "hashLength", "p", "nibble", "getUInt8Buffer", "data", "base64Chars", "base64Lookup", "encodeBase64", "pad", "extraBytes", "parts", "len2", "tmp", "triplet", "c", "getDecodeBase64Length", "bufferLength", "decodeBase64", "bytes", "encoded1", "encoded2", "encoded3", "encoded4", "MAX_HEAP", "WASM_FUNC_HASH_LENGTH", "wasmMutex", "wasmModuleCache", "WASMInterface", "binary", "wasmInstance", "memoryView", "initialized", "writeMemory", "offset", "getMemory", "getExports", "setMemorySize", "totalSize", "arrayOffset", "memoryBuffer", "getStateSize", "loadWASMPromise", "asm", "promise", "setupInterface", "init", "bits", "updateUInt8Array", "read", "chunk", "update", "Uint8Buffer", "digestChars", "digest", "outputType", "padding", "save", "stateOffset", "stateLength", "internalState", "prefixedState", "load", "state", "overallLength", "isDataShort", "canSimplify", "initParam", "calculate", "digestParam", "buffer", "name$k", "data$k", "hash$k", "wasmJson$k", "lockedCreate", "mutex", "wasm", "mutex$l", "wasmCache$l", "adler32", "hash", "err", "createAdler32", "obj", "name$j", "data$j", "hash$j", "wasmJson$j", "mutex$k", "wasmCache$k", "validateBits$4", "getInitParam$1", "outputBits", "keyBits", "blake2b", "key", "keyBuffer", "createBLAKE2b", "outputSize", "name$i", "data$i", "hash$i", "wasmJson$i", "encodeResult", "salt", "options", "parameters", "uint32View", "int32LE", "x", "hashFunc", "blake512", "blake", "r", "ret", "vp", "partialBytesNeeded", "blakeSmall", "getHashType", "type", "argon2Internal", "parallelism", "iterations", "password", "version", "hashType", "memorySize", "argon2Interface", "initVector", "initVectorView", "lanes", "param", "H0", "lane", "position", "C", "validateOptions$3", "argon2i", "argon2id", "argon2d", "getHashParameters", "encoded", "regex", "match", "parsedParameters", "paramMap", "n", "v", "validateVerifyOptions$1", "argon2Verify", "params", "hashStart", "name$h", "data$h", "hash$h", "wasmJson$h", "mutex$j", "wasmCache$j", "validateBits$3", "getInitParam", "blake2s", "createBLAKE2s", "name$g", "data$g", "hash$g", "wasmJson$g", "mutex$i", "wasmCache$i", "validateBits$2", "blake3", "createBLAKE3", "name$f", "data$f", "hash$f", "wasmJson$f", "mutex$h", "wasmCache$h", "crc32", "createCRC32", "mutex$g", "wasmCache$g", "crc32c", "createCRC32C", "name$e", "data$e", "hash$e", "wasmJson$e", "mutex$f", "wasmCache$f", "md4", "createMD4", "name$d", "data$d", "hash$d", "wasmJson$d", "mutex$e", "wasmCache$e", "md5", "createMD5", "name$c", "data$c", "hash$c", "wasmJson$c", "mutex$d", "wasmCache$d", "sha1", "createSHA1", "name$b", "data$b", "hash$b", "wasmJson$b", "mutex$c", "wasmCache$c", "validateBits$1", "sha3", "createSHA3", "mutex$b", "wasmCache$b", "validateBits", "keccak", "createKeccak", "name$a", "data$a", "hash$a", "wasmJson$a", "mutex$a", "wasmCache$a", "sha224", "createSHA224", "mutex$9", "wasmCache$9", "sha256", "createSHA256", "name$9", "data$9", "hash$9", "wasmJson$9", "mutex$8", "wasmCache$8", "sha384", "createSHA384", "mutex$7", "wasmCache$7", "sha512", "createSHA512", "name$8", "data$8", "hash$8", "wasmJson$8", "mutex$6", "wasmCache$6", "validateSeed$3", "seed", "xxhash32", "createXXHash32", "name$7", "data$7", "hash$7", "wasmJson$7", "mutex$5", "wasmCache$5", "seedBuffer$2", "validateSeed$2", "writeSeed$2", "low", "high", "xxhash64", "seedLow", "seedHigh", "createXXHash64", "instanceBuffer", "name$6", "data$6", "hash$6", "wasmJson$6", "mutex$4", "wasmCache$4", "seedBuffer$1", "validateSeed$1", "writeSeed$1", "xxhash3", "createXXHash3", "name$5", "data$5", "hash$5", "wasmJson$5", "mutex$3", "wasmCache$3", "seedBuffer", "validateSeed", "writeSeed", "xxhash128", "createXXHash128", "name$4", "data$4", "hash$4", "wasmJson$4", "mutex$2", "wasmCache$2", "ripemd160", "createRIPEMD160", "calculateKeyBuffer", "hasher", "blockSize", "uintArr", "calculateHmac", "keyBuf", "opad", "createHMAC", "calculatePBKDF2", "DK", "block1", "block1View", "saltBuffer", "saltUIntBuffer", "destPos", "hLen", "l", "T", "U", "j", "k", "validateOptions$2", "pbkdf2", "hmac", "name$3", "data$3", "hash$3", "wasmJson$3", "scryptInternal", "costFactor", "SHA256Hasher", "blockData", "scryptInterface", "VSize", "XYSize", "expensiveSalt", "outputData", "isPowerOfTwo", "validateOptions$1", "scrypt", "name$2", "data$2", "hash$2", "wasmJson$2", "bcryptInternal", "bcryptInterface", "passwordBuffer", "shouldEncode", "memory", "validateOptions", "bcrypt", "validateHashCharacters", "validateVerifyOptions", "bcryptVerify", "name$1", "data$1", "hash$1", "wasmJson$1", "mutex$1", "wasmCache$1", "whirlpool", "createWhirlpool", "name", "wasmJson", "wasmCache", "sm3", "createSM3", "require_buffer", "__commonJSMin", "exports", "init_shim", "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", "arrayView", "copy", "byteOffset", "obj", "len", "numberIsNaN", "a", "x", "y", "i", "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_src", "__commonJSMin", "exports", "module", "init_shim", "fetch", "hash", "buffer", "size", "randomString", "getChallengeUri", "solveChallengeUri", "requestBody", "result", "getChallengeResponse", "challengeBody", "challengeNonce", "largestAllowedHash", "validDuration", "answerHash", "answerNonce", "startTime", "response", "responseText", "require_nacl_fast", "__commonJSMin", "exports", "module", "init_shim", "nacl", "gf", "init", "i", "r", "randombytes", "_0", "_9", "gf0", "gf1", "_121665", "D", "D2", "X", "Y", "I", "ts64", "x", "h", "l", "vn", "xi", "y", "yi", "n", "d", "crypto_verify_16", "crypto_verify_32", "core_salsa20", "o", "p", "k", "c", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "j10", "j11", "j12", "j13", "j14", "j15", "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "u", "core_hsalsa20", "crypto_core_salsa20", "out", "inp", "crypto_core_hsalsa20", "sigma", "crypto_stream_salsa20_xor", "cpos", "m", "mpos", "b", "z", "crypto_stream_salsa20", "crypto_stream", "s", "sn", "crypto_stream_xor", "poly1305", "key", "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "bytes", "hibit", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "h0", "h1", "h2", "h3", "h4", "h5", "h6", "h7", "h8", "h9", "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "mac", "macpos", "g", "mask", "f", "want", "crypto_onetimeauth", "outpos", "crypto_onetimeauth_verify", "hpos", "crypto_secretbox", "crypto_secretbox_open", "set25519", "a", "car25519", "v", "sel25519", "t", "pack25519", "j", "neq25519", "par25519", "unpack25519", "A", "Z", "M", "t8", "t9", "t10", "t11", "t12", "t13", "t14", "t15", "t16", "t17", "t18", "t19", "t20", "t21", "t22", "t23", "t24", "t25", "t26", "t27", "t28", "t29", "t30", "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7", "b8", "b9", "b10", "b11", "b12", "b13", "b14", "b15", "S", "inv25519", "pow2523", "crypto_scalarmult", "q", "e", "x32", "x16", "crypto_scalarmult_base", "crypto_box_keypair", "crypto_box_beforenm", "crypto_box_afternm", "crypto_box_open_afternm", "crypto_box", "crypto_box_open", "K", "crypto_hashblocks_hl", "hh", "hl", "wh", "wl", "bh0", "bh1", "bh2", "bh3", "bh4", "bh5", "bh6", "bh7", "bl0", "bl1", "bl2", "bl3", "bl4", "bl5", "bl6", "bl7", "th", "tl", "ah0", "ah1", "ah2", "ah3", "ah4", "ah5", "ah6", "ah7", "al0", "al1", "al2", "al3", "al4", "al5", "al6", "al7", "pos", "crypto_hash", "add", "cswap", "pack", "tx", "ty", "zi", "scalarmult", "scalarbase", "crypto_sign_keypair", "pk", "sk", "seeded", "L", "modL", "carry", "reduce", "crypto_sign", "sm", "smlen", "unpackneg", "chk", "num", "den", "den2", "den4", "den6", "crypto_sign_open", "crypto_secretbox_KEYBYTES", "crypto_secretbox_NONCEBYTES", "crypto_secretbox_ZEROBYTES", "crypto_secretbox_BOXZEROBYTES", "crypto_scalarmult_BYTES", "crypto_scalarmult_SCALARBYTES", "crypto_box_PUBLICKEYBYTES", "crypto_box_SECRETKEYBYTES", "crypto_box_BEFORENMBYTES", "crypto_box_NONCEBYTES", "crypto_box_ZEROBYTES", "crypto_box_BOXZEROBYTES", "crypto_sign_BYTES", "crypto_sign_PUBLICKEYBYTES", "crypto_sign_SECRETKEYBYTES", "crypto_sign_SEEDBYTES", "crypto_hash_BYTES", "checkLengths", "checkBoxLengths", "checkArrayTypes", "cleanup", "arr", "msg", "nonce", "box", "publicKey", "secretKey", "signedMsg", "tmp", "mlen", "sig", "seed", "fn", "crypto", "QUOTA", "__require", "require_ed2curve", "__commonJSMin", "exports", "module", "init_shim", "root", "f", "nacl", "gf", "init", "i", "r", "gf0", "gf1", "D", "I", "car25519", "o", "c", "sel25519", "p", "q", "b", "t", "unpack25519", "n", "A", "a", "Z", "M", "j", "S", "inv25519", "pack25519", "m", "par25519", "d", "vn", "x", "xi", "y", "yi", "crypto_verify_32", "neq25519", "pow2523", "set25519", "unpackneg", "chk", "num", "den", "den2", "den4", "den6", "convertPublicKey", "pk", "z", "convertSecretKey", "sk", "convertKeyPair", "edKeyPair", "publicKey", "require_stream_browser", "__commonJSMin", "exports", "module", "init_shim", "require_buffer_list", "__commonJSMin", "exports", "module", "init_shim", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "obj", "value", "_toPropertyKey", "_classCallCheck", "instance", "Constructor", "_defineProperties", "props", "descriptor", "_createClass", "protoProps", "staticProps", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_require", "Buffer", "_require2", "inspect", "custom", "copyBuffer", "src", "offset", "BufferList", "v", "entry", "ret", "s", "p", "n", "hasStrings", "c", "str", "nb", "buf", "_", "options", "require_destroy", "__commonJSMin", "exports", "module", "init_shim", "destroy", "err", "cb", "_this", "readableDestroyed", "writableDestroyed", "process", "emitErrorNT", "emitCloseNT", "emitErrorAndCloseNT", "self", "undestroy", "errorOrDestroy", "stream", "rState", "wState", "require_errors_browser", "__commonJSMin", "exports", "module", "init_shim", "_inheritsLoose", "subClass", "superClass", "codes", "createErrorType", "code", "message", "Base", "getMessage", "arg1", "arg2", "arg3", "NodeError", "_Base", "oneOf", "expected", "thing", "len", "startsWith", "str", "search", "pos", "endsWith", "this_len", "includes", "start", "name", "value", "actual", "determiner", "msg", "type", "arg", "require_state", "__commonJSMin", "exports", "module", "init_shim", "ERR_INVALID_OPT_VALUE", "highWaterMarkFrom", "options", "isDuplex", "duplexKey", "getHighWaterMark", "state", "hwm", "name", "require_stream_writable", "__commonJSMin", "exports", "module", "init_shim", "Writable", "CorkedRequest", "state", "_this", "onCorkedFinish", "Duplex", "WritableState", "internalUtil", "Stream", "Buffer", "OurUint8Array", "_uint8ArrayToBuffer", "chunk", "_isUint8Array", "obj", "destroyImpl", "_require", "getHighWaterMark", "_require$codes", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_STREAM_CANNOT_PIPE", "ERR_STREAM_DESTROYED", "ERR_STREAM_NULL_VALUES", "ERR_STREAM_WRITE_AFTER_END", "ERR_UNKNOWN_ENCODING", "errorOrDestroy", "nop", "options", "stream", "isDuplex", "noDecode", "er", "onwrite", "current", "out", "realHasInstance", "object", "writeAfterEnd", "cb", "process", "validChunk", "encoding", "ret", "isBuf", "writeOrBuffer", "clearBuffer", "decodeChunk", "newChunk", "len", "last", "doWrite", "writev", "onwriteError", "sync", "finishMaybe", "onwriteStateUpdate", "finished", "needFinish", "afterWrite", "onwriteDrain", "entry", "l", "buffer", "holder", "count", "allBuffers", "endWritable", "callFinal", "err", "prefinish", "need", "rState", "corkReq", "value", "require_stream_duplex", "__commonJSMin", "exports", "module", "init_shim", "objectKeys", "obj", "keys", "key", "Duplex", "Readable", "Writable", "v", "method", "options", "onend", "process", "onEndNT", "self", "value", "require_end_of_stream", "__commonJSMin", "exports", "module", "init_shim", "ERR_STREAM_PREMATURE_CLOSE", "once", "callback", "called", "_len", "args", "_key", "noop", "isRequest", "stream", "eos", "opts", "readable", "writable", "onlegacyfinish", "onfinish", "writableEnded", "readableEnded", "onend", "onerror", "err", "onclose", "onrequest", "require_async_iterator", "__commonJSMin", "exports", "module", "init_shim", "_Object$setPrototypeO", "_defineProperty", "obj", "key", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "finished", "kLastResolve", "kLastReject", "kError", "kEnded", "kLastPromise", "kHandlePromise", "kStream", "createIterResult", "done", "readAndResolve", "iter", "resolve", "data", "onReadable", "process", "wrapForNext", "lastPromise", "reject", "AsyncIteratorPrototype", "ReadableStreamAsyncIteratorPrototype", "_this", "error", "promise", "_this2", "err", "createReadableStreamAsyncIterator", "stream", "_Object$create", "iterator", "require_from_browser", "__commonJSMin", "exports", "module", "init_shim", "require_stream_readable", "__commonJSMin", "exports", "module", "init_shim", "Readable", "Duplex", "ReadableState", "EE", "EElistenerCount", "emitter", "type", "Stream", "Buffer", "OurUint8Array", "_uint8ArrayToBuffer", "chunk", "_isUint8Array", "obj", "debugUtil", "debug", "BufferList", "destroyImpl", "_require", "getHighWaterMark", "_require$codes", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_PUSH_AFTER_EOF", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_STREAM_UNSHIFT_AFTER_END_EVENT", "StringDecoder", "createReadableStreamAsyncIterator", "from", "errorOrDestroy", "kProxyEvents", "prependListener", "event", "fn", "options", "stream", "isDuplex", "value", "err", "cb", "encoding", "state", "skipChunkCheck", "readableAddChunk", "addToFront", "onEofChunk", "er", "chunkInvalid", "addChunk", "maybeReadMore", "emitReadable", "enc", "decoder", "p", "content", "MAX_HWM", "computeNewHighWaterMark", "n", "howMuchToRead", "nOrig", "endReadable", "doRead", "ret", "fromList", "emitReadable_", "process", "flow", "maybeReadMore_", "len", "dest", "pipeOpts", "src", "doEnd", "endFn", "onend", "unpipe", "onunpipe", "readable", "unpipeInfo", "cleanup", "ondrain", "pipeOnDrain", "cleanedUp", "onclose", "onfinish", "onerror", "ondata", "indexOf", "dests", "i", "index", "ev", "res", "nReadingNextTick", "updateReadableListening", "self", "resume", "resume_", "_this", "paused", "method", "endReadableNT", "wState", "iterable", "opts", "xs", "x", "l", "require_stream_transform", "__commonJSMin", "exports", "module", "init_shim", "Transform", "_require$codes", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_TRANSFORM_ALREADY_TRANSFORMING", "ERR_TRANSFORM_WITH_LENGTH_0", "Duplex", "afterTransform", "er", "data", "ts", "cb", "rs", "options", "prefinish", "_this", "done", "chunk", "encoding", "n", "err", "err2", "stream", "require_stream_passthrough", "__commonJSMin", "exports", "module", "init_shim", "PassThrough", "Transform", "options", "chunk", "encoding", "cb", "require_pipeline", "__commonJSMin", "exports", "module", "init_shim", "eos", "once", "callback", "called", "_require$codes", "ERR_MISSING_ARGS", "ERR_STREAM_DESTROYED", "noop", "err", "isRequest", "stream", "destroyer", "reading", "writing", "closed", "destroyed", "call", "fn", "pipe", "from", "to", "popCallback", "streams", "pipeline", "_len", "_key", "error", "destroys", "i", "require_readable_browser", "__commonJSMin", "exports", "module", "init_shim", "require_lib", "__commonJSMin", "exports", "init_shim", "readable_stream_1", "ReadableWebToNodeStream", "stream", "data", "init_shim", "init_shim", "import_ms", "init_shim", "AllowAllTenantGate", "_did", "src_exports", "__export", "code", "decode", "encode", "name", "init_shim", "init_shim", "init_shim", "init_shim", "typeofs", "objectTypeNames", "is", "value", "typeOf", "isBuffer", "objectType", "getObjectType", "objectTypeName", "init_shim", "Type", "major", "name", "terminal", "typ", "Token", "type", "value", "encodedLength", "init_shim", "init_shim", "useBuffer", "textDecoder", "textEncoder", "isBuffer", "buf", "asU8A", "toString", "bytes", "start", "end", "utf8Slice", "fromString", "string", "utf8ToBytes", "fromArray", "arr", "slice", "concat", "chunks", "length", "c", "out", "off", "b", "alloc", "size", "compare", "b1", "b2", "isBuffer", "i", "utf8ToBytes", "string", "units", "codePoint", "length", "leadSurrogate", "bytes", "utf8Slice", "buf", "offset", "end", "res", "firstByte", "bytesPerSequence", "secondByte", "thirdByte", "fourthByte", "tempCodePoint", "decodeCodePointsArray", "MAX_ARGUMENTS_LENGTH", "codePoints", "len", "defaultChunkSize", "Bl", "chunkSize", "bytes", "topChunk", "chunkPos", "alloc", "reset", "byts", "chunk", "slice", "concat", "init_shim", "decodeErrPrefix", "encodeErrPrefix", "uintMinorPrefixBytes", "assertEnoughData", "data", "pos", "need", "init_shim", "init_shim", "uintBoundaries", "readUint8", "data", "offset", "options", "assertEnoughData", "value", "decodeErrPrefix", "readUint16", "readUint32", "readUint64", "hi", "lo", "decodeUint8", "pos", "_minor", "Token", "Type", "decodeUint16", "decodeUint32", "decodeUint64", "encodeUint", "buf", "token", "encodeUintValue", "major", "uint", "nuint", "buint", "set", "tok1", "tok2", "init_shim", "decodeNegint8", "data", "pos", "_minor", "options", "Token", "Type", "readUint8", "decodeNegint16", "readUint16", "decodeNegint32", "readUint32", "neg1b", "pos1b", "decodeNegint64", "int", "readUint64", "value", "decodeErrPrefix", "encodeNegint", "buf", "token", "negint", "unsigned", "encodeUintValue", "uintBoundaries", "tok1", "tok2", "init_shim", "toToken", "data", "pos", "prefix", "length", "assertEnoughData", "buf", "slice", "Token", "Type", "decodeBytesCompact", "minor", "_options", "decodeBytes8", "_minor", "options", "readUint8", "decodeBytes16", "readUint16", "decodeBytes32", "readUint32", "decodeBytes64", "l", "readUint64", "decodeErrPrefix", "tokenBytes", "token", "fromString", "encodeBytes", "bytes", "encodeUintValue", "tok1", "tok2", "compareBytes", "b1", "b2", "compare", "init_shim", "toToken", "data", "pos", "prefix", "length", "options", "totLength", "assertEnoughData", "tok", "Token", "Type", "toString", "slice", "decodeStringCompact", "minor", "decodeString8", "_minor", "readUint8", "decodeString16", "readUint16", "decodeString32", "readUint32", "decodeString64", "l", "readUint64", "decodeErrPrefix", "encodeString", "encodeBytes", "init_shim", "toToken", "_data", "_pos", "prefix", "length", "Token", "Type", "decodeArrayCompact", "data", "pos", "minor", "_options", "decodeArray8", "_minor", "options", "readUint8", "decodeArray16", "readUint16", "decodeArray32", "readUint32", "decodeArray64", "l", "readUint64", "decodeErrPrefix", "decodeArrayIndefinite", "encodeArray", "buf", "token", "encodeUintValue", "encodeUint", "init_shim", "toToken", "_data", "_pos", "prefix", "length", "Token", "Type", "decodeMapCompact", "data", "pos", "minor", "_options", "decodeMap8", "_minor", "options", "readUint8", "decodeMap16", "readUint16", "decodeMap32", "readUint32", "decodeMap64", "l", "readUint64", "decodeErrPrefix", "decodeMapIndefinite", "encodeMap", "buf", "token", "encodeUintValue", "encodeUint", "init_shim", "decodeTagCompact", "_data", "_pos", "minor", "_options", "Token", "Type", "decodeTag8", "data", "pos", "_minor", "options", "readUint8", "decodeTag16", "readUint16", "decodeTag32", "readUint32", "decodeTag64", "readUint64", "encodeTag", "buf", "token", "encodeUintValue", "encodeUint", "init_shim", "MINOR_FALSE", "MINOR_TRUE", "MINOR_NULL", "MINOR_UNDEFINED", "decodeUndefined", "_data", "_pos", "_minor", "options", "decodeErrPrefix", "Token", "Type", "decodeBreak", "createToken", "value", "bytes", "decodeFloat16", "data", "pos", "readFloat16", "decodeFloat32", "readFloat32", "decodeFloat64", "readFloat64", "encodeFloat", "buf", "token", "float", "decoded", "success", "encodeFloat16", "ui8a", "encodeFloat32", "encodeFloat64", "buffer", "dataView", "inp", "valu32", "exponent", "mantissa", "logicalExponent", "half", "exp", "mant", "val", "offset", "encodeUint", "invalidMinor", "data", "pos", "minor", "decodeErrPrefix", "errorer", "msg", "jump", "i", "decodeUint8", "decodeUint16", "decodeUint32", "decodeUint64", "decodeNegint8", "decodeNegint16", "decodeNegint32", "decodeNegint64", "decodeBytesCompact", "decodeBytes8", "decodeBytes16", "decodeBytes32", "decodeBytes64", "decodeStringCompact", "decodeString8", "decodeString16", "decodeString32", "decodeString64", "decodeArrayCompact", "decodeArray8", "decodeArray16", "decodeArray32", "decodeArray64", "decodeArrayIndefinite", "decodeMapCompact", "decodeMap8", "decodeMap16", "decodeMap32", "decodeMap64", "decodeMapIndefinite", "decodeTagCompact", "decodeTag8", "decodeTag16", "decodeTag32", "decodeTag64", "decodeUndefined", "decodeFloat16", "decodeFloat32", "decodeFloat64", "decodeBreak", "quick", "Token", "Type", "quickEncodeToken", "token", "fromArray", "defaultEncodeOptions", "mapSorter", "quickEncodeToken", "makeCborEncoders", "encoders", "Type", "encodeUint", "encodeNegint", "encodeBytes", "encodeString", "encodeArray", "encodeMap", "encodeTag", "encodeFloat", "cborEncoders", "buf", "Bl", "Ref", "obj", "parent", "p", "stack", "encodeErrPrefix", "simpleTokens", "Token", "typeEncoders", "_typ", "_options", "_refStack", "_obj", "options", "refStack", "entries", "i", "e", "objectToTokens", "typ", "isMap", "keys", "length", "key", "sortMapEntries", "is", "customTypeEncoder", "tokens", "typeEncoder", "e1", "e2", "keyToken1", "keyToken2", "major", "tcmp", "tokensToEncoded", "token", "encodeCustom", "data", "quickBytes", "encoder", "size", "asU8A", "encode", "init_shim", "defaultDecodeOptions", "Tokeniser", "data", "options", "byt", "token", "quick", "decoder", "jump", "decodeErrPrefix", "minor", "DONE", "BREAK", "tokenToArray", "tokeniser", "arr", "i", "value", "tokensToObject", "tokenToMap", "useMaps", "obj", "m", "key", "Type", "tagged", "decode", "decoded", "init_shim", "init_shim", "init_shim", "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", "init_shim", "init_shim", "empty", "equals", "aa", "bb", "ii", "coerce", "o", "create", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "Digest", "decode", "multihash", "coerce", "equals", "a", "b", "data", "init_shim", "init_shim", "init_shim", "base", "ALPHABET", "name", "BASE_MAP", "j", "i", "x", "xc", "BASE", "LEADER", "FACTOR", "iFACTOR", "encode", "source", "zeroes", "length", "pbegin", "pend", "size", "b58", "carry", "it1", "it2", "str", "decodeUnsafe", "psz", "b256", "it3", "it4", "vch", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "init_shim", "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", "base58btc", "baseX", "base58flickr", "init_shim", "base32", "rfc4648", "base32upper", "base32pad", "base32padupper", "base32hex", "base32hexupper", "base32hexpad", "base32hexpadupper", "base32z", "init_shim", "format", "link", "base", "bytes", "version", "toStringV0", "baseCache", "base58btc", "toStringV1", "base32", "cache", "baseCache", "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", "CID_CBOR_TAG", "cidEncoder", "obj", "cid", "CID", "bytes", "Token", "Type", "undefinedEncoder", "numberEncoder", "num", "encodeOptions", "cidDecoder", "decodeOptions", "name", "code", "encode", "node", "decode", "data", "init_shim", "init_shim", "init_shim", "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", "init_shim", "init_shim", "empty", "equals", "aa", "bb", "ii", "coerce", "o", "fromString", "str", "toString", "b", "create", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "Digest", "decode", "multihash", "coerce", "equals", "a", "b", "data", "base58_exports", "__export", "base58btc", "base58flickr", "init_shim", "init_shim", "init_shim", "base", "ALPHABET", "name", "BASE_MAP", "j", "i", "x", "xc", "BASE", "LEADER", "FACTOR", "iFACTOR", "encode", "source", "zeroes", "length", "pbegin", "pend", "size", "b58", "carry", "it1", "it2", "str", "decodeUnsafe", "psz", "b256", "it3", "it4", "vch", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "init_shim", "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", "base58btc", "baseX", "base58flickr", "base32_exports", "__export", "base32", "base32hex", "base32hexpad", "base32hexpadupper", "base32hexupper", "base32pad", "base32padupper", "base32upper", "base32z", "init_shim", "base32", "rfc4648", "base32upper", "base32pad", "base32padupper", "base32hex", "base32hexupper", "base32hexpad", "base32hexpadupper", "base32z", "init_shim", "format", "link", "base", "bytes", "version", "toStringV0", "baseCache", "base58btc", "toStringV1", "base32", "cache", "baseCache", "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", "init_shim", "import_err_code", "init_shim", "init_shim", "init_shim", "isAsyncIterable", "thing", "batch", "source", "size", "things", "src_default", "parallelBatch", "source", "size", "tasks", "src_default", "things", "p", "value", "err", "i", "result", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "asUint8Array", "buf", "alloc", "size", "asUint8Array", "allocUnsafe", "concat", "arrays", "length", "acc", "curr", "output", "allocUnsafe", "offset", "arr", "asUint8Array", "init_shim", "equals", "a", "b", "i", "symbol", "findBufAndOffset", "bufs", "index", "offset", "buf", "bufEnd", "isUint8ArrayList", "value", "Uint8ArrayList", "data", "length", "res", "bytes", "beginInclusive", "endExclusive", "concat", "list", "i", "bufStart", "sliceStartInBuf", "sliceEndsInBuf", "start", "search", "needle", "M", "radix", "rightmostPositions", "c", "j", "right", "lastIndex", "lastPatIndex", "skip", "char", "byteOffset", "allocUnsafe", "littleEndian", "alloc", "other", "equals", "acc", "curr", "DEFAULT_CHUNK_SIZE", "fixedSize", "options", "chunkSize", "source", "list", "Uint8ArrayList", "currentLength", "emitted", "buffer", "newBl", "init_shim", "src_exports", "__export", "code", "createLink", "createNode", "decode", "encode", "name", "prepare", "validate", "init_shim", "init_shim", "init_shim", "init_shim", "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", "init_shim", "init_shim", "empty", "equals", "aa", "bb", "ii", "coerce", "o", "create", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "Digest", "decode", "multihash", "coerce", "equals", "a", "b", "data", "init_shim", "init_shim", "init_shim", "base", "ALPHABET", "name", "BASE_MAP", "j", "i", "x", "xc", "BASE", "LEADER", "FACTOR", "iFACTOR", "encode", "source", "zeroes", "length", "pbegin", "pend", "size", "b58", "carry", "it1", "it2", "str", "decodeUnsafe", "psz", "b256", "it3", "it4", "vch", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "init_shim", "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", "base58btc", "baseX", "base58flickr", "init_shim", "base32", "rfc4648", "base32upper", "base32pad", "base32padupper", "base32hex", "base32hexupper", "base32hexpad", "base32hexpadupper", "base32z", "init_shim", "format", "link", "base", "bytes", "version", "toStringV0", "baseCache", "base58btc", "toStringV1", "base32", "cache", "baseCache", "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", "init_shim", "textDecoder", "decodeVarint", "bytes", "offset", "v", "shift", "b", "decodeBytes", "byteLen", "postOffset", "decodeKey", "index", "wire", "decodeLink", "link", "l", "wireType", "fieldNum", "byts", "decodeNode", "links", "linksBeforeData", "data", "node", "init_shim", "textEncoder", "maxInt32", "maxUInt32", "encodeLink", "link", "bytes", "i", "encodeVarint", "nameBytes", "encodeNode", "node", "size", "sizeNode", "index", "sizeLink", "n", "l", "sov", "offset", "v", "base", "x", "len64", "len8tab", "init_shim", "pbNodeProperties", "pbLinkProperties", "textEncoder", "linkComparator", "a", "b", "abuf", "bbuf", "x", "y", "i", "len", "hasOnlyProperties", "node", "properties", "p", "asLink", "link", "Hash", "CID", "pbl", "cid", "e", "prepare", "pbn", "validate", "createNode", "data", "links", "createLink", "name", "size", "name", "code", "encode", "node", "validate", "pbn", "l", "link", "encodeNode", "decode", "bytes", "decodeNode", "CID", "init_shim", "import_err_code", "init_shim", "init_shim", "init_shim", "init_shim", "import_reader", "import_reader_buffer", "import_minimal", "import_writer", "import_writer_buffer", "configure", "util", "ReaderClass", "ReaderBufferClass", "WriterClass", "WriterBufferClass", "methods", "patchReader", "obj", "method", "original", "reader", "buf", "patchWriter", "val", "writer", "decodeMessage", "buf", "codec", "reader", "init_shim", "encodeMessage", "message", "codec", "w", "writer", "init_shim", "init_shim", "CODEC_TYPES", "createCodec", "name", "type", "encode", "decode", "enumeration", "v", "findValue", "val", "encode", "writer", "enumValue", "decode", "reader", "createCodec", "CODEC_TYPES", "init_shim", "message", "encode", "decode", "createCodec", "CODEC_TYPES", "Data", "DataType", "__DataTypeValues", "enumeration", "_codec", "message", "obj", "w", "opts", "value", "UnixTime", "reader", "length", "end", "tag", "encodeMessage", "buf", "decodeMessage", "Metadata", "types", "dirTypes", "DEFAULT_FILE_MODE", "DEFAULT_DIRECTORY_MODE", "UnixFS", "marshaled", "message", "Data", "data", "options", "type", "blockSizes", "hashType", "fanout", "mtime", "mode", "errcode", "size", "index", "sum", "raw_exports", "__export", "code", "decode", "encode", "name", "init_shim", "name", "code", "encode", "node", "coerce", "decode", "data", "init_shim", "CustomProgressEvent", "type", "detail", "init_shim", "sha2_browser_exports", "__export", "sha256", "sha512", "init_shim", "init_shim", "from", "name", "code", "encode", "Hasher", "input", "result", "create", "digest", "sha", "name", "data", "sha256", "from", "sha512", "persist", "buffer", "blockstore", "options", "src_exports", "multihash", "sha256", "cid", "CID", "defaultBufferImporter", "options", "file", "blockstore", "bytesWritten", "block", "unixfs", "opts", "src_exports", "raw_exports", "UnixFS", "encode", "cid", "persist", "CustomProgressEvent", "init_shim", "import_err_code", "init_shim", "dirBuilder", "dir", "blockstore", "options", "unixfs", "UnixFS", "block", "encode", "prepare", "cid", "persist", "path", "init_shim", "buildFileBatch", "file", "blockstore", "options", "count", "previous", "entry", "parallelBatch", "isSingleBlockImport", "result", "reduce", "leaves", "leaf", "node", "UnixFS", "encode", "prepare", "persist", "CustomProgressEvent", "f", "links", "code", "block", "cid", "acc", "curr", "fileBuilder", "isIterable", "thing", "isAsyncIterable", "contentAsAsyncIterable", "content", "errCode", "defaultDagBuilder", "options", "source", "blockstore", "entry", "originalPath", "path", "isFileCandidate", "file", "bytesRead", "chunk", "currentChunkSize", "CustomProgressEvent", "fileBuilder", "dir", "dirBuilder", "init_shim", "import_err_code", "init_shim", "init_shim", "init_shim", "identity_exports", "__export", "identity", "init_shim", "identity", "from", "buf", "toString", "str", "fromString", "base2_exports", "__export", "base2", "init_shim", "base2", "rfc4648", "base8_exports", "__export", "base8", "init_shim", "base8", "rfc4648", "base10_exports", "__export", "base10", "init_shim", "base10", "baseX", "base16_exports", "__export", "base16", "base16upper", "init_shim", "base16", "rfc4648", "base16upper", "base36_exports", "__export", "base36", "base36upper", "init_shim", "base36", "baseX", "base36upper", "base64_exports", "__export", "base64", "base64pad", "base64url", "base64urlpad", "init_shim", "base64", "rfc4648", "base64pad", "base64url", "base64urlpad", "base256emoji_exports", "__export", "base256emoji", "init_shim", "alphabet", "alphabetBytesToChars", "p", "c", "i", "alphabetCharsToBytes", "encode", "data", "decode", "str", "byts", "char", "byt", "base256emoji", "from", "identity_exports", "__export", "identity", "init_shim", "code", "name", "encode", "coerce", "digest", "input", "create", "identity", "init_shim", "textEncoder", "textDecoder", "init_shim", "init_shim", "bases", "identity_exports", "base2_exports", "base8_exports", "base10_exports", "base16_exports", "base32_exports", "base36_exports", "base58_exports", "base64_exports", "base256emoji_exports", "hashes", "sha2_browser_exports", "createCodec", "name", "prefix", "encode", "decode", "string", "buf", "str", "ascii", "i", "allocUnsafe", "BASES", "bases", "bases_default", "fromString", "string", "encoding", "base", "bases_default", "asUint8Array", "defaultChunkValidator", "source", "content", "errCode", "fromString", "init_shim", "init_shim", "DEFAULT_MAX_CHILDREN_PER_NODE", "balanced", "options", "maxChildrenPerNode", "balancedLayout", "source", "reduce", "roots", "chunked", "src_default", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "Dir", "props", "options", "CID_V0", "CID", "CID_V1", "DirFlat", "Dir", "props", "options", "name", "value", "key", "child", "CID_V1", "CID_V0", "block", "links", "result", "entry", "unixfs", "UnixFS", "node", "buffer", "encode", "prepare", "cid", "persist", "size", "acc", "curr", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "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", "init_shim", "bytes_exports", "__export", "coerce", "empty", "equals", "fromHex", "fromString", "isBinary", "toHex", "toString", "init_shim", "d", "hex", "byte", "hexes", "b", "aa", "bb", "ii", "o", "str", "create", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "Digest", "decode", "multihash", "coerce", "equals", "a", "b", "data", "init_shim", "init_shim", "init_shim", "base", "ALPHABET", "name", "BASE_MAP", "j", "i", "x", "xc", "BASE", "LEADER", "FACTOR", "iFACTOR", "encode", "source", "zeroes", "length", "pbegin", "pend", "size", "b58", "carry", "it1", "it2", "str", "decodeUnsafe", "psz", "b256", "it3", "it4", "vch", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "init_shim", "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", "base58btc", "baseX", "base58flickr", "init_shim", "base32", "rfc4648", "base32upper", "base32pad", "base32padupper", "base32hex", "base32hexupper", "base32hexpad", "base32hexpadupper", "base32z", "init_shim", "format", "link", "base", "bytes", "version", "toStringV0", "baseCache", "base58btc", "toStringV1", "base32", "cache", "baseCache", "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", "init_shim", "from", "name", "code", "encode", "Hasher", "input", "result", "create", "digest", "init_shim", "import_murmurhash3js_revisited", "fromNumberTo32BitBuf", "number", "bytes", "i", "murmur332", "from", "input", "mur", "murmur3128", "bytes_exports", "murmur364", "init_shim", "init_shim", "import_sparse_array", "Bucket", "options", "parent", "posAtParent", "SparseArray", "key", "value", "place", "child", "acc", "children", "map", "reduce", "index", "asyncMap", "asyncReduce", "asyncTransformBucket", "mapNode", "reduceNodes", "result", "hashValue", "fromString", "bucket", "newPlace", "pos", "object", "onlyChild", "exists", "hash", "o", "node", "_", "nodes", "output", "mappedChildren", "init_shim", "init_shim", "START_MASKS", "STOP_MASKS", "ConsumableBuffer", "value", "bits", "pendingBits", "result", "byte", "availableBits", "taking", "byteBitsToInt", "start", "length", "mask", "maskFor", "wrapHash", "hashFn", "hashing", "value", "InfiniteHash", "bits", "pendingBits", "result", "hash", "available", "took", "availableForUntake", "concat", "hashValue", "buffer", "ConsumableBuffer", "createHAMT", "options", "bucketOptions", "wrapHash", "Bucket", "hamtHashFn", "buf", "murmur3128", "HAMT_HASH_CODE", "DirSharded", "Dir", "props", "options", "createHAMT", "name", "value", "key", "calculateSize", "blockstore", "entry", "flush", "dir_sharded_default", "bucket", "shardRoot", "children", "links", "childrenSize", "i", "child", "labelPrefix", "Bucket", "shard", "subShard", "isDir", "dir", "flushedDir", "label", "size", "data", "UnixFS", "node", "buffer", "encode", "prepare", "cid", "persist", "obj", "CID_V0", "CID_V1", "flatToShard", "child", "dir", "threshold", "options", "newDir", "DirFlat", "convertToShard", "parent", "oldDir", "dir_sharded_default", "key", "init_shim", "toPathComponents", "path", "addToTree", "elem", "tree", "options", "pathElems", "toPathComponents", "lastIndex", "parent", "currentPath", "i", "pathElem", "last", "flatToShard", "dir", "Dir", "DirFlat", "flushAndYield", "blockstore", "defaultTreeBuilder", "source", "block", "rootDir", "singleRoot", "entry", "unwrapped", "importer", "source", "blockstore", "options", "candidates", "wrapWithDirectory", "shardSplitThresholdBytes", "cidVersion", "rawLeaves", "leafType", "fileImportConcurrency", "blockWriteConcurrency", "reduceSingleLeafToSelf", "chunker", "fixedSize", "chunkValidator", "defaultChunkValidator", "buildDag", "defaultDagBuilder", "balanced", "defaultBufferImporter", "buildTree", "defaultTreeBuilder", "entry", "parallelBatch", "init_shim", "errors_exports", "__export", "abortedError", "closeFailedError", "deleteFailedError", "getFailedError", "hasFailedError", "notFoundError", "openFailedError", "putFailedError", "init_shim", "import_err_code", "err", "errCode", "init_shim", "BaseBlockstore", "key", "options", "val", "source", "cid", "block", "init_shim", "MemoryBlockstore", "BaseBlockstore", "key", "val", "base32", "buf", "notFoundError", "value", "CID", "code", "decode", "Errors", "errors_exports", "hashers", "sha256", "codecs", "code", "src_exports", "Cid", "payload", "codecCode", "multihashCode", "codec", "hasher", "payloadBytes", "payloadHash", "CID", "str", "cid", "content", "asyncDataBlocks", "importer", "MemoryBlockstore", "block", "asyncDataBlocks_1", "__asyncValues", "asyncDataBlocks_1_1", "dataStream", "asyncDataBlocks_2", "asyncDataBlocks_2_1", "promisifySignal", "signal", "resolve", "reject", "executeUnlessAborted", "promise", "init_shim", "INTRINSICS", "MakeIntrinsicClass", "Class", "name", "Object", "defineProperty", "prototype", "Symbol", "toStringTag", "value", "writable", "enumerable", "configurable", "prop", "getOwnPropertyNames", "desc", "getOwnPropertyDescriptor", "DefineIntrinsic", "key", "Error", "GetIntrinsic", "intrinsic", "r", "o", "EPOCHNANOSECONDS", "TIMEZONE_ID", "ISO_YEAR", "ISO_MONTH", "ISO_DAY", "ISO_HOUR", "ISO_MINUTE", "ISO_SECOND", "ISO_MILLISECOND", "ISO_MICROSECOND", "ISO_NANOSECOND", "CALENDAR", "DATE_BRAND", "YEAR_MONTH_BRAND", "MONTH_DAY_BRAND", "INSTANT", "TIME_ZONE", "YEARS", "MONTHS", "WEEKS", "DAYS", "HOURS", "MINUTES", "SECONDS", "MILLISECONDS", "MICROSECONDS", "NANOSECONDS", "CALENDAR_ID", "globalSlots", "WeakMap", "GetSlotsSymbol", "for", "_a", "globalThis", "container", "get", "GetSlots", "CreateSlotsSymbol", "_b", "set", "create", "CreateSlots", "HasSlot", "ids", "myslots", "every", "id", "GetSlot", "TypeError", "SetSlot", "slots", "tzComponent", "timeZoneID", "RegExp", "source", "join", "yearpart", "monthpart", "daypart", "datesplit", "timesplit", "offset", "offsetpart", "annotation", "zoneddatetime", "time", "yearmonth", "monthday", "fraction", "durationTime", "duration", "ArrayIncludes", "Array", "includes", "ArrayPrototypePush", "push", "IntlDateTimeFormat", "Intl", "DateTimeFormat", "MathMin", "Math", "min", "MathMax", "max", "MathAbs", "abs", "MathFloor", "floor", "MathSign", "sign", "MathTrunc", "trunc", "NumberIsNaN", "Number", "isNaN", "NumberIsFinite", "isFinite", "NumberCtor", "StringCtor", "String", "NumberMaxSafeInteger", "MAX_SAFE_INTEGER", "ObjectCreate", "ObjectGetOwnPropertyDescriptor", "ReflectApply", "Reflect", "apply", "ReflectOwnKeys", "ownKeys", "ZERO", "JSBI", "BigInt", "ONE", "SIXTY", "TWENTY_FOUR", "THOUSAND", "MILLION", "BILLION", "NEGATIVE_ONE", "HOUR_NANOS", "multiply", "MINUTE_NANOS", "DAY_NANOS", "NS_MIN", "NS_MAX", "YEAR_MIN", "YEAR_MAX", "BEFORE_FIRST_OFFSET_TRANSITION", "ABOUT_TEN_YEARS_NANOS", "ABOUT_ONE_YEAR_NANOS", "TWO_WEEKS_NANOS", "BUILTIN_CALENDAR_IDS", "isZero", "equal", "GetMethod", "obj", "methodName", "result", "Call", "target", "thisArgument", "argumentsList", "args", "arguments", "length", "IsObject", "ToNumber", "ToIntegerOrInfinity", "number", "integer", "IsIntegralNumber", "argument", "absValue", "ToString", "ToIntegerWithTruncation", "RangeError", "ToPositiveIntegerWithTruncation", "valueParam", "property", "ToIntegerIfIntegral", "divmod", "x", "y", "quotient", "divide", "remainder", "isNegativeJSBI", "lessThan", "signJSBI", "BUILTIN_CASTS", "Map", "BUILTIN_DEFAULTS", "SINGULAR_PLURAL_UNITS", "SINGULAR_FOR", "map", "e", "PLURAL_FOR", "p", "s", "UNITS_DESCENDING", "DURATION_FIELDS", "from", "keys", "sort", "IntlDateTimeFormatEnUsCache", "getIntlDateTimeFormatEnUsForTimeZone", "timeZoneIdentifier", "instance", "timeZone", "hour12", "era", "year", "month", "day", "hour", "minute", "second", "ToObject", "CopyDataProperties", "excludedKeys", "excludedValues", "nextKey", "some", "is", "propertyIsEnumerable", "call", "propValue", "IsTemporalInstant", "item", "IsTemporalTimeZone", "IsTemporalCalendar", "IsTemporalDuration", "IsTemporalDate", "IsTemporalTime", "IsTemporalDateTime", "IsTemporalYearMonth", "IsTemporalMonthDay", "IsTemporalZonedDateTime", "RejectTemporalLikeObject", "calendar", "ParseTemporalTimeZone", "stringIdent", "ianaName", "z", "PARSE.timeZoneID", "test", "ParseISODateTime", "GetCanonicalTimeZoneIdentifier", "FormatTimeZoneOffsetString", "ParseTimeZoneOffsetString", "MaybeFormatCalendarAnnotation", "showCalendar", "FormatCalendarAnnotation", "ToTemporalCalendarIdentifier", "isoString", "match", "PARSE.zoneddatetime", "exec", "yearString", "slice", "hasTime", "millisecond", "microsecond", "nanosecond", "offsetSign", "offsetHours", "offsetMinutes", "offsetSeconds", "offsetFraction", "endsWith", "annotations", "critical", "matchAll", "PARSE.annotation", "RejectDateTime", "ParseTemporalYearMonthString", "PARSE.yearmonth", "referenceISODay", "ParseTemporalMonthDayString", "PARSE.monthday", "referenceISOYear", "ParseTemporalInstant", "offsetNs", "BalanceISODateTime", "epochNs", "GetUTCEpochNanoseconds", "RegulateISODate", "yearParam", "monthParam", "dayParam", "overflow", "RejectISODate", "ConstrainISODate", "RegulateTime", "hourParam", "minuteParam", "secondParam", "millisecondParam", "microsecondParam", "nanosecondParam", "RejectTime", "ConstrainToRange", "ToTemporalDurationRecord", "PARSE.duration", "element", "years", "months", "weeks", "days", "hours", "fHours", "minutesStr", "fMinutes", "secondsStr", "fSeconds", "minutes", "seconds", "excessNanoseconds", "nanoseconds", "microseconds", "milliseconds", "RejectDuration", "partial", "temporalDurationLike", "undefined", "any", "ToTemporalOverflow", "options", "GetOption", "ToTemporalDisambiguation", "ToTemporalRoundingMode", "fallback", "ToTemporalOffset", "ToCalendarNameOption", "ToTemporalRoundingIncrement", "increment", "roundingIncrement", "integerIncrement", "ValidateTemporalRoundingIncrement", "dividend", "inclusive", "maximum", "ToFractionalSecondDigits", "normalizedOptions", "digitsValue", "fractionalSecondDigits", "digitCount", "ToSecondsStringPrecisionRecord", "smallestUnit", "precision", "unit", "REQUIRED", "GetTemporalUnit", "unitGroup", "requiredOrDefault", "extraValues", "allowedSingular", "singular", "category", "defaultVal", "allowedValues", "plural", "retval", "has", "ToRelativeTemporalObject", "relativeTo", "offsetBehaviour", "matchMinutes", "TemporalDateTimeToDate", "GetTemporalCalendarSlotValueWithISODefault", "fieldNames", "CalendarFields", "fields", "PrepareTemporalFields", "dateOptions", "InterpretTemporalDateTimeFields", "ToTemporalTimeZoneSlotValue", "IsBuiltinCalendar", "ASCIILowercase", "CreateTemporalDate", "CreateTemporalZonedDateTime", "InterpretISODateTimeOffset", "DefaultTemporalLargestUnit", "v", "LargerOfTwoTemporalUnits", "unit1", "unit2", "indexOf", "bag", "requiredFields", "emptySourceErrorMessage", "ToTemporalTimeRecord", "completeness", "field", "valueDesc", "ToTemporalDate", "itemParam", "GetPlainDateTimeFor", "CalendarDateFromFields", "date", "ToTemporalDateTime", "CreateTemporalDateTime", "ToTemporalDuration", "ToTemporalInstant", "ns", "ToTemporalMonthDay", "calendarAbsent", "calendarFromItem", "ToTemporalCalendarSlotValue", "monthCode", "CalendarMonthDayFromFields", "CreateTemporalMonthDay", "ToTemporalTime", "PARSE.time", "ToTemporalYearMonth", "CalendarYearMonthFromFields", "CreateTemporalYearMonth", "disambiguation", "offsetOpt", "matchMinute", "dt", "GetInstantFor", "subtract", "possibleInstants", "GetPossibleInstantsFor", "candidate", "candidateOffset", "GetOffsetNanosecondsFor", "roundedCandidateOffset", "toNumber", "RoundNumberToIncrement", "offsetStr", "timeZoneString", "toString", "DisambiguatePossibleInstants", "ToTemporalZonedDateTime", "CreateTemporalDateSlots", "isoYear", "isoMonth", "isoDay", "RejectDateRange", "TemporalPlainDate", "CreateTemporalDateTimeSlots", "h", "ms", "I", "RejectDateTimeRange", "TemporalPlainDateTime", "CreateTemporalMonthDaySlots", "TemporalPlainMonthDay", "CreateTemporalYearMonthSlots", "RejectToRange", "TemporalPlainYearMonth", "CreateTemporalZonedDateTimeSlots", "epochNanoseconds", "ValidateEpochNanoseconds", "instant", "TemporalZonedDateTime", "fieldNamesParam", "calendarObj", "CalendarMergeFields", "additionalFields", "CalendarDateAdd", "dateAddParam", "dateAdd", "CalendarDateUntil", "otherDate", "dateUntilParam", "dateUntil", "CalendarYear", "dateLike", "CalendarMonth", "CalendarMonthCode", "CalendarDay", "CalendarEra", "CalendarEraYear", "CalendarDayOfWeek", "CalendarDayOfYear", "CalendarWeekOfYear", "CalendarYearOfWeek", "CalendarDaysInWeek", "CalendarDaysInMonth", "CalendarDaysInYear", "CalendarMonthsInYear", "CalendarInLeapYear", "calendarLike", "object", "identifier", "slotValue", "ToTemporalCalendarObject", "CalendarEquals", "one", "two", "ThrowIfCalendarsNotEqual", "errorMessageAction", "cal1", "cal2", "ConsolidateCalendars", "sOne", "sTwo", "dateFromFieldsParam", "temporalTimeZoneLike", "ToTemporalTimeZoneIdentifier", "ToTemporalTimeZoneObject", "TimeZoneEquals", "dateTime", "TemporalDateTimeToTime", "getOffsetNanosecondsForParam", "timeZoneObject", "GetOffsetStringFor", "GetISOPartsFromEpoch", "Instant", "numInstants", "utcns", "dayBefore", "dayAfter", "add", "offsetBefore", "PlainDateTime", "earlier", "AddDateTime", "later", "possible", "getPossibleInstantsForParam", "ISOYearString", "ISODateTimePartString", "part", "FormatSecondsStringPart", "secs", "fractionNumber", "padStart", "TemporalInstantToString", "outputTimeZone", "FormatISOTimeZoneOffsetString", "TemporalDurationToString", "formatNumber", "num", "DurationSign", "roundingMode", "RoundDuration", "dateParts", "timeParts", "secondParts", "nsBigInt", "S", "msBigInt", "secondsBigInt", "total", "TotalDurationNanoseconds", "decimalPart", "unshift", "TemporalDateToString", "TemporalDateTimeToString", "RoundISODateTime", "TemporalMonthDayToString", "monthDay", "resultString", "calendarID", "calendarString", "TemporalYearMonthToString", "yearMonth", "TemporalZonedDateTimeToString", "zdt", "showTimeZone", "showOffset", "RoundInstant", "tz", "IsTimeZoneOffsetString", "string", "OFFSET", "resolvedOptions", "GetNamedTimeZoneOffsetNanoseconds", "GetNamedTimeZoneDateTimeParts", "reducedYear", "yearCycles", "nsIn400YearCycle", "reducedUTC", "utc", "offsetNanosecondsParam", "offsetNanoseconds", "hourString", "minuteString", "secondString", "post", "legacyDate", "Date", "setUTCHours", "setUTCFullYear", "getTime", "greaterThan", "epochMilliseconds", "nanos", "getUTCFullYear", "getUTCMonth", "getUTCDate", "getUTCHours", "getUTCMinutes", "getUTCSeconds", "getUTCMilliseconds", "datetime", "format", "parts", "split", "toUpperCase", "maxJSBI", "afterLatestPossibleTzdbRuleChange", "SystemUTCEpochNanoSeconds", "GetNamedTimeZoneNextTransition", "oneYearLater", "uppercap", "leftNanos", "leftOffsetNs", "rightNanos", "rightOffsetNs", "bisect", "GetNamedTimeZonePreviousTransition", "afterLatestRule", "isFarFuture", "lowercap", "lastPrecomputed", "newTimeToCheck", "LeapYear", "ISODaysInMonth", "standard", "leapyear", "DayOfWeek", "m", "Y", "c", "dow", "DayOfYear", "WeekOfYear", "doy", "doj", "week", "mon", "w", "d", "l", "BalanceISOYearMonth", "BalanceISODate", "daysIn400YearCycle", "nCycles", "daysInYear", "testYear", "deltaDays", "BalanceTime", "NonNegativeBigIntDivmod", "daysParam", "hoursParam", "minutesParam", "secondsParam", "millisecondsParam", "microsecondsParam", "nanosecondsParam", "offsetShift", "NanosecondsToDays", "TemporalInstant", "dayLengthNs", "startNs", "start", "endNs", "end", "dtStart", "dtEnd", "daysNumber", "DifferenceISODateTime", "intermediateNs", "AddZonedDateTime", "daysBigInt", "isOverflow", "relativeInstant", "oneDayFartherNs", "relativeNs", "greaterThanOrEqual", "BalanceDuration", "largestUnit", "BalancePossiblyInfiniteDuration", "nanosecondsBigInt", "microsecondsBigInt", "millisecondsBigInt", "minutesBigInt", "hoursBigInt", "UnbalanceDurationRelative", "yearsParam", "monthsParam", "weeksParam", "relativeToParam", "TemporalDuration", "signBI", "oneYear", "oneMonth", "oneWeek", "newRelativeTo", "untilOptions", "untilResult", "oneYearMonths", "oneYearDays", "MoveRelativeDate", "oneMonthDays", "oneWeekDays", "CalculateOffsetShift", "after", "CreateNegatedTemporalDuration", "propSign", "DifferenceISODate", "y1", "m1", "d1", "y2", "m2", "d2", "CompareISODate", "mid", "AddISODate", "midSign", "larger", "smaller", "DifferenceTime", "h1", "min1", "s1", "ms1", "ns1", "h2", "min2", "s2", "ms2", "ns2", "DifferenceInstant", "diff", "y1Param", "mon1Param", "d1Param", "mon2", "f", "mon1", "timeSign", "date1", "date2", "dateLargestUnit", "CopyOptions", "DifferenceZonedDateTime", "nsDiff", "timeRemainderNs", "intermediate", "GetDifferenceSettings", "op", "group", "disallowed", "fallbackSmallest", "smallestLargestDefaultUnit", "ALLOWED_UNITS", "reduce", "allowed", "unitInfo", "defaultLargestUnit", "DifferenceTemporalInstant", "operation", "otherParam", "other", "settings", "onens", "twons", "DifferenceTemporalPlainDate", "plainDate", "DifferenceTemporalPlainDateTime", "plainDateTime", "DifferenceTemporalPlainTime", "plainTime", "DifferenceTemporalPlainYearMonth", "thisFields", "thisDate", "otherFields", "DifferenceTemporalZonedDateTime", "zonedDateTime", "AdjustRoundedDurationDays", "AddTime", "AddDuration", "w1", "w2", "G", "dateDuration1", "dateDuration2", "differenceOptions", "AddInstant", "i", "sum", "addedDate", "dtIntermediate", "AddDurationToOrSubtractDurationFromDuration", "optionsParam", "GetOptionsObject", "AddDurationToOrSubtractDurationFromInstant", "durationLike", "disallowedProperties", "record", "AddDurationToOrSubtractDurationFromPlainDateTime", "AddDurationToOrSubtractDurationFromPlainTime", "temporalTime", "AddDurationToOrSubtractDurationFromPlainYearMonth", "fieldsCopy", "startDate", "Duration", "nextMonth", "endOfMonth", "durationToAdd", "optionsCopy", "AddDurationToOrSubtractDurationFromZonedDateTime", "quantity", "mode", "tiebreaker", "tie", "expandIsNearer", "wholeDays", "roundedRemainder", "nsPerTimeUnit", "RoundTime", "nsPerUnit", "rounded", "DaysUntil", "MoveRelativeZonedDateTime", "direction", "dayStart", "dayEnd", "zdtRelative", "dayLength", "yearsDuration", "yearsLater", "yearsMonthsWeeksLater", "wholeDaysLater", "yearsPassed", "oldRelativeTo", "divisor", "BigIntDivideToNumber", "yearsMonths", "yearsMonthsLater", "allNanoseconds", "ComparisonResult", "BigIntFloorDiv", "left", "right", "ToBigIntExternal", "arg", "jsbiBI", "ToBigInt", "prim", "toPrimFn", "toPrimitive", "now", "DefaultTimeZone", "CreateOnePropObject", "propName", "str", "replace", "code", "charCodeAt", "fromCharCode", "PARSE.offset", "getState", "leftParam", "rightParam", "lstateParam", "rstateParam", "lstate", "rstate", "middle", "mstate", "DATE", "YM", "MD", "TIME", "DATETIME", "INST", "ORIGINAL", "TZ_RESOLVED", "CAL_ID", "LOCALE", "OPTIONS", "descriptor", "ObjectAssign", "assign", "ObjectHasOwnProperty", "hasOwnProperty", "getPropLazy", "val", "DateTimeFormatImpl", "locale", "this", "hasOptions", "original", "ro", "clonedResolved", "dateAmend", "yearMonthAmend", "monthDayAmend", "timeAmend", "datetimeAmend", "instantAmend", "supportedLocalesOf", "locales", "propertyDescriptors", "rest", "formatter", "extractOverrides", "formatRange", "a", "b", "isTemporalObject", "sameTemporalType", "aa", "aformatter", "bb", "bformatter", "formatToParts", "formatRangeToParts", "amend", "amended", "opt", "weekday", "timeZoneName", "dateStyle", "hasTimeOptions", "dayPeriod", "timeStyle", "hasDateOptions", "ES.IsTemporalDate", "ES.IsTemporalTime", "ES.IsTemporalDateTime", "ES.IsTemporalZonedDateTime", "ES.IsTemporalYearMonth", "ES.IsTemporalMonthDay", "ES.IsTemporalInstant", "temporalObj", "main", "DateTime", "ES.GetInstantFor", "ES.ToTemporalCalendarIdentifier", "ut", "ht", "constructor", "ES.ToBigInt", "ES.ValidateEpochNanoseconds", "epochSeconds", "ES.BigIntFloorDiv", "epochMicroseconds", "ES.ToBigIntExternal", "ES.AddDurationToOrSubtractDurationFromInstant", "until", "ES.DifferenceTemporalInstant", "since", "round", "roundToParam", "roundTo", "ES.CreateOnePropObject", "ES.GetOptionsObject", "ES.ToTemporalRoundingIncrement", "ES.ToTemporalRoundingMode", "ES.GetTemporalUnit", "ES.REQUIRED", "ES.ValidateTemporalRoundingIncrement", "roundedNs", "ES.RoundInstant", "equals", "ES.ToTemporalInstant", "digits", "ES.ToFractionalSecondDigits", "ES.ToTemporalTimeZoneSlotValue", "ES.ToSecondsStringPrecisionRecord", "ES.TemporalInstantToString", "toJSON", "toLocaleString", "valueOf", "toZonedDateTime", "ES.IsObject", "ES.ToTemporalCalendarSlotValue", "ES.CreateTemporalZonedDateTime", "toZonedDateTimeISO", "timeZoneParam", "static", "epochSecondsParam", "ES.ToNumber", "epochMillisecondsParam", "epochMicrosecondsParam", "epochNanosecondsParam", "oneParam", "twoParam", "oneNs", "twoNs", "ArraySort", "ObjectEntries", "entries", "OriginalSet", "Set", "SetPrototypeAdd", "SetPrototypeValues", "values", "impl", "Calendar", "idParam", "ES.ToString", "ES.IsBuiltinCalendar", "ES.ASCIILowercase", "ES.IsTemporalCalendar", "dateFromFields", "yearMonthFromFields", "monthDayFromFields", "fieldsArray", "delete", "mergeFields", "fieldsParam", "additionalFieldsParam", "ES.ToObject", "ES.CopyDataProperties", "additionalFieldsCopy", "additionalKeys", "overriddenKeys", "fieldKeysToIgnore", "merged", "fieldsKeys", "ES.Call", "dateParam", "durationParam", "ES.ToTemporalDate", "ES.ToTemporalDuration", "ES.ToTemporalOverflow", "ES.BalanceDuration", "eraYear", "dayOfWeek", "dayOfYear", "weekOfYear", "yearOfWeek", "daysInWeek", "daysInMonth", "monthsInYear", "inLeapYear", "ES.ToTemporalCalendarObject", "monthCodeNumberPart", "startsWith", "buildMonthCode", "leap", "resolveNonLunisolarMonth", "calendarDate", "monthsPerYear", "ES.RejectToRange", "ES.ConstrainToRange", "numberPart", "calendarSlotValue", "ES.PrepareTemporalFields", "ES.RegulateISODate", "ES.CreateTemporalDate", "ES.CreateTemporalYearMonth", "useYear", "ES.CreateTemporalMonthDay", "ix", "ES.AddISODate", "ES.DifferenceISODate", "ES.DayOfWeek", "ES.DayOfYear", "ES.WeekOfYear", "ES.ISODaysInMonth", "ES.LeapYear", "OneObjectCache", "cacheToClone", "calls", "hits", "misses", "performance", "entry", "MAX_CACHE_ENTRIES", "report", "setObject", "objectMap", "cache", "toUtcIsoDateString", "ES.ISOYearString", "ES.ISODateTimePartString", "simpleDateDiff", "HelperBase", "eraLength", "hasEra", "erasBeginMidYear", "getFormatter", "isoToCalendarDate", "isoDate", "JSON", "stringify", "func", "cached", "dateTimeFormat", "type", "matches", "monthExtra", "normalize", "toLowerCase", "reviseIntlEra", "checkIcuBugs", "adjustCalendarDate", "forEach", "keyReverse", "validateCalendarDate", "constantEra", "calendarDateParam", "fromLegacyDate", "calendarType", "largestMonth", "regulateMonthDayNaive", "maximumMonthLength", "calendarToIsoDate", "originalDate", "keyOriginal", "isoEstimate", "estimateIsoDate", "calculateSameMonthResult", "diffDays", "testIsoEstimate", "addDaysIso", "minimumMonthLength", "testCalendarDate", "roundtripEstimate", "diffTotalDaysEstimate", "compareCalendarDates", "oldRoundtripEstimate", "oldSign", "temporalToCalendarDate", "date1Param", "date2Param", "ES.ComparisonResult", "regulateDate", "addDaysCalendar", "addedIso", "addMonthsCalendar", "absMonths", "oldCalendarDate", "daysInPreviousMonth", "monthsInOldYear", "addCalendar", "addedYears", "addedMonths", "initialDays", "untilCalendar", "calendarOne", "calendarTwo", "calendarDaysUntil", "totalDays", "diffYears", "diffInYearSign", "current", "next", "addedIsoDate", "addedCalendarDate", "endOfMonthIso", "previousMonthDate", "previousMonth", "lastDayOfPreviousMonthIso", "startOfCalendarYear", "startOfCalendarMonth", "oneIso", "twoIso", "isoDaysUntil", "closestCalendar", "closestIso", "calendarOfStartDateIso", "calendarYear", "roundTripCalendarDate", "HebrewHelper", "Tishri", "regular", "Heshvan", "Kislev", "Tevet", "Shevat", "Adar", "Nisan", "Iyar", "Sivan", "Tamuz", "Av", "Elul", "minMaxMonthLength", "minOrMax", "getMonthCode", "monthInfo", "find", "IslamicBaseHelper", "DAYS_PER_ISLAMIC_YEAR", "DAYS_PER_ISO_YEAR", "IslamicHelper", "IslamicUmalquraHelper", "IslamicTblaHelper", "IslamicCivilHelper", "IslamicRgsaHelper", "IslamicCcHelper", "PersianHelper", "IndianHelper", "nextYear", "vulnerableToBceBug", "toLocaleDateString", "isGregorianLeapYear", "getMonthInfo", "GregorianBaseHelper", "originalEras", "super", "v8IsVulnerableToJulianBug", "calendarIsVulnerableToJulianBug", "eras", "anchorEra", "erasParam", "reverseOf", "filter", "isAnchor", "anchorEpoch", "hasYearZero", "reversedEra", "isoEpoch", "e1", "e2", "lastEraReversed", "genericName", "completeEraYear", "checkField", "currentValue", "eraFromYear", "adjustedCalendarDate", "matchingEra", "ES.CompareISODate", "OrthodoxBaseHelper", "EthioaaHelper", "CopticHelper", "EthiopicHelper", "RocHelper", "BuddhistHelper", "GregoryHelper", "JapaneseHelper", "ChineseBaseHelper", "getMonthList", "getCalendarDate", "daysPastFeb1", "isoStringFeb1", "setUTCDate", "newYearGuess", "calendarMonthString", "tv", "calendarDay", "calendarYearToVerify", "isoDaysDelta", "oldCalendarDay", "oldMonthString", "monthIndex", "done", "monthString", "withoutML", "monthEntries", "matchingMonthEntry", "ChineseHelper", "DangiHelper", "NonIsoCalendar", "helper", "getCacheForObject", "added", "isoAdded", "newTemporalObject", "cacheOne", "cacheTwo", "startOfYear", "startOfMonthCalendar", "startOfNextMonthCalendar", "startOfYearCalendar", "startOfNextYearCalendar", "Helper", "PlainDate", "isoYearParam", "isoMonthParam", "isoDayParam", "calendarParam", "ES.CreateTemporalDateSlots", "ES.ToIntegerWithTruncation", "calendarId", "ES.CalendarEra", "ES.CalendarEraYear", "ES.CalendarYear", "ES.CalendarMonth", "ES.CalendarMonthCode", "ES.CalendarDay", "ES.CalendarDayOfWeek", "ES.CalendarDayOfYear", "ES.CalendarWeekOfYear", "ES.CalendarYearOfWeek", "ES.CalendarDaysInWeek", "ES.CalendarDaysInMonth", "ES.CalendarDaysInYear", "ES.CalendarMonthsInYear", "ES.CalendarInLeapYear", "with", "temporalDateLike", "ES.RejectTemporalLikeObject", "ES.CalendarFields", "ES.CalendarMergeFields", "ES.CalendarDateFromFields", "withCalendar", "ES.CalendarDateAdd", "ES.CreateNegatedTemporalDuration", "ES.DifferenceTemporalPlainDate", "slot", "ES.CalendarEquals", "ES.TemporalDateToString", "ES.ToCalendarNameOption", "toPlainDateTime", "temporalTimeParam", "ES.CreateTemporalDateTime", "ES.ToTemporalTime", "ES.IsTemporalTimeZone", "timeZoneLike", "toPlainYearMonth", "ES.CalendarYearMonthFromFields", "toPlainMonthDay", "ES.CalendarMonthDayFromFields", "getISOFields", "getCalendar", "ES.CreateTemporalDateTimeSlots", "temporalDateTimeLike", "ES.InterpretTemporalDateTimeFields", "withPlainTime", "withPlainDate", "temporalDateParam", "temporalDate", "ES.ConsolidateCalendars", "ES.AddDurationToOrSubtractDurationFromPlainDateTime", "ES.DifferenceTemporalPlainDateTime", "ES.RoundISODateTime", "ES.ToTemporalDateTime", "ES.TemporalDateTimeToString", "ES.ToTemporalDisambiguation", "toPlainDate", "ES.TemporalDateTimeToDate", "toPlainTime", "ES.TemporalDateTimeToTime", "isoHour", "isoMicrosecond", "isoMillisecond", "isoMinute", "isoNanosecond", "isoSecond", "val1", "val2", "ES.ToIntegerIfIntegral", "ES.RejectDuration", "ES.IsTemporalDuration", "ES.DurationSign", "blank", "partialDuration", "negated", "ES.AddDurationToOrSubtractDurationFromDuration", "ES.DefaultTemporalLargestUnit", "ES.ToRelativeTemporalObject", "smallestUnitPresent", "ES.LargerOfTwoTemporalUnits", "largestUnitPresent", "ES.UnbalanceDurationRelative", "ES.RoundDuration", "ES.AdjustRoundedDurationDays", "ES.MoveRelativeZonedDateTime", "balanceResult", "ES.BalancePossiblyInfiniteDuration", "Infinity", "ES.TemporalDurationToString", "DurationFormat", "console", "warn", "B", "shift1", "ES.CalculateOffsetShift", "shift2", "totalNs1", "ES.TotalDurationNanoseconds", "totalNs2", "PlainMonthDay", "referenceISOYearParam", "ES.CreateTemporalMonthDaySlots", "temporalMonthDayLike", "ES.ToTemporalMonthDay", "ES.TemporalMonthDayToString", "receiverFieldNames", "inputFieldNames", "mergedFields", "ES.SystemUTCEpochNanoSeconds", "ES.DefaultTimeZone", "tZ", "ES.GetPlainDateTimeFor", "plainDateTimeISO", "Now", "plainDateISO", "plainTimeISO", "timeZoneId", "zonedDateTimeISO", "TemporalTimeToString", "ES.RoundTime", "ES.FormatSecondsStringPart", "PlainTime", "isoHourParam", "isoMinuteParam", "isoSecondParam", "isoMillisecondParam", "isoMicrosecondParam", "isoNanosecondParam", "ES.RejectTime", "temporalTimeLike", "partialTime", "ES.ToTemporalTimeRecord", "ES.RegulateTime", "ES.AddDurationToOrSubtractDurationFromPlainTime", "ES.DifferenceTemporalPlainTime", "TimeZone", "timeZoneIdentifierParam", "ES.GetCanonicalTimeZoneIdentifier", "getOffsetNanosecondsFor", "instantParam", "ES.IsTimeZoneOffsetString", "ES.ParseTimeZoneOffsetString", "ES.GetNamedTimeZoneOffsetNanoseconds", "getOffsetStringFor", "ES.GetOffsetStringFor", "getPlainDateTimeFor", "getInstantFor", "dateTimeParam", "getPossibleInstantsFor", "ES.GetUTCEpochNanoseconds", "nsEarlier", "nsLater", "earliest", "latest", "getNextTransition", "startingPointParam", "startingPoint", "ES.GetNamedTimeZoneNextTransition", "getPreviousTransition", "ES.GetNamedTimeZonePreviousTransition", "ES.ToTemporalTimeZoneObject", "PlainYearMonth", "referenceISODayParam", "ES.CreateTemporalYearMonthSlots", "temporalYearMonthLike", "ES.AddDurationToOrSubtractDurationFromPlainYearMonth", "ES.DifferenceTemporalPlainYearMonth", "ES.ToTemporalYearMonth", "ES.TemporalYearMonthToString", "customResolvedOptions", "ZonedDateTime", "ES.CreateTemporalZonedDateTimeSlots", "ES.ToTemporalTimeZoneIdentifier", "hoursInDay", "today", "tomorrowFields", "tomorrow", "todayNs", "tomorrowNs", "ES.BigIntDivideToNumber", "ES.GetOffsetNanosecondsFor", "temporalZonedDateTimeLike", "ES.ToTemporalOffset", "ES.InterpretISODateTimeOffset", "thisDt", "withTimeZone", "ES.AddDurationToOrSubtractDurationFromZonedDateTime", "ES.DifferenceTemporalZonedDateTime", "instantStart", "ES.AddZonedDateTime", "lessThanOrEqual", "ES.ToTemporalZonedDateTime", "ES.TimeZoneEquals", "ES.TemporalZonedDateTimeToString", "localeCalendarIdentifier", "calendarIdentifier", "startOfDay", "toInstant", "getTimeZone", "Pt", "Et", "types", "Temporal.Instant", "Temporal.Calendar", "Temporal.PlainDate", "Temporal.PlainDateTime", "Temporal.Duration", "Temporal.PlainMonthDay", "Temporal.PlainTime", "Temporal.TimeZone", "Temporal.PlainYearMonth", "Temporal.ZonedDateTime", "type", "descriptor", "Object", "getOwnPropertyDescriptor", "configurable", "enumerable", "writable", "defineProperty", "sleep", "durationInMillisecond", "resolve", "getCurrentTimeInHighPrecision", "Pt", "createLevelDatabase", "location", "options", "Level", "LevelWrapper", "config", "db", "sleep", "name", "key", "_a", "executeUnlessAborted", "error", "__await", "_d", "__asyncValues", "_e", "_b", "iteratorOptions", "entry", "value", "_c", "_key", "operations", "range", "root", "prefix", "maxKey", "parent", "BlockstoreLevel", "config", "db", "createLevelDatabase", "LevelWrapper", "name", "key", "val", "options", "CID", "source", "source_1", "__asyncValues", "source_1_1", "__await", "entry", "source_2", "source_2_1", "li", "li_1", "li_1_1", "value", "source_3", "source_3_1", "_b", "_a", "init_shim", "import_err_code", "init_shim", "isAsyncIterable", "thing", "last", "source", "res", "entry", "src_default", "init_shim", "import_err_code", "init_shim", "import_err_code", "resolve", "cid", "name", "path", "toResolve", "depth", "blockstore", "options", "block", "object", "decode", "subObject", "subPath", "prop", "subObjectCid", "CID", "errCode", "dag_cbor_default", "init_shim", "import_err_code", "init_shim", "extractDataFromBlock", "block", "blockStart", "requestedStart", "requestedEnd", "blockLength", "blockEnd", "extract_data_from_block_default", "init_shim", "import_err_code", "validateOffsetAndLength", "size", "offset", "length", "fileSize", "start", "end", "errCode", "validate_offset_and_length_default", "rawContent", "node", "contentGenerator", "options", "start", "end", "validate_offset_and_length_default", "buf", "extract_data_from_block_default", "CustomProgressEvent", "resolve", "cid", "name", "path", "toResolve", "depth", "blockstore", "errCode", "decode", "identity_default", "init_shim", "import_err_code", "rawContent", "node", "contentGenerator", "options", "start", "end", "validate_offset_and_length_default", "buf", "extract_data_from_block_default", "CustomProgressEvent", "resolve", "cid", "name", "path", "toResolve", "depth", "blockstore", "errCode", "block", "raw_default", "init_shim", "import_err_code", "init_shim", "hashFn", "buf", "murmur3128", "addLinksToHamtBucket", "links", "bucket", "rootBucket", "link", "pos", "Bucket", "toPrefix", "position", "toBucketPath", "path", "findShardCid", "node", "name", "blockstore", "context", "options", "createHAMT", "prefix", "bucketPath", "entryPrefix", "entryName", "block", "decode", "find_cid_in_shard_default", "init_shim", "init_shim", "init_shim", "peekable", "iterable", "iterator", "symbol", "queue", "value", "src_default", "isAsyncIterable", "thing", "filter", "source", "fn", "entry", "peekable", "src_default", "value", "done", "res", "func", "init_shim", "isAsyncIterable", "thing", "map", "source", "func", "val", "peekable", "src_default", "value", "done", "res", "fn", "init_shim", "init_shim", "pDefer", "deferred", "resolve", "reject", "CustomEvent", "parallel", "source", "options", "concurrency", "ordered", "emitter", "ops", "slotAvailable", "pDefer", "resultAvailable", "sourceFinished", "sourceErr", "opErred", "task", "op", "result", "err", "valuesAvailable", "yieldOrderedValues", "yieldUnOrderedValues", "i", "init_shim", "init_shim", "init_shim", "FixedFIFO", "hwm", "data", "last", "FIFO", "options", "obj", "val", "prev", "next", "pushable", "options", "_pushable", "buffer", "next", "_pushable", "getNext", "options", "onEnd", "buffer", "FIFO", "pushable", "onNext", "ended", "waitNext", "resolve", "reject", "next", "err", "bufferNext", "bufferError", "push", "value", "end", "_return", "_throw", "init_shim", "isAsyncIterable", "thing", "merge", "sources", "syncSources", "source", "output", "pushable", "item", "err", "src_default", "pipe", "first", "rest", "isDuplex", "duplex", "isIterable", "isAsyncIterable", "source", "fns", "duplexPipelineFn", "rawPipe", "res", "obj", "p", "stream", "pushable", "err", "sourceWrap", "src_default", "directoryContent", "cid", "node", "unixfs", "path", "resolve", "depth", "blockstore", "yieldDirectoryContent", "options", "offset", "length", "links", "CustomProgressEvent", "pipe", "source", "src_default", "link", "linkName", "linkPath", "parallel", "entry", "directory_default", "init_shim", "import_err_code", "init_shim", "import_eventemitter3", "init_shim", "TimeoutError", "message", "AbortError", "getDOMException", "errorMessage", "getAbortedReason", "signal", "reason", "pTimeout", "promise", "milliseconds", "fallback", "options", "timer", "cancelablePromise", "resolve", "reject", "error", "timeoutError", "init_shim", "init_shim", "lowerBound", "array", "value", "comparator", "first", "count", "step", "it", "__classPrivateFieldGet", "receiver", "state", "kind", "f", "_PriorityQueue_queue", "PriorityQueue", "run", "options", "element", "index", "lowerBound", "a", "b", "item", "__classPrivateFieldSet", "receiver", "state", "value", "kind", "f", "__classPrivateFieldGet", "_PQueue_instances", "_PQueue_carryoverConcurrencyCount", "_PQueue_isIntervalIgnored", "_PQueue_intervalCount", "_PQueue_intervalCap", "_PQueue_interval", "_PQueue_intervalEnd", "_PQueue_intervalId", "_PQueue_timeoutId", "_PQueue_queue", "_PQueue_queueClass", "_PQueue_pending", "_PQueue_concurrency", "_PQueue_isPaused", "_PQueue_throwOnTimeout", "_PQueue_doesIntervalAllowAnother_get", "_PQueue_doesConcurrentAllowAnother_get", "_PQueue_next", "_PQueue_onResumeInterval", "_PQueue_isIntervalPaused_get", "_PQueue_tryToStartAnother", "_PQueue_initializeIntervalIfNeeded", "_PQueue_onInterval", "_PQueue_processQueue", "_PQueue_throwOnAbort", "_PQueue_onEvent", "AbortError", "PQueue", "EventEmitter", "options", "_a", "_b", "_c", "_d", "PriorityQueue", "newConcurrency", "function_", "resolve", "reject", "operation", "pTimeout", "result", "error", "TimeoutError", "functions", "limit", "now", "delay", "canInitializeInterval", "job", "signal", "_resolve", "event", "filter", "listener", "walkDAG", "blockstore", "node", "queue", "streamPosition", "start", "end", "options", "buf", "extract_data_from_block_default", "errCode", "file", "UnixFS", "err", "data", "childOps", "i", "childLink", "childStart", "childEnd", "pipe", "source", "src_default", "op", "block", "parallel", "link", "blockStart", "child", "code", "decode", "childQueue", "PQueue", "error", "CustomProgressEvent", "fileContent", "cid", "unixfs", "path", "resolve", "depth", "yieldFileContent", "fileSize", "validate_offset_and_length_default", "read", "wanted", "pushable", "file_default", "init_shim", "hamtShardedDirectoryContent", "cid", "node", "unixfs", "path", "resolve", "depth", "blockstore", "yieldHamtDirectoryContent", "options", "CustomProgressEvent", "listDirectory", "links", "results", "pipe", "source", "src_default", "link", "name", "result", "block", "decode", "parallel", "entries", "hamt_sharded_directory_default", "findLinkCid", "node", "name", "link", "contentExporters", "file_default", "directory_default", "hamt_sharded_directory_default", "cid", "unixfs", "path", "resolve", "depth", "blockstore", "unixFsResolver", "toResolve", "options", "block", "decode", "next", "errCode", "UnixFS", "err", "linkCid", "find_cid_in_shard_default", "nextName", "nextPath", "content", "unixfs_v1_default", "resolvers", "code", "unixfs_v1_default", "raw_default", "dag_cbor_default", "identity", "identity_default", "resolve", "cid", "name", "path", "toResolve", "depth", "blockstore", "options", "resolver", "errCode", "resolvers_default", "toPathComponents", "path", "cidAndRest", "CID", "cid", "output", "errCode", "walkPath", "blockstore", "options", "toResolve", "name", "entryPath", "startingDepth", "result", "resolvers_default", "exporter", "src_default", "import_readable_stream", "PLACEHOLDER_VALUE", "DataStoreLevel", "config", "createLevelDatabase", "BlockstoreLevel", "tenant", "messageCid", "dataCid", "dataStream", "blockstoreForData", "asyncDataBlocks", "importer", "dataDagRoot", "asyncDataBlocks_1", "__asyncValues", "asyncDataBlocks_1_1", "_c", "_b", "exporter", "contentIterator", "result", "dataSize", "blockstoreForReferenceCounting", "_a", "referenceCountingPartitionName", "dataPartitionName", "init_shim", "textEncoder", "textDecoder", "Encoder", "base64urlString", "base64url", "payloadBytes", "payloadString", "bytes", "content", "obj", "objectString", "init_shim", "init_shim", "P", "N", "Gx", "Gy", "CURVE", "err", "m", "str", "s", "au8", "a", "l", "u8n", "data", "toU8", "len", "h2b", "mod", "b", "isPoint", "p", "Point", "Gpows", "ex", "ey", "ez", "et", "hex", "strict", "d", "normed", "y", "b2n_LE", "y2", "u", "v", "isValid", "x", "uvRatio", "isXOdd", "other", "X1", "Y1", "Z1", "X2", "Y2", "Z2", "X1Z2", "X2Z1", "Y1Z2", "Y2Z1", "I", "A", "B", "C", "D", "x1y1", "E", "G", "F", "H", "X3", "Y3", "T3", "Z3", "T1", "T2", "n", "safe", "wNAF", "f", "scalar", "z", "iz", "invert", "n2b_32LE", "b2h", "padh", "num", "pad", "arr", "j", "h", "concatB", "arrs", "r", "sum", "md", "q", "pow2", "power", "pow_2_252_3", "b2", "b4", "b5", "b10", "b20", "b40", "b80", "b160", "b240", "b250", "RM1", "v3", "v7", "pow", "vx2", "root1", "root2", "useRoot1", "useRoot2", "noRoot", "modL_LE", "hash", "_shaS", "sha512a", "etc", "sha512s", "hash2extK", "hashed", "head", "prefix", "point", "pointBytes", "getExtendedPublicKeyAsync", "priv", "getExtendedPublicKey", "getPublicKeyAsync", "hashFinish", "asynchronous", "res", "sha512a", "sha512s", "_sign", "e", "rBytes", "msg", "P", "s", "r", "modL_LE", "R", "G", "concatB", "hashed", "S", "mod", "N", "au8", "n2b_32LE", "signAsync", "privKey", "m", "toU8", "getExtendedPublicKeyAsync", "_verify", "sig", "msg", "pub", "toU8", "A", "Point", "R", "s", "b2n_LE", "SB", "G", "concatB", "hashed", "k", "modL_LE", "verifyAsync", "m", "p", "hashFinish", "cr", "etc", "b2h", "h2b", "concatB", "mod", "invert", "len", "crypto", "err", "u8n", "messages", "m", "_shaS", "f", "utils", "getExtendedPublicKeyAsync", "getExtendedPublicKey", "w", "p", "G", "W", "precompute", "points", "windows", "b", "i", "wNAF", "n", "comp", "Gpows", "neg", "cnd", "I", "wsize", "mask", "maxNum", "shiftBy", "off", "wbits", "off1", "off2", "cnd1", "cnd2", "validateKey", "jwk", "publicKeyToJwk", "publicKeyBytes", "Encoder", "ed25519", "content", "privateJwk", "__awaiter", "contentHex", "etc", "privateKeyBytes", "privateKeyHex", "signAsync", "signature", "publicJwk", "verifyAsync", "utils", "getPublicKeyAsync", "d", "init_shim", "B256", "P", "N", "Gx", "Gy", "CURVE", "fLen", "crv", "x", "mod", "err", "m", "big", "n", "str", "s", "fe", "ge", "au8", "a", "l", "u8n", "data", "toU8", "len", "h2b", "b", "isPoint", "p", "Point", "Gpows", "px", "py", "pz", "hex", "head", "tail", "slcNum", "y", "sqrt", "isYOdd", "k", "G", "toPriv", "other", "X1", "Y1", "Z1", "X2", "Y2", "Z2", "X1Z2", "X2Z1", "Y1Z2", "Y2Z1", "X3", "Y3", "Z3", "b3", "t0", "t1", "t2", "t3", "t4", "t5", "safe", "I", "wNAF", "f", "d", "R", "u1", "u2", "z", "iz", "inv", "isCompressed", "n2h", "padh", "pad", "b2h", "arr", "j", "h", "b2n", "from", "to", "n2b", "num", "concatB", "arrs", "r", "sum", "md", "u", "v", "q", "e", "moreThanHalfN", "getPublicKey", "privKey", "Signature", "recovery", "rec", "msgh", "bits2int_modN", "radj", "ir", "bits2int", "bytes", "delta", "i2o", "cr", "_hmacSync", "optS", "optV", "prepSig", "priv", "opts", "lowS", "h1i", "h1o", "seed", "ent", "etc", "k2sig", "kBytes", "ik", "normS", "hmacDrbg", "asynchronous", "reset", "_e", "reseed", "gen", "pred", "res", "signAsync", "verify", "sig", "msgh", "pub", "opts", "optV", "lowS", "err", "sig_", "h", "P", "rs", "toU8", "fLen", "Signature", "bits2int_modN", "Point", "r", "s", "moreThanHalfN", "R", "is", "inv", "N", "u1", "mod", "u2", "G", "hashToPrivateKey", "hash", "toU8", "minLen", "fLen", "err", "num", "mod", "b2n", "N", "n2b", "etc", "h2b", "b2h", "concatB", "inv", "key", "msgs", "crypto", "cr", "s", "k", "u8n", "_hmacSync", "len", "utils", "toPriv", "w", "p", "G", "f", "W", "precompute", "points", "windows", "b", "i", "wNAF", "n", "comp", "Gpows", "neg", "cnd", "I", "wsize", "mask", "maxNum", "shiftBy", "off", "wbits", "off1", "off2", "cnd1", "cnd2", "import_secp256k1", "init_shim", "DwnError", "code", "message", "DwnErrorCode", "Secp256k1", "jwk", "DwnError", "DwnErrorCode", "publicKeyBytes", "uncompressedPublicKeyBytes", "publicKeyHex", "etc", "Point", "x", "Encoder", "y", "privateKeyBytes", "publicJwk", "privateJwk", "content", "hashedContent", "sha256", "hashedContentHex", "privateKeyHex", "signAsync", "signature", "verify", "utils", "getPublicKey", "d", "privateKey", "key", "relativePath", "currentPublicKey", "segment", "hash", "currentPrivateKey", "uncompressedPublicKey", "tweakInput", "publicKeyBuffer", "tweakBuffer", "secp256k1Derivation", "privateKeyBuffer", "pathSegments", "signers", "ed25519", "Secp256k1", "GeneralJwsSigner", "jws", "payload", "signatureInputs", "Encoder", "signer", "signatureInput", "privateJwk", "protectedHeader", "signers", "protectedHeaderString", "protectedHeaderBase64UrlString", "signingInputString", "signingInputBytes", "signatureBytes", "signature", "import_isPlainObject", "Jws", "signatureEntry", "kid", "Encoder", "base64UrlPayload", "jwkPublic", "verifier", "signers", "payload", "signatureBytes", "jws", "payloadJson", "isPlainObject", "did", "keyMaterials", "keyMaterial", "init_shim", "lexicographicalCompare", "a", "b", "init_shim", "precompiled_validators_exports", "__export", "Definitions", "EventsGet", "GeneralJwk", "GeneralJws", "HooksWrite", "JwkVerificationMethod", "MessagesGet", "PermissionsDefinitions", "PermissionsGrant", "PermissionsRequest", "ProtocolDefinition", "ProtocolRuleSet", "ProtocolsConfigure", "ProtocolsQuery", "PublicJwk", "RecordsDelete", "RecordsQuery", "RecordsRead", "RecordsWrite", "SnapshotsCreate", "init_shim", "validate10", "schema11", "pattern0", "validate11", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "vErrors", "errors", "_errs1", "key0", "data0", "_errs2", "valid0", "data1", "_errs5", "valid2", "len0", "i0", "data2", "_errs7", "data3", "_errs9", "valid3", "data4", "_errs12", "validate10", "missing0", "_errs3", "missing1", "key1", "_errs6", "schema11", "valid1", "_errs8", "_errs10", "RecordsQuery", "validate14", "schema17", "pattern3", "pattern4", "func2", "validate14", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "vErrors", "errors", "missing0", "_errs1", "key0", "_errs2", "validate11", "valid0", "data1", "_errs3", "missing1", "_errs5", "key1", "data2", "_errs6", "schema17", "valid1", "data3", "_errs8", "data4", "_errs10", "data5", "_errs13", "_errs15", "key2", "_errs16", "valid3", "data7", "_errs18", "data8", "_errs21", "_errs24", "_errs26", "_errs28", "_errs30", "_errs32", "data14", "_errs34", "_errs36", "key3", "data15", "_errs37", "valid6", "data16", "_errs40", "data17", "_errs43", "RecordsWrite", "validate16", "schema23", "schema28", "validate19", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "vErrors", "errors", "_errs0", "_errs2", "valid1", "passing0", "_errs3", "missing0", "err0", "_errs4", "err1", "valid2", "_errs5", "err2", "_errs7", "err3", "_errs9", "err4", "_errs11", "err5", "_valid0", "_errs13", "missing1", "err6", "_errs14", "err7", "valid3", "_errs15", "err8", "_errs17", "err9", "_errs19", "err10", "_errs21", "missing2", "err11", "_errs22", "err12", "valid4", "_errs23", "err13", "_errs25", "err14", "_errs27", "err15", "_errs29", "err16", "_errs31", "err17", "_errs33", "err18", "_errs35", "err19", "_errs37", "err20", "data18", "_errs39", "err21", "_errs41", "missing3", "err22", "_errs42", "err23", "valid5", "_errs43", "err24", "err25", "missing4", "_errs45", "valid6", "_errs47", "data23", "_errs49", "_errs50", "_errs52", "_errs54", "_errs56", "_errs58", "_errs60", "_errs62", "valid0", "_errs64", "_errs65", "_errs66", "valid8", "_errs67", "_errs69", "valid9", "_errs70", "missing5", "err26", "_valid2", "err27", "err28", "err29", "_valid1", "_errs72", "_errs74", "valid11", "_errs75", "missing6", "err30", "_valid3", "err31", "err32", "err33", "_errs77", "_errs79", "valid13", "_errs80", "missing7", "err34", "_valid4", "_errs81", "missing8", "err35", "_errs82", "missing9", "err36", "_errs83", "missing10", "err37", "_errs84", "missing11", "err38", "_errs85", "missing12", "err39", "_errs86", "missing13", "err40", "err41", "_errs87", "err42", "valid14", "data34", "_errs88", "err43", "err44", "err45", "valid7", "pattern13", "validate16", "data0", "_errs6", "_errs8", "_errs10", "data1", "data2", "_errs18", "_errs20", "key0", "validate11", "_errs26", "data7", "key1", "data8", "_errs30", "schema23", "data9", "_errs32", "pattern0", "data10", "len0", "i0", "data11", "key2", "_errs40", "valid12", "data13", "data14", "_errs44", "data15", "_errs46", "data16", "_errs53", "data19", "valid17", "_errs61", "data20", "valid19", "data21", "_errs71", "valid22", "valid21", "_errs73", "valid23", "_errs76", "key3", "func2", "data22", "valid24", "data24", "pattern4", "data26", "_errs90", "_errs92", "data30", "_errs94", "data31", "_errs96", "pattern3", "data32", "_errs99", "_errs102", "_errs104", "_errs107", "EventsGet", "validate21", "schema34", "_errs1", "data3", "Definitions", "validate12", "validate12", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "vErrors", "errors", "GeneralJwk", "validate23", "_errs1", "valid0", "passing0", "_errs2", "missing0", "err0", "_errs3", "err1", "valid1", "_errs4", "err2", "_errs6", "err3", "_errs8", "err4", "_errs10", "err5", "_valid0", "_errs12", "missing1", "err6", "_errs13", "err7", "valid2", "_errs14", "err8", "_errs16", "err9", "_errs18", "err10", "_errs20", "missing2", "err11", "_errs21", "err12", "valid3", "_errs22", "err13", "_errs24", "err14", "_errs26", "err15", "_errs28", "err16", "_errs30", "err17", "_errs32", "err18", "_errs34", "err19", "_errs36", "err20", "data18", "_errs38", "err21", "_errs40", "missing3", "err22", "_errs41", "err23", "valid4", "_errs42", "err24", "err25", "missing4", "_errs44", "valid5", "_errs46", "data23", "_errs48", "schema28", "_errs49", "_errs51", "_errs53", "_errs55", "_errs57", "_errs59", "_errs61", "GeneralJws", "validate11", "HooksWrite", "validate24", "schema36", "key0", "data1", "_errs5", "key1", "data2", "data3", "data4", "pattern3", "data6", "_errs15", "_errs17", "key2", "JwkVerificationMethod", "validate26", "validate26", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "vErrors", "errors", "missing0", "_errs1", "key0", "_errs2", "valid0", "_errs4", "data2", "_errs5", "pattern4", "_errs8", "validate19", "MessagesGet", "validate28", "schema40", "validate11", "data1", "_errs3", "missing1", "key1", "_errs6", "valid1", "data3", "data4", "_errs10", "valid2", "len0", "i0", "_errs12", "PermissionsDefinitions", "validate30", "validate30", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "vErrors", "errors", "PermissionsGrant", "validate31", "schema42", "validate31", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "vErrors", "errors", "missing0", "_errs1", "key0", "_errs2", "validate11", "valid0", "_errs3", "data2", "_errs4", "missing1", "_errs6", "key1", "func2", "schema42", "_errs7", "valid1", "_errs9", "data5", "_errs11", "pattern4", "data6", "_errs14", "data7", "_errs17", "_errs20", "data9", "_errs22", "data10", "_errs24", "data11", "_errs26", "missing2", "_errs29", "key2", "_errs30", "valid6", "_errs32", "data14", "_errs34", "_errs37", "key3", "PermissionsRequest", "validate33", "schema48", "data1", "_errs5", "data3", "_errs8", "_errs10", "_errs12", "data8", "_errs23", "_errs27", "data12", "_errs31", "ProtocolDefinition", "validate35", "pattern25", "schema55", "pattern27", "wrapper0", "validate36", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "vErrors", "errors", "_errs1", "key0", "data0", "_errs2", "valid1", "len0", "i0", "data1", "_errs4", "_errs6", "valid2", "_errs7", "missing0", "err0", "_errs8", "key1", "err1", "data2", "_errs9", "err2", "err3", "valid3", "data3", "_errs11", "err4", "err5", "_valid0", "_errs13", "missing1", "err6", "_errs14", "key2", "err7", "data4", "_errs15", "err8", "err9", "valid4", "_errs17", "err10", "data6", "_errs19", "err11", "err12", "err13", "valid0", "valid5", "key3", "_errs21", "validate35", "ProtocolRuleSet", "ProtocolsConfigure", "validate38", "schema56", "validate11", "_errs3", "_errs5", "_errs10", "pattern3", "ProtocolsQuery", "validate41", "schema58", "data5", "_errs12", "data7", "pattern4", "RecordsRead", "validate43", "schema60", "PublicJwk", "validate19", "SnapshotsCreate", "validate45", "schema61", "validateJsonSchema", "schemaName", "payload", "validateFn", "precompiled_validators_exports", "errorObj", "instancePath", "message", "DwnInterfaceName", "DwnMethodName", "Message", "message", "Jws", "rawMessage", "dwnInterface", "dwnMethod", "schemaLookupKey", "validateJsonSchema", "Cid", "a", "b", "cidA", "cidB", "lexicographicalCompare", "messages", "currentNewestMessage", "descriptor", "signatureInput", "authPayload", "authPayloadStr", "authPayloadBytes", "GeneralJwsSigner", "init_shim", "import_flat", "flatten", "obj", "flattened", "flat", "removeEmptyObjects", "isEmptyObject", "_", "key", "removeUndefinedProperties", "init_shim", "perf", "warned", "PROCESS", "process", "emitWarning", "msg", "type", "code", "fn", "AC", "AS", "_", "warnACPolyfill", "reason", "printACPolyfillWarning", "shouldWarn", "TYPE", "isPosInt", "n", "getUintArray", "max", "ZeroArray", "size", "_constructing", "_Stack", "HeapCls", "__privateSet", "s", "__privateGet", "Stack", "__privateAdd", "LRUCache", "#max", "#maxSize", "#dispose", "#disposeAfter", "#fetchMethod", "#size", "#calculatedSize", "#keyMap", "#keyList", "#valList", "#next", "#prev", "#head", "#tail", "#free", "#disposed", "#sizes", "#starts", "#ttls", "#hasDispose", "#hasFetchMethod", "#hasDisposeAfter", "c", "p", "#isBackgroundFetch", "k", "index", "options", "context", "#backgroundFetch", "#moveToTail", "#indexes", "#rindexes", "#isStale", "ttl", "ttlResolution", "ttlAutopurge", "updateAgeOnGet", "updateAgeOnHas", "allowStale", "dispose", "disposeAfter", "noDisposeOnSet", "noUpdateTTL", "maxSize", "maxEntrySize", "sizeCalculation", "fetchMethod", "noDeleteOnFetchRejection", "noDeleteOnStaleGet", "allowStaleOnFetchRejection", "allowStaleOnFetchAbort", "ignoreFetchAbort", "UintArray", "#initializeSizeTracking", "#initializeTTLTracking", "key", "ttls", "starts", "#setItemTTL", "start", "t", "#updateItemAge", "#statusTTL", "status", "cachedNow", "getNow", "age", "sizes", "#removeItemSize", "#requireSize", "v", "#addItemSize", "#evict", "_i", "_s", "_st", "_k", "_v", "i", "#isValidIndex", "getOptions", "value", "thisp", "deleted", "arr", "entry", "setOptions", "oldVal", "oldValue", "dt", "task", "val", "free", "head", "hasOptions", "peekOptions", "ac", "signal", "fetchOpts", "cb", "updateCache", "aborted", "ignoreAbort", "fetchFail", "bf", "eb", "er", "allowStaleAborted", "noDelete", "pcall", "res", "rej", "fmp", "b", "fetchOptions", "forceRefresh", "stale", "isStale", "staleVal", "fetching", "#connect", "MemoryCache", "timeToLiveInSeconds", "LRUCache", "key", "value", "GeneralJwsVerifier", "jws", "cache", "MemoryCache", "didResolver", "signers", "signatureEntry", "isVerified", "cacheKey", "kid", "Jws", "publicJwk", "cachedValue", "did", "didDocument", "verificationMethods", "verificationMethod", "vm", "validateJsonSchema", "canonicalAuth", "tenant", "incomingMessage", "didResolver", "authenticate", "authorize", "validateAuthorizationIntegrity", "message", "authorizationPayloadConstraints", "DwnError", "DwnErrorCode", "payloadJson", "Jws", "descriptorCid", "expectedDescriptorCid", "Cid", "allowedProperties", "_a", "customProperties", "propertyName", "jws", "GeneralJwsVerifier", "init_shim", "validateProtocolUrlNormalized", "url", "normalized", "normalizeProtocolUrl", "DwnError", "DwnErrorCode", "normalizeUrl", "validateSchemaUrlNormalized", "normalizeSchemaUrl", "fullUrl", "result", "removeTrailingSlash", "str", "DateSort", "RecordsQuery", "Message", "message", "validateAuthorizationIntegrity", "validateProtocolUrlNormalized", "validateSchemaUrlNormalized", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "getCurrentTimeInHighPrecision", "removeUndefinedProperties", "authorizationSignatureInput", "authorization", "filter", "filterCopy", "dateCreated", "rangeFilter", "protocol", "normalizeProtocolUrl", "schema", "normalizeSchemaUrl", "import_readable_stream", "DataStream", "readableStream", "resolve", "reject", "chunks", "chunk", "uint8Array", "arrayOfBytes", "totalLength", "accumulatedValue", "currentValue", "result", "length", "bytes", "currentIndex", "_size", "object", "Encoder", "KeyDerivationScheme", "import_varint", "init_shim", "Did", "did", "secondColonIndex", "DidKeyResolver", "did", "multicodecHeaderSize", "currentByte", "_scheme", "_method", "id", "idBytes", "base58btc", "multicodec", "varint", "multicodecSize", "publicKeyBytes", "keySpecificContext", "publicJwk", "ed25519", "Secp256k1", "keyId", "privateJwk", "ed25519Multicodec", "Encoder", "methodSpecificId", "Did", "import_cross_fetch", "fetch", "_a", "crossFetch", "DidIonResolver", "resolutionEndpoint", "did", "resolutionUrl", "response", "DidResolver", "resolvers", "cache", "MemoryCache", "DidIonResolver", "DidKeyResolver", "resolver", "did", "Did", "didMethod", "didResolver", "cachedResolutionResult", "resolutionResult", "didDocument", "didResolutionMetadata", "error", "errMsg", "key", "value", "_a", "_c", "_b", "init_shim", "createError", "message", "err", "ENCODING", "ENCODING_LEN", "TIME_MAX", "TIME_LEN", "RANDOM_LEN", "replaceCharAt", "str", "index", "char", "incrementBase32", "done", "charIndex", "maxCharIndex", "randomChar", "prng", "rand", "encodeTime", "now", "len", "mod", "encodeRandom", "detectPrng", "allowInsecure", "root", "browserCrypto", "buffer", "nodeCrypto", "createError", "factory", "currPrng", "seedTime", "encodeTime", "TIME_LEN", "encodeRandom", "RANDOM_LEN", "monotonicFactory", "lastTime", "lastRandom", "incrementedRandom", "incrementBase32", "newRandom", "ulid", "WATERMARKS_SUBLEVEL_NAME", "CIDS_SUBLEVEL_NAME", "EventLogLevel", "config", "createLevelDatabase", "LevelWrapper", "monotonicFactory", "tenant", "messageCid", "tenantEventLog", "watermarkLog", "cidLog", "watermark", "options", "events", "_b", "__asyncValues", "_c", "key", "value", "event", "cids", "ops", "promises", "cid", "promise", "e", "numEventsDeleted", "watermarks", "_a", "EventsGet", "Message", "message", "validateAuthorizationIntegrity", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "authorization", "init_shim", "messageReplyFromError", "e", "code", "detail", "EventsGetHandler", "didResolver", "eventLog", "tenant", "message", "eventsGet", "EventsGet", "e", "messageReplyFromError", "authenticate", "authorize", "options", "events", "init_shim", "DwnConstant", "MessagesGet", "Message", "message", "validateAuthorizationIntegrity", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "authorization", "messageCids", "cid", "Cid", "MessagesGetHandler", "didResolver", "messageStore", "dataStore", "tenant", "message", "messagesGet", "MessagesGet", "e", "messageReplyFromError", "authenticate", "authorize", "promises", "messageCids", "messageCid", "promise", "_", "messages", "entry", "messageInterface", "method", "DwnInterfaceName", "DwnMethodName", "recordsWrite", "dataCid", "dataSize", "DwnConstant", "Message", "result", "dataBytes", "DataStream", "Encoder", "init_shim", "readonly", "enumerable", "configurable", "linksWithin", "path", "value", "index", "element", "elementPath", "cid", "CID", "links", "source", "base", "key", "treeWithin", "tree", "get", "node", "part", "Block", "bytes", "encode", "codec", "hasher", "hash", "decode", "IndexLevel", "config", "createLevelDatabase", "LevelWrapper", "dataId", "indexes", "options", "flatten", "operations", "propertyName", "propertyValue", "key", "filter", "propertyNameToPromises", "propertyFilter", "exactMatchesPromise", "rangeMatchesPromise", "missingPropertyMatchesForId", "matchedIDs", "promises", "promise", "_a", "serializedIndexes", "ops", "propertyValuePrefix", "iteratorOptions", "matches", "_b", "__asyncValues", "_c", "rangeFilter", "comparator", "comparatorName", "value", "values", "MessageStoreLevel", "config", "createLevelDatabase", "BlockstoreLevel", "IndexLevel", "tenant", "cidString", "options", "_a", "partition", "executeUnlessAborted", "cid", "CID", "bytes", "decode", "src_exports", "sha256", "filter", "messages", "resultIds", "id", "message", "indexes", "encodedMessageBlock", "encode", "encodedMessageBlockCid", "indexDocument", "_b", "_d", "_c", "PermissionsGrant", "Message", "message", "validateAuthorizationIntegrity", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "getCurrentTimeInHighPrecision", "removeUndefinedProperties", "authorization", "permissionsRequest", "authorizationSignatureInput", "overrides", "_b", "_c", "_d", "_e", "_f", "grantedBy", "grantedFor", "DwnError", "DwnErrorCode", "PermissionsGrantHandler", "didResolver", "messageStore", "eventLog", "tenant", "message", "permissionsGrant", "PermissionsGrant", "e", "messageReplyFromError", "authenticate", "_a", "scope", "conditions", "propertiesToIndex", "__rest", "indexes", "messageCid", "Message", "PermissionsRequest", "Message", "message", "validateAuthorizationIntegrity", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "getCurrentTimeInHighPrecision", "removeUndefinedProperties", "auth", "PermissionsRequestHandler", "didResolver", "messageStore", "eventLog", "tenant", "message", "permissionsRequest", "PermissionsRequest", "e", "messageReplyFromError", "authenticate", "_a", "scope", "conditions", "propertiesToIndex", "__rest", "indexes", "messageCid", "Message", "ProtocolsConfigure", "Message", "message", "validateAuthorizationIntegrity", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "getCurrentTimeInHighPrecision", "authorization", "definition", "protocol", "types", "validateProtocolUrlNormalized", "typeName", "schema", "validateSchemaUrlNormalized", "typesCopy", "normalizeSchemaUrl", "normalizeProtocolUrl", "ProtocolsConfigureHandler", "didResolver", "messageStore", "dataStore", "eventLog", "tenant", "message", "_dataStream", "protocolsConfigure", "ProtocolsConfigure", "e", "messageReplyFromError", "canonicalAuth", "query", "DwnInterfaceName", "DwnMethodName", "existingMessages", "newestMessage", "Message", "incomingMessageIsNewest", "messageReply", "indexes", "messageCid", "deletedMessageCids", "_a", "definition", "propertiesToIndex", "__rest", "author", "ProtocolsQuery", "Message", "message", "validateAuthorizationIntegrity", "validateProtocolUrlNormalized", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "getCurrentTimeInHighPrecision", "removeUndefinedProperties", "authorization", "filter", "normalizeProtocolUrl", "ProtocolsQueryHandler", "didResolver", "messageStore", "dataStore", "tenant", "message", "protocolsQuery", "ProtocolsQuery", "e", "messageReplyFromError", "canonicalAuth", "query", "DwnInterfaceName", "DwnMethodName", "removeUndefinedProperties", "messages", "entries", "_", "objectWithRemainingProperties", "__rest", "RecordsDelete", "Message", "message", "validateAuthorizationIntegrity", "options", "recordId", "currentTime", "getCurrentTimeInHighPrecision", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "authorization", "tenant", "authorize", "crypto", "eciesjs", "import_readable_stream", "Encryption", "key", "initializationVector", "plaintextStream", "cipher", "cipherStream", "chunk", "encryptedChunk", "finalChunk", "err", "decipher", "decryptedChunk", "uncompressedPublicKey", "plaintext", "publicKey", "plaintextBuffer", "cryptogram", "ephemeralPublicKey", "messageAuthenticationCode", "input", "privateKeyBuffer", "eciesEncryptionOutput", "EncryptionAlgorithm", "init_shim", "ProtocolActor", "ProtocolAction", "methodToAllowedActionMap", "DwnMethodName", "ProtocolAction", "ProtocolAuthorization", "tenant", "incomingMessage", "author", "messageStore", "ancestorMessageChain", "protocolDefinition", "inboundMessageRuleSet", "protocolUri", "query", "DwnInterfaceName", "protocols", "recordsWrite", "recordsRead", "existingMessages", "recordsWriteMessage", "RecordsWrite", "protocol", "contextId", "currentParentId", "parentMessages", "parent", "inboundMessage", "protocolPath", "protocolPathArray", "currentRuleSet", "i", "currentTypeName", "nextRuleSet", "partialProtocolPath", "DwnError", "DwnErrorCode", "declaredProtocolPath", "declaredTypeName", "ancestorProtocolPath", "ancestor", "ancestorTypeName", "actualProtocolPath", "protocolTypes", "typeNames", "typeName", "protocolType", "schema", "dataFormat", "incomingMessageMethod", "inboundMessageAction", "actionRules", "actionRule", "ProtocolActor", "messageForAuthorCheck", "expectedAuthor", "Message", "messageForRecipientCheck", "initialWrite", "authorOfInitialWrite", "expectedAncestors", "expectedDefinitionId", "ancestorMessage", "actualDefinitionId", "Records", "recordsWrite", "ancestorPrivateKey", "cipherStream", "recordId", "contextId", "descriptor", "encryption", "matchingEncryptedKey", "key", "DwnError", "DwnErrorCode", "fullDerivationPath", "leafPrivateKey", "encryptedKeyBytes", "Encoder", "ephemeralPublicKey", "Secp256k1", "keyEncryptionInitializationVector", "messageAuthenticationCode", "dataEncryptionKey", "Encryption", "dataEncryptionInitializationVector", "keyDerivationScheme", "KeyDerivationScheme", "protocolPathSegments", "rootPublicKey", "fullDescendantDerivationPath", "ancestorPublicKeyBytes", "ancestorPrivateKeyDerivationPath", "_a", "subDerivationPath", "ancestorPrivateKeyBytes", "ancestorKeyDerivationPath", "descendantKeyDerivationPath", "ancestorSegment", "descendantSegment", "RecordsWrite", "Message", "message", "validateAuthorizationIntegrity", "recordsWrite", "options", "dataCid", "_a", "Cid", "dataSize", "_b", "currentTime", "getCurrentTimeInHighPrecision", "descriptor", "DwnInterfaceName", "DwnMethodName", "normalizeProtocolUrl", "normalizeSchemaUrl", "_c", "_d", "removeUndefinedProperties", "author", "Jws", "recordId", "_e", "contextId", "descriptorCid", "attestation", "encryption", "authorization", "unsignedMessage", "published", "datePublished", "createOptions", "tenant", "messageStore", "ProtocolAuthorization", "authorize", "dateCreated", "dateModified", "expectedContextId", "expectedAttestationCid", "actualAttestationCid", "expectedEncryptionCid", "actualEncryptionCid", "DwnError", "DwnErrorCode", "validateProtocolUrlNormalized", "validateSchemaUrlNormalized", "payloadJson", "expectedDescriptorCid", "propertyCount", "entryIdInput", "recordsWriteMessage", "encryptionInput", "keyEncryption", "keyEncryptionInput", "fullDerivationPath", "Records", "leafPublicKey", "keyEncryptionOutput", "Encryption", "encryptedKey", "Encoder", "ephemeralPublicKey", "Secp256k1", "keyEncryptionInitializationVector", "messageAuthenticationCode", "encryptedKeyData", "EncryptionAlgorithm", "signatureInputs", "attestationPayload", "attestationPayloadBytes", "GeneralJwsSigner", "signatureInput", "authorizationPayload", "attestationCid", "encryptionCid", "authorizationPayloadBytes", "messages", "existingWriteMessage", "newMessage", "mutableDescriptorProperties", "descriptorPropertyNames", "descriptorPropertyName", "valueInExistingWrite", "valueInNewMessage", "signature", "RecordsWriteHandler", "didResolver", "messageStore", "dataStore", "eventLog", "tenant", "message", "options", "dataStream", "recordsWrite", "RecordsWrite", "e", "messageReplyFromError", "authenticate", "query", "DwnInterfaceName", "existingMessages", "initialWrite", "newestExistingMessage", "Message", "incomingMessageIsNewest", "newestMessage", "indexes", "constructRecordsWriteIndexes", "error", "DwnErrorCode", "messageReply", "StorageController", "result", "messageCid", "DwnMethodName", "DwnError", "associateResult", "isLatestBaseState", "descriptor", "StorageController", "messageStore", "dataStore", "tenant", "filter", "messages", "message", "dataCid", "dataSize", "DwnConstant", "messageCid", "Message", "result", "dataBytes", "DataStream", "Encoder", "DwnMethodName", "recordsWriteMessage", "existingMessages", "comparedToMessage", "eventLog", "deletedMessageCids", "RecordsWrite", "existingRecordsWrite", "indexes", "constructRecordsWriteIndexes", "RecordsDeleteHandler", "didResolver", "messageStore", "dataStore", "eventLog", "tenant", "message", "recordsDelete", "RecordsDelete", "e", "messageReplyFromError", "authenticate", "query", "DwnInterfaceName", "existingMessages", "newestExistingMessage", "RecordsWrite", "incomingMessageIsNewest", "newestMessage", "DwnMethodName", "indexes", "constructIndexes", "messageCid", "Message", "StorageController", "descriptor", "RecordsQueryHandler", "didResolver", "messageStore", "dataStore", "tenant", "message", "recordsQuery", "RecordsQuery", "e", "messageReplyFromError", "authenticate", "records", "sortRecords", "entries", "record", "_", "objectWithRemainingProperties", "__rest", "filter", "DwnInterfaceName", "DwnMethodName", "StorageController", "publishedRecords", "unpublishedRecordsByAuthor", "unpublishedRecordsForQueryAuthor", "recipientFilter", "deduplicatedRecords", "messages", "dateSort", "DateSort", "a", "b", "lexicographicalCompare", "m", "RecordsRead", "Message", "message", "validateAuthorizationIntegrity", "options", "recordId", "authorizationSignatureInput", "currentTime", "getCurrentTimeInHighPrecision", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "authorization", "tenant", "newestRecordsWrite", "messageStore", "ProtocolAuthorization", "RecordsReadHandler", "didResolver", "messageStore", "dataStore", "tenant", "message", "recordsRead", "RecordsRead", "e", "messageReplyFromError", "authenticate", "query", "DwnInterfaceName", "existingMessages", "newestExistingMessage", "RecordsWrite", "DwnMethodName", "newestRecordsWrite", "error", "messageCid", "Message", "result", "_", "recordsWriteWithoutAuthorization", "__rest", "Dwn", "config", "DwnInterfaceName", "DwnMethodName", "EventsGetHandler", "MessagesGetHandler", "PermissionsGrantHandler", "PermissionsRequestHandler", "ProtocolsConfigureHandler", "ProtocolsQueryHandler", "RecordsDeleteHandler", "RecordsQueryHandler", "RecordsReadHandler", "RecordsWriteHandler", "_a", "DidResolver", "_b", "AllowAllTenantGate", "_c", "MessageStoreLevel", "_d", "DataStoreLevel", "_e", "EventLogLevel", "dwn", "tenant", "rawMessage", "dataStream", "errorMessageReply", "handlerKey", "message", "options", "expectedInterface", "expectedMethod", "dwnInterface", "dwnMethod", "Message", "error", "messageReplyFromError", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "ErrorCode_default", "init_shim", "IonError", "code", "message", "init_shim", "init_shim", "init_shim", "init_shim", "empty", "init_shim", "Encoder", "name", "prefix", "baseEncode", "bytes", "Decoder", "baseDecode", "text", "decoder", "or", "ComposedDecoder", "decoders", "input", "left", "right", "Codec", "from", "encode", "decode", "decode", "string", "alphabet", "bitsPerChar", "name", "codes", "i", "end", "out", "bits", "buffer", "written", "value", "encode", "data", "pad", "mask", "rfc4648", "prefix", "from", "input", "base64", "rfc4648", "base64pad", "base64url", "base64urlpad", "Encoder", "content", "base64url", "encodedContent", "inputContextForErrorLogging", "IonError", "ErrorCode_default", "rawBytes", "input", "URI", "init_shim", "init_shim", "OperationKeyType", "OperationKeyType_default", "InputValidator", "operationKeyJwk", "operationKeyType", "allowedProperties", "OperationKeyType_default", "property", "IonError", "ErrorCode_default", "id", "Encoder", "purposes", "processedPurposes", "purpose", "init_shim", "IonSdkConfig", "init_shim", "canonicalize", "JsonCanonicalizer", "content", "contentWithoutUndefinedProperties", "canonicalizedString", "Encoder", "key", "multihashes", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "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", "encodeTo", "int", "target", "offset", "varint_default", "encodingLength", "create", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "Digest", "Digest", "code", "size", "digest", "bytes", "from", "name", "code", "encode", "Hasher", "input", "result", "create", "digest", "sha", "name", "data", "sha256", "from", "sha512", "Multihash", "content", "hashAlgorithmInMultihashCode", "conventionalHash", "hash", "sha256", "IonError", "ErrorCode_default", "canonicalizedStringBytes", "JsonCanonicalizer", "contentBytes", "intermediateHashBytes", "multihashBytes", "Encoder", "encodedMultihash", "inputContextForErrorLogging", "multihash", "IonSdkConfig", "init_shim", "OperationType", "OperationType_default", "init_shim", "PatchAction", "PatchAction_default", "IonRequest", "input", "recoveryKey", "updateKey", "didDocumentKeys", "services", "InputValidator", "OperationKeyType_default", "hashAlgorithmInMultihashCode", "IonSdkConfig", "patches", "PatchAction_default", "delta", "Multihash", "suffixData", "OperationType_default", "revealValue", "dataToBeSigned", "compactJws", "nextUpdateCommitmentHash", "deltaHash", "id", "servicesToAdd", "patch", "idsOfServicesToRemove", "publicKeysToAdd", "idsOfPublicKeysToRemove", "didSuffix", "publicKeys", "publicKeyIdSet", "publicKey", "IonError", "ErrorCode_default", "serviceIdSet", "service", "maxTypeLength", "errorMessage", "deltaBytes", "JsonCanonicalizer", "IonDid", "input", "createRequest", "IonRequest", "didUniqueSuffix", "shortFormDid", "IonSdkConfig", "initialState", "canonicalizedInitialStateBytes", "JsonCanonicalizer", "encodedCanonicalizedInitialStateString", "Encoder", "suffixData", "canonicalizedStringBytes", "multihash", "Multihash", "IonKey", "input", "id", "purposes", "InputValidator", "publicKey", "privateKey", "publicKeyModel", "privateKeyBytes", "utils", "compressedPublicKeyBytes", "getPublicKey", "compressedPublicKeyHex", "etc", "uncompressedPublicKeyBytes", "Point", "d", "base64url", "x", "y", "publicJwk", "privateJwk", "privateKeyHex", "publicKeyBytes", "getPublicKeyAsync", "key", "init_shim", "IonNetwork", "init_shim", "IonPublicKeyPurpose", "LocalSigner", "privateKey", "InputValidator", "OperationKeyType_default", "header", "content", "headerString", "headerBytes", "Encoder", "encodedHeader", "base64url", "payloadString", "payloadBytes", "encodedPayload", "signingContentString", "signingContentBytes", "contentHash", "sha256", "privateKeyBytes", "signatureBytes", "signAsync", "encodedSignature", "init_shim", "import_cross_fetch", "import_ion_pow_sdk", "init_shim", "init_shim", "init_shim", "init_shim", "empty", "init_shim", "Encoder", "name", "prefix", "baseEncode", "bytes", "Decoder", "baseDecode", "text", "decoder", "or", "ComposedDecoder", "decoders", "input", "left", "right", "Codec", "from", "encode", "decode", "decode", "string", "alphabet", "bitsPerChar", "name", "codes", "i", "end", "out", "bits", "buffer", "written", "value", "encode", "data", "pad", "mask", "rfc4648", "prefix", "from", "input", "base64", "rfc4648", "base64pad", "base64url", "base64urlpad", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "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", "encodeTo", "int", "target", "offset", "varint_default", "encodingLength", "create", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "Digest", "Digest", "code", "size", "digest", "bytes", "from", "name", "code", "encode", "Hasher", "input", "result", "create", "digest", "sha", "name", "data", "sha256", "from", "sha512", "fetch", "crossFetch", "keyGenerators", "IonKey", "generateKeyPair", "type", "keyGeneratorFn", "publicJwk", "privateJwk", "DID", "#ops", "#opQueue", "#longForm", "#longFormPromise", "#generateKeyPair", "options", "generateKeyPair", "type", "content", "commit", "#addToOpQueue", "#generateOperation", "callback", "opQueue", "resolve", "reject", "lastOp", "op", "last", "payload", "IonRequest", "LocalSigner", "index", "shortForm", "longForm", "ops", "form", "create", "IonDid", "import_tweetnacl", "import_ed2curve", "ed25519_exports", "__export", "deriveX25519KeyPair", "generateKeyPair", "keyPairToJwk", "sign", "verify", "utils_exports", "MULTICODEC_HEADERS", "base64UrlToBytes", "bytesToBase58btcMultibase", "bytesToBase64Url", "bytes", "base64url", "base64urlString", "header", "multibaseBytes", "base58btc", "ed25519KeyPair", "nacl", "x25519KeyPair", "ed2curve", "keyPair", "kid", "overrides", "jwk", "encodedPublicKey", "publicKeyJwk", "__spreadProps", "__spreadValues", "encodedSecretKey", "privateKeyJwk", "options", "payload", "privateKeyBytes", "__async", "signature", "publicKeyBytes", "signedData", "DidIonApi", "resolutionEndpoint", "__async", "options", "_a", "_b", "generateKeyPair", "didOptions", "key", "publicKey", "__spreadValues", "did", "DID", "didState", "didDocument", "verificationMethod", "purpose", "service", "serviceEntry", "keys", "keyOption", "resolutionUrl", "response", "dwnUrls", "utils_exports", "__export", "DID_REGEX", "createVerificationMethodWithPrivateKeyJwk", "getServices", "parseDid", "didString", "method", "id", "keyPairJwk", "publicKeyJwk", "privateKeyJwk", "didKeyResolver", "DidKeyResolver", "DidKeyApi", "_options", "verificationKeyPair", "ed25519_exports", "keyAgreementKeyPair", "verificationKeyId", "keyAgreementKeyId", "verificationJwkPair", "verificationKey", "keyAgreementJwkPair", "keyAgreementKey", "nopCache", "_key", "_value", "DidResolver", "methodResolver", "resolver", "cachedResolution", "didResolutionResult", "import_level", "import_flat", "init_shim", "init_shim", "getRandomValues", "rnds8", "rng", "init_shim", "byteToHex", "i", "unsafeStringify", "arr", "offset", "init_shim", "init_shim", "randomUUID", "native_default", "v4", "options", "buf", "offset", "native_default", "rnds", "rng", "i", "unsafeStringify", "v4_default", "createJsonRpcRequest", "id", "method", "params", "parseJson", "text", "import_readable_web_to_node_stream", "import_level", "flatten", "flat", "ProfileIndex", "location", "id", "__async", "ops", "keyPrefixes", "keyPrefix", "op", "record", "flattenedRecord", "property", "propVal", "key", "filter", "matches", "promises", "propertyName", "propertyValue", "value", "promise", "numFilters", "docIds", "docId", "iteratorOptions", "iter", "__forAwait", "more", "temp", "error", "doc", "k", "val", "range", "inequality", "_ProfileStore", "options", "__spreadValues", "Level", "entry", "e", "results", "profiles", "serializedProfiles", "serializedProfile", "ProfileStore", "ProfileApi", "store", "_a", "profile", "_transportClients", "DwnRpcClient", "clients", "__privateAdd", "__privateSet", "HttpDwnRpcClient", "client", "transportScheme", "__privateGet", "request", "url", "transportClient", "requestId", "v4_default", "jsonRpcRequest", "createJsonRpcRequest", "fetchOpts", "resp", "dwnRpcResponse", "dataStream", "headers", "jsonRpcResponse", "parseJson", "responseBody", "code", "message", "reply", "blobToIsomorphicNodeReadable", "blob", "webReadableToIsomorphicNodeReadable", "webReadable", "dwnMessageCreators", "DwnInterfaceName", "DwnMethodName", "EventsGet", "MessagesGet", "RecordsRead", "RecordsQuery", "RecordsWrite", "RecordsDelete", "ProtocolsQuery", "ProtocolsConfigure", "_getDwnMessage", "getDwnMessage_fn", "_constructDwnMessage", "constructDwnMessage_fn", "_getAuthorSignatureInput", "getAuthorSignatureInput_fn", "_Web5UserAgent", "Dwn", "DidResolver", "DidIonApi", "DidKeyApi", "__privateMethod", "Message", "dwnRpcRequest", "messageData", "data", "didResolution", "service", "utils_exports", "serviceEndpoint", "nodes", "dwnReply", "errorMessages", "node", "Web5UserAgent", "author", "messageType", "messageCid", "dwnSignatureInput", "messagesGet", "result", "messageEntry", "dwnMessage", "encodedData", "dataBytes", "Encoder", "recordsRead", "detail", "DataStream", "readableStream", "messageOptions", "isomorphicNodeReadable", "forCid", "forProcessMessage", "Cid", "messageCreateInput", "__spreadProps", "authorDid", "keys", "privateKeyJwk", "kidFragment", "kid", "_db", "_dwn", "_didResolver", "_profileManager", "_dwnRpcClient", "_defaultOptions", "_messageExists", "messageExists_fn", "_addMessage", "addMessage_fn", "_getMessageStore", "getMessageStore_fn", "_getWatermarkStore", "getWatermarkStore_fn", "_getPushQueue", "getPushQueue_fn", "_getPullQueue", "getPullQueue_fn", "_getDwnMessageType", "getDwnMessageType_fn", "_SyncApi", "did", "profileDids", "syncStates", "didDocument", "didUtils", "watermark", "syncState", "signatureInput", "eventsGet", "eventsReply", "putOps", "event", "putOp", "dwnUrl", "events", "pushQueue", "pushJobs", "errored", "delOps", "job", "pullOps", "pullOp", "pullQueue", "pullJobs", "recordsReadReply", "pruneReply", "pullReply", "direction", "wmKey", "watermarkStore", "SyncApi", "messageStore", "hashedKey", "itr", "init_shim", "VcApi", "#agent", "#connectedDid", "agent", "connectedDid", "init_shim", "init_shim", "import_readable_web_to_node_stream", "init_shim", "textDecoder", "dataToBlob", "data", "dataFormat", "dataBlob", "detectedType", "toType", "dataBytes", "Encoder", "isEmptyObject", "obj", "getRandomInt", "min", "max", "toType", "obj", "_attestation", "_contextId", "_descriptor", "_encodedData", "_encryption", "_readableStream", "_recordId", "_web5Agent", "_setDeletedStatus", "setDeletedStatus_fn", "_verifyPermittedMutation", "verifyPermittedMutation_fn", "_Record", "web5Agent", "options", "__privateAdd", "__privateSet", "__privateGet", "DwnInterfaceName", "DwnMethodName", "response", "reply", "error", "dataBytes", "Encoder", "dataBlob", "self", "dataObj", "DataStream", "callbacks", "callback", "agentResponse", "status", "__privateMethod", "target", "str", "_a", "updateMessage", "dataToBlob", "mutableDescriptorProperties", "messageOptions", "message", "responseMessage", "property", "stream", "Record", "propertiesToMutate", "init_shim", "Protocol", "#metadata", "#web5Agent", "#protocolsConfigureMessage", "web5Agent", "protocolsConfigureMessage", "metadata", "target", "reply", "DwnApi", "web5Agent", "connectedDid", "request", "agentResponse", "DwnInterfaceName", "DwnMethodName", "message", "messageCid", "status", "response", "metadata", "Protocol", "entries", "entry", "inheritedAuthor", "inheritedProperties", "isEmptyObject", "agentRequest", "recordOptions", "Record", "responseRecord", "record", "messageOptions", "dataBlob", "dataFormat", "dataToBlob", "responseMessage", "init_shim", "DidApi", "options", "didMethodApis", "cache", "DidResolver", "methodApi", "method", "didMethodCreator", "did", "_resolver", "_creator", "init_shim", "import_level", "AppStorage", "location", "key", "e", "value", "init_shim", "import_ms", "import_level", "_defaultOptions", "_DidResolutionCache", "options", "__privateGet", "ms", "did", "str", "cacheWrapper", "e", "value", "DidResolutionCache", "__privateAdd", "_connectedDid", "_enqueueNextSync", "enqueueNextSync_fn", "_Web5", "options", "__privateAdd", "__privateSet", "DwnApi", "__privateGet", "VcApi", "AppStorage", "_a", "appStorage", "cachedAppDidState", "appDidState", "profileApi", "ProfileApi", "profile", "DidApi", "DidIonApi", "DidKeyApi", "DidResolutionCache", "dwn", "Dwn", "syncManager", "SyncApi", "dwnUrls", "ionCreateOptions", "defaultProfileDid", "agent", "Web5UserAgent", "connectedDid", "web5", "__privateMethod", "ms", "response", "e", "didDoc", "service", "utils_exports", "nodes", "numNodesToAllocate", "attempts", "nodeIdx", "getRandomInt", "dwnUrl", "Web5", "delay"]
}
